about summary refs log tree commit diff
path: root/nixpkgs/nixos/tests/common/auto-format-root-device.nix
blob: fef8c70049913b73f71c663135960f579bb184c0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# This is a test utility that automatically formats
# `config.virtualisation.rootDevice` in the initrd.
# Note that when you are using
# `boot.initrd.systemd.enable = true`, you can use
# `virtualisation.fileSystems."/".autoFormat = true;`
# instead.

{ lib, config, pkgs, ... }:

let
  rootDevice = config.virtualisation.rootDevice;
in
{

  boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
    # We need mke2fs in the initrd.
    copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
  '';

  boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
    # If the disk image appears to be empty, run mke2fs to
    # initialise.
    FSTYPE=$(blkid -o value -s TYPE ${rootDevice} || true)
    PARTTYPE=$(blkid -o value -s PTTYPE ${rootDevice} || true)
    if test -z "$FSTYPE" -a -z "$PARTTYPE"; then
        mke2fs -t ext4 ${rootDevice}
    fi
  '';
}