Skip to content

Commit f3106c2

Browse files
committed
chore(lib): recode keymap function
1 parent 6336b63 commit f3106c2

File tree

5 files changed

+107
-95
lines changed

5 files changed

+107
-95
lines changed

flake.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/default.nix

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,41 +9,53 @@
99
in if lib.isList x then
1010
lua: toRes (generator { inherit name lua; args = x; })
1111
else toRes (generator { inherit name; args = []; lua = x; });
12-
toKeymaps = key: action: { ... } @ options:
13-
lib.pipe [ key action ] [
14-
lib.nixvim.listToUnkeyedAttrs
15-
(x: x // options)
16-
lib.nixvim.toLuaObject
17-
(__raw: { inherit __raw; })
18-
];
19-
toKeymaps' =
20-
key: action: { mode ? "n", ... } @ options: {
21-
inherit key action mode;
22-
options = removeAttrs options [ "mode" ];
23-
};
24-
genToKeymaps' = lib.listToAttrs (map (x: {
25-
name = "${x}Keymap'";
26-
value = a: b: desc:
27-
toKeymaps' a b {
28-
mode = lib.stringToCharacters x;
29-
inherit desc;
12+
op = {
13+
keymap' = key: action: x:
14+
if lib.isString x then modFn (op.keymap' key action) (r: r // {
15+
desc = r.desc or x;
16+
}) else lib.nixvim.toLuaObject {
17+
__raw = lib.nixvim.listToUnkeyedAttrs [ key action ] // x;
18+
};
19+
keymap = key: action: x:
20+
if lib.isString x then modFn (op.keymap key action) (r: r // {
21+
options = r.options or {} // { desc = r.options.desc or x; };
22+
}) else {
23+
inherit key action;
24+
mode = x.mode or "n";
25+
options = removeAttrs x [ "mode" ];
3026
};
31-
}) (lib.splices [ "n" "v" "i" "t" "x" ]));
27+
};
28+
isFunction = x: builtins.isFunction x || x ? __functor;
29+
modFn = fn: fn': x: let
30+
r = fn x;
31+
in if isFunction r then modFn r fn' else fn' r;
32+
mkFn = list: m: fn: lib.listToAttrs (map (x: let
33+
exc = lib.filter (y: x != y) list;
34+
m' = m ++ [x];
35+
in {
36+
name = x;
37+
value = let
38+
f = modFn fn (res: res // {
39+
mode = m';
40+
});
41+
f' = {
42+
__functor = _: f;
43+
} // mkFn exc m' fn;
44+
in if exc == [] then f else f';
45+
}) list);
46+
modes = [ "n" "v" "i" "t" "x" ];
47+
setsMap = lib.listToAttrs (lib.mapAttrsToList (name: fn: {
48+
inherit name;
49+
value = mkFn modes [] op.${name} // {
50+
__functor = _: op.${name};
51+
};
52+
}) op);
3253
in {
33-
nixvim = inputs.nixvim.lib.nixvim.extend (self: super: {
54+
nixvim = inputs.nixvim.lib.nixvim.extend (self: super: setsMap // {
3455
mkLuaFn' = template false;
3556
mkLuaFn = self.mkLuaFn' "";
3657
mkRawFn' = template true;
3758
mkRawFn = self.mkRawFn' "";
38-
inherit toKeymaps toKeymaps';
3959
toLuaObject' = x: if isNull x then "" else self.toLuaObject x;
40-
} // genToKeymaps');
41-
splices = arr:
42-
if arr == [] then []
43-
else
44-
lib.foldl' (acc: curr: let
45-
exclude = lib.filter (x: curr != x) arr;
46-
in acc ++ [
47-
curr
48-
] ++ map (x: curr + x) (lib.splices exclude)) [] arr;
60+
});
4961
}

