From 3dc3775a6c316b41ec69ff76d7d77f73713478de Mon Sep 17 00:00:00 2001 From: xinyangli Date: Wed, 27 Nov 2024 17:43:47 +0800 Subject: [PATCH] modules: add disko partition module for common partition patterns --- flake.lock | 21 ++++++++++ flake.nix | 6 +++ modules/nixos/disk-partitions/btrfs.nix | 46 ++++++++++++++++++++++ modules/nixos/disk-partitions/default.nix | 15 +++++++ modules/nixos/disk-partitions/grub-mbr.nix | 4 ++ 5 files changed, 92 insertions(+) create mode 100644 modules/nixos/disk-partitions/btrfs.nix create mode 100644 modules/nixos/disk-partitions/default.nix create mode 100644 modules/nixos/disk-partitions/grub-mbr.nix diff --git a/flake.lock b/flake.lock index 50dd949..c23bdb6 100644 --- a/flake.lock +++ b/flake.lock @@ -61,6 +61,26 @@ "type": "github" } }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732645828, + "narHash": "sha256-+4U2I2653JvPFxcux837ulwYS864QvEueIljUkwytsk=", + "owner": "nix-community", + "repo": "disko", + "rev": "869ba3a87486289a4197b52a6c9e7222edf00b3e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -596,6 +616,7 @@ "inputs": { "catppuccin": "catppuccin", "colmena": "colmena", + "disko": "disko", "flake-utils": "flake-utils_2", "home-manager": "home-manager", "my-nixvim": "my-nixvim", diff --git a/flake.nix b/flake.nix index 99d1f8e..2c2c9e9 100644 --- a/flake.nix +++ b/flake.nix @@ -50,6 +50,11 @@ catppuccin = { url = "github:catppuccin/nix"; }; + + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -66,6 +71,7 @@ nix-vscode-extensions, colmena, nix-index-database, + disko, ... }: let diff --git a/modules/nixos/disk-partitions/btrfs.nix b/modules/nixos/disk-partitions/btrfs.nix new file mode 100644 index 0000000..7b73227 --- /dev/null +++ b/modules/nixos/disk-partitions/btrfs.nix @@ -0,0 +1,46 @@ +{ + size = "100%"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/rootfs" = { + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/home" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/home"; + }; + # Parent is not mounted so the mountpoint must be set + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + "/persistent" = { + mountOptions = [ + "compress=zstd" + "noatime" + # Lots of dbs in /var/lib, let's disable cow + "nodatacow" + ]; + mountpoint = "/var/lib"; + }; + # Subvolume for the swapfile + "/swap" = { + mountpoint = "/.swapvol"; + swap = { + swapfile.size = "2G"; + }; + }; + }; + + mountpoint = "/partition-root"; + }; +} diff --git a/modules/nixos/disk-partitions/default.nix b/modules/nixos/disk-partitions/default.nix new file mode 100644 index 0000000..f47d052 --- /dev/null +++ b/modules/nixos/disk-partitions/default.nix @@ -0,0 +1,15 @@ +{ lib, ... }: +{ + options = { + diskPartitions = lib.mkOption { + type = lib.types.attrs; + default = { }; + }; + }; + config = { + diskPartitions = { + btrfs = import ./btrfs.nix; + grubMbr = import ./grub-mbr.nix; + }; + }; +} diff --git a/modules/nixos/disk-partitions/grub-mbr.nix b/modules/nixos/disk-partitions/grub-mbr.nix new file mode 100644 index 0000000..ad823e0 --- /dev/null +++ b/modules/nixos/disk-partitions/grub-mbr.nix @@ -0,0 +1,4 @@ +{ + size = "1M"; + type = "EF02"; # for grub MBR +}