aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-24 22:30:47 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-24 22:30:47 +0200
commit421701a975ab6ab71f17fd985103b7699aaf3144 (patch)
tree8ae5336cb767a63f29a602fe7b7ebd5d256dc345
parentmodules/calibre: Init (diff)
downloadnixos-config-421701a975ab6ab71f17fd985103b7699aaf3144.zip
modules/lf/keybinds: Explicitly declare all keybindings
-rw-r--r--modules/by-name/lf/lf/keybindings/default.nix103
-rw-r--r--modules/by-name/lf/lf/module.nix15
2 files changed, 86 insertions, 32 deletions
diff --git a/modules/by-name/lf/lf/keybindings/default.nix b/modules/by-name/lf/lf/keybindings/default.nix
index d7f8eb95..bd4b2a2c 100644
--- a/modules/by-name/lf/lf/keybindings/default.nix
+++ b/modules/by-name/lf/lf/keybindings/default.nix
@@ -11,69 +11,99 @@
uid,
downloadDir,
}: {
- # Remove some defaults
- "'\"'" = null;
- ";" = null;
- "\"'\"" = null;
+ # v o visual-change
+ # v <esc> visual-discard
+ # v o visual-change
+ # v V visual-accept
+
+ "\\!" = "shell-wait";
+ "\\$" = "shell";
+ "\\%" = "shell-pipe";
+ "\\&" = "shell-async";
+ "\\:" = "read";
+
+ "<f-1>" = "help";
+
+ "<left>" = "updir";
+ "<right>" = "open";
+ "<down>" = "down";
+ "<up>" = "up";
+
+ "<c-f>" = "page-down";
+ "<pgdn>" = "page-down";
+ "<pgup>" = "page-up";
+ "<c-b>" = "page-up";
+
+ "[" = "jump-prev";
+ "]" = "jump-next";
+ q = "quit";
# Sorting
- # k = null;
k = {
- n = ":set sortby natural; set info";
- s = ":set sortby size; set info size";
- t = ":set sortby time; set info time";
- a = ":set sortby atime; set info atime";
- c = ":set sortby ctime; set info ctime";
- e = ":set sortby ext; set info";
+ a = ":{{ set sortby atime; set info atime; }}";
+ b = ":{{ set sortby btime; set info btime; }}";
+ c = ":{{ set sortby ctime; set info ctime; }}";
+ e = ":{{ set sortby ext; set info; }}";
+ n = ":{{ set sortby natural; set info; }}";
+ s = ":{{ set sortby size; set info size; }}";
+ t = ":{{ set sortby time; set info time; }}";
+ };
+ z = {
+ a = "set info size:time";
+ h = "set hidden!";
+ n = "set info";
+ r = "set reverse!";
+ s = "set info size";
+ t = "set info time";
};
# Searching
l = "search-next";
L = "search-prev";
+ "/" = "search";
+ "?" = "search-back";
+ F = "find-back";
+ "," = "find-prev";
+
# File edit
- # e = null;
e = {
- e = "\$\$EDITOR \"$f\"";
- s = "\$ nvim -S \"$f\"";
+ e = "\${{ $EDITOR \"$f\" }}";
+ s = "\${{ nvim -S \"$f\" }}";
};
u = "view_file";
- # f = null;
f = {
e = "execute";
l = "follow_link";
};
- # c = null;
c = {
+ h = "chmod";
p = "set_clipboard_path";
s = "stripspace";
- h = "chmod";
};
# Archive Mappings
a = {
- u = "archive_decompress";
a = "archive_compress";
+ u = "archive_decompress";
};
D = {
D = "delete";
};
- # d = null;
d = {
# Trash Mappings
d = "trash";
# Dragon Mapping
+ i = "dragon_individual";
r = "dragon";
s = "dragon_stay";
- i = "dragon_individual";
};
- # j = null;
j = {
c = "trash_clear";
r = "trash_restore";
@@ -86,17 +116,22 @@
s = "open";
# Basic Functions
- "." = "set hidden!";
p = "paste";
x = "cut";
y = "copy";
"<enter>" = "open";
- # m = null;
+ # Selecting
+ v = "invert";
+ V = "visual";
+ "<space>" = ":{{ toggle; down; }}";
+ C = "clear";
+ U = "unselect";
+
m = {
- k = "mk_link";
- f = "mk_file";
d = "mk_directory";
+ f = "mk_file";
+ l = "mk_link";
s = "mk_script";
};
@@ -104,18 +139,24 @@
g = "set_wallpaper";
};
- r = ":rename; cmd-end";
+ r = ":{{ rename; cmd-end; }}";
+ "<c-r>" = "reload";
R = "reload";
- C = "clear";
- U = "unselect";
+ "<c-l>" = "redraw";
+
+ # Change cursor position
+ G = "bottom";
+ H = "high";
+ M = "middle";
# (walking) Movement
w = {
- u = "cd /run/user/${builtins.toString uid}";
- e = "cd /etc";
d = "cd ${downloadDir}";
- t = "cd /tmp";
+ e = "cd /etc";
+ H = "cd ~";
h = "cd_project_root";
+ t = "cd /tmp";
+ u = "cd /run/user/${builtins.toString uid}";
};
g = "cd_lf_make_map";
diff --git a/modules/by-name/lf/lf/module.nix b/modules/by-name/lf/lf/module.nix
index 0a0e193f..4205771e 100644
--- a/modules/by-name/lf/lf/module.nix
+++ b/modules/by-name/lf/lf/module.nix
@@ -14,11 +14,24 @@
shell_library,
system,
lib,
+ libraries,
...
}: let
- commands = import ./commands {inherit pkgs sysLib shell_library system;};
+ real_commands = import ./commands {inherit pkgs sysLib shell_library system;};
keybindings_raw = import ./keybindings {inherit (cfg.keymaps) uid downloadDir;};
+ # NOTE: There is no (easy) way for me to make sure, that the `clearmaps` command is
+ # generated in the lf config before the keymapping commands.
+ # This command injection works around that. <2026-07-21>
+ commands = libraries.extra.warnMerge real_commands {
+ __clearmaps_injection = ''
+ :{{
+ clearmaps
+ }};
+ clearmaps
+ '';
+ } "lf command map";
+
process = prefix: attrs:
lib.mapAttrsToList (name: value:
if (builtins.isAttrs value)