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.mkOption {
16 type = lib.types.package;
17 default = pkgs.xscreensaver;
18 defaultText = lib.literalExpression "pkgs.xscreensaver";
19 description = "Which xscreensaver package to use.";
20 };
21 };
22
23 config = lib.mkIf cfg.enable {
24 # Make xscreensaver-auth setuid root so that it can (try to) prevent the OOM
25 # killer from unlocking the screen.
26 security.wrappers.xscreensaver-auth = {
27 setuid = true;
28 owner = "root";
29 group = "root";
30 source = "${pkgs.xscreensaver}/libexec/xscreensaver/xscreensaver-auth";
31 };
32
33 systemd.user.services.xscreensaver = {
34 enable = true;
35 description = "XScreenSaver";
36 after = [ "graphical-session-pre.target" ];
37 partOf = [ "graphical-session.target" ];
38 wantedBy = [ "graphical-session.target" ];
39 path = [ cfg.package ];
40 serviceConfig.ExecStart = "${cfg.package}/bin/xscreensaver -no-splash";
41 };
42 };
43
44 meta.maintainers = with lib.maintainers; [
45 vancluever
46 ];
47}