{ config, lib, ... }: with lib; with lib.metacfg; let cfg = config.metacfg.services.xremap; in { options.metacfg.services.xremap = with types; { enable = mkBoolOpt false "Whether or not to enable xremap key remapping."; userName = mkOption { type = types.str; default = "harald"; description = "User to run xremap as."; }; withGnome = mkBoolOpt true "Enable GNOME support."; deviceNames = mkOption { type = types.listOf types.str; default = [ ]; description = "List of device names to remap."; }; config = mkOption { type = types.attrs; default = { }; description = "Xremap configuration."; }; }; config = { services.xremap = { enable = cfg.enable; userName = mkIf cfg.enable cfg.userName; serviceMode = mkIf cfg.enable "user"; withGnome = mkIf cfg.enable cfg.withGnome; deviceNames = mkIf cfg.enable cfg.deviceNames; config = mkIf cfg.enable cfg.config; }; users.users.${cfg.userName}.extraGroups = mkIf cfg.enable [ "input" ]; }; }