git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #113241 from chkno/user-activation-scripts

Run userActivationScripts at login

commite7b6d118f2198595f3269dd26e1752ca399fd30f authorArtturi <Artturin@artturin.com> dateSat 18 Sep 2021, 05:25 (5 years ago) parentf16d926df25ca8
3 files changed+35
nixos/modules/system/activation/activation-script.nix+1 nixos/tests/all-tests.nix+1 nixos/tests/user-activation-scripts.nix+33
nixos/modules/system/activation/activation-script.nix+1
@@ -263,6 +263,7 @@ in
263263 script = config.system.userActivationScripts.script;
264264 unitConfig.ConditionUser = "!@system";
265265 serviceConfig.Type = "oneshot";
266+ wantedBy = [ "default.target" ];
266267 };
267268 };
268269 };
nixos/tests/all-tests.nix+1
@@ -461,6 +461,7 @@ in
461461 unit-php = handleTest ./web-servers/unit-php.nix {};
462462 upnp = handleTest ./upnp.nix {};
463463 usbguard = handleTest ./usbguard.nix {};
464+ user-activation-scripts = handleTest ./user-activation-scripts.nix {};
464465 uwsgi = handleTest ./uwsgi.nix {};
465466 v2ray = handleTest ./v2ray.nix {};
466467 vault = handleTest ./vault.nix {};
nixos/tests/user-activation-scripts.nixnew file+33
@@ -0,0 +1,33 @@
1+import ./make-test-python.nix ({ lib, ... }: {
2+ name = "user-activation-scripts";
3+ meta = with lib.maintainers; { maintainers = [ chkno ]; };
4+
5+ machine = {
6+ system.userActivationScripts.foo = "mktemp ~/user-activation-ran.XXXXXX";
7+ users.users.alice = {
8+ initialPassword = "pass1";
9+ isNormalUser = true;
10+ };
11+ };
12+
13+ testScript = ''
14+ def verify_user_activation_run_count(n):
15+ machine.succeed(
16+ '[[ "$(find /home/alice/ -name user-activation-ran.\\* | wc -l)" == %s ]]' % n
17+ )
18+
19+
20+ machine.wait_for_unit("multi-user.target")
21+ machine.wait_for_unit("getty@tty1.service")
22+ machine.wait_until_tty_matches(1, "login: ")
23+ machine.send_chars("alice\n")
24+ machine.wait_until_tty_matches(1, "Password: ")
25+ machine.send_chars("pass1\n")
26+ machine.send_chars("touch login-ok\n")
27+ machine.wait_for_file("/home/alice/login-ok")
28+ verify_user_activation_run_count(1)
29+
30+ machine.succeed("/run/current-system/bin/switch-to-configuration test")
31+ verify_user_activation_run_count(2)
32+ '';
33+})