mirror of
https://github.com/kmein/niveum
synced 2026-03-16 18:21:07 +01:00
137 lines
3.6 KiB
Nix
137 lines
3.6 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
|
|
commaSep = builtins.concatStringsSep ",";
|
|
xkbOptions = [
|
|
"compose:caps"
|
|
"terminate:ctrl_alt_bksp"
|
|
"grp:ctrls_toggle"
|
|
];
|
|
languages = {
|
|
deutsch = {
|
|
code = "de";
|
|
variant = "T3";
|
|
};
|
|
greek = {
|
|
code = "gr";
|
|
variant = "polytonic";
|
|
};
|
|
russian = {
|
|
code = "ru";
|
|
variant = "phonetic";
|
|
};
|
|
arabic = {
|
|
code = "ara";
|
|
variant = "buckwalter";
|
|
}; # ../lib/keyboards/arabic;
|
|
coptic = ../lib/keyboards/coptic;
|
|
avestan = ../lib/keyboards/avestan;
|
|
gothic = ../lib/keyboards/gothic;
|
|
farsi = {
|
|
code = "ir";
|
|
variant = "qwerty";
|
|
};
|
|
syriac = {
|
|
code = "sy";
|
|
variant = "syc_phonetic";
|
|
};
|
|
sanskrit = {
|
|
code = "in";
|
|
variant = "san-kagapa";
|
|
};
|
|
gujarati = {
|
|
code = "in";
|
|
variant = "guj-kagapa";
|
|
};
|
|
urdu = {
|
|
code = "in";
|
|
variant = "urd-phonetic";
|
|
};
|
|
hebrew = {
|
|
code = "il";
|
|
variant = "phonetic";
|
|
};
|
|
};
|
|
defaultLanguage = languages.deutsch;
|
|
in
|
|
{
|
|
services.libinput.enable = true;
|
|
|
|
# man 7 xkeyboard-config
|
|
services.xserver = {
|
|
exportConfiguration = true; # link /usr/share/X11 properly
|
|
xkb.layout = defaultLanguage.code;
|
|
# T3: https://upload.wikimedia.org/wikipedia/commons/a/a9/German-Keyboard-Layout-T3-Version1-large.png
|
|
# buckwalter: http://www.qamus.org/transliteration.htm
|
|
xkb.variant = defaultLanguage.variant;
|
|
xkb.options = commaSep xkbOptions;
|
|
xkb.dir = pkgs.symlinkJoin {
|
|
name = "x-keyboard-directory";
|
|
paths = [
|
|
"${pkgs.xkeyboard_config}/etc/X11/xkb"
|
|
(pkgs.linkFarm "custom-x-keyboards" (
|
|
lib.mapAttrsToList (name: value: {
|
|
name = "symbols/${name}";
|
|
path = value;
|
|
}) (lib.filterAttrs (_: value: !(value ? "code")) languages)
|
|
++ [
|
|
{
|
|
name = "symbols/ir";
|
|
path = ../lib/keyboards/farsi;
|
|
}
|
|
]
|
|
))
|
|
];
|
|
};
|
|
};
|
|
|
|
environment.etc."x11-locale".source = toString pkgs.xorg.libX11 + "share/X11/locale";
|
|
|
|
home-manager.users.me = {
|
|
home.file =
|
|
lib.mapAttrs' (name: path: lib.nameValuePair ".xkb/symbols/${name}" { source = path; })
|
|
(lib.filterAttrs (_: value: !(value ? "code")) languages) // {
|
|
".xkb/symbols/ir".source = ../lib/keyboards/farsi;
|
|
};
|
|
};
|
|
|
|
console.keyMap = "de";
|
|
|
|
environment.systemPackages = lib.mapAttrsToList (
|
|
language: settings:
|
|
let
|
|
code = if settings ? "code" then settings.code else language;
|
|
variant = if settings ? "variant" then settings.variant else "";
|
|
in
|
|
pkgs.writers.writeDashBin "kb-${language}" ''
|
|
if [ -z $SWAYSOCK ]; then
|
|
${pkgs.xorg.setxkbmap}/bin/setxkbmap ${defaultLanguage.code},${code} ${defaultLanguage.variant},${variant} ${
|
|
toString (map (option: "-option ${option}") xkbOptions)
|
|
}
|
|
else
|
|
swaymsg -s $SWAYSOCK 'input * xkb_layout "${defaultLanguage.code},${code}"'
|
|
swaymsg -s $SWAYSOCK 'input * xkb_variant "${defaultLanguage.variant},${variant}"'
|
|
swaymsg -s $SWAYSOCK 'input * xkb_options "${lib.concatStringsSep "," xkbOptions}"'
|
|
fi
|
|
''
|
|
) languages;
|
|
|
|
# improve held key rate
|
|
services.xserver.displayManager.sessionCommands = "${pkgs.xorg.xset}/bin/xset r rate 300 50";
|
|
|
|
systemd.user.services.gxkb = {
|
|
wantedBy = [ "graphical-session.target" ];
|
|
serviceConfig = {
|
|
SyslogIdentifier = "gxkb";
|
|
ExecStart = "${pkgs.gxkb}/bin/gxkb";
|
|
Restart = "always";
|
|
RestartSec = "15s";
|
|
StartLimitBurst = 0;
|
|
};
|
|
};
|
|
}
|