Compare commits

...

532 commits

Author SHA1 Message Date
Manuel Thalmann 91e5d860e7 Exclude unnecessary files from backup 2024-09-10 02:39:37 +02:00
Manuel Thalmann 4191d5e89d Add a word of warning after backup 2024-09-10 02:39:09 +02:00
Manuel Thalmann 513d873f0f Add a script for creating backups 2024-09-10 02:39:09 +02:00
Manuel Thalmann 61b898fdd5 Force profile selection for Windows installation actions 2024-09-10 02:39:09 +02:00
Manuel Thalmann 74273705ee Force line endings of Unix scripts 2024-09-10 02:39:09 +02:00
Manuel Thalmann 190248828d Start setup automatically 2024-09-10 02:39:09 +02:00
Manuel Thalmann c1b9674ff0 Show profile selection during setup 2024-09-10 02:39:09 +02:00
Manuel Thalmann 6962f6d323 Add a function for selecting the profile 2024-09-10 02:39:09 +02:00
Manuel Thalmann b8c8fb28f3 Use same installer script for all profiles 2024-09-10 02:39:09 +02:00
Manuel Thalmann d42320ce4a Fix non-functioning WSL installation 2024-09-10 02:39:09 +02:00
Manuel Thalmann 139cf706fc Make Oh-My-Posh theme location dynamic 2024-09-10 02:39:09 +02:00
Manuel Thalmann b74e9c632e Improve performance 2024-09-10 02:39:09 +02:00
Manuel Thalmann d1a0e38805 Update Selenium to the newest version 2024-09-10 02:39:09 +02:00
Manuel Thalmann 03c4f8012f Switch to named flakes 2024-09-10 02:39:09 +02:00
Manuel Thalmann 6e7bfed63e Store user related options properly 2024-09-10 02:39:09 +02:00
Manuel Thalmann e47e98b804 Refactor the directory structure 2024-09-10 02:39:09 +02:00
Manuel Thalmann eee70fdf2a Add code for cleaning up after installations 2024-09-10 02:39:09 +02:00
Manuel Thalmann ae0913e2ef Add functions for uninstalling packages 2024-09-10 02:39:09 +02:00
Manuel Thalmann d10dd9205c Improve assignments of groups 2024-09-10 02:39:09 +02:00
Manuel Thalmann ea3935e737 Remove unnecessary policy change 2024-09-10 02:39:09 +02:00
Manuel Thalmann 4e793a3a83 Migrate winiso script to fish 2024-09-10 02:39:09 +02:00
Manuel Thalmann d3cafda83a Ask for live scripts only once 2024-09-10 02:39:09 +02:00
Manuel Thalmann 6a852059fb Install Ubuntu automatically 2024-09-10 02:39:09 +02:00
Manuel Thalmann f410c33972 Add a backup script for reWASD 2024-09-10 02:39:09 +02:00
Manuel Thalmann 90f97848ce Add a backup script for Visual Studio 2024-09-10 02:39:09 +02:00
Manuel Thalmann 2397a1919d Allow backing up TrackMania Forever 2024-09-10 02:39:09 +02:00
Manuel Thalmann a8bc078525 Allow testing winget packages with specific scope 2024-09-10 02:39:09 +02:00
Manuel Thalmann 69a61e6002 Allow backing up RetroArch 2024-09-10 02:39:09 +02:00
Manuel Thalmann 0a83eb7e10 Add scripts for backing up PuTTY 2024-09-10 02:39:09 +02:00
Manuel Thalmann fb90448395 Add scripts for backing up osu! 2024-09-10 02:39:09 +02:00
Manuel Thalmann 7127bae277 Install osu!lazer per user 2024-09-10 02:39:09 +02:00
Manuel Thalmann 83101c8873 Add backup support for ManiaPlanet 2024-09-10 02:39:09 +02:00
Manuel Thalmann 9c6f6a85e5 Add scripts for backing up and restoring LGHub 2024-09-10 02:39:08 +02:00
Manuel Thalmann d33940c38c Allow users to restore a backup 2024-09-10 02:36:02 +02:00
Manuel Thalmann 6e6cef4392 Add scripts for backing up and restoring personal files 2024-09-10 02:36:02 +02:00
Manuel Thalmann 621e0842ed Fix non-functioning profile script 2024-09-10 02:36:02 +02:00
Manuel Thalmann 5dd9205437 Ensure 7z is installed for backups 2024-09-10 02:36:02 +02:00
Manuel Thalmann 1581ddc80c Streamline restoration of directories 2024-09-10 02:36:02 +02:00
Manuel Thalmann a107654d40 Set a default path for backup artifacts 2024-09-10 02:36:02 +02:00
Manuel Thalmann 372e75d655 Add capabilities to back up apps 2024-09-10 02:36:02 +02:00
Manuel Thalmann 678c56cf78 Allow specifying a backup action 2024-09-10 02:36:02 +02:00
Manuel Thalmann 66779b42cc Ignore unspecified backup archives 2024-09-10 02:36:02 +02:00
Manuel Thalmann 01791b293c Ignore inexistent backup artifacts 2024-09-10 02:36:02 +02:00
Manuel Thalmann 1e35fa150f Make the install script action agnostic 2024-09-10 02:36:02 +02:00
Manuel Thalmann 8c7d22a780 Rename the Windows installer script 2024-09-10 02:36:02 +02:00
Manuel Thalmann fa3e8cf821 Rename outdated script 2024-09-10 02:36:02 +02:00
Manuel Thalmann 253331ea7a Silence errors concerning empty aliae configurations 2024-09-10 02:36:02 +02:00
Manuel Thalmann afd1f38a81 Make Operations script cross platform 2024-09-10 02:36:02 +02:00
Manuel Thalmann 10a64e3424 Handle OneShot tasks only on Windows 2024-09-10 02:36:02 +02:00
Manuel Thalmann a381e0e892 Add a script for managing backups 2024-09-10 02:36:02 +02:00
Manuel Thalmann 1abc314a51 Add tools for managing aliae 2024-09-10 02:36:02 +02:00
Manuel Thalmann 597dcc9b83 Fix non-functioning aliae installation 2024-09-10 02:36:02 +02:00
Manuel Thalmann 36ae05b90d Create dedicated script for creating users 2024-09-10 02:36:02 +02:00
Manuel Thalmann 5991878f2d Create dedicated script for installing software 2024-09-10 02:36:02 +02:00
Manuel Thalmann 08b3f2d1e9 Prevent reading nix config multiple times 2024-09-10 02:36:02 +02:00
Manuel Thalmann b54ec95a7a Ensure only one user is enabled at once 2024-09-10 02:36:02 +02:00
Manuel Thalmann 6346644f76 Prevent unnecessary file creation 2024-09-10 02:36:02 +02:00
Manuel Thalmann 0a586e3323 Execute OneShot tasks in any operation 2024-09-10 02:36:02 +02:00
Manuel Thalmann ecaf4ff7b0 Use /mnt as mount directory 2024-09-10 02:36:02 +02:00
Manuel Thalmann e232b1ce9b Force the use of the managed distribution 2024-09-10 02:36:02 +02:00
Manuel Thalmann 1dcf168a9f Initialize operation for all users 2024-09-10 02:36:01 +02:00
Manuel Thalmann b1a15cfd66 Handle initialization in operation code 2024-08-27 04:15:37 +02:00
Manuel Thalmann 6a38a943c0 Execute script non-interactive during OneShot tasks 2024-08-27 03:50:08 +02:00
Manuel Thalmann 12f0b4aebe Exit script after running OneShot task 2024-08-27 03:45:44 +02:00
Manuel Thalmann 96818ef702 Modify user after first login 2024-08-27 03:27:54 +02:00
Manuel Thalmann a6a2b6331e Rearm Windows Activation before creating MSAcc 2024-08-27 03:25:19 +02:00
Manuel Thalmann 867553c479 Register MSAcc logon script early 2024-08-27 03:24:37 +02:00
Manuel Thalmann d8e31c4361 Allow rebooting without registering setup 2024-08-27 03:11:35 +02:00
Manuel Thalmann 5d89828dc4 Fix non-functioning NoProfile argument 2024-08-27 02:09:04 +02:00
Manuel Thalmann 9961690fea Prevent unnecessary installation actions 2024-08-27 01:57:46 +02:00
Manuel Thalmann 1ed75d314e Only install PowerShell module if necessary 2024-08-27 01:25:32 +02:00
Manuel Thalmann cb24c6bf17 Streamline PowerShell installation 2024-08-27 00:45:46 +02:00
Manuel Thalmann 8faaef98c9 Add further functionality to the WSL script 2024-08-27 00:38:46 +02:00
Manuel Thalmann 6f9437002a Create a separate script for WSL interaction 2024-08-26 23:33:46 +02:00
Manuel Thalmann 3b9c291689 Fix recursive configuration 2024-08-25 03:58:28 +02:00
Manuel Thalmann 171f34bd57 Fix malformed module 2024-08-24 18:35:43 +02:00
Manuel Thalmann fe63a74d88 Keep Windows fixes separate 2024-08-24 16:56:29 +02:00
Manuel Thalmann 42e9b3ddf1 Remove WSL after operation 2024-08-24 16:52:41 +02:00
Manuel Thalmann 8ddce6410a Make distribution name unique 2024-08-24 16:41:05 +02:00
Manuel Thalmann 846e3fee5a Streamline WSL distribution name 2024-08-24 16:27:34 +02:00
Manuel Thalmann 9a62c37880 Remove unused resources after user setup 2024-08-24 16:15:10 +02:00
Manuel Thalmann 85dd40fcbc Print update logs properly 2024-08-24 14:47:51 +02:00
Manuel Thalmann bf0c7abcc3 Allow overriding Windows settings 2024-08-24 14:20:22 +02:00
Manuel Thalmann d83b64608a Update incorrect path 2024-08-24 14:11:38 +02:00
Manuel Thalmann 1d4a62b7e2 Simplify osu!lazer installation 2024-08-24 14:10:02 +02:00
Manuel Thalmann 17e7699179 Determine name of setup user properly 2024-08-24 14:01:05 +02:00
Manuel Thalmann 41e79cdf07 Make OMP configuration platform independent 2024-08-24 13:27:48 +02:00
Manuel Thalmann a298518f37 Fix incorrect character in OMP theme 2024-08-24 13:27:35 +02:00
Manuel Thalmann d0fd6fcc61 Remove unnecessary code 2024-08-24 04:25:07 +02:00
Manuel Thalmann f1a3fd2f25 Remove unnecessary loop 2024-08-24 04:24:55 +02:00
Manuel Thalmann 2f82ae4544 Add missing module 2024-08-24 04:24:37 +02:00
Manuel Thalmann 2af45fbf89 Add nextcloud to the module list 2024-08-24 04:18:57 +02:00
Manuel Thalmann 0df3d90ca9 Add a function for creating shortcuts 2024-08-24 04:18:33 +02:00
Manuel Thalmann f721cd8910 Configure nextcloud syncs 2024-08-24 04:07:47 +02:00
Manuel Thalmann 4db4136aab Allow configuring nextcloud syncs 2024-08-24 04:07:35 +02:00
Manuel Thalmann 478e489911 Create separate option holding win users 2024-08-24 03:25:28 +02:00
Manuel Thalmann a93413d54f Rename Nextcloud installer 2024-08-24 01:50:07 +02:00
Manuel Thalmann 0cda6e7966 Add file system driver for dual boot 2024-08-24 01:41:09 +02:00
Manuel Thalmann 08e4d1e644 Prevent unnecessary config evaluation 2024-08-24 01:31:39 +02:00
Manuel Thalmann 40b88603c6 Fix non-functioning installer 2024-08-24 01:27:26 +02:00
Manuel Thalmann 6c9acc515d Install vscode extensions by default 2024-08-24 01:16:56 +02:00
Manuel Thalmann fcd05a87d2 Load theme file from WSL properly 2024-08-24 00:59:59 +02:00
Manuel Thalmann 588d410741 Update aliae configuration script 2024-08-24 00:42:57 +02:00
Manuel Thalmann 417db2d35b Strip duplicate variables and aliases 2024-08-24 00:08:58 +02:00
Manuel Thalmann b9f27baa9b Install posh theme automatically 2024-08-23 23:53:48 +02:00
Manuel Thalmann 682808480c Export missing function 2024-08-23 23:50:13 +02:00
Manuel Thalmann c97815f065 Install aliae by default 2024-08-23 23:46:23 +02:00
Manuel Thalmann 4b0d0afa4d Add scripts for changing aliae config 2024-08-23 23:44:51 +02:00
Manuel Thalmann 267eb3d7ec Fix compatibility with mixed new line characters 2024-08-23 23:44:23 +02:00
Manuel Thalmann 1ceb0cd8e4 Add a script for installing aliae 2024-08-23 22:38:28 +02:00
Manuel Thalmann 27064c97b5 Add desired posh theme 2024-08-23 19:43:06 +02:00
Manuel Thalmann 3aae307e2a Make option names more clear 2024-08-23 19:42:27 +02:00
Manuel Thalmann d957b98c33 Allow configuring oh-my-posh 2024-08-23 19:39:18 +02:00
Manuel Thalmann 70b3768ec2 Fetch config from proper section 2024-08-23 19:24:49 +02:00
Manuel Thalmann b2541dab68 Adjust configuration accordingly 2024-08-23 19:14:09 +02:00
Manuel Thalmann 020e592065 Refactor option descriptions 2024-08-23 19:02:06 +02:00
Manuel Thalmann 1264202a88 Clean up the Windows configuration 2024-08-23 18:59:49 +02:00
Manuel Thalmann e19429eb3a Clean up the users.nix file 2024-08-23 18:51:54 +02:00
Manuel Thalmann 971daed11f Create dedicated rclone module 2024-08-23 18:48:30 +02:00
Manuel Thalmann fc8113d2cc Move git module to separate directory 2024-08-23 18:42:16 +02:00
Manuel Thalmann cec1feaa2f Move git options to separate module 2024-08-23 18:40:24 +02:00
Manuel Thalmann 0e23435397 Fix inheritance of user config 2024-08-23 18:28:20 +02:00
Manuel Thalmann 66e5405e74 Allow OS specific settings 2024-08-23 18:11:48 +02:00
Manuel Thalmann 3f049600a4 Update archiso 2024-08-23 14:19:56 +02:00
Manuel Thalmann 9b06999370 Set user info during git setup 2024-08-23 02:01:16 +02:00
Manuel Thalmann cda5ce64c5 Make all config scripts platform independent 2024-08-23 01:57:53 +02:00
Manuel Thalmann 708f689113 Allow leaving aliases unspecified 2024-08-23 01:52:25 +02:00
Manuel Thalmann 9505d6891f Make scripts platform independent 2024-08-23 01:52:04 +02:00
Manuel Thalmann 6d74c1b6cc Add scripts for configuring git 2024-08-23 01:43:26 +02:00
Manuel Thalmann ce0473d106 Configure software implicitly 2024-08-23 01:41:32 +02:00
Manuel Thalmann eda3c967ae Skip profile creation for PinnedItem 2024-08-22 23:55:41 +02:00
Manuel Thalmann 2224796241 Allow skipping powershell module registration 2024-08-22 23:55:00 +02:00
Manuel Thalmann 44ae99f063 Add profiles to the flake 2024-08-22 23:37:53 +02:00
Manuel Thalmann f93b3697bc Remove user profile of OneShot user 2024-08-22 23:12:11 +02:00
Manuel Thalmann 63844c8cf5 Add missing OneShotTask declaration 2024-08-22 20:41:30 +02:00
Manuel Thalmann 980489a29d Fix infinite loop 2024-08-22 20:41:17 +02:00
Manuel Thalmann 91993ea2c7 Fix handling empty error messages 2024-08-22 20:12:18 +02:00
Manuel Thalmann 90fc39ef6d Add choco to the profile of the setup user 2024-08-22 13:46:55 +02:00
Manuel Thalmann 19bebca310 Fix incorrect typings 2024-08-22 11:11:12 +02:00
Manuel Thalmann dbd6e5d9d8 Fix permission issues when enabling Win hack 2024-08-22 11:11:00 +02:00
Manuel Thalmann b60c8ca60e Register setup script as admin 2024-08-22 11:10:39 +02:00
Manuel Thalmann 49b58727f2 Execute the entire installer using live scripts 2024-08-21 23:21:32 +02:00
Manuel Thalmann c0f63f7b52 Streamline the creation of users 2024-08-21 18:34:18 +02:00
Manuel Thalmann ef372f7feb Replace osk with cmd during debugging 2024-09-10 01:54:44 +02:00
Manuel Thalmann bdb4eaed80 Prevent pauses in OneShot tasks 2024-09-10 01:54:44 +02:00
Manuel Thalmann c9fbf55d52 Print commands in debug mode 2024-09-10 01:54:44 +02:00
Manuel Thalmann 1fa0a30755 Run OneShot tasks with dedicated user 2024-09-10 01:54:44 +02:00
Manuel Thalmann 43a9d867bb Add function for generating startup command 2024-09-10 01:54:44 +02:00
Manuel Thalmann bd9234e3bb Allow registering startup script for the default user 2024-09-10 01:54:44 +02:00
Manuel Thalmann b0dd02f3ce Prevent unnecessary errors during WSL execution 2024-09-10 01:54:44 +02:00
Manuel Thalmann 4157d698e3 Register WSL before running OneShot tasks 2024-09-10 01:54:43 +02:00
Manuel Thalmann 79d5b6d06c Overwrite broken module 2024-09-10 01:54:04 +02:00
Manuel Thalmann 394d06ae48 Prevent initialization of nested operations 2024-09-10 01:54:04 +02:00
Manuel Thalmann 75383437d8 Improve log messages of OneShot tasks 2024-09-10 01:54:04 +02:00
Manuel Thalmann 253fcbec6e Retry Linux path conversion for errors 2024-09-10 01:54:04 +02:00
Manuel Thalmann a23719f83b Fix typo 2024-09-10 01:54:04 +02:00
Manuel Thalmann 83cb3b33e4 Fix broken signature of Restart-Intermediate 2024-09-10 01:54:04 +02:00
Manuel Thalmann f3b83c78a0 Report unexpected path conversions 2024-09-10 01:54:04 +02:00
Manuel Thalmann 76a293d341 Load missing path 2024-09-10 01:54:04 +02:00
Manuel Thalmann 09cb18a0d5 Ensure error file can be read from 2024-09-10 01:54:04 +02:00
Manuel Thalmann 62d70c1375 Streamline OneShot task handler 2024-09-10 01:54:04 +02:00
Manuel Thalmann 1499099301 Simplify script registration 2024-09-10 01:54:04 +02:00
Manuel Thalmann 7902b864ed Fix broken regedit paths 2024-09-10 01:54:04 +02:00
Manuel Thalmann 34d9511736 Allow registering reboots for users 2024-09-10 01:54:04 +02:00
Manuel Thalmann b644ca406a Prevent users from being excluded 2024-09-10 01:54:04 +02:00
Manuel Thalmann fd9db7a4ff Force copying of Linux users to Windows 2024-09-10 01:54:04 +02:00
Manuel Thalmann a26b1fe78c Improve log messages of updates 2024-09-10 01:54:04 +02:00
Manuel Thalmann bdfc43b805 Remove unnecessary command 2024-09-10 01:54:04 +02:00
Manuel Thalmann c070bde72a Fix time for QEMU VMs 2024-09-10 01:54:04 +02:00
Manuel Thalmann 47e553ee6a Remove unnecessary desktop icons 2024-09-10 01:54:04 +02:00
Manuel Thalmann b3e8319348 Add a timeout for the reWASD downloader 2024-09-10 01:54:04 +02:00
Manuel Thalmann c32f40860c Allow setting a timeout for clicking download buttons 2024-09-10 01:54:04 +02:00
Manuel Thalmann c2e43c73df Emit errors concerning WSL commands 2024-09-10 01:54:04 +02:00
Manuel Thalmann ab95a43bdf Emit errors using Write-Error 2024-09-10 01:54:04 +02:00
Manuel Thalmann ccfe29799a Convert Argument to string explicitly 2024-09-10 01:54:04 +02:00
Manuel Thalmann ecf9e8e689 Ignore unfinished browser downloads 2024-09-10 01:54:04 +02:00
Manuel Thalmann 9ea809adfd Install powershell modules for all users 2024-09-10 01:54:04 +02:00
Manuel Thalmann bcbf53297b Fix typos 2024-09-10 01:54:04 +02:00
Manuel Thalmann 7ebf09b93f Install AutoHotkey as preparation 2024-09-10 01:54:04 +02:00
Manuel Thalmann 0e18b63853 Allow running live scripts in debug mode 2024-09-10 01:54:04 +02:00
Manuel Thalmann c6e7d2d3d5 Generate env variables using shorthand scripts 2024-09-10 01:54:04 +02:00
Manuel Thalmann 7838c7186e Allow running installation in debug mode 2024-09-10 01:54:04 +02:00
Manuel Thalmann d37f4da080 Redirect winiso exit code properly 2024-09-10 01:54:04 +02:00
Manuel Thalmann d611857375 Allow specifying winiso build type 2024-09-10 01:54:04 +02:00
Manuel Thalmann 4553548a3a Refactor winget check for rare issue 2024-09-10 01:54:04 +02:00
Manuel Thalmann 8f820297c7 Disable Windows Update reboot only as admin 2024-09-10 01:54:04 +02:00
Manuel Thalmann 11f80cda08 Add a function for queueing startup commands 2024-09-10 01:54:04 +02:00
Manuel Thalmann 2f2a3f53fb Hide output of DISM commands 2024-09-10 01:54:04 +02:00
Manuel Thalmann a5430d0298 Ensure website is loaded before download 2024-09-10 01:54:04 +02:00
Manuel Thalmann 1e3968fd0d Prevent Jellyfin from rebooting 2024-09-10 01:54:04 +02:00
Manuel Thalmann 3ca7554422 Improve handling of slow websites 2024-09-10 01:54:04 +02:00
Manuel Thalmann aa8513b15a Fix potential CRC errors 2024-09-10 01:54:04 +02:00
Manuel Thalmann 5f4548403c Ensure auto reboot is disabled properly 2024-09-10 01:54:04 +02:00
Manuel Thalmann 65f93af0b3 Disable auto reboot by default 2024-09-10 01:54:04 +02:00
Manuel Thalmann 70c9155bc0 Add methods for managing auto restart feature 2024-09-10 01:54:04 +02:00
Manuel Thalmann b09452a7bc Install Wave Link first 2024-09-10 01:54:04 +02:00
Manuel Thalmann 6c8882efd9 Throw an error when failing to load config 2024-09-10 01:54:04 +02:00
Manuel Thalmann 61be50fb63 Fix incorrect script path 2024-09-10 01:54:04 +02:00
Manuel Thalmann d6d416ce17 Allow leaving install action unspecified 2024-09-10 01:54:04 +02:00
Manuel Thalmann 29a744a154 Retrieve registry value properly 2024-09-10 01:54:04 +02:00
Manuel Thalmann 6274918f4b Add scripts for installing git 2024-09-10 01:54:04 +02:00
Manuel Thalmann cf1de70b3b Remove unnecessary code 2024-09-10 01:54:04 +02:00
Manuel Thalmann 61e38c2bec Add a function for removing the RunOnce key 2024-09-10 01:54:04 +02:00
Manuel Thalmann 7632e91793 Set user groups properly 2024-09-10 01:54:04 +02:00
Manuel Thalmann c481c54f41 Configure MS accounts properly 2024-09-10 01:54:04 +02:00
Manuel Thalmann 741b698a33 Queue next user after configuration finished 2024-09-10 01:54:02 +02:00
Manuel Thalmann 395945ec72 Disable UAC after logging in MS account 2024-09-10 01:53:07 +02:00
Manuel Thalmann f45081ff99 Enable OneShot listener for MS accounts 2024-09-10 01:53:07 +02:00
Manuel Thalmann 2e5fa8f5a0 Set timezone automatically 2024-09-10 01:53:07 +02:00
Manuel Thalmann f19e2eba1a Prevent variable overwrite 2024-09-10 01:53:07 +02:00
Manuel Thalmann ef56c3ab4b Register installer script after disabling UAG 2024-09-10 01:53:07 +02:00
Manuel Thalmann 09984cff8e Redirect user for configuration properly 2024-09-10 01:53:07 +02:00
Manuel Thalmann 869ca8870d Fix broken redirection of arguments 2024-09-10 01:53:07 +02:00
Manuel Thalmann 2063d276ec Determine installer action properly 2024-09-10 01:53:07 +02:00
Manuel Thalmann e8db7ea047 Redirect arguments to chocolatey properly 2024-09-10 01:53:07 +02:00
Manuel Thalmann 0cfa2f2fa0 Fix non-functioning OneShot script 2024-09-10 01:53:07 +02:00
Manuel Thalmann 97cbcc7dfb Fix oneshot task execution 2024-09-10 01:53:07 +02:00
Manuel Thalmann 00aae35c96 Allow removing the OneShot listener 2024-09-10 01:53:07 +02:00
Manuel Thalmann d95396b06b Remove duplicate code 2024-09-10 01:53:07 +02:00
Manuel Thalmann c46d241147 Fix typo 2024-09-10 01:53:07 +02:00
Manuel Thalmann 1696207b0a Fix copy paste error 2024-09-10 01:53:07 +02:00
Manuel Thalmann 52c5a6c6a3 Allow skipping the User parameter 2024-09-10 01:53:07 +02:00
Manuel Thalmann c347ff6377 Fix incorrect script path 2024-09-10 01:53:07 +02:00
Manuel Thalmann aa4c392569 Fix broken scripts 2024-09-10 01:53:07 +02:00
Manuel Thalmann 3a45dfca73 Remove unnecessary confirmation dialogue 2024-09-10 01:53:07 +02:00
Manuel Thalmann a9bd4f5eb4 Add a task for disabling UAC 2024-09-10 01:53:07 +02:00
Manuel Thalmann cfd1559782 Force creation of sudo alias 2024-09-10 01:53:07 +02:00
Manuel Thalmann 8dd65b0ad3 Allow execution of OneShot tasks 2024-09-10 01:53:07 +02:00
Manuel Thalmann 308e86efc8 Ensure CONFIG_MODULE is resolved 2024-09-10 01:53:07 +02:00
Manuel Thalmann add76b3986 Add dedicated functions for creating startup scripts 2024-09-10 01:53:07 +02:00
Manuel Thalmann 1a0e83735c Change login message 2024-09-10 01:53:07 +02:00
Manuel Thalmann 1d8c416fe1 Set up shared WSL 2024-09-10 01:53:07 +02:00
Manuel Thalmann 894eb30f23 Install updates only as admin 2024-09-10 01:53:07 +02:00
Manuel Thalmann a23b51f9f8 Disable boot message only as admin 2024-09-10 01:53:07 +02:00
Manuel Thalmann 54114ffbd2 Add a function for allowing user access 2024-09-10 01:53:07 +02:00
Manuel Thalmann f4eb58a3a1 Fix broken reboot registration 2024-09-10 01:53:07 +02:00
Manuel Thalmann a553bc9cb7 Ensure the script path is detected properly 2024-09-10 01:53:07 +02:00
Manuel Thalmann 9c603d173f Allow automatic script execution for MS accounts 2024-09-10 01:53:07 +02:00
Manuel Thalmann 9ed7773341 Reorder winget arguments 2024-09-10 01:53:07 +02:00
Manuel Thalmann 5b36f75abf Allow registering reboot for the default user 2024-09-10 01:53:07 +02:00
Manuel Thalmann 3decf57f5e Add a dedicated function for disabling boot message 2024-09-10 01:53:07 +02:00
Manuel Thalmann 9dff674894 Implement root install loop using a switch 2024-09-10 01:53:05 +02:00
Manuel Thalmann 8878a7d7fe Force computer reboots 2024-09-10 01:52:02 +02:00
Manuel Thalmann 7e31a0cac5 Add scripts for controlling UAC 2024-09-10 01:52:02 +02:00
Manuel Thalmann d2ddca8ab5 Set displayname of all users 2024-09-10 01:52:02 +02:00
Manuel Thalmann db31ae2419 Login to users for configuration 2024-09-10 01:52:00 +02:00
Manuel Thalmann 40d1ef5c78 Skip PWSH_PATH if undefined 2024-09-10 01:51:28 +02:00
Manuel Thalmann 1b4204cf3b Fix typo 2024-09-10 01:51:28 +02:00
Manuel Thalmann 460a30bf89 Add missing setup stage 2024-09-10 01:51:28 +02:00
Manuel Thalmann 2e92b9f6db Make Get-Users output explicit 2024-09-10 01:51:28 +02:00
Manuel Thalmann d6084b0ee8 Allow displaying a boot message 2024-09-10 01:51:28 +02:00
Manuel Thalmann 5209a9d5d8 Disable users by default 2024-09-10 01:51:28 +02:00
Manuel Thalmann f469bd6eb7 Add a stage for configuring users 2024-09-10 01:51:28 +02:00
Manuel Thalmann a43f09dce4 Detect installation properly 2024-09-10 01:51:28 +02:00
Manuel Thalmann 1baf93c48a Remove unnecessary icon 2024-09-10 01:51:28 +02:00
Manuel Thalmann 8034b77370 Add Predator Z301C to the hardware list 2024-09-10 01:51:28 +02:00
Manuel Thalmann c52ea65121 Add support for the sudo command 2024-09-10 01:51:28 +02:00
Manuel Thalmann 8473cf201f Fix renaming user 2024-09-10 01:51:28 +02:00
Manuel Thalmann 0e940efeeb Make specifying PWSH_PATH optional 2024-09-10 01:51:28 +02:00
Manuel Thalmann f3e1e4ee00 Show error properly 2024-09-10 01:51:28 +02:00
Manuel Thalmann b9dbb50f76 Fix typo 2024-09-10 01:51:28 +02:00
Manuel Thalmann 4068e95504 Remove code duplication 2024-09-10 01:51:28 +02:00
Manuel Thalmann 186d84704d Remove unnecessary console output 2024-09-10 01:51:28 +02:00
Manuel Thalmann 5c6b0c18fd Fix incorrect file paths 2024-09-10 01:51:28 +02:00
Manuel Thalmann 43e6cf47d1 Fix incorrect hardware name 2024-09-10 01:51:28 +02:00
Manuel Thalmann eea20772be Reorder installation steps 2024-09-10 01:51:28 +02:00
Manuel Thalmann 1fc9dafb89 Suppress unnecessary output 2024-09-10 01:51:28 +02:00
Manuel Thalmann 49770fa11b Refactor the wsl installation check 2024-09-10 01:51:28 +02:00
Manuel Thalmann 76496d0a7d Ensure WSL Ubuntu is installed 2024-09-10 01:51:28 +02:00
Manuel Thalmann 39f39238fe Make config script platform independent 2024-09-10 01:51:28 +02:00
Manuel Thalmann 2ab3b3b9cd Leave groups unspecified 2024-09-10 01:51:27 +02:00
Manuel Thalmann 300f629453 Add users during installation 2024-09-10 01:50:39 +02:00
Manuel Thalmann 8a59fd4c5d Fix incorrect user conversion 2024-08-08 17:16:51 +02:00
Manuel Thalmann daa37a1b9b Keep Windows groups separate 2024-08-08 15:33:55 +02:00
Manuel Thalmann 47b014e3cd Remove unnecessary options from Win users 2024-08-08 15:32:05 +02:00
Manuel Thalmann 617c6ce8ef Inherit Windows users from linux 2024-08-08 15:28:29 +02:00
Manuel Thalmann 329007b063 Add functions for retrieving attributes 2024-08-08 14:45:34 +02:00
Manuel Thalmann 67ccb819e0 Install Oh My Posh system wide 2024-08-08 14:23:15 +02:00
Manuel Thalmann f278409727 Fix typo 2024-08-08 14:22:22 +02:00
Manuel Thalmann a8b35f4406 Skip scope argument by default 2024-08-08 14:22:13 +02:00
Manuel Thalmann 828c27352d Fix incorrect file paths 2024-08-08 14:21:55 +02:00
Manuel Thalmann af8541791b Configure NVS after installation 2024-08-08 14:09:20 +02:00
Manuel Thalmann 1dbfe0ab4d Refactor app association script 2024-08-08 14:09:07 +02:00
Manuel Thalmann 594a425cd3 Fix typo 2024-08-08 14:08:48 +02:00
Manuel Thalmann a9b8ecf105 Apply the error action globally 2024-08-08 14:08:38 +02:00
Manuel Thalmann d345488655 Move PinnedItem script to proper location 2024-08-08 14:04:51 +02:00
Manuel Thalmann e4bf4898ec Add notes to installation script 2024-08-08 14:03:15 +02:00
Manuel Thalmann de3aaedad0 Add a script for installing LGHub 2024-08-08 13:25:21 +02:00
Manuel Thalmann 4fd18e32b6 Reorder installation steps 2024-08-08 13:17:14 +02:00
Manuel Thalmann 98248d23e0 Reload env after installing git 2024-08-08 12:18:04 +02:00
Manuel Thalmann ae555e133d Enure features for PinnedItem are installed 2024-08-08 05:21:21 +02:00
Manuel Thalmann 6a8303fdc2 Install features using chocolatey 2024-08-08 05:20:58 +02:00
Manuel Thalmann f2cd00248a Ensure git is installed 2024-08-08 05:14:31 +02:00
Manuel Thalmann 7118ec594f Fix broken XML document creation 2024-08-08 05:04:59 +02:00
Manuel Thalmann 580f06779f Fix incorrect parameter access 2024-08-08 05:03:24 +02:00
Manuel Thalmann 43bc0fae7e Fix incorrect path 2024-08-08 05:01:45 +02:00
Manuel Thalmann f5533bf7f6 Add a dedicated user option for windows 2024-08-08 04:45:27 +02:00
Manuel Thalmann 2aa608bc8d Add a stage for creating users 2024-08-08 04:38:40 +02:00
Manuel Thalmann d1a1a13346 Add scripts for all remaining apps 2024-08-08 04:36:35 +02:00
Manuel Thalmann 95418ba6aa Allow custom winget arguments 2024-08-08 04:29:00 +02:00
Manuel Thalmann 6c06f719c9 Improve winget function 2024-08-08 04:28:21 +02:00
Manuel Thalmann bf9679e522 Add missing function 2024-08-08 04:20:11 +02:00
Manuel Thalmann 0af53191ba Refactor browser scripts 2024-08-08 03:32:03 +02:00
Manuel Thalmann e735320fcb Ensure Selenium is imported 2024-08-08 02:59:02 +02:00
Manuel Thalmann 76ba329ad2 Allow skipping the Action argument 2024-08-08 02:56:28 +02:00
Manuel Thalmann 69925fac74 Rename all old installation scripts 2024-08-08 02:56:13 +02:00
Manuel Thalmann 8ad9f00956 Add options for enabling LG Hub 2024-08-08 02:29:51 +02:00
Manuel Thalmann 2ac7045883 Remove Firefox taskbar icon 2024-08-08 02:29:09 +02:00
Manuel Thalmann 4613f82442 Allow removing task bar icons 2024-08-08 02:28:40 +02:00
Manuel Thalmann 95922559c2 Allow installing modules native only 2024-08-08 02:28:23 +02:00
Manuel Thalmann 2eebf4db53 Rename old LGHub script 2024-08-08 02:27:39 +02:00
Manuel Thalmann 2ee11b7fa3 Add missing config 2024-08-08 01:51:21 +02:00
Manuel Thalmann 2612b6b6de Rename PuTTY script 2024-08-08 00:51:45 +02:00
Manuel Thalmann 584841870b Fix permission issue 2024-08-08 00:48:18 +02:00
Manuel Thalmann e204d0f819 Add scripts for installing Tobii apps 2024-08-08 00:06:49 +02:00
Manuel Thalmann a8a99ffc23 Copy keyboard layout to welcome screen 2024-08-07 23:53:26 +02:00
Manuel Thalmann 88dfbc30c9 Add scripts for desktop apps 2024-08-07 23:53:12 +02:00
Manuel Thalmann eeee33917a Rename old Nextcloud script 2024-08-07 23:45:56 +02:00
Manuel Thalmann 6ce28f4751 Configure user only outside of setup 2024-08-07 23:30:29 +02:00
Manuel Thalmann db99c0a10b Add a script for installing Oh My Posh 2024-08-07 23:22:04 +02:00
Manuel Thalmann 4f3573329a Fix incorrect installation filter 2024-08-07 23:20:28 +02:00
Manuel Thalmann 7b31ecf85e Fix profile script for individual profiles 2024-08-07 23:18:44 +02:00
Manuel Thalmann 1d0270e455 Show messages if packages are installed 2024-08-07 23:18:23 +02:00
Manuel Thalmann 32daa81086 Fix incorrect package check 2024-08-07 23:17:07 +02:00
Manuel Thalmann a86b1b1069 Refactor default winget parameters 2024-08-07 22:56:42 +02:00
Manuel Thalmann 52caf4d991 Add scripts for installing PS modules 2024-08-07 22:55:25 +02:00
Manuel Thalmann 211700fbee Allow skipping PowerShell profile files 2024-08-07 22:25:42 +02:00
Manuel Thalmann 38deb9dc88 Resolve dependency loop 2024-08-07 21:54:58 +02:00
Manuel Thalmann cfc5643347 Remove unnecessary statement 2024-08-07 21:53:26 +02:00
Manuel Thalmann 60b9464dfb Refactor chocolatey script 2024-08-07 21:50:21 +02:00
Manuel Thalmann 09009b3541 Pass arguments to software script 2024-08-07 21:37:33 +02:00
Manuel Thalmann 9d024f9c3e Use internal OS detection 2024-08-07 21:35:03 +02:00
Manuel Thalmann 7b9eb1b370 Refactor PowerShell profile script 2024-08-07 21:34:40 +02:00
Manuel Thalmann 99cc9cb12b Move scripts properly 2024-08-07 21:05:32 +02:00
Manuel Thalmann b024445989 Add scripts for installing PowerShell 2024-08-07 20:30:12 +02:00
Manuel Thalmann 498d65e24a Rename PowerShell script directory 2024-08-07 19:08:13 +02:00
Manuel Thalmann 0e30d9cc0b Add script for installing Thunderbird 2024-08-07 18:57:27 +02:00
Manuel Thalmann 2e042f9e1b Install drivers in proper phase 2024-08-07 18:54:07 +02:00
Manuel Thalmann 339379a04f Add a script for installing WinSCP 2024-08-07 18:30:14 +02:00
Manuel Thalmann 5145b5383f Refactor app association script 2024-08-07 18:29:20 +02:00
Manuel Thalmann e9b0cb3f7f Prevent reboot during WaveLink installation 2024-08-07 18:01:17 +02:00
Manuel Thalmann 1d6fafa73f Add scripts for installing drivers 2024-08-07 16:17:49 +02:00
Manuel Thalmann 37e5636da1 Add script for installing AMD packages 2024-08-07 15:25:12 +02:00
Manuel Thalmann 9ab7cdc4d0 Add missing package for selenium 2024-08-07 15:24:56 +02:00
Manuel Thalmann 27d2797ed2 Ensure correct types for setting download dir 2024-08-07 15:24:37 +02:00
Manuel Thalmann 164a3b60ef Add a script for installing ASUS packages 2024-08-07 14:40:24 +02:00
Manuel Thalmann d13d774b4b Refactor browser automation scripts 2024-08-07 14:28:26 +02:00
Manuel Thalmann 7b8849e0bf Execute winget script in a module 2024-08-07 13:36:47 +02:00
Manuel Thalmann 629e2044c7 Install components for browser automation 2024-08-07 13:36:31 +02:00
Manuel Thalmann 9602b40c50 Add functions for installing choco and winget packages 2024-08-07 13:22:12 +02:00
Manuel Thalmann ebc90e6e2e Add a function for checking winget packages 2024-08-07 13:18:29 +02:00
Manuel Thalmann 603d665f9e Enhance the winget install check 2024-08-07 03:34:12 +02:00
Manuel Thalmann 5b299e432d Add a function for checking NuGet packages 2024-08-07 03:23:59 +02:00
Manuel Thalmann 32a190342f Fix non-functioning script 2024-08-07 03:23:21 +02:00
Manuel Thalmann 51558e02c9 Install PowerShell modules after removing old copy 2024-08-06 18:19:33 +02:00
Manuel Thalmann 87036479fa Add config for declaring hardware 2024-08-06 17:23:20 +02:00
Manuel Thalmann 118b653a63 Silence unnecessary output 2024-08-06 17:07:57 +02:00
Manuel Thalmann 0fc2d9348c Add a separate function for executing software actions 2024-08-06 16:54:11 +02:00
Manuel Thalmann c95519fef7 Add a function for checking whether a setup is being run 2024-08-06 14:32:37 +02:00
Manuel Thalmann c437c6c6cf Determine software script name properly 2024-08-06 12:21:48 +02:00
Manuel Thalmann 0c47df9f00 Fix incorrect path 2024-08-06 12:21:00 +02:00
Manuel Thalmann e230a95209 Fix incorrectly imported modules 2024-08-06 11:39:57 +02:00
Manuel Thalmann dbe0515965 Fix incorrect XPaths 2024-08-06 11:39:48 +02:00
Manuel Thalmann 13b33d6ee8 Create Windows image as normal user 2024-08-06 11:39:34 +02:00
Manuel Thalmann 2bde374dca Make the name of the setup user look more Windows like 2024-08-06 11:39:05 +02:00
Manuel Thalmann a919979a68 Set the name of the setup user properly 2024-08-06 10:22:50 +02:00
Manuel Thalmann 83bf9a4d32 Add scripts for installing essential software 2024-08-06 00:04:02 +02:00
Manuel Thalmann fa57e95def Add a function for removing desktop icons 2024-08-06 00:02:07 +02:00
Manuel Thalmann 1e6d44d1bb Add an option for showing file extensions 2024-08-05 23:22:22 +02:00
Manuel Thalmann 2fe3b639f7 Ensure the environment variables are always set properly 2024-08-05 23:09:58 +02:00
Manuel Thalmann 92dee406ff Fix incorrect argument initialization 2024-08-05 23:08:36 +02:00
Manuel Thalmann c37ea23130 Ensure Arguments contains an object 2024-08-05 22:51:29 +02:00
Manuel Thalmann a9769bd980 Fix argument redirection 2024-08-05 22:49:44 +02:00
Manuel Thalmann 290b9a3611 Fix non-functioning script 2024-08-05 22:45:17 +02:00
Manuel Thalmann 633df57fee Allow running further installer actions within an installer 2024-08-05 22:29:20 +02:00
Manuel Thalmann f43e612883 Refactor windows configuration script 2024-08-05 20:07:39 +02:00
Manuel Thalmann 00ee61ac90 Add settings for customizing windows 2024-08-05 19:12:59 +02:00
Manuel Thalmann 39803bbbba Refactor software script environment 2024-08-05 00:07:41 +02:00
Manuel Thalmann db38915911 Set CONFIG_MODULE to full path by default 2024-08-02 01:57:31 +02:00
Manuel Thalmann fb02b79a4d Enter next stage after configuration 2024-08-02 01:44:56 +02:00
Manuel Thalmann 8c447dabbe Make config module persist in WSL 2024-08-02 00:47:33 +02:00
Manuel Thalmann 7a47b016ef Ensure arguments are passed to fish 2024-08-01 23:36:03 +02:00
Manuel Thalmann a9ae8c9a98 Fix installer script structure 2024-08-01 23:34:35 +02:00
Manuel Thalmann 72fd72f5bd Declare InstallerAction in a separate file 2024-08-01 22:52:51 +02:00
Manuel Thalmann 4906bb0b24 Ensure necessary modules are imported 2024-08-01 21:49:46 +02:00
Manuel Thalmann 2e03728d44 Import SetupStage enum into installation module 2024-08-01 21:32:33 +02:00
Manuel Thalmann b5d9489f21 Pause on error by default 2024-08-01 21:08:31 +02:00
Manuel Thalmann d9be9fe3da Display the software name during installation 2024-08-01 21:06:03 +02:00
Manuel Thalmann 8dbac3564d Fix non-functioning command 2024-08-01 20:34:55 +02:00
Manuel Thalmann 38f65b3e63 Remove non-existent script 2024-08-01 19:10:10 +02:00
Manuel Thalmann 06b314b1f5 Nest installation functions in a module 2024-08-01 19:02:12 +02:00
Manuel Thalmann 9bcdd2fd9f Install winget if nonexistent 2024-08-01 18:58:33 +02:00
Manuel Thalmann 429cc25c4c Use the new commands 2024-08-01 18:36:47 +02:00
Manuel Thalmann 629046b212 Add dedicated commands for checking software 2024-08-01 18:35:45 +02:00
Manuel Thalmann 369fcaed00 Add a script for managing software 2024-08-01 18:24:26 +02:00
Manuel Thalmann cc77eaf05c Fix nix installation check 2024-08-01 18:05:10 +02:00
Manuel Thalmann 9324e3074f Make nix visible to WSL 2024-08-01 18:03:48 +02:00
Manuel Thalmann c5be70b11d Add a function for getting the users to create 2024-08-01 17:56:42 +02:00
Manuel Thalmann 38ed315bd2 Rename the file containing software functions 2024-08-01 17:38:59 +02:00
Manuel Thalmann d3dd4ff5a9 Configure clock for dualboot systems 2024-08-01 16:32:03 +02:00
Manuel Thalmann 5b0074bea9 Enter configuration stage if nix exists 2024-08-01 16:28:48 +02:00
Manuel Thalmann 6612b9e7d4 Reboot WSL to pick up nix 2024-08-01 16:25:18 +02:00
Manuel Thalmann 1fb70ecda0 Add a function for retrieving nix options 2024-08-01 16:12:58 +02:00
Manuel Thalmann 781d133e7e Make CONFIG_MODULE available in WSL 2024-08-01 14:39:44 +02:00
Manuel Thalmann bba8da3b84 Install WSL and nix by default 2024-08-01 14:06:40 +02:00
Manuel Thalmann 86732247b9 Rename config module file 2024-08-01 12:39:27 +02:00
Manuel Thalmann be41a143c0 Reword log messages 2024-08-01 12:32:43 +02:00
Manuel Thalmann 8f0e147fa0 Fix syntax error 2024-08-01 12:31:25 +02:00
Manuel Thalmann fa60493ae1 Import scripting module inside the PowerManagement module 2024-08-01 12:24:28 +02:00
Manuel Thalmann a6985d7e1b Add scripts for updating windows 2024-08-01 02:59:32 +02:00
Manuel Thalmann 5bb0cd41cc Fix errors in the PowerManagement module 2024-08-01 02:19:05 +02:00
Manuel Thalmann 467b429bd9 Fix syntax error 2024-08-01 01:22:23 +02:00
Manuel Thalmann f228817817 Fix incorrect documentation comment 2024-07-31 23:10:21 +02:00
Manuel Thalmann e327ca8d17 Fix handling of setup stages 2024-07-31 22:33:37 +02:00
Manuel Thalmann 734ae7bd05 Set registry values properly 2024-07-31 22:33:16 +02:00
Manuel Thalmann cd3f85103a Display console output of hooks 2024-07-31 22:18:47 +02:00
Manuel Thalmann dbdedad1d9 Store stages using their name 2024-07-31 16:52:49 +02:00
Manuel Thalmann 31c30e6854 Refactor the installation loop architecture 2024-07-31 16:25:32 +02:00
Manuel Thalmann 89183dbeed Implement install loop properly 2024-07-31 16:15:09 +02:00
Manuel Thalmann 64c2ba9127 Implement the windows installation in a loop 2024-07-31 16:09:50 +02:00
Manuel Thalmann d07d4c9057 Recreate script to first install pwsh 2024-07-31 15:52:41 +02:00
Manuel Thalmann bb0b4a5988 Normalize script formatting 2024-07-31 15:52:23 +02:00
Manuel Thalmann 1be172ae07 Add a script for managing setup options 2024-07-31 15:42:02 +02:00
Manuel Thalmann fad332b267 Add a script for rebooting the computer 2024-07-31 15:41:45 +02:00
Manuel Thalmann c137952345 Add a separate script for injecting values into scripts 2024-07-31 14:55:00 +02:00
Manuel Thalmann 156c72c977 Add a script for checking for installed choco packages 2024-07-31 14:53:21 +02:00
Manuel Thalmann 8d9e9ca3a6 Copy pwsh to newly setup windows systems 2024-07-31 14:47:42 +02:00
Manuel Thalmann ca2a5f23b0 Rename old windows installation script 2024-07-30 18:47:01 +02:00
Manuel Thalmann 4e87165196 Add a function for executing hooks 2024-07-30 18:34:19 +02:00
Manuel Thalmann 0d926a06b8 Enable rclone services properly 2024-07-30 17:42:29 +02:00
Manuel Thalmann ea991759af Disable root bash login during installation 2024-07-30 00:54:43 +02:00
Manuel Thalmann d285e69c97 Silence unnecessary output 2024-07-30 00:53:20 +02:00
Manuel Thalmann 974b1b8083 Install vscode extensions for each user 2024-07-30 00:53:10 +02:00
Manuel Thalmann 6e505faada Fix installation of brave extensions 2024-07-30 00:52:55 +02:00
Manuel Thalmann 8e1f3e0148 Fix non-functioning installation scripts 2024-07-30 00:52:35 +02:00
Manuel Thalmann 346614deee Fix missing variables 2024-07-30 00:51:50 +02:00
Manuel Thalmann 4d2c02c2b5 Fix non-functioning command 2024-07-29 23:46:14 +02:00
Manuel Thalmann 852b1c71ce Load dualboot sizes from nix 2024-07-29 01:44:12 +02:00
Manuel Thalmann e87a39691b Improve handling of wmic output 2024-07-29 01:22:42 +02:00
Manuel Thalmann 06cbabc36c Save unnecessary space 2024-07-29 00:10:07 +02:00
Manuel Thalmann 5b650f7efc Allow overwriting packages 2024-07-28 23:45:30 +02:00
Manuel Thalmann 5f0a25deb2 Generate locales in proper system 2024-07-28 23:45:09 +02:00
Manuel Thalmann 3c6933c03d Execute userConfig for current user only once 2024-07-28 23:44:58 +02:00
Manuel Thalmann f3049e9fd2 Prevent userConfig from execute multiple times 2024-07-28 23:43:11 +02:00
Manuel Thalmann 4a34593d83 Nest Windows setup in a function 2024-07-28 20:52:07 +02:00
Manuel Thalmann 7d322b8759 Configure Windows on DerGeret 2024-07-28 17:14:38 +02:00
Manuel Thalmann 4c9b801fd2 Inherit missing variable 2024-07-28 17:01:24 +02:00
Manuel Thalmann f1e5d22043 Fix aliae configuration 2024-07-28 16:57:47 +02:00
Manuel Thalmann b40c6d71d4 Fix broken profile creation 2024-07-28 16:57:36 +02:00
Manuel Thalmann 083703e44b Inherit missing variables 2024-07-28 15:25:03 +02:00
Manuel Thalmann 298fd5de72 Run setup of der-geret using fish 2024-07-28 12:45:05 +02:00
Manuel Thalmann ee8d8c12cd Mark all fish scripts as executable 2024-07-28 12:32:08 +02:00
Manuel Thalmann 64d4b1d7a4 Make nix config accessible in scripts 2024-07-28 12:16:01 +02:00
Manuel Thalmann 029fd19388 Dump windows config for use during setup 2024-07-28 11:26:13 +02:00
Manuel Thalmann 15637c34ce Add options for setting up windows 2024-07-28 01:56:41 +02:00
Manuel Thalmann cba6a2cada Fix confusing filename 2024-07-28 00:28:10 +02:00
Manuel Thalmann 5484010371 Remove redundant script 2024-07-28 00:27:25 +02:00
Manuel Thalmann 1922eed510 Run installer script after initialization 2024-07-27 23:18:04 +02:00
Manuel Thalmann 39fc0e85e5 Ensure iso directory exists 2024-07-27 22:04:40 +02:00
Manuel Thalmann 3c22ba0577 Prevent unnecessary variables 2024-07-27 22:04:08 +02:00
Manuel Thalmann 795d50a2a3 Pass boot script path via env variable 2024-07-27 18:59:47 +02:00
Manuel Thalmann 209fc34187 Pass label of setup disk as variable 2024-07-26 14:46:58 +02:00
Manuel Thalmann bd0b61f8ed Store installer drive as env variable 2024-07-26 14:43:12 +02:00
Manuel Thalmann 81a3e10d65 Copy repository settings 2024-07-26 14:43:02 +02:00
Manuel Thalmann 427586e432 Pass the project path in to the installation script 2024-07-26 14:29:45 +02:00
Manuel Thalmann 697a1c77a5 Store PortValhalla in installation disk 2024-07-26 13:32:37 +02:00
Manuel Thalmann a3c582c627 Ensure to always remove all leftovers 2024-07-25 20:02:47 +02:00
Manuel Thalmann 51d56d6170 Migrate the winiso project 2024-07-25 00:03:35 +02:00
Manuel Thalmann b65d7c4604 Remove unnecessary config 2024-07-20 16:26:38 +02:00
Manuel Thalmann 9c6d5509f6 Configure for current user if none is specified 2024-07-20 14:06:25 +02:00
Manuel Thalmann ac814a123d Remove unnecessary statement 2024-07-20 14:04:09 +02:00
Manuel Thalmann 2b38c0e81e Add a function for checking whether a configuration is applied 2024-07-20 14:03:35 +02:00
Manuel Thalmann 0713eed08c Remove default value of CONFIG_MODULE 2024-07-20 14:02:36 +02:00
Manuel Thalmann cc1f27f568 Remove necessity of nix config 2024-07-20 13:54:04 +02:00
Manuel Thalmann 843e9dba26 Create rclone syncs during setup 2024-07-20 13:47:07 +02:00
Manuel Thalmann 6d8b4b0424 Preserve environment while running dbus session 2024-07-20 05:14:09 +02:00
Manuel Thalmann 7db404be82 Fix typo 2024-07-20 05:09:42 +02:00
Manuel Thalmann 5ceb570098 Force json output appropriately 2024-07-20 05:09:13 +02:00
Manuel Thalmann 572ac87336 Add a script draft for configuring rclone 2024-07-20 05:08:23 +02:00
Manuel Thalmann dbce62fbd9 Format config file 2024-07-20 04:35:58 +02:00
Manuel Thalmann b54bea2391 Load the default shell from the user config 2024-07-20 04:35:41 +02:00
Manuel Thalmann 9b46eaec15 Split nix configuration properly 2024-07-20 04:31:09 +02:00
Manuel Thalmann 74d4454bb0 Fix typo 2024-07-20 04:23:51 +02:00
Manuel Thalmann a7390cbf9b Prevent changing the working directory 2024-07-20 04:17:42 +02:00
Manuel Thalmann 6b1c97956d Add separate method for configuring git 2024-07-20 04:06:41 +02:00
Manuel Thalmann 0ebe9ace15 Add function for configuring user settings 2024-07-20 03:50:38 +02:00
Manuel Thalmann 051019072a Stop keeping track of installed software 2024-07-20 03:32:53 +02:00
Manuel Thalmann 2680dce208 Call software scripts using individual fish commands 2024-07-20 03:27:36 +02:00
Manuel Thalmann 8cc8da2eb6 Remove unnecessary statement 2024-07-20 03:27:20 +02:00
Manuel Thalmann 46237dc982 Add users before installing software 2024-07-20 03:13:17 +02:00
Manuel Thalmann 699418155b Read config keys properly 2024-07-20 01:59:33 +02:00
Manuel Thalmann d3a38daafc Fix string formatting 2024-07-20 01:57:06 +02:00
Manuel Thalmann 2a434b8653 Fix malformed installer script 2024-07-20 01:51:14 +02:00
Manuel Thalmann 7411963897 Fix variable inheritance 2024-07-20 01:46:11 +02:00
Manuel Thalmann 5bffc229a4 Fix configuration target 2024-07-20 01:43:53 +02:00
Manuel Thalmann 68f8eb81f9 Fix use of incorrect config keys 2024-07-20 01:38:53 +02:00
Manuel Thalmann a3ea73efbf Fix variable visibility 2024-07-20 01:36:22 +02:00
Manuel Thalmann eeabf6dadf Ignore installation status by default 2024-07-20 01:32:42 +02:00
Manuel Thalmann a613f92535 Allow user-defined git config 2024-07-20 01:31:04 +02:00
Manuel Thalmann ef49fab43a Allow flagging git as installed 2024-07-20 01:23:08 +02:00
Manuel Thalmann 358cb3a327 Allow marking software as installed 2024-07-20 01:21:25 +02:00
Manuel Thalmann e9434ef43f Fix string formatting 2024-07-20 01:03:20 +02:00
Manuel Thalmann a125d4e154 Fix permission issues 2024-07-20 00:59:11 +02:00
Manuel Thalmann 73070fb232 Remove test code 2024-07-20 00:47:48 +02:00
Manuel Thalmann f85140da48 Add users from configuration 2024-07-20 00:46:02 +02:00
Manuel Thalmann f1406cd372 Add configurations for specifying users 2024-07-20 00:45:20 +02:00
Manuel Thalmann 54e629f706 Allow applying custom functions during evaluation 2024-07-20 00:36:19 +02:00
Manuel Thalmann 81d6a7cbd3 Generate locales during setup 2024-07-19 21:18:20 +02:00
Manuel Thalmann 8d144252bb Silence unnecessary console output 2024-07-17 16:41:42 +02:00
Manuel Thalmann 894b397ffd Fix creation of vscode config files 2024-07-17 16:39:03 +02:00
Manuel Thalmann f74f92e980 Load missing variable 2024-07-17 16:33:59 +02:00
Manuel Thalmann ce37071c0f Force installing iptables-nft 2024-07-17 16:18:31 +02:00
Manuel Thalmann 4c1ccee7d1 Load missing variable 2024-07-17 16:04:57 +02:00
Manuel Thalmann dd02a51d03 Remove unnecessary statement 2024-07-17 15:59:09 +02:00
Manuel Thalmann e8e6866f1e Install logo-ls only if not present 2024-07-17 15:54:53 +02:00
Manuel Thalmann d3124852ef Normalize casing of firefox directory 2024-07-17 15:54:09 +02:00
Manuel Thalmann 1aa3066140 Add missing packages 2024-07-17 15:49:30 +02:00
Manuel Thalmann 1856d1401f Fix permission error 2024-07-17 15:22:41 +02:00
Manuel Thalmann 6f7ad07540 Install bb at the end 2024-07-17 15:08:27 +02:00
Manuel Thalmann 82a02ca080 Fix typo 2024-07-17 15:00:26 +02:00
Manuel Thalmann caf781e913 Fix incorrect paths 2024-07-17 15:00:01 +02:00
Manuel Thalmann e1ec40ad03 Fix typo 2024-07-17 14:55:30 +02:00
Manuel Thalmann 279ca46478 Add scripts for installing school software 2024-07-17 14:26:01 +02:00
Manuel Thalmann 69ca2c4630 Streamline installation of all further software 2024-07-17 14:18:27 +02:00
Manuel Thalmann f08589266d Silence unnecessary console output 2024-07-17 10:25:41 +02:00
Manuel Thalmann 0a63082bec Fix syntax error 2024-07-17 01:07:27 +02:00
Manuel Thalmann 3645f668eb Enable minegrub theme by default 2024-07-16 23:35:12 +02:00
Manuel Thalmann f9eb812b5b Change label of the Arch boot entry properly 2024-07-16 23:33:02 +02:00
Manuel Thalmann 482b72330e Silence unnecessary output 2024-07-16 23:32:46 +02:00
Manuel Thalmann b79053bfc9 Fix permission error 2024-07-16 23:13:41 +02:00
Manuel Thalmann c15599223b Streamline minegrub-theme installation 2024-07-16 23:11:27 +02:00
Manuel Thalmann 660c32b790 Streamline GRUB installation 2024-07-16 22:18:39 +02:00
261 changed files with 8735 additions and 1318 deletions

