use disko

This commit is contained in:
Greg Burd 2023-09-28 11:28:32 -04:00
parent 0f73f50309
commit 82f5854f20
11 changed files with 237 additions and 72 deletions

31
NOTES
View file

@ -21,34 +21,40 @@
* swap (see: https://discourse.nixos.org/t/how-do-i-set-up-a-swap-file/8323/7)
* udevadm trigger
nh os switch --ask
INSTALL:
export device=/dev/nvme0n1
export hostname=floki
wipefs/shread/scrub ${device}
sgdisk --zap-all ${device}
printf "label: gpt\n,550M,U\n,,L\n" | sfdisk ${device}
mkfs.fat -L ESP -F 32 ${device}
cryptsetup --verify-passphrase -v luksFormat --label "${hostname}_crypt" "${device}p2"
cryptsetup open "${device}p2" "${hostname}_crypt"
mkfs.btrfs -L ${hostname} /dev/mapper/"${hostname}_crypt"
mount -t btrfs -o subvol=/ /dev/disk/by-label/${hostname} /mnt
mount -t btrfs -o subvol=root /dev/disk/by-label/${hostname} /mnt
btrfs subvolume create /mnt/root
btrfs subvolume create /mnt/nix
btrfs subvolume create /mnt/persist
btrfs subvolume create /mnt/swap
btrfs subvolume create /mnt/logs
mount -o compress=zstd,subvol=root /dev/mapper/"${hostname}_crypt" /mnt
mount -t btrfs -o compress=zstd,subvol=root /dev/disk/by-label/"${hostname}" /mnt
mkdir /mnt/{nix,persist,swap,var/logs}
mount -o compress=zstd,noatime,subvol=nix /dev/mapper/"${hostname}_crypt" /mnt/nix
mount -o compress=zstd,subvol=persist /dev/mapper/"${hostname}_crypt" /mnt/persist
mount -o compress=zstd,noatime,subvol=logs /dev/mapper/"${hostname}_crypt" /mnt/var/logs
mount -o noatime,subvol=swap /dev/mapper/"${hostname}_crypt" /mnt/swap
mount -t btrfs -o compress=zstd,noatime,subvol=nix /dev/disk/by-label/"${hostname}" /mnt/nix
mount -t btrfs -o compress=zstd,subvol=persist /dev/disk/by-label/"${hostname}" /mnt/persist
mount -t btrfs -o compress=zstd,noatime,subvol=logs /dev/disk/by-label/"${hostname}" /mnt/var/logs
mount -t btrfs -o noatime,subvol=swap /dev/disk/by-label/"${hostname}" /mnt/swap
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
mount -t proc /proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
or
for i in proc sys dev; do mount -o bind $i /mnt/$i; done
nixos-generate-config --root /mnt
nano /mnt/etc/nixos/configuration.nix # manually add mount options or cp from USB
@ -82,7 +88,7 @@ export GPG_TTY=$(tty)
gpg-connect-agent reloadagent /bye
echo test | gpg --clearsign
gpg --list-keys
EDITOR=vi sops --config .sops.yaml hosts/common/secrets.yaml
EDITOR=vi sops --config .sops.yaml nixos/common/secrets.yaml
sudo nixos-install --flake .#hostname
reboot
home-manager switch --flake .#username@hostname
@ -90,9 +96,10 @@ home-manager switch --flake .#username@hostname
sudo nixos-rebuild switch --flake .#my-hostname
clear; sudo nixos-rebuild dry-activate --flake .#${hostname}
sudo nix run github:nix-community/disko -- --mode disko /tmp/disko-config.nix --arg disks '[ "/dev/nvme0n1" ]'
-------
services.pcscd.enable = true;
services.pcscd.enable = true;
https://mt-caret.github.io/blog/posts/2020-06-29-optin-state.html
https://hoverbear.org/blog/declarative-gnome-configuration-in-nixos/

View file

@ -5,45 +5,19 @@
#inputs.nixos-hardware.nixosModules.common-gpu-nvidia
inputs.nixos-hardware.nixosModules.common-pc
inputs.nixos-hardware.nixosModules.common-pc-ssd
#(import ./disks.nix { })
(import ./disks.nix { })
../_mixins/hardware/systemd-boot.nix
../_mixins/filesystems/encrypted-root.nix
../_mixins/filesystems/btrfs.nix
../_mixins/services/bluetooth.nix
../_mixins/services/pipewire.nix
# ../_mixins/services/zerotier.nix
../_mixins/virt
# ../_mixins/global
# ../_mixins/users/gburd
];
fileSystems."/swap" =
{
device = "/dev/disk/by-uuid/bf75af76-49b0-41fa-a4e5-9a52a6a0a667";
fsType = "btrfs";
options = [ "subvol=swap" ];
};
fileSystems."/boot" =
{
device = "/dev/disk/by-uuid/3D04-3716";
fsType = "vfat";
};
# fileSystems = {
# "/boot" = {
# device = "/dev/disk/by-label/ESP";
# fsType = "vfat";
# };
# };
swapDevices = [{
device = "/swap/swapfile";
size = 8196;
}];
boot = {
initrd = {
availableKernelModules = [
@ -57,11 +31,9 @@
"usb_storage"
"xhci_pci"
];
luks.devices."enc".device = "/dev/disk/by-uuid/470152b6-16cc-4dcf-b1e9-c684c1589e33";
};
kernelModules = [ "kvm-intel" ]; # TODO: "nvidia"
kernelModules = [ "kvm-intel" ]; # TODO: "nvidia"
kernelPackages = pkgs.linuxPackages_latest;
};

