Compare commits

...

23 commits

Author SHA1 Message Date
Manuel Thalmann 692c2157fd Configure Surface Touchpad by default 2024-09-20 02:23:09 +02:00
Manuel Thalmann 2eb471e820 Add scripts for handling HiDPI 2024-09-20 02:07:32 +02:00
Manuel Thalmann 40e5738453 Add scripts for installing drivers 2024-09-20 02:01:22 +02:00
Manuel Thalmann 2e006c7dbe Install bt-dualboot for dualboot systems 2024-09-20 01:39:52 +02:00
Manuel Thalmann 3570233a2d Allow enabling Secure Boot 2024-09-20 00:56:56 +02:00
Manuel Thalmann 03f7a80193 Only ask for logout when applicable 2024-09-19 23:48:29 +02:00
Manuel Thalmann cd3e603a45 Allow configuring the hostname 2024-09-19 23:45:19 +02:00
Manuel Thalmann 8a4e7919da Reboot system after installation 2024-09-19 22:29:50 +02:00
Manuel Thalmann dffdc87d99 Keep all variables during installation 2024-09-19 22:29:34 +02:00
Manuel Thalmann b172d0291b Instruct user to log out 2024-09-19 22:27:44 +02:00
Manuel Thalmann cc083e15e4 Exclude rclone directory from indexing 2024-09-19 22:26:06 +02:00
Manuel Thalmann 20826fd8e5 Add module import scripts globally 2024-09-19 22:25:48 +02:00
Manuel Thalmann bb55434659 Allow configuring vscode for any user 2024-09-19 22:24:58 +02:00
Manuel Thalmann d3dcddab08 Make zoxide installation cross platform 2024-09-19 22:24:36 +02:00
Manuel Thalmann 9e2a8473e1 Run rclone user config script in Plasma 2024-09-19 22:23:45 +02:00
Manuel Thalmann ce7acef1f7 Add scripts for installing PS modules 2024-09-19 22:20:59 +02:00
Manuel Thalmann 79fcb9062d Configure git for Linux users properly 2024-09-19 22:00:08 +02:00
Manuel Thalmann a1b6681491 Add aliae support in Linux pwsh 2024-09-19 21:59:37 +02:00
Manuel Thalmann c06a7ed152 Make profile dialogue platform independent 2024-09-19 21:59:01 +02:00
Manuel Thalmann 3c5375002b Configure oh-my-posh on Linux 2024-09-19 21:58:30 +02:00
Manuel Thalmann c67cdc362a Configure aliae for individual Linux users 2024-09-19 21:56:32 +02:00
Manuel Thalmann 03e8a0e5ff Add support for PowerShell conf.d on Linux 2024-09-19 21:53:24 +02:00
Manuel Thalmann 984d03d5dd Refactor the sudo configuration script 2024-09-19 21:23:16 +02:00
41 changed files with 590 additions and 60 deletions

View file

@ -14,6 +14,18 @@
default = []; default = [];
}; };
surfaceBook = mkOption {
type = types.bool;
description = "A value indicating whether the system is a Surface Book 2.";
default = false;
};
xoneReceiver = mkOption {
type = types.bool;
description = "A value indicating whether an Xbox receiver is present.";
default = false;
};
eyeX = mkOption { eyeX = mkOption {
type = types.bool; type = types.bool;
description = "A value indicating whether a Tobii EyeX device is present."; description = "A value indicating whether a Tobii EyeX device is present.";

View file

@ -25,7 +25,20 @@
]; ];
}; };
linuxVariant = osVariant.extendModules { }; linuxVariant = osVariant.extendModules {
modules = [
({ ... }: {
options = {
secureBoot = mkOption {
type = types.bool;
description = "A value indicating whether the system supports Secure Boot.";
default = false;
};
};
})
];
};
windowsVariant = osVariant.extendModules { }; windowsVariant = osVariant.extendModules { };
in { in {
options = { options = {

View file

@ -35,6 +35,12 @@
}; };
}; };
hostname = mkOption {
type = types.str;
description = "The hostname of the system.";
default = "valhalla";
};
setupUser = { setupUser = {
name = mkOption { name = mkOption {
type = types.str; type = types.str;
@ -66,6 +72,12 @@
description = "The X11 keyboard layout of the system."; description = "The X11 keyboard layout of the system.";
default = null; default = null;
}; };
hidpi = mkOption {
type = types.bool;
description = "A value indicating whether the screen is hidpi.";
default = false;
};
}; };
}; };
} }

