From 2783860e4ec26caa82af5966773659270caa6664 Mon Sep 17 00:00:00 2001 From: andromeda Date: Sun, 19 Apr 2026 12:15:31 +0200 Subject: update inputs --- modules/nixos/machines/lenovo.nix | 88 +++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 27 deletions(-) (limited to 'modules') diff --git a/modules/nixos/machines/lenovo.nix b/modules/nixos/machines/lenovo.nix index 86255b1..537c5e5 100644 --- a/modules/nixos/machines/lenovo.nix +++ b/modules/nixos/machines/lenovo.nix @@ -17,36 +17,70 @@ options = ["subvol=root"]; }; - boot.initrd.postResumeCommands = lib.mkAfter '' - mkdir /btrfs_tmp - mount ${config.fileSystems."/".device} /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 + boot.initrd.systemd = { + services.impermanent-btrfs = { + description = "saves old root and makes new one"; + unitConfig.DefaultDependencies = false; + serviceConfig = { + Type = "oneshot"; + StandardOutput = "journal+console"; + StandardError = "journal+console"; + }; + requiredBy = [ + "initrd.target" + ]; + before = [ + "sysroot.mount" + ]; + requires = [ + "initrd-root-device.target" + ]; + after = [ + "initrd-root-device.target" + "local-fs-pre.target" + ]; + script = '' + mkdir /btrfs_tmp + mount ${config.fileSystems."/".device} /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" - } + 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 + for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do + delete_subvolume_recursively "$i" + done - btrfs subvolume create /btrfs_tmp/root - mkdir /btrfs_tmp/root/persist - mkdir /btrfs_tmp/root/etc - mount ${config.fileSystems."/persist".device} /btrfs_tmp/root/persist -o subvol=persist - cp /btrfs_tmp/root/persist/etc/ssh /btrfs_tmp/root/etc/ssh -r - umount /btrfs_tmp/root/persist - rm -r /btrfs_tmp/root/persist - umount /btrfs_tmp - ''; + btrfs subvolume create /btrfs_tmp/root + mkdir /btrfs_tmp/root/persist + mkdir /btrfs_tmp/root/etc + mount ${config.fileSystems."/persist".device} /btrfs_tmp/root/persist -o subvol=persist + cp /btrfs_tmp/root/persist/etc/ssh /btrfs_tmp/root/etc/ssh -r + umount /btrfs_tmp/root/persist + rm -r /btrfs_tmp/root/persist + umount /btrfs_tmp + ''; + }; + extraBin = { + "mkdir" = "${pkgs.coreutils}/bin/mkdir"; + "date" = "${pkgs.coreutils}/bin/date"; + "stat" = "${pkgs.coreutils}/bin/stat"; + "mv" = "${pkgs.coreutils}/bin/mv"; + "cp" = "${pkgs.coreutils}/bin/cp"; + "rm" = "${pkgs.coreutils}/bin/rm"; + "btrfs" = "${pkgs.btrfs-progs}/bin/btrfs"; + # find, mount, umount already there + }; + }; fileSystems."/nix" = { device = "/dev/disk/by-uuid/0e586651-36f4-42b0-99b3-3f0704a894d6"; -- cgit v1.3