648 lines
16 KiB
Nix
648 lines
16 KiB
Nix
{ pkgs, ... }:
|
|
let
|
|
render-markdown = pkgs.vimUtils.buildVimPlugin {
|
|
name = "render-markdown";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "MeanderingProgrammer";
|
|
repo = "markdown.nvim";
|
|
rev = "78ef39530266b3a0736c48b46c3f5d1ab022c7db";
|
|
hash = "sha256-mddnBvIrekHh60Ix6qIYAnv10Mu40LamGI47EXk9wSo=";
|
|
};
|
|
};
|
|
# for lsp/cmp inside markdown code blocks
|
|
otter = pkgs.vimUtils.buildVimPlugin {
|
|
name = "otter";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "jmbuhr";
|
|
repo = "otter.nvim";
|
|
rev = "cbb1be0586eae18cbea38ada46af428d2bebf81a";
|
|
hash = "sha256-eya/8rG3O8UFeeBRDa5U8v3qay+q3iFwPnYtdX7ptCA=";
|
|
};
|
|
};
|
|
fzy-lua-native = pkgs.vimUtils.buildVimPlugin {
|
|
name = "fzy-lua-native";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "romgrk";
|
|
repo = "fzy-lua-native";
|
|
rev = "9d720745d5c2fb563c0d86c17d77612a3519c506";
|
|
hash = "sha256-pBV5iGa1+5gtM9BcDk8I5SKoQ9sydOJHsmyoBcxAct0=";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
programs.nixvim = {
|
|
plugins = {
|
|
treesitter-textobjects = {
|
|
enable = true;
|
|
lspInterop.enable = true;
|
|
|
|
select = {
|
|
enable = true;
|
|
|
|
keymaps = {
|
|
"ai" = {
|
|
query = "@impl.outer";
|
|
};
|
|
"ii" = {
|
|
query = "@impl.inner";
|
|
};
|
|
"af" = {
|
|
query = "@function.outer";
|
|
};
|
|
"if" = {
|
|
query = "@function.inner";
|
|
};
|
|
|
|
"ac" = {
|
|
query = "@conditional.outer";
|
|
};
|
|
"ic" = {
|
|
query = "@conditional.inner";
|
|
};
|
|
"al" = {
|
|
query = "@loop.outer";
|
|
};
|
|
"il" = {
|
|
query = "@loop.inner";
|
|
};
|
|
};
|
|
};
|
|
|
|
move = {
|
|
enable = true;
|
|
setJumps = true;
|
|
gotoNextStart = {
|
|
"]f" = {
|
|
query = "@function.outer";
|
|
};
|
|
"]c" = {
|
|
query = "@conditional.outer";
|
|
};
|
|
"]l" = {
|
|
query = "@loop.outer";
|
|
};
|
|
"]i" = {
|
|
query = "@impl.outer";
|
|
};
|
|
};
|
|
gotoNextEnd = {
|
|
"]F" = {
|
|
query = "@function.outer";
|
|
};
|
|
"]C" = {
|
|
query = "@conditional.outer";
|
|
};
|
|
"]L" = {
|
|
query = "@loop.outer";
|
|
};
|
|
"]I" = {
|
|
query = "@impl.outer";
|
|
};
|
|
};
|
|
gotoPreviousStart = {
|
|
"[f" = {
|
|
query = "@function.outer";
|
|
};
|
|
"[c" = {
|
|
query = "@conditional.outer";
|
|
};
|
|
"[l" = {
|
|
query = "@loop.outer";
|
|
};
|
|
"[i" = {
|
|
query = "@impl.outer";
|
|
};
|
|
};
|
|
gotoPreviousEnd = {
|
|
"[F" = {
|
|
query = "@function.outer";
|
|
};
|
|
"[C" = {
|
|
query = "@conditional.outer";
|
|
};
|
|
"[L" = {
|
|
query = "@loop.outer";
|
|
};
|
|
"[I" = {
|
|
query = "@impl.outer";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
treesitter = {
|
|
enable = true;
|
|
|
|
nixGrammars = false;
|
|
nixvimInjections = false;
|
|
|
|
settings = {
|
|
indent.enable = true;
|
|
|
|
ensure_installed = "all";
|
|
ignore_install = [
|
|
"wing"
|
|
];
|
|
|
|
highlight.enable = true;
|
|
|
|
incremental_selection = {
|
|
enable = true;
|
|
keymaps = {
|
|
# init_selection = "<CR>";
|
|
scope_incremental = "ss";
|
|
node_incremental = "si";
|
|
node_decremental = "sd";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
rainbow-delimiters.enable = true;
|
|
vim-surround.enable = true;
|
|
cmp-nvim-lsp.enable = true;
|
|
lsp-format.enable = true;
|
|
fugitive.enable = false;
|
|
lspkind.enable = true;
|
|
crates.enable = true;
|
|
fidget.enable = true;
|
|
cmp.enable = true;
|
|
nvim-autopairs.enable = true;
|
|
|
|
image = {
|
|
enable = true;
|
|
integrations.markdown = {
|
|
enabled = true;
|
|
clearInInsertMode = true;
|
|
downloadRemoteImages = true;
|
|
};
|
|
};
|
|
|
|
# dial.nvim
|
|
|
|
which-key = {
|
|
enable = true;
|
|
};
|
|
|
|
auto-session = {
|
|
enable = true;
|
|
settings = {
|
|
auto_save_enabled = true;
|
|
auto_restore_enabled = true;
|
|
pre_save_cmds = [ "Neotree close" ];
|
|
post_restore_cmds = [ "Neotree filesystem show" ];
|
|
};
|
|
};
|
|
|
|
comment = {
|
|
enable = true;
|
|
|
|
settings = {
|
|
sticky = true;
|
|
};
|
|
};
|
|
|
|
neo-tree = {
|
|
enable = true;
|
|
closeIfLastWindow = true;
|
|
enableGitStatus = false;
|
|
|
|
window = {
|
|
position = "right";
|
|
width = 30;
|
|
mappings = {
|
|
"<bs>" = "navigate_up";
|
|
"." = "set_root";
|
|
"/" = "fuzzy_finder";
|
|
"f" = "filter_on_submit";
|
|
"h" = "show_help";
|
|
};
|
|
};
|
|
filesystem = {
|
|
followCurrentFile.enabled = true;
|
|
filteredItems = {
|
|
hideHidden = false;
|
|
hideDotfiles = false;
|
|
forceVisibleInEmptyFolder = true;
|
|
hideGitignored = false;
|
|
};
|
|
};
|
|
};
|
|
|
|
nvim-lightbulb = {
|
|
enable = true;
|
|
settings = {
|
|
autocmd = {
|
|
enabled = true;
|
|
updatetime = 200;
|
|
};
|
|
line = {
|
|
enabled = true;
|
|
};
|
|
number = {
|
|
enabled = true;
|
|
hl = "LightBulbNumber";
|
|
};
|
|
float = {
|
|
enabled = false;
|
|
text = "💡";
|
|
};
|
|
sign = {
|
|
enabled = true;
|
|
text = "💡";
|
|
};
|
|
status_text = {
|
|
enabled = false;
|
|
text = "💡";
|
|
};
|
|
};
|
|
};
|
|
|
|
git-conflict = {
|
|
enable = true;
|
|
settings = {
|
|
default_mappings = {
|
|
both = "<leader>cb";
|
|
none = "<leader>c0";
|
|
ours = "<leader>co";
|
|
prev = "]x";
|
|
next = "[x";
|
|
theirs = "<leader>ct";
|
|
};
|
|
disable_diagnostics = false;
|
|
highlights = {
|
|
current = "DiffText";
|
|
incoming = "DiffAdd";
|
|
};
|
|
list_opener = "conflicts";
|
|
};
|
|
};
|
|
gitsigns = {
|
|
enable = true;
|
|
|
|
settings = {
|
|
current_line_blame = true;
|
|
current_line_blame_opts = {
|
|
virt_text = true;
|
|
virt_text_pos = "eol";
|
|
};
|
|
};
|
|
};
|
|
|
|
lspsaga = {
|
|
enable = true;
|
|
lightbulb.enable = false;
|
|
codeAction.keys = {
|
|
quit = "<Esc>";
|
|
};
|
|
};
|
|
|
|
typst-vim = {
|
|
enable = true;
|
|
settings = {
|
|
cmd = "${pkgs.typst}/bin/typst";
|
|
conceal_math = 1;
|
|
auto_close_toc = 1;
|
|
};
|
|
};
|
|
|
|
lualine = {
|
|
enable = true;
|
|
settings.options.theme = "onedark";
|
|
};
|
|
|
|
rustaceanvim = {
|
|
enable = true;
|
|
rustAnalyzerPackage = pkgs.rust-analyzer;
|
|
|
|
settings = {
|
|
auto_attach = true;
|
|
server = {
|
|
standalone = false;
|
|
default_settings = {
|
|
rust-analyzer = {
|
|
inlayHints = {
|
|
lifetimeElisionHints.enable = "always";
|
|
# expressionAdjustmentHints = {
|
|
# enable = "always";
|
|
# mode = "prefer_postfix";
|
|
# };
|
|
discriminantHints.enable = "always";
|
|
};
|
|
# check = {
|
|
# command = "+nightly clippy";
|
|
# };
|
|
cachePriming.enable = false;
|
|
|
|
diagnostic = {
|
|
refreshSupport = true;
|
|
};
|
|
};
|
|
# cargo = {
|
|
# buildScripts.enable = true;
|
|
# features = "all";
|
|
# runBuildScripts = true;
|
|
# loadOutDirsFromCheck = true;
|
|
# };
|
|
# checkOnSave = true;
|
|
# check = {
|
|
# allFeatures = true;
|
|
# command = "clippy";
|
|
# extraArgs = [ "--no-deps" ];
|
|
# };
|
|
# procMacro = { enable = true; };
|
|
# imports = {
|
|
# granularity = { group = "module"; };
|
|
# prefix = "self";
|
|
# };
|
|
# files = {
|
|
# excludeDirs =
|
|
# [ ".cargo" ".direnv" ".git" "node_modules" "target" ];
|
|
# };
|
|
#
|
|
# inlayHints = {
|
|
# bindingModeHints.enable = true;
|
|
# closureStyle = "rust_analyzer";
|
|
# closureReturnTypeHints.enable = "always";
|
|
# discriminantHints.enable = "always";
|
|
# expressionAdjustmentHints.enable = "always";
|
|
# implicitDrops.enable = true;
|
|
# lifetimeElisionHints.enable = "always";
|
|
# rangeExclusiveHints.enable = true;
|
|
# reborrowHints.enable = "mutable";
|
|
# };
|
|
#
|
|
# rustc.source = "discover";
|
|
#
|
|
options.diagnostics = {
|
|
enable = true;
|
|
styleLints.enable = true;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
lsp = {
|
|
enable = true;
|
|
|
|
servers = {
|
|
astro.enable = true;
|
|
cssls.enable = true;
|
|
nil_ls = {
|
|
enable = true;
|
|
settings = {
|
|
formatting.command = [ "${(pkgs.lib.getExe pkgs.nixfmt-rfc-style)}" ];
|
|
};
|
|
extraOptions = {
|
|
nix = {
|
|
maxMemoryMB = 0;
|
|
flake = {
|
|
autoArchive = true;
|
|
autoEvalInputs = true;
|
|
nixpkgsInputName = "nixpkgs";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
clangd = {
|
|
enable = true;
|
|
filetypes = [
|
|
"c"
|
|
"cpp"
|
|
"objc"
|
|
"objcpp"
|
|
];
|
|
};
|
|
eslint = {
|
|
enable = true;
|
|
filetypes = [
|
|
"javascript"
|
|
"javascriptreact"
|
|
"typescript"
|
|
"typescriptreact"
|
|
];
|
|
};
|
|
html = {
|
|
enable = true;
|
|
filetypes = [ "html" ];
|
|
};
|
|
jsonls = {
|
|
enable = true;
|
|
filetypes = [
|
|
"json"
|
|
"jsonc"
|
|
];
|
|
};
|
|
pyright = {
|
|
enable = true;
|
|
filetypes = [ "python" ];
|
|
};
|
|
bashls = {
|
|
enable = true;
|
|
|
|
filetypes = [
|
|
"sh"
|
|
"bash"
|
|
];
|
|
};
|
|
# ts_ls = {
|
|
# enable = true;
|
|
# filetypes =
|
|
# [ "javascript" "javascriptreact" "typescript" "typescriptreact" ];
|
|
# };
|
|
# marksman.enable = true;
|
|
yamlls = {
|
|
enable = true;
|
|
filetypes = [ "yaml" ];
|
|
};
|
|
};
|
|
|
|
inlayHints = true;
|
|
|
|
keymaps = {
|
|
lspBuf = {
|
|
"<leader>;" = "format";
|
|
"gh" = "hover";
|
|
};
|
|
};
|
|
};
|
|
|
|
wilder = {
|
|
enable = true;
|
|
modes = [
|
|
"/"
|
|
":"
|
|
"?"
|
|
];
|
|
enableCmdlineEnter = true;
|
|
beforeCursor = true;
|
|
useCmdlinechanged = true;
|
|
|
|
nextKey = "<Tab>";
|
|
prevKey = "<S-Tab>";
|
|
acceptKey = "<Down>";
|
|
rejectKey = "<Up>";
|
|
|
|
pipeline = [
|
|
''
|
|
wilder.branch(
|
|
wilder.cmdline_pipeline({
|
|
language = 'python',
|
|
fuzzy = 2,
|
|
}),
|
|
wilder.python_search_pipeline({
|
|
pattern = wilder.python_fuzzy_pattern(),
|
|
sorter = wilder.python_difflib_sorter(),
|
|
engine = 're',
|
|
}),
|
|
wilder.substitute_pipeline({
|
|
pipeline = wilder.python_search_pipeline({
|
|
skip_cmdtype_check = 1,
|
|
pattern = wilder.python_fuzzy_pattern({
|
|
start_at_boundary = 0,
|
|
}),
|
|
}),
|
|
}),
|
|
{
|
|
wilder.check(function(ctx, x) return x == "" end),
|
|
wilder.history(),
|
|
},
|
|
wilder.python_file_finder_pipeline({
|
|
file_command = {'${pkgs.ripgrep}/bin/rg', '--files'},
|
|
dir_command = {'${pkgs.fd}/bin/fd', '-td'},
|
|
filters = {'cpsm_filter'},
|
|
})
|
|
)
|
|
''
|
|
];
|
|
renderer = ''
|
|
(function()
|
|
local highlighters = {
|
|
wilder.pcre2_highlighter(),
|
|
wilder.lua_fzy_highlighter(),
|
|
}
|
|
|
|
local popupmenu_renderer = wilder.popupmenu_renderer(
|
|
wilder.popupmenu_border_theme({
|
|
border = 'rounded',
|
|
empty_message = wilder.popupmenu_empty_message_with_spinner(),
|
|
highlighter = highlighters,
|
|
highlights = {
|
|
accent = wilder.make_hl('WilderAccent', 'Pmenu', {{a = 1}, {a = 1}, {foreground = '#f4468f'}}),
|
|
},
|
|
left = {
|
|
' ',
|
|
wilder.popupmenu_devicons(),
|
|
wilder.popupmenu_buffer_flags({
|
|
flags = ' a + ',
|
|
icons = {['+'] = '', a = '', h = ''},
|
|
}),
|
|
},
|
|
right = {
|
|
' ',
|
|
wilder.popupmenu_scrollbar(),
|
|
},
|
|
})
|
|
)
|
|
|
|
local wildmenu_renderer = wilder.wildmenu_renderer({
|
|
highlights = {
|
|
accent = wilder.make_hl('WilderAccent', 'Pmenu', {{a = 1}, {a = 1}, {foreground = '#f4468f'}}),
|
|
},
|
|
highlighter = highlighters,
|
|
separator = ' · ',
|
|
left = {' ', wilder.wildmenu_spinner(), ' '},
|
|
right = {' ', wilder.wildmenu_index()},
|
|
})
|
|
|
|
return wilder.renderer_mux({
|
|
[':'] = popupmenu_renderer,
|
|
['/'] = wildmenu_renderer,
|
|
substitute = wildmenu_renderer,
|
|
})
|
|
end)()
|
|
'';
|
|
};
|
|
|
|
floaterm = {
|
|
enable = true;
|
|
settings = {
|
|
opener = "edit";
|
|
width = 0.8;
|
|
height = 0.8;
|
|
};
|
|
};
|
|
telescope = {
|
|
enable = true;
|
|
|
|
extensions.ui-select.enable = true;
|
|
extensions.fzf-native.enable = true;
|
|
|
|
settings = {
|
|
defaults = {
|
|
path_display = [ "smart" ];
|
|
layout_strategy = "horizontal";
|
|
layout_config = {
|
|
width = 0.99;
|
|
height = 0.99;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
# tabs
|
|
barbar = {
|
|
enable = true;
|
|
settings = {
|
|
options.diagnostics = "nvim_lsp";
|
|
focus_on_close = "previous";
|
|
};
|
|
};
|
|
|
|
none-ls = {
|
|
enable = true;
|
|
sources = {
|
|
formatting.nixpkgs_fmt.enable = true;
|
|
code_actions.statix.enable = true;
|
|
diagnostics = {
|
|
statix.enable = true;
|
|
deadnix.enable = true;
|
|
};
|
|
};
|
|
};
|
|
nix.enable = true;
|
|
|
|
web-devicons.enable = true;
|
|
};
|
|
extraPlugins = with pkgs.vimPlugins; [
|
|
vim-vsnip
|
|
cmp-vsnip
|
|
cmp-path
|
|
cmp-spell
|
|
|
|
telescope-ui-select-nvim
|
|
telescope-fzf-native-nvim
|
|
|
|
vim-suda
|
|
render-markdown
|
|
otter
|
|
vim-astro
|
|
nvim-web-devicons
|
|
vim-visual-multi
|
|
vim-gh-line
|
|
BufOnly-vim
|
|
neoconf-nvim
|
|
vim-autoswap
|
|
targets-vim
|
|
|
|
fzy-lua-native
|
|
cpsm
|
|
|
|
# jj
|
|
vim-jjdescription
|
|
|
|
];
|
|
|
|
};
|
|
}
|