summaryrefslogtreecommitdiffstats
path: root/modules/by-name/fi
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/fi')
-rw-r--r--modules/by-name/fi/fish/config/01_show-task.fish20
-rw-r--r--modules/by-name/fi/fish/config/keybindings/00__start.fish1
-rw-r--r--modules/by-name/fi/fish/config/keybindings/01_insert.fish86
-rw-r--r--modules/by-name/fi/fish/config/keybindings/02_command.fish185
-rw-r--r--modules/by-name/fi/fish/config/keybindings/03_visual.fish94
-rw-r--r--modules/by-name/fi/fish/config/keybindings/04_replace.fish9
-rw-r--r--modules/by-name/fi/fish/config/keybindings/05_operator.fish33
-rw-r--r--modules/by-name/fi/fish/config/keybindings/06_replace_one.fish7
-rw-r--r--modules/by-name/fi/fish/config/keybindings/07_others.fish9
-rw-r--r--modules/by-name/fi/fish/config/keybindings/08__end.fish1
-rw-r--r--modules/by-name/fi/fish/keymappings/default.nix99
-rw-r--r--modules/by-name/fi/fish/keymappings/default_mode.nix469
-rw-r--r--modules/by-name/fi/fish/keymappings/insert.nix146
-rw-r--r--modules/by-name/fi/fish/keymappings/operator.nix99
-rw-r--r--modules/by-name/fi/fish/keymappings/visual.nix306
-rw-r--r--modules/by-name/fi/fish/module.nix131
16 files changed, 1695 insertions, 0 deletions
diff --git a/modules/by-name/fi/fish/config/01_show-task.fish b/modules/by-name/fi/fish/config/01_show-task.fish
new file mode 100644
index 00000000..21db1112
--- /dev/null
+++ b/modules/by-name/fi/fish/config/01_show-task.fish
@@ -0,0 +1,20 @@
+#!/usr/bin/env fish
+
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+# Display current tasks
+test -z "$NVIM"; and task next
+
+# Empty the default greeting
+set --global fish_greeting ""
+
+# Set a nice theme
+fish_config theme choose ayu
diff --git a/modules/by-name/fi/fish/config/keybindings/00__start.fish b/modules/by-name/fi/fish/config/keybindings/00__start.fish
new file mode 100644
index 00000000..75227ef1
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/00__start.fish
@@ -0,0 +1 @@
+bind --erase --all
diff --git a/modules/by-name/fi/fish/config/keybindings/01_insert.fish b/modules/by-name/fi/fish/config/keybindings/01_insert.fish
new file mode 100644
index 00000000..984e0e21
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/01_insert.fish
@@ -0,0 +1,86 @@
+bind --preset --mode insert ctrl-y yank
+bind --preset --mode insert alt-y yank-pop
+bind --preset --mode insert right forward-char
+bind --preset --mode insert left backward-char
+bind --preset --mode insert ctrl-right forward-token
+bind --preset --mode insert ctrl-left backward-token
+bind --preset --mode insert pageup beginning-of-history
+bind --preset --mode insert pagedown end-of-history
+bind --preset --mode insert ctrl-x fish_clipboard_copy
+bind --preset --mode insert ctrl-v fish_clipboard_paste
+bind --preset --mode insert tab complete
+bind --preset --mode insert ctrl-i complete
+bind --preset --mode insert ctrl-s pager-toggle-search
+bind --preset --mode insert shift-tab complete-and-search
+bind --preset --mode insert shift-delete history-delete or backward-delete-char
+bind --preset --mode insert down down-or-search
+bind --preset --mode insert up up-or-search
+bind --preset --mode insert shift-right forward-bigword
+bind --preset --mode insert shift-left backward-bigword
+bind --preset --mode insert alt-b prevd-or-backward-word
+bind --preset --mode insert alt-f nextd-or-forward-word
+bind --preset --mode insert alt-right nextd-or-forward-word
+bind --preset --mode insert \e\[1\;9C nextd-or-forward-word
+bind --preset --mode insert alt-left prevd-or-backward-word
+bind --preset --mode insert \e\[1\;9D prevd-or-backward-word
+bind --preset --mode insert alt-up history-token-search-backward
+bind --preset --mode insert alt-down history-token-search-forward
+bind --preset --mode insert \e\[1\;9A history-token-search-backward
+bind --preset --mode insert \e\[1\;9B history-token-search-forward
+bind --preset --mode insert alt-. history-token-search-backward
+bind --preset --mode insert alt-l __fish_list_current_token
+bind --preset --mode insert alt-o __fish_preview_current_file
+bind --preset --mode insert alt-w __fish_whatis_current_token
+bind --preset --mode insert ctrl-l 'status test-terminal-feature scroll-content-up && commandline -f scrollback-push' clear-screen
+bind --preset --mode insert ctrl-c clear-commandline
+bind --preset --mode insert ctrl-u backward-kill-line
+bind --preset --mode insert ctrl-k kill-line
+bind --preset --mode insert ctrl-w backward-kill-path-component
+bind --preset --mode insert end end-of-line
+bind --preset --mode insert home beginning-of-line
+bind --preset --mode insert alt-d 'if test "$(commandline; printf .)" = \\n.; __fish_echo dirh; else; commandline -f kill-word; end'
+bind --preset --mode insert ctrl-d delete-or-exit
+bind --preset --mode insert alt-s 'for cmd in sudo doas please run0; if command -q $cmd; fish_commandline_prepend $cmd; break; end; end'
+bind --preset --mode insert f1 __fish_man_page
+bind --preset --mode insert alt-h __fish_man_page
+bind --preset --mode insert alt-p __fish_paginate
+bind --preset --mode insert alt-# __fish_toggle_comment_commandline
+
+bind --preset --mode insert ctrl-e edit_command_buffer
+
+bind --preset --mode insert '' self-insert
+bind --preset --mode insert space self-insert expand-abbr
+bind --preset --mode insert \; self-insert expand-abbr
+bind --preset --mode insert \| self-insert expand-abbr
+bind --preset --mode insert \& self-insert expand-abbr
+bind --preset --mode insert \> self-insert expand-abbr
+bind --preset --mode insert \< self-insert expand-abbr
+bind --preset --mode insert shift-enter 'commandline -i \\n (commandline --search-field >/dev/null && echo --search-field)' expand-abbr
+bind --preset --mode insert alt-enter 'commandline -i \\n (commandline --search-field >/dev/null && echo --search-field)' expand-abbr
+bind --preset --mode insert \) self-insert expand-abbr
+bind --preset --mode insert ctrl-space 'test -n "$(commandline)" && commandline -i " " (commandline --search-field >/dev/null && echo --search-field)'
+bind --preset --mode insert shift-space 'commandline -i " " (commandline --search-field >/dev/null && echo --search-field)' expand-abbr
+bind --preset --mode insert enter execute
+bind --preset --mode insert ctrl-j execute
+bind --preset --mode insert ctrl-m execute
+bind --preset --mode insert ctrl-enter execute
+
+bind --preset --mode insert ctrl-n accept-autosuggestion
+bind --preset --mode insert delete delete-char
+bind --preset --mode insert backspace backward-delete-char
+bind --preset --mode insert shift-backspace backward-delete-char
+bind --preset --mode insert ctrl-h backward-delete-char
+
+function _bind_insert_escape
+ if commandline -P
+ commandline -f cancel
+ else
+ set fish_bind_mode default
+ if test (count (commandline --cut-at-cursor | tail -c2)) != 2
+ commandline -f backward-char
+ end
+ commandline -f repaint-mode
+ end
+end
+bind --preset --mode insert escape _bind_insert_escape
+bind --preset --mode insert ctrl-\[ _bind_insert_escape
diff --git a/modules/by-name/fi/fish/config/keybindings/02_command.fish b/modules/by-name/fi/fish/config/keybindings/02_command.fish
new file mode 100644
index 00000000..7cea46c5
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/02_command.fish
@@ -0,0 +1,185 @@
+bind --preset --mode default h 'fish_vi_run_count backward-char'
+bind --preset --mode default t 'fish_vi_run_count down-or-search'
+bind --preset --mode default n 'fish_vi_run_count up-or-search'
+bind --preset --mode default s 'fish_vi_run_count forward-char'
+bind --preset --mode default left backward-char
+bind --preset --mode default down down-or-search
+bind --preset --mode default up up-or-search
+bind --preset --mode default right forward-char
+
+bind --preset --mode default b 'fish_vi_run_count backward-word'
+bind --preset --mode default B 'fish_vi_run_count backward-bigword'
+bind --preset --mode default g,e 'fish_vi_run_count backward-word-end'
+bind --preset --mode default g,E 'fish_vi_run_count backward-bigword-end'
+bind --preset --mode default w 'fish_vi_run_count forward-word-vi'
+bind --preset --mode default W 'fish_vi_run_count forward-bigword-vi'
+bind --preset --mode default e 'fish_vi_run_count forward-word-end'
+bind --preset --mode default E 'fish_vi_run_count forward-bigword-end'
+
+bind --preset --mode default ctrl-y yank
+bind --preset --mode default alt-y yank-pop
+
+bind --preset --mode default ctrl-v edit_command_buffer
+
+bind --preset --mode default ctrl-right forward-token
+bind --preset --mode default ctrl-left backward-token
+
+# bind --preset --mode default ctrl-v fish_clipboard_paste
+bind --preset --mode default \",\*,y,y fish_clipboard_copy
+bind --preset --mode default \",\*,Y fish_clipboard_copy
+bind --preset --mode default \",+,y,y fish_clipboard_copy
+bind --preset --mode default \",+,Y fish_clipboard_copy
+
+bind --preset --mode default pageup beginning-of-history
+bind --preset --mode default pagedown end-of-history
+bind --preset --mode default ctrl-x fish_vi_dec
+bind --preset --mode default escape 'set -g __fish_vi_count'
+bind --preset --mode default ctrl-\[ 'set -g __fish_vi_count'
+bind --preset --mode default tab complete
+bind --preset --mode default ctrl-i complete
+bind --preset --mode default ctrl-s pager-toggle-search
+bind --preset --mode default shift-tab complete-and-search
+bind --preset --mode default shift-delete history-delete or backward-delete-char
+bind --preset --mode default shift-right forward-bigword
+bind --preset --mode default shift-left backward-bigword
+bind --preset --mode default alt-b prevd-or-backward-word
+bind --preset --mode default alt-f nextd-or-forward-word
+bind --preset --mode default alt-right nextd-or-forward-word
+bind --preset --mode default \e\[1\;9C nextd-or-forward-word
+bind --preset --mode default alt-left prevd-or-backward-word
+bind --preset --mode default \e\[1\;9D prevd-or-backward-word
+bind --preset --mode default alt-up history-token-search-backward
+bind --preset --mode default alt-down history-token-search-forward
+bind --preset --mode default \e\[1\;9A history-token-search-backward
+bind --preset --mode default \e\[1\;9B history-token-search-forward
+bind --preset --mode default alt-. history-token-search-backward
+bind --preset --mode default alt-l __fish_list_current_token
+bind --preset --mode default alt-o __fish_preview_current_file
+bind --preset --mode default alt-w __fish_whatis_current_token
+bind --preset --mode default ctrl-l 'status test-terminal-feature scroll-content-up && commandline -f scrollback-push' clear-screen
+bind --preset --mode default --sets-mode insert ctrl-c clear-commandline repaint-mode
+bind --preset --mode default ctrl-u backward-kill-line
+bind --preset --mode default ctrl-k kill-line
+bind --preset --mode default ctrl-w backward-kill-path-component
+bind --preset --mode default end end-of-line
+bind --preset --mode default home beginning-of-line
+bind --preset --mode default alt-d 'if test "$(commandline; printf .)" = \\n.; __fish_echo dirh; else; commandline -f kill-word; end'
+bind --preset --mode default ctrl-d delete-or-exit
+bind --preset --mode default alt-s 'for cmd in sudo doas please run0; if command -q $cmd; fish_commandline_prepend $cmd; break; end; end'
+bind --preset --mode default f1 __fish_man_page
+bind --preset --mode default alt-h __fish_man_page
+bind --preset --mode default alt-p __fish_paginate
+bind --preset --mode default alt-# __fish_toggle_comment_commandline
+bind --preset --mode default :,q exit
+bind --preset --mode default 1 'fish_vi_arg_digit 1'
+bind --preset --mode default 2 'fish_vi_arg_digit 2'
+bind --preset --mode default 3 'fish_vi_arg_digit 3'
+bind --preset --mode default 4 'fish_vi_arg_digit 4'
+bind --preset --mode default 5 'fish_vi_arg_digit 5'
+bind --preset --mode default 6 'fish_vi_arg_digit 6'
+bind --preset --mode default 7 'fish_vi_arg_digit 7'
+bind --preset --mode default 8 'fish_vi_arg_digit 8'
+bind --preset --mode default 9 'fish_vi_arg_digit 9'
+bind --preset --mode default 0 'if test -n "$__fish_vi_count"; fish_vi_arg_digit 0; else; commandline -f beginning-of-line; end'
+
+
+bind --preset --mode default x __fish_vi_delete_char
+bind --preset --mode default X __fish_vi_backward_delete_char
+
+bind --preset --mode default --sets-mode insert enter execute
+bind --preset --mode default --sets-mode insert ctrl-j execute
+bind --preset --mode default --sets-mode insert ctrl-m execute
+bind --preset --mode default --sets-mode insert o 'set fish_cursor_end_mode exclusive' insert-line-under repaint-mode
+bind --preset --mode default --sets-mode insert O 'set fish_cursor_end_mode exclusive' insert-line-over repaint-mode
+bind --preset --mode default --sets-mode insert i repaint-mode
+bind --preset --mode default --sets-mode insert I beginning-of-line repaint-mode
+bind --preset --mode default --sets-mode insert a 'set fish_cursor_end_mode exclusive' forward-single-char repaint-mode
+bind --preset --mode default --sets-mode insert A 'set fish_cursor_end_mode exclusive' end-of-line repaint-mode
+bind --preset --mode default --sets-mode visual v begin-selection repaint-mode
+bind --preset --mode default g,g beginning-of-buffer
+bind --preset --mode default G end-of-buffer
+bind --preset --mode default \$ end-of-line
+bind --preset --mode default g,\$ end-of-line
+bind --preset --mode default ^ beginning-of-line
+bind --preset --mode default g,^ beginning-of-line
+bind --preset --mode default _ beginning-of-line
+bind --preset --mode default u undo
+bind --preset --mode default ctrl-r redo
+bind --preset --mode default \[ history-token-search-backward
+bind --preset --mode default \] history-token-search-forward
+bind --preset --mode default --sets-mode insert / history-pager repaint-mode
+
+bind --preset --mode default delete delete-char
+bind --preset --mode default backspace backward-char
+bind --preset --mode default ctrl-h backward-char
+bind --preset --mode default d 'fish_vi_start_operator delete'
+bind --preset --mode default c 'fish_vi_start_operator change'
+bind --preset --mode default y 'fish_vi_start_operator yank'
+bind --preset --mode default g,\~ 'fish_vi_start_operator swap-case'
+
+bind --preset --mode default D kill-line
+bind --preset --mode default d,\$ kill-line
+bind --preset --mode default d,^ backward-kill-line
+bind --preset --mode default d,0 backward-kill-line
+bind --preset --mode default d,i,w kill-inner-word
+bind --preset --mode default d,i,W kill-inner-bigword
+bind --preset --mode default d,a,w kill-a-word
+bind --preset --mode default d,a,W kill-a-bigword
+bind --preset --mode default d,i,b jump-till-matching-bracket and jump-till-matching-bracket and begin-selection jump-till-matching-bracket kill-selection end-selection
+bind --preset --mode default d,a,b jump-to-matching-bracket and jump-to-matching-bracket and begin-selection jump-to-matching-bracket kill-selection end-selection
+bind --preset --mode default d,i backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection
+bind --preset --mode default d,a backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection
+bind --preset --mode default d,\; begin-selection repeat-jump kill-selection end-selection
+bind --preset --mode default d,comma begin-selection repeat-jump-reverse kill-selection end-selection
+bind --preset --mode default \~ togglecase-char forward-single-char
+bind --preset --mode default g,u downcase-word
+bind --preset --mode default g,U upcase-word
+bind --preset --mode default J end-of-line delete-char
+bind --preset --mode default K 'man (commandline -t) 2>/dev/null; or echo -n \\a'
+bind --preset --mode default Y kill-whole-line yank
+bind --preset --mode default y,\$ kill-line yank
+bind --preset --mode default y,^ backward-kill-line yank
+bind --preset --mode default y,0 backward-kill-line yank
+bind --preset --mode default y,i,w kill-inner-word yank
+bind --preset --mode default y,i,W kill-inner-bigword yank
+bind --preset --mode default y,a,w kill-a-word yank
+bind --preset --mode default y,a,W kill-a-bigword yank
+bind --preset --mode default y,i,b jump-till-matching-bracket and jump-till-matching-bracket and begin-selection jump-till-matching-bracket fish_vi_yank_selection end-selection
+bind --preset --mode default y,a,b jump-to-matching-bracket and jump-to-matching-bracket and begin-selection jump-to-matching-bracket fish_vi_yank_selection end-selection
+bind --preset --mode default y,i backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump fish_vi_yank_selection end-selection
+bind --preset --mode default y,a backward-jump and repeat-jump-reverse and begin-selection repeat-jump fish_vi_yank_selection end-selection
+bind --preset --mode default % jump-to-matching-bracket
+bind --preset --mode default f forward-jump
+bind --preset --mode default F backward-jump
+# bind --preset --mode default t forward-jump-till
+bind --preset --mode default T backward-jump-till
+bind --preset --mode default \; repeat-jump
+bind --preset --mode default comma repeat-jump-reverse
+bind --preset --mode default p 'set -g fish_cursor_end_mode exclusive' forward-char 'set -g fish_cursor_end_mode inclusive' yank
+bind --preset --mode default P yank
+bind --preset --mode default g,p yank-pop
+bind --preset --mode default \",\*,p 'set -g fish_cursor_end_mode exclusive' forward-char 'set -g fish_cursor_end_mode inclusive' fish_clipboard_paste
+bind --preset --mode default \",\*,P fish_clipboard_paste
+bind --preset --mode default \",+,p 'set -g fish_cursor_end_mode exclusive' forward-char 'set -g fish_cursor_end_mode inclusive' fish_clipboard_paste
+bind --preset --mode default \",+,P fish_clipboard_paste
+
+bind --preset --mode default --sets-mode replace_one r repaint-mode
+bind --preset --mode default --sets-mode replace R repaint-mode
+
+bind --preset --mode default ctrl-a fish_vi_inc
+bind --preset --mode default \# __fish_toggle_comment_commandline
+
+# bind --preset --mode default --sets-mode insert s delete-char repaint-mode
+bind --preset --mode default --sets-mode insert S kill-inner-line repaint-mode
+bind --preset --mode default --sets-mode insert C kill-line repaint-mode
+bind --preset --mode default --sets-mode insert c,\$ kill-line repaint-mode
+bind --preset --mode default --sets-mode insert c,^ backward-kill-line repaint-mode
+bind --preset --mode default --sets-mode insert c,0 backward-kill-line repaint-mode
+bind --preset --mode default --sets-mode insert c,i,w kill-inner-word repaint-mode
+bind --preset --mode default --sets-mode insert c,i,W kill-inner-bigword repaint-mode
+bind --preset --mode default --sets-mode insert c,a,w kill-a-word repaint-mode
+bind --preset --mode default --sets-mode insert c,a,W kill-a-bigword repaint-mode
+bind --preset --mode default --sets-mode insert c,i,b jump-till-matching-bracket and jump-till-matching-bracket and begin-selection jump-till-matching-bracket kill-selection end-selection
+bind --preset --mode default --sets-mode insert c,a,b jump-to-matching-bracket and jump-to-matching-bracket and begin-selection jump-to-matching-bracket kill-selection end-selection
+bind --preset --mode default --sets-mode insert c,i backward-jump-till and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection repaint-mode
+bind --preset --mode default --sets-mode insert c,a backward-jump and repeat-jump-reverse and begin-selection repeat-jump kill-selection end-selection repaint-mode
diff --git a/modules/by-name/fi/fish/config/keybindings/03_visual.fish b/modules/by-name/fi/fish/config/keybindings/03_visual.fish
new file mode 100644
index 00000000..3996549b
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/03_visual.fish
@@ -0,0 +1,94 @@
+bind --preset --mode visual ctrl-y yank
+bind --preset --mode visual alt-y yank-pop
+bind --preset --mode visual right forward-char
+bind --preset --mode visual left backward-char
+bind --preset --mode visual ctrl-right forward-token
+bind --preset --mode visual ctrl-left backward-token
+bind --preset --mode visual pageup beginning-of-history
+bind --preset --mode visual pagedown end-of-history
+bind --preset --mode visual ctrl-x fish_clipboard_copy
+bind --preset --mode visual ctrl-v fish_clipboard_paste
+bind --preset --mode visual --sets-mode default escape end-selection repaint-mode
+bind --preset --mode visual --sets-mode default ctrl-\[ end-selection repaint-mode
+bind --preset --mode visual tab complete
+bind --preset --mode visual ctrl-i complete
+bind --preset --mode visual ctrl-s pager-toggle-search
+bind --preset --mode visual shift-tab complete-and-search
+bind --preset --mode visual shift-delete history-delete or backward-delete-char
+bind --preset --mode visual down down-or-search
+bind --preset --mode visual up up-or-search
+bind --preset --mode visual shift-right forward-bigword
+bind --preset --mode visual shift-left backward-bigword
+bind --preset --mode visual alt-b prevd-or-backward-word
+bind --preset --mode visual alt-f nextd-or-forward-word
+bind --preset --mode visual alt-right nextd-or-forward-word
+bind --preset --mode visual \e\[1\;9C nextd-or-forward-word
+bind --preset --mode visual alt-left prevd-or-backward-word
+bind --preset --mode visual \e\[1\;9D prevd-or-backward-word
+bind --preset --mode visual alt-up history-token-search-backward
+bind --preset --mode visual alt-down history-token-search-forward
+bind --preset --mode visual \e\[1\;9A history-token-search-backward
+bind --preset --mode visual \e\[1\;9B history-token-search-forward
+bind --preset --mode visual alt-. history-token-search-backward
+bind --preset --mode visual alt-l __fish_list_current_token
+bind --preset --mode visual alt-o __fish_preview_current_file
+bind --preset --mode visual alt-w __fish_whatis_current_token
+bind --preset --mode visual ctrl-l 'status test-terminal-feature scroll-content-up && commandline -f scrollback-push' clear-screen
+bind --preset --mode visual --sets-mode default ctrl-c end-selection repaint-mode
+bind --preset --mode visual ctrl-u backward-kill-line
+bind --preset --mode visual ctrl-k kill-line
+bind --preset --mode visual ctrl-w backward-kill-path-component
+bind --preset --mode visual end end-of-line
+bind --preset --mode visual home beginning-of-line
+bind --preset --mode visual alt-d 'if test "$(commandline; printf .)" = \\n.; __fish_echo dirh; else; commandline -f kill-word; end'
+bind --preset --mode visual ctrl-d delete-or-exit
+bind --preset --mode visual alt-s 'for cmd in sudo doas please run0; if command -q $cmd; fish_commandline_prepend $cmd; break; end; end'
+bind --preset --mode visual f1 __fish_man_page
+bind --preset --mode visual alt-h __fish_man_page
+bind --preset --mode visual alt-p __fish_paginate
+bind --preset --mode visual alt-# __fish_toggle_comment_commandline
+bind --preset --mode visual alt-e edit_command_buffer
+bind --preset --mode visual alt-v edit_command_buffer
+
+bind --preset --mode visual h backward-char
+bind --preset --mode visual l forward-char
+bind --preset --mode visual k up-line
+bind --preset --mode visual j down-line
+bind --preset --mode visual b backward-word
+bind --preset --mode visual B backward-bigword
+bind --preset --mode visual g,e backward-word-end
+bind --preset --mode visual g,E backward-bigword-end
+bind --preset --mode visual w forward-word-vi
+bind --preset --mode visual W forward-bigword-vi
+bind --preset --mode visual e forward-word-end
+bind --preset --mode visual E forward-bigword-end
+bind --preset --mode visual o swap-selection-start-stop repaint-mode
+bind --preset --mode visual % jump-to-matching-bracket
+bind --preset --mode visual f forward-jump
+bind --preset --mode visual t forward-jump-till
+bind --preset --mode visual F backward-jump
+bind --preset --mode visual T backward-jump-till
+bind --preset --mode visual \; repeat-jump
+bind --preset --mode visual comma repeat-jump-reverse
+bind --preset --mode visual \$ end-of-line
+bind --preset --mode visual g,\$ end-of-line
+bind --preset --mode visual ^ beginning-of-line
+bind --preset --mode visual 0 beginning-of-line
+bind --preset --mode visual g,^ beginning-of-line
+bind --preset --mode visual _ beginning-of-line
+
+bind --preset --mode visual --sets-mode default v end-selection repaint-mode
+bind --preset --mode visual --sets-mode insert i end-selection repaint-mode
+bind --preset --mode visual --sets-mode insert I end-selection beginning-of-line repaint-mode
+bind --preset --mode visual --sets-mode insert c kill-selection end-selection repaint-mode
+bind --preset --mode visual --sets-mode insert s kill-selection end-selection repaint-mode
+bind --preset --mode visual --sets-mode default d kill-selection end-selection backward-char repaint-mode
+bind --preset --mode visual --sets-mode default x kill-selection end-selection repaint-mode
+bind --preset --mode visual --sets-mode default X kill-whole-line end-selection repaint-mode
+bind --preset --mode visual --sets-mode default y fish_vi_yank_selection end-selection repaint-mode
+bind --preset --mode visual --sets-mode default \",\*,y 'fish_clipboard_copy; commandline -f end-selection repaint-mode'
+bind --preset --mode visual --sets-mode default \",+,y 'fish_clipboard_copy; commandline -f end-selection repaint-mode'
+bind --preset --mode visual --sets-mode default \~ togglecase-selection end-selection repaint-mode
+bind --preset --mode visual --sets-mode default g,u downcase-selection end-selection repaint-mode
+bind --preset --mode visual --sets-mode default g,U upcase-selection end-selection repaint-mode
+bind --preset --mode visual \# __fish_toggle_comment_commandline
diff --git a/modules/by-name/fi/fish/config/keybindings/04_replace.fish b/modules/by-name/fi/fish/config/keybindings/04_replace.fish
new file mode 100644
index 00000000..95de4cc0
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/04_replace.fish
@@ -0,0 +1,9 @@
+bind --preset --mode replace '' delete-char self-insert
+bind --preset --mode replace --sets-mode insert enter execute repaint-mode
+bind --preset --mode replace --sets-mode insert ctrl-j execute repaint-mode
+bind --preset --mode replace --sets-mode insert ctrl-m execute repaint-mode
+bind --preset --mode replace --sets-mode default escape cancel repaint-mode
+bind --preset --mode replace --sets-mode default ctrl-\[ cancel repaint-mode
+bind --preset --mode replace backspace backward-char
+bind --preset --mode replace shift-backspace backward-char
+bind --preset --mode replace \# __fish_toggle_comment_commandline
diff --git a/modules/by-name/fi/fish/config/keybindings/05_operator.fish b/modules/by-name/fi/fish/config/keybindings/05_operator.fish
new file mode 100644
index 00000000..67f84d82
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/05_operator.fish
@@ -0,0 +1,33 @@
+bind --preset --mode operator \; 'fish_vi_exec_motion repeat-jump'
+bind --preset --mode operator comma 'fish_vi_exec_motion repeat-jump-reverse'
+bind --preset --mode operator d 'fish_vi_exec_motion --linewise'
+bind --preset --mode operator c 'fish_vi_exec_motion --linewise'
+bind --preset --mode operator y 'fish_vi_exec_motion --linewise'
+bind --preset --mode operator \~ 'fish_vi_exec_motion --linewise'
+
+bind --preset --mode operator escape fish_vi_operator_cancel
+bind --preset --mode operator ctrl-\[ fish_vi_operator_cancel
+bind --preset --mode operator 1 'fish_vi_arg_digit 1'
+bind --preset --mode operator 2 'fish_vi_arg_digit 2'
+bind --preset --mode operator 3 'fish_vi_arg_digit 3'
+bind --preset --mode operator 4 'fish_vi_arg_digit 4'
+bind --preset --mode operator 5 'fish_vi_arg_digit 5'
+bind --preset --mode operator 6 'fish_vi_arg_digit 6'
+bind --preset --mode operator 7 'fish_vi_arg_digit 7'
+bind --preset --mode operator 8 'fish_vi_arg_digit 8'
+bind --preset --mode operator 9 'fish_vi_arg_digit 9'
+bind --preset --mode operator 0 'fish_vi_exec_motion beginning-of-line'
+bind --preset --mode operator h 'fish_vi_exec_motion backward-char'
+bind --preset --mode operator l 'fish_vi_exec_motion forward-char'
+bind --preset --mode operator k 'fish_vi_exec_motion up-line'
+bind --preset --mode operator j 'fish_vi_exec_motion down-line'
+bind --preset --mode operator b 'fish_vi_exec_motion backward-word'
+bind --preset --mode operator B 'fish_vi_exec_motion backward-bigword'
+bind --preset --mode operator g,e 'fish_vi_exec_motion backward-word-end'
+bind --preset --mode operator g,E 'fish_vi_exec_motion backward-bigword-end'
+bind --preset --mode operator w 'fish_vi_exec_motion forward-word-vi'
+bind --preset --mode operator W 'fish_vi_exec_motion forward-bigword-vi'
+bind --preset --mode operator e 'fish_vi_exec_motion forward-word-end'
+bind --preset --mode operator E 'fish_vi_exec_motion forward-bigword-end'
+bind --preset --mode operator ^ 'fish_vi_exec_motion beginning-of-line'
+bind --preset --mode operator \$ 'fish_vi_exec_motion end-of-line'
diff --git a/modules/by-name/fi/fish/config/keybindings/06_replace_one.fish b/modules/by-name/fi/fish/config/keybindings/06_replace_one.fish
new file mode 100644
index 00000000..0d2672b4
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/06_replace_one.fish
@@ -0,0 +1,7 @@
+bind --preset --mode replace_one --sets-mode default '' 'set -g fish_cursor_end_mode exclusive' delete-char self-insert backward-char repaint-mode 'set -g fish_cursor_end_mode inclusive'
+bind --preset --mode replace_one --sets-mode default enter 'set -g fish_cursor_end_mode exclusive' 'commandline -f delete-char; commandline -i \\n; commandline -f backward-char' repaint-mode 'set -g fish_cursor_end_mode inclusive'
+bind --preset --mode replace_one --sets-mode default ctrl-j 'set -g fish_cursor_end_mode exclusive' 'commandline -f delete-char; commandline -i \\n; commandline -f backward-char' repaint-mode 'set -g fish_cursor_end_mode inclusive'
+bind --preset --mode replace_one --sets-mode default ctrl-m 'set -g fish_cursor_end_mode exclusive' 'commandline -f delete-char; commandline -i \\n; commandline -f backward-char' repaint-mode 'set -g fish_cursor_end_mode inclusive'
+bind --preset --mode replace_one --sets-mode default escape cancel repaint-mode
+bind --preset --mode replace_one --sets-mode default ctrl-\[ cancel repaint-mode
+
diff --git a/modules/by-name/fi/fish/config/keybindings/07_others.fish b/modules/by-name/fi/fish/config/keybindings/07_others.fish
new file mode 100644
index 00000000..99679857
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/07_others.fish
@@ -0,0 +1,9 @@
+bind --preset --mode operator --sets-mode f f ''
+bind --preset --mode operator --sets-mode F F ''
+bind --preset --mode operator --sets-mode t t ''
+bind --preset --mode operator --sets-mode T T ''
+
+bind --preset --mode f '' get-key 'fish_vi_exec_motion commandline --forward-jump=$fish_key' 'set -eg fish_key'
+bind --preset --mode F '' get-key 'fish_vi_exec_motion commandline --backward-jump=$fish_key' 'set -eg fish_key'
+bind --preset --mode t '' get-key 'fish_vi_exec_motion commandline --forward-jump-till=$fish_key' 'set -eg fish_key'
+bind --preset --mode T '' get-key 'fish_vi_exec_motion commandline --backward-jump-till=$fish_key' 'set -eg fish_key'
diff --git a/modules/by-name/fi/fish/config/keybindings/08__end.fish b/modules/by-name/fi/fish/config/keybindings/08__end.fish
new file mode 100644
index 00000000..20efad65
--- /dev/null
+++ b/modules/by-name/fi/fish/config/keybindings/08__end.fish
@@ -0,0 +1 @@
+fish_vi_key_bindings
diff --git a/modules/by-name/fi/fish/keymappings/default.nix b/modules/by-name/fi/fish/keymappings/default.nix
new file mode 100644
index 00000000..6aed6ce4
--- /dev/null
+++ b/modules/by-name/fi/fish/keymappings/default.nix
@@ -0,0 +1,99 @@
+{lib, ...}:
+lib.fix (self: let
+ escPlus = key: ''\e\[${key}'';
+in {
+ "operator" = import ./operator.nix {inherit self;};
+ "insert" = import ./insert.nix {inherit self escPlus;};
+ "default" = import ./default_mode.nix {inherit self escPlus;};
+ "visual" = import ./visual.nix {inherit self escPlus;};
+
+ "T" = {
+ "" = {
+ cmd = self.t."".cmd;
+ };
+ };
+ "f" = {
+ "" = {
+ cmd = self.F."".cmd;
+ };
+ };
+ "F" = {
+ "" = {
+ cmd = [
+ "get-key"
+ "fish_vi_exec_motion commandline --backward-jump=$fish_key"
+ "set -eg fish_key"
+ ];
+ };
+ };
+ "t" = {
+ "" = {
+ cmd = [
+ "get-key"
+ "fish_vi_exec_motion commandline --forward-jump-till=$fish_key"
+ "set -eg fish_key"
+ ];
+ };
+ };
+
+ "replace" = {
+ "#" = {
+ cmd = "__fish_toggle_comment_commandline";
+ };
+ "ctrl-m" = {
+ cmd = ["execute" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "shift-backspace" = {
+ cmd = "backward-char";
+ };
+ "enter" = {
+ cmd = ["execute" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "" = {
+ cmd = ["delete-char" "self-insert"];
+ };
+ "backspace" = {
+ cmd = "backward-char";
+ };
+ "ctrl-j" = {
+ cmd = ["execute" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "ctrl-\\[" = self.replace.escape;
+ "escape" = {
+ cmd = ["cancel" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ };
+ "replace_one" = {
+ "" = {
+ cmd = [
+ "set -g fish_cursor_end_mode exclusive"
+ "delete-char"
+ "self-insert"
+ "backward-char"
+ "repaint-mode"
+ "set -g fish_cursor_end_mode inclusive"
+ ];
+ sets_mode_to = "default";
+ };
+ "enter" = {
+ cmd = [
+ "set -g fish_cursor_end_mode exclusive"
+ ''commandline -f delete-char; commandline -i \n; commandline -f backward-char''
+ "repaint-mode"
+ "set -g fish_cursor_end_mode inclusive"
+ ];
+ sets_mode_to = "default";
+ };
+ "ctrl-j" = self.replace_one.enter;
+ "ctrl-m" = self.replace_one.enter;
+ "ctrl-\\[" = self.replace_one.escape;
+ "escape" = {
+ cmd = ["cancel" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ };
+})
diff --git a/modules/by-name/fi/fish/keymappings/default_mode.nix b/modules/by-name/fi/fish/keymappings/default_mode.nix
new file mode 100644
index 00000000..253e09a5
--- /dev/null
+++ b/modules/by-name/fi/fish/keymappings/default_mode.nix
@@ -0,0 +1,469 @@
+{
+ self,
+ escPlus,
+}: {
+ "up" = {cmd = "up-or-search";};
+ "n" = {cmd = "fish_vi_run_count up-or-search";};
+
+ "down" = {cmd = "down-or-search";};
+ "t" = {cmd = "fish_vi_run_count down-or-search";};
+
+ "right" = {cmd = "forward-char";};
+ "s" = {cmd = "fish_vi_run_count forward-char";};
+
+ "left" = {cmd = "backward-char";};
+ "ctrl-h" = self.default.left;
+ "backspace" = self.default.left;
+ "h" = {cmd = "fish_vi_run_count backward-char";};
+
+ ${escPlus "1;9A"} = self.default."alt-up";
+ "alt-up" = {cmd = "history-token-search-backward";};
+ "alt-." = self.default."alt-up";
+ "[" = self.default."alt-up";
+
+ ${escPlus "1;9B"} = self.default."alt-down";
+ "alt-down" = {cmd = "history-token-search-forward";};
+ "]" = self.default."alt-down";
+
+ ${escPlus "1;9D"} = self.default."alt-left";
+ "alt-left" = {cmd = "prevd-or-backward-word";};
+ "alt-b" = self.default."alt-left";
+
+ ${escPlus "1;9C"} = self.default."alt-right";
+ "alt-right" = {cmd = "nextd-or-forward-word";};
+ "alt-f" = self.default."alt-right";
+
+ "0" = {
+ cmd = ''
+ if test -n "$__fish_vi_count";
+ fish_vi_arg_digit 0;
+ else;
+ commandline -f beginning-of-line;
+ end
+ '';
+ };
+ "1" = {cmd = "fish_vi_arg_digit 1";};
+ "2" = {cmd = "fish_vi_arg_digit 2";};
+ "3" = {cmd = "fish_vi_arg_digit 3";};
+ "4" = {cmd = "fish_vi_arg_digit 4";};
+ "5" = {cmd = "fish_vi_arg_digit 5";};
+ "6" = {cmd = "fish_vi_arg_digit 6";};
+ "7" = {cmd = "fish_vi_arg_digit 7";};
+ "8" = {cmd = "fish_vi_arg_digit 8";};
+ "9" = {cmd = "fish_vi_arg_digit 9";};
+
+ "alt-v" = {cmd = "edit_command_buffer";};
+ "alt-e" = self.default."alt-v";
+
+ "ctrl-a" = {cmd = "fish_vi_inc";};
+ "ctrl-x" = {cmd = "fish_vi_dec";};
+
+ "ctrl-r" = {cmd = "redo";};
+ "u" = {cmd = "undo";};
+
+ "ctrl-l" = {
+ cmd = [
+ "status test-terminal-feature scroll-content-up && commandline -f scrollback-push"
+ "clear-screen"
+ ];
+ };
+ "ctrl-y" = {cmd = "yank";};
+ "ctrl-v" = {cmd = "fish_clipboard_paste";};
+
+ "ctrl-u" = {cmd = "backward-kill-line";};
+ "delete" = {cmd = "delete-char";};
+ "alt-d" = {
+ cmd = ''
+ if test "$(commandline; printf .)" = "\n.";
+ __fish_echo dirh;
+ else;
+ commandline -f kill-word;
+ end
+ '';
+ };
+ "alt-l" = {
+ cmd = "__fish_list_current_token";
+ };
+ "alt-s" = {
+ cmd = ''
+ for cmd in sudo doas please run0;
+ if command -q $cmd;
+ fish_commandline_prepend $cmd;
+ break;
+ end;
+ end
+ '';
+ };
+ "alt-w" = {
+ cmd = "__fish_whatis_current_token";
+ };
+ "end" = {
+ cmd = "end-of-line";
+ };
+ "alt-p" = {
+ cmd = "__fish_paginate";
+ };
+ "alt-h" = {
+ cmd = "__fish_man_page";
+ };
+ "tab" = {
+ cmd = "complete";
+ };
+ "ctrl-d" = {
+ cmd = "delete-or-exit";
+ };
+ "pageup" = {
+ cmd = "beginning-of-history";
+ };
+ "ctrl-w" = {
+ cmd = "backward-kill-path-component";
+ };
+ "alt-y" = {
+ cmd = "yank-pop";
+ };
+ "ctrl-i" = {
+ cmd = "complete";
+ };
+ "ctrl-\\[" = {cmd = "set -g __fish_vi_count";};
+ "home" = {
+ cmd = "beginning-of-line";
+ };
+ "ctrl-s" = {
+ cmd = "pager-toggle-search";
+ };
+ "escape" = {cmd = "set -g __fish_vi_count";};
+ "pagedown" = {
+ cmd = "end-of-history";
+ };
+ "shift-tab" = {
+ cmd = "complete-and-search";
+ };
+ "shift-delete" = {
+ cmd = ["history-delete" "or" "backward-delete-char"];
+ };
+ "ctrl-k" = {
+ cmd = "kill-line";
+ };
+ "ctrl-c" = {
+ cmd = ["clear-commandline" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "alt-o" = {cmd = "__fish_preview_current_file";};
+
+ "x" = {cmd = "__fish_vi_delete_char";};
+ "D" = {cmd = "kill-line";};
+
+ "f" = {cmd = "forward-jump";};
+ "k" = {cmd = "forward-jump-till";};
+ "F" = {cmd = "backward-jump";};
+ "K" = {cmd = "backward-jump-till";};
+
+ "shift-left" = {cmd = "backward-bigword";};
+ "ctrl-left" = {cmd = "backward-token";};
+ "shift-right" = {cmd = "forward-bigword";};
+ "ctrl-right" = {cmd = "forward-token";};
+
+ "e" = {cmd = "fish_vi_run_count forward-word-end";};
+ "E" = {cmd = "fish_vi_run_count forward-bigword-end";};
+ "b" = {cmd = "fish_vi_run_count backward-word";};
+ "B" = {cmd = "fish_vi_run_count backward-bigword";};
+ "W" = {cmd = "fish_vi_run_count forward-bigword-vi";};
+ "w" = {cmd = "fish_vi_run_count forward-word-vi";};
+
+ "g" = {
+ "g" = {cmd = "beginning-of-buffer";};
+ "^" = {cmd = "beginning-of-line";};
+ "~" = {cmd = "fish_vi_start_operator swap-case";};
+ "u" = {cmd = "downcase-word";};
+ "U" = {cmd = "upcase-word";};
+ "$" = {cmd = "end-of-line";};
+ "E" = {cmd = "fish_vi_run_count backward-bigword-end";};
+ "p" = {cmd = "yank-pop";};
+ "e" = {cmd = "fish_vi_run_count backward-word-end";};
+ };
+ "G" = {cmd = "end-of-buffer";};
+
+ "%" = {cmd = "jump-to-matching-bracket";};
+ ";" = {cmd = "repeat-jump";};
+ "P" = {cmd = "yank";};
+ ":" = {
+ "q" = {cmd = "exit";};
+ };
+ "alt-#" = {cmd = "__fish_toggle_comment_commandline";};
+ "S" = {
+ cmd = ["kill-inner-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+
+ "r" = {
+ cmd = "repaint-mode";
+ sets_mode_to = "replace_one";
+ };
+ "f1" = {
+ cmd = "__fish_man_page";
+ };
+ "\"" = {
+ "+" = {
+ "P" = {cmd = "fish_clipboard_paste";};
+ "y" = {
+ "y" = {cmd = "fish_clipboard_copy";};
+ };
+ "p" = {
+ cmd = [
+ "set -g fish_cursor_end_mode exclusive"
+ "forward-char"
+ "set -g fish_cursor_end_mode inclusive"
+ "fish_clipboard_paste"
+ ];
+ };
+ "Y" = {cmd = "fish_clipboard_copy";};
+ };
+ "*" = {
+ "p" = {
+ cmd = [
+ "set -g fish_cursor_end_mode exclusive"
+ "forward-char"
+ "set -g fish_cursor_end_mode inclusive"
+ "fish_clipboard_paste"
+ ];
+ };
+ "P" = {cmd = "fish_clipboard_paste";};
+ "Y" = {cmd = "fish_clipboard_copy";};
+ "y" = {
+ "y" = {cmd = "fish_clipboard_copy";};
+ };
+ };
+ };
+ "~" = {
+ cmd = ["togglecase-char" "forward-single-char"];
+ };
+ "i" = {
+ cmd = "repaint-mode";
+ sets_mode_to = "insert";
+ };
+ "/" = {
+ cmd = ["history-pager" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "a" = {
+ cmd = [
+ "set fish_cursor_end_mode exclusive"
+ "forward-single-char"
+ "repaint-mode"
+ ];
+ sets_mode_to = "insert";
+ };
+ "R" = {
+ cmd = "repaint-mode";
+ sets_mode_to = "replace";
+ };
+ "T" = {cmd = "man (commandline -t) 2>/dev/null; or echo -n \\a";};
+ "o" = {
+ cmd = [
+ "set fish_cursor_end_mode exclusive"
+ "insert-line-under"
+ "repaint-mode"
+ ];
+ sets_mode_to = "insert";
+ };
+ "comma" = {cmd = "repeat-jump-reverse";};
+ "^" = {cmd = "beginning-of-line";};
+ "d" = {
+ "$" = {cmd = "kill-line";};
+ "a" = {
+ "w" = {cmd = "kill-a-word";};
+ "b" = {
+ cmd = [
+ "jump-to-matching-bracket"
+ "and"
+ "jump-to-matching-bracket"
+ "and"
+ "begin-selection"
+ "jump-to-matching-bracket"
+ "kill-selection"
+ "end-selection"
+ ];
+ };
+ "W" = {cmd = "kill-a-bigword";};
+ };
+ "i" = {
+ "w" = {cmd = "kill-inner-word";};
+ "W" = {cmd = "kill-inner-bigword";};
+ "b" = {
+ cmd = [
+ "jump-till-matching-bracket"
+ "and"
+ "jump-till-matching-bracket"
+ "and"
+ "begin-selection"
+ "jump-till-matching-bracket"
+ "kill-selection"
+ "end-selection"
+ ];
+ };
+ };
+ "comma" = {
+ cmd = [
+ "begin-selection"
+ "repeat-jump-reverse"
+ "kill-selection"
+ "end-selection"
+ ];
+ };
+ ";" = {cmd = ["begin-selection" "repeat-jump" "kill-selection" "end-selection"];};
+ "0" = {cmd = "backward-kill-line";};
+ "^" = {cmd = "backward-kill-line";};
+ };
+ "Y" = {cmd = ["kill-whole-line" "yank"];};
+ "J" = {
+ cmd = ["end-of-line" "delete-char"];
+ };
+ "c" = {
+ "^" = {
+ cmd = ["backward-kill-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "w" = {
+ cmd = ["kill-word-vi" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "W" = {
+ cmd = ["kill-bigword-vi" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "i" = {
+ "w" = {
+ cmd = ["kill-inner-word" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "W" = {
+ cmd = ["kill-inner-bigword" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "b" = {
+ cmd = [
+ "jump-till-matching-bracket"
+ "and"
+ "jump-till-matching-bracket"
+ "and"
+ "begin-selection"
+ "jump-till-matching-bracket"
+ "kill-selection"
+ "end-selection"
+ ];
+ sets_mode_to = "insert";
+ };
+ };
+ "a" = {
+ "W" = {
+ cmd = ["kill-a-bigword" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "w" = {
+ cmd = ["kill-a-word" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "b" = {
+ cmd = [
+ "jump-till-matching-bracket"
+ "and"
+ "jump-till-matching-bracket"
+ "and"
+ "begin-selection"
+ "jump-to-matching-bracket"
+ "kill-selection"
+ "end-selection"
+ ];
+ sets_mode_to = "insert";
+ };
+ };
+ "$" = {
+ cmd = ["kill-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "0" = {
+ cmd = ["backward-kill-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ };
+ "C" = {
+ cmd = ["kill-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "_" = {cmd = "beginning-of-line";};
+ "A" = {
+ cmd = [
+ "set fish_cursor_end_mode exclusive"
+ "end-of-line"
+ "repaint-mode"
+ ];
+ sets_mode_to = "insert";
+ };
+ "I" = {
+ cmd = ["beginning-of-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "$" = {cmd = "end-of-line";};
+ "X" = {cmd = "__fish_vi_backward_delete_char";};
+ "y" = {
+ "0" = {cmd = ["backward-kill-line" "yank"];};
+ "i" = {
+ "W" = {cmd = ["kill-inner-bigword" "yank"];};
+ "w" = {cmd = ["kill-inner-word" "yank"];};
+ "b" = {
+ cmd = [
+ "jump-till-matching-bracket"
+ "and"
+ "jump-till-matching-bracket"
+ "and"
+ "begin-selection"
+ "jump-till-matching-bracket"
+ "fish_vi_yank_selection"
+ "end-selection"
+ ];
+ };
+ };
+ "a" = {
+ "W" = {cmd = ["kill-a-bigword" "yank"];};
+ "b" = {
+ cmd = [
+ "jump-till-matching-bracket"
+ "and"
+ "jump-till-matching-bracket"
+ "and"
+ "begin-selection"
+ "jump-to-matching-bracket"
+ "fish_vi_yank_selection"
+ "end-selection"
+ ];
+ };
+ "w" = {cmd = ["kill-a-word" "yank"];};
+ };
+ "^" = {cmd = ["backward-kill-line" "yank"];};
+ "$" = {cmd = ["kill-line" "yank"];};
+ };
+ "p" = {
+ cmd = [
+ "set -g fish_cursor_end_mode exclusive"
+ "forward-char"
+ "set -g fish_cursor_end_mode inclusive"
+ "yank"
+ ];
+ };
+ "#" = {cmd = "__fish_toggle_comment_commandline";};
+ "v" = {
+ cmd = ["begin-selection" "repaint-mode"];
+ sets_mode_to = "visual";
+ };
+ "O" = {
+ cmd = ["set fish_cursor_end_mode exclusive" "insert-line-over" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+
+ "ctrl-m" = self.default.enter;
+ "ctrl-j" = self.default.enter;
+ "enter" = {
+ cmd = "execute";
+ sets_mode_to = "insert";
+ };
+}
diff --git a/modules/by-name/fi/fish/keymappings/insert.nix b/modules/by-name/fi/fish/keymappings/insert.nix
new file mode 100644
index 00000000..587ae531
--- /dev/null
+++ b/modules/by-name/fi/fish/keymappings/insert.nix
@@ -0,0 +1,146 @@
+{
+ self,
+ escPlus,
+}: {
+ ${escPlus "1;9B"} = self.default."${escPlus "1;9B"}";
+ ${escPlus "1;9D"} = self.default."${escPlus "1;9D"}";
+ ${escPlus "1;9C"} = self.default."${escPlus "1;9C"}";
+ ${escPlus "1;9A"} = self.default."${escPlus "1;9A"}";
+ inherit
+ (self.default)
+ "alt-#"
+ "alt-."
+ alt-b
+ alt-d
+ alt-e
+ alt-f
+ alt-h
+ alt-l
+ alt-o
+ alt-p
+ alt-left
+ alt-right
+ alt-down
+ alt-up
+ alt-s
+ alt-v
+ alt-w
+ alt-y
+ ctrl-d
+ ctrl-i
+ ctrl-k
+ ctrl-l
+ ctrl-left
+ ctrl-right
+ ctrl-s
+ ctrl-v
+ ctrl-w
+ ctrl-y
+ delete
+ end
+ f1
+ home
+ right
+ left
+ down
+ up
+ pagedown
+ pageup
+ shift-delete
+ shift-left
+ shift-right
+ shift-tab
+ tab
+ ;
+
+ ">" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "&" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "space" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "ctrl-u" = {
+ cmd = "backward-kill-line";
+ };
+ "shift-backspace" = {
+ cmd = "backward-delete-char";
+ };
+ "alt-enter" = {
+ cmd = [
+ ''commandline -i \n (commandline --search-field >/dev/null && echo --search-field)''
+ "expand-abbr"
+ ];
+ };
+ "ctrl-n" = {
+ cmd = "accept-autosuggestion";
+ };
+ "shift-space" = {
+ cmd = [
+ ''
+ commandline -i " " (commandline --search-field >/dev/null && echo --search-field)
+ ''
+ "expand-abbr"
+ ];
+ };
+ ")" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "ctrl-x" = {
+ cmd = "fish_clipboard_copy";
+ };
+ "<" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "shift-enter" = {
+ cmd = [
+ ''commandline -i \n (commandline --search-field >/dev/null && echo --search-field)''
+ "expand-abbr"
+ ];
+ };
+ "|" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "ctrl-space" = {
+ cmd = ''
+ test -n "$(commandline)"
+ && commandline -i " " (commandline --search-field >/dev/null && echo --search-field)
+ '';
+ };
+ "ctrl-h" = {
+ cmd = "backward-delete-char";
+ };
+ "" = {
+ cmd = "self-insert";
+ };
+ ";" = {
+ cmd = ["self-insert" "expand-abbr"];
+ };
+ "backspace" = {
+ cmd = "backward-delete-char";
+ };
+ "ctrl-c" = {
+ cmd = "clear-commandline";
+ };
+ "escape" = {
+ cmd = ''
+ if commandline -P
+ commandline -f cancel
+ else
+ set fish_bind_mode default
+ if test (count (commandline --cut-at-cursor | tail -c2)) != 2
+ commandline -f backward-char
+ end
+ commandline -f repaint-mode
+ end
+ '';
+ };
+ "ctrl-\\[" = self.insert.escape;
+
+ "enter" = {cmd = self.default."enter".cmd;};
+ "ctrl-j" = self.insert."enter";
+ "ctrl-enter" = self.insert."enter";
+ "ctrl-m" = self.insert."enter";
+}
diff --git a/modules/by-name/fi/fish/keymappings/operator.nix b/modules/by-name/fi/fish/keymappings/operator.nix
new file mode 100644
index 00000000..1d886f58
--- /dev/null
+++ b/modules/by-name/fi/fish/keymappings/operator.nix
@@ -0,0 +1,99 @@
+{self}: {
+ "0" = {
+ cmd = "fish_vi_exec_motion beginning-of-line";
+ };
+ "1" = self.default."1";
+ "2" = self.default."2";
+ "3" = self.default."3";
+ "4" = self.default."4";
+ "5" = self.default."5";
+ "6" = self.default."6";
+ "7" = self.default."7";
+ "8" = self.default."8";
+ "9" = self.default."9";
+
+ "B" = {
+ cmd = "fish_vi_exec_motion backward-bigword";
+ };
+ "escape" = {
+ cmd = "fish_vi_operator_cancel";
+ };
+ "F" = {
+ cmd = "";
+ sets_mode_to = "F";
+ };
+ "d" = {
+ cmd = "fish_vi_exec_motion --linewise";
+ };
+ "e" = {
+ cmd = "fish_vi_exec_motion forward-word-end";
+ };
+ "j" = {
+ cmd = "fish_vi_exec_motion down-line";
+ };
+ "k" = {
+ cmd = "fish_vi_exec_motion up-line";
+ };
+ "h" = {
+ cmd = "fish_vi_exec_motion backward-char";
+ };
+ "E" = {
+ cmd = "fish_vi_exec_motion forward-bigword-end";
+ };
+ "~" = {
+ cmd = "fish_vi_exec_motion --linewise";
+ };
+ "comma" = {
+ cmd = "fish_vi_exec_motion repeat-jump-reverse";
+ };
+ "^" = {
+ cmd = "fish_vi_exec_motion beginning-of-line";
+ };
+ "ctrl-\\[" = {
+ cmd = "fish_vi_operator_cancel";
+ };
+ ";" = {
+ cmd = "fish_vi_exec_motion repeat-jump";
+ };
+ "c" = {
+ cmd = "fish_vi_exec_motion --linewise";
+ };
+ "T" = {
+ cmd = "";
+ sets_mode_to = "T";
+ };
+ "t" = {
+ cmd = "";
+ sets_mode_to = "t";
+ };
+ "W" = {
+ cmd = "fish_vi_exec_motion forward-bigword-vi";
+ };
+ "$" = {
+ cmd = "fish_vi_exec_motion end-of-line";
+ };
+ "g" = {
+ "E" = {
+ cmd = "fish_vi_exec_motion backward-bigword-end";
+ };
+ "e" = {
+ cmd = "fish_vi_exec_motion backward-word-end";
+ };
+ };
+ "w" = {
+ cmd = "fish_vi_exec_motion forward-word-vi";
+ };
+ "b" = {
+ cmd = "fish_vi_exec_motion backward-word";
+ };
+ "y" = {
+ cmd = "fish_vi_exec_motion --linewise";
+ };
+ "l" = {
+ cmd = "fish_vi_exec_motion forward-char";
+ };
+ "f" = {
+ cmd = "";
+ sets_mode_to = "f";
+ };
+}
diff --git a/modules/by-name/fi/fish/keymappings/visual.nix b/modules/by-name/fi/fish/keymappings/visual.nix
new file mode 100644
index 00000000..47c89157
--- /dev/null
+++ b/modules/by-name/fi/fish/keymappings/visual.nix
@@ -0,0 +1,306 @@
+{
+ self,
+ escPlus,
+}: {
+ ${escPlus "1;9A"} = {cmd = "history-token-search-backward";};
+ ${escPlus "1;9B"} = {cmd = "history-token-search-forward";};
+ ${escPlus "1;9C"} = {cmd = "nextd-or-forward-word";};
+ ${escPlus "1;9D"} = {cmd = "prevd-or-backward-word";};
+
+ "alt-down" = {
+ cmd = "history-token-search-forward";
+ };
+ "alt-h" = {
+ cmd = "__fish_man_page";
+ };
+ "l" = {
+ cmd = "forward-char";
+ };
+ "T" = {
+ cmd = "backward-jump-till";
+ };
+ "e" = {
+ cmd = "forward-word-end";
+ };
+ "right" = {
+ cmd = "forward-char";
+ };
+ "t" = {
+ cmd = "forward-jump-till";
+ };
+ "s" = {
+ cmd = ["kill-selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "alt-#" = {
+ cmd = "__fish_toggle_comment_commandline";
+ };
+ "_" = {
+ cmd = "beginning-of-line";
+ };
+ "%" = {
+ cmd = "jump-to-matching-bracket";
+ };
+ "ctrl-s" = {
+ cmd = "pager-toggle-search";
+ };
+ "ctrl-w" = {
+ cmd = "backward-kill-path-component";
+ };
+ "alt-o" = {
+ cmd = "__fish_preview_current_file";
+ };
+ "left" = {
+ cmd = "backward-char";
+ };
+ "shift-left" = {
+ cmd = "backward-bigword";
+ };
+ "alt-p" = {
+ cmd = "__fish_paginate";
+ };
+ "F" = {
+ cmd = "backward-jump";
+ };
+ "ctrl-left" = {
+ cmd = "backward-token";
+ };
+ "b" = {
+ cmd = "backward-word";
+ };
+ "f1" = {
+ cmd = "__fish_man_page";
+ };
+ "shift-delete" = {
+ cmd = ["history-delete" "or" "backward-delete-char"];
+ };
+ "\"" = {
+ "+" = {
+ "y" = {
+ cmd = ["fish_clipboard_copy; commandline -f end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ };
+ "*" = {
+ "y" = {
+ cmd = ["fish_clipboard_copy; commandline -f end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ };
+ };
+ "shift-tab" = {
+ cmd = "complete-and-search";
+ };
+ "alt-b" = {
+ cmd = "prevd-or-backward-word";
+ };
+ "#" = {
+ cmd = "__fish_toggle_comment_commandline";
+ };
+ "~" = {
+ cmd = ["togglecase-selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "y" = {
+ cmd = ["fish_vi_yank_selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "f" = {
+ cmd = "forward-jump";
+ };
+ "x" = {
+ cmd = ["kill-selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "X" = {
+ cmd = ["kill-whole-line" "end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "alt-y" = {
+ cmd = "yank-pop";
+ };
+ "$" = {
+ cmd = "end-of-line";
+ };
+ ";" = {
+ cmd = "repeat-jump";
+ };
+ "W" = {
+ cmd = "forward-bigword-vi";
+ };
+ "w" = {
+ cmd = "forward-word-vi";
+ };
+ "j" = {
+ cmd = "down-line";
+ };
+ "k" = {
+ cmd = "up-line";
+ };
+ "end" = {
+ cmd = "end-of-line";
+ };
+ "down" = {
+ cmd = "down-or-search";
+ };
+ "alt-up" = {
+ cmd = "history-token-search-backward";
+ };
+ "i" = {
+ cmd = ["end-selection" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "g" = {
+ "^" = {
+ cmd = "beginning-of-line";
+ };
+ "e" = {
+ cmd = "backward-word-end";
+ };
+ "$" = {
+ cmd = "end-of-line";
+ };
+ "U" = {
+ cmd = ["upcase-selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "u" = {
+ cmd = ["downcase-selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "E" = {
+ cmd = "backward-bigword-end";
+ };
+ };
+ "I" = {
+ cmd = ["end-selection" "beginning-of-line" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "alt-." = {
+ cmd = "history-token-search-backward";
+ };
+ "home" = {
+ cmd = "beginning-of-line";
+ };
+ "alt-l" = {
+ cmd = "__fish_list_current_token";
+ };
+ "ctrl-x" = {
+ cmd = "fish_clipboard_copy";
+ };
+ "alt-s" = {
+ cmd = ''
+ for cmd in sudo doas please run0;
+ if command -q $cmd;
+ fish_commandline_prepend $cmd;
+ break;
+ end;
+ end
+ '';
+ };
+ "o" = {
+ cmd = ["swap-selection-start-stop" "repaint-mode"];
+ };
+ "pageup" = {
+ cmd = "beginning-of-history";
+ };
+ "ctrl-l" = {
+ cmd = [
+ "status test-terminal-feature scroll-content-up && commandline -f scrollback-push"
+ "clear-screen"
+ ];
+ };
+ "up" = {
+ cmd = "up-or-search";
+ };
+ "ctrl-u" = {
+ cmd = "backward-kill-line";
+ };
+ "h" = {
+ cmd = "backward-char";
+ };
+ "alt-right" = {
+ cmd = "nextd-or-forward-word";
+ };
+ "ctrl-y" = {
+ cmd = "yank";
+ };
+ "v" = {
+ cmd = ["end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "0" = {
+ cmd = "beginning-of-line";
+ };
+ "ctrl-k" = {
+ cmd = "kill-line";
+ };
+ "alt-v" = {
+ cmd = "edit_command_buffer";
+ };
+ "ctrl-v" = {
+ cmd = "fish_clipboard_paste";
+ };
+ "ctrl-i" = {
+ cmd = "complete";
+ };
+ "d" = {
+ cmd = [
+ "kill-selection"
+ "end-selection"
+ "backward-char"
+ "repaint-mode"
+ ];
+ sets_mode_to = "default";
+ };
+ "^" = {
+ cmd = "beginning-of-line";
+ };
+ "alt-f" = {
+ cmd = "nextd-or-forward-word";
+ };
+ "ctrl-right" = {
+ cmd = "forward-token";
+ };
+ "alt-w" = {
+ cmd = "__fish_whatis_current_token";
+ };
+ "shift-right" = {
+ cmd = "forward-bigword";
+ };
+ "E" = {
+ cmd = "forward-bigword-end";
+ };
+ "tab" = {
+ cmd = "complete";
+ };
+ "B" = {
+ cmd = "backward-bigword";
+ };
+ "alt-e" = {
+ cmd = "edit_command_buffer";
+ };
+ "alt-d" = self.default."alt-d";
+ "pagedown" = {
+ cmd = "end-of-history";
+ };
+ "c" = {
+ cmd = ["kill-selection" "end-selection" "repaint-mode"];
+ sets_mode_to = "insert";
+ };
+ "alt-left" = {
+ cmd = "prevd-or-backward-word";
+ };
+ "comma" = {
+ cmd = "repeat-jump-reverse";
+ };
+ "ctrl-d" = {
+ cmd = "delete-or-exit";
+ };
+ "escape" = {
+ cmd = ["end-selection" "repaint-mode"];
+ sets_mode_to = "default";
+ };
+ "ctrl-\\[" = self.visual.escape;
+ "ctrl-c" = self.visual.escape;
+}
diff --git a/modules/by-name/fi/fish/module.nix b/modules/by-name/fi/fish/module.nix
new file mode 100644
index 00000000..4b4cfee1
--- /dev/null
+++ b/modules/by-name/fi/fish/module.nix
@@ -0,0 +1,131 @@
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.programs.fish;
+
+ sourceFile = path: "source ${path}\n";
+
+ extraFiles = builtins.concatStringsSep "\n" (
+ builtins.map (value:
+ if builtins.isPath value
+ then (sourceFile value)
+ else value) (
+ builtins.attrValues cfg.integrations
+ )
+ );
+
+ keymappings_raw = import ./keymappings {inherit lib;};
+ mkBinding = mode: base_key: binding: let
+ sets_mode_to =
+ if binding ? sets_mode_to
+ then "--sets-mode ${binding.sets_mode_to} "
+ else "";
+ in
+ if 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 "${base_key + "," + new_key}" value)
+ binding);
+ mkMode = mode: attr: builtins.concatStringsSep "" (lib.mapAttrsToList (mkBinding mode) attr);
+ keymappings =
+ ''
+ function fish_my_key_bindings
+ fish_vi_key_bindings
+ bind --erase --all --preset
+ ''
+ + builtins.concatStringsSep "\n" (lib.mapAttrsToList mkMode keymappings_raw)
+ + ''
+ end
+ set -g fish_key_bindings fish_my_key_bindings
+ '';
+in {
+ options.soispha.programs.fish = {
+ enable = lib.mkEnableOption "fish";
+
+ integrations = lib.mkOption {
+ type = lib.types.attrsOf (lib.types.either lib.types.path lib.types.str);
+ example = ''
+ {
+ atuin = ./integrations/atuin.fish;
+ }
+ '';
+ default = {};
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ # Ensure that the default shell of the user is actually enabled.
+ programs.fish = {
+ enable = true;
+ package = pkgs.fish-patched;
+ };
+
+ users.users.soispha.shell = config.programs.fish.package;
+
+ home-manager.users.soispha = {
+ home.sessionPath = lib.mkForce [];
+
+ programs.fish = {
+ enable = true;
+
+ package = config.programs.fish.package;
+
+ interactiveShellInit = let
+ start = lib.modules.mkBefore (
+ sourceFile ./config/01_show-task.fish
+ );
+ end = lib.modules.mkAfter keymappings;
+ in
+ lib.modules.mkMerge
+ [
+ start
+
+ extraFiles
+
+ end
+ ];
+ };
+ };
+ };
+}