1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8let
9 cfg = config.services.xscreensaver;
10in
11{
12 options.services.xscreensaver = {
13 enable = lib.mkEnableOption "xscreensaver user service";
14
15 package = lib.mkPackageOption pkgs "xscreensaver" { };
16 };
17
18 config = lib.mkIf cfg.enable {
19 # Make xscreensaver-auth setuid root so that it can (try to) prevent the OOM
20 # killer from unlocking the screen.
21 security.wrappers.xscreensaver-auth = {
22 setuid = true;
23 owner = "root";
24 group = "root";
25 source = "${pkgs.xscreensaver}/libexec/xscreensaver/xscreensaver-auth";
26 };
27
28 systemd.user.services.xscreensaver = {
29 enable = true;
30 description = "XScreenSaver";
31 after = [ "graphical-session-pre.target" ];
32 partOf = [ "graphical-session.target" ];
33 wantedBy = [ "graphical-session.target" ];
34 path = [ cfg.package ];
35 serviceConfig.ExecStart = "${cfg.package}/bin/xscreensaver -no-splash";
36 };
37 };
38
39 meta.maintainers = with lib.maintainers; [
40 vancluever
41 ];
42}