View file

@ -1,16 +1,21 @@
{ ... }: { { lib, ... }: {
imports = [ imports = [
../defaults.nix ../defaults.nix
]; ];
config = { config = {
valhalla = { valhalla = {
hostname = lib.mkDefault "der-geret";
linux.secureBoot = true;
windows = { windows = {
dualboot = { dualboot = {
enable = true; enable = true;
linuxPercentage = 70; # better safe than sorry linuxPercentage = 70; # better safe than sorry
}; };
hostname = "DerGeret";
users.manuel = { users.manuel = {
microsoftAccount = true; microsoftAccount = true;
groups = ["Administrators"]; groups = ["Administrators"];
@ -36,6 +41,7 @@
"Predator Z301C" "Predator Z301C"
]; ];
xoneReceiver = true;
eyeX = true; eyeX = true;
amdCPU = true; amdCPU = true;
nvidiaGPU = true; nvidiaGPU = true;

View file

@ -4,6 +4,17 @@
]; ];
config = { config = {
valhalla.partition.os.deviceName = "nvme0n1"; valhalla = {
hostname = "manu-surface";
hidpi = true;
linux.secureBoot = true;
hardware = {
surfaceBook = true;
xoneReceiver = true;
};
partition.os.deviceName = "nvme0n1";
};
}; };
} }

View file

@ -0,0 +1,35 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
yayinst secureboot-grub
end
function configureSW -V dir
source "$dir/../../../Common/Scripts/config.fish"
set -l label (getConfig valhalla.boot.label)
set -l efiDir (getConfig valhalla.boot.efiMountPoint)
set -l bootNums (efibootmgr | sed "/$label/{ s/^.*Boot\([[:digit:]]\+\)\*.*\$/\1/; p; }; d")
for bootNum in $bootNums
sudo efibootmgr --delete-bootnum --bootnum $bootNum
end
sudo sed -i \
-e "/esp=/{" \
-e "a esp=\"$efiDir\"" \
-e "d" \
-e "}" \
-e "/bootloader_id=/{" \
-e "a bootloader_id=\"$label\"" \
-e "d" \
-e "}" \
/etc/secureboot.conf
sudo secure-grub-install
end
runInstaller $argv
end

View file

@ -0,0 +1,44 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
set -l repo "linux-surface"
set -l file "/etc/pacman.conf"
curl -s https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc \
| sudo pacman-key --add -
sudo pacman-key --finger 56C464BAAC421453
sudo pacman-key --lsign-key 56C464BAAC421453
if ! grep "^\[$repo\]\$" $file
begin
printf %s\n \
"" \
"[$repo]" \
"Server = https://pkg.surfacelinux.com/arch/"
end | sudo tee -a $file > /dev/null
sudo pacinst
sudo pacinst \
intel-ucode \
linux-surface \
linux-surface-headers \
linux-surface-secureboot-mok \
iptsd \
linux-firmware-marvell
yes | runYay libwacom-surface
yayinst libcamera-git
end
end
function configureSW -V dir
fish "$dir/../../Software/GRUB/main.fish" configure
end
runInstaller $argv
end

View file

@ -0,0 +1,26 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
yayinst \
surface-dtx-daemon-bin \
surface-control-bin
end
function configureSW -V dir
begin
printf %s\n \
"# vim:set ft=sh" \
"MODULES+=(pinctrl_sunrisepoint surface_dtx)"
end | sudo tee /etc/mkinitcpio.conf.d/surface-book-2.conf > /dev/null
fish "$dir/../../../Common/Drivers/SurfaceBook2/main.fish" configure
sudo systemctl enable surface-dtx-daemon.service
sudo systemctl enable --global surface-dtx-userd.service
end
runInstaller $argv
fish "$dir/../Surface/main.fish" $argv
end

View file

@ -17,10 +17,12 @@ begin
and source "$dir/../Software/pacman/main.fish" and source "$dir/../Software/pacman/main.fish"
and source "$dir/../Software/yay/main.fish" and source "$dir/../Software/yay/main.fish"
and source "$dir/../Software/PowerShell/main.fish"
and yayinst \ and yayinst \
linux-headers \ linux-headers \
pacman-contrib \ pacman-contrib \
powershell-bin yq
end end
source "$dir/../../Common/OS/install.fish" source "$dir/../../Common/OS/install.fish"

View file

@ -11,7 +11,7 @@ begin
end end
function installValhallaDeps -V mountDir function installValhallaDeps -V mountDir
pacstrap -K "$mountDir" fish git jq nix tmux pacstrap -K "$mountDir" fish git jq nix sudo tmux
end end
function getInstallerScript -V dir -S function getInstallerScript -V dir -S
@ -86,11 +86,10 @@ begin
true true
end end
and echo "$ARCH_HOSTNAME" | arch-chroot "$mountDir" tee /etc/hostname > /dev/null and echo (getConfig valhalla.hostname) | arch-chroot "$mountDir" tee /etc/hostname > /dev/null
and arch-chroot "$mountDir" mkinitcpio -P and arch-chroot "$mountDir" mkinitcpio -P
and runHook installDrivers "Installing drivers..." || true and runHook installDrivers "Installing drivers..." || true
and arch-chroot "$mountDir" bash "$tempDir/../Software/sudo/install.sh"
and runInOS fish "$tempDir/../Software/GRUB/main.fish" and runInOS fish "$tempDir/../Software/GRUB/main.fish"
and if set -l keyLayout (getConfig valhalla.keyboardLayout) and if set -l keyLayout (getConfig valhalla.keyboardLayout)

View file

@ -14,14 +14,33 @@ function deploySoftware -d "Deploys a the specified software action" -a action
end end
) )
if collectionActive essential if isEnabled valhalla.linux.secureBoot
source "$dir/../Config/SecureBoot/main.fish" $argv
end
and if isEnabled valhalla.linux.hardware.surfaceBook
source "$dir/../Drivers/SurfaceBook2/main.fish" $argv
end
and if isEnabled valhalla.linux.hardware.nvidiaGPU
source "$dir/../Software/nvidia-dkms/main.fish" $argv
end
and if isEnabled valhalla.linux.hardware.xoneReceiver
source "$dir/../Software/xone/main.fish" $argv
end
and if isEnabled valhalla.windows.dualboot.enable && $isInstall
yayinst bt-dualboot
end
and if collectionActive essential
if $isInstall if $isInstall
yayinst \ yayinst \
mkinitcpio-firmware \ mkinitcpio-firmware \
neofetch \ neofetch \
bash-completion \ bash-completion \
wget \ wget \
oh-my-posh-bin \
screen \ screen \
tmux \ tmux \
htop \ htop \
@ -36,6 +55,8 @@ function deploySoftware -d "Deploys a the specified software action" -a action
end end
and source "$dir/../../Common/Software/bash/main.fish" $argv and source "$dir/../../Common/Software/bash/main.fish" $argv
and source "$dir/../Software/sudo/main.fish" $argv
and source "$dir/../Software/Oh My Posh/main.fish" $argv
and source "$dir/../Software/openssh/main.fish" $argv and source "$dir/../Software/openssh/main.fish" $argv
and source "$dir/../Software/vim/main.fish" $argv and source "$dir/../Software/vim/main.fish" $argv
and source "$dir/../Software/git/main.fish" $argv and source "$dir/../Software/git/main.fish" $argv
@ -255,7 +276,6 @@ function deploySoftware -d "Deploys a the specified software action" -a action
and if collectionActive gaming and if collectionActive gaming
if $isInstall if $isInstall
yayinst \ yayinst \
steam \
chiaki-ng \ chiaki-ng \
osu-lazer-bin \ osu-lazer-bin \
libretro \ libretro \
@ -266,6 +286,7 @@ function deploySoftware -d "Deploys a the specified software action" -a action
end end
and source "$dir/../Software/Lutris/main.fish" $argv and source "$dir/../Software/Lutris/main.fish" $argv
and source "$dir/../Software/steam/main.fish" $argv
end end
and if collectionActive essential && $isInstall and if collectionActive essential && $isInstall

View file

@ -0,0 +1,20 @@
#!/bin/env fish
begin
set -l dir (status dirname)
set -l base "$dir/../../../Common/Software/Oh My Posh/main.fish"
source "$dir/../../Scripts/software.fish"
function installSW
yayinst oh-my-posh-bin
end
function configureSW -V base
fish "$base" configure
end
function userConfig -S -V base -a name
fish "$base" userConfig $argv
end
runInstaller $argv
end

View file

@ -0,0 +1,15 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst powershell-bin
end
function configureSW -V dir
fish "$dir/../../../Common/Software/PowerShell/main.fish" configure
end
runInstaller $argv
end

View file

@ -1,6 +1,7 @@
#!/bin/env fish #!/bin/env fish
begin begin
set -l dir (status dirname) set -l dir (status dirname)
set -l base "$dir/../../../Common/Software/aliae/main.fish"
source "$dir/../../Scripts/software.fish" source "$dir/../../Scripts/software.fish"
function installSW function installSW
@ -8,8 +9,12 @@ begin
aliae-bin aliae-bin
end end
function configureSW -V dir function configureSW -V base
fish "$dir/../../../Common/Software/aliae/main.fish" configure fish "$base" configure
end
function userConfig -V base
fish "$base" userConfig $argv
end end
runInstaller $argv runInstaller $argv

View file

@ -1,6 +1,7 @@
#!/bin/env fish #!/bin/env fish
begin begin
set -l dir (status dirname) set -l dir (status dirname)
set -l base "$dir/../../../Common/Software/git/main.fish"
source "$dir/../../Scripts/software.fish" source "$dir/../../Scripts/software.fish"
function installSW function installSW
@ -13,8 +14,12 @@ begin
gitflow-zshcompletion-avh gitflow-zshcompletion-avh
end end
function configureSW -V dir function configureSW -V base
fish "$dir/../../../Common/Software/git/main.fish" configure fish "$base" configure
end
function userConfig -V base
fish "$base" userConfig $argv
end end
runInstaller $argv runInstaller $argv

View file

@ -0,0 +1,17 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst \
nvidia-beta-dkms \
lib32-nvidia-utils-beta
end
function configureSW -V dir
fish "$dir/../../../Common/Software/nvidia-dkms/main.fish" configure
end
runInstaller $argv
end

View file

@ -1,16 +1,20 @@
#!/bin/env fish #!/bin/env fish
begin begin
set -l dir (status dirname) set -l dir (status dirname)
set -l base "$dir/../../../Common/Software/rclone/main.fish"
source "$dir/../../Scripts/software.fish" source "$dir/../../Scripts/software.fish"
source "$dir/../../../Common/Software/rclone/main.fish"
function installSW function installSW
yayinst \ yayinst \
rclone rclone
end end
function configureSW -V dir function configureSW -V base
fish "$dir/../../../Common/Software/rclone/main.fish" configure fish "$base" configure
end
function userConfig -V base -a name
fish "$base" userConfig $argv
end end
runInstaller $argv runInstaller $argv

View file

@ -0,0 +1,24 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst steam
end
function configureSW -V dir
. "$dir/../../../Common/Scripts/config.fish"
if isEnabled valhalla.hidpi
begin
printf %s\n \
"#!/bin/bash" \
"export STEAM_FORCE_DESKTOPUI_SCALING=2.0"
end | sudo tee /etc/profile.d/steam.sh > /dev/null
end
end
runInstaller $argv
end

View file

@ -0,0 +1,15 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
pacinst sudo
end
function configureSW
echo "%wheel ALL=(ALL:ALL) ALL" | sudo tee /etc/sudoers.d/wheel > /dev/null
end
runInstaller $argv
end

View file

@ -0,0 +1,22 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
set -l contextRoot (mktemp -d)
set -l repo https://github.com/manuth/xone.git
yayinst cabextract
if not dkms status --all | grep xone > /dev/null
git clone "$repo" "$contextRoot"
sudo env -C "$contextRoot" ./install.sh --release
sudo chmod -R a+rx /usr/src/xone*
yes "" | sudo xone-get-firmware.sh
end
rm -rf "$contextRoot" > /dev/null
end
runInstaller $argv
end

View file

@ -0,0 +1,13 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function configureSW -V dir
. "$dir/../../Software/KDE/input.fish"
addInputConfig 1118 2338 "Microsoft Surface Keyboard Touchpad" "NaturalScroll=true"
end
runInstaller $argv
fish "$dir/../Surface/main.fish" $argv
end

View file

@ -14,7 +14,7 @@ if [ (id -u) -eq 0 ]
--comment "PortValhalla setup user" \ --comment "PortValhalla setup user" \
--system \ --system \
--no-user-group \ --no-user-group \
--groups wheel,nix-users \ --groups nix-users \
--create-home \ --create-home \
--uid (getConfig valhalla.setupUser.id --json) \ --uid (getConfig valhalla.setupUser.id --json) \
"$name" "$name"
@ -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_NAME" --user "$name" "$INSTALLER_SCRIPT" and sudo --preserve-env --set-home --user "$name" "$INSTALLER_SCRIPT"
rm "$sudoConfig" rm "$sudoConfig"
userdel -rf "$name" userdel -rf "$name"
else else
@ -59,4 +59,9 @@ else
end end
and runHook postInstall || true and runHook postInstall || true
echo "The installation finished successfully!"
and echo "This machine will reboot in 5 seconds..."
and echo "Press CTRL-C to abort..."
and sleep 5
and systemctl reboot
end end

View file

@ -18,7 +18,7 @@ function runSetup
if not type -q installValhallaDeps if not type -q installValhallaDeps
function installValhallaDeps function installValhallaDeps
echo 'Please set up the hook `installValhallaDeps` for installing `fish`, `git`, `jq`, `nix` and `tmux`.' echo 'Please set up the hook `installValhallaDeps` for installing `fish`, `git`, `jq`, `nix`, `sudo` and `tmux`.'
exit 1 exit 1
end end
end end

View file

@ -51,7 +51,7 @@ $null = New-Module {
$profiles = & { $profiles = & {
. "$PSScriptRoot/SoftwareManagement.ps1"; . "$PSScriptRoot/SoftwareManagement.ps1";
if (Test-Command "wsl") { if (-not $IsWindows -or (Test-Command "wsl")) {
return Invoke-ConfigScript "getProfiles"; return Invoke-ConfigScript "getProfiles";
} else { } else {
return Get-ChildItem "$PSScriptRoot/../../../.config" | ForEach-Object { Split-Path -LeafBase $_ }; return Get-ChildItem "$PSScriptRoot/../../../.config" | ForEach-Object { Split-Path -LeafBase $_ };
@ -61,16 +61,20 @@ $null = New-Module {
$choice = $Host.UI.PromptForChoice( $choice = $Host.UI.PromptForChoice(
"Select Profile", "Select Profile",
(& { (& {
switch (Get-Stage) { if ($IsWindows) {
([WindowsInstallerAction]::Backup) { switch (Get-Stage) {
"Which profile do you wish to back up?"; ([WindowsInstallerAction]::Backup) {
} "Which profile do you wish to back up?";
([WindowsInstallerAction]::Install) { }
"Which profile do you wish to install?"; ([WindowsInstallerAction]::Install) {
} "Which profile do you wish to install?";
$null { }
"Which profile do you wish to set up?"; $null {
"Which profile do you wish to set up?";
}
} }
} else {
"Please select a profile:";
} }
}), }),
(& { (& {

View file

@ -25,6 +25,10 @@ function isSet -S -a property
not test "$(getConfig "$property" --json)" = "null" not test "$(getConfig "$property" --json)" = "null"
end end
function isEnabled -S -a property
getConfig "$property" --json | jq --exit-status > /dev/null
end
function collectionActive -S -a name function collectionActive -S -a name
[ "$(getConfig "valhalla.software.$name" --json)" = "true" ] [ "$(getConfig "valhalla.software.$name" --json)" = "true" ]
end end

View file

@ -0,0 +1,19 @@
function addInputConfig -a vendorID productID name
set -l file /etc/xdg/kcminputrc
set -l statements $argv[4..]
if [ -z "$statements" ]
set statements (cat)
end
if not cat $file | grep "\\[$name\\]" > /dev/null 2>&1
begin
printf %s\n \
(if [ -f $file ] && [ -n (cat $file) ]
echo ""
end) \
"[Libinput][$vendorID][$productID][$name]" \
"$statements"
end | sudo tee $file > /dev/null
end
end

View file

@ -0,0 +1,31 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function configureSW -V dir
source "$dir/../bash/profile.fish"
source "$dir/../fish/profile.fish"
begin
printf %s\n \
'set -x POSH_THEME $POSH_THEME' \
"oh-my-posh init fish | source" \
"oh-my-posh completion fish | source"
end | installFishProfile "oh-my-posh"
begin
printf %s\n \
'eval "$(oh-my-posh init bash)"' \
'eval "$(oh-my-posh completion bash)"'
end | installBashProfile "oh-my-posh"
sudo -HE pwsh "$dir/Manage.ps1" Configure
end
function userConfig -S -V dir -a name
pwsh -CommandWithArgs '& $args[0] ConfigureUser @{ user=$args[1]; }' "$dir/Manage.ps1" $name
end
runInstaller $argv
end

View file

@ -62,7 +62,7 @@ $null = New-Module {
$name = $Arguments.Name; $name = $Arguments.Name;
Add-PowerShellProfileStatement ` Add-PowerShellProfileStatement `
-DefaultUser ` -System `
-Category $name ` -Category $name `
-Script "Import-Module `"$name`";"; -Script "Import-Module `"$name`";";
}; };

View file

@ -0,0 +1,11 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function configureSW -V dir
sudo -HE pwsh "$dir/Manage.ps1" Configure
end
runInstaller $argv
end

View file

@ -0,0 +1,11 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
sudo -HE pwsh "$dir/Manage.ps1"
end
runInstaller $argv
end

View file

@ -38,6 +38,12 @@ begin
"aliae completion fish | source" "aliae completion fish | source"
end | installFishProfile "aliae" "aliae" end | installFishProfile "aliae" "aliae"
end end
sudo -HE pwsh "$dir/Main.ps1" Configure
end
function userConfig -V dir -a user
pwsh -CommandWithArgs '& $args[0] ConfigureUser @{ user=$args[1]; }' "$dir/Main.ps1" $user
end end
runInstaller $argv runInstaller $argv

View file

@ -7,7 +7,7 @@ param (
. "$PSScriptRoot/../../Scripts/System.ps1"; . "$PSScriptRoot/../../Scripts/System.ps1";
. "$PSScriptRoot/../../Types/InstallerAction.ps1"; . "$PSScriptRoot/../../Types/InstallerAction.ps1";
$null = New-Module { & {
param( param(
[hashtable] $Parameters [hashtable] $Parameters
) )

View file

@ -8,7 +8,7 @@ begin
end end
function userConfig -S -V dir -a name function userConfig -S -V dir -a name
configureGit "$name" pwsh -CommandWithArgs '& $args[0] ConfigureUser @{ user=$args[1]; }' "$dir/Manage.ps1" $name
end end
runInstaller $argv runInstaller $argv

View file

@ -0,0 +1,34 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function configureSW -V dir
set -l indicator "GRUB_CMDLINE_LINUX_DEFAULT=\""
set -l config "nvidia_drm.fbdev=1"
# According to: https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks
begin
printf %s\n \
"options nvidia NVreg_PreserveVideoMemoryAllocations=1" \
"options nvidia NVreg_TemporaryFilePath=/var/tmp"
end | sudo tee /etc/modprobe.d/nvidia-power-management.conf > /dev/null
sudo systemctl enable \
nvidia-suspend.service \
nvidia-hibernate.service \
nvidia-resume.service
if ! cat /etc/default/grub | grep "$indicator.*$config" > /dev/null
sudo sed -i /etc/default/grub \
-e "/$indicator/{" \
-e "s/\($indicator.*[^ ]\)\(\"\)/\1 \2/" \
-e "s/\($indicator.*\)\(\"\)/\1$config\2/" \
-e "}"
fish "$dir/../GRUB/main.fish" configure
end
end
runInstaller $argv
end

View file

@ -0,0 +1,11 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
sudo -HE pwsh "$dir/Manage.ps1"
end
runInstaller $argv
end

View file

@ -14,9 +14,32 @@ begin
if [ (echo "$configs" | jq "length") -gt 0 ] if [ (echo "$configs" | jq "length") -gt 0 ]
if [ "$XDG_SESSION_TYPE" = "tty" ] if [ "$XDG_SESSION_TYPE" = "tty" ]
set -l sessionPid
set -l freeTty
set -l service
set -l sessionConfig
set -l welcomeConfig ~"$name"/.config/plasma-welcomerc
set -l entryPoint ~"$name"/.config/autostart/PortValhallaProfile.desktop set -l entryPoint ~"$name"/.config/autostart/PortValhallaProfile.desktop
sudo -u "$name" mkdir -p "$(dirname "$entryPoint")" sudo -u "$name" mkdir -p "$(dirname "$entryPoint")"
begin
set -l file (sudo mktemp)
sudo openvt -sw -- bash -c "tty > $(string escape $file)"
set freeTty (basename (sudo cat $file))
sudo rm $file
end
set service "getty@$freeTty"
set sessionConfig "/etc/systemd/system/$service.service.d/autologin.conf"
sudo mkdir -p (dirname $sessionConfig)
begin
printf %s\n \
"[General]" \
"LastSeenVersion=1.0.0" \
"ShowUpdatePage=false"
end | sudo -u "$name" tee "$welcomeConfig" > /dev/null
begin begin
printf %s\n \ printf %s\n \
"#!/user/bin/env xdg-open" \ "#!/user/bin/env xdg-open" \
@ -26,20 +49,41 @@ begin
"Terminal=false" ( "Terminal=false" (
printf "%s " \ printf "%s " \
"Exec=env" \ "Exec=env" \
"VALHALLA_REQUEST_LOGOUT=1" \
"CONFIG_NAME=$(echo "$CONFIG_NAME" | 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
sudo chmod +x "$entryPoint" sudo chmod +x "$entryPoint"
sudo -Eu "$name" dbus-launch --exit-with-session startplasma-wayland &> /dev/null
rm "$entryPoint" begin
rm ~"$name"/.config/plasma-welcomerc printf %s\n \
"[Service]" \
"ExecStart=" \
"ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin $name %I \$TERM"
end | sudo tee "$sessionConfig" > /dev/null
sudo systemctl daemon-reload
sudo systemctl restart $service
while [ -z "$sessionPid" ]
set sessionPid (sudo pgrep -t $freeTty -u "$name")
end
sudo openvt -sw -- sudo -u "$name" env (sudo cat /proc/$sessionPid/environ | string split0) /usr/lib/plasma-dbus-run-session-if-needed startplasma-wayland
sudo rm "$entryPoint"
sudo rm "$welcomeConfig"
sudo rm "$sessionConfig"
sudo rmdir (dirname "$sessionConfig")
sudo systemctl daemon-reload
else if [ -n "$name" ] && [ "$name" != "$USER" ] else if [ -n "$name" ] && [ "$name" != "$USER" ]
sudo -Eu "$name" CONFIG_NAME="$CONFIG_NAME" 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!"
mkdir -p ~/.mnt
touch ~/.mnt/.trackerignore
for config in (echo "$configs" | jq '.[]' --raw-output0 | string split0) for config in (echo "$configs" | jq '.[]' --raw-output0 | string split0)
set -l configKey "$key.$config" set -l configKey "$key.$config"
@ -55,6 +99,12 @@ begin
rclone config || true rclone config || true
systemctl --user enable "$serviceName" --now || true systemctl --user enable "$serviceName" --now || true
end end
echo "rclone was configured successfully!"
if [ -n "$VALHALLA_REQUEST_LOGOUT" ]
read -P "Please log out"
end
end end
end end
end end

View file

@ -4,7 +4,7 @@ begin
source "$dir/../../Scripts/software.fish" source "$dir/../../Scripts/software.fish"
function userConfig -V dir -a name function userConfig -V dir -a name
pwsh "$dir/Main.ps1" ConfigureUser; pwsh -CommandWithArgs '& $args[0] ConfigureUser @{ user=$args[1]; }' "$dir/Main.ps1" $user
end end
runInstaller $argv runInstaller $argv

View file

@ -0,0 +1,19 @@
param(
$Action,
[hashtable] $Arguments
)
. "$PSScriptRoot/../../Scripts/Software.ps1";
. "$PSScriptRoot/../PowerShell/Profile.ps1";
Start-SoftwareInstaller @PSBoundParameters `
-Configurator {
Add-PowerShellProfileStatement `
-System `
-Category "zoxide" `
-Script (
@(
"# zoxide",
(Get-ScriptInitializer "zoxide init powershell | Out-String")
) -join [System.Environment]::NewLine);
};

View file

@ -8,7 +8,7 @@ begin
source "$dir/../fish/profile.fish" source "$dir/../fish/profile.fish"
echo 'eval "$(zoxide init bash)"' | installBashProfile "zoxide" echo 'eval "$(zoxide init bash)"' | installBashProfile "zoxide"
echo "zoxide init fish | source" | installFishProfile "zoxide" echo "zoxide init fish | source" | installFishProfile "zoxide"
sudo pwsh -NoProfile "$dir/install.ps1" sudo -HE pwsh -NoProfile "$dir/Main.ps1" Configure
end end
runInstaller $argv runInstaller $argv

View file

@ -8,7 +8,6 @@ function Start-Setup {
$Global:InformationPreference = "Continue"; $Global:InformationPreference = "Continue";
$Global:ErrorActionPreference = "Inquire"; $Global:ErrorActionPreference = "Inquire";
$env:CONFIG_NAME ??= $ConfigurationName; $env:CONFIG_NAME ??= $ConfigurationName;
$null = $env:WIN_COMPUTER_NAME;
$null = $env:SETUP_SCRIPT_NAME ??= "$PSScriptRoot/Install.ps1"; $null = $env:SETUP_SCRIPT_NAME ??= "$PSScriptRoot/Install.ps1";
$env:WSLENV = "CONFIG_NAME"; $env:WSLENV = "CONFIG_NAME";
@ -218,7 +217,7 @@ function Start-Setup {
# Adjust unattended settings # Adjust unattended settings
$computerName = (Get-Component (Get-PassSettings "specialize") "Microsoft-Windows-Shell-Setup").SelectSingleNode("./ua:ComputerName", $namespace); $computerName = (Get-Component (Get-PassSettings "specialize") "Microsoft-Windows-Shell-Setup").SelectSingleNode("./ua:ComputerName", $namespace);
$computerName.InnerText = "$env:WIN_COMPUTER_NAME"; $computerName.InnerText = $valhallaConfig.hostname;
# Execute corresponding installer script after startup # Execute corresponding installer script after startup
$oobeSettings = (Get-Component (Get-PassSettings "oobeSystem") "Microsoft-Windows-Shell-Setup"); $oobeSettings = (Get-Component (Get-PassSettings "oobeSystem") "Microsoft-Windows-Shell-Setup");

View file

@ -3,25 +3,30 @@ param(
[hashtable] $Arguments [hashtable] $Arguments
) )
. "$PSScriptRoot/../../../Common/Software/PowerShell/Profile.ps1"; & {
. "$PSScriptRoot/../../../Common/Scripts/Software.ps1"; param(
[hashtable] $Parameters
)
Start-SoftwareInstaller @PSBoundParameters ` . "$PSScriptRoot/../../../Common/Software/PowerShell/Profile.ps1";
-Installer { . "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
param( . "$PSScriptRoot/../../../Common/Types/InstallerAction.ps1";
[scriptblock] $Installer $base = "$PSScriptRoot/../../../Common/Software/zoxide/Main.ps1";
)
Install-ChocoPackage zoxide; Start-SoftwareInstaller @PSBoundParameters `
Install-WingetPackage junegunn.fzf; -Installer {
} ` param(
-Configurator { [scriptblock] $Installer
Add-PowerShellProfileStatement ` )
-System `
-Category "zoxide" ` Install-ChocoPackage zoxide;
-Script ( Install-WingetPackage junegunn.fzf;
@( } `
"# zoxide", -Configurator {
(Get-ScriptInitializer "zoxide init powershell | Out-String") param(
) -join [System.Environment]::NewLine); $Arguments
}; )
& $base ([InstallerAction]::ConfigureUser) @PSBoundParameters;
};
} $PSBoundParameters;