2
.gitattributes vendored Normal file
View file

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

View file

@ -10,6 +10,10 @@
{
"name": "archiso-valhalla",
"path": "./archiso"
},
{
"name": "winiso-valhalla",
"path": "./winiso"
}
]
}

View file

@ -23,7 +23,7 @@ automated_script() {
sleep 1
done
printf '%s: downloading %s\n' "$0" "${script}"
curl "${script}" --location --retry-connrefused --retry 10 -s -o /tmp/startup_script
curl "${script}" --location --retry-connrefused --retry 10 --fail -s -o /tmp/startup_script
rt=$?
else
cp "${script}" /tmp/startup_script

View file

@ -1 +0,0 @@
extra-experimental-features = nix-command flakes

View file

@ -1,8 +1,8 @@
diff --git a/airootfs/root/.zlogin b/airootfs/root/.zlogin
index bf6bc8f..76e5893 100755
index bf6bc8f..a0dae7b 100755
--- a/airootfs/root/.zlogin
+++ b/airootfs/root/.zlogin
@@ -4,3 +4,18 @@ if grep -Fqa 'accessibility=' /proc/cmdline &> /dev/null; then
@@ -4,3 +4,19 @@ if grep -Fqa 'accessibility=' /proc/cmdline &> /dev/null; then
fi
~/.automated_script.sh
@ -16,13 +16,14 @@ index bf6bc8f..76e5893 100755
+
+git diff -p -R --no-ext-diff --no-color --diff-filter=M \
+ | grep -E "^(diff|(old|new) mode)" --color=never \
+ | sed "/^diff/{ x; d; }; x; /./{ p; z; }; x;" \
+ | git apply
+
+popd > /dev/null
+
+loadkeys de_CH-latin1
diff --git a/packages.x86_64 b/packages.x86_64
index 9e876e7..b89ab30 100755
index 9e876e7..c5db92a 100755
--- a/packages.x86_64
+++ b/packages.x86_64
@@ -30,8 +30,10 @@ ethtool
@ -36,7 +37,15 @@ index 9e876e7..b89ab30 100755
gnu-netcat
gpart
gpm
@@ -75,6 +77,7 @@ nbd
@@ -45,6 +47,7 @@ irssi
iw
iwd
jfsutils
+jq
kitty-terminfo
ldns
less
@@ -75,6 +78,7 @@ nbd
ndisc6
nfs-utils
nilfs-utils

View file

@ -6,7 +6,7 @@
flake-utils.url = "github:numtide/flake-utils?ref=b1d9ab70662946ef0850d488da1c9019f3a9752a";
};
outputs = { self, flake-utils, nixpkgs }: flake-utils.lib.eachDefaultSystem (
outputs = { self, flake-utils, nixpkgs }: (flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
@ -32,5 +32,10 @@
packages = {
archiso = pkgs.archiso;
};
});
})) // {
valhalla = {
DerGeret = import ./profiles/machines/manuel/DerGeret/Arch/config.nix;
ManuSurface = import ./profiles/machines/manuel/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

16
lib/eval-module.nix Normal file
View file

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

View file

@ -1,41 +0,0 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
gitOptions = {
defaultBranch = mkOption {
type = types.nullOr types.str;
description = "The name of the default branch in git.";
default = null;
};
flow = {
mainBranch = mkOption {
type = types.nullOr types.str;
description = "The name of the stable branch in git flow.";
default = null;
};
devBranch = mkOption {
type = types.nullOr types.str;
description = "The name of the development branch in git flow.";
default = null;
};
};
aliases = mkOption {
type = types.attrsOf types.str;
description = "Git command aliases to install.";
default = {};
};
};
in {
options = {
valhalla = {
git = gitOptions;
};
};
}

55
lib/modules/hardware.nix Normal file
View file

@ -0,0 +1,55 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
in {
options = {
valhalla = {
hardware = {
components = mkOption {
type = types.listOf types.str;
description = "The names of the hardware components of the computer.";
default = [];
};
eyeX = mkOption {
type = types.bool;
description = "A value indicating whether a Tobii EyeX device is present.";
default = false;
};
amdCPU = mkOption {
type = types.bool;
description = "A value indicating whether an AMD CPU is present.";
default = false;
};
nvidiaGPU = mkOption {
type = types.bool;
description = "A value indicating whether an NVIDIA GPU is present.";
default = false;
};
corsairDevice = mkOption {
type = types.bool;
description = "A value indicating whether a Corsair device is present.";
default = false;
};
elgatoWave = mkOption {
type = types.bool;
description = "A value indicating whether an Elgato Wave device is present.";
default = false;
};
logitechG = mkOption {
type = types.bool;
description = "A value indicating whether a Logitech G device is present.";
default = false;
};
};
};
};
}

52
lib/modules/os.nix Normal file
View file

@ -0,0 +1,52 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
in {
options = {
valhalla = mkOption {
type = types.submodule (
{ extendModules, ... }:
let
osVariant = extendModules {
modules = [
({ config, ... }: {
options = {
config = mkOption {
type = types.attrs;
description = "The configuration of the Operating System.";
default = builtins.removeAttrs config ["_module" "config" "linux" "windows"];
visible = false;
};
};
})
];
};
linuxVariant = osVariant.extendModules { };
windowsVariant = osVariant.extendModules { };
in {
options = {
linux = mkOption {
inherit (linuxVariant) type;
description = "The options for setting up Linux.";
default = {};
visible = "shallow";
};
windows = mkOption {
inherit (windowsVariant) type;
description = "The options for setting up Windows.";
default = {};
visible = "shallow";
};
};
});
description = "Configuration for PortValhalla.";
default = {};
};
};
}

View file

@ -0,0 +1,59 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
gitType = types.submodule (
{ ... }: {
options = {
defaultBranch = mkOption {
type = types.nullOr types.str;
description = "The name of the default branch in newly created repositories.";
default = null;
};
flow = {
mainBranch = mkOption {
type = types.nullOr types.str;
description = "The name of the stable branch in git flow.";
default = null;
};
devBranch = mkOption {
type = types.nullOr types.str;
description = "The name of the development branch in git flow.";
default = null;
};
};
aliases = mkOption {
type = types.attrsOf types.str;
description = "The git command aliases to install.";
default = {};
};
};
});
gitOption = mkOption {
type = gitType;
description = "The git related options.";
default = {};
};
in {
options = {
valhalla = {
git = gitOption;
users = mkOption {
type = types.attrsOf (types.submodule (
{ ... }: {
options = {
git = gitOption;
};
}));
};
};
};
}

View file

@ -0,0 +1,44 @@
{ lib, ... }:
let
inherit (lib)
mkEnableOption
mkOption
types
;
syncType = types.submodule (
{ ... }: {
options = {
remotePath = mkOption {
type = types.str;
description = "The path to the folder on the cloud to sync.";
};
localPath = mkOption {
type = types.str;
description = "The path to sync the cloud content to.";
};
virtualFiles = (mkEnableOption "virtual file support") // {
default = true;
};
};
});
in {
options = {
valhalla.windows.users = mkOption {
type = types.attrsOf (types.submodule (
{ ... }: {
options = {
nextcloud = {
folderSyncs = mkOption {
type = types.listOf syncType;
description = "The folders to synchronize.";
default = [];
};
};
};
}));
};
};
}

