at master 1.9 kB view raw
1{ lib, ... }: 2{ 3 name = "systemd-user-tmpfiles-rules"; 4 5 meta = with lib.maintainers; { 6 maintainers = [ schnusch ]; 7 }; 8 9 nodes = rec { 10 machine = { 11 users.users = { 12 alice.isNormalUser = true; 13 bob.isNormalUser = true; 14 }; 15 16 systemd.user.tmpfiles = { 17 rules = [ 18 "d %h/user_tmpfiles_created" 19 ]; 20 users.alice.rules = [ 21 "d %h/only_alice" 22 ]; 23 users.bob.rules = [ 24 "D %h/cleaned_up - - - 0" 25 ]; 26 }; 27 28 # run every 10 seconds 29 systemd.user.timers.systemd-tmpfiles-clean.timerConfig = { 30 OnStartupSec = "10s"; 31 OnUnitActiveSec = "10s"; 32 }; 33 }; 34 disabled = { 35 imports = [ machine ]; 36 systemd.user.tmpfiles.enable = false; 37 }; 38 }; 39 40 testScript = 41 { ... }: 42 '' 43 machine.succeed("loginctl enable-linger alice bob") 44 45 machine.wait_until_succeeds("systemctl --user --machine=alice@ is-active systemd-tmpfiles-setup.service") 46 machine.succeed("[ -d ~alice/user_tmpfiles_created ]") 47 machine.succeed("[ -d ~alice/only_alice ]") 48 49 machine.wait_until_succeeds("systemctl --user --machine=bob@ is-active systemd-tmpfiles-setup.service") 50 machine.succeed("[ -d ~bob/user_tmpfiles_created ]") 51 machine.succeed("[ ! -e ~bob/only_alice ]") 52 53 machine.succeed("systemctl --user --machine=bob@ is-active systemd-tmpfiles-clean.timer") 54 machine.succeed("runuser -u bob -- touch ~bob/cleaned_up/file") 55 machine.wait_until_fails("[ -e ~bob/cleaned_up/file ]") 56 57 # disabled user tmpfiles 58 disabled.succeed("loginctl enable-linger alice bob") 59 for user in ("alice", "bob"): 60 for verb in ("is-enabled", "is-active"): 61 for unit in ("systemd-tmpfiles-setup.service", "systemd-tmpfiles-clean.timer"): 62 disabled.fail(f"systemctl --user --machine={user}@ {verb} {unit}") 63 ''; 64}