diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-11-06 18:34:18 +0100 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-11-06 19:00:59 +0100 |
| commit | 530f2452d980a0ab6fafeb994bda5cfd1343df16 (patch) | |
| tree | 0d7f0263cbf63e40a3749cc2bb50bef4651b8d0d /modules/by-name/fi/fish/module.nix | |
| parent | scripts/build.sh: Don't fail if the result symlinks don't exist (diff) | |
| download | nixos-config-530f2452d980a0ab6fafeb994bda5cfd1343df16.zip | |
modules/fish: Make the defined keybindings actually work
From local testing, these now seem to be (more or less) the same as we
had before.
Diffstat (limited to '')
| -rw-r--r-- | modules/by-name/fi/fish/module.nix | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/modules/by-name/fi/fish/module.nix b/modules/by-name/fi/fish/module.nix index 7f16fc08..6f13e39f 100644 --- a/modules/by-name/fi/fish/module.nix +++ b/modules/by-name/fi/fish/module.nix @@ -30,22 +30,46 @@ mkBinding = mode: base_key: binding: let sets_mode_to = if binding ? sets_mode_to - then "--sets-mode ${binding.sets_mode_to}" + then "--sets-mode ${binding.sets_mode_to} " else ""; - - key = lib.escape ["$" "*"] base_key; in if binding ? cmd - then '' - bind --mode "${mode}" ${sets_mode_to} --preset ${lib.escapeShellArg key} ${lib.escapeShellArg binding.cmd} + then let + mkCmd = cmd: "'${cmd}'"; + escaped_key = + if base_key == "" + then ''""'' + else + lib.escape [ + "\"" + "(" + ")" + "$" + ";" + "*" + "&" + "|" + "~" + "<" + ">" + "^" + ] + base_key; + escaped_cmd = + if builtins.isList binding.cmd + then builtins.concatStringsSep " " (builtins.map mkCmd binding.cmd) + else mkCmd binding.cmd; + in '' + bind --mode "${mode}" ${sets_mode_to}--preset ${escaped_key} ${escaped_cmd} '' else builtins.concatStringsSep "" (lib.mapAttrsToList - (new_key: value: mkBinding mode "${key + "," + new_key}" value) + (new_key: value: mkBinding mode "${base_key + "," + new_key}" value) binding); mkMode = mode: attr: builtins.concatStringsSep "" (lib.mapAttrsToList (mkBinding mode) attr); keymappings = '' + fish_vi_key_bindings bind --erase --all '' + builtins.concatStringsSep "\n" (lib.mapAttrsToList mkMode keymappings_raw); |
