diff --git a/servers/mimir/default.nix b/servers/mimir/default.nix index 5ac606a..477aa69 100644 --- a/servers/mimir/default.nix +++ b/servers/mimir/default.nix @@ -38,27 +38,6 @@ in efiInstallAsRemovable = true; }; - environment.persistence."/persist" = { - enable = true; - hideMounts = true; - - directories = [ - "/var/backup" - "/var/log" - "/var/lib" - - "/home" - ]; - - files = [ - "/etc/machine-id" - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; - networking.firewall.allowedTCPPorts = [ 2222 ]; services.beszel.agent.environment = { diff --git a/servers/mimir/disks.nix b/servers/mimir/disks.nix index 1756a25..7be572e 100644 --- a/servers/mimir/disks.nix +++ b/servers/mimir/disks.nix @@ -70,4 +70,62 @@ }; fileSystems."/persist".neededForBoot = true; + + boot.initrd.postResumeCommands = + let + rootVolume = "@root"; + in + lib.mkAfter '' + mkdir /btrfs_tmp + mount /dev/sda3 /btrfs_tmp + if [[ -e /btrfs_tmp/${rootVolume} ]]; then + mkdir -p /btrfs_tmp/old_roots + timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/${rootVolume})" "+%Y-%m-%-d_%H:%M:%S") + mv /btrfs_tmp/${rootVolume} "/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" + } + + for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do + delete_subvolume_recursively "$i" + done + + btrfs subvolume create /btrfs_tmp/${rootVolume} + umount /btrfs_tmp + ''; + + environment.persistence."/persist" = { + enable = true; + hideMounts = true; + + directories = [ + "/var/backup" + "/var/log" + "/var/lib" + + "/home" + ]; + + files = [ + "/etc/machine-id" + ]; + }; + + services.openssh.hostKeys = [ + { + bits = 4096; + path = "/persist/etc/ssh/ssh_host_rsa_key"; + type = "rsa"; + } + { + path = "/persist/etc/ssh/ssh_host_ed25519_key"; + type = "ed25519"; + } + ]; }