diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f82e6e --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# Neovim Setup + +## Initial setup flow + +1. List/update plugins in `lua/setup/packages.lua`. +2. List/update language specs in `lua/modules/language-specs.lua`. +3. Run `nvim --headless +Setup +qa`. +4. Run `nvim --headless +FetchLspConfigs +qa`. + +If `prettierd` is stuck, run `pkill prettierd` and re-run install commands. + +## Where to put what + +- `lua/setup/packages.lua`: plugin package list managed by Paq. +- `lua/modules/language-specs.lua`: language spec source of truth. +- `lsp/*.lua`: native Neovim LSP config files (fetched by `FetchLspConfigs`). + +## Setup commands + +- `:Setup` + - bootstraps Paq if needed + - installs plugins + - installs treesitter parsers + Mason tools (LSP/linters/formatters) + +- `:InstallPackages` + - bootstraps Paq if needed + - installs plugins + +- `:InstallLanguages` + - installs language tooling from language specs (treesitter + Mason tools) + +- `:FetchLspConfigs` + - fetches default `nvim-lspconfig` server config files + - writes them into `~/.config/nvim/lsp` + - skips files that already exist + +- `:Sync` + - runs Paq sync for plugin updates/cleanup + +## Language specs: how they work + +Each item in `lua/modules/language-specs.lua` can define: + +- `ft`: one filetype or a list of filetypes +- `ts`: treesitter parser(s) +- `lsp`: Mason package name(s) for language servers +- `lint`: Mason package name(s) for linters +- `format`: Mason package name(s) for formatters + +One spec file drives all three layers together: + +1. install layer + - treesitter parsers are installed via `nvim-treesitter` + - LSP/lint/format tools are installed via Mason +2. runtime layer + - native Neovim `vim.lsp.enable(...)` starts the resolved LSP configs + - `nvim-lint` is configured by filetype + - `conform.nvim` is configured by filetype +3. config layer + - `FetchLspConfigs` downloads matching `lsp/*.lua` server configs for Neovim 0.11+ + +Important: for `lsp`, use Mason package names from: +`https://github.com/mason-org/mason-registry/tree/main/packages` + +## Add a new language + +1. Add/update a spec in `lua/modules/language-specs.lua`. +2. Run `nvim --headless +InstallLanguages +qa`. +3. Run `nvim --headless +FetchLspConfigs +qa`. +4. Open Neovim and run `:checkhealth vim.lsp` if needed. diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index c7822f7..0000000 --- a/docs/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# New Spec - -For new LSP, add in `lua/modules/language-specs.lua` at `lsp = `. -Name should match the mason registry one at: `https://github.com/mason-org/mason-registry/tree/main/packages` - -1. Run `nvim --headless +InstallAll +qa` (it invalidates cache automatically) -2. Run ` nvim --headless +FetchLspConfigs +qa` -> It will download the nvim-lspconfig variant in `lsp/` - -You may need to run: `pkill prettierd` (as it is running in background) - -# Other commands - -``` -nvim --headless +Sync +qa # For packages/plugins -``` diff --git a/docs/commands.md b/docs/commands.md deleted file mode 100644 index 137b984..0000000 --- a/docs/commands.md +++ /dev/null @@ -1,109 +0,0 @@ -#============================================================ -# Neovim Command Reference (Core Commands) -#============================================================ - - -#============================================================ -# FILE & SESSION MANAGEMENT -#============================================================ -:w (write) Save current buffer -:w Write to (does NOT rename buffer) -:sav (saveas) Save to and rename current buffer -:q (quit) Quit current window if no unsaved changes -:q! Force quit (discard changes) -:wq Write and quit current buffer -:wqa Write and quit all buffers -:qa Quit all windows -:qa! Quit all without saving -:e (edit) Edit in current window (new buffer) -:e! Revert buffer to last saved version (discard changes) -:enew Create new empty buffer -:r (read) Read into current buffer after cursor -:ter (terminal) Open terminal buffer -:clo (close) Close current window - - -#============================================================ -# BUFFERS -#============================================================ -:ls (buffers) List open buffers -:bn (bnext) Go to next buffer -:bp (bprev) Go to previous buffer -:b Go to buffer by number -:b Go to buffer by (partial) name -:bd (bdelete) [] Delete current (or given) buffer -:bw (bwipeout) [] Delete buffer and remove from memory -:bo (only) Close all windows except current -:e # Edit alternate (previous) buffer -:b# Switch to alternate buffer -:b% Re-edit current buffer (no-op) -:b$ Go to last buffer - - -#============================================================ -# WINDOWS (SPLITS) -#============================================================ -:sp (split) [] Split horizontally (optionally open ) -:vsp (vsplit) [] Split vertically (optionally open ) -:new Split with new empty buffer -:vnew Vertical split with new empty buffer -:close Close current window -:only Keep only current window open - - -#============================================================ -# TABS -#============================================================ -:tabnew [] Open new tab (optionally edit ) -:tabn (tabnext) Go to next tab -:tabp (tabprev) Go to previous tab -:tabm (tabmove) Move current tab to position -:tabfirst Jump to first tab -:tablast Jump to last tab -:tabc (tabclose) Close current tab -:tabo (tabonly) Close all other tabs -:tabdo Execute in all tabs (e.g. :tabdo q) - - -#============================================================ -# REGISTERS, MARKS & HISTORY -#============================================================ -:reg (registers) Show register contents -:marks Show all marks -:ju (jumps) Show jump list -:changes Show change list - - -#============================================================ -# SEARCH / GREP / QUICKFIX -#============================================================ -:g/{pattern}/d Delete all lines matching {pattern} -:g!/{pattern}/d Delete all lines NOT matching {pattern} -:vim /{pattern}/ **/* Search for {pattern} recursively in all files -:cn (cnext) Jump to next quickfix entry -:cp (cprevious) Jump to previous quickfix entry -:cope (copen) Open quickfix window -:ccl (cclose) Close quickfix window -:cl (clist) List quickfix entries - - -#============================================================ -# DIFF MODE -#============================================================ -:diffthis Start diff mode for current window -:diffo (diffoff) Turn off diff mode -:diffu (diffupdate) Recalculate diff -:diffg (diffget) Get changes from other window -:diffpu (diffput) Send changes to other window - - -#============================================================ -# NOTES & SYMBOLS -#============================================================ -% Current buffer -# Alternate (last visited) buffer -$ Last buffer in list -+ Next buffer -- Previous buffer -" Most recently edited buffer (context dependent) - diff --git a/docs/docs.md b/docs/docs.md deleted file mode 100644 index 2349160..0000000 --- a/docs/docs.md +++ /dev/null @@ -1,214 +0,0 @@ -```lua ---[[ - Neovim Lua config: ways to set things - - - vim.opt : preferred modern API for options (handles lists, cleaner syntax) - - vim.g : global variables (leader key, plugin settings, disable builtins, etc.) - - vim.o : global-only option (rarely needed directly) - - vim.wo : window-local option (applies to current window only, use in autocmds) - - vim.bo : buffer-local option (applies to current buffer only, use in autocmds) - - vim.env : set environment variables (like PATH, LANG) - - vim.fn : call Vimscript functions (e.g. vim.fn.getcwd()) - - vim.cmd : run raw Vimscript/Ex commands (e.g. vim.cmd("colorscheme desert")) - - vim.api : low-level Neovim API (create autocmds, keymaps, buffer/window ops, etc.) - - TL;DR -> use vim.opt + vim.g in options.lua for defaults. - Use vim.wo/vim.bo only in context-specific tweaks (autocmds). - Use vim.env, vim.fn, vim.cmd, vim.api as needed for scripting. ---]] -``` - -## check macos fileS: https://github.com/dsully/dotfiles/blob/main/.data/macos-defaults/globals.yaml - -# Used pacakges: - -- rockspaces Metadata files describing how to build and install a Lua package. -- luarocks Package manager for Lua modules. (optional) -- tree-sitter Parser generator. Not needed except for using CLI. (optional) - -- fd-find (fd) Alternative to `find`. (optional) -- ripgrep (rg) Line-oriented search tool. (recommended) - -- git Revision control system. (requirement) -- lazygit Terminal UI for git commands. (optional) - -- fzf Command-line fuzzy finder. -- bat "cat" but with colors -- curl Command-line for transferring data specified with URL syntax. -- wget Utility for downloading files from the Web. -- make -- cc Collection of compilers. -- build-essential Meta-package that installs standard C/C++ libraries and headers. - These are needed to compile tree-sitter parsers. Run only on the first time. - cc (gcc, clang) C compiler. Usually it points to `clang` (on macos) or `gcc` (on linux). - g++ C++ compiler. - make Build automation tool from source code. - -- unzip Extraction utility for archives compressed in .zip. -- ca-certificates Provides a set of trusted Certificate Authority (CA) certificates. -- openssh-client Tools for connecting to remote servers securely over SSH. -- libssl-dev Development libraries and headers for OpenSSL. -- sudo -- tree -- jq -- man-db -- python3 -- volta Node manager -- ncurses ncurses-dev ncurses-libs ncurses-terminfo \ -- check: https://github.com/glepnir/nvim/blob/main/Dockerfile - -# Currently installed - -- plenary.nvim -- lazy.nvim - -- nvim-treesitter -- neovim/nvim-lspconfig - - williamboman/mason.nvim - - williamboman/mason-lspconfig.nvim - - j-hui/fidget.nvim - - hrsh7th/cmp-nvim-lsp - - b0o/schemastore.nvim - -- windwp/nvim-ts-autotag # auto close,rename tags -- nvim-autopairs # auto pair chars -- stevearc/conform.nvim # formatter -- nvim-cmp # completion - - cmp-path - - cmp-nvim-lsp - -- nvim-tree.lua # file explorer -- telescope.nvim - - telescope-fzf-native.nvim - - telescope-ui-select.nvim - - plenary.nvim -- harpoon # tags - -# Notes: - -- in lsp change tsserver to vtsls - -# New package definition - -- Plugin and Package managers - - folke/lazy.nvim - - mason-org/mason.nvim -- TS - - nvim-treesitter - - nvim-treesitter-textobjects -- LSP - - neovim/nvim-lspconfig -- nvim-ts-autotag tag elements (``) -- windwp/nvim-autopairs auto pairs -- blink.cmp autocompletion -- stevearc/conform.nvim autoformat -- mini.ai `a/i` motions -- mini.pairs -- mini.surround -- mfussenegger/nvim-lint -- nvim-lspconfig -- fzf-lua (replace telescope) -- ? indent guides - - lukas-reineke/indent-blankline.nvim - - snacks.indent - - mini.indentscope - -## Deps: - -- SchemaStore.nvim -- mason-lspconfig.nvim -- mason.nvim - -## Maybe: - -- folke/ts-comments.nvim better comments -- grug-far.nvim find and replace -- markdown-preview.nvim side by side md (disabled in folke) -- toppair/peek.nvim another markdown preview? -- render-markdown.nvim inline viewer -- markview.nvim -- diffview.nvim -- octo.nvim edit and review GH issues and pr -- yanky.nvim better yank+put. has history -- inc-rename.nvim LSP renaming with visual feedback -- mini.basics defaults options -- mini.test run tests under cursor -- mini.diff inline diff -- mini.hipatters hilight patters and hex colors -- mini.move move chunks (like vscode) -- undo tree (find a plugin) - -## AI help - -- jackMort/ChatGPT.nvim -- MunifTanjim/nui.nvim (dep) -- nvim-lua/plenary.nvim (dep) -- nvim-telescope/telescope.nvim (dep) -- robitx/gp.nvim -- zbirenbaum/copilot.lua (folke) -- milanglacier/minuet-ai.nvim (folke) - -## Options - -``` - -opt.backup = true -opt.backupdir = vim.fn(stdpath("state") .. "/backup" -opt.mousescroll = "vert:1,hor:4" -opt.winborder = "rounded" -opt.undofile = true --- lazy - rtp = { - disabled_plugins = { "gzip", "tarPlugin", "zipPlugin", "tohtml", "tutor" }, - }, - -vim.keymap.set("n", "", "ciw") - --- ts lsp - includeCompletionsWithSnippetText = true, - jsxAttributeCompletionStyle = "auto", - --- tree-sitter parsers naming: - https://github.com/nvim-treesitter/nvim-treesitter/blob/master/lua/nvim-treesitter/parsers.lua -``` - -folke cmd - -```lua --- show cursor line only in active window -vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, { - callback = function() - if vim.w.auto_cursorline then - vim.wo.cursorline = true - vim.w.auto_cursorline = nil - end - end, -}) -vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, { - callback = function() - if vim.wo.cursorline then - vim.w.auto_cursorline = true - vim.wo.cursorline = false - end - end, -}) - --- backups -vim.api.nvim_create_autocmd("BufWritePre", { - group = vim.api.nvim_create_augroup("better_backup", { clear = true }), - callback = function(event) - local file = vim.uv.fs_realpath(event.match) or event.match - local backup = vim.fn.fnamemodify(file, ":p:~:h") - backup = backup:gsub("[/\\]", "%%") - vim.go.backupext = backup - end, -}) -``` - -Enable folding with TS: - -``` -vim.opt.foldmethod = "expr" -vim.opt.foldexpr = "nvim_treesitter#foldexpr()" -vim.opt.foldenable = false -- start with all folds open -``` diff --git a/docs/keymaps.md b/docs/keymaps.md deleted file mode 100644 index 04022ab..0000000 --- a/docs/keymaps.md +++ /dev/null @@ -1,119 +0,0 @@ -#============================================================ -# NEOVIM KEYMAP REFERENCE (CORE & USEFUL) -#============================================================ - - -#============================================================ -# INSERT MODE (Ctrl + ...) -#============================================================ -Ctrl + h Delete character before cursor -Ctrl + w Delete word before cursor -Ctrl + j Insert line break (newline) at cursor -Ctrl + t Indent current line one 'shiftwidth' to the right -Ctrl + d De-indent current line one 'shiftwidth' to the left -Ctrl + n Insert next auto-completion match -Ctrl + p Insert previous auto-completion match -Ctrl + r x Insert contents of register x -Ctrl + o {cmd} Temporarily enter Normal mode to execute {cmd} -Esc / Ctrl + c Exit insert mode and return to Normal mode - - -#============================================================ -# NORMAL MODE — WINDOW & TAB MANAGEMENT -#============================================================ -C-w s Split current window horizontally -C-w v Split current window vertically -C-w c Close current window -C-w q Quit current window (same as close but exit if last) -C-w w Cycle through open windows -C-w x Exchange window with next one - -C-w = Equalize window sizes -C-w _ Maximize height of current window -C-w | Maximize width of current window - -C-w h Move to window left -C-w j Move to window below -C-w k Move to window above -C-w l Move to window right - -C-w H Move current window far left -C-w J Move current window to bottom -C-w K Move current window to top -C-w L Move current window far right - -C-w t Move current split into a new tab - -gt Go to next tab -gT Go to previous tab -gt Go to tab number - - -#============================================================ -# NORMAL MODE — TAGS, JUMPS & MOTIONS -#============================================================ -Ctrl + ] Jump to tag under cursor -gd Go to local declaration -gD Go to global declaration -{ Jump backward one paragraph/block -} Jump forward one paragraph/block -; Repeat last motion forward -, Repeat last motion backward -Ctrl + e Scroll window down (cursor stays put) -Ctrl + y Scroll window up (cursor stays put) -H Move cursor to top of screen -M Move cursor to middle of screen -L Move cursor to bottom of screen - - -#============================================================ -# NORMAL MODE — TEXT OBJECTS -#============================================================ -aw "A word" — select word + following space -ab "A block" — select around () -aB "A Block" — select around {} -at "A tag" — select around XML/HTML tag - -ib "Inner block" — inside () -iB "Inner Block" — inside {} -it "Inner tag" — inside tag (no delimiters) - - -#============================================================ -# NORMAL MODE — DIFF / CHANGES -#============================================================ -do Obtain (get) changes from other window -dp Put (send) changes to other window - - -#============================================================ -# REGISTERS & CLIPBOARD -#============================================================ -"xy Yank into register x -"xp Paste contents of register x -"+y Yank into system clipboard -"+p Paste from system clipboard - -#--- Common Registers --- -"0 Last yank -" Unnamed register (last delete or yank) -"% Current file name -"# Alternate file name -"* X11 primary selection clipboard -"+ X11 clipboard register -"/ Last search pattern -": Last command-line command -". Last inserted text -"- Last small (less than a line) delete -"= Expression register (evaluate expression) -"_ Black hole register (discard output) - - -#============================================================ -# TIPS & NOTES -#============================================================ -- Ctrl + o in Insert mode is a powerful way to run one Normal-mode command temporarily. -- Use “aw”, “iw”, “ab”, “ib”, etc. with operators (e.g., ‘daw’, ‘yib’) for precise text manipulation. -- The system clipboard is “+” (Windows/macOS/Linux), but some X11 systems also use “*”. -- When in diff mode, ‘do’ and ‘dp’ are complementary: “get” vs. “put” changes. - diff --git a/docs/neovim-actions.md b/docs/neovim-actions.md deleted file mode 100644 index 513afbc..0000000 --- a/docs/neovim-actions.md +++ /dev/null @@ -1,94 +0,0 @@ --- Window Creation/Closing -Ctrl-w s - Split window horizontally -Ctrl-w v - Split window vertically -Ctrl-w n - Create new window horizontally with empty buffer -Ctrl-w c - Close current window -Ctrl-w o - Close all windows except current one - --- Window Navigation -Ctrl-h - Move to window on the left -Ctrl-j - Move to window below -Ctrl-k - Move to window above -Ctrl-l - Move to window on the right - --- Window Moving/Rearranging -Ctrl-w H - Move current window to far left -Ctrl-w J - Move current window to bottom -Ctrl-w K - Move current window to top -Ctrl-w L - Move current window to far right - --- Window Resizing -Ctrl-w = - Make all windows equal size -Ctrl-w _ - Maximize height of current window -Ctrl-w | - Maximize width of current window -Ctrl-w > - Increase width by 5 column -Ctrl-w < - Decrease width by 5 column -Ctrl-w + - Increase height by 5 row -Ctrl-w - - Decrease height by 5 row - --- Window Special Commands -Ctrl-w T - Move current window to new tab -Ctrl-w } - Preview definition in new window -Ctrl-w z - Close preview window - --- Tab -t] :tabnext - Go to next tab -t[ :tabprevious - Go to previous tab -tn :tabnew - Create a new tab -tc :tabclose - Close current tab -to :tabonly - Close all other tabs -{n} :{n}gt - Go to tab {n} - --- Buffer --- note: mainly using the telescope one -space telescope.buffers - open buffers with telescope. there can navigate and delete -bl :ls - List all buffers -bd :bdelete - Delete current buffer -bn :bnext - Go to next buffer -bp :bprevious - Go to previous buffer -b{n} :buffer {n} - Go to buffer {n} -bb :b - Start buffer selection -bo :bufdo bd|1bd - Delete all other buffers - --- Telescope -ff telescope.find_files - Search Files -fg telescope.live_grep - Search by Grep -fb telescope.buffers - Search Buffers -fh telescope.help_tags - Search Help -fp telescope.projects - Search Projects -fm telescope.marks - Search Marks -fc telescope.commands - Search Commands -fk telescope.keymaps - Search Keymaps -fs telescope.git_status - Search Git Status -fw telescope.grep_string - Search current Word -fd telescope.diagnostics - Search Diagnostics -fr telescope.lsp_references - Search References - --- Neo-tree -e :NvimTree toggle - Explorer Toggle -E :NvimTree focus - Explorer Focus - --- Harpoon -h harpoon_ui.toggle_menu - Harpoon Menu -m harpoon_mark.add_file - Mark File -1 harpoon_ui.nav_file(1) - Harpoon File 1 -2 harpoon_ui.nav_file(2) - Harpoon File 2 -3 harpoon_ui.nav_file(3) - Harpoon File 3 -4 harpoon_ui.nav_file(4) - Harpoon File 4 -hn harpoon_ui.nav_next - Harpoon Next -hp harpoon_ui.nav_prev - Harpoon Previous - --- Terminal -tet :terminal cd %:h - Terminal in This dir -ter :terminal - Terminal Regular -tec :!cd %:h && - Terminal Command - - Terminal Normal Mode - - Terminal Window Command - --- LSP -gd vim.lsp.buf.definition - Goto Definition -gr vim.lsp.buf.references - Goto References -K vim.lsp.buf.hover - Hover Documentation -rn vim.lsp.buf.rename - Rename -ca vim.lsp.buf.code_action - Code Action -f vim.lsp.buf.format - Format diff --git a/init.lua b/init.lua index a30d422..1225357 100644 --- a/init.lua +++ b/init.lua @@ -5,29 +5,7 @@ end vim.env.PATH = vim.fn.stdpath('data') .. '/mason/bin:' .. vim.env.PATH -vim.filetype.add({ - pattern = { - ['.*/templates/.*%.ya?ml'] = 'helm', - ['.*/manifests/.*%.ya?ml'] = 'helm', - ['.*/crds/.*%.ya?ml'] = 'helm', - ['.*/kubernetes/.*%.ya?ml'] = 'helm', - ['.*/k8s/.*%.ya?ml'] = 'helm', - ['.*/charts/.*%.ya?ml'] = 'helm', - }, - extension = { - gotmpl = 'helm', - tftpl = 'yaml', - }, -}) - -function _G.see(val) - local lines = vim.split(vim.inspect(val), '\n') - vim.cmd('new') - vim.api.nvim_buf_set_lines(0, 0, -1, false, lines) - vim.bo.buftype = 'nofile' - vim.bo.bufhidden = 'wipe' -end - require('core.options') +require('core.filetypes') require('core.keymaps') require('core.events') diff --git a/lua/core/events.lua b/lua/core/events.lua index ffb154a..448653d 100644 --- a/lua/core/events.lua +++ b/lua/core/events.lua @@ -5,6 +5,30 @@ local api = vim.api local au = api.nvim_create_autocmd local group = api.nvim_create_augroup('core.events', { clear = true }) +vim.api.nvim_create_user_command('W', function() + vim.cmd('w') +end, { desc = 'Write current buffer' }) + +function _G.see(val) + local lines = vim.split(vim.inspect(val), '\n') + vim.cmd('new') + vim.api.nvim_buf_set_lines(0, 0, -1, false, lines) + vim.bo.buftype = 'nofile' + vim.bo.bufhidden = 'wipe' +end + +vim.api.nvim_create_user_command('MessagesToBuffer', function() + local output = vim.api.nvim_exec2('silent messages', { output = true }).output or '' + local lines = vim.split(output, '\n', { plain = true, trimempty = false }) + + vim.cmd('new') + local bufnr = vim.api.nvim_get_current_buf() + vim.bo[bufnr].buftype = 'nofile' + vim.bo[bufnr].bufhidden = 'wipe' + vim.bo[bufnr].swapfile = false + vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines) +end, { desc = 'Open :messages output in a scratch buffer' }) + -- Automatically create a scratch buffer if Neovim starts with no files au('VimEnter', { group = group, diff --git a/lua/core/filetypes.lua b/lua/core/filetypes.lua new file mode 100644 index 0000000..a15b55f --- /dev/null +++ b/lua/core/filetypes.lua @@ -0,0 +1,14 @@ +vim.filetype.add({ + pattern = { + ['.*/templates/.*%.ya?ml'] = 'helm', + ['.*/manifests/.*%.ya?ml'] = 'helm', + ['.*/crds/.*%.ya?ml'] = 'helm', + ['.*/kubernetes/.*%.ya?ml'] = 'helm', + ['.*/k8s/.*%.ya?ml'] = 'helm', + ['.*/charts/.*%.ya?ml'] = 'helm', + }, + extension = { + gotmpl = 'helm', + tftpl = 'yaml', + }, +}) diff --git a/lua/plugins/filetree.lua b/lua/plugins/filetree.lua index e215aaa..02279f0 100644 --- a/lua/plugins/filetree.lua +++ b/lua/plugins/filetree.lua @@ -46,6 +46,20 @@ local function my_on_attach(bufnr) vim.keymap.set('n', 'U', api.tree.reload, opts) end +local ignored_watcher_dirs = { + ['.git'] = true, + ['.DS_Store'] = true, + build = true, + dist = true, + public = true, + node_modules = true, + target = true, +} + +local function ignore_watcher_dir(path) + return ignored_watcher_dirs[vim.fs.basename(path)] or false +end + require('nvim-tree').setup({ on_attach = my_on_attach, view = { signcolumn = 'no' }, @@ -55,6 +69,7 @@ require('nvim-tree').setup({ special_files = {}, highlight_hidden = 'all', + highlight_modified = 'name', highlight_clipboard = 'all', indent_markers = { @@ -70,7 +85,7 @@ require('nvim-tree').setup({ folder = false, folder_arrow = false, git = true, - modified = false, + modified = true, hidden = false, diagnostics = false, bookmarks = true, @@ -91,6 +106,7 @@ require('nvim-tree').setup({ hijack_cursor = true, prefer_startup_root = true, + reload_on_bufenter = true, update_focused_file = { enable = true, update_root = { enable = true, ignore_list = {} }, @@ -110,14 +126,6 @@ require('nvim-tree').setup({ filesystem_watchers = { enable = true, debounce_delay = 50, - ignore_dirs = { - '/.git', - '/.DS_Store', - '/build', - '/dist', - '/public', - '/node_modules', - '/target', - }, + ignore_dirs = ignore_watcher_dir, }, }) diff --git a/lua/setup/init.lua b/lua/setup/init.lua index 545b326..9f97198 100644 --- a/lua/setup/init.lua +++ b/lua/setup/init.lua @@ -1,9 +1,10 @@ -local function clone_package_manager() +local lock_path = vim.fs.joinpath(vim.fn.stdpath('config'), 'paq-lock.json') + +local function clone_paq() local path = vim.fn.stdpath('data') .. '/site/pack/paqs/opt/paq-nvim' if not vim.uv.fs_stat(path) then local repo = 'https://github.com/savq/paq-nvim.git' - local cmd = { 'git', 'clone', '--depth=1', repo, path } - local result = vim.system(cmd):wait() + local result = vim.system({ 'git', 'clone', '--depth=1', repo, path }):wait() if result.code == 0 then print('Package manager installed correctly') end @@ -14,11 +15,13 @@ local function load_paq() vim.cmd.packadd('paq-nvim') local paq = require('paq') local packages = require('setup.packages').get() - paq:setup({ lock = vim.fn.stdpath('config') .. '/paq-lock.json' })(packages) + paq:setup({ lock = lock_path })(packages) return paq end local function install_packages() + clone_paq() + local done = false vim.api.nvim_create_autocmd('User', { pattern = 'PaqDoneInstall', @@ -31,11 +34,6 @@ local function install_packages() local paq = load_paq() paq.install() - local to_install = paq.query('to_install') - if #to_install == 0 then - return - end - vim.wait(60000, function() return done end, 200) @@ -57,30 +55,20 @@ local function install_languages() lm.install() end -vim.api.nvim_create_user_command('InstallAll', function() - print('> Starting clone package manager...') - clone_package_manager() - print('\n> Starting installing packages...') - install_packages() - print('\n> Starting installing languages: ts parsers, language servers, linters, formatters...') - install_languages() - print('\n=== Install Finished ===\n\n') -end, {}) - -vim.api.nvim_create_user_command('Sync', function() +local function sync_packages() + clone_paq() local paq = load_paq() paq:sync() -end, {}) +end -vim.api.nvim_create_user_command('FetchLspConfigs', function() - -- local base_url = 'https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lsp/' +local function fetch_lsp_configs() local base_url = 'https://raw.githubusercontent.com/neovim/nvim-lspconfig/refs/heads/master/lsp/' local lm = require('plugins.language-manager') lm.invalidate_cache() local general = lm.load_specs() - local lsp_dir = vim.fs.joinpath(vim.fn.getcwd(), 'lsp') + local lsp_dir = vim.fs.joinpath(vim.fn.stdpath('config'), 'lsp') vim.fn.mkdir(lsp_dir, 'p') for _, name in ipairs(general.language_servers or {}) do @@ -99,4 +87,31 @@ vim.api.nvim_create_user_command('FetchLspConfigs', function() vim.notify('Skipped existing ' .. name .. '.lua', vim.log.levels.INFO) end end -end, { desc = 'Fetch default LSP configs into ./lsp in cwd' }) +end + +local function create_command(name, callback, desc) + vim.api.nvim_create_user_command(name, callback, { desc = desc }) +end + +create_command('Setup', function() + print('> Installing packages...') + install_packages() + print('\n> Installing languages: treesitter parsers, language servers, linters, formatters...') + install_languages() + print('\n=== Setup Finished ===\n') +end, 'Install packages and language tooling (first-time setup)') + +create_command('InstallPackages', function() + print('> Installing packages...') + install_packages() + print('\n=== Package Install Finished ===\n') +end, 'Install packages via Paq') + +create_command('InstallLanguages', function() + print('> Installing languages: treesitter parsers, language servers, linters, formatters...') + install_languages() + print('\n=== Language Install Finished ===\n') +end, 'Install treesitter, LSP, linter, and formatter tooling') + +create_command('Sync', sync_packages, 'Sync packages with Paq') +create_command('FetchLspConfigs', fetch_lsp_configs, 'Fetch default LSP configs into lsp/')