Skip to content

Commit dd60d9a

Browse files
committed
home/modules: Rewrite neovim module to nvf
1 parent c7a233d commit dd60d9a

File tree

3 files changed

+377
-27
lines changed

3 files changed

+377
-27
lines changed

home/modules/neovim/default.nix

+356-27
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,363 @@ in
1717
};
1818

1919
config = mkIf cfg.enable {
20-
xdg.configFile."nvim" = {
21-
source = "${self}/home/modules/neovim/config";
22-
recursive = true;
23-
};
24-
25-
programs.neovim = {
20+
programs.nvf = {
2621
enable = true;
27-
viAlias = true;
28-
vimAlias = true;
29-
defaultEditor = true;
30-
31-
extraPackages = with pkgs; [
32-
gcc
33-
nodejs_22
34-
ansible-language-server
35-
yaml-language-server
36-
marksman
37-
gopls
38-
dockerfile-language-server-nodejs
39-
docker-compose-language-service
40-
cmake-language-server
41-
helm-ls
42-
nil
43-
nixd
44-
lua-language-server
45-
stylua
46-
pyright
47-
];
22+
23+
settings = {
24+
vim = {
25+
viAlias = true;
26+
vimAlias = true;
27+
28+
withNodeJs = false;
29+
withPython3 = false;
30+
withRuby = false;
31+
32+
enableLuaLoader = true;
33+
enableEditorconfig = true;
34+
useSystemClipboard = true;
35+
hideSearchHighlight = true;
36+
searchCase = "smart";
37+
38+
options = {
39+
mouse = "a";
40+
colorcolumn = "79";
41+
encoding = "utf-8";
42+
fileformat = "unix";
43+
number = true;
44+
relativenumber = true;
45+
swapfile = false;
46+
scrolloff = 7;
47+
tabstop = 2;
48+
shiftwidth = 2;
49+
softtabstop = 2;
50+
expandtab = true;
51+
smartindent = true;
52+
};
53+
54+
globals = {
55+
mapleader = ",";
56+
};
57+
58+
keymaps = [
59+
{
60+
key = "<C-n>";
61+
mode = [ "n" ];
62+
action = ":NvimTreeToggle<CR>";
63+
silent = true;
64+
desc = "Toggle File tree";
65+
}
66+
{
67+
key = "<Tab>";
68+
mode = "n";
69+
action = "<cmd>bnext<CR>";
70+
silent = true;
71+
desc = "Go to next buffer";
72+
}
73+
{
74+
key = "<S-Tab>";
75+
mode = "n";
76+
action = "<cmd>bprevious<CR>";
77+
silent = true;
78+
desc = "Go to previous buffer";
79+
}
80+
{
81+
key = "bd";
82+
mode = "n";
83+
action = "<cmd>bdel<CR>";
84+
silent = true;
85+
desc = "Close current buffer";
86+
}
87+
{
88+
key = ";;";
89+
mode = "n";
90+
action = "<cmd>Telescope<CR>";
91+
silent = true;
92+
}
93+
{
94+
key = ";g";
95+
mode = "n";
96+
action = "<cmd>Telescope live_grep<CR>";
97+
silent = true;
98+
desc = "Grep files";
99+
}
100+
{
101+
key = ";f";
102+
mode = "n";
103+
action = "<cmd>Telescope find_files<CR>";
104+
silent = true;
105+
desc = "Find files";
106+
}
107+
{
108+
key = "<leader>gn";
109+
mode = "n";
110+
action = ":LazyGit<CR>";
111+
silent = true;
112+
desc = "Open LazyGit";
113+
}
114+
{
115+
key = "<C-a>";
116+
mode = "n";
117+
action = "gg<S-v>G";
118+
silent = true;
119+
desc = "Select all";
120+
}
121+
];
122+
123+
extraLuaFiles = [
124+
"${self}/home/modules/neovim/lua/autocmds.lua"
125+
"${self}/home/modules/neovim/lua/rulayout.lua"
126+
];
127+
128+
autopairs.nvim-autopairs.enable = true;
129+
autocomplete.nvim-cmp.enable = true;
130+
telescope.enable = true;
131+
statusline.lualine.enable = true;
132+
comments.comment-nvim.enable = true;
133+
git.gitsigns.enable = true;
134+
135+
lsp = {
136+
enable = true;
137+
lsplines.enable = true;
138+
};
139+
140+
languages = {
141+
enableLSP = true;
142+
enableFormat = true;
143+
enableTreesitter = true;
144+
enableExtraDiagnostics = true;
145+
146+
rust.enable = true;
147+
nix.enable = true;
148+
sql.enable = true;
149+
clang.enable = true;
150+
ts.enable = true;
151+
python.enable = true;
152+
zig.enable = true;
153+
markdown.enable = true;
154+
html.enable = true;
155+
dart.enable = true;
156+
go.enable = true;
157+
lua.enable = true;
158+
};
159+
160+
theme = {
161+
enable = true;
162+
name = "nord";
163+
};
164+
165+
notify.nvim-notify = {
166+
enable = true;
167+
168+
setupOpts = {
169+
render = "minimal";
170+
stages = "static";
171+
};
172+
};
173+
174+
spellcheck = {
175+
enable = true;
176+
languages = [ "en" ];
177+
};
178+
179+
utility = {
180+
preview.markdownPreview = {
181+
enable = true;
182+
};
183+
};
184+
185+
mini = {
186+
icons.enable = true;
187+
188+
tabline = {
189+
enable = true;
190+
191+
setupOpts = {
192+
show_icons = true;
193+
};
194+
};
195+
};
196+
197+
visuals = {
198+
indent-blankline.enable = true;
199+
};
200+
201+
ui = {
202+
noice.enable = true;
203+
204+
borders = {
205+
enable = true;
206+
globalStyle = "rounded";
207+
208+
plugins.nvim-cmp.enable = false;
209+
};
210+
211+
smartcolumn = {
212+
enable = true;
213+
214+
setupOpts.custom_colorcolumn = {
215+
nix = "110";
216+
rust = "120";
217+
};
218+
};
219+
};
220+
221+
filetree = {
222+
nvimTree = {
223+
enable = true;
224+
openOnSetup = false;
225+
226+
setupOpts = {
227+
sync_root_with_cwd = true;
228+
respect_buf_cwd = true;
229+
update_focused_file = {
230+
enable = true;
231+
update_root = true;
232+
};
233+
234+
sort_by = "case_sensitive";
235+
236+
view = {
237+
number = false;
238+
float = {
239+
enable = true;
240+
open_win_config = lib.generators.mkLuaInline ''
241+
function()
242+
local screen_w = vim.opt.columns:get()
243+
local screen_h = vim.opt.lines:get() - vim.opt.cmdheight:get()
244+
local window_w = screen_w * 0.5
245+
local window_h = screen_h * 0.8
246+
local window_w_int = math.floor(window_w)
247+
local window_h_int = math.floor(window_h)
248+
local center_x = (screen_w - window_w) / 2
249+
local center_y = ((vim.opt.lines:get() - window_h) / 2) - vim.opt.cmdheight:get()
250+
return {
251+
border = "rounded",
252+
relative = "editor",
253+
row = center_y,
254+
col = center_x,
255+
width = window_w_int,
256+
height = window_h_int,
257+
}
258+
end
259+
'';
260+
};
261+
262+
width = lib.generators.mkLuaInline ''
263+
function()
264+
return math.floor(vim.opt.columns:get() * 0.5)
265+
end
266+
'';
267+
};
268+
269+
hijack_cursor = false;
270+
renderer = {
271+
group_empty = true;
272+
full_name = true;
273+
indent_markers = {
274+
enable = true;
275+
};
276+
icons = {
277+
show = {
278+
file = true;
279+
folder = true;
280+
folder_arrow = true;
281+
};
282+
glyphs = {
283+
default = "󰈚";
284+
symlink = "";
285+
folder = {
286+
default = "";
287+
empty = "";
288+
empty_open = "";
289+
open = "";
290+
symlink = "";
291+
symlink_open = "";
292+
arrow_open = "";
293+
arrow_closed = "";
294+
};
295+
git = {
296+
untracked = "";
297+
staged = "";
298+
deleted = "";
299+
unstaged = "󰜀";
300+
renamed = "";
301+
ignored = "◌";
302+
unmerged = "";
303+
};
304+
};
305+
};
306+
};
307+
filters = {
308+
dotfiles = true;
309+
};
310+
diagnostics = {
311+
enable = true;
312+
show_on_dirs = true;
313+
};
314+
};
315+
};
316+
};
317+
318+
lazy.plugins = {
319+
auto-session = {
320+
package = pkgs.vimPlugins.auto-session;
321+
setupModule = "auto-session";
322+
lazy = false;
323+
324+
setupOpts = {
325+
auto_session_enabled = true;
326+
auto_session_root_dir = lib.generators.mkLuaInline ''
327+
vim.fn.stdpath("data") .. "/sessions/"
328+
'';
329+
pre_save_cmds = lib.generators.mkLuaInline ''
330+
{ close_floating_windows, close_toggleterm, "NvimTreeClose" }
331+
'';
332+
post_restore_cmds = lib.generators.mkLuaInline ''
333+
{ clear_jumps, "NvimTreeOpen" }
334+
'';
335+
save_extra_cmds = lib.generators.mkLuaInline ''
336+
{ "NvimTreeOpen" }
337+
'';
338+
};
339+
};
340+
341+
"auto-save.nvim" = {
342+
package = pkgs.vimPlugins.auto-save-nvim;
343+
setupModule = "auto-save";
344+
lazy = false;
345+
346+
after = ''
347+
local group = vim.api.nvim_create_augroup('autosave', {})
348+
349+
vim.api.nvim_create_autocmd('User', {
350+
pattern = 'AutoSaveWritePost',
351+
group = group,
352+
callback = function(opts)
353+
if opts.data.saved_buffer ~= nil then
354+
local filename = vim.api.nvim_buf_get_name(opts.data.saved_buffer)
355+
vim.notify('AutoSave: saved at ' .. vim.fn.strftime('%H:%M:%S'), vim.log.levels.INFO)
356+
end
357+
end,
358+
})
359+
'';
360+
};
361+
362+
"lazygit.nvim" = {
363+
package = pkgs.vimPlugins.lazygit-nvim;
364+
lazy = true;
365+
366+
cmd = [
367+
"LazyGit"
368+
"LazyGitConfig"
369+
"LazyGitCurrentFile"
370+
"LazyGitFilter"
371+
"LazyGitFilterCurrentFile"
372+
];
373+
};
374+
};
375+
};
376+
};
48377
};
49378
};
50379
}

home/modules/neovim/lua/autocmds.lua

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
local autocmd = vim.api.nvim_create_autocmd
2+
3+
autocmd({ "VimLeave", "VimSuspend" }, {
4+
pattern = "*",
5+
command = "set guicursor=a:ver25",
6+
})

0 commit comments

Comments
 (0)