lol

nixos/evdevremapkeys: init

Add a service for evdevremapkeys (already packaged), a daemon for
remapping keyboard events

+62
+2
nixos/doc/manual/release-notes/rl-2305.section.md
··· 83 83 84 84 - [gitea-actions-runner](https://gitea.com/gitea/act_runner), a CI runner for Gitea/Forgejo Actions. Available as [services.gitea-actions-runner](#opt-services.gitea-actions-runner.instances). 85 85 86 + - [evdevremapkeys](https://github.com/philipl/evdevremapkeys), a daemon to remap key events. Available as [services.evdevremapkeys](#opt-services.evdevremapkeys.enable). 87 + 86 88 - [gmediarender](https://github.com/hzeller/gmrender-resurrect), a simple, headless UPnP/DLNA renderer. Available as [services.gmediarender](options.html#opt-services.gmediarender.enable). 87 89 88 90 - [go2rtc](https://github.com/AlexxIT/go2rtc), a camera streaming appliation with support for RTSP, WebRTC, HomeKit, FFMPEG, RTMP and other protocols. Available as [services.go2rtc](options.html#opt-services.go2rtc.enable).
+1
nixos/modules/module-list.nix
··· 633 633 ./services/misc/etcd.nix 634 634 ./services/misc/etebase-server.nix 635 635 ./services/misc/etesync-dav.nix 636 + ./services/misc/evdevremapkeys.nix 636 637 ./services/misc/felix.nix 637 638 ./services/misc/freeswitch.nix 638 639 ./services/misc/fstrim.nix
+59
nixos/modules/services/misc/evdevremapkeys.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + let 5 + format = pkgs.formats.yaml { }; 6 + cfg = config.services.evdevremapkeys; 7 + 8 + in 9 + { 10 + options.services.evdevremapkeys = { 11 + enable = mkEnableOption (lib.mdDoc ''evdevremapkeys''); 12 + 13 + settings = mkOption { 14 + type = format.type; 15 + default = { }; 16 + description = lib.mdDoc '' 17 + config.yaml for evdevremapkeys 18 + ''; 19 + }; 20 + }; 21 + 22 + config = mkIf cfg.enable { 23 + boot.kernelModules = [ "uinput" ]; 24 + services.udev.extraRules = '' 25 + KERNEL=="uinput", MODE="0660", GROUP="input" 26 + ''; 27 + users.groups.evdevremapkeys = { }; 28 + users.users.evdevremapkeys = { 29 + description = "evdevremapkeys service user"; 30 + group = "evdevremapkeys"; 31 + extraGroups = [ "input" ]; 32 + isSystemUser = true; 33 + }; 34 + systemd.services.evdevremapkeys = { 35 + description = "evdevremapkeys"; 36 + wantedBy = [ "multi-user.target" ]; 37 + serviceConfig = 38 + let 39 + config = format.generate "config.yaml" cfg.settings; 40 + in 41 + { 42 + ExecStart = "${pkgs.evdevremapkeys}/bin/evdevremapkeys --config-file ${config}"; 43 + User = "evdevremapkeys"; 44 + Group = "evdevremapkeys"; 45 + StateDirectory = "evdevremapkeys"; 46 + Restart = "always"; 47 + LockPersonality = true; 48 + MemoryDenyWriteExecute = true; 49 + NoNewPrivileges = true; 50 + PrivateNetwork = true; 51 + PrivateTmp = true; 52 + ProtectControlGroups = true; 53 + ProtectHome = true; 54 + ProtectKernelTunables = true; 55 + ProtectSystem = true; 56 + }; 57 + }; 58 + }; 59 + }