Declarative disk partitioning and formatting using nix [maintainer=@Lassulus]
Go to file
2022-09-05 17:23:17 +02:00
example fix example/default.nix 2022-09-05 14:11:32 +02:00
tests add test for standalone nixos config 2022-09-04 13:09:10 +02:00
.gitignore add gitignore 2022-08-17 14:53:43 +02:00
ci.nix run all tests on ci 2022-08-25 23:31:05 +02:00
default.nix add test for standalone nixos config 2022-09-04 13:09:10 +02:00
flake.lock add flake 2022-08-17 14:53:51 +02:00
flake.nix run all tests on ci 2022-08-25 23:31:05 +02:00
README.md README: fix example 2022-09-04 13:12:43 +02:00
types.nix config: fix fsType for zfs 2022-09-05 17:23:17 +02:00

disko

nix-powered automatic disk partitioning

Usage

Master Boot Record

This is how your iso configuation may look like

/etc/nixos/configuration.nix

{ pkgs, modulesPath, ... }:
let
  disko = pkgs.callPackage (builtins.fetchGit {
    url = "https://github.com/nix-community/disko";
    ref = "master";
  }) {};
  cfg = {
    disk = {
      sda = {
        device = "/dev/sda";
        type = "device";
        content = {
          type = "table";
          format = "msdos";
          partitions = [
            {
              name = "root";
              type = "partition";
              part-type = "primary";
              start = "1M";
              end = "100%";
              bootable = true;
              content = {
                type = "filesystem";
                format = "ext4";
                mountpoint = "/";
              };
            }
          ];
        };
      };
    };
  };
in {
  imports = [
    (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")
  ];
  environment.systemPackages = with pkgs;[
    (pkgs.writeScriptBin "tsp-create" (disko.create cfg))
    (pkgs.writeScriptBin "tsp-mount" (disko.mount cfg))
  ];
  ## Optional: Automatically creates a service which runs at startup to perform the partitioning
  #systemd.services.install-to-hd = {
  #  enable = true;
  #  wantedBy = ["multi-user.target"];
  #  after = ["getty@tty1.service" ];
  #  serviceConfig = {
  #    Type = "oneshot";
  #    ExecStart = [ (disko.create cfg) (disk.mount cfg) ];
  #    StandardInput = "null";
  #    StandardOutput = "journal+console";
  #    StandardError = "inherit";
  #  };
  #};
}

After nixos-rebuild switch this will add a tsp-create and a tsp-mount command:

  • tsp-create: creates & formats the partitions according to tsp-disk.json
  • tsp-mount: mounts the partitions to /mnt

GUID Partition Table, LVM and dm-crypt

See examples/