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