From d4a8d706fb6c2ad19a51439fcf19d1e070ad04c3 Mon Sep 17 00:00:00 2001 From: Bryan Ramos Date: Tue, 10 Mar 2026 07:58:10 -0400 Subject: [PATCH] disko integration --- flake.lock | 21 +++++ flake.nix | 7 +- justfile | 81 ++++++++++++++++--- src/system/machines/desktop/default.nix | 1 + src/system/machines/desktop/hardware.nix | 17 ---- .../desktop/modules/disko/default.nix | 5 +- 6 files changed, 102 insertions(+), 30 deletions(-) diff --git a/flake.lock b/flake.lock index e40a872..7875441 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,25 @@ { "nodes": { + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773025010, + "narHash": "sha256-khlHllTsovXgT2GZ0WxT4+RvuMjNeR5OW0UYeEHPYQo=", + "owner": "nix-community", + "repo": "disko", + "rev": "7b9f7f88ab3b339f8142dc246445abb3c370d3d3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -133,6 +153,7 @@ }, "root": { "inputs": { + "disko": "disko", "home-manager": "home-manager", "nixos-wsl": "nixos-wsl", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index c2d515d..6a26e3e 100644 --- a/flake.nix +++ b/flake.nix @@ -16,9 +16,13 @@ url = "github:nix-community/NixOS-WSL/2411.6.0"; inputs.nixpkgs.follows = "nixpkgs"; }; + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { self, nixpkgs, nur, home-manager, nixos-wsl }: + outputs = { self, nixpkgs, nur, home-manager, nixos-wsl, disko }: let system = "x86_64-linux"; pkgs = import nixpkgs { @@ -38,6 +42,7 @@ desktop = nixpkgs.lib.nixosSystem { inherit system pkgs; modules = [ + disko.nixosModules.disko ./src/system/machines/desktop home-manager.nixosModules.home-manager (import ./src/system/machines/desktop/modules/home-manager) diff --git a/justfile b/justfile index 58e525d..dedac40 100644 --- a/justfile +++ b/justfile @@ -99,9 +99,9 @@ boot: @echo -e "\033[34m->> Reboot to new generation ->>\033[0m" @sudo nixos-rebuild boot --flake .#{{SYSTEM}} -# Install NixOS from live USB (interactive disk selection) +# Partition disk only (interactive disk selection) [group('nixos')] -install SYSTEM: +partition SYSTEM: #!/usr/bin/env bash set -euo pipefail @@ -109,7 +109,6 @@ install SYSTEM: if [[ ! -f "$DISKO_CONFIG" ]]; then echo "Error: No disko config for '{{SYSTEM}}'" - echo "Available: desktop, workstation, vm" exit 1 fi @@ -119,11 +118,9 @@ install SYSTEM: for id in /dev/disk/by-id/*; do name=$(basename "$id") - # Skip partitions and non-disk entries [[ "$name" =~ part ]] && continue [[ ! "$name" =~ ^(ata|nvme|scsi)- ]] && continue - # Resolve to device and get info dev=$(readlink -f "$id") dev_name=$(basename "$dev") size=$(lsblk -dn -o SIZE "$dev" 2>/dev/null) || continue @@ -157,16 +154,82 @@ install SYSTEM: *) echo "Aborted."; exit 1 ;; esac + echo "Writing disk '$DISK' to disko config..." + sed -i "s|device = \"/dev/disk/by-id/[^\"]*\";|device = \"$DISK\";|" "$DISKO_CONFIG" + echo "Partitioning $DISK..." sudo nix \ --extra-experimental-features "nix-command flakes" \ run github:nix-community/disko -- \ - --mode disko \ - --arg disk "\"$DISK\"" \ + --mode destroy,format,mount \ "$DISKO_CONFIG" - echo "Installing NixOS..." - sudo nixos-install --flake .#{{SYSTEM}} --no-root-passwd + echo -e "\033[32mPartitioning complete. Disk mounted at /mnt.\033[0m" + +# Install NixOS (partition + install in one shot) +[group('nixos')] +install SYSTEM: + #!/usr/bin/env bash + set -euo pipefail + + DISKO_CONFIG="./src/system/machines/{{SYSTEM}}/modules/disko/default.nix" + + if [[ ! -f "$DISKO_CONFIG" ]]; then + echo "Error: No disko config for '{{SYSTEM}}'" + exit 1 + fi + + # Build array of disk options with readable info + declare -a DISK_IDS + declare -a DISK_OPTIONS + + for id in /dev/disk/by-id/*; do + name=$(basename "$id") + [[ "$name" =~ part ]] && continue + [[ ! "$name" =~ ^(ata|nvme|scsi)- ]] && continue + + dev=$(readlink -f "$id") + dev_name=$(basename "$dev") + size=$(lsblk -dn -o SIZE "$dev" 2>/dev/null) || continue + model=$(lsblk -dn -o MODEL "$dev" 2>/dev/null | xargs) || model="" + + DISK_IDS+=("$id") + DISK_OPTIONS+=("$dev_name $size $model") + done + + if [[ ${#DISK_IDS[@]} -eq 0 ]]; then + echo "No disks found!" + exit 1 + fi + + echo "Select a disk:" + select opt in "${DISK_OPTIONS[@]}"; do + if [[ -n "$opt" ]]; then + idx=$((REPLY - 1)) + DISK="${DISK_IDS[$idx]}" + break + else + echo "Invalid selection" + fi + done + + echo "" + echo -e "\033[31m!! WARNING: This will DESTROY all data on $DISK !!\033[0m" + read -p "Continue? [y/N]: " confirm + case "${confirm,,}" in + y|yes) ;; + *) echo "Aborted."; exit 1 ;; + esac + + echo "Writing disk '$DISK' to disko config..." + sed -i "s|device = \"/dev/disk/by-id/[^\"]*\";|device = \"$DISK\";|" "$DISKO_CONFIG" + + echo "Partitioning and installing NixOS..." + sudo nix \ + --extra-experimental-features "nix-command flakes" \ + run github:nix-community/disko/latest#disko-install -- \ + --flake .#{{SYSTEM}} \ + --disk main "$DISK" echo -e "\033[32mDone! Reboot to start NixOS.\033[0m" diff --git a/src/system/machines/desktop/default.nix b/src/system/machines/desktop/default.nix index 6e64b71..8a29c89 100644 --- a/src/system/machines/desktop/default.nix +++ b/src/system/machines/desktop/default.nix @@ -5,5 +5,6 @@ ../../../user/config ./hardware.nix ./system.nix + ./modules/disko ]; } diff --git a/src/system/machines/desktop/hardware.nix b/src/system/machines/desktop/hardware.nix index a2d13f1..3d41249 100644 --- a/src/system/machines/desktop/hardware.nix +++ b/src/system/machines/desktop/hardware.nix @@ -52,23 +52,6 @@ with lib; cudaPackages.cudnn ]; - fileSystems = { - "/" = { - device = "/dev/disk/by-uuid/495f5e7b-d9e4-4663-88c5-7021e7292535"; - fsType = "ext4"; - }; - - "/home" = { - device = "/dev/disk/by-uuid/cd0e5c29-716d-47f2-92f4-46ee9fca5af3"; - fsType = "ext4"; - }; - - "/boot" = { - device = "/dev/disk/by-uuid/C061-EE77"; - fsType = "vfat"; - }; - }; - hardware = { cpu = { intel = { diff --git a/src/system/machines/desktop/modules/disko/default.nix b/src/system/machines/desktop/modules/disko/default.nix index d9943db..fd39485 100644 --- a/src/system/machines/desktop/modules/disko/default.nix +++ b/src/system/machines/desktop/modules/disko/default.nix @@ -1,10 +1,9 @@ -{ disk }: { disko.devices = { disk = { - one = { + main = { type = "disk"; - device = disk; + device = "/dev/disk/by-id/ata-CT2000MX500SSD1_2137E5D2D47D"; content = { type = "gpt"; partitions = {