disko integration

This commit is contained in:
Bryan Ramos 2026-03-10 07:58:10 -04:00
parent 44f439ff74
commit d4a8d706fb
6 changed files with 102 additions and 30 deletions

21
flake.lock generated
View file

@ -1,5 +1,25 @@
{ {
"nodes": { "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-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -133,6 +153,7 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"disko": "disko",
"home-manager": "home-manager", "home-manager": "home-manager",
"nixos-wsl": "nixos-wsl", "nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",

View file

@ -16,9 +16,13 @@
url = "github:nix-community/NixOS-WSL/2411.6.0"; url = "github:nix-community/NixOS-WSL/2411.6.0";
inputs.nixpkgs.follows = "nixpkgs"; 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 let
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = import nixpkgs { pkgs = import nixpkgs {
@ -38,6 +42,7 @@
desktop = nixpkgs.lib.nixosSystem { desktop = nixpkgs.lib.nixosSystem {
inherit system pkgs; inherit system pkgs;
modules = [ modules = [
disko.nixosModules.disko
./src/system/machines/desktop ./src/system/machines/desktop
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
(import ./src/system/machines/desktop/modules/home-manager) (import ./src/system/machines/desktop/modules/home-manager)

View file

@ -99,9 +99,9 @@ boot:
@echo -e "\033[34m->> Reboot to new generation ->>\033[0m" @echo -e "\033[34m->> Reboot to new generation ->>\033[0m"
@sudo nixos-rebuild boot --flake .#{{SYSTEM}} @sudo nixos-rebuild boot --flake .#{{SYSTEM}}
# Install NixOS from live USB (interactive disk selection) # Partition disk only (interactive disk selection)
[group('nixos')] [group('nixos')]
install SYSTEM: partition SYSTEM:
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
@ -109,7 +109,6 @@ install SYSTEM:
if [[ ! -f "$DISKO_CONFIG" ]]; then if [[ ! -f "$DISKO_CONFIG" ]]; then
echo "Error: No disko config for '{{SYSTEM}}'" echo "Error: No disko config for '{{SYSTEM}}'"
echo "Available: desktop, workstation, vm"
exit 1 exit 1
fi fi
@ -119,11 +118,9 @@ install SYSTEM:
for id in /dev/disk/by-id/*; do for id in /dev/disk/by-id/*; do
name=$(basename "$id") name=$(basename "$id")
# Skip partitions and non-disk entries
[[ "$name" =~ part ]] && continue [[ "$name" =~ part ]] && continue
[[ ! "$name" =~ ^(ata|nvme|scsi)- ]] && continue [[ ! "$name" =~ ^(ata|nvme|scsi)- ]] && continue
# Resolve to device and get info
dev=$(readlink -f "$id") dev=$(readlink -f "$id")
dev_name=$(basename "$dev") dev_name=$(basename "$dev")
size=$(lsblk -dn -o SIZE "$dev" 2>/dev/null) || continue size=$(lsblk -dn -o SIZE "$dev" 2>/dev/null) || continue
@ -157,16 +154,82 @@ install SYSTEM:
*) echo "Aborted."; exit 1 ;; *) echo "Aborted."; exit 1 ;;
esac esac
echo "Writing disk '$DISK' to disko config..."
sed -i "s|device = \"/dev/disk/by-id/[^\"]*\";|device = \"$DISK\";|" "$DISKO_CONFIG"
echo "Partitioning $DISK..." echo "Partitioning $DISK..."
sudo nix \ sudo nix \
--extra-experimental-features "nix-command flakes" \ --extra-experimental-features "nix-command flakes" \
run github:nix-community/disko -- \ run github:nix-community/disko -- \
--mode disko \ --mode destroy,format,mount \
--arg disk "\"$DISK\"" \
"$DISKO_CONFIG" "$DISKO_CONFIG"
echo "Installing NixOS..." echo -e "\033[32mPartitioning complete. Disk mounted at /mnt.\033[0m"
sudo nixos-install --flake .#{{SYSTEM}} --no-root-passwd
# 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" echo -e "\033[32mDone! Reboot to start NixOS.\033[0m"

View file

@ -5,5 +5,6 @@
../../../user/config ../../../user/config
./hardware.nix ./hardware.nix
./system.nix ./system.nix
./modules/disko
]; ];
} }

View file

@ -52,23 +52,6 @@ with lib;
cudaPackages.cudnn 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 = { hardware = {
cpu = { cpu = {
intel = { intel = {

View file

@ -1,10 +1,9 @@
{ disk }:
{ {
disko.devices = { disko.devices = {
disk = { disk = {
one = { main = {
type = "disk"; type = "disk";
device = disk; device = "/dev/disk/by-id/ata-CT2000MX500SSD1_2137E5D2D47D";
content = { content = {
type = "gpt"; type = "gpt";
partitions = { partitions = {