mirror of
https://github.com/donovanglover/nix-config.git
synced 2025-01-09 07:28:53 +01:00
meta: Merge dual-function-keys with hardware
Seems like an alright categorization for now since dual-function-keys can be used without a desktop environment, although realistically the tty is impractical for things like CJK.
This commit is contained in:
parent
3fc9cb9c81
commit
b4af703fdf
@ -14,6 +14,7 @@ in
|
||||
|
||||
modules = {
|
||||
hardware = {
|
||||
keyboardBinds = true;
|
||||
disableLaptopKeyboard = true;
|
||||
lidIgnore = true;
|
||||
powerIgnore = true;
|
||||
|
@ -1,66 +0,0 @@
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) getExe singleton;
|
||||
inherit (builtins) toJSON;
|
||||
inherit (pkgs) interception-tools;
|
||||
inherit (pkgs.interception-tools-plugins) dual-function-keys;
|
||||
|
||||
configFile = "dual-function-keys.yaml";
|
||||
in
|
||||
{
|
||||
services.interception-tools = {
|
||||
enable = true;
|
||||
plugins = [ dual-function-keys ];
|
||||
|
||||
udevmonConfig = toJSON (singleton {
|
||||
JOB = /* bash */ ''
|
||||
${interception-tools}/bin/intercept -g $DEVNODE |
|
||||
${getExe dual-function-keys} -c /etc/${configFile} |
|
||||
${interception-tools}/bin/uinput -d $DEVNODE
|
||||
'';
|
||||
|
||||
DEVICE = {
|
||||
EVENTS = {
|
||||
EV_KEY = [ "KEY_CAPSLOCK" "KEY_ESC" ];
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
environment.etc.${configFile}.text = toJSON {
|
||||
TIMING = [
|
||||
{ TAP_MILLISEC = 1000; }
|
||||
{ DOUBLE_TAP_MILLISEC = 0; }
|
||||
{ SYNTHETIC_KEYS_PAUSE_MILLISEC = 0; }
|
||||
];
|
||||
|
||||
MAPPINGS = [
|
||||
{
|
||||
KEY = "KEY_CAPSLOCK";
|
||||
TAP = "KEY_ESC";
|
||||
HOLD = "KEY_LEFTCTRL";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_SYSRQ";
|
||||
TAP = "KEY_SYSRQ";
|
||||
HOLD = "KEY_RIGHTMETA";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_LEFTMETA";
|
||||
TAP = [ "KEY_LEFTMETA" "KEY_F1" ];
|
||||
HOLD = "KEY_LEFTMETA";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_RIGHTSHIFT";
|
||||
TAP = [ "KEY_LEFTMETA" "KEY_F2" ];
|
||||
HOLD = "KEY_RIGHTSHIFT";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_RIGHTALT";
|
||||
TAP = "KEY_GRAVE";
|
||||
HOLD = "KEY_RIGHTALT";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
@ -1,20 +1,26 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkEnableOption mkIf;
|
||||
inherit (pkgs) piper;
|
||||
inherit (builtins) toJSON;
|
||||
inherit (lib) mkEnableOption mkIf getExe singleton;
|
||||
inherit (pkgs) piper interception-tools;
|
||||
inherit (pkgs.interception-tools-plugins) dual-function-keys;
|
||||
inherit (cfg) mouseSettings disableLaptopKeyboard lidIgnore powerIgnore keyboardBinds;
|
||||
|
||||
dualFunctionKeysConfig = "dual-function-keys.yaml";
|
||||
|
||||
cfg = config.modules.hardware;
|
||||
in
|
||||
{
|
||||
options.modules.hardware = {
|
||||
keyboardBinds = mkEnableOption "start button for rofi, caps lock as escape, etc.";
|
||||
mouseSettings = mkEnableOption "piper for gaming mice";
|
||||
disableLaptopKeyboard = mkEnableOption "udev rule to disable laptop keyboard";
|
||||
lidIgnore = mkEnableOption "ignoring the laptop lid on close";
|
||||
powerIgnore = mkEnableOption "ignoring the power button on press";
|
||||
};
|
||||
|
||||
config = with cfg; {
|
||||
config = {
|
||||
services = {
|
||||
ratbagd.enable = mkIf mouseSettings true;
|
||||
|
||||
@ -26,8 +32,63 @@ in
|
||||
lidSwitch = mkIf lidIgnore "ignore";
|
||||
extraConfig = mkIf powerIgnore "HandlePowerKey=ignore";
|
||||
};
|
||||
|
||||
interception-tools = {
|
||||
enable = mkIf keyboardBinds true;
|
||||
plugins = [ dual-function-keys ];
|
||||
|
||||
udevmonConfig = toJSON (singleton {
|
||||
JOB = /* bash */ ''
|
||||
${interception-tools}/bin/intercept -g $DEVNODE |
|
||||
${getExe dual-function-keys} -c /etc/${dualFunctionKeysConfig} |
|
||||
${interception-tools}/bin/uinput -d $DEVNODE
|
||||
'';
|
||||
|
||||
DEVICE = {
|
||||
EVENTS = {
|
||||
EV_KEY = [ "KEY_CAPSLOCK" "KEY_ESC" ];
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = mkIf mouseSettings [ piper ];
|
||||
|
||||
environment.etc.${dualFunctionKeysConfig}.text = toJSON {
|
||||
TIMING = [
|
||||
{ TAP_MILLISEC = 1000; }
|
||||
{ DOUBLE_TAP_MILLISEC = 0; }
|
||||
{ SYNTHETIC_KEYS_PAUSE_MILLISEC = 0; }
|
||||
];
|
||||
|
||||
MAPPINGS = [
|
||||
{
|
||||
KEY = "KEY_CAPSLOCK";
|
||||
TAP = "KEY_ESC";
|
||||
HOLD = "KEY_LEFTCTRL";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_SYSRQ";
|
||||
TAP = "KEY_SYSRQ";
|
||||
HOLD = "KEY_RIGHTMETA";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_LEFTMETA";
|
||||
TAP = [ "KEY_LEFTMETA" "KEY_F1" ];
|
||||
HOLD = "KEY_LEFTMETA";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_RIGHTSHIFT";
|
||||
TAP = [ "KEY_LEFTMETA" "KEY_F2" ];
|
||||
HOLD = "KEY_RIGHTSHIFT";
|
||||
}
|
||||
{
|
||||
KEY = "KEY_RIGHTALT";
|
||||
TAP = "KEY_GRAVE";
|
||||
HOLD = "KEY_RIGHTALT";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user