Skip to content

Commit b2a7c42

Browse files
committed
feat(neovim): add 'conform', 'gitsigns', 'lazygit', 'mason', 'nvim-lint', 'nvim-lspconfig', 'nvim-surround' and 'trouble' plugins.
1 parent 7ca9c91 commit b2a7c42

9 files changed

+452
-103
lines changed

module/neovim/default.nix

+68-103
Original file line numberDiff line numberDiff line change
@@ -4,113 +4,78 @@
44
lib,
55
unvX,
66
...
7-
}: {
7+
}: let
8+
plugins = [
9+
"alpha-nvim"
10+
"auto-session"
11+
"bufferline"
12+
"codeium"
13+
"comment"
14+
"conform"
15+
"gitsigns"
16+
"indent-blankline"
17+
"lazygit"
18+
"lualine"
19+
"mason"
20+
"nvim-autopairs"
21+
"nvim-cmp"
22+
"nvim-lint"
23+
"nvim-lspconfig"
24+
"nvim-surround"
25+
"nvim-tree"
26+
"nvim-treesitter"
27+
"smart-splits"
28+
"snacks"
29+
"substitute"
30+
"telescope"
31+
"todo-comments"
32+
"tokyonight"
33+
"trouble"
34+
"which-key"
35+
"zen-mode"
36+
];
37+
in {
838
home.packages = [
939
pkgs.neovim
1040
];
1141

12-
home.file = {
13-
"neovim/init.lua" = {
14-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/init.lua";
15-
target = ".config/nvim/init.lua";
16-
};
17-
"neovim/lua/core/init.lua" = {
18-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/core/init.lua";
19-
target = ".config/nvim/lua/core/init.lua";
20-
};
21-
"neovim/lua/core/keybinds.lua" = {
22-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/core/keybinds.lua";
23-
target = ".config/nvim/lua/core/keybinds.lua";
24-
};
25-
"neovim/lua/core/options.lua" = {
26-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/core/options.lua";
27-
target = ".config/nvim/lua/core/options.lua";
28-
};
29-
"neovim/lua/plugins/init.lua" = {
30-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/init.lua";
31-
target = ".config/nvim/lua/plugins/init.lua";
32-
};
33-
"neovim/lua/plugins/lazy.lua" = {
34-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/lazy.lua";
35-
target = ".config/nvim/lua/plugins/lazy.lua";
36-
};
37-
"neovim/lua/plugins/specs/alpha-nvim.lua" = {
38-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/alpha-nvim.lua";
39-
target = ".config/nvim/lua/plugins/specs/alpha-nvim.lua";
40-
};
41-
"neovim/lua/plugins/specs/auto-session.lua" = {
42-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/auto-session.lua";
43-
target = ".config/nvim/lua/plugins/specs/auto-session.lua";
44-
};
45-
"neovim/lua/plugins/specs/bufferline.lua" = {
46-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/bufferline.lua";
47-
target = ".config/nvim/lua/plugins/specs/bufferline.lua";
48-
};
49-
"neovim/lua/plugins/specs/codeium.lua" = {
50-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/codeium.lua";
51-
target = ".config/nvim/lua/plugins/specs/codeium.lua";
52-
};
53-
"neovim/lua/plugins/specs/comment.lua" = {
54-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/comment.lua";
55-
target = ".config/nvim/lua/plugins/specs/comment.lua";
56-
};
57-
"neovim/lua/plugins/specs/indent-blankline.lua" = {
58-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/indent-blankline.lua";
59-
target = ".config/nvim/lua/plugins/specs/indent-blankline.lua";
60-
};
61-
"neovim/lua/plugins/specs/lualine.lua" = {
62-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/lualine.lua";
63-
target = ".config/nvim/lua/plugins/specs/lualine.lua";
64-
};
65-
"neovim/lua/plugins/specs/nvim-autopairs.lua" = {
66-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/nvim-autopairs.lua";
67-
target = ".config/nvim/lua/plugins/specs/nvim-autopairs.lua";
68-
};
69-
"neovim/lua/plugins/specs/nvim-cmp.lua" = {
70-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/nvim-cmp.lua";
71-
target = ".config/nvim/lua/plugins/specs/nvim-cmp.lua";
72-
};
73-
"neovim/lua/plugins/specs/nvim-tree.lua" = {
74-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/nvim-tree.lua";
75-
target = ".config/nvim/lua/plugins/specs/nvim-tree.lua";
76-
};
77-
"neovim/lua/plugins/specs/nvim-treesitter.lua" = {
78-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/nvim-treesitter.lua";
79-
target = ".config/nvim/lua/plugins/specs/nvim-treesitter.lua";
80-
};
81-
"neovim/lua/plugins/specs/smart-splits.lua" = {
82-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/smart-splits.lua";
83-
target = ".config/nvim/lua/plugins/specs/smart-splits.lua";
84-
};
85-
"neovim/lua/plugins/specs/snacks.lua" = {
86-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/snacks.lua";
87-
target = ".config/nvim/lua/plugins/specs/snacks.lua";
88-
};
89-
"neovim/lua/plugins/specs/substitute.lua" = {
90-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/substitute.lua";
91-
target = ".config/nvim/lua/plugins/specs/substitute.lua";
92-
};
93-
"neovim/lua/plugins/specs/telescope.lua" = {
94-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/telescope.lua";
95-
target = ".config/nvim/lua/plugins/specs/telescope.lua";
96-
};
97-
"neovim/lua/plugins/specs/todo-comments.lua" = {
98-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/todo-comments.lua";
99-
target = ".config/nvim/lua/plugins/specs/todo-comments.lua";
100-
};
101-
"neovim/lua/plugins/specs/tokyonight.lua" = {
102-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/tokyonight.lua";
103-
target = ".config/nvim/lua/plugins/specs/tokyonight.lua";
104-
};
105-
"neovim/lua/plugins/specs/which-key.lua" = {
106-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/which-key.lua";
107-
target = ".config/nvim/lua/plugins/specs/which-key.lua";
108-
};
109-
"neovim/lua/plugins/specs/zen-mode.lua" = {
110-
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/zen-mode.lua";
111-
target = ".config/nvim/lua/plugins/specs/zen-mode.lua";
112-
};
113-
};
42+
home.file =
43+
{
44+
"neovim/init.lua" = {
45+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/init.lua";
46+
target = ".config/nvim/init.lua";
47+
};
48+
"neovim/lua/core/init.lua" = {
49+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/core/init.lua";
50+
target = ".config/nvim/lua/core/init.lua";
51+
};
52+
"neovim/lua/core/keybinds.lua" = {
53+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/core/keybinds.lua";
54+
target = ".config/nvim/lua/core/keybinds.lua";
55+
};
56+
"neovim/lua/core/options.lua" = {
57+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/core/options.lua";
58+
target = ".config/nvim/lua/core/options.lua";
59+
};
60+
"neovim/lua/plugins/init.lua" = {
61+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/init.lua";
62+
target = ".config/nvim/lua/plugins/init.lua";
63+
};
64+
"neovim/lua/plugins/lazy.lua" = {
65+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/lazy.lua";
66+
target = ".config/nvim/lua/plugins/lazy.lua";
67+
};
68+
}
69+
// builtins.listToAttrs (map (plugin: {
70+
name = "neovim/lua/plugins/specs/${plugin}.lua";
71+
value =
72+
(plugin: {
73+
source = config.lib.file.mkOutOfStoreSymlink "${unvX.directory.module}/neovim/lua/plugins/specs/${plugin}.lua";
74+
target = ".config/nvim/lua/plugins/specs/${plugin}.lua";
75+
})
76+
plugin;
77+
})
78+
plugins);
11479

