Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

utility/binds/which-key: allow configurable category labels #234

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/release-notes/rl-0.6.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,4 @@ Release notes for release 0.6
[frothymarrow](https://github.com/frothymarrow)

- Added option `vim.luaPackages` to wrap neovim with extra Lua packages.
- `which-key.nvim` categories can now be customized through [vim.binds.which-key.register](vim.binds.which-key.register).
105 changes: 7 additions & 98 deletions modules/utility/binds/which-key/config.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
lib,
...
}: let
inherit (lib) mkIf nvim;
inherit (lib.modules) mkIf;
inherit (lib.strings) optionalString;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryAnywhere;

cfg = config.vim.binds.whichKey;
in {
config = mkIf (cfg.enable) {
vim.startPlugins = ["which-key"];

vim.luaConfigRC.whichkey = nvim.dag.entryAnywhere ''
vim.luaConfigRC.whichkey = entryAnywhere ''
local wk = require("which-key")
wk.setup ({
key_labels = {
Expand All @@ -20,108 +23,14 @@ in {
["<tab>"] = "TAB",
},

${lib.optionalString (config.vim.ui.borders.plugins.which-key.enable) ''
${optionalString (config.vim.ui.borders.plugins.which-key.enable) ''
window = {
border = "${config.vim.ui.borders.plugins.which-key.style}",
},
''}
})

wk.register({
${
if config.vim.tabline.nvimBufferline.enable
then ''
-- Buffer
["<leader>b"] = { name = "+Buffer" },
["<leader>bm"] = { name = "BufferLineMove" },
["<leader>bs"] = { name = "BufferLineSort" },
["<leader>bsi"] = { name = "BufferLineSortById" },
''
else ""
}

${
if config.vim.telescope.enable
then ''
["<leader>f"] = { name = "+Telescope" },
-- Telescope
["<leader>fl"] = { name = "Telescope LSP" },
["<leader>fm"] = { name = "Cellular Automaton" }, -- TODO: mvoe this to its own parent group
["<leader>fv"] = { name = "Telescope Git" },
["<leader>fvc"] = { name = "Commits" },
''
else ""
}

${
if config.vim.lsp.trouble.enable
then ''
-- Trouble
["<leader>lw"] = { name = "Workspace" },
["<leader>x"] = { name = "+Trouble" }, -- TODO: move all trouble binds to the same parent group
["<leader>l"] = { name = "+Trouble" },
''
else ""
}

${
if config.vim.lsp.nvimCodeActionMenu.enable
then ''
-- Parent Groups
["<leader>c"] = { name = "+CodeAction" },
''
else ""
}

${
if config.vim.minimap.codewindow.enable || config.vim.minimap.minimap-vim.enable
then ''
-- Minimap
["<leader>m"] = { name = "+Minimap" }, -- TODO: remap both minimap plugins' keys to be the same
''
else ""
}

${
if config.vim.notes.mind-nvim.enable || config.vim.notes.obsidian.enable || config.vim.notes.orgmode.enable
then ''
-- Notes
["<leader>o"] = { name = "+Notes" },
-- TODO: options for other note taking plugins and their individual binds
-- TODO: move all note-taker binds under leader + o
''
else ""
}

${
# TODO: This probably will need to be reworked for custom-keybinds
if config.vim.filetree.nvimTree.enable
then ''
-- NvimTree
["<leader>t"] = { name = "+NvimTree" },
''
else ""
}

${
if config.vim.git.gitsigns.enable
then ''
-- Git
["<leader>g"] = { name = "+Gitsigns" },
''
else ""
}

${
if config.vim.utility.preview.glow.enable
then ''
-- Markdown
["<leader>pm"] = { name = "+Preview Markdown" },
''
else ""
}

})
wk.register(${toLuaObject cfg.register})
'';
};
}
118 changes: 116 additions & 2 deletions modules/utility/binds/which-key/which-key.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,121 @@
{lib, ...}: let
inherit (lib) mkEnableOption;
{
config,
lib,
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.lists) optionals;
inherit (lib.types) submodule listOf str;
in {
options.vim.binds.whichKey = {
enable = mkEnableOption "which-key keybind helper menu";

register = mkOption {
description = "Register label for which-key keybind helper menu";
type = listOf (submodule {
options = {
keybind = mkOption {
type = str;
description = "Keybind to register";
};
label = mkOption {
type = str;
description = "Label for keybind";
};
};
});
default =
optionals config.vim.tabline.nvimBufferline.enable [
FrothyMarrow marked this conversation as resolved.
Show resolved Hide resolved
{
keybind = "<leader>b";
label = "+Buffer";
}
{
keybind = "<leader>bm";
label = "BufferLineMove";
}
{
keybind = "<leader>bs";
label = "BufferLineSort";
}
{
keybind = "<leader>bsi";
label = "BufferLineSortById";
}
]
++ optionals config.vim.telescope.enable [
{
keybind = "<leader>f";
label = "+Telescope";
}
{
keybind = "<leader>fl";
label = "Telescope LSP";
}
{
keybind = "<leader>fm";
label = "Cellular Automaton";
}
{
keybind = "<leader>fv";
label = "Telescope Git";
}
{
keybind = "<leader>fvc";
label = "Commits";
}
]
++ optionals config.vim.lsp.trouble.enable [
{
keybind = "<leader>lw";
label = "Workspace";
}
{
keybind = "<leader>x";
label = "+Trouble";
}
{
keybind = "<leader>l";
label = "Trouble";
}
]
++ optionals config.vim.lsp.nvimCodeActionMenu.enable [
{
keybind = "<leader>c";
label = "+CodeAction";
}
]
++ optionals (config.vim.minimap.codewindow.enable || config.vim.minimap.minimap-vim.enable) [
{
keybind = "<leader>m";
label = "+Minimap";
}
]
++ optionals (config.vim.notes.mind-nvim.enable || config.vim.notes.obsidian.enable || config.vim.notes.orgmode.enable) [
{
keybind = "<leader>o";
label = "+Notes";
}
]
++ optionals config.vim.filetree.nvimTree.enable [
{
keybind = "<leader>t";
label = "+NvimTree";
}
]
++ optionals config.vim.git.gitsigns.enable [
{
keybind = "<leader>g";
label = "+Gitsigns";
}
]
++ optionals config.vim.utility.preview.glow.enable [
{
keybind = "<leader>pm";
label = "+Preview Markdown";
}
];
apply = map (x: {${x.keybind} = {name = x.label;};});
};
};
}
Loading