xcape: add service
This commit is contained in:
parent
f8b03f5750
commit
c48db4fbba
|
@ -1012,6 +1012,13 @@ in
|
|||
A new module is available: 'programs.lsd'.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2019-04-09T20:10:22+00:00";
|
||||
message = ''
|
||||
A new module is available: 'services.xcape'.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -118,6 +118,7 @@ let
|
|||
(loadModule ./services/window-managers/awesome.nix { })
|
||||
(loadModule ./services/window-managers/i3.nix { })
|
||||
(loadModule ./services/window-managers/xmonad.nix { })
|
||||
(loadModule ./services/xcape.nix { condition = hostPlatform.isLinux; })
|
||||
(loadModule ./services/xembed-sni-proxy.nix { condition = hostPlatform.isLinux; })
|
||||
(loadModule ./services/xscreensaver.nix { })
|
||||
(loadModule ./systemd.nix { })
|
||||
|
|
76
modules/services/xcape.nix
Normal file
76
modules/services/xcape.nix
Normal file
|
@ -0,0 +1,76 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.xcape;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
meta.maintainers = [ maintainers.nickhu ];
|
||||
|
||||
options = {
|
||||
services.xcape = {
|
||||
enable = mkEnableOption "xcape";
|
||||
|
||||
timeout = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
example = 500;
|
||||
description = ''
|
||||
If you hold a key longer than this timeout, xcape will not
|
||||
generate a key event. Default is 500 ms.
|
||||
'';
|
||||
};
|
||||
|
||||
mapExpression = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = { Shift_L = "Escape"; Control_L = "Control_L|O"; };
|
||||
description = ''
|
||||
The value has the grammar <literal>Key[|OtherKey]</literal>.
|
||||
</para>
|
||||
<para>
|
||||
The list of key names is found in the header file
|
||||
<filename>X11/keysymdef.h</filename> (remove the
|
||||
<literal>XK_</literal> prefix). Note that due to limitations
|
||||
of X11 shifted keys must be specified as a shift key
|
||||
followed by the key to be pressed rather than the actual
|
||||
name of the character. For example to generate "{" the
|
||||
expression <literal>Shift_L|bracketleft</literal> could be
|
||||
used (assuming that you have a key with "{" above "[").
|
||||
</para>
|
||||
<para>
|
||||
You can also specify keys in decimal (prefix #), octal (#0),
|
||||
or hexadecimal (#0x). They will be interpreted as keycodes
|
||||
unless no corresponding key name is found.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.user.services.xcape = {
|
||||
Unit = {
|
||||
Description = "xcape";
|
||||
After = [ "graphical-session-pre.target" ];
|
||||
PartOf = [ "graphical-session.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "forking";
|
||||
ExecStart = "${pkgs.xcape}/bin/xcape"
|
||||
+ optionalString (cfg.timeout != null) " -t ${toString cfg.timeout}"
|
||||
+ optionalString (cfg.mapExpression != {})
|
||||
" -e '${builtins.concatStringsSep ";"
|
||||
(attrsets.mapAttrsToList (n: v: "${n}=${v}") cfg.mapExpression)}'";
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "graphical-session.target" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue