grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / evdevremapkeys.nix
blob754bce9f03d28cf5b51320c001028f171af13cb3
1 { config, lib, pkgs, ... }:
2 let
3   format = pkgs.formats.yaml { };
4   cfg = config.services.evdevremapkeys;
6 in
8   options.services.evdevremapkeys = {
9     enable = lib.mkEnableOption ''evdevremapkeys, a daemon to remap events on linux input devices'';
11     settings = lib.mkOption {
12       type = format.type;
13       default = { };
14       description = ''
15         config.yaml for evdevremapkeys
16       '';
17     };
18   };
20   config = lib.mkIf cfg.enable {
21     boot.kernelModules = [ "uinput" ];
22     services.udev.extraRules = ''
23       KERNEL=="uinput", MODE="0660", GROUP="input"
24     '';
25     users.groups.evdevremapkeys = { };
26     users.users.evdevremapkeys = {
27       description = "evdevremapkeys service user";
28       group = "evdevremapkeys";
29       extraGroups = [ "input" ];
30       isSystemUser = true;
31     };
32     systemd.services.evdevremapkeys = {
33       description = "evdevremapkeys";
34       wantedBy = [ "multi-user.target" ];
35       serviceConfig =
36         let
37           config = format.generate "config.yaml" cfg.settings;
38         in
39         {
40           ExecStart = "${pkgs.evdevremapkeys}/bin/evdevremapkeys --config-file ${config}";
41           User = "evdevremapkeys";
42           Group = "evdevremapkeys";
43           StateDirectory = "evdevremapkeys";
44           Restart = "always";
45           LockPersonality = true;
46           MemoryDenyWriteExecute = true;
47           NoNewPrivileges = true;
48           PrivateNetwork = true;
49           PrivateTmp = true;
50           ProtectControlGroups = true;
51           ProtectHome = true;
52           ProtectKernelTunables = true;
53           ProtectSystem = true;
54         };
55     };
56   };