2024-06-25 04:04:39 +03:00
|
|
|
{ pkgs, config, lib, ... }: with lib; let
|
2024-06-30 03:56:48 +03:00
|
|
|
cfg = config.module.keyd;
|
2024-06-25 04:04:39 +03:00
|
|
|
in {
|
|
|
|
options = {
|
2024-06-30 03:56:48 +03:00
|
|
|
module.keyd = {
|
2024-06-25 04:04:39 +03:00
|
|
|
enable = mkEnableOption "Keyboard remaps." // { default = true; };
|
|
|
|
};
|
|
|
|
};
|
2024-05-08 23:42:54 +03:00
|
|
|
|
2024-06-25 04:04:39 +03:00
|
|
|
config = mkIf cfg.enable {
|
|
|
|
environment.systemPackages = with pkgs; [ keyd ];
|
2024-04-24 04:22:34 +03:00
|
|
|
|
2024-06-25 04:04:39 +03:00
|
|
|
services.keyd = {
|
|
|
|
enable = true;
|
|
|
|
keyboards.default = {
|
|
|
|
ids = [ "*" ];
|
|
|
|
settings = {
|
|
|
|
main = {
|
|
|
|
backspace = "delete"; # Delete key on backspace.
|
|
|
|
capslock = "overload(control, esc)"; # Ctrl/esc combo.
|
|
|
|
compose = "layer(layer_number)"; # Number input layer.
|
2024-08-20 20:24:43 +03:00
|
|
|
esc = "print"; # System controls.
|
2024-06-25 04:04:39 +03:00
|
|
|
leftcontrol = "overload(layer_alternative, leftcontrol)"; # Alternative layer for home, end etc.
|
|
|
|
rightcontrol = "layer(layer_control)"; # Media and other controls.
|
|
|
|
rightshift = "backspace"; # Backspace.
|
|
|
|
};
|
2024-04-24 04:22:34 +03:00
|
|
|
|
2024-06-25 04:04:39 +03:00
|
|
|
# Alternative navigation.
|
|
|
|
layer_alternative = {
|
|
|
|
w = "pageup";
|
|
|
|
a = "home";
|
|
|
|
s = "pagedown";
|
|
|
|
d = "end";
|
|
|
|
x = "cut";
|
|
|
|
c = "copy";
|
|
|
|
v = "paste";
|
|
|
|
h = "left";
|
|
|
|
j = "down";
|
|
|
|
k = "up";
|
|
|
|
l = "right";
|
|
|
|
esc = "esc";
|
|
|
|
rightcontrol = "leftcontrol";
|
|
|
|
capslock = "capslock";
|
|
|
|
# space = "macro2(1, 100, macro(space))"; # NOTE: Possible bhop example. Use in per-application, not here.
|
|
|
|
};
|
|
|
|
|
|
|
|
# Media controls.
|
|
|
|
layer_control = {
|
|
|
|
space = "playpause";
|
|
|
|
a = "back";
|
|
|
|
c = "ejectcd";
|
|
|
|
d = "forward";
|
|
|
|
e = "nextsong";
|
|
|
|
q = "previoussong";
|
|
|
|
s = "volumedown";
|
2024-09-03 15:41:41 +03:00
|
|
|
v = "micmute";
|
2024-06-25 04:04:39 +03:00
|
|
|
w = "volumeup";
|
|
|
|
x = "stopcd";
|
|
|
|
z = "mute";
|
|
|
|
};
|
2024-04-24 04:22:34 +03:00
|
|
|
|
2024-06-25 04:04:39 +03:00
|
|
|
# Number inputs.
|
|
|
|
layer_number = {
|
|
|
|
q = "1";
|
|
|
|
w = "2";
|
|
|
|
e = "3";
|
|
|
|
a = "4";
|
|
|
|
s = "5";
|
|
|
|
d = "6";
|
|
|
|
z = "7";
|
|
|
|
x = "8";
|
|
|
|
c = "9";
|
|
|
|
space = "0";
|
|
|
|
"1" = "f13";
|
|
|
|
"2" = "f14";
|
|
|
|
"3" = "f15";
|
|
|
|
"4" = "f16";
|
|
|
|
"5" = "f17";
|
|
|
|
"6" = "f18";
|
|
|
|
"7" = "f19";
|
|
|
|
"8" = "f20";
|
|
|
|
"9" = "f21";
|
|
|
|
"0" = "f22";
|
|
|
|
"-" = "f23";
|
|
|
|
"=" = "f24";
|
|
|
|
enter = "kpenter";
|
|
|
|
};
|
2024-06-04 22:17:06 +03:00
|
|
|
};
|
2024-04-24 03:32:59 +03:00
|
|
|
};
|
|
|
|
};
|
2024-04-24 04:58:58 +03:00
|
|
|
|
2024-06-25 04:04:39 +03:00
|
|
|
# HACK: Workaround for https://github.com/NixOS/nixpkgs/issues/290161
|
|
|
|
users.groups.keyd = {};
|
|
|
|
systemd.services.keyd.serviceConfig.CapabilityBoundingSet = [ "CAP_SETGID" ];
|
2024-05-06 22:11:33 +03:00
|
|
|
|
2024-06-25 04:04:39 +03:00
|
|
|
# Debug toggle just in case I need it again.
|
|
|
|
# systemd.services.keyd.environment.KEYD_DEBUG = "1";
|
|
|
|
};
|
2024-04-24 03:32:59 +03:00
|
|
|
}
|