modules/nixvim/keybindings.nix

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,54 @@
11
{ internal, lib, ... }:
22
let
3-
inherit (lib.nixvim) mkRaw mkRawFn iKeymap' nKeymap' vKeymap' tKeymap' nxKeymap';
3+
inherit (lib.nixvim) mkRaw mkRawFn keymap;
44
in
55
{ config, lib, ... }:
66
{
77
_file = ./keybindings.nix;
88
keymaps = with config.plugins; [
9-
(nKeymap' "<leader>/" "gcc" "toggle comment" // { options.remap = true; })
10-
(vKeymap' "<leader>/" "gc" "toggle comment" // { options.remap = true; })
11-
(iKeymap' "<C-b>" "<ESC>^i" "move beginning of line")
12-
(iKeymap' "<C-e>" "<End>" "move end of line")
13-
(iKeymap' "<C-h>" "<Left>" "move left")
14-
(iKeymap' "<C-l>" "<Right>" "move right")
15-
(iKeymap' "<C-j>" "<Down>" "move down")
16-
(iKeymap' "<C-k>" "<Up>" "move up")
17-
(nKeymap' "<C-h>" "<C-w>h" "switch window left")
18-
(nKeymap' "<C-l>" "<C-w>l" "switch window right")
19-
(nKeymap' "<C-j>" "<C-w>j" "switch window down")
20-
(nKeymap' "<C-k>" "<C-w>k" "switch window up")
21-
(nKeymap' "<Esc>" "<cmd>noh<CR>" "general clear highlights")
22-
(nKeymap' "<C-s>" "<cmd>w<CR>" "general save file")
23-
(nKeymap' "<C-c>" "<cmd>%y+<CR>" "general copy whole file")
24-
(nKeymap' "<leader>n" "<cmd>set nu!<CR>" "toggle line number")
25-
(nKeymap' "<leader>rn" "<cmd>set rnu!<CR>" "toggle relative number")
26-
(nxKeymap' "<leader>fm" (mkRawFn ''require("conform").format { lsp_fallback = true }'') "general format file")
27-
(nKeymap' "<leader>ds" (mkRaw "vim.diagnostic.setloclist") "LSP diagnostic loclist")
9+
(keymap.n "<leader>/" "gcc" "toggle comment" { remap = true; })
10+
(keymap.v "<leader>/" "gc" "toggle comment" { remap = true; })
11+
(keymap.i "<C-b>" "<ESC>^i" "move beginning offline" {})
12+
(keymap.i "<C-e>" "<End>" "move end of line" {})
13+
(keymap.i "<C-h>" "<Left>" "move left" {})
14+
(keymap.i "<C-l>" "<Right>" "move right" {})
15+
(keymap.i "<C-j>" "<Down>" "move down" {})
16+
(keymap.i "<C-k>" "<Up>" "move up" {})
17+
(keymap.n "<C-h>" "<C-w>h" "switch window left" {})
18+
(keymap.n "<C-l>" "<C-w>l" "switch window right" {})
19+
(keymap.n "<C-j>" "<C-w>j" "switch window down" {})
20+
(keymap.n "<C-k>" "<C-w>k" "switch window up" {})
21+
(keymap.n "<Esc>" "<cmd>noh<CR>" "general clear highlights" {})
22+
(keymap.n "<C-s>" "<cmd>w<CR>" "general save file" {})
23+
(keymap.n "<C-c>" "<cmd>%y+<CR>" "general copy whole file" {})
24+
(keymap.n "<leader>n" "<cmd>set nu!<CR>" "toggle line number" {})
25+
(keymap.n "<leader>rn" "<cmd>set rnu!<CR>" "toggle relative number" {})
26+
(keymap.n.x "<leader>fm" (mkRawFn ''require("conform").format { lsp_fallback = true }'') "general format file" {})
27+
(keymap.n "<leader>ds" (mkRaw "vim.diagnostic.setloclist") "LSP diagnostic loclist" {})
2828

2929
# terminal
30-
(tKeymap' "<C-x>" "<C-\\><C-N>" "terminal escape terminal mode")
30+
(keymap.t "<C-x>" "<C-\\><C-N>" "terminal escape terminal mode" {})
3131

3232
# nvimtree
3333
] ++ lib.optionals nvim-tree.enable [
34-
(nKeymap' "<C-n>" "<cmd>NvimTreeToggle<CR>" "nvimtree toggle window")
35-
(nKeymap' "<leader>e" "<cmd>NvimTreeFocus<CR>" "nvimtree focus window")
34+
(keymap.n "<C-n>" "<cmd>NvimTreeToggle<CR>" "nvimtree toggle window" {})
35+
(keymap.n "<leader>e" "<cmd>NvimTreeFocus<CR>" "nvimtree focus window" {})
3636
] ++ lib.optionals telescope.enable [
3737
# telescope
38-
(nKeymap' "<leader>fw" "<cmd>Telescope live_grep<CR>" "telescope live grep")
39-
(nKeymap' "<leader>fb" "<cmd>Telescope buffers<CR>" "telescope find buffers")
40-
(nKeymap' "<leader>fh" "<cmd>Telescope help_tags<CR>" "telescope help page")
41-
(nKeymap' "<leader>ma" "<cmd>Telescope marks<CR>" "telescope find marks")
42-
(nKeymap' ("<leader>f"+"o") "<cmd>Telescope oldfiles<CR>" "telescope find oldfiles")
43-
(nKeymap' "<leader>fz" "<cmd>Telescope current_buffer_fuzzy_find<CR>" "telescope find in current buffer")
44-
(nKeymap' "<leader>cm" "<cmd>Telescope git_commits<CR>" "telescope git commits")
45-
(nKeymap' "<leader>gt" "<cmd>Telescope git_status<CR>" "telescope git status")
46-
(nKeymap' "<leader>pt" "<cmd>Telescope terms<CR>" "telescope pick hidden term")
47-
(nKeymap' "<leader>ff" "<cmd>Telescope find_files<cr>" "telescope find files")
48-
(nKeymap' "<leader>fa" "<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>" "telescope find all files")
38+
(keymap.n "<leader>fw" "<cmd>Telescope live_grep<CR>" "telescope live grep" {})
39+
(keymap.n "<leader>fb" "<cmd>Telescope buffers<CR>" "telescope find buffers" {})
40+
(keymap.n "<leader>fh" "<cmd>Telescope help_tags<CR>" "telescope help page" {})
41+
(keymap.n "<leader>ma" "<cmd>Telescope marks<CR>" "telescope find marks" {})
42+
(keymap.n ("<leader>f"+"o") "<cmd>Telescope oldfiles<CR>" "telescope find oldfiles" {})
43+
(keymap.n "<leader>fz" "<cmd>Telescope current_buffer_fuzzy_find<CR>" "telescope find in current buffer" {})
44+
(keymap.n "<leader>cm" "<cmd>Telescope git_commits<CR>" "telescope git commits" {})
45+
(keymap.n "<leader>gt" "<cmd>Telescope git_status<CR>" "telescope git status" {})
46+
(keymap.n "<leader>pt" "<cmd>Telescope terms<CR>" "telescope pick hidden term" {})
47+
(keymap.n "<leader>ff" "<cmd>Telescope find_files<cr>" "telescope find files" {})
48+
(keymap.n "<leader>fa" "<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>" "telescope find all files" {})
4949
] ++ lib.optionals which-key.enable [
5050
# whichkey
51-
(nKeymap' "<leader>wK" "<cmd>WhichKey <CR>" "whichkey all keymaps")
52-
(nKeymap' "<leader>wk" (mkRawFn ''vim.cmd("WhichKey " .. vim.fn.input "WhichKey: ")'') "whichkey query lookup")
51+
(keymap.n "<leader>wK" "<cmd>WhichKey <CR>" "whichkey all keymaps" {})
52+
(keymap.n "<leader>wk" (mkRawFn ''vim.cmd("WhichKey " .. vim.fn.input "WhichKey: ")'') "whichkey query lookup" {})
5353
];
5454
}

modules/nixvim/lsp.nix

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{ internal, lib, ... }: let
2-
inherit (lib.nixvim) mkRaw mkRawFn nKeymap' nvKeymap' toLuaObject;
2+
inherit (lib.nixvim) mkRaw mkRawFn keymap toLuaObject;
33
in
44
{ lib, config, pkgs, ... }:
55
{
@@ -37,8 +37,8 @@ in
3737
};
3838

3939
keymaps.extra = [
40-
(nvKeymap' "<leader>ca" (mkRaw "vim.lsp.buf.code_action") "Code action")
41-
(nKeymap' "<leader>wl" (mkRawFn ''print(vim.inspect(vim.lsp.buf.list_workspace_folders()))'') "List workspace folders")
40+
(keymap.n.v "<leader>ca" (mkRaw "vim.lsp.buf.code_action") "Code action" {})
41+
(keymap.n "<leader>wl" (mkRawFn ''print(vim.inspect(vim.lsp.buf.list_workspace_folders()))'') "List workspace folders" {})
4242
];
4343

4444
setupWrappers = let

modules/nixvim/options/default.nix

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{ internal, lib, inputs, helpers ? lib.nixvim, ... }:
22
let
3-
inherit (helpers) mkRawFn toLuaObject nKeymap' ntKeymap' toLuaObject';
3+
inherit (helpers) mkRawFn toLuaObject keymap toLuaObject';
44
in
55
{ pkgs, config, lib,... }:
66
let
@@ -108,9 +108,9 @@ in
108108
require('lz.n').trigger_load('blink.cmp')
109109
'';
110110
plugins.lsp.keymaps.extra = [
111-
(nKeymap' "<leader>ra" {
111+
(keymap.n "<leader>ra" {
112112
__raw = ''require "nvchad.lsp.renamer"'';
113-
} "NVRenamer")
113+
} "NVRenamer" {})
114114
];
115115

116116
plugins.blink-cmp.luaConfig.content = lib.mkOverride 60 /* lua */ ''
@@ -130,22 +130,22 @@ in
130130
lz.trigger_load('blink.compat')
131131
'';
132132
keymaps = [
133-
(nKeymap' "<leader>ch" "<cmd>NvCheatsheet<CR>" "toggle nvcheatsheet")
133+
(keymap.n "<leader>ch" "<cmd>NvCheatsheet<CR>" "toggle nvcheatsheet" {})
134134

135135
# tabufline
136-
(nKeymap' "<leader>b" ("<cmd>en" + "ew<CR>") "buffer new")
137-
(nKeymap' "<tab>" (mkRawFn ''require("nvchad.tabufline").next()'') "buffer goto next")
138-
(nKeymap' "<S-tab>" (mkRawFn ''require("nvchad.tabufline").prev()'') "buffer goto prev")
139-
(nKeymap' "<leader>x" (mkRawFn ''require("nvchad.tabufline").close_buffer()'') "buffer close")
140-
(nKeymap' "<leader>th" (mkRawFn ''require("nvchad.themes").open()'') "telescope nvchad themes")
136+
(keymap.n "<leader>b" ("<cmd>en" + "ew<CR>") "buffer new" {})
137+
(keymap.n "<tab>" (mkRawFn ''require("nvchad.tabufline").next()'') "buffer goto next" {})
138+
(keymap.n "<S-tab>" (mkRawFn ''require("nvchad.tabufline").prev()'') "buffer goto prev" {})
139+
(keymap.n "<leader>x" (mkRawFn ''require("nvchad.tabufline").close_buffer()'') "buffer close" {})
140+
(keymap.n "<leader>th" (mkRawFn ''require("nvchad.themes").open()'') "telescope nvchad themes" {})
141141
# new terminals
142-
(nKeymap' "<leader>h" (mkRawFn ''require("nvchad.term").new { pos = "sp" }'') "terminal new horizontal term")
143-
(nKeymap' "<leader>v" (mkRawFn ''require("nvchad.term").new { pos = "vsp" }'') "terminal new vertical term")
142+
(keymap.n "<leader>h" (mkRawFn ''require("nvchad.term").new { pos = "sp" }'') "terminal new horizontal term" {})
143+
(keymap.n "<leader>v" (mkRawFn ''require("nvchad.term").new { pos = "vsp" }'') "terminal new vertical term" {})
144144

145145
# toggleable
146-
(ntKeymap' "<A-v>" (mkRawFn ''require("nvchad.term").toggle { pos = "vsp", id = "vtoggleTerm" }'') "terminal toggleable vertical term")
147-
(ntKeymap' "<A-h>" (mkRawFn ''require("nvchad.term").toggle { pos = "sp", id = "htoggleTerm" }'') "terminal toggleable horizontal term")
148-
(ntKeymap' "<A-i>" (mkRawFn ''require("nvchad.term").toggle { pos = "float", id = "floatTerm" }'') "terminal toggle floating term")
146+
(keymap.n.t "<A-v>" (mkRawFn ''require("nvchad.term").toggle { pos = "vsp", id = "vtoggleTerm" }'') "terminal toggleable vertical term" {})
147+
(keymap.n.t "<A-h>" (mkRawFn ''require("nvchad.term").toggle { pos = "sp", id = "htoggleTerm" }'') "terminal toggleable horizontal term" {})
148+
(keymap.n.t "<A-i>" (mkRawFn ''require("nvchad.term").toggle { pos = "float", id = "floatTerm" }'') "terminal toggle floating term" {})
149149
];
150150
colorscheme = "nvchad";
151151
};

0 commit comments

Comments
 (0)