plasma-manager/modules/shortcuts.nix

58 lines
1.6 KiB
Nix
Raw Normal View History

2022-06-23 02:53:37 +03:00
# Global keyboard shortcuts:
{ config, lib, ... }:
let
cfg = config.programs.plasma;
# Checks if the shortcut is in the "service" group, in which case we need to
# write the values a little differently.
isService = group:
let
startString = "services/";
in
(builtins.substring 0 (builtins.stringLength startString) group) == startString;
2022-06-23 02:53:37 +03:00
# Convert one shortcut into a settings attribute set.
shortcutToConfigValue = group: _action: skey:
2022-06-23 02:53:37 +03:00
let
# Keys are expected to be a list:
keys =
if builtins.isList skey
then
(if ((builtins.length skey) == 0) then [ "none" ] else skey)
2022-06-23 02:53:37 +03:00
else [ skey ];
# Don't allow un-escaped commas:
escape = lib.escape [ "," ];
keysStr = (if ((builtins.length keys) == 1) then (escape (builtins.head keys)) else "\t" + (lib.concatStringsSep "\t" (map escape keys)));
2022-06-23 02:53:37 +03:00
in
(if (isService group) then
keysStr
else
(lib.concatStringsSep "," [
keysStr
"" # List of default keys, not needed.
"" # Display string, not needed.
]));
2022-06-23 02:53:37 +03:00
shortcutsToSettings = groups:
lib.mapAttrs
(group: attrs: (lib.mapAttrs (shortcutToConfigValue group) attrs))
groups;
2022-06-23 02:53:37 +03:00
in
{
options.programs.plasma.shortcuts = lib.mkOption {
type = with lib.types; attrsOf (attrsOf (oneOf [ (listOf str) str ]));
default = { };
description = ''
An attribute set where the keys are application groups and the
values are shortcuts.
'';
};
config = lib.mkIf cfg.enable {
programs.plasma.configFile."kglobalshortcutsrc" =
2022-06-23 02:53:37 +03:00
shortcutsToSettings cfg.shortcuts;
};
}