View file

@ -0,0 +1,60 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
themeType = types.submodule (
{ config, ... }: {
options = {
source = mkOption {
type = types.nullOr types.path;
description = "The path to the oh-my-posh theme to use.";
default = null;
};
name = mkOption {
type = types.nullOr types.str;
description = "The name of the theme.";
default = if (config.source != null)
then
lib.strings.removeSuffix ".omp" (lib.strings.removeSuffix ".json" (builtins.baseNameOf config.source))
else
null;
};
};
});
ompType = types.submodule (
{ config, ... }: {
options = {
theme = mkOption {
type = types.either types.str themeType;
description = "The default theme.";
default = {};
};
additionalThemes = mkOption {
type = types.listOf themeType;
description = "A set of additional themes to install.";
default = [];
};
};
});
in {
options = {
valhalla.users = mkOption {
type = types.attrsOf (types.submodule (
{ ... }: {
options = {
oh-my-posh = mkOption {
type = ompType;
description = "The Oh My Posh configuration to apply.";
default = {};
};
};
}));
};
};
}

View file

@ -0,0 +1,40 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
syncType = types.submodule (
{ ... }: {
options = {
dirName = mkOption {
type = types.str;
description = "The name of the directory to sync the remote files to.";
};
cacheDuration = mkOption {
type = types.nullOr types.str;
description = "The amount of time to keep cached files.";
default = null;
};
};
});
in {
options = {
valhalla.linux.users = mkOption {
type = types.attrsOf (types.submodule (
{ ... }: {
options = {
rclone = {
configurations = mkOption {
type = types.attrsOf syncType;
description = "The configurations of the rclone mounts.";
default = {};
};
};
};
}));
};
};
}

