From 112fc3ddb34e04fc1347f1301e4a6eed5015f472 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Thu, 31 Jul 2025 16:04:08 +0200 Subject: [PATCH] started to create an installer image (gum is AWESOME) --- flake.nix | 5 ++ modules/nixos/nix/default.nix | 2 + systems/x86_64-linux/varda/default.nix | 84 +++++++++++++++++++++++--- 3 files changed, 82 insertions(+), 9 deletions(-) diff --git a/flake.nix b/flake.nix index 08e767a..3d518fb 100644 --- a/flake.nix +++ b/flake.nix @@ -99,6 +99,11 @@ flux.overlays.default ]; + system.hosts.varda.modules = with inputs; [ + "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma6.nix" + "${nixpkgs}/nixos/modules/installer/cd-dvd/channel.nix" + ]; + homes.modules = with inputs; [ stylix.homeModules.stylix plasma-manager.homeManagerModules.plasma-manager diff --git a/modules/nixos/nix/default.nix b/modules/nixos/nix/default.nix index 05c001a..7d1f069 100644 --- a/modules/nixos/nix/default.nix +++ b/modules/nixos/nix/default.nix @@ -15,6 +15,8 @@ in nix = { package = pkgs.nixVersions.latest; + extraOptions = "experimental-features = nix-command flakes"; + settings = { experimental-features = [ "nix-command" "flakes" ]; allowed-users = [ "@wheel" ]; diff --git a/systems/x86_64-linux/varda/default.nix b/systems/x86_64-linux/varda/default.nix index 2aa8c22..557d8f1 100644 --- a/systems/x86_64-linux/varda/default.nix +++ b/systems/x86_64-linux/varda/default.nix @@ -1,10 +1,8 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: +let + inherit (lib) mkForce; +in { - imports = [ - "${pkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma6.nix" - "${pkgs}/nixos/modules/installer/cd-dvd/channel.nix" - ]; - sneeuwvlok = { services = { networking.ssh.enable = true; @@ -17,14 +15,82 @@ }; boot = { - kernelPackages = pkgs.linuxPackages_latest; - supportedFilesystems = lib.mkForce ["btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs"]; + supportedFilesystems = mkForce ["btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs"]; }; services = { qemuGuest.enable = true; - openssh.settings.PermitRootLogin = "yes"; + openssh.settings.PermitRootLogin = mkForce "yes"; }; + environment.systemPackages = with pkgs; [ + # sbctl + git + gum + ( + writeShellScriptBin "rescue" '' + #!/usr/bin/env bash + set -euo pipefail + + gum "device name" + + sudo mkdir -p /mnt/{dev,proc,sys,boot} + sudo mount -o bind /dev /mnt/dev + sudo mount -o bind /proc /mnt/proc + sudo mount -o bind /sys /mnt/sys + sudo chroot /mnt /nix/var/nix/profiles/system/activate + sudo chroot /mnt /run/current-system/sw/bin/bash + + sudo mount /dev/vda1 /mnt/boot + sudo cryptsetup open /dev/vda3 cryptroot + sudo mount /dev/mapper/cryptroot /mnt/ + + sudo nixos-enter + '' + ) + ( + writeShellScriptBin "nix_installer" + '' + #!/usr/bin/env bash + set -euo pipefail + + if [ "$(id -u)" -eq 0 ]; then + echo "ERROR! $(basename "$0") should be run as a regular user" + exit 1 + fi + + if [ ! -d "$HOME/github/sneeuwvlok/.git" ]; then + git clone https://github.com/chris-kruining/sneeuwvlok.git "$HOME/github/sneeuwvlok" + fi + + TARGET_HOST=$(ls -1 ~/github/sneeuwvlok/systems/*/default.nix | cut -d'/' -f6 | grep -v iso | gum choose) + + if [ ! -e "$HOME/github/sneeuwvlok/hosts/$TARGET_HOST/disks.nix" ]; then + echo "ERROR! $(basename "$0") could not find the required $HOME/github/sneeuwvlok/hosts/$TARGET_HOST/disks.nix" + exit 1 + fi + + gum confirm --default=false \ + "🔥 🔥 🔥 WARNING!!!! This will ERASE ALL DATA on the disk $TARGET_HOST. Are you sure you want to continue?" + + echo "Partitioning Disks" + sudo nix run github:nix-community/disko \ + --extra-experimental-features "nix-command flakes" \ + --no-write-lock-file \ + -- \ + --mode zap_create_mount \ + "$HOME/dotfiles/hosts/$TARGET_HOST/disks.nix" + + #echo "Creating blank volume" + #sudo btrfs subvolume snapshot -r /mnt/ /mnt/root-blank + + #echo "Set up attic binary cache" + #attic use prod || true + + sudo nixos-install --flake "$HOME/dotfiles#$TARGET_HOST" + '' + ) + ]; + system.stateVersion = "23.11"; }