View file

@ -1,44 +1,67 @@
{ disks ? [ "/dev/nvme0n1" ], ... }:
let
defaultXfsOpts = [ "defaults" "relatime" "nodiratime" ];
hostname = config.networking.hostName;
in
{
disko.devices = {
disk = {
nvme0 = {
nvme = {
type = "disk";
device = builtins.elemAt disks 0;
device = "/dev/nvme0n1";
content = {
type = "table";
format = "gpt";
partitions = [{
name = "ESP";
start = "0%";
end = "550MiB";
bootable = true;
flags = [ "esp" ];
fs-type = "fat32";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
}
{
name = "root";
start = "550MiB";
end = "100%";
type = "gpt";
partitions = {
ESP = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
# Overwirte the existing filesystem
extraArgs = [ "-f" ];
format = "xfs";
mountpoint = "/";
mountOptions = defaultXfsOpts;
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "defaults" ];
};
}];
};
luks = {
size = "100%";
content = {
type = "luks";
name = "${hostname}_crypt";
extraOpenArgs = [ "--allow-discards" ];
# This file contains the key for interactive login which must be
# the secret without a trailing newline.
passwordFile = config.sops.secrets.luks-password.path;
content = {
type = "btrfs";
extraArgs = [ "-f" ];
subvolumes = {
"/root" = {
mountpoint = "/";
mountOptions = [ "compress=zstd" ];
};
"/home" = {
mountpoint = "/home";
mountOptions = [ "compress=zstd" ];
};
"/nix" = {
mountpoint = "/nix";
mountOptions = [ "compress=zstd" "noatime" ];
};
"/persist" = {
mountpoint = "/persist";
mountOptions = [ "compress=zstd" ];
};
"/var/logs" = {
mountpoint = "/var/logs";
mountOptions = [ "compress=zstd" "noatime" ];
};
};
};
};
};
};
};
};
};
};
}

View file

