From 3f746987b34d12fdd34f507b132552effa0af136 Mon Sep 17 00:00:00 2001 From: Christoph Hollizeck Date: Sat, 31 Jan 2026 14:54:01 +0100 Subject: [PATCH] yggdrasil: zfs prep --- flake.lock | 131 +++++++++++++++++++------- flake.nix | 1 + modules/hosts/loptland/hardware.nix | 7 +- modules/hosts/yggdrasil/default.nix | 2 + modules/hosts/yggdrasil/disko.nix | 132 +++++++++++++++++++++++++++ modules/hosts/yggdrasil/hardware.nix | 51 ++--------- 6 files changed, 245 insertions(+), 79 deletions(-) create mode 100644 modules/hosts/yggdrasil/disko.nix diff --git a/flake.lock b/flake.lock index 43eb0e2..643c44a 100644 --- a/flake.lock +++ b/flake.lock @@ -149,11 +149,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1769790358, - "narHash": "sha256-zO95CJkHD+SihC0vCS6B17+mVAgC5gT8CAezQ2ik8Kk=", + "lastModified": 1769865383, + "narHash": "sha256-nWaRnlYC/mjGLegMsnf5g87CqqMjVtsvM/vz7eV5MsA=", "owner": "cachix", "repo": "devenv", - "rev": "4bd7bbda7c267865d2d0cc31764e7c104e3a2218", + "rev": "9b42a381972d3d734badb8001be0044064ab2795", "type": "github" }, "original": { @@ -367,7 +367,25 @@ }, "flake-utils": { "inputs": { - "systems": "systems_4" + "systems": "systems_3" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_5" }, "locked": { "lastModified": 1705309234, @@ -769,11 +787,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1769802121, - "narHash": "sha256-P2KVccrXznyha83gPQeVJ3k+3+/hYXIPQ91DwuRmFF4=", + "lastModified": 1769866762, + "narHash": "sha256-OFTMhMUnJCg3woctP+qrWNM0ALeiTnGlbsC7eHStdDY=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "ec120d57328e5ae4bfc93a7e809ace47d98f2dc3", + "rev": "db6114c6c53edc4a60695a12d7f857308b6cd6cd", "type": "github" }, "original": { @@ -1147,6 +1165,25 @@ "type": "github" } }, + "hytale-launcher": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1769747470, + "narHash": "sha256-spK/SWvBLGwP/NNvHLQaTAosXrwnMuz9A4vUa3miaGo=", + "owner": "JPyke3", + "repo": "hytale-launcher-nix", + "rev": "b549b4db497ef8a3c345b0d92d913d97fb2f48b3", + "type": "github" + }, + "original": { + "owner": "JPyke3", + "repo": "hytale-launcher-nix", + "type": "github" + } + }, "import-tree": { "locked": { "lastModified": 1763762820, @@ -1497,11 +1534,11 @@ }, "nixpkgs-latest-factorio": { "locked": { - "lastModified": 1769859844, - "narHash": "sha256-MN+92iMaQnsNid5t/NImWK7Hu4/LuUOMVuTZOpPHDY8=", + "lastModified": 1769866281, + "narHash": "sha256-bHKvpOAggRZvTXoTR/AWq5sHlCbhG5ml7K5KENcRveA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4525a2af191cb89d829e0ca6dba4282a040e75a4", + "rev": "54b154f971b71d260378b284789df6b272b49634", "type": "github" }, "original": { @@ -1513,11 +1550,11 @@ }, "nixpkgs-latest-minecraft": { "locked": { - "lastModified": 1769859844, - "narHash": "sha256-MN+92iMaQnsNid5t/NImWK7Hu4/LuUOMVuTZOpPHDY8=", + "lastModified": 1769866281, + "narHash": "sha256-bHKvpOAggRZvTXoTR/AWq5sHlCbhG5ml7K5KENcRveA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4525a2af191cb89d829e0ca6dba4282a040e75a4", + "rev": "54b154f971b71d260378b284789df6b272b49634", "type": "github" }, "original": { @@ -1559,11 +1596,11 @@ }, "nixpkgs-master": { "locked": { - "lastModified": 1769859844, - "narHash": "sha256-MN+92iMaQnsNid5t/NImWK7Hu4/LuUOMVuTZOpPHDY8=", + "lastModified": 1769866281, + "narHash": "sha256-bHKvpOAggRZvTXoTR/AWq5sHlCbhG5ml7K5KENcRveA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4525a2af191cb89d829e0ca6dba4282a040e75a4", + "rev": "54b154f971b71d260378b284789df6b272b49634", "type": "github" }, "original": { @@ -1654,6 +1691,22 @@ } }, "nixpkgs_4": { + "locked": { + "lastModified": 1769461804, + "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { "locked": { "lastModified": 1769461804, "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", @@ -1669,7 +1722,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1764374374, "narHash": "sha256-naS7hg/D1yLKSZoENx9gvsPLFiNEOTcqamJSu0OEvCA=", @@ -1685,7 +1738,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1769268028, "narHash": "sha256-mAdJpV0e5IGZjnE4f/8uf0E4hQR7ptRP00gnZKUOdMo=", @@ -1701,7 +1754,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1767364772, "narHash": "sha256-fFUnEYMla8b7UKjijLnMe+oVFOz6HjijGGNS1l7dYaQ=", @@ -1717,7 +1770,7 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { "lastModified": 1768127708, "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", @@ -1794,6 +1847,7 @@ "hyprland": "hyprland", "hyprland-plugins": "hyprland-plugins", "hyprlock": "hyprlock", + "hytale-launcher": "hytale-launcher", "import-tree": "import-tree", "nh-flake": "nh-flake", "niri": "niri", @@ -1803,7 +1857,7 @@ "nixos-images": "nixos-images", "nixos-raspberrypi": "nixos-raspberrypi", "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "nixpkgs-latest-factorio": "nixpkgs-latest-factorio", "nixpkgs-latest-minecraft": "nixpkgs-latest-minecraft", "nixpkgs-master": "nixpkgs-master", @@ -1811,7 +1865,7 @@ "nixpkgs-unstable": "nixpkgs-unstable", "simple-nixos-mailserver": "simple-nixos-mailserver", "sops-nix": "sops-nix", - "systems": "systems_3", + "systems": "systems_4", "treefmt-nix": "treefmt-nix_2", "zen-browser": "zen-browser", "zig-overlay": "zig-overlay", @@ -1844,7 +1898,7 @@ "blobs": "blobs", "flake-compat": "flake-compat_6", "git-hooks": "git-hooks_3", - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1766321686, @@ -1862,7 +1916,7 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_7" }, "locked": { "lastModified": 1769469829, @@ -1909,6 +1963,21 @@ } }, "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { "locked": { "lastModified": 1689347949, "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", @@ -1923,7 +1992,7 @@ "type": "github" } }, - "systems_4": { + "systems_5": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -1962,7 +2031,7 @@ }, "treefmt-nix_2": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1769691507, @@ -2055,7 +2124,7 @@ "zen-browser": { "inputs": { "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_8" + "nixpkgs": "nixpkgs_9" }, "locked": { "lastModified": 1769748063, @@ -2074,17 +2143,17 @@ "zig-overlay": { "inputs": { "flake-compat": "flake-compat_7", - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1769689205, - "narHash": "sha256-lVx+eckPioZtBg3FIhmHstqQUh+wTKFIJK8E5IdjbQk=", + "lastModified": 1769861710, + "narHash": "sha256-7WBmKtSvs+laiTJlBp7fVJGppIFmGvsEYHOv1myFisI=", "owner": "mitchellh", "repo": "zig-overlay", - "rev": "8c20e76ce9751556dae0d1a9862ff18cda0daf1e", + "rev": "d80fa53a23c4cf621cd72d9a6fb71392968ea04c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7a6ad05..26c80e8 100644 --- a/flake.nix +++ b/flake.nix @@ -115,6 +115,7 @@ }; zen-browser.url = "github:0xc000022070/zen-browser-flake"; + hytale-launcher.url = "github:JPyke3/hytale-launcher-nix"; simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; diff --git a/modules/hosts/loptland/hardware.nix b/modules/hosts/loptland/hardware.nix index fa5e7d1..9e38c8f 100644 --- a/modules/hosts/loptland/hardware.nix +++ b/modules/hosts/loptland/hardware.nix @@ -1,12 +1,7 @@ -{ - config, - ... -}: -let -in { flake.modules.nixos."hosts/loptland" = { + config, inputs, lib, pkgs, diff --git a/modules/hosts/yggdrasil/default.nix b/modules/hosts/yggdrasil/default.nix index 0f2d9b3..f304530 100644 --- a/modules/hosts/yggdrasil/default.nix +++ b/modules/hosts/yggdrasil/default.nix @@ -29,6 +29,8 @@ topLevel: { postman vlc ffmpeg + + inputs.hytale-launcher.packages.x86_64-linux.default ]; services.teamviewer.enable = true; diff --git a/modules/hosts/yggdrasil/disko.nix b/modules/hosts/yggdrasil/disko.nix new file mode 100644 index 0000000..54db723 --- /dev/null +++ b/modules/hosts/yggdrasil/disko.nix @@ -0,0 +1,132 @@ +{ + flake.modules.nixos."hosts/yggdrasil" = + { + inputs, + ... + }: + { + imports = [ inputs.disko.nixosModules.disko ]; + + boot.supportedFilesystems = [ "zfs" ]; + networking.hostId = "007f0200"; + + services.zfs = { + autoScrub.enable = true; + autoSnapshot.enable = true; + trim.enable = true; + }; + + disko.devices = { + disk = { + x = { + type = "disk"; + device = "/dev/nvme0n1"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "2G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + zfs = { + size = "100%"; + content = { + type = "zfs"; + pool = "zroot"; + }; + }; + }; + }; + }; + y = { + type = "disk"; + device = "/dev/nvme1n1"; + content = { + type = "gpt"; + partitions = { + zfs = { + size = "100%"; + content = { + type = "zfs"; + pool = "zroot"; + }; + }; + }; + }; + }; + }; + + zpool = { + zroot = { + type = "zpool"; + mode = "mirror"; + + options = { + ashift = "12"; + autotrim = "on"; + }; + + rootFsOptions = { + canmount = "off"; + checksum = "edonr"; + compression = "zstd"; + dnodesize = "auto"; + mountpoint = "none"; + normalization = "formD"; + relatime = "on"; + "com.sun:auto-snapshot" = "false"; + }; + + datasets = { + "local" = { + type = "zfs_fs"; + options.mountpoint = "none"; + }; + "local/home" = { + type = "zfs_fs"; + mountpoint = "/home"; + options = { + "com.sun:auto-snapshot" = "true"; + }; + }; + "local/steam" = { + type = "zfs_fs"; + mountpoint = "/steam"; + options = { + "com.sun:auto-snapshot" = "false"; + recordsize = "1M"; + compression = "lz4"; + casesensitivity = "insensitive"; + }; + postCreateHook = "chown cholli:users /steam"; + }; + "local/nix" = { + type = "zfs_fs"; + mountpoint = "/nix"; + options."com.sun:auto-snapshot" = "false"; + }; + "local/persist" = { + type = "zfs_fs"; + mountpoint = "/persist"; + options."com.sun:auto-snapshot" = "true"; + }; + "local/root" = { + type = "zfs_fs"; + mountpoint = "/"; + options."com.sun:auto-snapshot" = "false"; + postCreateHook = "zfs list -t snapshot -H -o name | grep -E '^zroot/local/root@blank$' || zfs snapshot zroot/local/root@blank"; + }; + }; + }; + }; + + }; + }; + +} diff --git a/modules/hosts/yggdrasil/hardware.nix b/modules/hosts/yggdrasil/hardware.nix index 40864db..54b1fb9 100644 --- a/modules/hosts/yggdrasil/hardware.nix +++ b/modules/hosts/yggdrasil/hardware.nix @@ -1,16 +1,18 @@ -{ - config, - ... -}: -let -in { flake.modules.nixos."hosts/yggdrasil" = - { lib, pkgs, ... }: + { + config, + lib, + pkgs, + ... + }: { boot = { + zfs.package = pkgs.zfs_2_4; kernelPackages = pkgs.linuxPackages_latest; + extraModulePackages = with config.boot.kernelPackages; [ r8125 ]; + blacklistedKernelModules = [ "r8169" ]; loader = { systemd-boot.enable = true; @@ -29,41 +31,6 @@ in }; - fileSystems = { - "/" = { - device = "/dev/disk/by-uuid/b1a956f4-91d5-456e-a92b-be505bb719bd"; - fsType = "ext4"; - }; - - "/boot" = { - device = "/dev/disk/by-uuid/B4D4-8BA0"; - fsType = "vfat"; - options = [ - "fmask=0077" - "dmask=0077" - ]; - }; - - "/storage" = { - device = "/dev/disk/by-uuid/c3c1dec1-7716-4c37-a3f2-bb60f9af84fd"; - fsType = "ext4"; - }; - - "/var/lib/bluetooth" = { - device = "/persist/var/lib/bluetooth"; - options = [ - "bind" - "noauto" - "x-systemd.automount" - ]; - noCheck = true; - }; - }; - - swapDevices = [ - { device = "/dev/disk/by-uuid/4bec00ec-e9eb-4034-836a-ecf15e0bb40e"; } - ]; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.enableRedistributableFirmware = true; hardware.cpu.amd.updateMicrocode = true;