1
0
Fork 0
mirror of https://git.sr.ht/~neverness/ultima synced 2025-01-07 21:03:51 +00:00
ultima/modules/nixos/hardware/impermanence/default.nix

56 lines
1.4 KiB
Nix
Raw Normal View History

{
x,
inputs,
lib,
config,
...
}:
2024-11-21 09:24:15 +00:00
with lib;
2024-12-09 01:15:55 +00:00
with x;
let
cfg = config.module.hardware.impermanence;
in
{
options = {
module.hardware.impermanence = {
enable = mkBool;
};
};
2024-11-21 09:24:15 +00:00
2024-12-20 13:10:11 +00:00
imports = with inputs; [ impermanence.nixosModules.impermanence ];
2024-11-21 09:24:15 +00:00
config = mkIf cfg.enable {
2024-12-20 13:10:11 +00:00
boot.initrd.systemd.services.rollback = {
description = "Rollback BTRFS root subvolume to a pristine state";
unitConfig.DefaultDependencies = "no";
serviceConfig.Type = "oneshot";
wantedBy = [ "initrd.target" ];
after = [ "systemd-cryptsetup@crypted.service" ];
before = [ "sysroot.mount" ];
script = ''
mkdir -p /btrfs_tmp
mount ${disk} /btrfs_tmp
if [[ -e /btrfs_tmp/root ]]; then
mkdir -p /btrfs_tmp/old_roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "/btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
2024-11-21 09:24:15 +00:00
}
2024-12-20 13:10:11 +00:00
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
2024-11-21 09:24:15 +00:00
};
};
}