From afa7a4c72ef357bf020f2ae2f485be90bf200cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ryan4yin=20=7C=20=E4=BA=8C=E8=8A=B1?= Date: Fri, 16 Oct 2026 21:08:41 +0800 Subject: [PATCH] fix(aquamarine): persist the user's unit directories (#464) Assisted-by: DeepSeek Harness (deepseek-flash) --- hosts/idols-aquamarine/preservation.nix | 16 +++++++++++++++- .../tests/idols-aquamarine/expected.nix | 1 + .../x86_64-linux/tests/idols-aquamarine/expr.nix | 10 ++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/hosts/idols-aquamarine/preservation.nix b/hosts/idols-aquamarine/preservation.nix index d021764e..b8d1c382 100644 --- a/hosts/idols-aquamarine/preservation.nix +++ b/hosts/idols-aquamarine/preservation.nix @@ -72,19 +72,33 @@ in # not listed is gone on the next boot; weights are re-downloadable, but # re-downloading tens of GB is not a boot step. "models" + + ".config/systemd/user" + ".config/containers/systemd" ]; }; }; # `.config`/`.local` are not immediate parents of any persisted path here, so # tmpfiles would create them root:root 0755 and the user could not write - # under them. Same fix as hosts/idols-ai/preservation.nix. + # under them. Same fix as hosts/idols-ai/preservation.nix, plus the `.config` + # subdirectories that hold a mount point. systemd.tmpfiles.settings.preservation = { "/home/${username}/.config".d = { user = username; group = lib.mkForce username; mode = lib.mkForce "0750"; }; + "/home/${username}/.config/systemd".d = { + user = username; + group = lib.mkForce username; + mode = lib.mkForce "0750"; + }; + "/home/${username}/.config/containers".d = { + user = username; + group = lib.mkForce username; + mode = lib.mkForce "0750"; + }; "/home/${username}/.local".d = { user = username; group = lib.mkForce username; diff --git a/outputs/x86_64-linux/tests/idols-aquamarine/expected.nix b/outputs/x86_64-linux/tests/idols-aquamarine/expected.nix index ede51a0f..e3c4adce 100644 --- a/outputs/x86_64-linux/tests/idols-aquamarine/expected.nix +++ b/outputs/x86_64-linux/tests/idols-aquamarine/expected.nix @@ -8,6 +8,7 @@ cStatesCapped = true; nativeIpv6Preference = true; sourceCheckoutsPersistent = true; + userUnitDirsPersistent = true; rootlessPodmanEnabled = true; stableKernel = true; btopShowsRadeon = true; diff --git a/outputs/x86_64-linux/tests/idols-aquamarine/expr.nix b/outputs/x86_64-linux/tests/idols-aquamarine/expr.nix index ad0241f7..42299f9f 100644 --- a/outputs/x86_64-linux/tests/idols-aquamarine/expr.nix +++ b/outputs/x86_64-linux/tests/idols-aquamarine/expr.nix @@ -36,6 +36,16 @@ in sourceCheckoutsPersistent = builtins.any ( d: d.directory == "/home/${myvars.username}/src" ) cfg.preservation.preserveAt."/persistent".users.${myvars.username}.directories; + + # Directories the tmpfs root would otherwise drop. + userUnitDirsPersistent = + let + dirs = cfg.preservation.preserveAt."/persistent".users.${myvars.username}.directories; + in + builtins.all (path: builtins.any (d: d.directory == "/home/${myvars.username}/${path}") dirs) [ + ".config/systemd/user" + ".config/containers/systemd" + ]; rootlessPodmanEnabled = cfg.virtualisation.podman.enable; # A server tracks the nixpkgs default (stable/LTS) kernel, not `-latest`.