52 lines
1.2 KiB
Nix
52 lines
1.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
...
|
|
}: {
|
|
options.weinturm = with lib; {
|
|
impermanence = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Whether to enable impermanence";
|
|
};
|
|
rootDevice = with types;
|
|
mkOption {
|
|
type = nullOr str;
|
|
default = null;
|
|
description = ''
|
|
The device which contains the btrfs root subvolume
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
config = let
|
|
cfg = config.weinturm.impermanence;
|
|
in
|
|
lib.mkIf cfg.enable {
|
|
users.mutableUsers = false;
|
|
|
|
fileSystems."/persist".neededForBoot = true;
|
|
|
|
environment.persistence."/persist".directories = [
|
|
"/var/lib/nixos"
|
|
"/var/lib/acme"
|
|
];
|
|
|
|
boot.initrd.postDeviceCommands = let
|
|
rootDevice =
|
|
if cfg.rootDevice == null
|
|
then ""
|
|
else cfg.rootDevice;
|
|
in
|
|
lib.mkAfter ''
|
|
mkdir /mnt
|
|
mount -t btrfs "${rootDevice}" /mnt
|
|
btrfs subvolume list -o /mnt/root | cut -f9 -d' ' | while read subvolume; do
|
|
btrfs subvolume delete "/mnt/$subvolume"
|
|
done
|
|
btrfs subvolume delete /mnt/root
|
|
btrfs subvolume snapshot /mnt/root-blank /mnt/root
|
|
'';
|
|
};
|
|
}
|