summaryrefslogtreecommitdiffstats
path: root/modules/by-name/fi/fish/module.nix
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-11-06 18:34:18 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-11-06 19:00:59 +0100
commit530f2452d980a0ab6fafeb994bda5cfd1343df16 (patch)
tree0d7f0263cbf63e40a3749cc2bb50bef4651b8d0d /modules/by-name/fi/fish/module.nix
parentscripts/build.sh: Don't fail if the result symlinks don't exist (diff)
downloadnixos-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 'modules/by-name/fi/fish/module.nix')
-rw-r--r--modules/by-name/fi/fish/module.nix36
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);