@ -1,3 +1,4 @@
luks-password: ENC[AES256_GCM,data:zzIgzaCosmaoZBsR,iv:tBe0F2M4pAOwOBHoSX6B3rDFR3tDOdFBt0xJMgNfq1s=,tag:z7LLcYnoMNkZx6YeX7ABJQ==,type:str]
ssh-private-keys:
rsa: ENC[AES256_GCM,data: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,iv:bf2OZYHiC9Voo+EYgVWcjkOT4KgQ9wKFbnIbcCcbXxo=,tag:z5K4RKcxggCp6ZjM6mkuwQ==,type:str]
ed25519: ENC[AES256_GCM,data:9GpcXcHSZJR95nTVJPA/vLQGX2VC6Mc+ioXWXjoEi7DsFiGz88x/tCjusGBR5e8WoX5uxZn3XhDeIL0d6JwSVfN5g9ncvImRk5A9/pXPgBWLKwIcdHmfboy4D+jwooIF5kqLdZbPMB6DU547W6+vZJNy/E60ngnWKsaK6sNKSC5kA8fNzBCdwRQH2JjCeeU2FGcsvyYAbk4n8exvRvksVhGY07lBaxxRBNB4m2qN19NvIBMjItpJ4g2/YgErQE3ZXXKv54JISkHZtOW/m22td79M0KTRgdhQuVLcYrV/HyhmZJ8slUfvkCMn+FvU20SpxwpFKPqS3Otcu+A1M2K/054eRN7nDmd6aSxJNpKOIGKvHsonLxkeSCLjzYwR8nbxerQrriENdrUjbiBLnWjJNgkA22sLb8nvVF31Cr9eK5ZVen+HFLzyJnNhRjGRf+sOaRsZCHGvbIKK/JXvP5rNqNIKofRT9+YyvpD+z7SRsZt/5qLoB3a3L6EIppOkfKY000yQGs1IKhT5oYW8IIMj,iv:KwRV4Igc+XWRXqLcjXMpmnHc8Qe8JHrXetQ1XUTpAsM=,tag:DwlhfesNwq8gTh0fiObiQA==,type:str]
@ -16,8 +17,8 @@ sops:
QnRtSGhPY1NHSVJaTUZNa1BMdDFxbTQKR8QvpUYTMLMxR5fNJvmM4HrtV0tEPiED
XewKB/EfH3jaLupB9P+CSUJ69Sfn9RBpdgrwOjt5QI3PkU+JFCS2Wg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-09-22T14:39:58Z"
mac: ENC[AES256_GCM,data:qDh6cJBkf5sHy1RTq0jUYEFNRuwqu294EGb4+typvI8RbVxPHuAeHG6kMg43KFmpSdocDwMRa2JAY8/SV4JfiSlX3T5c6BTMg98YFtanCa062ML2I7Kjh0i5yHxVsAGls+Ch3Vr9h/Kqv+jM2KALq1Nhf6hls4jgSrX7kh0H0dk=,iv:gI6MvJiAj4qQdQf2aDgnKQhbNimeX+mcI05VClCiuT4=,tag:pRBbMOgDOT4slUrXOjhNrg==,type:str]
lastmodified: "2023-09-28T15:27:56Z"
mac: ENC[AES256_GCM,data:9KVa8M3vJtTNKvozRBnjt18dXwOYOp3X7uXbL+sbI+PDnw1rc6IAOhqOEVgLEwKbt2MULUfyZkgvlUpQ1QoQcuqFTrhBkflP7hUqUHTwFS2PE4BtilJenzTqcFUvuwZsswfm9zB3a0y2zufaXwNPHukOIhqnSDS2PItEFAjpX7c=,iv:zTxhJbYTiKI70QXvyWZ6VZyzbYrZ3rzvdW1bBGpcJkQ=,tag:d7bNkWurNnBT9DyTv6TrXQ==,type:str]
pgp:
- created_at: "2023-09-22T14:39:09Z"
enc: |-

View file

@ -0,0 +1 @@
use flake .

View file

@ -0,0 +1,32 @@
{
description = "Nix shell for code-format tools";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/release-23.05";
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{ self
, nixpkgs
, flake-utils
}:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in
{
devShells.default = pkgs.mkShell {
packages = with pkgs; [
black # Code format Python
chroma # Code syntax highlighter
mdp # Terminal Markdown presenter
nodePackages.prettier # Code format
rustfmt # Code format Rust
shellcheck # Code lint Shell
shfmt # Code format Shell
];
};
});
}

1
shells/gpu/.envrc Normal file
View file

@ -0,0 +1 @@
use flake .

29
shells/gpu/flake.nix Normal file
View file

@ -0,0 +1,29 @@
{
description = "Nix shell for GPU tools";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/release-23.05";
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{ self
, nixpkgs
, flake-utils
}:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in
{
devShells.default = pkgs.mkShell {
packages = with pkgs; [
clinfo # Terminal OpenCL info
libva-utils # Terminal VAAPI info
python310Packages.gpustat # Terminal GPU info
vdpauinfo # Terminal VDPAU info
];
};
});
}

2
shells/network/.envrc Normal file
View file

@ -0,0 +1,2 @@
export NIXPKGS_ALLOW_UNFREE=1
use flake --impure .

61
shells/network/flake.lock Normal file
View file

@ -0,0 +1,61 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1687709756,
"narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1688868408,
"narHash": "sha256-RR9N5XTAxSBhK8MCvLq9uxfdkd7etC//seVXldy0k48=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "510d721ce097150ae3b80f84b04b13b039186571",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

36
shells/network/flake.nix Normal file
View file

@ -0,0 +1,36 @@
{
description = "Nix shell for network tools";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/release-23.05";
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{ self
, nixpkgs
, flake-utils
}:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in
{
devShells.default = pkgs.mkShell {
packages = with pkgs; [
bmon # Modern Unix `iftop`
curlie # Terminal HTTP client
dogdns # Modern Unix `dig`
fast-cli # Terminal fast.com speedtest
httpie # Terminal HTTP client
iperf3 # Terminal network benchmarking
mtr # Modern Unix `traceroute`
netdiscover # Modern Unix `arp`
nethogs # Modern Unix `iftop`
ookla-speedtest # Terminal speedtest
wavemon # Terminal WiFi monitor
];
};
});
}