View file

@ -12,6 +12,7 @@
software =
let
inherit (cfg.software)
coding
common
desktopExperience
school
@ -42,6 +43,12 @@
default = common && !server;
};
fileSync = mkOption {
type = types.bool;
description = "A value indicating whether file syncs should be installed.";
default = common && !server;
};
school = mkOption {
type = types.bool;
description = "A value indicating whether software for studies should be installed.";
@ -77,6 +84,12 @@
description = "A value indicating whether development apps should be installed.";
default = common;
};
python = mkOption {
type = types.bool;
description = "A value indicating whether apps for coding python should be installed.";
default = coding;
};
};
};
};

91
lib/modules/users.nix Normal file
View file

@ -0,0 +1,91 @@
{ lib, ... }:
let
inherit (lib)
mkOption
types
;
capitalize = (import ../text.nix { inherit lib; }).capitalize;
userType = types.submodule (
{ ... } : {
options = {
displayName = mkOption {
type = types.nullOr types.str;
description = "The human-readable name of the user.";
default = null;
};
mailAddress = mkOption {
type = types.nullOr types.str;
description = "The mail address of the user.";
default = null;
};
groups = mkOption {
type = types.listOf types.str;
description = "The additional groups of the user.";
default = [];
};
};
});
linuxUserType = types.submodule (
{ ... }: {
options = {
defaultShell = mkOption {
type = types.nullOr types.str;
description = "The default shell of the user.";
default = null;
};
};
});
winUserType = types.submodule (
{ ... }: {
options = {
microsoftAccount = mkOption {
type = types.bool;
description = "A value indicating whether this user is a Microsoft Account.";
default = false;
};
};
});
in {
options = {
valhalla = {
users = mkOption {
type = types.attrsOf userType;
description = "The users to create on the machine.";
default = {};
};
linux.users = mkOption {
type = types.attrsOf linuxUserType;
};
windows = mkOption {
type = types.submoduleWith {
modules = [
({ config, options, ... }: {
options = {
users = mkOption {
type = types.attrsOf winUserType;
};
winUsers = mkOption {
type = options.users.type;
description = "Blablabla";
default = (lib.attrsets.concatMapAttrs (
name: options: {
${capitalize name} = options;
}) config.users);
};
};
})
];
};
};
};
};
}

