Compare commits

...

15 commits

62 changed files with 565 additions and 311 deletions

2
.gitattributes vendored Normal file
View file

@ -0,0 +1,2 @@
*.fish text eol=lf
*.sh text eol=lf

View file

@ -34,9 +34,8 @@
}; };
})) // { })) // {
valhalla = { valhalla = {
"DerGeret Windows" = import ./profiles/DerGeret/config.nix; DerGeret = import ./profiles/machines/manuel/DerGeret/Arch/config.nix;
"der-geret Arch Linux" = import ./profiles/DerGeret/Arch/config.nix; ManuSurface = import ./profiles/machines/manuel/ManuSurface/Arch/config.nix;
"manu-surface Arch Linux" = import ./profiles/ManuSurface/Arch/config.nix;
}; };
}; };
} }

15
lib/eval-attribute.nix Normal file
View file

@ -0,0 +1,15 @@
let
inherit (nixpkgs) lib;
nixpkgs = import <nixpkgs> { config = {}; overlay = []; };
property = (builtins.getEnv "PROPERTY");
processor = if (builtins.stringLength property > 0)
then
(_: lib.attrsets.getAttrFromPath (lib.strings.splitString "." property) _)
else
(_: _);
in
_: processor (lib.evalModules {
modules = [
_
];
}).config

View file

@ -1,19 +0,0 @@
#!/bin/bash -e
function install() {
function installDrivers() {
. "../../../scripts/Arch/Config/SecureBoot/install.sh";
. "../../../scripts/Arch/Software/nvidia-dkms/install.sh";
. "../../../scripts/Arch/Software/xone/install.sh";
. "../../../scripts/Arch/Software/bt-dualboot/install.sh";
}
function initializeConfig() {
. "../../../scripts/Unix/Devices/Logitech G903/install.sh";
}
pushd "$dir" > /dev/null;
. "../../../scripts/Arch/OS/install.sh";
popd > /dev/null;
}
install;

View file

@ -1,6 +0,0 @@
#!/bin/pwsh
$env:WIN_COMPUTER_NAME = "DerGeret";
$env:SETUP_SCRIPT_NAME = "$PSScriptRoot/Restore.ps1";
$env:CONFIG_MODULE = "$PSScriptRoot/../config.nix";
. "$PSScriptRoot/../../../scripts/Windows/OS/Setup.ps1";

View file

@ -1,13 +0,0 @@
#!/bin/pwsh
. "$PSScriptRoot/../../../scripts/Common/Scripts/Context.ps1";
. "$PSScriptRoot/../../../scripts/Windows/OS/Manage.ps1";
. "$PSScriptRoot/../../../scripts/Windows/Collections/Generic.ps1"
function Restore-Apps {
param([Context] $context)
Restore-GenericApps $context;
}
[Context]$context = [Context]::new();
Invoke-WindowsInstallation $context;
Restart-Computer -Force;

View file

@ -1,6 +0,0 @@
#!/bin/pwsh
$env:WIN_COMPUTER_NAME ??= "win11";
$env:SETUP_SCRIPT_NAME ??= "$PSScriptRoot/Install.ps1";
$env:CONFIG_MODULE ??= "$PSScriptRoot/../config.nix";
. "$PSScriptRoot/../../../scripts/Windows/OS/Setup.ps1";

View file

@ -1,4 +0,0 @@
#!/bin/pwsh
$env:SETUP_SCRIPT_NAME ??= "$PSScriptRoot/Install.ps1";
. "$PSScriptRoot/../../Generic/Windows/Setup.ps1";

View file

@ -1,5 +0,0 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../../scripts/Arch/OS/install.fish"
end

View file

@ -1,26 +0,0 @@
#!/bin/bash -e
function install() {
function installDrivers() {
. "../../../scripts/Arch/Config/SecureBoot/install.sh";
. "../../../scripts/Arch/Drivers/SurfaceBook2/install.sh";
}
function installSoftware() {
. "../../../scripts/Arch/Collections/school.sh";
}
function initializeConfig() {
. "../../../scripts/Common/Config/Steam/hidpi.sh";
. "../../../scripts/Unix/Devices/Surface Book 2/install.sh";
. "../../../scripts/Unix/Devices/Logitech G903/install.sh";
# Because, as it looks, Surface Books are fucking stupid.
. "../../../scripts/Common/Config/GRUB/verbose.sh";
}
pushd "${BASH_SOURCE%/*}" > /dev/null;
. "../../../scripts/Arch/OS/install.sh";
popd > /dev/null;
}
install;

View file

@ -1,16 +0,0 @@
#!/bin/bash
pushd "${BASH_SOURCE%/*}" > /dev/null;
# Set Hostname
sudo hostnamectl set-hostname ManuSurface;
source "../../../scripts/PopOS/Scripts/preinstall.sh";
source "../../../scripts/PopOS/OS/install.sh";
source "../../../scripts/Debian/Drivers/SurfaceBook2/Setup/install.sh";
source "../../../scripts/PopOS/Software/Collections/school.sh";
INSTALL_FONTS=1 NEXTCLOUD_DIR="${NEXTCLOUD_DIR}" source "../../../scripts/Common/Config/UserProfile/install.sh";
# Install equalizer
source "../../../scripts/Common/Config/EasyEffects/SurfaceBook2/install.sh";
source "../../../scripts/PopOS/Scripts/postinstall.sh";
popd > /dev/null;

View file

@ -1,12 +0,0 @@
#!/bin/bash
pushd "${BASH_SOURCE%/*}" > /dev/null;
# Set Hostname
sudo hostnamectl set-hostname ManuPopOSLive;
source "../../scripts/PopOS/Scripts/prepare.sh";
source "../../scripts/PopOS/OS/install.sh";
source "../../scripts/PopOS/Software/Collections/personal.sh";
INSTALL_FONTS=1 NEXTCLOUD_DIR="${NEXTCLOUD_DIR}" source "../../scripts/Common/Config/UserProfile/personal.sh";
source "../../scripts/PopOS/Scripts/postinstall.sh";
popd > /dev/null;

View file

@ -0,0 +1,19 @@
#!/bin/bash -e
function install() {
function installDrivers() {
. "../../../../../scripts/Arch/Config/SecureBoot/install.sh";
. "../../../../../scripts/Arch/Software/nvidia-dkms/install.sh";
. "../../../../../scripts/Arch/Software/xone/install.sh";
. "../../../../../scripts/Arch/Software/bt-dualboot/install.sh";
}
function initializeConfig() {
. "../../../../../scripts/Unix/Devices/Logitech G903/install.sh";
}
pushd "$dir" > /dev/null;
. "../../../../../scripts/Arch/OS/install.sh";
popd > /dev/null;
}
install;

View file

@ -6,8 +6,8 @@ begin
echo "$dir/install.fish" echo "$dir/install.fish"
end end
CONFIG_MODULE="$dir/config.nix" \ CONFIG_NAME="DerGeret" \
ARCH_HOSTNAME="der-geret" \ ARCH_HOSTNAME="der-geret" \
USER_DISPLAYNAME="Manuel Thalmann" \ USER_DISPLAYNAME="Manuel Thalmann" \
source "$(status dirname)/../../../scripts/Arch/OS/setup.fish" source "$(status dirname)/../../../../../scripts/Arch/OS/setup.fish"
end end

View file

