grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / x11 / unclutter.nix
blob7f07bb8582bc7f42f49deaea6d73db0888402fa4
1 { config, lib, pkgs, ... }:
3 with lib;
5 let cfg = config.services.unclutter;
7 in {
8   options.services.unclutter = {
10     enable = mkOption {
11       description = "Enable unclutter to hide your mouse cursor when inactive";
12       type = types.bool;
13       default = false;
14     };
16     package = mkPackageOption pkgs "unclutter" { };
18     keystroke = mkOption {
19       description = "Wait for a keystroke before hiding the cursor";
20       type = types.bool;
21       default = false;
22     };
24     timeout = mkOption {
25       description = "Number of seconds before the cursor is marked inactive";
26       type = types.int;
27       default = 1;
28     };
30     threshold = mkOption {
31       description = "Minimum number of pixels considered cursor movement";
32       type = types.int;
33       default = 1;
34     };
36     excluded = mkOption {
37       description = "Names of windows where unclutter should not apply";
38       type = types.listOf types.str;
39       default = [];
40       example = [ "" ];
41     };
43     extraOptions = mkOption {
44       description = "More arguments to pass to the unclutter command";
45       type = types.listOf types.str;
46       default = [];
47       example = [ "noevent" "grab" ];
48     };
49   };
51   config = mkIf cfg.enable {
52     systemd.user.services.unclutter = {
53       description = "unclutter";
54       wantedBy = [ "graphical-session.target" ];
55       partOf = [ "graphical-session.target" ];
56       serviceConfig.ExecStart = ''
57         ${cfg.package}/bin/unclutter \
58           -idle ${toString cfg.timeout} \
59           -jitter ${toString (cfg.threshold - 1)} \
60           ${optionalString cfg.keystroke "-keystroke"} \
61           ${concatMapStrings (x: " -"+x) cfg.extraOptions} \
62           -not ${concatStringsSep " " cfg.excluded} \
63       '';
64       serviceConfig.PassEnvironment = "DISPLAY";
65       serviceConfig.RestartSec = 3;
66       serviceConfig.Restart = "always";
67     };
68   };
70   imports = [
71     (mkRenamedOptionModule [ "services" "unclutter" "threeshold" ]
72                            [ "services"  "unclutter" "threshold" ])
73   ];
75   meta.maintainers = with lib.maintainers; [ rnhmjoj ];