From 62e462a0df50e2c84e3158084287f7a946ed3484 Mon Sep 17 00:00:00 2001 From: DashieTM Date: Fri, 28 Feb 2025 18:30:31 +0100 Subject: [PATCH] disko test --- flake.nix | 6 +- lib/default.nix | 1 + modules/conf.nix | 8 ++ modules/programs/drives.nix | 157 ++++++++++++++++++------------------ 4 files changed, 92 insertions(+), 80 deletions(-) diff --git a/flake.nix b/flake.nix index 15d1e5e..4ae8f79 100644 --- a/flake.nix +++ b/flake.nix @@ -33,6 +33,7 @@ stylix.url = "github:danth/stylix"; base16.url = "github:SenchoPens/base16.nix"; + disko.url = "github:nix-community/disko/latest"; anyrun.url = "github:Kirottu/anyrun"; oxicalc.url = "github:DashieTM/OxiCalc"; @@ -80,7 +81,8 @@ }; overlays = [ inputs.nur.overlays.default - inputs.chaoticNyx.overlays.default]; + inputs.chaoticNyx.overlays.default + ]; }; pkgs = import inputs.nixpkgs { system = currentSystem; @@ -94,7 +96,7 @@ overlays = [ inputs.nur.overlays.default inputs.chaoticNyx.overlays.default - ]; + ]; }; in rec { dashNixLib = import ./lib { diff --git a/lib/default.nix b/lib/default.nix index 757fdf4..93408b3 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -44,6 +44,7 @@ nixos = [ inputs.home-manager.nixosModules.home-manager inputs.stylix.nixosModules.stylix + inputs.disko.nixosModules.disko ../base ../home ../modules diff --git a/modules/conf.nix b/modules/conf.nix index a9e9734..ed36389 100644 --- a/modules/conf.nix +++ b/modules/conf.nix @@ -28,6 +28,14 @@ ''; }; + defualtDiskId = lib.mkOption { + default = "TODO"; + example = "/dev/disk/by-id/nvme-Force_MP510_19498249000129196385"; + description = '' + The id of the disk to format + ''; + }; + cpu = lib.mkOption { # TODO: how to enable arm? default = "amd"; diff --git a/modules/programs/drives.nix b/modules/programs/drives.nix index 35bf396..8e463d2 100644 --- a/modules/programs/drives.nix +++ b/modules/programs/drives.nix @@ -3,35 +3,7 @@ config, options, ... -}: let - driveModule = lib.types.submodule { - options = { - name = lib.mkOption { - type = lib.types.str; - description = '' - The path of the drive. - Note that a / is already added at the beginning. - ''; - default = ""; - example = "drive2"; - }; - drive = lib.mkOption { - type = lib.types.attrsOf lib.types.anything; - description = "The attrs of the drive"; - default = {}; - example = { - device = "/dev/disk/by-label/DRIVE2"; - fsType = "ext4"; - options = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - }; - }; - }; -in { +}: { options.mods = { drives = { useSwap = { @@ -83,55 +55,84 @@ in { config = ( lib.optionalAttrs (options ? fileSystems) { - fileSystems = - builtins.listToAttrs ( - map ( - { - name, - drive, - }: { - name = "/" + name; - value = drive; - } - ) - config.mods.drives.extraDrives - ) - // (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { - "/" = { - device = "/dev/disk/by-label/ROOT"; - fsType = "btrfs"; - options = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - - "/boot" = { - device = "/dev/disk/by-label/BOOT"; - fsType = "vfat"; - options = [ - "rw" - "fmask=0022" - "dmask=0022" - "noatime" - ]; - }; - - "/home" = { - device = "/dev/disk/by-label/HOME"; - fsType = "btrfs"; - options = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - }; - # TODO make this convert to choice of drives -> thanks to funny types this doesn't work... - swapDevices = lib.mkIf config.mods.drives.useSwap.enable [ - {device = "/dev/disk/by-label/SWAP";} - ]; + disko.devices = { + disk = + { + main = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { + device = "${config.conf.defaultDiskId}"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + root = { + start = "33G"; + end = "30%"; + content = { + type = "filesystem"; + format = "btrfs"; + mountpoint = "/"; + mountOptions = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + }; + plainSwap = { + start = "1G"; + end = "33G"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; + }; + }; + boot = { + start = "0G"; + end = "1G"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "rw" + "fmask=0022" + "dmask=0022" + "noatime" + ]; + }; + }; + home = { + start = "30%"; + end = "100%"; + content = { + type = "filesystem"; + format = "btrfs"; + mountpoint = "/home"; + mountOptions = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + }; + }; + }; + }; + } + // builtins.listToAttrs ( + map ( + { + name, + drive, + }: { + name = "/" + name; + value = drive; + } + ) + config.mods.drives.extraDrives + ); + }; } ); }