mirror of
https://github.com/itme-brain/nixos.git
synced 2026-03-23 16:29:42 -04:00
disko integration
This commit is contained in:
parent
44f439ff74
commit
d4a8d706fb
6 changed files with 102 additions and 30 deletions
21
flake.lock
generated
21
flake.lock
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
81
justfile
81
justfile
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,6 @@
|
||||||
../../../user/config
|
../../../user/config
|
||||||
./hardware.nix
|
./hardware.nix
|
||||||
./system.nix
|
./system.nix
|
||||||
|
./modules/disko
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue