2025-04-17 19:55:43 -04:00

597 lines
13 KiB
Nix

{
inputs,
pkgs,
config,
lib,
...
}: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
];
home.packages = with pkgs; [
alejandra
ripgrep
rustup
];
programs.nixvim = {
enable = true;
#package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default;
defaultEditor = true;
vimdiffAlias = true;
colorschemes = {
gruvbox = {
enable = true;
};
};
globals = {
mapleader = " ";
maplocalleader = " ";
};
opts = {
number = true;
relativenumber = true;
mouse = "a";
showmode = false;
laststatus = 3;
swapfile = false;
tabstop = 4;
softtabstop = 0;
shiftwidth = 4;
expandtab = true;
breakindent = true;
undofile = true;
ignorecase = true;
smartcase = true;
signcolumn = "yes";
updatetime = 50;
timeoutlen = 300;
inccommand = "split";
cursorline = true;
scrolloff = 10;
hlsearch = true;
foldlevel = 99;
conceallevel = 2;
};
keymaps = [
#harpoon
{
mode = "n";
key = "<leader>a";
action.__raw = "function() require('harpoon.mark').add_file() end";
}
{
mode = "n";
key = "<leader>e";
action.__raw = "function() require('harpoon.ui').toggle_quick_menu() end";
}
{
mode = "n";
key = "<leader>j";
action.__raw = "function() require('harpoon.ui').nav_next() end";
}
{
mode = "n";
key = "<leader>k";
action.__raw = "function() require('harpoon.ui').nav_prev() end";
}
{
mode = "n";
key = "<leader>j";
action.__raw = "function() require'harpoon'.ui:nav_prev() end";
}
{
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>";
}
{
mode = "n";
key = "<leader>zj";
action = "<cmd>ZkNew { dir = \"journal/daily\" } <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;
};
mini = {
enable = true;
modules = {
ai = {
n_lines = 500;
};
splitjoin = {};
surround = {};
statusline = {
use_icons = true;
};
comment = {};
trailspace = {};
pick = {};
jump = {};
};
};
zk = {
enable = true;
settings = {
picker = "minipick";
};
};
orgmode = {
enable = true;
settings = {
org_agenda_files = "~/everything/**/*";
org_default_notes_file = "~/everything/refile.org";
};
};
render-markdown = {
enable = false;
};
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";
# };
# };
# };
# };
ts_ls = {
enable = false;
};
eslint = {
enable = true;
};
html = {
enable = true;
};
cssls = {
enable = true;
};
# stylelint_lsp = {
# enable = true;
# };
volar = {
enable = true;
tslsIntegration = false;
filetypes = [ "typescript" "javascript" "javascriptreact" "typescriptreact" "vue" ];
extraOptions = {
init_options = {
vue = {
hybridMode = false;
};
};
};
};
angularls = {
enable = true;
};
gopls = {
enable = true;
};
golangci_lint_ls = {
enable = true;
};
bashls = {
enable = true;
};
clangd = {
enable = true;
};
rust_analyzer = {
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 = {
vitest = {
enable = true;
};
go = {
enable = true;
};
};
};
nvim-jdtls = {
enable = true;
cmd = [
(lib.getExe pkgs.jdt-language-server)
];
};
markdown-preview = {
enable = true;
};
};
};
}