View file

@ -6,10 +6,17 @@
;
in {
imports = [
./git.nix
./packages/git.nix
./packages/nextcloud.nix
./packages/oh-my-posh.nix
./packages/rclone.nix
./hardware.nix
./i18n.nix
./os.nix
./partition.nix
./software.nix
./users.nix
./windows.nix
];
options = {

47
lib/modules/windows.nix Normal file
View file

@ -0,0 +1,47 @@
{ lib, config, ... }:
let
inherit (lib)
mkDefault
mkEnableOption
mkIf
mkOption
types
;
capitalize = (import ../text.nix { inherit lib; }).capitalize;
in {
options = {
valhalla = {
windows = {
dualboot = {
enable = mkEnableOption "dual boot";
linuxPercentage = mkOption {
type = types.number;
description = "The percentage of the disk size reserved for Linux.";
};
};
showFileExt = mkOption {
type = types.bool;
description = "A value indicating whether file extensions should be displayed in Windows Explorer.";
default = true;
};
legacyIconSpacing = mkEnableOption "legacy icon spacing" // {
default = true;
};
dynamicLighting = mkEnableOption "dynamic lighting";
adware = mkEnableOption "adware"; # Fuck you for displaying ads on an OS I fricking paid for!
};
};
};
config = {
valhalla.windows = {
setupUser.name = mkDefault (capitalize config.valhalla.setupUser.name);
dualboot.linuxPercentage = mkIf (!config.valhalla.windows.dualboot.enable) (mkDefault 0);
};
};
}

9
lib/text.nix Normal file
View file

@ -0,0 +1,9 @@
{ lib, ... }: {
capitalize = text:
let
chars = lib.strings.stringToCharacters text;
in lib.strings.concatStrings (
[(lib.strings.toUpper (builtins.elemAt chars 0))] ++
(lib.lists.drop 1 chars)
);
}

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,139 +0,0 @@
#!/bin/pwsh
$env:WIN_COMPUTER_NAME = "DerGeret";
$env:SETUP_SCRIPT_NAME = "$PSScriptRoot/Restore.ps1";
function Initialize-SetupConfig() {
param(
[xml] $config,
[System.Xml.XmlNamespaceManager] $namespace
);
$setupComponent = $config.SelectSingleNode(
"/ua:unattend/ua:settings[@pass='windowsPE']/ua:component[@name='Microsoft-Windows-Setup']",
$namespace);
$diskConfig = $setupComponent.SelectSingleNode("./ua:DiskConfiguration/ua:Disk", $namespace);
$partitionCreationContainer = $diskConfig.SelectSingleNode("./ua:CreatePartitions", $namespace);
$partitionCreations = $partitionCreationContainer.SelectNodes("./ua:CreatePartition", $namespace);
$partitionModificationContainer = $diskConfig.SelectSingleNode("./ua:ModifyPartitions", $namespace);
$partitionModifications = $partitionModificationContainer.SelectNodes("./ua:ModifyPartition", $namespace);
<#
.SYNOPSIS
Gets the XML element describing the installation partition ID.
#>
function Get-InstallationPartition {
$setupComponent.SelectSingleNode("./ua:ImageInstall/ua:OSImage/ua:InstallTo/ua:PartitionID", $namespace)
}
<#
.SYNOPSIS
Increases the ID of all partitions in the specified range by 1.
#>
function Move-PartitionRange {
param (
[int]$From = 0,
[System.Nullable[int]]$To = $null,
[int]$By = 1
)
# Update installation partition ID if necessary
$installationPartition = Get-InstallationPartition;
$installPartitionID = [int]$installationPartition.InnerText;
if (($installPartitionID -ge $From) -and (($null -eq $To) -or ($installPartitionID -le $To))) {
$installationPartition.InnerText = "$($installPartitionID + $By)";
}
# Update IDs of all partition creations
foreach ($partition in $partitionCreations) {
$orderNode = $partition.SelectSingleNode("./ua:Order", $namespace);
$order = [int]$orderNode.InnerText;
$newOrder = $order;
if (($newOrder -ge $From) -and (($null -eq $To) -or ($newOrder -le $To))) {
$newOrder += $By;
}
if ($order -ne $newOrder) {
$orderNode.InnerText = "$newOrder";
}
}
# Update IDs of all partition modifications
foreach ($partition in $partitionModifications) {
$partitionNode = $partition.SelectSingleNode("./ua:PartitionID", $namespace);
$partitionID = [int]$partitionNode.InnerText;
$newID = $partitionID;
if (($newID -ge $From) -and (($null -eq $To) -or ($newID -le $To))) {
$newID += $By;
}
if ($partitionID -ne $newID) {
$partitionNode.InnerText = "$newID";
$partition.SelectSingleNode("./ua:Order", $namespace).InnerText = "$newID";
}
}
}
function Add-Partition {
param (
[int]$Index,
[int]$Size,
[string]$Type = "Primary"
)
Move-PartitionRange -From $Index -By 1;
$newPartition = $partitionCreations[0].CloneNode($true);
$newPartition.SelectSingleNode("./ua:Order", $namespace).InnerText = "$Index";
$newPartition.SelectSingleNode("./ua:Type", $namespace).InnerText = "$Type";
$newPartition.SelectSingleNode("./ua:Size", $namespace).InnerText = "$Size";
$null = $partitionCreationContainer.AppendChild($newPartition);
$newModification = $partitionModifications[2].CloneNode($true);
$newModification.SelectSingleNode("./ua:Order", $namespace).InnerText = "$Index";
$newModification.SelectSingleNode("./ua:PartitionID", $namespace).InnerText = "$Index";
$null = $partitionModificationContainer.AppendChild($newModification);
}
<#
.SYNOPSIS
Relocates the partition with the specified `$From` ID to the specified `$To` ID.
#>
function Invoke-PartitionRelocation {
param (
[int]$From,
[int]$To
)
Move-PartitionRange $From $From (-1 * ($From + 1))
if ($From -gt $To) {
Move-PartitionRange $To ($From - 1);
}
elseif ($From -lt $To) {
Move-PartitionRange ($From + 1) $To -1;
}
Move-PartitionRange -1 -1 ($To + 1)
}
# Resize EFI partition to 1GB
$partitionCreations[1].SelectSingleNode("./ua:Size", $namespace).InnerText = "$(1024)";
# Swap Windows RE partition (partition #1) and boot partition (partition #2)
Invoke-PartitionRelocation 2 1;
# Add space before Windows installation... wha-!? For Linux, ofc! I use Arch Linux, btw.
$swapSpacer = 100;
Add-Partition 2 $swapSpacer;
# Add a 1.2 TB partition for Linux
Add-Partition 3 ((1.2 * 1024 * 1024) - 1024 - $swapSpacer);
}
. "$PSScriptRoot/../../../scripts/Windows/OS/Setup.ps1";

View file

@ -1,21 +0,0 @@
{ ... }: {
imports = [
../Generic/config.nix
];
config = {
valhalla.partition.os.partitions = {
Boot.keepExisting = true;
Windows = {
index = 6;
label = "OS";
format = "ntfs";
size = "+600G";
mountPoint = "/win";
mountOptions = ["force"];
keepExisting = true;
};
};
};
}

View file

@ -1,11 +0,0 @@
{ ... }: {
imports = [
../config.nix
];
config = {
valhalla.partition.os.partitions = {
OS.label = "Arch";
};
};
}

View file

@ -1,13 +0,0 @@
#!/bin/pwsh
. "$PSScriptRoot/../../../scripts/Windows/Scripts/Context.ps1";
. "$PSScriptRoot/../../../scripts/Windows/OS/Install.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,5 +0,0 @@
#!/bin/pwsh
$env:WIN_COMPUTER_NAME ??= "win11";
$env:SETUP_SCRIPT_NAME ??= "$PSScriptRoot/Install.ps1";
. "$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,4 @@
#!/bin/env fish
begin
bash "$(status dirname)/install.sh"
end

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

@ -0,0 +1,13 @@
#!/bin/env fish
begin
set -l dir (status dirname)
function getInstallerScript -V dir -S
echo "$dir/install.fish"
end
CONFIG_NAME="DerGeret" \
ARCH_HOSTNAME="der-geret" \
USER_DISPLAYNAME="Manuel Thalmann" \
source "$(status dirname)/../../../../../scripts/Arch/OS/setup.fish"
end

View file

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

View file

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

View file

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

View file

@ -1,8 +1,8 @@
#!/bin/pwsh
. "$PSScriptRoot/Drivers.ps1";
. "$PSScriptRoot/../../../scripts/Windows/Collections/Personal.ps1"
. "$PSScriptRoot/../../../scripts/Windows/OS/Install.ps1";
. "$PSScriptRoot/../../../scripts/Windows/Scripts/Context.ps1";
. "$PSScriptRoot/../../../../../scripts/Common/Scripts/Context.ps1";
. "$PSScriptRoot/../../../../../scripts/Windows/Collections/Personal.ps1"
. "$PSScriptRoot/../../../../../scripts/Windows/OS/Manage.ps1";
function Initialize-Configuration {
# Fix synchronization between Linux and Windows clock
@ -26,5 +26,4 @@ function Restore-Apps {
Write-Host "Starting Restoration of Windows";
[Context]$context = [Context]::new();
Invoke-WindowsInstallation $context;
Restart-Computer -Force;
Start-WindowsInstallation;

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

@ -0,0 +1,48 @@
{ ... }: {
imports = [
../defaults.nix
];
config = {
valhalla = {
windows = {
dualboot = {
enable = true;
linuxPercentage = 70; # better safe than sorry
};
users.manuel = {
microsoftAccount = true;
groups = ["Administrators"];
};
};
partition.os.partitions = {
Boot.keepExisting = true;
Windows = {
index = 6;
label = "OS";
format = "ntfs";
mountPoint = "/win";
mountOptions = ["force"];
keepExisting = true;
};
};
hardware = {
components = [
"ROG Zenith Extreme Alpha"
"Predator Z301C"
];
eyeX = true;
amdCPU = true;
nvidiaGPU = true;
logitechG = true;
corsairDevice = true;
elgatoWave = true;
};
};
};
}

View file

@ -0,0 +1,9 @@
{ ... }: {
imports = [
../config.nix
];
config = {
valhalla.boot.label = "Arch";
};
}

View file

@ -3,11 +3,11 @@ function install() {
local dir="$(realpath "${BASH_SOURCE%/*}")";
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;

View file

@ -4,6 +4,6 @@ pushd "${BASH_SOURCE%/*}" > /dev/null;
ARCH_MOUNT_ROOT="/mnt" \
ARCH_HOSTNAME="archlinux" \
USER_DISPLAYNAME="Manuel Thalmann" \
. "../../../scripts/Arch/OS/setup.sh";
. "../../../../../scripts/Arch/OS/setup.sh";
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,9 +1,9 @@
{ lib, config, ... }:
let
fs = import ../../lib/modules/partition/fs.nix;
fs = import ../../../../lib/modules/partition/fs.nix;
in {
imports = [
../../lib/modules/valhalla.nix
../defaults.nix
];
config = {

View file

@ -14,4 +14,4 @@ function Install-PortValhallaDrivers {
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)
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;
end
@ -11,8 +11,8 @@ begin
echo "$dir/install.fish"
end
CONFIG_MODULE="$(status dirname)/config.nix" \
CONFIG_NAME="ManuSurface" \
ARCH_HOSTNAME="manu-surface" \
USER_DISPLAYNAME="Manuel Thalmann" \
source "$(status dirname)/../../../scripts/Arch/OS/setup.fish";
source "$(status dirname)/../../../../../scripts/Arch/OS/setup.fish";
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

@ -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

@ -0,0 +1,173 @@
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"version": 2,
"blocks": [
{
"type": "prompt",
"alignment": "left",
"segments": [
{
"type": "os",
"style": "diamond",
"leading_diamond": "\ue0b6",
"trailing_diamond": "\ue0b4",
"background_templates": [
"{{ if eq .OS \"ubuntu\" }}#EA531A{{ end }}",
"{{ if eq .OS \"debian\" }}#D80150{{ end }}",
"{{ if eq .OS \"arch\" }}#1793D1{{ end }}"
],
"foreground": "p:white",
"template": "{{ if ne .OS \"windows\" }}{{ .Icon }} {{ end }}"
},
{
"type": "session",
"style": "diamond",
"leading_diamond": "\ue0b6",
"trailing_diamond": "\ue0b0",
"background": "p:yellow",
"foreground": "p:black",
"properties": {
"display_host": false
},
"template": " {{ if .SSHSession }}\ueb39 {{ end }}{{ .UserName }} "
},
{
"type": "path",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"background": "p:orange",
"foreground": "p:black",
"properties": {
"home_icon": "~",
"style": "folder"
},
"template": " \udb80\ude4b {{ path .Path .Location }} "
},
{
"type": "dotnet",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"foreground": "p:black",
"background": "#00ffff",
"template": " \udb81\ude10 {{ .Full }} "
},
{
"type": "java",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"background": "#4063d8",
"template": " \udb82\udf37 {{ .Full }} "
},
{
"type": "python",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"background": "#906cff",
"template": " \udb80\udf20 {{ .Full }} "
},
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"trailing_diamond": "\ue0b4",
"background": "p:green",
"background_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:yellow{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:red{{ end }}",
"{{ if gt .Ahead 0 }}#49416D{{ end }}",
"{{ if gt .Behind 0 }}#7A306C{{ end }}"
],
"foreground": "p:black",
"foreground_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}p:black{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:white{{ end }}",
"{{ if gt .Ahead 0 }}p:white{{ end }}"
],
"properties": {
"branch_max_length": 25,
"fetch_stash_count": true,
"fetch_status": true,
"fetch_upstream_icon": true,
"upstream_icons": {
"codeberg.org": "\uf330 ",
"git.nuth.ch": "\uf335",
"git.jonascosta.ch": "\uf339 ",
"git.romhackersworld.eu": "\uf339 ",
"aur.archlinux.org": "\uf303 "
}
},
"templates": [
"{{ if .UpstreamURL }} {{ url .UpstreamIcon .UpstreamURL }}{{ end }}",
" {{ .HEAD }} ",
"{{ if .BranchStatus }}{{ .BranchStatus }} {{ end }}",
"{{ if .Working.Changed }} \uf044 {{ .Working.String }} {{ end }}",
"{{ if and (.Working.Changed) (or (.Staging.Changed) (gt .StashCount 0)) }} | {{ end }}",
"{{ if .Staging.Changed }} \uf046 {{ .Staging.String }} {{ end }}",
"{{ if and (.Staging.Changed) (gt .StashCount 0) }} | {{ end }}",
"{{ if gt .StashCount 0 }} \udb80\udd93 {{ .StashCount }}{{ end }} "
]
},
{
"type": "node",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"background": "#6ca35e",
"foreground": "p:white",
"properties": {
"fetch_version": true
},
"template": " \udb80\udf99 {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }} "
},
{
"type": "root",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"background": "p:yellow",
"foreground": "p:white",
"properties": {
"root_icon": "\uf0e7"
}
},
{
"type": "executiontime",
"style": "plain",
"background": "#83769c",
"foreground": "p:white",
"properties": {
"always_enabled": true
},
"template": "<transparent>\ue0b0</> \udb81\udead {{ .FormattedMs }}\u2800"
},
{
"type": "text",
"style": "diamond",
"background": "p:blue",
"trailing_diamond": "\ue0b4",
"background_templates": [
"{{ if gt .Code 0 }}p:red{{ end }}"
],
"foreground": "p:white",
"properties": {
"always_enabled": true
},
"template": "<parentBackground>\ue0b0</> {{ if gt .Code 0 }}\uf00d{{ else }}\uf00c{{ end }} "
}
]
}
],
"transient_prompt": {
"background": "transparent",
"foreground": "p:black",
"template": "<p:yellow,transparent>\ue0b6</><,p:yellow> {{ .Folder }} </><p:yellow,transparent>\ue0b0</> "
},
"final_space": true,
"palette": {
"black": "#262B44",
"blue": "#4B95E9",
"green": "#59C9A5",
"orange": "#F07623",
"red": "#D81E5B",
"white": "#E0DEF4",
"yellow": "#F3AE35"
}
}

View file

@ -109,7 +109,7 @@ yay --noconfirm -Syu jq;
BROWSER_BIN="brave" \
EXTENSION_DIR="/usr/share/chromium-extensions" \
EXTENSION_POLICY_DIR="$braveExtensions" \
source "../../Common/Config/Chromium/install-ytmusic-dl.sh";
source "../../Common/Software/Chromium/ytmdl.sh";
# sudo ln -sf "$braveExtensions" /opt/brave.com/brave-beta/extensions;
# sudo ln -sf "$braveExtensions" /opt/brave.com/brave-nightly/extensions;

167
scripts/Arch/OS/install.fish Normal file → Executable file
View file

@ -41,18 +41,21 @@ begin
rar
sudo pkgfile --update
source "$dir/../../Common/Software/bash/main.fish"
source "$dir/../Software/openssh/main.fish"
source "$dir/../Software/vim/main.fish"
source "$dir/../Software/git/main.fish"
source "$dir/../Software/zoxide/main.fish"
source "$dir/../Software/logo-ls/main.fish"
# GRUB Shenanigans - if that's not an essential I don't know what is!
source "$dir/../Software/minegrub-theme/main.fish";
end
if collectionActive common
yayinst \
tldr \
btop \
nvtop \
numbat-bin \
terminal-parrot
source "$dir/../Software/aliae/main.fish"
@ -75,6 +78,69 @@ begin
ttf-ms-win11-auto \
otf-cascadia-code \
ttf-droid
# Password Management
yayinst \
bitwarden \
keepass \
keepassxc
# Tools
yayinst \
android-tools \
blackbox-terminal \
cpu-x \
gnome-calculator \
yubikey-manager-qt
yayinst \
remmina (
# RDP support for Remmina
) freerdp \
wireshark-qt \
linux-wifi-hotspot
# Creativity
yayinst \
gimp \
inkscape
# Office stuff
yayinst \
libreoffice-fresh \
naps2-bin \
pdfarranger \
protonmail-bridge \
thunderbird
yayinst \
texlive \
texlive-langgerman
# Browser
source "$dir/../Software/Firefox/main.fish"
source "$dir/../Software/brave/main.fish"
source "$dir/../Software/Pennywise/main.fish"
# Virtualization
source "$dir/../Software/waydroid/main.fish"
source "$dir/../Software/Virtual Machine Manager/main.fish"
yayinst propertree-git # mac config file editor
if collectionActive coding
yayinst \
devdocs-desktop \
godot-mono-bin
source "$dir/../Software/vscode/main.fish"
end
if collectionActive school
yayinst \
teams-for-linux \
xournalpp-git \
rnote
end
end
if collectionActive server
@ -86,7 +152,102 @@ begin
# Networking
yayinst \
networkmanager-openvpn \
networkmanager-openconnect
networkmanager-openconnect \
protonvpn
if collectionActive common
source "$dir/../Software/IcedTea/main.fish"
yayinst \
img2pdf \
numbat-bin \
nvtop \
pdf2svg \
tnef
end
end
if collectionActive media
yayinst \
ytmdesktop-bin \
netflix \
spotube-bin \
stremio \
tidal-dl \
tidal-hifi-bin \
nuclear-player-bin \
audius-client-bin
end
if collectionActive fileSync
yayinst nextcloud-client
source "$dir/../Software/rclone/main.fish"
end
if collectionActive socialMedia
yayinst \
signal-desktop \
threema-desktop \
discord (
# Open Source Discord implementation
) openasar-git
end
if collectionActive productivity
yayinst \
anki-bin
end
if collectionActive school
yayinst \
jdk17-temurin \
gradle \
jetbrains-toolbox
source "$dir/../../Common/Software/udev/ct-board.fish"
end
if collectionActive coding
yayinst \
archiso \
wimlib (
# ISO support for wimlib
) cdrkit \
tea \
woodpecker-cli (
# AsciiDocs
) python-docutils (
# reStructuredText
) esbonio
source "$dir/../Software/n/main.fish"
end
if collectionActive python
yayinst \
python \
python-pip \
python-pipenv
source "$dir/../Software/pyenv/main.fish"
end
if collectionActive gaming
yayinst \
steam \
chiaki \
osu-lazer-bin \
libretro \
supertux \
gamepad-tool-bin
source "$dir/../Software/Lutris/main.fish"
flatpak install -y flathub com.usebottles.bottles
end
if collectionActive essential
yayinst \
bb
end
end
end

12
scripts/Arch/OS/setup.fish Normal file → Executable file
View file

@ -1,7 +1,6 @@
#!/bin/env fish
begin
set -l dir (status dirname)
set -q CONFIG_MODULE || set -l CONFIG_MODULE "$dir/config.nix"
source "$dir/../../Common/OS/setup.fish"
source "$dir/../../Common/Scripts/config.fish"
@ -15,7 +14,7 @@ begin
pacstrap -K "$mountDir" fish jq nix tmux
end
function setupOS -S -V dir -V CONFIG_MODULE -V mountDir
function setupOS -S -V dir -V mountDir
source "$dir/../../Common/Scripts/wait-network.fish"
source "$dir/../../Common/Scripts/hooks.fish"
@ -69,6 +68,7 @@ begin
end | begin
read LOCALES
and arch-chroot "$mountDir" sed -i "s/^#\?\(\($LOCALES\).*\)\$/\1/" /etc/locale.gen
and arch-chroot "$mountDir" locale-gen
end
and begin
@ -86,14 +86,8 @@ begin
and arch-chroot "$mountDir" mkinitcpio -P
and runHook installDrivers "Installing drivers..." || true
and runInOS fish "$tempDir/../../Common/Software/nix/main.fish" configure user
and arch-chroot "$mountDir" bash "$tempDir/../Software/sudo/install.sh"
and arch-chroot "$mountDir" bash "$tempDir/../Software/GRUB/install.sh"
and USER_NAME="$USER_NAME" \
USER_DISPLAYNAME="$USER_DISPLAYNAME" \
USER_GROUPS="$USER_GROUPS" \
arch-chroot "$mountDir" bash "$tempDir/user.sh"
and runInOS fish "$tempDir/../Software/GRUB/main.fish"
and if set -l keyLayout (getConfig valhalla.keyboardLayout)
set -l serviceName set-keymap.service

12
scripts/Arch/Scripts/software.fish Normal file → Executable file
View file

@ -3,11 +3,19 @@ begin
set -l dir (status dirname)
source "$dir/../../Common/Scripts/software.fish"
function runYay -d "Run yay with pre-configured defaults"
yay --needed --answerclean=None --answerdiff=None -Syu $argv
end
function yayinst -d "Install yay-package non-interactively"
yay --noconfirm --needed --answerclean=None --answerdiff=None -Syu $argv
runYay --noconfirm $argv
end
function runPacman -d "Run pacman with pre-configured defaults"
sudo pacman --needed -Syu $argv
end
function pacinst -d "Install pacman-package non-interactively"
sudo pacman --noconfirm --needed -Syu $argv
runPacman --noconfirm $argv
end
end

View file

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

View file

@ -0,0 +1,16 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
pacinst \
grub \
efibootmgr \
os-prober
fish "$dir/../../../Common/Software/GRUB/main.fish" configure
end
runInstaller $argv
end

View file

@ -0,0 +1,24 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst \
jdk-temurin
yayinst \
icedtea-web
configureSW
end
function configureSW
# Allow execution of huwaei KVM application (uses out of date security mechanisms)
sudo sed -i \
"/^jdk.jar.disabledAlgorithms=/{ :comment; s/\(.*\)/#\1/; /\\\\\$/{ n; bcomment; }; }" \
/usr/lib/jvm/default-runtime/conf/security/java.security
end
runInstaller $argv
end

0
scripts/Arch/Software/KDE/main.fish Normal file → Executable file
View file

View file

@ -0,0 +1,72 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst \
wine-staging \
giflib \
lib32-giflib \
libpng \
lib32-libpng \
libldap \
lib32-libldap \
gnutls \
lib32-gnutls \
mpg123 \
lib32-mpg123 \
openal \
lib32-openal \
v4l-utils \
lib32-v4l-utils \
libpulse \
lib32-libpulse \
libgpg-error \
lib32-libgpg-error \
alsa-plugins \
lib32-alsa-plugins \
alsa-lib \
lib32-alsa-lib \
libjpeg-turbo \
lib32-libjpeg-turbo \
sqlite \
lib32-sqlite \
libxcomposite \
lib32-libxcomposite \
libxinerama \
lib32-libgcrypt \
libgcrypt \
lib32-libxinerama \
ncurses \
lib32-ncurses \
ocl-icd \
lib32-ocl-icd \
libxslt \
lib32-libxslt \
libva \
lib32-libva \
gtk3 \
lib32-gtk3 \
gst-plugins-base-libs \
lib32-gst-plugins-base-libs \
vulkan-icd-loader \
lib32-vulkan-icd-loader
yayinst (
# Extracting GOG games
) innoextract \
gamemode \
lib32-gamemode \
vkd3d \
lib32-vkd3d \
gamescope \
yad \
protontricks \
protonup-qt-bin
yayinst lutris
end
runInstaller $argv
end

View file

@ -0,0 +1,25 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst \
pennywise-bin
configureSW
end
function configureSW
set -l patch " --no-sandbox"
set -l pattern "^Exec=.*"
set -l indicator "$pattern$patch"
set -l file /usr/share/applications/pennywise.desktop
if ! grep "$indicator" "$file" > /dev/null
sudo sed -i "/$pattern/s/$pattern/\0 --no-sandbox/" "$file"
end
end
runInstaller $argv
end

View file

@ -0,0 +1,28 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst qemu-full
yes | runPacman --asdeps iptables-nft
yes | yayinst \
virtiofsd \
virt-manager \
dnsmasq \
swtpm \
lxc \
virt-bootstrap-git
configureSW
end
function configureSW -V dir
sudo systemctl enable --now libvirtd
sudo systemctl enable --now virtlogd
fish "$dir/../../../Common/Software/Virtual Machine Manager/main.fish" configure
end
runInstaller $argv
end

5
scripts/Arch/Software/aliae/main.fish Normal file → Executable file
View file

@ -2,13 +2,12 @@
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
source "$dir/../../../Common/Software/aliae/main.fish"
function installSW
function installSW -V dir
yayinst \
aliae-bin
configureSW
fish "$dir/../../../Common/Software/aliae/main.fish" configure
end
runInstaller $argv

0
scripts/Arch/Software/base-devel/main.fish Normal file → Executable file
View file

View file

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

4
scripts/Arch/Software/git/main.fish Normal file → Executable file
View file

@ -4,7 +4,7 @@ begin
source "$dir/../../Scripts/software.fish"
source "$dir/../../../Common/Software/git/main.fish"
function installSW
function installSW -V dir
yayinst \
git \
git-lfs \
@ -13,7 +13,7 @@ begin
gitflow-fishcompletion-avh \
gitflow-zshcompletion-avh
and configureSW
and fish "$dir/../../../Common/Software/git/main.fish" configure
end
runInstaller $argv

View file

@ -0,0 +1,45 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
set -l dirName (realpath "$dir")
set -l contextRoot (mktemp -d)
set -l pkgName logo-ls
set -l patchName workaround.patch
if not type -q logo-ls
begin
pushd "$contextRoot" > /dev/null
yay -G -f "$pkgName"
cd "$pkgName"
cp "$dirName/$patchName" .
sed -i \
-e "/^source=(/s/source=(/\0$patchName /" \
-e "/^md5sums=(/s/^md5sums=(/\0SKIP /" \
-e "/^build() {/,/}/{" \
-e "/^[[:space:]]*cd/{" \
-e "a cat ../$patchName | patch --strip 1 --forward --merge" \
-e "}" \
-e "}" \
PKGBUILD
makepkg --noconfirm -si --force
popd > /dev/null
end
rm -rf "$contextRoot"
end
configureSW
end
function configureSW -V dir
sudo systemctl enable --now nix-daemon
fish "$dir/../../../Common/Software/logo-ls/main.fish" configure
end
runInstaller $argv
end

View file

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

View file

@ -0,0 +1,12 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW -V dir
yayinst nodejs-n
sudo --preserve-env --set-home fish "$dir/../../../Common/Software/n/main.fish" configure
end
runInstaller $argv
end

View file

@ -0,0 +1,20 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst \
nix \
nil-git
configureSW
end
function configureSW -V dir
sudo systemctl enable --now nix-daemon
fish "$dir/../../../Common/Software/nix/main.fish" configure
end
runInstaller $argv
end

4
scripts/Arch/Software/openssh/main.fish Normal file → Executable file
View file

@ -7,10 +7,12 @@ begin
yayinst \
openssh \
libfido2
source (status filename) configure
end
function configureSW
systemctl --global enable --now ssh-agent
sudo systemctl --global enable ssh-agent
and begin
printf %s\n \

0
scripts/Arch/Software/pacman/main.fish Normal file → Executable file
View file

View file

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

View file

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

2
scripts/Arch/Software/sddm/main.fish Normal file → Executable file
View file

@ -14,7 +14,7 @@ begin
function configureSW -V dir
set -l configDir /etc/sddm.conf.d
sudo systemctl enable sddm
mkdir -p "$configDir"
sudo mkdir -p "$configDir"
sudo cp "$dir/wayland.conf" "$configDir/10-wayland.conf"
end

4
scripts/Arch/Software/vim/main.fish Normal file → Executable file
View file

@ -4,7 +4,7 @@ begin
source "$dir/../../Scripts/software.fish"
source "$dir/../../../Common/Software/vim/main.fish"
function installSW
function installSW -V dir
yayinst (
# Necessary for accessing clipboard in terminal: https://wiki.archlinux.org/title/Vim
) gvim \
@ -13,7 +13,7 @@ begin
) vim-wayland-clipboard-git \
wl-clipboard
and configureSW
and fish "$dir/../../../Common/Software/vim/main.fish" configure
end
runInstaller $argv

View file

@ -0,0 +1,33 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst \
vscodium-bin \
visual-studio-code-bin (
# Trash functionality
) gvfs
configureSW
end
function configureSW -V dir
set -l bins codium code
for bin in $bins
if type -q "$bin"
begin
set -l file "/etc/skel/.config/$bin-flags.conf"
sudo mkdir -p (dirname "$file")
echo "--touch-events" | sudo tee "$file" > /dev/null
end
end
end
fish "$dir/../../../Common/Software/vscode/main.fish" configure
end
runInstaller $argv
end

View file

@ -0,0 +1,20 @@
#!/bin/env fish
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
function installSW
yayinst (
# Waydroid prerequisite: https://wiki.archlinux.org/title/Waydroid#DKMS_modules
) binder_linux-dkms \
waydroid (
# For installing ARM suppot on waydroid
) waydroid-script-git (
# Clipboard support: https://wiki.archlinux.org/title/Waydroid#Failed_to_start_Clipboard_manager_service
) python-pyclip (
# Wayland clipboard support: https://github.com/spyoungtech/pyclip?tab=readme-ov-file#linux
) wl-clipboard
end
runInstaller $argv
end

0
scripts/Arch/Software/yay/main.fish Normal file → Executable file
View file

5
scripts/Arch/Software/zoxide/main.fish Normal file → Executable file
View file

@ -2,13 +2,12 @@
begin
set -l dir (status dirname)
source "$dir/../../Scripts/software.fish"
source "$dir/../../../Common/Software/zoxide/main.fish"
function installSW
function installSW -V dir
yayinst \
zoxide
configureSW
fish "$dir/../../../Common/Software/zoxide/main.fish" configure
end
runInstaller $argv

View file

@ -1,4 +1,4 @@
#!/bin/bash
pushd "${BASH_SOURCE%/*}" > /dev/null;
sudo cp ./firefox.sh /etc/profile.d/;
sudo cp ../../Software/Firefox/firefox.sh /etc/profile.d/;
popd > /dev/null;

View file

@ -1,10 +1,10 @@
#!/bin/pwsh
. "$PSScriptRoot/../../Software/powershell/profile.ps1";
. "$PSScriptRoot/../../Software/PowerShell/Profile.ps1";
Add-PowerShellProfileStatement `
-System `
-Category "oh-my-posh" `
-Statement $(
-Script $(
@(
"# Oh My Posh!",
$(Get-ScriptInitializer "oh-my-posh init pwsh"),

View file

@ -1,8 +1,8 @@
#!/bin/pwsh
. "$PSScriptRoot/../../Software/powershell/profile.ps1";
. "$PSScriptRoot/../../Software/PowerShell/Profile.ps1";
foreach ($defaultUser in @($true, $false)) {
Add-PowerShellProfileStatement -DefaultUser:$defaultUser -Statement "# aliae`naliae init pwsh | Invoke-Expression";
Add-PowerShellProfileStatement -DefaultUser:$defaultUser -Script "# aliae`naliae init pwsh | Invoke-Expression";
}
Add-PowerShellProfileStatement -System -Category "aliae" -Statement "# aliae`n$(Get-ScriptInitializer "aliae completion powershell")";
Add-PowerShellProfileStatement -System -Category "aliae" -Script "# aliae`n$(Get-ScriptInitializer "aliae completion powershell")";

View file

@ -1,5 +1,5 @@
#!/bin/bash
pushd "${BASH_SOURCE%/*}" > /dev/null;
pushd "${BASH_SOURCE%/*}/../../Software/rclone" > /dev/null;
sudo cp "rclone.service" "rclone.target" "rclone@.service" /etc/systemd/user;
systemctl enable --user rclone;

View file

@ -1,10 +1,10 @@
#!/bin/pwsh
. "$PSScriptRoot/../../Software/powershell/profile.ps1";
. "$PSScriptRoot/../../Software/PowerShell/Profile.ps1";
Add-PowerShellProfileStatement `
-System `
-Category "zoxide" `
-Statement $(
-Script $(
@(
"# zoxide",
$(Get-ScriptInitializer "zoxide init powershell | Out-String")

15
scripts/Common/OS/install.fish Normal file → Executable file
View file

@ -3,14 +3,10 @@ set -l dir (status dirname)
source "$dir/../Scripts/config.fish"
source "$dir/../Scripts/hooks.fish"
function configureNix -V dir
source "$dir/../Software/nix/main.fish" configure user
end
if [ (id -u) -eq 0 ]
configureNix
set -l name (getConfig valhalla.setupUser.name)
set -l sudoConfig "/etc/sudoers.d/PortValhalla"
rm ~/.bash_profile
runHook createUser || \
begin
@ -28,16 +24,21 @@ if [ (id -u) -eq 0 ]
echo "$name ALL=(ALL:ALL) NOPASSWD: ALL"
end > "$sudoConfig"
and sudo --preserve-env="CONFIG_MODULE" --user "$name" "$INSTALLER_SCRIPT"
and sudo --preserve-env="CONFIG_NAME" --user "$name" "$INSTALLER_SCRIPT"
rm "$sudoConfig"
userdel -r "$name"
else
configureNix
source "$dir/../Software/bash/main.fish"
runHook initialize || true
runHook installDrivers || true
runHook installOS || true
runHook addUsers || begin
source "$dir/users.fish"
end
runHook installSoftware || true
runHook initializeConfig || true
runHook postInstall || true
end

5
scripts/Common/OS/setup.fish Normal file → Executable file
View file

@ -3,7 +3,6 @@ function runSetup
set -l dir (status dirname)
source "$dir/../Scripts/config.fish"
source "$dir/../Scripts/hooks.fish"
set -l name (getConfig valhalla.setupUser.name)
set -l mountDir (getConfig valhalla.partition.rootDir)
set -l projectRoot (realpath "$dir/../../..")
set -l projectName (basename "$projectRoot")
@ -31,7 +30,7 @@ function runSetup
function runInOS -S
set -l script "/root/run_once"
wrapScript $argv | chroot "$mountDir" tee "$script"
wrapScript $argv | chroot "$mountDir" tee "$script" > /dev/null
runChroot "$mountDir" chmod +x "$script"
runChroot "$mountDir" "$script"
runChroot "$mountDir" rm "$script"
@ -40,7 +39,7 @@ function runSetup
function wrapScript -S
printf %s\n \
"cd $PROJECT_CLONE_ROOT" \
"export CONFIG_MODULE=$(string escape (getCloneFile "$CONFIG_MODULE"))" \
"export CONFIG_NAME=$(string escape (getCloneFile "$CONFIG_NAME"))" \
"$argv"
end

32
scripts/Common/OS/users.fish Executable file
View file

@ -0,0 +1,32 @@
#!/bin/env fish
set -l dir (status dirname)
source "$dir/../Scripts/config.fish"
set -l users (getUsers)
for name in (echo "$users" | jq '.[]' --raw-output0 | string split0)
function getUserConfig -S -a config
getConfig "valhalla.users.$name.$config" $argv[2..]
end
set -l displayName (getUserConfig displayName --json)
set -l shell (getUserConfig displayName --json)
sudo useradd --create-home (
if [ displayName != "null" ]
echo "--comment"
echo "$displayName" | jq --raw-output
end
) --groups (getUserConfig groups --apply 'builtins.concatStringsSep ","') \
"$name"
if echo "$shell" | jq --exit-status > /dev/null
sudo chsh "$name" --shell "$shell"
end
echo "Please Choose a New Password for User `$name`"
while ! sudo passwd "$name"
echo "An error occurred! Please try again."
end
end

View file

@ -0,0 +1,163 @@
#!/bin/bash
$null = New-Module {
. "$PSScriptRoot/System.ps1";
<#
.SYNOPSIS
Runs an action involving browser automation.
.PARAMETER Action
The action to execute.
#>
function Start-BrowserAutomation {
param(
[scriptblock] $Action
)
if (-not ("OpenQA.Selenium.Firefox.FirefoxDriver" -as [type])) {
$packageRoot = Split-Path -Parent (Get-Package Selenium.WebDriver).Source;
$file = Join-Path $packageRoot "lib/netstandard2.0/WebDriver.dll";
$env:SE_MANAGER_PATH = Join-Path $packageRoot "manager" ($IsWindows ? "windows" : "linux") "selenium-manager$($IsWindows ? ".exe" : '')";
$null = [System.Reflection.Assembly]::LoadFile($file);
}
& $Action;
}
<#
.SYNOPSIS
Downloads a file from the specified url using browser automation.
.PARAMETER URL
The url to download the file from.
.PARAMETER Action
The action to execute in the browser for initiating the download.
.PARAMETER OutDir
The directory to download the file to.
#>
function Start-CustomBrowserDownload {
param(
[string] $URL,
[scriptblock] $Action,
[string] $OutDir
)
$downloadAction = $Action;
Start-BrowserAutomation {
if (-not $OutDir) {
$OutDir = ".";
}
$dir = New-TemporaryDirectory;
Write-Host "Downloading ``$URL`` using browser automation…";
$options = [OpenQA.Selenium.Firefox.FirefoxOptions]::new();
$options.SetPreference("browser.download.folderList", 2);
$options.SetPreference("browser.download.dir", "$dir");
$downloadChecker = {
$files = Get-ChildItem $dir;
if ((@($files)).Count -eq 1) {
$file = $files[0];
try {
$stream = [System.IO.File]::Open($file.FullName, [System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None);
if ($stream) {
$stream.Close();
}
}
catch {
return $true;
}
return $false;
} else {
return $true;
}
};
$browser = [OpenQA.Selenium.Firefox.FirefoxDriver]::new($options);
$browser.Navigate().GoToUrl($URL);
while (-not ($browser.ExecuteScript("return document.readyState;") -eq "complete")) {
Start-Sleep 0.1;
}
try {
$null = & $downloadAction -Browser $browser;
while (& $downloadChecker) {
Write-Host "Waiting for the download to finish…";
Start-Sleep 1;
}
$file = Get-ChildItem $dir;
$result = Move-Item $file $OutDir -PassThru;
$browser.Quit();
Remove-Item -Recurse $dir;
$result;
}
catch {
Write-Error $Error;
}
}
}
<#
.SYNOPSIS
Downloads a file from the specified url using browser automation.
.PARAMETER URL
The url to download the file from.
.PARAMETER ButtonSelector
The jQuery selector for finding the download button.
.PARAMETER OutDir
The directory to download the file to.
.PARAMETER Timeout
The number of seconds to wait before clicking the download button.
#>
function Start-BrowserDownload {
param(
[string] $URL,
[string] $ButtonSelector,
[string] $OutDir = $null,
[double] $Timeout = 0
)
Start-CustomBrowserDownload @PSBoundParameters -Action {
param(
[OpenQA.Selenium.Firefox.FirefoxDriver] $Browser
)
$selector = [OpenQA.Selenium.By]::CssSelector($ButtonSelector);
[OpenQA.Selenium.IWebElement] $element = $null;
for ($i = 0; $i -lt 5; $i++) {
$element = $Browser.FindElement($selector);
if ($element) {
break;
} else {
Start-Sleep 1;
}
}
if ($Timeout -gt 0) {
Start-Sleep $Timeout;
}
if ($element) {
$Browser.FindElement($selector).Click();
} else {
Write-Error "Unable to find download button!";
}
};
}
};

View file

@ -0,0 +1,575 @@
using namespace Microsoft.Win32;
using namespace System.Management.Automation.Host;
using namespace System.Security.AccessControl;
using namespace System.Security.Principal;
enum WindowsInstallerStage {
Initialize
Run
Cleanup
Completed
}
enum SetupStage {
Initialize
Configure
Install
CreateUser
}
enum BackupStage {
Initialize
Backup
BackupUsers
}
enum UserStage {
Create
Configure
Cleanup
Completed
}
$null = New-Module {
[string] $configRoot = "HKLM:\Software\PortValhalla";
[string] $stageOption = "Stage";
[string] $setupStageOption = "SetupStage";
[string] $backupStageOption = "BackupStage";
[string] $userOption = "SetupUser";
[string] $userStageOption = "UserStage";
[string] $accountOption = "MSAccount";
[string] $finishedOption = "Finished";
[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
Converts the specified path to linux and escapes it for the use in a script.
.PARAMETER Path
The path to convert.
#>
function ConvertTo-LinuxPath {
param(
[string] $Path
)
& {
$ErrorActionPreference = 'Continue';
$completed = $false;
while (-not $completed) {
$job = Start-Job {
$env:Value = Resolve-Path $Using:Path;
$env:WSLENV = "Value/p";
$result = wsl -- bash -c 'echo "$Value"';
wsl -e printf "%q" "$result";
};
$result = Receive-Job -Wait $job;
if ((Split-Path -Leaf $Path) -ne (Split-Path -Leaf $result)) {
Write-Error "The result of the path conversion of ``$Path`` was unexpected: ``$result``";
continue;
}
if ($job.State -ne ([System.Management.Automation.JobState]::Completed)) {
Write-Error "An error occurred while converting ``$Path`` to a Linux path.`nOutput: ``$result``";
continue;
}
$completed = $true;
}
$result;
};
}
<#
.SYNOPSIS
Gets the registry key containing options related to the setup.
#>
function Get-SetupConfigKey {
if (-not (Test-Path $configRoot)) {
$key = New-Item $configRoot;
$acl = Get-Acl $configRoot;
$acl.AddAccessRule(
[RegistryAccessRule]::new(
[SecurityIdentifier]::new([WellKnownSidType]::BuiltinUsersSid, $null),
[RegistryRights]::FullControl,
[InheritanceFlags]::ObjectInherit -bor [InheritanceFlags]::ContainerInherit,
[PropagationFlags]::None,
[AccessControlType]::Allow));
Set-Acl $configRoot $acl;
} else {
$key = Get-Item $configRoot;
}
return $key;
}
<#
.SYNOPSIS
Runs a script based on the `config.fish` script.
.PARAMETER Script
The script to run.
#>
function Invoke-ConfigScript {
param(
[string] $Script
)
$scriptPath = "$PSScriptRoot/../../Common/Scripts/config.fish";
if ($env:CONFIG_NAME -or ($Script -eq "getProfiles")) {
$output = & {
if (-not $IsWindows) {
$escapedPath = (fish -c 'string escape $argv' "$scriptPath");
fish -c ". $escapedPath; $Script";
} else {
$cleanup = { };
$projectRoot = "$PSScriptRoot/../../..";
$archisoDir = "$projectRoot/archiso";
function fish {
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";
if (-not $?) {
Write-Error "The configuration could not be retrieved!";
} else {
$output;
}
& $cleanup *> $null;
}
}
if (-not ($output -and ($output | Test-Json))) {
Write-Error "The value ``$output`` is not valid JSON.";
} else {
$output | ConvertFrom-Json;
}
} else {
$null;
}
}
<#
.SYNOPSIS
Gets a configuration option.
.PARAMETER Name
The name of the option to get.
#>
function Get-Config {
param(
[string] $Name,
[Parameter(ValueFromRemainingArguments)]
[string[]] $ArgumentList
)
Invoke-ConfigScript "getConfig $Name --json $ArgumentList";
}
<#
.SYNOPSIS
Gets the name of the config root.
#>
function Get-ConfigRootName {
return "valhalla.$($IsWindows ? "windows" : "linux")";
}
<#
.SYNOPSIS
Gets the name of the user root.
#>
function Get-UserRootName {
return "$(Get-ConfigRootName).$($IsWindows ? "winUsers" : "users")";
};
<#
.SYNOPSIS
Gets a user configuration.
.PARAMETER UserName
The name of the user to get the configuration for.
.PARAMETER Name
The name of the configuration to get.
#>
function Get-UserConfig {
param(
[string] $UserName = ($IsWindows ? $env:UserName : $env:USER),
[Parameter(Mandatory, Position = 0)]
[string] $Name
)
if ((Get-Users) -contains $UserName) {
Get-Config "$(Get-UserRootName).$UserName.$Name";
} else {
return $null;
}
}
<#
.SYNOPSIS
Gets the attributes of a configuration object.
.PARAMETER Name
The name of the configuration to get the attributes of.
#>
function Get-Attributes {
param(
[string] $Name
)
Invoke-ConfigScript "getAttributes $Name";
}
<#
.SYNOPSIS
Gets the names of the users to create.
#>
function Get-Users {
[OutputType([string[]])]
param()
Get-Attributes "$(Get-UserRootName)";
}
<#
.SYNOPSIS
Gets the name of the setup user.
#>
function Get-SetupUser {
[OutputType([string])]
param()
Get-Config "$(Get-ConfigRootName).setupUser.name";
}
<#
.SYNOPSIS
Gets the value of an option related to the setup.
.PARAMETER Name
The name of the option value to get.
#>
function Get-SetupOption {
param(
[string] $Name
)
$key = Get-SetupConfigKey;
if ($key.GetValueNames().Contains($Name)) {
return $key.GetValue($Name);
} else {
return $null;
}
}
<#
.SYNOPSIS
Sets the value of an option related to the setup.
.PARAMETER Name
The name of the option to set.
.PARAMETER Value
The value to set the option to.
#>
function Set-SetupOption {
param(
[string] $Name,
$Value
)
$key = Get-SetupConfigKey;
$null = Set-ItemProperty ($key.PSPath) -Name $Name -Value $Value;
}
<#
.SYNOPSIS
Gets the name of the current stage of the Windows install script action.
#>
function Get-Stage {
$stage = Get-SetupOption $stageOption;
if ($null -ne $stage) {
$stage = [WindowsInstallerStage]$stage;
}
return $stage;
}
<#
.SYNOPSIS
Sets the name of the current stage of the Windows install script action.
.PARAMETER Name
The name of the stage to set.
#>
function Set-Stage {
param(
$Name
)
if (-not (($null -eq $Name) -or ($Name -is [string]))) {
$Name = ([WindowsInstallerStage]$Name).ToString();
}
$null = Set-SetupOption $stageOption $Name;
}
<#
.SYNOPSIS
Gets the name of the current setup stage.
#>
function Get-SetupStage {
$stage = Get-SetupOption $setupStageOption;
if ($null -ne $stage) {
$stage = [SetupStage]$stage;
}
return $stage;
}
<#
.SYNOPSIS
Sets the current stage.
.PARAMETER Name
The name to set the current stage to.
#>
function Set-SetupStage {
param(
$Name
)
if (-not (($null -eq $Name) -or ($Name -is [string]))) {
$Name = ([SetupStage]$Name).ToString();
}
$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
Gets the current user to set up.
#>
function Get-CurrentUser {
return (Get-SetupOption $userOption) ?? 0;
}
<#
.SYNOPSIS
Sets the index of the current user to set up.
.PARAMETER Value
The index of the user to set up.
#>
function Set-CurrentUser {
param(
[int] $Value
)
Set-SetupOption $userOption $value;
}
<#
.SYNOPSIS
Gets the name of the current stage of the user setup.
#>
function Get-UserStage {
$stage = Get-SetupOption $userStageOption;
if ($null -ne $stage) {
$stage = [UserStage]$stage;
}
return $stage;
}
<#
.SYNOPSIS
Sets the current stage of the user setup.
.PARAMETER Name
The name of the stage to set.
#>
function Set-UserStage {
param(
$Name
)
if (-not (($null -eq $Name) -or ($Name -is [string]))) {
$Name = ([UserStage]$Name).ToString();
}
$null = Set-SetupOption $userStageOption $Name;
}
<#
.SYNOPSIS
Gets the name of the microsoft account to create.
#>
function Get-MSAccountName {
return Get-SetupOption $accountOption;
}
<#
.SYNOPSIS
Sets the name of the microsoft account to create.
.PARAMETER Name
The name of the microsoft account to create.
#>
function Set-MSAccountName {
param(
[string] $Name
)
Set-SetupOption $accountOption $Name;
}
<#
.SYNOPSIS
Gets a value indicating whether the setup has finished.
#>
function Get-IsFinished {
return [bool](Get-SetupOption $finishedOption);
}
<#
.SYNOPSIS
Sets a value indicating whether the setup has finished.
#>
function Set-IsFinished {
param(
$Value
)
Set-SetupOption $finishedOption $true;
}
<#
.SYNOPSIS
Checks whether the running system is a QEMU virtual machine.
#>
function Test-Qemu {
((Get-WmiObject win32_computersystem).Manufacturer) -eq "QEMU";
}
<#
.SYNOPSIS
Checks whether the current user is the setup user.
#>
function Test-SetupUser {
($IsWindows ? $env:UserName : $env:USER) -eq (Get-SetupUser);
}
<#
.SYNOPSIS
Checks whether the active session is executed with admin rights.
#>
function Test-Admin {
net session 2> $null | Out-Null;
return $?;
}
}

Some files were not shown because too many files have changed in this diff Show more