@ -4,6 +4,6 @@ pushd "${BASH_SOURCE%/*}" > /dev/null;
CONFIG_MODULE="./config.nix" \ CONFIG_MODULE="./config.nix" \
ARCH_HOSTNAME="der-geret" \ ARCH_HOSTNAME="der-geret" \
USER_DISPLAYNAME="Manuel Thalmann" \ USER_DISPLAYNAME="Manuel Thalmann" \
. "../../../scripts/Arch/OS/setup.sh"; . "../../../../../scripts/Arch/OS/setup.sh";
popd > /dev/null; popd > /dev/null;

View file

@ -1,7 +1,7 @@
#!/bin/pwsh #!/bin/pwsh
$null = New-Module { $null = New-Module {
. "$PSScriptRoot/../../../scripts/Common/Scripts/Context.ps1"; . "$PSScriptRoot/../../../../../scripts/Common/Scripts/Context.ps1";
. "$PSScriptRoot/../../../scripts/Windows/OS/Legacy.ps1"; . "$PSScriptRoot/../../../../../scripts/Windows/OS/Legacy.ps1";
Write-Host "Starting Backup of Windows"; Write-Host "Starting Backup of Windows";
$context = [Context]::new(); $context = [Context]::new();

View file

@ -1,12 +1,12 @@
#!/bin/pwsh #!/bin/pwsh
. "$PSScriptRoot/../../../scripts/Common/Scripts/Context.ps1"; . "$PSScriptRoot/../../../../../scripts/Common/Scripts/Context.ps1";
function Install-PortValhallaDrivers { function Install-PortValhallaDrivers {
param( param(
[Context] $context [Context] $context
) )
$winPath = "$PSScriptRoot/../../../scripts/Windows"; $winPath = "$PSScriptRoot/../../../../../scripts/Windows";
$driverPath = "$winPath/Drivers"; $driverPath = "$winPath/Drivers";
$mbDriverPath = "$driverPath/ROG Zenith Extreme Alpha"; $mbDriverPath = "$driverPath/ROG Zenith Extreme Alpha";
$context.RegisterReboot(); $context.RegisterReboot();
@ -38,7 +38,7 @@ function Install-PersonalDrivers {
[Context] $context [Context] $context
) )
$softwarePath = "$PSScriptRoot/../../../scripts/Windows/Software"; $softwarePath = "$PSScriptRoot/../../../../../scripts/Windows/Software";
. "$softwarePath/TobiiGhost/Install.ps1" $context; . "$softwarePath/TobiiGhost/Install.ps1" $context;
. "$softwarePath/TobiiGameHub/Install.ps1" $context; . "$softwarePath/TobiiGameHub/Install.ps1" $context;
} }

View file

@ -1,8 +1,8 @@
#!/bin/pwsh #!/bin/pwsh
. "$PSScriptRoot/Drivers.ps1"; . "$PSScriptRoot/Drivers.ps1";
. "$PSScriptRoot/../../../scripts/Common/Scripts/Context.ps1"; . "$PSScriptRoot/../../../../../scripts/Common/Scripts/Context.ps1";
. "$PSScriptRoot/../../../scripts/Windows/Collections/Personal.ps1" . "$PSScriptRoot/../../../../../scripts/Windows/Collections/Personal.ps1"
. "$PSScriptRoot/../../../scripts/Windows/OS/Manage.ps1"; . "$PSScriptRoot/../../../../../scripts/Windows/OS/Manage.ps1";
function Initialize-Configuration { function Initialize-Configuration {
# Fix synchronization between Linux and Windows clock # Fix synchronization between Linux and Windows clock

View file

@ -0,0 +1,5 @@
#!/bin/pwsh
$env:WIN_COMPUTER_NAME = "DerGeret";
$env:CONFIG_NAME = $env:WIN_COMPUTER_NAME;
. "$PSScriptRoot/../../../../../scripts/Windows/OS/Setup.ps1";

View file

@ -1,9 +1,9 @@
{ ... }: { { ... }: {
imports = [ imports = [
../Generic/config.nix ../defaults.nix
]; ];
config = { config = {
valhalla = { valhalla = {
windows = { windows = {
dualboot = { dualboot = {

View file

@ -3,11 +3,11 @@ function install() {
local dir="$(realpath "${BASH_SOURCE%/*}")"; local dir="$(realpath "${BASH_SOURCE%/*}")";
function installDrivers() { function installDrivers() {
. "$dir/../../../scripts/Arch/Config/SecureBoot/install.sh"; . "$dir/../../../../../scripts/Arch/Config/SecureBoot/install.sh";
} }
. "../../../scripts/Arch/OS/install.sh"; . "../../../../../scripts/Arch/OS/install.sh";
} }
install; install;

View file

@ -4,6 +4,6 @@ pushd "${BASH_SOURCE%/*}" > /dev/null;
ARCH_MOUNT_ROOT="/mnt" \ ARCH_MOUNT_ROOT="/mnt" \
ARCH_HOSTNAME="archlinux" \ ARCH_HOSTNAME="archlinux" \
USER_DISPLAYNAME="Manuel Thalmann" \ USER_DISPLAYNAME="Manuel Thalmann" \
. "../../../scripts/Arch/OS/setup.sh"; . "../../../../../scripts/Arch/OS/setup.sh";
popd > /dev/null; popd > /dev/null;

View file

@ -0,0 +1,13 @@
#!/bin/pwsh
. "$PSScriptRoot/../../../../../scripts/Common/Scripts/Context.ps1";
. "$PSScriptRoot/../../../../../scripts/Windows/OS/Manage.ps1";
. "$PSScriptRoot/../../../../../scripts/Windows/Collections/Generic.ps1"
function Restore-Apps {
param([Context] $context)
Restore-GenericApps $context;
}
[Context]$context = [Context]::new();
Invoke-WindowsInstallation $context;
Restart-Computer -Force;

View file

@ -0,0 +1,5 @@
#!/bin/pwsh
$env:WIN_COMPUTER_NAME ??= "win11";
$env:CONFIG_MODULE ??= "$PSScriptRoot/../config.nix";
. "$PSScriptRoot/../../../../../scripts/Windows/OS/Setup.ps1";

View file

@ -1,10 +1,9 @@
{ lib, config, ... }: { lib, config, ... }:
let let
fs = import ../../lib/modules/partition/fs.nix; fs = import ../../../../lib/modules/partition/fs.nix;
in { in {
imports = [ imports = [
../manuel/config.nix ../defaults.nix
../../lib/modules/valhalla.nix
]; ];
config = { config = {
@ -36,53 +35,6 @@
}; };
}; };
users = {
manuel = {
displayName = "Manuel Thalmann";
mailAddress = "m@nuth.ch";
};
};
linux.users.manuel = {
defaultShell = "fish";
groups = [
"wheel"
"nix-users"
];
rclone = {
configurations = {
nextcloud = {
dirName = "Nextcloud";
};
proton = {
dirName = "Proton";
};
};
};
};
windows.users.manuel = {
nextcloud = {
folderSyncs =
let
localPath = "C:/tools/RetroArch-Win64";
remotePath = "/Saved Games/RetroArch";
in [
{
remotePath = "${remotePath}/Saves";
localPath = "${localPath}/saves";
virtualFiles = false;
}
{
remotePath = "${remotePath}/System";
localPath = "${localPath}/system";
}
];
};
};
timeZone = "Europe/Zurich"; timeZone = "Europe/Zurich";
keyMap = "de_CH-latin1"; keyMap = "de_CH-latin1";
keyboardLayout = "ch"; keyboardLayout = "ch";

View file

@ -14,4 +14,4 @@ function Install-PortValhallaDrivers {
choco install -y spice-agent; choco install -y spice-agent;
} }
. "$PSScriptRoot/../../Generic/Windows/Install.ps1"; . "$PSScriptRoot/../../../../Generic/Windows/Install.ps1";

View file

@ -0,0 +1,2 @@
#!/bin/pwsh
. "$PSScriptRoot/../../../../Generic/Windows/Setup.ps1";

View file

@ -0,0 +1,5 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../../../../scripts/Arch/OS/install.fish"
end

View file

@ -0,0 +1,26 @@
#!/bin/bash -e
function install() {
function installDrivers() {
. "../../../../../scripts/Arch/Config/SecureBoot/install.sh";
. "../../../../../scripts/Arch/Drivers/SurfaceBook2/install.sh";
}
function installSoftware() {
. "../../../../../scripts/Arch/Collections/school.sh";
}
function initializeConfig() {
. "../../../../../scripts/Common/Config/Steam/hidpi.sh";
. "../../../../../scripts/Unix/Devices/Surface Book 2/install.sh";
. "../../../../../scripts/Unix/Devices/Logitech G903/install.sh";
# Because, as it looks, Surface Books are fucking stupid.
. "../../../../../scripts/Common/Config/GRUB/verbose.sh";
}
pushd "${BASH_SOURCE%/*}" > /dev/null;
. "../../../../../scripts/Arch/OS/install.sh";
popd > /dev/null;
}
install;

View file

@ -3,7 +3,7 @@ begin
set -l dir (status dirname) set -l dir (status dirname)
function installDrivers -V dir -S function installDrivers -V dir -S
source "$dir/../../../scripts/Common/Scripts/config.fish" source "$dir/../../../../../scripts/Common/Scripts/config.fish"
pacstrap -K (getConfig valhalla.partition.rootDir) linux-firmware-marvell; pacstrap -K (getConfig valhalla.partition.rootDir) linux-firmware-marvell;
end end
@ -11,8 +11,8 @@ begin
echo "$dir/install.fish" echo "$dir/install.fish"
end end
CONFIG_MODULE="$(status dirname)/config.nix" \ CONFIG_NAME="ManuSurface" \
ARCH_HOSTNAME="manu-surface" \ ARCH_HOSTNAME="manu-surface" \
USER_DISPLAYNAME="Manuel Thalmann" \ USER_DISPLAYNAME="Manuel Thalmann" \
source "$(status dirname)/../../../scripts/Arch/OS/setup.fish"; source "$(status dirname)/../../../../../scripts/Arch/OS/setup.fish";
end end

View file

@ -0,0 +1,16 @@
#!/bin/bash
pushd "${BASH_SOURCE%/*}" > /dev/null;
# Set Hostname
sudo hostnamectl set-hostname ManuSurface;
source "../../../../../scripts/PopOS/Scripts/preinstall.sh";
source "../../../../../scripts/PopOS/OS/install.sh";
source "../../../../../scripts/Debian/Drivers/SurfaceBook2/Setup/install.sh";
source "../../../../../scripts/PopOS/Software/Collections/school.sh";
INSTALL_FONTS=1 NEXTCLOUD_DIR="${NEXTCLOUD_DIR}" source "../../../../../scripts/Common/Config/UserProfile/install.sh";
# Install equalizer
source "../../../../../scripts/Common/Config/EasyEffects/SurfaceBook2/install.sh";
source "../../../../../scripts/PopOS/Scripts/postinstall.sh";
popd > /dev/null;

View file

@ -0,0 +1,12 @@
#!/bin/bash
pushd "${BASH_SOURCE%/*}" > /dev/null;
# Set Hostname
sudo hostnamectl set-hostname ManuPopOSLive;
source "../../../../scripts/PopOS/Scripts/prepare.sh";
source "../../../../scripts/PopOS/OS/install.sh";
source "../../../../scripts/PopOS/Software/Collections/personal.sh";
INSTALL_FONTS=1 NEXTCLOUD_DIR="${NEXTCLOUD_DIR}" source "../../../../scripts/Common/Config/UserProfile/personal.sh";
source "../../../../scripts/PopOS/Scripts/postinstall.sh";
popd > /dev/null;

View file

@ -0,0 +1,6 @@
{ ... }: {
imports = [
../../users/manuel/config.nix
../../../lib/modules/valhalla.nix
];
}

View file

@ -1,23 +0,0 @@
{ ... }: {
imports = [
../../lib/modules/valhalla.nix
];
config = {
valhalla = {
users.manuel = {
oh-my-posh = {
theme = {
source = ./manuel.omp.json;
};
};
};
partition = {
os = {
partitions = { };
};
};
};
};
}

View file

@ -0,0 +1,66 @@
{ ... }: {
imports = [
../../../lib/modules/valhalla.nix
];
config = {
valhalla = {
users.manuel = {
displayName = "Manuel Thalmann";
mailAddress = "m@nuth.ch";
oh-my-posh = {
theme = {
source = ./manuel.omp.json;
};
};
};
linux.users.manuel = {
defaultShell = "fish";
groups = [
"wheel"
"nix-users"
];
rclone = {
configurations = {
nextcloud = {
dirName = "Nextcloud";
};
proton = {
dirName = "Proton";
};
};
};
};
windows.users.manuel = {
nextcloud = {
folderSyncs =
let
localPath = "C:/tools/RetroArch-Win64";
remotePath = "/Saved Games/RetroArch";
in [
{
remotePath = "${remotePath}/Saves";
localPath = "${localPath}/saves";
virtualFiles = false;
}
{
remotePath = "${remotePath}/System";
localPath = "${localPath}/system";
}
];
};
};
partition = {
os = {
partitions = { };
};
};
};
};
}

View file

@ -24,7 +24,7 @@ if [ (id -u) -eq 0 ]
echo "$name ALL=(ALL:ALL) NOPASSWD: ALL" echo "$name ALL=(ALL:ALL) NOPASSWD: ALL"
end > "$sudoConfig" end > "$sudoConfig"
and sudo --preserve-env="CONFIG_MODULE" --user "$name" "$INSTALLER_SCRIPT" and sudo --preserve-env="CONFIG_NAME" --user "$name" "$INSTALLER_SCRIPT"
rm "$sudoConfig" rm "$sudoConfig"
userdel -r "$name" userdel -r "$name"
else else

View file

@ -39,7 +39,7 @@ function runSetup
function wrapScript -S function wrapScript -S
printf %s\n \ printf %s\n \
"cd $PROJECT_CLONE_ROOT" \ "cd $PROJECT_CLONE_ROOT" \
"export CONFIG_MODULE=$(string escape (getCloneFile "$CONFIG_MODULE"))" \ "export CONFIG_NAME=$(string escape (getCloneFile "$CONFIG_NAME"))" \
"$argv" "$argv"
end end

View file

@ -15,18 +15,10 @@ $null = New-Module {
) )
if (-not ("OpenQA.Selenium.Firefox.FirefoxDriver" -as [type])) { if (-not ("OpenQA.Selenium.Firefox.FirefoxDriver" -as [type])) {
$zipFile = [System.IO.Compression.ZipFile]::OpenRead((Get-Package Selenium.WebDriver).Source); $packageRoot = Split-Path -Parent (Get-Package Selenium.WebDriver).Source;
$webDriver = ($zipFile.Entries | Where-Object { $_.FullName -like "lib/net6.0/WebDriver.dll" })[0]; $file = Join-Path $packageRoot "lib/netstandard2.0/WebDriver.dll";
$stream = [System.IO.MemoryStream]::new(); $env:SE_MANAGER_PATH = Join-Path $packageRoot "manager" ($IsWindows ? "windows" : "linux") "selenium-manager$($IsWindows ? ".exe" : '')";
$reader = [System.IO.StreamReader]($webDriver).Open(); $null = [System.Reflection.Assembly]::LoadFile($file);
$reader.BaseStream.CopyTo($stream);
[byte[]]$bytes = $stream.ToArray();
$reader.Close();
$reader.Dispose();
$stream.Close();
$stream.Dispose();
$zipFile.Dispose();
$null = [System.Reflection.Assembly]::Load($bytes);
} }
& $Action; & $Action;

View file

@ -1,19 +1,28 @@
using namespace Microsoft.Win32; using namespace Microsoft.Win32;
using namespace System.Management.Automation.Host;
using namespace System.Security.AccessControl; using namespace System.Security.AccessControl;
using namespace System.Security.Principal; using namespace System.Security.Principal;
enum WindowsInstallerStage { enum WindowsInstallerStage {
Initialize Initialize
Run Run
Cleanup
Completed Completed
} }
enum SetupStage { enum SetupStage {
Initialize
Configure Configure
Install Install
CreateUser CreateUser
} }
enum BackupStage {
Initialize
Backup
BackupUsers
}
enum UserStage { enum UserStage {
Create Create
Configure Configure
@ -25,12 +34,61 @@ $null = New-Module {
[string] $configRoot = "HKLM:\Software\PortValhalla"; [string] $configRoot = "HKLM:\Software\PortValhalla";
[string] $stageOption = "Stage"; [string] $stageOption = "Stage";
[string] $setupStageOption = "SetupStage"; [string] $setupStageOption = "SetupStage";
[string] $backupStageOption = "BackupStage";
[string] $userOption = "SetupUser"; [string] $userOption = "SetupUser";
[string] $userStageOption = "UserStage"; [string] $userStageOption = "UserStage";
[string] $accountOption = "MSAccount"; [string] $accountOption = "MSAccount";
[string] $finishedOption = "Finished"; [string] $finishedOption = "Finished";
[RegistryKey] $key = $null; [RegistryKey] $key = $null;
<#
.SYNOPSIS
Prompts the user to select a profile to act on.
#>
function Show-ProfileNamePrompt {
. "$PSScriptRoot/../../Windows/Types/WindowsInstallerAction.ps1";
$profiles = & {
. "$PSScriptRoot/SoftwareManagement.ps1";
if (Test-Command "wsl") {
return Invoke-ConfigScript "getProfiles";
} else {
return Get-ChildItem "$PSScriptRoot/../../../.config" | ForEach-Object { Split-Path -LeafBase $_ };
}
};
$choice = $Host.UI.PromptForChoice(
"Select Profile",
(& {
switch (Get-Stage) {
([WindowsInstallerAction]::Backup) {
"Which profile do you wish to back up?";
}
([WindowsInstallerAction]::Install) {
"Which profile do you wish to install?";
}
$null {
"Which profile do you wish to set up?";
}
}
}),
(& {
for ($i = 0; $i -lt $profiles.Count; $i++) {
[ChoiceDescription]"&$i - $($profiles[$i])";
}
[ChoiceDescription]"&Abort";
}),
$profiles.Count);
if ($choice -eq $profiles.Count) {
exit;
} else {
$env:CONFIG_NAME = $profiles[$choice];
}
}
<# <#
.SYNOPSIS .SYNOPSIS
Converts the specified path to linux and escapes it for the use in a script. Converts the specified path to linux and escapes it for the use in a script.
@ -114,16 +172,29 @@ $null = New-Module {
$scriptPath = "$PSScriptRoot/../../Common/Scripts/config.fish"; $scriptPath = "$PSScriptRoot/../../Common/Scripts/config.fish";
if ($env:CONFIG_MODULE) { if ($env:CONFIG_NAME -or ($Script -eq "getProfiles")) {
$output = & { $output = & {
if (-not $IsWindows) { if (-not $IsWindows) {
$escapedPath = (fish -c 'string escape $argv' "$scriptPath"); $escapedPath = (fish -c 'string escape $argv' "$scriptPath");
fish -c ". $escapedPath; $Script"; fish -c ". $escapedPath; $Script";
} else { } else {
$cleanup = { };
$projectRoot = "$PSScriptRoot/../../..";
$archisoDir = "$projectRoot/archiso";
function fish { function fish {
wsl --shell-type login -- nix --extra-experimental-features "nix-command flakes" run nixpkgs`#fish -- $args wsl --shell-type login -- nix --extra-experimental-features "nix-command flakes" run nixpkgs`#fish -- $args
} }
if (Test-Path -PathType Container "$archisoDir") {
$git = {
git -C "$projectRoot" -c safe.directory="$("$(Resolve-Path $projectRoot)".Replace("\", "/"))" @args;
};
& $git rm -r --cached "$archisoDir" *> $null;
$cleanup = { & $git restore --staged "$archisoDir" };
}
$output = fish -c ". $(ConvertTo-LinuxPath $scriptPath); $Script"; $output = fish -c ". $(ConvertTo-LinuxPath $scriptPath); $Script";
if (-not $?) { if (-not $?) {
@ -131,6 +202,8 @@ $null = New-Module {
} else { } else {
$output; $output;
} }
& $cleanup *> $null;
} }
} }
@ -343,6 +416,39 @@ $null = New-Module {
$null = Set-SetupOption $setupStageOption $Name; $null = Set-SetupOption $setupStageOption $Name;
} }
<#
.SYNOPSIS
Gets the name of the current stage of the backup.
#>
function Get-BackupStage {
$stage = Get-SetupOption $backupStageOption;
if ($null -ne $stage) {
$stage = [BackupStage]$stage;
}
return $stage;
}
<#
.SYNOPSIS
Sets the current stage of the backup.
.PARAMETER Name
The name to set the current stage to.
#>
function Set-BackupStage {
param(
$Name
)
if (-not (($null -eq $Name) -or ($Name -is [string]))) {
$Name = ([BackupStage]$Name).ToString();
}
$null = Set-SetupOption $backupStageOption $Name;
}
<# <#
.SYNOPSIS .SYNOPSIS
Gets the current user to set up. Gets the current user to set up.
@ -442,21 +548,6 @@ $null = New-Module {
Set-SetupOption $finishedOption $true; Set-SetupOption $finishedOption $true;
} }
<#
.SYNOPSIS
Checks whether the specified software collection is enabled.
.PARAMETER Name
The name of the collection to check.
#>
function Test-Collection {
param(
[string] $Name
)
Get-Config "$(Get-ConfigRootName).software.$Name";
}
<# <#
.SYNOPSIS .SYNOPSIS
Checks whether the running system is a QEMU virtual machine. Checks whether the running system is a QEMU virtual machine.

View file

@ -27,6 +27,35 @@ $null = New-Module {
Set-SetupOption $taskOption ([string]$Task); Set-SetupOption $taskOption ([string]$Task);
}; };
<#
.SYNOPSIS
Gets the PowerShell modules required for operating.
#>
function Get-RequiredModules {
$modules = @(
@("PSScriptAnalyzer")
) + (& {
if (-not $IsWindows) {
@()
} else {
@(
@("KnownFolders"),
@("PSWindowsUpdate"),
@("LocalAccounts", $true),
@("NuGet")
)
}
});
for ($i = 0; $i -lt $modules.Count; $i++) {
if ($modules[$i] -is [string]) {
$modules[$i] = @($modules[$i]);
}
}
return $modules;
}
function Start-Operation { function Start-Operation {
param( param(
[switch] $NonInteractive, [switch] $NonInteractive,
@ -51,12 +80,7 @@ $null = New-Module {
$Global:ErrorActionPreference = $NonInteractive.IsPresent ? 'Continue' : 'Inquire'; $Global:ErrorActionPreference = $NonInteractive.IsPresent ? 'Continue' : 'Inquire';
if ($IsWindows) { if ($IsWindows) {
$env:WSLENV = "CONFIG_MODULE/p"; $env:WSLENV = "CONFIG_NAME";
if ($env:CONFIG_MODULE) {
$env:CONFIG_MODULE = Resolve-Path $env:CONFIG_MODULE;
}
New-Alias -Force "sudo" gsudo; New-Alias -Force "sudo" gsudo;
} }
@ -121,7 +145,7 @@ $null = New-Module {
Start-Sleep 0.1; Start-Sleep 0.1;
} }
foreach ($name in @("CONFIG_MODULE", "INSTALLER_SCRIPT")) { foreach ($name in @("INSTALLER_SCRIPT")) {
$variable = Get-Item "Env:\$name"; $variable = Get-Item "Env:\$name";
$path = Join-Path ` $path = Join-Path `
@ -205,7 +229,7 @@ $null = New-Module {
if (-not (Test-PSPackage Selenium.WebDriver)) { if (-not (Test-PSPackage Selenium.WebDriver)) {
Write-Host "Installing browser automation tools…"; Write-Host "Installing browser automation tools…";
$null = Install-Package -Force Selenium.WebDriver -RequiredVersion 4.10.0 -SkipDependencies; $null = Install-Package -Force Selenium.WebDriver -RequiredVersion 4.24.0 -SkipDependencies;
continue; continue;
} }
@ -215,22 +239,7 @@ $null = New-Module {
} }
Invoke-Hook "Install-PSModules" -Fallback { Invoke-Hook "Install-PSModules" -Fallback {
$modules = @( foreach ($module in (Get-RequiredModules)) {
@("PSScriptAnalyzer")
) + (& {
if (-not $IsWindows) {
@()
} else {
@(
@("KnownFolders"),
@("PSWindowsUpdate"),
@("LocalAccounts", $true),
@("NuGet")
)
}
});
foreach ($module in $modules) {
$parameters = @{ }; $parameters = @{ };
if ($module -is [string]) { if ($module -is [string]) {
@ -250,6 +259,10 @@ $null = New-Module {
} }
}; };
if (-not $env:CONFIG_NAME) {
Show-ProfileNamePrompt;
}
$initialized = $true; $initialized = $true;
} }
} }
@ -403,6 +416,14 @@ $null = New-Module {
function Clear-OperationResources { function Clear-OperationResources {
if ($IsWindows) { if ($IsWindows) {
Uninstall-WslDistribution; Uninstall-WslDistribution;
$null = Uninstall-Package Selenium.WebDriver -ErrorAction Continue;
Uninstall-ChocoPackage 7zip.portable gsudo selenium-gecko-driver yq;
Uninstall-WingetPackage AutoHotkey.AutoHotkey;
}
foreach ($module in (Get-RequiredModules)) {
Remove-Module -Force $module[0];
Uninstall-Module -Force -Name $module[0] -ErrorAction SilentlyContinue;
} }
} }
}; };

View file

@ -1,11 +1,16 @@
#!/bin/env fish #!/bin/env fish
function isConfigured -S function isConfigured -S
set -q "$CONFIG_MODULE" set -q "$CONFIG_NAME"
end
function getProfiles -S
source "$(status dirname)/eval-flake.fish";
evalFlake "" "" --apply "builtins.attrNames" --json
end end
function getConfig -S -a property function getConfig -S -a property
source "$(status dirname)/eval-module.fish" source "$(status dirname)/eval-flake.fish"
evalModule "$CONFIG_MODULE" "$property" $argv[2..] evalFlake "$CONFIG_NAME" "$property" $argv[2..]
end end
function getAttributes -S -a property function getAttributes -S -a property

View file

@ -0,0 +1,27 @@
#!/bin/env fish
function evalFlake --argument-names config property
set -l argv $argv[3..]
argparse --ignore-unknown "apply=" "json" -- $argv
if [ -z "$_flag_json" ]
set -a argv --raw
else
set -a argv --json
end
if [ -z "$_flag_apply" ]
set _flag_apply "_: _"
end
if [ -n "$config" ]
set config ".$config"
set _flag_apply "_: ($_flag_apply) ((import $(status dirname)/../../../lib/eval-attribute.nix) _)"
end
ROOT="$(realpath (status dirname))/../../.." \
PROPERTY="$property" \
nix eval --impure --extra-experimental-features "nix-command flakes" \
--apply "$_flag_apply" \
"$(status dirname)/../../..#valhalla$config" \
$argv
end

View file

@ -48,10 +48,10 @@ Start-SoftwareInstaller @PSBoundParameters `
} }
if ($IsWindows) { if ($IsWindows) {
[System.Environment]::SetEnvironmentVariable($varName, $path, "User"); [System.Environment]::SetEnvironmentVariable($varName, "%AppData%/$([System.IO.Path]::GetRelativePath($env:AppData, $path))", "User");
} else { } else {
. "$PSScriptRoot/../aliae/Manage.ps1"; . "$PSScriptRoot/../aliae/Manage.ps1";
Add-EnvironmentVariable -User $Arguments.Name $varName $path; Add-EnvironmentVariable -User $Arguments.Name $varName ($path).Replace("~", "{{ .Home }}");
} }
} }
}; };

View file

@ -28,20 +28,7 @@ $null = New-Module {
$configArgs = @("--system"); $configArgs = @("--system");
} }
<# $config = Get-Config "$root.git";
.SYNOPSIS
Gets the specified git configuration.
.PARAMETER Name
THe name of the configuration to get.
#>
function Get-GitConfig {
param(
[string] $Name
)
Get-Config "$root.git.$Name";
}
<# <#
.SYNOPSIS .SYNOPSIS
@ -52,7 +39,7 @@ $null = New-Module {
} }
if ((-not $IsWindows) -or $User) { if ((-not $IsWindows) -or $User) {
$branch = Get-GitConfig "defaultBranch"; $branch = $config.defaultBranch;
if ($branch) { if ($branch) {
Set-GitConfig "init.defaultBranch" $branch; Set-GitConfig "init.defaultBranch" $branch;
@ -76,8 +63,8 @@ $null = New-Module {
. { . {
$dir = New-TemporaryDirectory; $dir = New-TemporaryDirectory;
$key = "flow"; $key = "flow";
$mainBranch = Get-GitConfig "$key.mainBranch"; $mainBranch = $config."$key".mainBranch;
$devBranch = Get-GitConfig "$key.devBranch"; $devBranch = $config."$key".devBranch;
& { & {
git -C "$dir" init; git -C "$dir" init;
@ -103,7 +90,7 @@ $null = New-Module {
}; };
# Aliases # Aliases
[PSCustomObject] $aliases = Get-GitConfig "aliases"; [PSCustomObject] $aliases = $config.aliases;
if ($aliases) { if ($aliases) {
foreach ($alias in ($aliases | Get-Member -MemberType Properties)) { foreach ($alias in ($aliases | Get-Member -MemberType Properties)) {

View file

@ -26,7 +26,7 @@ begin
"Terminal=false" ( "Terminal=false" (
printf "%s " \ printf "%s " \
"Exec=env" \ "Exec=env" \
"CONFIG_MODULE=$(echo "$CONFIG_MODULE" | string escape)" \ "CONFIG_NAME=$(echo "$CONFIG_NAME" | string escape)" \
"konsole -e fish $(realpath (status filename) | string escape) userConfig" "konsole -e fish $(realpath (status filename) | string escape) userConfig"
) )
end | sudo -u "$name" tee "$entryPoint" > /dev/null end | sudo -u "$name" tee "$entryPoint" > /dev/null
@ -36,7 +36,7 @@ begin
rm "$entryPoint" rm "$entryPoint"
rm ~"$name"/.config/plasma-welcomerc rm ~"$name"/.config/plasma-welcomerc
else if [ -n "$name" ] && [ "$name" != "$USER" ] else if [ -n "$name" ] && [ "$name" != "$USER" ]
sudo -Eu "$name" CONFIG_MODULE="$CONFIG_MODULE" fish "$(status filename)" userConfig sudo -Eu "$name" CONFIG_NAME="$CONFIG_NAME" fish "$(status filename)" userConfig
else else
systemctl --user enable rclone.service systemctl --user enable rclone.service
echo "Please complete the setup of your rclone configurations!" echo "Please complete the setup of your rclone configurations!"

View file

@ -0,0 +1,4 @@
#!/bin/pwsh
. "$PSScriptRoot/Manage.ps1";
$env:INSTALLER_SCRIPT = "$PSCommandPath";
Start-WindowsBackup;

View file

@ -0,0 +1,3 @@
#!/bin/pwsh
. "$PSScriptRoot/Manage.ps1";
Start-WindowsInstallation;

View file

@ -20,6 +20,7 @@ $null = New-Module {
. "$PSScriptRoot/../Types/WindowsInstallerAction.ps1"; . "$PSScriptRoot/../Types/WindowsInstallerAction.ps1";
. "$PSScriptRoot/../../Common/Scripts/Config.ps1"; . "$PSScriptRoot/../../Common/Scripts/Config.ps1";
. "$PSScriptRoot/../../Common/Scripts/Operations.ps1"; . "$PSScriptRoot/../../Common/Scripts/Operations.ps1";
. "$PSScriptRoot/../../Common/Scripts/Scripting.ps1";
. "$PSScriptRoot/../../Common/Scripts/Software.ps1"; . "$PSScriptRoot/../../Common/Scripts/Software.ps1";
. "$PSScriptRoot/../../Common/Scripts/SoftwareManagement.ps1"; . "$PSScriptRoot/../../Common/Scripts/SoftwareManagement.ps1";
. "$PSScriptRoot/../../Common/Types/InstallerAction.ps1"; . "$PSScriptRoot/../../Common/Types/InstallerAction.ps1";
@ -34,6 +35,16 @@ $null = New-Module {
}; };
} }
<#
.SYNOPSIS
Creates a backup of the current Windows machine.
#>
function Start-WindowsBackup {
Start-Operation -NoImplicitCleanup {
Start-InstallationLoop ([WindowsInstallerAction]::Backup);
};
}
<# <#
.SYNOPSIS .SYNOPSIS
Starts the installation loop. Starts the installation loop.
@ -85,9 +96,12 @@ $null = New-Module {
switch (Get-SetupStage) { switch (Get-SetupStage) {
($null) { ($null) {
Set-SetupStage ([SetupStage]::Configure); Set-SetupStage ([SetupStage]::Initialize);
break; break;
} }
([SetupStage]::Initialize) {
Set-SetupStage ([SetupStage]::Configure);
}
([SetupStage]::Configure) { ([SetupStage]::Configure) {
if (Get-Config "valhalla.windows.dualboot.enable") { if (Get-Config "valhalla.windows.dualboot.enable") {
if (-not (Test-Qemu)) { if (-not (Test-Qemu)) {
@ -127,9 +141,94 @@ $null = New-Module {
} }
} }
} }
([WindowsInstallerAction]::Backup) {
$finished = $false;
$adminGroup = @{
SID = [SecurityIdentifier]::new([WellKnownSidType]::BuiltinAdministratorsSid, $null);
};
while (-not $finished) {
switch (Get-BackupStage) {
$null {
Set-BackupStage ([BackupStage]::Initialize);
}
([BackupStage]::Initialize) {
$user = Get-SetupUser;
Add-LocalUser $user;
Add-LocalGroupMember -Member "$user" @adminGroup;
Set-AutologinUser $user;
Disable-UAC;
Set-BackupStage ([BackupStage]::Backup);
Restart-Intermediate;
return;
}
([BackupStage]::Backup) {
Deploy-SoftwareAction ([InstallerAction]::Backup);
Set-BackupStage ([BackupStage]::BackupUsers);
}
([BackupStage]::BackupUsers) {
$users = @(Get-Users);
$i = Get-CurrentUser;
for (; $i -lt $users.Count; $i++) {
Set-CurrentUser $i;
$user = $users[$i];
if ($env:UserName -ne $user) {
Set-BootMessage "Please Log In" "Please log in with the user ``$user``";
Add-LocalGroupMember -Member "$user" @adminGroup -ErrorAction SilentlyContinue;
Restart-Intermediate;
return;
} else {
Deploy-SoftwareAction -Action ([InstallerAction]::BackupUser);
Remove-LocalGroupMember -Member "$user" @adminGroup;
foreach ($group in Get-UserConfig -UserName "$user" "groups") {
Add-LocalGroupMember -Member "$user" $group;
}
}
}
Disable-BootMessage;
$finished = $true;
}
}
}
}
} }
Set-Stage ([WindowsInstallerStage]::Cleanup);
break;
}
([WindowsInstallerStage]::Cleanup) {
$taskName = "PortValhalla Cleaner";
$setupUser = Get-SetupUser;
Clear-OperationResources;
Remove-Item -Recurse -Force "C:\ProgramData\PortValhalla";
Get-SetupConfigKey | Remove-Item -Recurse -Force;
Disable-Autologin;
Disable-LocalUser $setupUser;
$script = {
param(
$TaskName,
$UserName
)
$user = Get-LocalUser $UserName;
[string] $sid = $user.SID;
Remove-LocalUser $user;
Get-CimInstance Win32_UserProfile | Where-Object { $_.SID -eq $sid } | Remove-CimInstance;
Unregister-ScheduledTask -Confirm:$false $TaskName;
};
$trigger = New-ScheduledTaskTrigger -AtStartup;
$task = New-ScheduledTaskAction -Execute "pwsh" -Argument "-Command & { $script } $(ConvertTo-Injection $taskName) $(ConvertTo-Injection $setupUser)";
$null = Register-ScheduledTask -Force $taskName -Action $task -Trigger $trigger -RunLevel Highest -User "SYSTEM";
Set-Stage ([WindowsInstallerStage]::Completed); Set-Stage ([WindowsInstallerStage]::Completed);
Enable-UAC;
Restart-Intermediate -NoRegister;
break; break;
} }
} }

View file

@ -2,16 +2,18 @@
. "$PSScriptRoot/../../Common/Scripts/Scripting.ps1"; . "$PSScriptRoot/../../Common/Scripts/Scripting.ps1";
function Start-Setup { function Start-Setup {
param($ConfigurationName)
. "$PSScriptRoot/../../Common/Scripts/Config.ps1";
. "$PSScriptRoot/../../Common/Scripts/Scripting.ps1"; . "$PSScriptRoot/../../Common/Scripts/Scripting.ps1";
$Global:InformationPreference = "Continue"; $Global:InformationPreference = "Continue";
$Global:ErrorActionPreference = "Inquire"; $Global:ErrorActionPreference = "Inquire";
$env:CONFIG_NAME ??= $ConfigurationName;
$null = $env:WIN_COMPUTER_NAME; $null = $env:WIN_COMPUTER_NAME;
$null = $env:SETUP_SCRIPT_NAME; $null = $env:SETUP_SCRIPT_NAME ??= "$PSScriptRoot/Install.ps1";
$null = $env:CONFIG_MODULE; $env:WSLENV = "CONFIG_NAME";
$env:WSLENV = "CONFIG_MODULE/p";
$valhallaConfig = ConvertFrom-Json (Get-Content "$env:CONFIG_MODULE.json");
Show-ProfileNamePrompt;
$valhallaConfig = ConvertFrom-Json (Get-Content "$PSScriptRoot/../../../.config/$env:CONFIG_NAME.json");
[xml]$unattendedConfig = [xml]::new(); [xml]$unattendedConfig = [xml]::new();
$unattendedConfig.PreserveWhitespace = $true; $unattendedConfig.PreserveWhitespace = $true;
@ -233,7 +235,7 @@ function Start-Setup {
($env:DEBUG ? "`$env:DEBUG = $([int]$env:DEBUG);" : "") + ($env:DEBUG ? "`$env:DEBUG = $([int]$env:DEBUG);" : "") +
"`$env:PWSH_PATH = $(Get-PathInjection $env:PWSH_PATH);" + "`$env:PWSH_PATH = $(Get-PathInjection $env:PWSH_PATH);" +
"`$env:INSTALLER_SCRIPT = $(Get-ScriptPathInjection $env:SETUP_SCRIPT_NAME);" + "`$env:INSTALLER_SCRIPT = $(Get-ScriptPathInjection $env:SETUP_SCRIPT_NAME);" +
"`$env:CONFIG_MODULE = $(Get-ScriptPathInjection $env:CONFIG_MODULE);" + "`$env:CONFIG_NAME = $(ConvertTo-Injection $env:CONFIG_NAME);" +
"& (Join-Path `$env:PWSH_PATH pwsh) `$env:INSTALLER_SCRIPT;") ` "& (Join-Path `$env:PWSH_PATH pwsh) `$env:INSTALLER_SCRIPT;") `
-Description "Install PowerShell Core and git and run setup script"; -Description "Install PowerShell Core and git and run setup script";
@ -264,4 +266,4 @@ function Start-Setup {
& "$SETUP_DRIVE\setup.exe" /Unattend:$unattendedConfigFile; & "$SETUP_DRIVE\setup.exe" /Unattend:$unattendedConfigFile;
} }
Start-Setup Start-Setup @args;

View file

@ -24,13 +24,16 @@ function Deploy-SoftwareAction {
$install = $true; $install = $true;
} }
$hardware = Get-Config "valhalla.hardware";
$collections = Get-Config "valhalla.windows.software";
# Drivers # Drivers
& { & {
$driverPath = "$PSScriptRoot/../Drivers"; $driverPath = "$PSScriptRoot/../Drivers";
$mbPath = "$driverPath/ROG Zenith Extreme Alpha"; $mbPath = "$driverPath/ROG Zenith Extreme Alpha";
if ($install) { if ($install) {
if (Get-Config "valhalla.hardware.elgatoWave") { if ($hardware.elgatoWave) {
if (-not (Test-ChocoPackage wavelink)) { if (-not (Test-ChocoPackage wavelink)) {
Install-ChocoPackage wavelink -ArgumentList '--install-arguments="/norestart"'; Install-ChocoPackage wavelink -ArgumentList '--install-arguments="/norestart"';
Remove-DesktopIcon "*Wave Link*"; Remove-DesktopIcon "*Wave Link*";
@ -40,7 +43,7 @@ function Deploy-SoftwareAction {
} }
} }
foreach ($component in (Get-Config "valhalla.hardware.components")) { foreach ($component in $hardware.components) {
switcH ($component) { switcH ($component) {
("ROG Zenith Extreme Alpha") { ("ROG Zenith Extreme Alpha") {
& "$mbPath/MarvellEthernet/Manage.ps1" @arguments; & "$mbPath/MarvellEthernet/Manage.ps1" @arguments;
@ -56,22 +59,22 @@ function Deploy-SoftwareAction {
} }
if ($install) { if ($install) {
if (Get-Config "valhalla.hardware.amdCPU") { if ($hardware.amdCPU) {
Install-ChocoPackage amd-ryzen-master; Install-ChocoPackage amd-ryzen-master;
# ToDo: backup Ryzen energy saving plan # ToDo: backup Ryzen energy saving plan
} }
if (Get-Config "valhalla.hardware.nvidiaGPU") { if ($hardware.nvidiaGPU) {
Install-ChocoPackage geforce-game-ready-driver; Install-ChocoPackage geforce-game-ready-driver;
Remove-DesktopIcon "*Geforce*"; Remove-DesktopIcon "*Geforce*";
} }
if (Get-Config "valhalla.hardware.corsairDevice") { if ($hardware.corsairDevice) {
Install-ChocoPackage icue; Install-ChocoPackage icue;
} }
} }
if (Get-Config "valhalla.hardware.eyeX") { if ($hardware.eyeX) {
& "$driverPath/Tobii EyeX/Manage.ps1" @arguments; & "$driverPath/Tobii EyeX/Manage.ps1" @arguments;
} }
}; };
@ -83,12 +86,12 @@ function Deploy-SoftwareAction {
# Windows Config # Windows Config
& "$softwarePath/Windows/Manage.ps1" @arguments; & "$softwarePath/Windows/Manage.ps1" @arguments;
if (Get-Config "valhalla.hardware.logitechG") { if ($hardware.logitechG) {
& "$softwarePath/LGHub/Manage.ps1" @arguments; & "$softwarePath/LGHub/Manage.ps1" @arguments;
} }
# Essentials # Essentials
if (Test-Collection "essential") { if ($collections.essential) {
& "$softwarePath/aliae/Main.ps1" @arguments; & "$softwarePath/aliae/Main.ps1" @arguments;
& "$softwarePath/OpenSSH/Manage.ps1" @arguments; & "$softwarePath/OpenSSH/Manage.ps1" @arguments;
& "$softwarePath/PowerShell/Manage.ps1" @arguments; & "$softwarePath/PowerShell/Manage.ps1" @arguments;
@ -115,7 +118,7 @@ function Deploy-SoftwareAction {
} }
# Common Software # Common Software
if (Test-Collection "common") { if ($collections.common) {
& "$softwarePath/WinSCP/Manage.ps1" @arguments; & "$softwarePath/WinSCP/Manage.ps1" @arguments;
& "$softwarePath/Thunderbird/Manage.ps1" @arguments; & "$softwarePath/Thunderbird/Manage.ps1" @arguments;
& "$softwarePath/PuTTY/Manage.ps1" @arguments; & "$softwarePath/PuTTY/Manage.ps1" @arguments;
@ -137,7 +140,7 @@ function Deploy-SoftwareAction {
} }
} }
if (Test-Collection "desktopExperience") { if ($collections.desktopExperience) {
if ($install) { if ($install) {
# Fonts # Fonts
Install-ChocoPackage nerd-fonts-CascadiaCode; Install-ChocoPackage nerd-fonts-CascadiaCode;
@ -170,7 +173,7 @@ function Deploy-SoftwareAction {
Remove-DesktopIcon "GIMP*"; Remove-DesktopIcon "GIMP*";
Remove-DesktopIcon "GPU-Z*"; Remove-DesktopIcon "GPU-Z*";
Remove-DesktopIcon "WinDirStat*"; Remove-DesktopIcon "WinDirStat*";
Remove-DesktopIcon "*HWMonior*"; Remove-DesktopIcon "*HWMonitor*";
Remove-DesktopIcon "ImgBurn*"; Remove-DesktopIcon "ImgBurn*";
Remove-DesktopIcon "InkScape*"; Remove-DesktopIcon "InkScape*";
Remove-DesktopIcon "Krita*"; Remove-DesktopIcon "Krita*";
@ -192,12 +195,12 @@ function Deploy-SoftwareAction {
& "$softwarePath/Firefox/Manage.ps1" @arguments; & "$softwarePath/Firefox/Manage.ps1" @arguments;
& "$softwarePath/MSEdgeRedirect/Manage.ps1" @arguments; & "$softwarePath/MSEdgeRedirect/Manage.ps1" @arguments;
if (Test-Collection "fileSync") { if ($collections.fileSync) {
& "$softwarePath/Nextcloud/Main.ps1" @arguments; & "$softwarePath/Nextcloud/Main.ps1" @arguments;
} }
} }
if (Test-Collection "socialMedia") { if ($collections.socialMedia) {
if ($install) { if ($install) {
Install-ChocoPackage ` Install-ChocoPackage `
signal ` signal `
@ -214,7 +217,7 @@ function Deploy-SoftwareAction {
} }
} }
if (Test-Collection "media") { if ($collections.media) {
if ($install) { if ($install) {
Install-ChocoPackage ` Install-ChocoPackage `
k-litecodecpackmega ` k-litecodecpackmega `
@ -230,7 +233,7 @@ function Deploy-SoftwareAction {
} }
} }
if (Test-Collection "coding") { if ($collections.coding) {
if ($install) { if ($install) {
& "$softwarePath/vscode/Main.ps1" @arguments; & "$softwarePath/vscode/Main.ps1" @arguments;
@ -256,7 +259,7 @@ function Deploy-SoftwareAction {
} }
# Gaming # Gaming
if (Test-Collection "gaming") { if ($collections.gaming) {
if ($install) { if ($install) {
Install-ChocoPackage ` Install-ChocoPackage `
goggalaxy ` goggalaxy `

View file

@ -53,9 +53,9 @@ $null = New-Module {
function Get-StartupCommand { function Get-StartupCommand {
($env:PWSH_PATH ? "`$env:PWSH_PATH = $(ConvertTo-Injection $env:PWSH_PATH);" : "") + ($env:PWSH_PATH ? "`$env:PWSH_PATH = $(ConvertTo-Injection $env:PWSH_PATH);" : "") +
($env:DEBUG ? "`$env:DEBUG = $([int]$env:DEBUG);" : "") + ($env:DEBUG ? "`$env:DEBUG = $([int]$env:DEBUG);" : "") +
($env:BACKUP_ARCHIVE ? "`$env:BACKUP_ARCHIVE = $(ConvertTo-Injection (Resolve-Path $env:BACKUP_ARCHIVE));" : "") + ($env:BACKUP_ARCHIVE ? "`$env:BACKUP_ARCHIVE = $(ConvertTo-Injection ([System.IO.Path]::GetFullPath($env:BACKUP_ARCHIVE)));" : "") +
"`$env:INSTALLER_SCRIPT = $(ConvertTo-Injection (Resolve-Path $env:INSTALLER_SCRIPT));" + "`$env:INSTALLER_SCRIPT = $(ConvertTo-Injection (Resolve-Path $env:INSTALLER_SCRIPT));" +
"`$env:CONFIG_MODULE = $(ConvertTo-Injection (Resolve-Path $env:CONFIG_MODULE));" + "`$env:CONFIG_NAME = $(ConvertTo-Injection $env:CONFIG_NAME);" +
"& `$env:INSTALLER_SCRIPT;"; "& `$env:INSTALLER_SCRIPT;";
} }

View file

@ -54,6 +54,10 @@ function Test-WslDistribution {
#> #>
function Install-Wsl { function Install-Wsl {
wsl --install --no-launch; wsl --install --no-launch;
# Microsoft broke WSL - Quelle surprise!
# ToDo: Remove this workaround once it's unbroken
. "$PSScriptRoot/../../Common/Scripts/Software.ps1";
Install-SetupPackage "https://github.com/microsoft/WSL/releases/download/2.3.17/wsl.2.3.17.0.x64.msi" -ArgumentList "/Quiet";
} }
<# <#

View file

@ -209,9 +209,11 @@ begin
begin begin
source "$dir/../scripts/Common/Scripts/config.fish" source "$dir/../scripts/Common/Scripts/config.fish"
find "$projectPath/profiles" -type f -name "*.nix" | while read -l file for name in (getProfiles | jq '.[]' --raw-output0 | string split0)
set -l CONFIG_MODULE "$file" set -l CONFIG_NAME "$name"
getConfig "valhalla.windows.config" --json > "$file.json" set -l file "$projectPath/.config/$name.json"
mkdir -p (dirname $file)
getConfig "valhalla.windows.config" --json > "$file"
end end
end end

View file

@ -1,2 +1,3 @@
$env:SETUP_DRIVE = (ConvertFrom-Csv ((wmic volume where "Label='$env:SETUP_LABEL'" get DriveLetter) | ForEach-Object { "$_".Trim(); })).DriveLetter; $env:SETUP_DRIVE = (ConvertFrom-Csv ((wmic volume where "Label='$env:SETUP_LABEL'" get DriveLetter) | ForEach-Object { "$_".Trim(); })).DriveLetter;
Set-Location (Join-Path $env:SETUP_DRIVE $env:LOCAL_PROJECT_PATH) Set-Location (Join-Path $env:SETUP_DRIVE $env:LOCAL_PROJECT_PATH)
& ./scripts/Windows/OS/Setup.ps1;