2025-01-02 09:17:09 -05:00

570 lines
12 KiB
Nix

{
inputs,
pkgs,
config,
lib,
...
}: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
];
home.packages = with pkgs; [
alejandra
ripgrep
];
programs.nixvim = {
enable = true;
package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default;
defaultEditor = true;
vimdiffAlias = true;
colorschemes = {
modus = {
enable = true;
};
};
globals = {
mapleader = " ";
maplocalleader = " ";
};
opts = {
number = true;
relativenumber = true;
mouse = "a";
showmode = false;
laststatus = 3;
swapfile = false;
breakindent = true;
undofile = true;
ignorecase = true;
smartcase = true;
signcolumn = "yes";
updatetime = 50;
timeoutlen = 300;
inccommand = "split";
cursorline = true;
scrolloff = 10;
hlsearch = true;
foldlevel = 99;
};
keymaps = [
{
mode = "n";
key = "<leader>fe";
action = "<cmd>Oil<CR>";
}
{
mode = "n";
key = "<leader>ff";
action = "<cmd>Pick files<CR>";
}
{
mode = "n";
key = "<leader>fg";
action = "<cmd>Pick grep_live<CR>";
}
{
mode = "n";
key = "<leader>u";
action = "<cmd>UndotreeToggle<CR>";
}
{
mode = "n";
key = "<leader>zf";
action = "<cmd>ZkNotes<CR>";
}
{
mode = "n";
key = "<leader>zt";
action = "<cmd>ZkTags<CR>";
}
{
mode = "n";
key = "<leader>zn";
action = "<cmd>ZkNew<CR>";
}
# quickfix/location list
{
mode = "n";
key = "]q";
action = "<cmd>cnext<CR>zz";
}
{
mode = "n";
key = "[q";
action = "<cmd>cprev<CR>zz";
}
{
mode = "n";
key = "]l";
action = "<cmd>lnext<CR>zz";
}
{
mode = "n";
key = "[l";
action = "<cmd>lprev<CR>zz";
}
# gitsigns
{
mode = "n";
key = "]c";
action.__raw = ''
function()
if vim.wo.diff then
vim.cmd.normal { ']c', bang = true }
else
require('gitsigns').nav_hunk 'next'
end
end
'';
options = {
desc = "Jump to next git [C]hange";
};
}
{
mode = "n";
key = "[c";
action.__raw = ''
function()
if vim.wo.diff then
vim.cmd.normal { '[c', bang = true }
else
require('gitsigns').nav_hunk 'prev'
end
end
'';
options = {
desc = "Jump to previous git [C]hange";
};
}
{
mode = "v";
key = "<leader>hs";
action.__raw = ''
function()
require('gitsigns').stage_hunk { vim.fn.line '.', vim.fn.line 'v' }
end
'';
options = {
desc = "stage git hunk";
};
}
{
mode = "v";
key = "<leader>hr";
action.__raw = ''
function()
require('gitsigns').reset_hunk { vim.fn.line '.', vim.fn.line 'v' }
end
'';
options = {
desc = "reset git hunk";
};
}
{
mode = "n";
key = "<leader>hs";
action.__raw = ''
function()
require('gitsigns').stage_hunk()
end
'';
options = {
desc = "git [s]tage hunk";
};
}
{
mode = "n";
key = "<leader>hr";
action.__raw = ''
function()
require('gitsigns').reset_hunk()
end
'';
options = {
desc = "git [r]eset hunk";
};
}
{
mode = "n";
key = "<leader>hS";
action.__raw = ''
function()
require('gitsigns').stage_buffer()
end
'';
options = {
desc = "git [S]tage buffer";
};
}
{
mode = "n";
key = "<leader>hu";
action.__raw = ''
function()
require('gitsigns').undo_stage_hunk()
end
'';
options = {
desc = "git [u]ndo stage hunk";
};
}
{
mode = "n";
key = "<leader>hR";
action.__raw = ''
function()
require('gitsigns').reset_buffer()
end
'';
options = {
desc = "git [R]eset buffer";
};
}
{
mode = "n";
key = "<leader>hp";
action.__raw = ''
function()
require('gitsigns').preview_hunk()
end
'';
options = {
desc = "git [p]review hunk";
};
}
{
mode = "n";
key = "<leader>hb";
action.__raw = ''
function()
require('gitsigns').blame_line()
end
'';
options = {
desc = "git [b]lame line";
};
}
{
mode = "n";
key = "<leader>hd";
action.__raw = ''
function()
require('gitsigns').diffthis()
end
'';
options = {
desc = "git [d]iff against index";
};
}
{
mode = "n";
key = "<leader>hD";
action.__raw = ''
function()
require('gitsigns').diffthis '@'
end
'';
options = {
desc = "git [D]iff against last commit";
};
}
# Toggles
{
mode = "n";
key = "<leader>tb";
action.__raw = ''
function()
require('gitsigns').toggle_current_line_blame()
end
'';
options = {
desc = "[T]oggle git show [b]lame line";
};
}
{
mode = "n";
key = "<leader>tD";
action.__raw = ''
function()
require('gitsigns').toggle_deleted()
end
'';
options = {
desc = "[T]oggle git show [D]eleted";
};
}
];
plugins = {
web-devicons.enable = true;
sleuth = {
enable = true;
};
spectre = {
enable = true;
};
treesitter = {
enable = true;
folding = true;
settings = {
highlight = {
enable = true;
additional_vim_regex_highlighting = true;
};
indent = {
enable = true;
};
autotag = {
enable = true;
};
};
};
gitsigns = {
enable = true;
settings = {
signs = {
add = {text = "+";};
change = {text = "~";};
delete = {text = "_";};
topdelete = {text = "";};
changedelete = {text = "~";};
};
};
};
harpoon = {
enable = true;
keymaps = {
addFile = "<leader>a";
toggleQuickMenu = "<leader>e";
navNext = "<leader>k";
navPrev = "<leader>j";
};
};
mini = {
enable = true;
modules = {
ai = {
n_lines = 500;
};
splitjoin = {};
surround = {};
statusline = {
use_icons = true;
};
comment = {};
trailspace = {};
pick = {};
jump = {};
};
};
zk = {
enable = true;
settings = {
picker = "minipick";
};
};
obsidian = {
enable = true;
settings = {
completion = {
min_chars = 1;
nvim_cmp = true;
};
notes_subir = "notes";
new_notes_location = "notes_subdir";
templates = {
folder = "templates";
};
workspaces = [
{
name = "personal";
path = "~/vaults/personal";
}
];
picker = {
name = "mini.pick";
};
daily_notes = {
folder = "dailies";
default_tags = [ "type/daily" ];
};
};
};
render-markdown = {
enable = true;
};
friendly-snippets = {
enable = true;
};
lspkind = {
enable = true;
cmp = {
enable = true;
};
};
luasnip = {
enable = true;
};
cmp = {
enable = true;
settings = {
snippet = {
expand = ''
function(args)
require('luasnip').lsp_expand(args.body)
end
'';
};
completion = {
completeopt = "menu,menuone,noinsert";
};
mapping = {
"<C-n>" = "cmp.mapping.select_next_item()";
"<C-p>" = "cmp.mapping.select_prev_item()";
"<C-b>" = "cmp.mapping.scroll_docs(-4)";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<C-y>" = "cmp.mapping.confirm { select = true }";
"<C-Space>" = "cmp.mapping.complete {}";
"<C-l>" = ''
cmp.mapping(function()
local luasnip = require('luasnip')
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end
end, { 'i', 's' })
'';
"<C-h>" = ''
cmp.mapping(function()
local luasnip = require('luasnip')
if luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
end
end, { 'i', 's' })
'';
};
sources = [
{
name = "luasnip";
}
{
name = "nvim_lsp";
}
{
name = "path";
}
];
};
};
oil = {
enable = true;
};
undotree = {
enable = true;
};
tmux-navigator = {
enable = true;
};
cmp-nvim-lsp = {
enable = true;
};
fidget = {
enable = true;
};
lsp = {
enable = true;
servers = {
nixd = {
enable = true;
settings = {
nixpkgs = {
expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).inputs.nixpkgs { }";
};
formatting = {
command = ["alejandra"];
};
options = {
nixos = {
expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).nixosConfigurations.desktop.options";
};
nix-darwin = {
expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).darwinConfigurations.macbook.options";
};
};
};
};
hls = {
enable = true;
installGhc = true;
};
ts_ls = {
enable = true;
};
eslint = {
enable = true;
};
html = {
enable = true;
};
cssls = {
enable = true;
};
stylelint_lsp = {
enable = true;
};
volar = {
enable = true;
tslsIntegration = true;
};
gopls = {
enable = true;
};
bashls = {
enable = true;
};
clangd = {
enable = true;
};
};
keymaps = {
diagnostic = {
"[d" = "goto_next";
"]d" = "goto_prev";
"<leader>d" = "open_float";
};
lspBuf = {
"K" = "hover";
"gd" = "definition";
"gr" = "references";
"<leader>rn" = "rename";
"<leader>ca" = "code_action";
};
};
};
neotest = {
enable = true;
adapters = {
jest = {
enable = true;
};
go = {
enable = true;
};
};
};
nvim-jdtls = {
enable = true;
cmd = [
(lib.getExe pkgs.jdt-language-server)
];
};
};
};
}