2026-09-25 19:52:00 +00:00
|
|
|
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
|
|
|
|
|
if not vim.uv.fs_stat(lazypath) then
|
|
|
|
|
local output = vim.fn.system({
|
|
|
|
|
'git', 'clone', '--filter=blob:none', '--branch=stable',
|
|
|
|
|
'https://github.com/folke/lazy.nvim.git', lazypath,
|
|
|
|
|
})
|
|
|
|
|
if vim.v.shell_error ~= 0 then
|
|
|
|
|
error('Could not install lazy.nvim: ' .. output)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
vim.opt.rtp:prepend(lazypath)
|
2025-05-03 23:42:03 -07:00
|
|
|
|
2026-09-25 19:52:00 +00:00
|
|
|
-- Home Manager links the checked-in snapshot into the read-only Nix store.
|
|
|
|
|
-- Seed a writable lockfile once. After :Lazy update, copy the state lockfile
|
|
|
|
|
-- back to lazy-lock.json in this repo to commit reviewed plugin revisions.
|
|
|
|
|
local lockfile = vim.fn.stdpath('state') .. '/lazy-lock.json'
|
|
|
|
|
local snapshot = vim.fn.stdpath('config') .. '/lazy-lock.json'
|
|
|
|
|
if not vim.uv.fs_stat(lockfile) and vim.uv.fs_stat(snapshot) then
|
|
|
|
|
vim.fn.mkdir(vim.fn.fnamemodify(lockfile, ':h'), 'p')
|
|
|
|
|
vim.fn.writefile(vim.fn.readfile(snapshot), lockfile)
|
2025-05-03 23:42:03 -07:00
|
|
|
end
|
|
|
|
|
|
2026-09-25 19:52:00 +00:00
|
|
|
require('lazy').setup({
|
|
|
|
|
-- LSP and completion
|
|
|
|
|
{ 'neovim/nvim-lspconfig', lazy = false },
|
|
|
|
|
{ 'hrsh7th/nvim-cmp', dependencies = {
|
|
|
|
|
'hrsh7th/cmp-nvim-lsp',
|
|
|
|
|
'hrsh7th/cmp-buffer',
|
|
|
|
|
'hrsh7th/cmp-path',
|
|
|
|
|
'dcampos/nvim-snippy',
|
|
|
|
|
'dcampos/cmp-snippy',
|
|
|
|
|
}, lazy = false },
|
2025-05-03 23:42:03 -07:00
|
|
|
|
2026-09-25 19:52:00 +00:00
|
|
|
-- Appearance and syntax
|
|
|
|
|
{ 'drewtempelmeyer/palenight.vim', lazy = false, priority = 1000 },
|
|
|
|
|
'nvim-tree/nvim-web-devicons',
|
|
|
|
|
'sheerun/vim-polyglot',
|
|
|
|
|
'https://codeberg.org/ziglang/zig.vim',
|
|
|
|
|
'styled-components/vim-styled-components',
|
|
|
|
|
'dominikduda/vim_current_word',
|
|
|
|
|
{ 'lukas-reineke/indent-blankline.nvim', main = 'ibl', ft = { 'yaml', 'helm' }, opts = {
|
|
|
|
|
scope = { enabled = false },
|
|
|
|
|
} },
|
|
|
|
|
'itchyny/lightline.vim',
|
|
|
|
|
'itchyny/vim-gitbranch',
|
|
|
|
|
{ 'tribela/transparent.nvim', opts = {} },
|
2025-05-03 23:42:03 -07:00
|
|
|
|
2026-09-25 19:52:00 +00:00
|
|
|
-- Navigation and search
|
|
|
|
|
'airblade/vim-rooter',
|
|
|
|
|
{ 'nvim-telescope/telescope.nvim', tag = 'v0.1.9', dependencies = {
|
|
|
|
|
'nvim-lua/plenary.nvim',
|
|
|
|
|
'nvim-telescope/telescope-ui-select.nvim',
|
|
|
|
|
}, config = function()
|
|
|
|
|
require('nv-telescope')
|
|
|
|
|
end },
|
|
|
|
|
{ 'stevearc/oil.nvim', opts = {} },
|
|
|
|
|
{ 'MagicDuck/grug-far.nvim', opts = {} },
|
2025-05-03 23:42:03 -07:00
|
|
|
|
2026-09-25 19:52:00 +00:00
|
|
|
-- Diagnostics, Git, and editing
|
|
|
|
|
{ 'folke/trouble.nvim', opts = {} },
|
|
|
|
|
{ 'lewis6991/gitsigns.nvim', opts = {} },
|
|
|
|
|
'jiangmiao/auto-pairs',
|
|
|
|
|
{ 'fatih/vim-go', init = function()
|
|
|
|
|
vim.g.go_code_completion_enabled = 0
|
|
|
|
|
vim.g.go_gopls_enabled = 0
|
|
|
|
|
vim.g.go_fmt_command = 'gofmt'
|
|
|
|
|
vim.g.go_fmt_options = { gofmt = '-s' }
|
|
|
|
|
vim.g.go_imports_mode = 'goimports'
|
|
|
|
|
vim.g.go_doc_keywordprg_enabled = 0
|
|
|
|
|
vim.g.go_def_mapping_enabled = 0
|
|
|
|
|
vim.g.go_search_bin_path_first = 0
|
|
|
|
|
vim.g.go_template_use_pkg = 1
|
|
|
|
|
vim.g.go_highlight_operators = 1
|
|
|
|
|
vim.g.go_highlight_types = 1
|
|
|
|
|
vim.g.go_highlight_extra_types = 1
|
|
|
|
|
vim.g.go_highlight_functions = 1
|
|
|
|
|
vim.g.go_highlight_function_calls = 1
|
|
|
|
|
end },
|
|
|
|
|
{ 'stevearc/conform.nvim', opts = {
|
|
|
|
|
formatters_by_ft = { ocaml = { 'ocamlformat' } },
|
|
|
|
|
} },
|
|
|
|
|
'tpope/vim-commentary',
|
|
|
|
|
'tpope/vim-surround',
|
|
|
|
|
'psliwka/vim-smoothie',
|
|
|
|
|
}, {
|
|
|
|
|
lockfile = lockfile,
|
|
|
|
|
checker = { enabled = false },
|
|
|
|
|
change_detection = { notify = false },
|
|
|
|
|
})
|