Add jj.nvim, diffview.nvim, and code-review.nvim with <leader>v (+VCS) and <leader>r (+Review) keybinding groups

This commit is contained in:
2026-03-10 12:32:29 +00:00
parent c53d54865f
commit 82b7c96edf
6 changed files with 268 additions and 11 deletions

View File

@@ -9,6 +9,9 @@
./plugins/harpoon.nix
./plugins/hunk.nix
./plugins/jj-diffconflicts.nix
./plugins/jj-nvim.nix
./plugins/code-review.nix
./plugins/diffview.nix
./plugins/lsp.nix
./plugins/mini.nix
./plugins/oil.nix

View File

@@ -117,23 +117,170 @@
action = ":Pick visit_paths<CR>";
options.desc = "Visit paths (cwd)";
}
# g - git
# v - vcs
{
mode = "n";
key = "<leader>gc";
key = "<leader>va";
action = ":J annotate<CR>";
options.desc = "Annotate (blame)";
}
{
mode = "n";
key = "<leader>vc";
action = ":JJDiffConflicts<CR>";
options.desc = "Resolve conflicts";
}
{
mode = "n";
key = "<leader>gg";
key = "<leader>vd";
action.__raw = ''
function()
require('toggleterm.terminal').Terminal:new({ cmd = 'jjui', direction = 'float' }):toggle()
end
function()
require('jj.cmd').diff()
end
'';
options.desc = "Diff (current file)";
}
{
mode = "n";
key = "<leader>vD";
action = ":DiffviewOpen<CR>";
options.desc = "Diffview (all changes)";
}
{
mode = "n";
key = "<leader>ve";
action.__raw = ''
function()
require('jj.cmd').describe()
end
'';
options.desc = "Describe (edit message)";
}
{
mode = "n";
key = "<leader>vf";
action = ":J fetch<CR>";
options.desc = "Fetch";
}
{
mode = "n";
key = "<leader>vv";
action.__raw = ''
function()
require('toggleterm.terminal').Terminal:new({ cmd = 'jjui', direction = 'float' }):toggle()
end
'';
options.desc = "jjui";
}
{
mode = "n";
key = "<leader>vh";
action = ":DiffviewFileHistory %<CR>";
options.desc = "File history";
}
{
mode = "n";
key = "<leader>vH";
action = ":DiffviewFileHistory<CR>";
options.desc = "Branch history";
}
{
mode = "n";
key = "<leader>vl";
action.__raw = ''
function()
require('jj.cmd').log()
end
'';
options.desc = "Log";
}
{
mode = "n";
key = "<leader>vn";
action.__raw = ''
function()
require('jj.cmd').new()
end
'';
options.desc = "New change";
}
{
mode = "n";
key = "<leader>vp";
action = ":J git push<CR>";
options.desc = "Push";
}
{
mode = "n";
key = "<leader>vq";
action = ":DiffviewClose<CR>";
options.desc = "Close diffview";
}
{
mode = "n";
key = "<leader>vs";
action.__raw = ''
function()
require('jj.cmd').status()
end
'';
options.desc = "Status";
}
# r - review
{
mode = ["n" "v"];
key = "<leader>rc";
action = ":CodeReviewComment<CR>";
options.desc = "Add comment";
}
{
mode = "n";
key = "<leader>rd";
action = ":CodeReviewDeleteComment<CR>";
options.desc = "Delete comment";
}
{
mode = "n";
key = "<leader>rl";
action = ":CodeReviewList<CR>";
options.desc = "List comments";
}
{
mode = "n";
key = "<leader>ro";
action = ":CodeReviewResolve<CR>";
options.desc = "Resolve thread";
}
{
mode = "n";
key = "<leader>rp";
action = ":CodeReviewPreview<CR>";
options.desc = "Preview review";
}
{
mode = "n";
key = "<leader>rr";
action = ":CodeReviewReply<CR>";
options.desc = "Reply to comment";
}
{
mode = "n";
key = "<leader>rs";
action = ":CodeReviewShowComment<CR>";
options.desc = "Show comment";
}
{
mode = "n";
key = "<leader>rx";
action = ":CodeReviewClear<CR>";
options.desc = "Clear all comments";
}
{
mode = "n";
key = "<leader>ry";
action = ":CodeReviewCopy<CR>";
options.desc = "Copy review to clipboard";
}
# l - lsp/formatter
{
mode = "n";

View File

@@ -0,0 +1,37 @@
{pkgs, ...}: let
code-review-nvim =
pkgs.vimUtils.buildVimPlugin {
pname = "code-review-nvim";
version = "unstable-2026-03-10";
src =
pkgs.fetchFromGitHub {
owner = "choplin";
repo = "code-review.nvim";
rev = "ed91462e20bd08c3be71efb11a4a7d00459f0b47";
hash = "sha256-WpbQswkUpB4Nblos8+5UE5I/PHUQOi+RQ+hj4CCdL4o=";
};
doCheck = false;
};
in {
programs.nixvim = {
extraPlugins = [
code-review-nvim
];
extraConfigLua = ''
require('code-review').setup({
comment = {
storage = {
backend = "file",
file = {
dir = ".code-review",
},
},
},
output = {
format = "minimal",
},
keymaps = false,
})
'';
};
}

View File

@@ -0,0 +1,26 @@
{pkgs, ...}: {
programs.nixvim = {
extraPlugins = with pkgs.vimPlugins; [
diffview-nvim
];
extraConfigLua = ''
require('diffview').setup({
enhanced_diff_hl = true,
view = {
default = { layout = "diff2_horizontal" },
merge_tool = { layout = "diff3_mixed", disable_diagnostics = true },
file_history = { layout = "diff2_horizontal" },
},
default_args = {
DiffviewOpen = { "--imply-local" },
},
hooks = {
diff_buf_read = function(bufnr)
vim.opt_local.wrap = false
vim.opt_local.list = false
end,
},
})
'';
};
}

View File

@@ -0,0 +1,42 @@
{pkgs, ...}: let
jj-nvim =
pkgs.vimUtils.buildVimPlugin {
pname = "jj-nvim";
version = "unstable-2026-03-10";
src =
pkgs.fetchFromGitHub {
owner = "NicolasGB";
repo = "jj.nvim";
rev = "bbba4051c862473637e98277f284d12b050588ca";
hash = "sha256-nokftWcAmmHX6UcH6O79xkLwbUpq1W8N9lf1e+NyGqE=";
};
doCheck = false;
};
in {
programs.nixvim = {
extraPlugins = [
jj-nvim
];
extraConfigLua = ''
require('jj').setup({
diff = {
backend = "diffview",
},
cmd = {
describe = {
editor = { type = "buffer" },
},
log = {
close_on_edit = false,
},
},
-- Disable default keymaps we set our own in mappings.nix
ui = {
log = {
keymaps = true,
},
},
})
'';
};
}

View File

@@ -27,11 +27,13 @@
{
{ mode = 'n', keys = '<Leader>e', desc = '+Explore/+Edit' },
{ mode = 'n', keys = '<Leader>f', desc = '+Find' },
{ mode = 'n', keys = '<Leader>g', desc = '+Git' },
{ mode = 'n', keys = '<Leader>l', desc = '+LSP' },
{ mode = 'x', keys = '<Leader>l', desc = '+LSP' },
{ mode = 'n', keys = '<Leader>o', desc = '+OpenCode' },
{ mode = 'x', keys = '<Leader>o', desc = '+OpenCode' },
{ mode = 'n', keys = '<Leader>v', desc = '+VCS' },
{ mode = 'n', keys = '<Leader>l', desc = '+LSP' },
{ mode = 'x', keys = '<Leader>l', desc = '+LSP' },
{ mode = 'n', keys = '<Leader>o', desc = '+OpenCode' },
{ mode = 'x', keys = '<Leader>o', desc = '+OpenCode' },
{ mode = 'n', keys = '<Leader>r', desc = '+Review' },
{ mode = 'v', keys = '<Leader>r', desc = '+Review' },
require("mini.clue").gen_clues.builtin_completion(),
require("mini.clue").gen_clues.g(),
require("mini.clue").gen_clues.marks(),