summaryrefslogtreecommitdiff
path: root/hosts/tacitus/disko.nix
diff options
context:
space:
mode:
Diffstat (limited to 'hosts/tacitus/disko.nix')
-rw-r--r--hosts/tacitus/disko.nix91
1 files changed, 91 insertions, 0 deletions
diff --git a/hosts/tacitus/disko.nix b/hosts/tacitus/disko.nix
new file mode 100644
index 0000000..5e36661
--- /dev/null
+++ b/hosts/tacitus/disko.nix
@@ -0,0 +1,91 @@
+{ config, lib, ... }:
+{
+ options.host-config.disko = with lib; {
+ root_device = mkOption {
+ type = types.path;
+ default = "/dev/nvme0n1";
+ example = "/dev/nvme0n1";
+ description = "Root device for disko and grub";
+ };
+ enable = mkOption {
+ type = types.bool;
+ default = !config.addons.virtualisation.isTestVM;
+ description = "Whenever to enable disko or not.";
+ };
+ };
+
+ config =
+ let
+ cfg = config.host-config.disko;
+ in
+ lib.mkIf (cfg.enable) {
+ services.btrfs.autoScrub = {
+ enable = true;
+ interval = "weekly";
+ };
+
+ disko.devices = {
+ disk = {
+ main-disk = {
+ device = cfg.root_device;
+ type = "disk";
+ content = {
+ type = "gpt";
+ partitions = {
+ ESP = {
+ type = "EF00";
+ size = "512M";
+ content = {
+ type = "filesystem";
+ format = "vfat";
+ mountpoint = "/boot";
+ mountOptions = [ "umask=0077" ];
+ };
+ };
+ luks = {
+ size = "100%";
+ content = {
+ type = "luks";
+ name = "crypted";
+ passwordFile = "/tmp/root-reserve-key.key";
+ # Do not wait for recovery displaying and blocking formatting.
+ content = {
+ type = "btrfs";
+ extraArgs = [ "-f" ];
+ subvolumes = {
+ # Subvolume name is different from mountpoint
+ "/rootfs" = {
+ mountOptions = [ "compress=zstd" ];
+ 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";
+ };
+ # Subvolume for the swapfile
+ "/swap" = {
+ mountpoint = "/.swapvol";
+ swap = {
+ swapfile.size = "8G";
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+}