summaryrefslogtreecommitdiffstats
path: root/modules/by-name/fi/fish/module.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/fi/fish/module.nix')
-rw-r--r--modules/by-name/fi/fish/module.nix36
1 files changed, 25 insertions, 11 deletions
diff --git a/modules/by-name/fi/fish/module.nix b/modules/by-name/fi/fish/module.nix
index a0b383b3..7f16fc08 100644
--- a/modules/by-name/fi/fish/module.nix
+++ b/modules/by-name/fi/fish/module.nix
@@ -25,6 +25,30 @@
builtins.attrValues cfg.integrations
)
);
+
+ keymappings_raw = import ./keymappings.nix {inherit lib;};
+ mkBinding = mode: base_key: binding: let
+ sets_mode_to =
+ if 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}
+ ''
+ else
+ builtins.concatStringsSep "" (lib.mapAttrsToList
+ (new_key: value: mkBinding mode "${key + "," + new_key}" value)
+ binding);
+ mkMode = mode: attr: builtins.concatStringsSep "" (lib.mapAttrsToList (mkBinding mode) attr);
+ keymappings =
+ ''
+ bind --erase --all
+ ''
+ + builtins.concatStringsSep "\n" (lib.mapAttrsToList mkMode keymappings_raw);
in {
options.soispha.programs.fish = {
enable = lib.mkEnableOption "fish";
@@ -61,17 +85,7 @@ in {
start = lib.modules.mkBefore (
sourceFile ./config/01_show-task.fish
);
- end = lib.modules.mkAfter (
- sourceFile ./config/keybindings/00__start.fish
- + sourceFile ./config/keybindings/01_insert.fish
- + sourceFile ./config/keybindings/02_command.fish
- + sourceFile ./config/keybindings/03_visual.fish
- + sourceFile ./config/keybindings/04_replace.fish
- + sourceFile ./config/keybindings/05_operator.fish
- + sourceFile ./config/keybindings/06_replace_one.fish
- + sourceFile ./config/keybindings/07_others.fish
- + sourceFile ./config/keybindings/08__end.fish
- );
+ end = lib.modules.mkAfter keymappings;
in
lib.modules.mkMerge
[