11580
home.activation = {
11681
installNeovimPlugins =
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
return {
2+
"stevearc/conform.nvim",
3+
event = { "BufReadPre", "BufNewFile" },
4+
config = function()
5+
local conform = require("conform")
6+
local keymap = vim.keymap
7+
8+
-------------------------------------------------------------------------------
9+
-- Key bindings
10+
-------------------------------------------------------------------------------
11+
12+
keymap.set("n", "<leader>mf", function()
13+
conform.format({
14+
lsp_fallback = true,
15+
async = false,
16+
timeout_ms = 1000,
17+
})
18+
end, { desc = "Format file" })
19+
20+
keymap.set("v", "<leader>mf", function()
21+
conform.format({
22+
lsp_fallback = true,
23+
async = false,
24+
timeout_ms = 1000,
25+
})
26+
end, { desc = "Format range" })
27+
28+
-------------------------------------------------------------------------------
29+
-- Options
30+
-------------------------------------------------------------------------------
31+
32+
conform.setup({
33+
formatters_by_ft = {
34+
css = { "prettier" },
35+
graphql = { "prettier" },
36+
html = { "prettier" },
37+
javascript = { "prettier" },
38+
javascriptreact = { "prettier" },
39+
json = { "prettier" },
40+
lua = { "stylua" },
41+
markdown = { "prettier" },
42+
python = { "isort", "black" },
43+
typescript = { "prettier" },
44+
typescriptreact = { "prettier" },
45+
svelte = { "prettier" },
46+
yaml = { "prettier" },
47+
},
48+
})
49+
end,
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
return {
2+
"lewis6991/gitsigns.nvim",
3+
event = { "BufReadPre", "BufNewFile" },
4+
opts = {
5+
on_attach = function(bufnr)
6+
local gs = package.loaded.gitsigns
7+
8+
-------------------------------------------------------------------------------
9+
-- Key bindings
10+
-------------------------------------------------------------------------------
11+
12+
local function map(mode, l, r, desc)
13+
vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc })
14+
end
15+
16+
-- Navigation
17+
map("n", "]h", gs.next_hunk, "Next hunk")
18+
map("n", "[h", gs.prev_hunk, "Previous hunk")
19+
20+
-- Actions
21+
map("n", "<leader>hb", function()
22+
gs.blame_line({ full = true })
23+
end, "Blame line")
24+
map("n", "<leader>hB", gs.toggle_current_line_blame, "Toggle line blame")
25+
map("n", "<leader>hd", gs.diffthis, "Diff this")
26+
map("n", "<leader>hD", function()
27+
gs.diffthis("~")
28+
end, "Diff this ~")
29+
map("n", "<leader>hp", gs.preview_hunk, "Preview hunk")
30+
map("n", "<leader>hs", gs.stage_hunk, "Stage hunk")
31+
map("n", "<leader>hS", gs.stage_buffer, "Stage buffer")
32+
map("n", "<leader>hr", gs.reset_hunk, "Reset hunk")
33+
map("n", "<leader>hR", gs.reset_buffer, "Reset buffer")
34+
map("n", "<leader>hu", gs.undo_stage_hunk, "Undo stage hunk")
35+
36+
map("v", "<leader>hs", function()
37+
gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
38+
end, "Stage hunk")
39+
map("v", "<leader>hr", function()
40+
gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
41+
end, "Reset hunk")
42+
43+
-- Text object
44+
map({ "o", "x" }, "ih", ":<c-u>Gitsigns select_hunk<cr>", "Gitsigns select hunk")
45+
end,
46+
},
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
return {
2+
"kdheepak/lazygit.nvim",
3+
dependencies = {
4+
"nvim-lua/plenary.nvim",
5+
},
6+
cmd = {
7+
"LazyGit",
8+
"LazyGitConfig",
9+
"LazyGitCurrentFile",
10+
"LazyGitFilter",
11+
"LazyGitFilterCurrentFile",
12+
},
13+
keys = {
14+
-------------------------------------------------------------------------------
15+
-- Key bindings
16+
-------------------------------------------------------------------------------
17+
18+
{ "<leader>lg", "<cmd>LazyGit<cr>", desc = "Open lazy git" },
19+
},
20+
}
+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
return {
2+
"williamboman/mason.nvim",
3+
dependencies = {
4+
"williamboman/mason-lspconfig.nvim",
5+
"WhoIsSethDaniel/mason-tool-installer.nvim",
6+
},
7+
config = function()
8+
local mason = require("mason")
9+
local mason_lspconfig = require("mason-lspconfig")
10+
local mason_tool_installer = require("mason-tool-installer")
11+
12+
-------------------------------------------------------------------------------
13+
-- Options
14+
-------------------------------------------------------------------------------
15+
16+
mason.setup({
17+
ui = {
18+
icons = {
19+
package_installed = "",
20+
package_pending = "",
21+
package_uninstalled = "",
22+
},
23+
},
24+
})
25+
26+
mason_lspconfig.setup({
27+
-- LSP servers
28+
ensure_installed = {
29+
"angularls",
30+
"ansiblels",
31+
"bashls",
32+
"clangd",
33+
"cssls",
34+
"dockerls",
35+
"graphql",
36+
"harper_ls",
37+
"intelephense",
38+
"jsonls",
39+
"ltex",
40+
"sqlls",
41+
"svelte",
42+
"tailwindcss",
43+
"terraformls",
44+
"vimls",
45+
"volar",
46+
"yamlls",
47+
},
48+
})
49+
mason_tool_installer.setup({
50+
ensure_installed = {
51+
-- Formaters
52+
"black",
53+
"isort",
54+
"prettier",
55+
"stylua",
56+
-- Linters
57+
"eslint_d",
58+
"pylint",
59+
},
60+
})
61+
end,
62+
}

0 commit comments

Comments
 (0)