Repository: AstroNvim/AstroNvim Branch: main Commit: 7fd58328e2bc Files: 78 Total size: 290.7 KB Directory structure: gitextract_p228trao/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yaml │ └── workflows/ │ ├── ci.yml │ └── stale.yml ├── .gitignore ├── .luarc.json ├── .neoconf.json ├── .stylua.toml ├── .styluaignore ├── .typos.toml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── init.lua ├── lua/ │ └── astronvim/ │ ├── config.lua │ ├── dev.lua │ ├── health.lua │ ├── init.lua │ ├── lazy_snapshot.lua │ ├── notify.lua │ └── plugins/ │ ├── _astrocore.lua │ ├── _astrocore_autocmds.lua │ ├── _astrocore_mappings.lua │ ├── _astrocore_options.lua │ ├── _astrolsp.lua │ ├── _astrolsp_autocmds.lua │ ├── _astrolsp_mappings.lua │ ├── _astrotheme.lua │ ├── _astroui.lua │ ├── _astroui_status.lua │ ├── aerial.lua │ ├── autopairs.lua │ ├── better-escape.lua │ ├── blink.lua │ ├── comment.lua │ ├── configs/ │ │ ├── cmp-dap.lua │ │ ├── lspconfig.lua │ │ ├── luasnip.lua │ │ ├── mason-lspconfig.lua │ │ ├── mason-null-ls.lua │ │ ├── mason-nvim-dap.lua │ │ ├── mason-tool-installer.lua │ │ ├── nvim-autopairs.lua │ │ ├── nvim-dap-ui.lua │ │ ├── nvim-dap.lua │ │ ├── nvim-treesitter.lua │ │ ├── ts-autotag.lua │ │ └── vim-illuminate.lua │ ├── dap.lua │ ├── gitsigns.lua │ ├── guess-indent.lua │ ├── heirline.lua │ ├── highlight-colors.lua │ ├── lazydev.lua │ ├── lspconfig.lua │ ├── luasnip.lua │ ├── mason-tool-installer.lua │ ├── mason.lua │ ├── mini-icons.lua │ ├── neo-tree.lua │ ├── none-ls.lua │ ├── nvim-ufo.lua │ ├── resession.lua │ ├── smart-splits.lua │ ├── snacks.lua │ ├── todo-comments.lua │ ├── toggleterm.lua │ ├── treesitter.lua │ ├── ts-autotag.lua │ ├── ts-context-commentstring.lua │ ├── vim-illuminate.lua │ ├── which-key.lua │ └── window-picker.lua ├── neovim.yml ├── selene.toml └── version.txt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ github: AstroNvim ko_fi: mehalter liberapay: mehalter custom: https://www.buymeacoffee.com/mehalter ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: Bug report description: Create a report to help us improve labels: [bug] body: - type: checkboxes id: terms attributes: label: Checklist description: Have you checked if someone has reported this issue before? options: - label: I have searched through the AstroNvim docs required: true - label: I have searched through the existing issues of AstroNvim required: true - label: I have searched the existing issues of plugins related to this issue required: true - label: I have run `:Lazy update` and are on the latest version of AstroNvim required: true - label: I can replicate the bug with the minimal `repro.lua` provided below required: true - type: input id: system-version validations: required: true attributes: label: "Operating system/version" placeholder: "macOS 11.5" - type: input id: terminal validations: required: true attributes: label: "Terminal/GUI" placeholder: "kitty" - type: textarea id: health validations: required: true attributes: label: AstroNvim Health description: Output of `:checkhealth astronvim` placeholder: | ## AstroNvim - AstroNvim Version: v4.6.0 - Neovim Version: v0.9.5 - OK: Using stable Neovim >= 0.9.5 - type: textarea id: description validations: required: true attributes: label: Describe the bug placeholder: A clear and concise description of what the bug is. - type: textarea id: reproduce validations: required: true attributes: label: Steps to Reproduce placeholder: | 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error - type: textarea id: expected validations: required: true attributes: label: Expected behavior placeholder: A clear and concise description of what you expected to happen - type: textarea id: screenshots attributes: label: Screenshots description: If applicable, add screenshots or recording ([Asciinema](asciinema.org)) to help explain your problem. - type: textarea id: additional-context attributes: label: Additional Context placeholder: Add any additional context about the problem here. - type: textarea validations: required: true attributes: label: Repro description: Minimal `init.lua` to reproduce this issue. Save as `repro.lua` and run with `nvim -u repro.lua` value: | -- save as repro.lua -- run with nvim -u repro.lua -- DO NOT change the paths local root = vim.fn.fnamemodify("./.repro", ":p") -- set stdpaths to use .repro for _, name in ipairs({ "config", "data", "state", "runtime", "cache" }) do vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name end -- bootstrap lazy local lazypath = root .. "/plugins/lazy.nvim" if not vim.loop.fs_stat(lazypath) then -- stylua: ignore vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) end vim.opt.rtp:prepend(vim.env.LAZY or lazypath) -- install plugins local plugins = { { "AstroNvim/AstroNvim", import = "astronvim.plugins" }, -- add any other plugins/customizations here } require("lazy").setup(plugins, { root = root .. "/plugins", }) -- add anything else here (autocommands, vim.filetype, etc.) render: Lua ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Discord Chat url: https://discord.astronvim.com about: Ask questions and have discussions about AstroNvim on Discord - name: r/AstroNvim (Reddit) url: https://www.reddit.com/r/AstroNvim about: Ask questions about AstroNvim on the official Subreddit ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.yaml ================================================ name: Feature request description: Suggest an idea for this project labels: [enhancement] body: - type: textarea id: problem attributes: label: Is your feature related to a problem? placeholder: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - type: textarea id: solution validations: required: true attributes: label: Describe the new feature placeholder: A clear and concise description of what the new feature is. - type: textarea id: additional-context attributes: label: Additional context placeholder: Add any other context or screenshots about the feature request here. ================================================ FILE: .github/workflows/ci.yml ================================================ name: AstroNvim on: push: branches: [main] pull_request: pull_request_target: types: [opened, edited, synchronize] release: types: [published] jobs: CI: uses: AstroNvim/.github/.github/workflows/plugin_ci.yml@main if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }} secrets: inherit with: plugin_name: ${{ github.event.repository.name }} is_production: ${{ github.event_name == 'push' }} docs: false PR: uses: AstroNvim/.github/.github/workflows/validate_pr.yml@main if: ${{ github.event_name == 'pull_request_target' }} secrets: inherit Announcement: uses: AstroNvim/.github/.github/workflows/discord_announcement.yml@main if: ${{ github.event_name == 'release' }} secrets: inherit ================================================ FILE: .github/workflows/stale.yml ================================================ name: "Close stale issues and PRs" on: schedule: - cron: "30 1 * * *" # run at 0130 UTC jobs: stale: uses: AstroNvim/.github/.github/workflows/stale.yml@main secrets: inherit ================================================ FILE: .gitignore ================================================ # Project gitignore coc-settings.json # Global gitignore # ---------------- # Mac OS X .AppleDouble .DS_Store .LSOverride ._* # Windoze $RECYCLE.BIN/ Thumbs.db Thumbs.db:encryptable ehthumbs.db ehthumbs_vista.db # (Neo)Vim *~ .netrwhist Session.vim Sessionx.vim [._]*.s[a-v][a-z] [._]*.sw[a-p] [._]s[a-rt-v][a-z] [._]ss[a-gi-z] [._]sw[a-p] [._]*.un~ tags # VS Code .history .vscode # JetBrains .idea ================================================ FILE: .luarc.json ================================================ { "format.enable": false } ================================================ FILE: .neoconf.json ================================================ { "neodev": { "library": { "enabled": true, "plugins": true } }, "neoconf": { "plugins": { "lua_ls": { "enabled": true } } }, "lspconfig": { "lua_ls": { "Lua.format.enable": false } } } ================================================ FILE: .stylua.toml ================================================ column_width = 120 line_endings = "Unix" indent_type = "Spaces" indent_width = 2 quote_style = "AutoPreferDouble" call_parentheses = "None" collapse_simple_statement = "Always" ================================================ FILE: .styluaignore ================================================ lua/astronvim/lazy_snapshot.lua ================================================ FILE: .typos.toml ================================================ # See https://github.com/crate-ci/typos/blob/master/docs/reference.md to configure typos [default.extend-words] enew = "enew" fo = "fo" ba = "ba" afe = "afe" abd = "abd" caf = "caf" ================================================ FILE: CHANGELOG.md ================================================ # Changelog ## [5.3.15](https://github.com/AstroNvim/AstroNvim/compare/v5.3.14...v5.3.15) (2026-01-26) ### Bug Fixes * **snapshot:** update `lazy_snapshot` ([93b273b](https://github.com/AstroNvim/AstroNvim/commit/93b273baa9ac86e4100c12bbed14b192379706d3)) ## [5.3.14](https://github.com/AstroNvim/AstroNvim/compare/v5.3.13...v5.3.14) (2025-12-29) ### Bug Fixes * **autocmds:** only check time of valid buffers ([7381fbd](https://github.com/AstroNvim/AstroNvim/commit/7381fbd5f43a685b877df4ef5d0ef85d362cfcbc)) ## [5.3.13](https://github.com/AstroNvim/AstroNvim/compare/v5.3.12...v5.3.13) (2025-11-13) ### Bug Fixes * **autocmds:** improve `on_key` function to handle searching in command mode and replace mode ([0001b5a](https://github.com/AstroNvim/AstroNvim/commit/0001b5adbd6b6b9c14166f5c5955c43fde5624de)) ## [5.3.12](https://github.com/AstroNvim/AstroNvim/compare/v5.3.11...v5.3.12) (2025-09-26) ### Bug Fixes * **blink:** fix missing snippet icon when use `lspkind` symbols ([d871f76](https://github.com/AstroNvim/AstroNvim/commit/d871f76baeb7e27815a75e37380042166e8c031a)) ## [5.3.11](https://github.com/AstroNvim/AstroNvim/compare/v5.3.10...v5.3.11) (2025-09-11) ### Bug Fixes * **snapshot:** update `lazy_snapshot` ([3f34751](https://github.com/AstroNvim/AstroNvim/commit/3f34751725337ad2bcd3a9546cd185ab286ab5b2)) ## [5.3.10](https://github.com/AstroNvim/AstroNvim/compare/v5.3.9...v5.3.10) (2025-08-31) ### Bug Fixes * **autocmds:** resolve aerial not closing when last buffer ([f3e7cd3](https://github.com/AstroNvim/AstroNvim/commit/f3e7cd30d851e5b0d5bfc347dec76427d0e1e9c9)), closes [#2843](https://github.com/AstroNvim/AstroNvim/issues/2843) ## [5.3.9](https://github.com/AstroNvim/AstroNvim/compare/v5.3.8...v5.3.9) (2025-08-19) ### Bug Fixes * check for `gdu` executable first on Mac before checking for `gdu-go` ([042d87c](https://github.com/AstroNvim/AstroNvim/commit/042d87c1e53feb0b296d32274e60afac36debfe3)), closes [#2839](https://github.com/AstroNvim/AstroNvim/issues/2839) ## [5.3.8](https://github.com/AstroNvim/AstroNvim/compare/v5.3.7...v5.3.8) (2025-08-07) ### Reverts * move back to previous logic for automatic hlsearch management ([ff58f54](https://github.com/AstroNvim/AstroNvim/commit/ff58f5490880edfc0934e2ebec23a1cf11fa99bf)) ## [5.3.7](https://github.com/AstroNvim/AstroNvim/compare/v5.3.6...v5.3.7) (2025-08-07) ### Bug Fixes * **autocmds:** improve detection of automatic hlsearch management ([09d3128](https://github.com/AstroNvim/AstroNvim/commit/09d31282ace6872ad6335fd4b38511ad99ec17fd)) ## [5.3.6](https://github.com/AstroNvim/AstroNvim/compare/v5.3.5...v5.3.6) (2025-07-26) ### Bug Fixes * **blink:** add workaround for missing `` mapping in `cmdline` mappings ([fa68880](https://github.com/AstroNvim/AstroNvim/commit/fa68880bcb1c47790ec5acb3da5548e7616574d2)) ## [5.3.5](https://github.com/AstroNvim/AstroNvim/compare/v5.3.4...v5.3.5) (2025-07-21) ### Bug Fixes * **astrocore:** fix incorrect which-key mapping label to indicate buffer local mapping ([047c941](https://github.com/AstroNvim/AstroNvim/commit/047c941a9d7037065ef5069b76531d46688319c5)) * **snacks:** Fix Snacks notifier icons ([e72c9a0](https://github.com/AstroNvim/AstroNvim/commit/e72c9a0523b9f4b76cdc6fa165298d42ae8b91ae)) ## [5.3.4](https://github.com/AstroNvim/AstroNvim/compare/v5.3.3...v5.3.4) (2025-07-01) ### Bug Fixes * **snapshot:** update dependencies ([c2f9ac8](https://github.com/AstroNvim/AstroNvim/commit/c2f9ac881ab830989726b5eb7fea7cd07f12d570)) ## [5.3.3](https://github.com/AstroNvim/AstroNvim/compare/v5.3.2...v5.3.3) (2025-05-31) ### Bug Fixes * **astrolsp:** use `astrolsp.utils` for `supports_method` for deprecation protection ([555be37](https://github.com/AstroNvim/AstroNvim/commit/555be37d8903b0ead166a35ff80dac22076fa375)) * **treesitter:** specify `master` branch in preparation to default branch change ([ed3c636](https://github.com/AstroNvim/AstroNvim/commit/ed3c636e132ae8c40ddc2557c64874b76c420e3a)) ## [5.3.2](https://github.com/AstroNvim/AstroNvim/compare/v5.3.1...v5.3.2) (2025-05-27) ### Bug Fixes * **heirline:** fix highlights not being set until `setup` is called ([9d14deb](https://github.com/AstroNvim/AstroNvim/commit/9d14deb242d4e37621ea61ccc997b51b4d5e36dc)) ### Performance Improvements * **heirline:** add caching for highlight functions ([f082fac](https://github.com/AstroNvim/AstroNvim/commit/f082faccf483bc095ad539aed62352ed0d57bdad)) ## [5.3.1](https://github.com/AstroNvim/AstroNvim/compare/v5.3.0...v5.3.1) (2025-05-21) ### Bug Fixes * **neo-tree:** fix netrw hijacking on first directory opened ([a5c6434](https://github.com/AstroNvim/AstroNvim/commit/a5c6434fae7fe60dbeb95158d26aa9b2d244c6c7)) ## [5.3.0](https://github.com/AstroNvim/AstroNvim/compare/v5.2.6...v5.3.0) (2025-05-13) ### Features * **snapshot:** update Mason to v2 ([b786c47](https://github.com/AstroNvim/AstroNvim/commit/b786c47284c50dca399857c8eef886035bec2e32)) ### Bug Fixes * always pin `blink.cmp` and `mason-lspconfig` even in development mode ([790c5ca](https://github.com/AstroNvim/AstroNvim/commit/790c5ca2bdcf6deee8973644476b49a4470ebe8e)) * **lspconfig:** pin `nvim-lspconfig` to last version not requiring `vim.lsp.config` for Neovim v0.11 ([a5e4de2](https://github.com/AstroNvim/AstroNvim/commit/a5e4de2db3cf7c1deb89f57545a3a4bcde4e6bd2)) ## [5.2.6](https://github.com/AstroNvim/AstroNvim/compare/v5.2.5...v5.2.6) (2025-04-23) ### Bug Fixes * **resession:** get configuration directly from AstroCore ([caf0c74](https://github.com/AstroNvim/AstroNvim/commit/caf0c74ce86d29378c15a224c43c7b2c21246b61)) ## [5.2.5](https://github.com/AstroNvim/AstroNvim/compare/v5.2.4...v5.2.5) (2025-04-22) ### Bug Fixes * **astrocore:** restrict overriding of `foldexpr` on `FileType` ([848884a](https://github.com/AstroNvim/AstroNvim/commit/848884ae2db41c4e2ee96a621ee43e15f462a6ed)) ## [5.2.4](https://github.com/AstroNvim/AstroNvim/compare/v5.2.3...v5.2.4) (2025-04-21) ### Bug Fixes * **astrocore:** make AstroUI folding persistent and override ftplugins ([90409ec](https://github.com/AstroNvim/AstroNvim/commit/90409ecf294765d9967c5f903c706f3d54505d72)) * **neo-tree:** only map filter mappings for filesystem window ([2ddcd27](https://github.com/AstroNvim/AstroNvim/commit/2ddcd27161607fcc9e6b8a3c979538e2e7affec3)), closes [#2802](https://github.com/AstroNvim/AstroNvim/issues/2802) ## [5.2.3](https://github.com/AstroNvim/AstroNvim/compare/v5.2.2...v5.2.3) (2025-04-18) ### Bug Fixes * **treesitter:** only perform treesitter installations when compiler is available ([ceadde7](https://github.com/AstroNvim/AstroNvim/commit/ceadde78e655df563d30cbb7d73dc6b649d29be6)) ## [5.2.2](https://github.com/AstroNvim/AstroNvim/compare/v5.2.1...v5.2.2) (2025-04-17) ### Bug Fixes * **highlight-colors:** fix typo in config option ([c0aa908](https://github.com/AstroNvim/AstroNvim/commit/c0aa90857f62f7e7e778c592df125b84e133bdc0)) * **options:** always set `clipboard` to `unnamedplus` as this works with OSC52 ([eb583af](https://github.com/AstroNvim/AstroNvim/commit/eb583af3696d486ecd6c2a88ee90511d2d1e1314)) ## [5.2.1](https://github.com/AstroNvim/AstroNvim/compare/v5.2.0...v5.2.1) (2025-04-16) ### Bug Fixes * **nui:** pin to commit until next release ([c1784e3](https://github.com/AstroNvim/AstroNvim/commit/c1784e3a0d7d035211726894e550026bf890da1b)) * **todo-comments:** properly resolve lazy load commands based on plugin availability ([cdddbd3](https://github.com/AstroNvim/AstroNvim/commit/cdddbd3b9e1d83f39a0dae326a41585dba6c4c03)) ## [5.2.0](https://github.com/AstroNvim/AstroNvim/compare/v5.1.5...v5.2.0) (2025-04-15) ### Features * **snacks:** add undo history picker ([ebcdba5](https://github.com/AstroNvim/AstroNvim/commit/ebcdba5ab43d8a9e9fa2717e401dbfa679dd2ed7)) ## [5.1.5](https://github.com/AstroNvim/AstroNvim/compare/v5.1.4...v5.1.5) (2025-04-15) ### Bug Fixes * **neo-tree:** automatically extend `event_handlers` table ([c43b681](https://github.com/AstroNvim/AstroNvim/commit/c43b68155fb249967a707793ac7843c54c3ac027)) ## [5.1.4](https://github.com/AstroNvim/AstroNvim/compare/v5.1.3...v5.1.4) (2025-04-14) ### Bug Fixes * **highlight-colors:** update for important bug fix ([02f599c](https://github.com/AstroNvim/AstroNvim/commit/02f599c7330010eb2a391846574831dcdbfb52a6)) ## [5.1.3](https://github.com/AstroNvim/AstroNvim/compare/v5.1.2...v5.1.3) (2025-04-04) ### Bug Fixes * **snacks:** leave toggle mappings disabling on startup but toggling later ([b5d033c](https://github.com/AstroNvim/AstroNvim/commit/b5d033c54dc22966550662170993401c7865d915)) ## [5.1.2](https://github.com/AstroNvim/AstroNvim/compare/v5.1.1...v5.1.2) (2025-04-04) ### Bug Fixes * **snacks:** make it possible to disable mappings for individual snacks ([724397c](https://github.com/AstroNvim/AstroNvim/commit/724397c9cce2312342682fac09d51198a31d51db)) ## [5.1.1](https://github.com/AstroNvim/AstroNvim/compare/v5.1.0...v5.1.1) (2025-04-03) ### Bug Fixes * **blink:** disable `ghost_text` in `cmdline` by default ([186eae3](https://github.com/AstroNvim/AstroNvim/commit/186eae3b4643865570238303d17d7e87ffacb445)) ### Reverts * **blink:** re-enable `cmdline` in `blink.cmp` after fix upstream ([9cb32ab](https://github.com/AstroNvim/AstroNvim/commit/9cb32ab5bfb8dae23256048bf11b62ea8aca72f5)) ## [5.1.0](https://github.com/AstroNvim/AstroNvim/compare/v5.0.6...v5.1.0) (2025-04-01) ### Features * **snacks:** add find in dir commands for neo-tree ([008c7c9](https://github.com/AstroNvim/AstroNvim/commit/008c7c9a1fe7c7f0ed131201a67aba744ec42f4a)) * **snacks:** add help text for find mappings ([517a6f5](https://github.com/AstroNvim/AstroNvim/commit/517a6f5cee17236235dbeecad69f836feb55bcf0)) ### Bug Fixes * **blink:** disable `cmdline` by default due to instability ([0a22f02](https://github.com/AstroNvim/AstroNvim/commit/0a22f029e4cd82f53d22b3f515d350a8c1ad5fdc)), closes [#2782](https://github.com/AstroNvim/AstroNvim/issues/2782) ## [5.0.6](https://github.com/AstroNvim/AstroNvim/compare/v5.0.5...v5.0.6) (2025-03-31) ### Bug Fixes * **blink:** prefer rust based fuzzy matching but silently fall back to lua ([f14a3d9](https://github.com/AstroNvim/AstroNvim/commit/f14a3d91db4eb4aed16a80da07a349644038dd98)) * **treesitter:** load treesitter immediately if opening a file directly ([ab69f95](https://github.com/AstroNvim/AstroNvim/commit/ab69f958bd7b2bf7bdaaeabd40ef5c6460d04c8d)) ## [5.0.5](https://github.com/AstroNvim/AstroNvim/compare/v5.0.4...v5.0.5) (2025-03-31) ### Bug Fixes * **blink:** incorrect order of tab operations, select should happen with highest priority ([4230a6f](https://github.com/AstroNvim/AstroNvim/commit/4230a6f7f53a6768dac77f9c1d4a941d9c29c0a0)) ## [5.0.4](https://github.com/AstroNvim/AstroNvim/compare/v5.0.3...v5.0.4) (2025-03-29) ### Bug Fixes * **snacks:** always enable `snacks.image` because utility function locks in configuration early ([bec1085](https://github.com/AstroNvim/AstroNvim/commit/bec1085c6886f0a9b20a48fdcf04544fc0b0da7c)), closes [#2774](https://github.com/AstroNvim/AstroNvim/issues/2774) ## [5.0.3](https://github.com/AstroNvim/AstroNvim/compare/v5.0.2...v5.0.3) (2025-03-29) ### Bug Fixes * **snapshot:** temporarily pin todo-comments to commit until next release ([30b0d2f](https://github.com/AstroNvim/AstroNvim/commit/30b0d2fe6bcd057c5f8d57b22d820bc954603eeb)) ## [5.0.2](https://github.com/AstroNvim/AstroNvim/compare/v5.0.1...v5.0.2) (2025-03-28) ### Bug Fixes * **which-key:** disable all icons when icons are disabled ([10fd1c6](https://github.com/AstroNvim/AstroNvim/commit/10fd1c6d07e1ef1142ab33ff262b2c8abbbcc9c2)), closes [#2770](https://github.com/AstroNvim/AstroNvim/issues/2770) ## [5.0.1](https://github.com/AstroNvim/AstroNvim/compare/v5.0.0...v5.0.1) (2025-03-27) ### Bug Fixes * **blink:** use ascii icons when icons are disabled ([a32c53f](https://github.com/AstroNvim/AstroNvim/commit/a32c53fe57fa15342cfe09dba7e1696d7ffb16ee)) * **blink:** use icon provider for snippets source ([57778ec](https://github.com/AstroNvim/AstroNvim/commit/57778ecc8e67bf31126fe24a56750562ad6312a8)) * **mason:** use ascii icons if icons are disabled ([533d716](https://github.com/AstroNvim/AstroNvim/commit/533d7166593d42886ca2e05f0997299472ac160a)) * **mini-icons:** set style to `ascii` if icons are disabled ([87d8642](https://github.com/AstroNvim/AstroNvim/commit/87d86425ed6f7a8aa831b3ef4a9fdb621d367492)) ## [5.0.0](https://github.com/AstroNvim/AstroNvim/compare/v4.32.3...v5.0.0) (2025-03-26) ### ⚠ BREAKING CHANGES * move from `nvim-cmp` to `blink.cmp` * **plugins:** only use `nvim-ts-context-commentstring` if Neovim v0.10 * **plugins:** only use `Comment.nvim` if Neovim v0.10 * **plugins:** replace `alpha-nvim` with `snacks.dashboard` * **plugins:** replace `telescope` with `snacks.picker` * **plugins:** replace `indent-blankline` with `snacks.indent` * **plugins:** replace `mini.bufremove` with `snacks.bufdelete` * **plugins:** replace `nvim-notify` with `snacks.notifier` * **plugins:** replace `dressing.nvim` with `snacks.input` and `snacks.picker` * use built in Neovim folding in Neovim v0.11 * **astrocore:** use default `update_in_insert` value for diagnostic configuration * **mappings:** move LSP implementation mapping from `gI` to `gri` to align with Neovim defaults * **astrolsp:** do not configure any language servers out of the box, removes disabling third party checking in `lua_ls` * require Neovim v0.10+ * **mappings:** use `` in insert mode for signature help to align with default Neovim * **config:** remove `astronvim.plugins.configs.heirline` function * **config:** remove `astronvim.plugins.configs.guess-indent` function * **plugins:** replace `nvim-web-devicons` and `lspkind.nvim` with `mini.icons` * **plugins:** move from `nvim-colorizer` to `nvim-highlight-colors` * **plugins:** migrate to `mason-tool-installer` for managing Mason installations ### Features * **astrocore:** add new `uv` and `uV` for toggling virtual text and virtual lines ([fbc7c1e](https://github.com/AstroNvim/AstroNvim/commit/fbc7c1ec427e645727790b4352c892ecbc03ef00)) * **astrocore:** only enable large buffer detection for real file buffers by default ([d61f2b1](https://github.com/AstroNvim/AstroNvim/commit/d61f2b18c0c3dca88507b74f097e1535def27e89)) * **astrolsp:** enable LSP file operations by default ([870ddb2](https://github.com/AstroNvim/AstroNvim/commit/870ddb205a145a1d48bbc13ec448bccd9ee29881)) * **astrolsp:** trigger `willCreateFiles`/`didCreateFiles` when creating new files with vim ([a0dbcb6](https://github.com/AstroNvim/AstroNvim/commit/a0dbcb62e250dcad6314d5413c508404a9dfbf87)) * **astrolsp:** use the new `defaults` table for configuring `hover` and `signature_help` ([4bee581](https://github.com/AstroNvim/AstroNvim/commit/4bee581c99eee64716246be6e97cdb00a52d03e6)) * **autocmds:** add autocommand for restoring cursor position now that views are removed ([f164370](https://github.com/AstroNvim/AstroNvim/commit/f1643702f2c6a0a4b9cec9df9e4936b9ce3cf6bb)) * **commands:** add `AstroRename` for easily renaming the current file ([edc0d22](https://github.com/AstroNvim/AstroNvim/commit/edc0d22489234593d68237cc4d6e6da55d478820)) * **highlight-colors:** disable highlight colors on large buffers ([ce0a094](https://github.com/AstroNvim/AstroNvim/commit/ce0a09460aadc058dc700e6e059037a660fa1758)) * **mappings:** add `gco` and `gcO` for inserting comments above and below ([c6431b5](https://github.com/AstroNvim/AstroNvim/commit/c6431b5c29f7db7e782e3c9ce8640af8d366a5b6)) * **mappings:** backport new Neovim v0.11 default `gO` mapping for `vim.lsp.buf.document_symbol` ([7e104a8](https://github.com/AstroNvim/AstroNvim/commit/7e104a879a8fe2d30f542233ac2d14c2bb7e87ee)) * **mappings:** move LSP implementation mapping from `gI` to `gri` to align with Neovim defaults ([f3bb5ab](https://github.com/AstroNvim/AstroNvim/commit/f3bb5ab652ff839ea3a90696f028a506f82bc754)) * **mappings:** use `` in insert mode for signature help to align with default Neovim ([1fba436](https://github.com/AstroNvim/AstroNvim/commit/1fba4363fabbf47c21f4b4d471629e0c210c8411)) * **mason-lspconfig:** use AstroLSP to register extra language server mappings to mason packages ([5b57025](https://github.com/AstroNvim/AstroNvim/commit/5b57025b578c2ab7488dc54f2c02cd9cdd3366bb)) * move from `nvim-cmp` to `blink.cmp` ([956bc1c](https://github.com/AstroNvim/AstroNvim/commit/956bc1cf899deaf931236ad444e6edd3f10bbe48)) * **options:** default `uselast` option for `tabclose` in Neovim v0.11 ([d0e7ade](https://github.com/AstroNvim/AstroNvim/commit/d0e7adeb1beab55102845f524f99348182b0f98d)) * **options:** disable completion messages with `shortmess` ([a1f02d0](https://github.com/AstroNvim/AstroNvim/commit/a1f02d02f24ae4b7fddbc74bf3178ee27db5c9f7)) * **plugins:** migrate to `mason-tool-installer` for managing Mason installations ([7c7822d](https://github.com/AstroNvim/AstroNvim/commit/7c7822d29f4f3312cd42b86aad611bc51813f7b1)) * **plugins:** move from `nvim-colorizer` to `nvim-highlight-colors` ([d7c525f](https://github.com/AstroNvim/AstroNvim/commit/d7c525fc65095f1ea7a22a72e5fc54c6804eaba1)) * **plugins:** only use `Comment.nvim` if Neovim v0.10 ([caba46d](https://github.com/AstroNvim/AstroNvim/commit/caba46d4b3fed212017cee6b1d601093ab36d059)) * **plugins:** only use `nvim-ts-context-commentstring` if Neovim v0.10 ([bfd4d0d](https://github.com/AstroNvim/AstroNvim/commit/bfd4d0dd987679159f70147645b15bf63707d941)) * **plugins:** replace `alpha-nvim` with `snacks.dashboard` ([f572528](https://github.com/AstroNvim/AstroNvim/commit/f5725287b2af1247612ec8b5307374db5a3e9ff4)) * **plugins:** replace `dressing.nvim` with `snacks.input` and `snacks.picker` ([6eea6e4](https://github.com/AstroNvim/AstroNvim/commit/6eea6e4af905a7e3cfbe249c4acc44a21e1171b3)) * **plugins:** replace `indent-blankline` with `snacks.indent` ([810236d](https://github.com/AstroNvim/AstroNvim/commit/810236d6bc596095ac1111790baf6036baf96d31)) * **plugins:** replace `mini.bufremove` with `snacks.bufdelete` ([83ddcb6](https://github.com/AstroNvim/AstroNvim/commit/83ddcb6c615559abb5b83d2201dc92adb74d7f87)) * **plugins:** replace `nvim-notify` with `snacks.notifier` ([ea175ff](https://github.com/AstroNvim/AstroNvim/commit/ea175ff4dc7dfb36f4889c403254e61f643c9af7)) * **plugins:** replace `nvim-web-devicons` and `lspkind.nvim` with `mini.icons` ([0c8e0fb](https://github.com/AstroNvim/AstroNvim/commit/0c8e0fb41292b5049e22eb0cf5e23b3b9d689083)) * **plugins:** replace `telescope` with `snacks.picker` ([a682e51](https://github.com/AstroNvim/AstroNvim/commit/a682e51a5486cad57b6ae71a60bfedb9a1628452)) * **plugins:** use `snacks.scope` along with `snacks.indent` ([b188030](https://github.com/AstroNvim/AstroNvim/commit/b188030868f4f427eca8933b5414a1cc09e3abc2)) * **snacks:** add `gitbrowse` mapping ([5ad8e64](https://github.com/AstroNvim/AstroNvim/commit/5ad8e6499af929dc177bc9201ed33c7b3856dcdf)) * **snacks:** configure zen mode and add `uZ` mapping ([25884eb](https://github.com/AstroNvim/AstroNvim/commit/25884eb262184a1200c3cf0e2c55f3b18f335e3a)) * **snacks:** enable image support if terminal supports it ([3ab9ea2](https://github.com/AstroNvim/AstroNvim/commit/3ab9ea23cf82db54460e38515975a7c4dbc342dc)) * use built in Neovim folding in Neovim v0.11 ([6c34481](https://github.com/AstroNvim/AstroNvim/commit/6c34481218f133e97b95c3f51fd0c438ee470050)) ### Bug Fixes * **astrocore:** use correct `force` option in `:AstroRename` ([542cbde](https://github.com/AstroNvim/AstroNvim/commit/542cbde9034e7a5e8a787ea40f4e0483c45151de)) * **astrocore:** use default `update_in_insert` value for diagnostic configuration ([f26c0de](https://github.com/AstroNvim/AstroNvim/commit/f26c0de51b80d92c2199e205f76d91eb3768b1b4)) * **astrolsp:** do not configure any language servers out of the box, removes disabling third party checking in `lua_ls` ([709395c](https://github.com/AstroNvim/AstroNvim/commit/709395cb6894b373867ec3d1e1f61a2232d95ed7)) * **astrolsp:** remove lsp handler configuration for neovim 0.11 ([566f8cb](https://github.com/AstroNvim/AstroNvim/commit/566f8cb246bd1af24d9812c07df6a51db7de5cd3)) * **astrolsp:** update codelens on text changing in normal mode ([66faaa5](https://github.com/AstroNvim/AstroNvim/commit/66faaa5697692cc7c3bca3b39744214565c096e8)) * **astroui:** set up new folding configuration ([3d8b3d2](https://github.com/AstroNvim/AstroNvim/commit/3d8b3d21986dc8ba674d0f517036cc03364c2553)) * **cmp:** disable completion when recording macros ([699c086](https://github.com/AstroNvim/AstroNvim/commit/699c086d0ec67ba3b6668befd6eb13a24257d445)) * **heirline:** update winbar on `BufFilePost` ([3ed3497](https://github.com/AstroNvim/AstroNvim/commit/3ed3497d0fc3d5dd2fa2e81de6251a2e7208d3e1)) * make sure `colorscheme` is set after setting up after options ([e201003](https://github.com/AstroNvim/AstroNvim/commit/e2010037d0116bc6cbf4641a238a6bbf2fba0a86)) * **nvim-ufo:** disable `foldexpr` when setting up `nvim-ufo` ([8223350](https://github.com/AstroNvim/AstroNvim/commit/82233506b6be80389fce6559fc9fcd5c57f3f3e9)) * **plugins:** make sure all plugin specifications are merging properly ([220e338](https://github.com/AstroNvim/AstroNvim/commit/220e338de2758ee6854f99c19ed29e55f42414e1)) * **telescope:** have telescope follow symlinks by default ([0d87112](https://github.com/AstroNvim/AstroNvim/commit/0d87112899aaad690e8f0c900c7cb2ff17914812)) * use new `vim.diagnostic.jump` in Neovim v0.11 ([89c4af4](https://github.com/AstroNvim/AstroNvim/commit/89c4af432b101f31b2a1cea2dd938e43e3928503)) ### Code Refactoring * **config:** remove `astronvim.plugins.configs.guess-indent` function ([158c430](https://github.com/AstroNvim/AstroNvim/commit/158c4301a5964383431d6fb3ee9628681fdf220e)) * **config:** remove `astronvim.plugins.configs.heirline` function ([c06b096](https://github.com/AstroNvim/AstroNvim/commit/c06b096805ddcd28dad79167b448b4de2c178f73)) * require Neovim v0.10+ ([38715fa](https://github.com/AstroNvim/AstroNvim/commit/38715fa6be1c177d004cf057d084e4d4f788ad1e)) ## [4.32.3](https://github.com/AstroNvim/AstroNvim/compare/v4.32.2...v4.32.3) (2025-03-18) ### Bug Fixes * **gitsigns:** use the same signs for staged lines ([604b07d](https://github.com/AstroNvim/AstroNvim/commit/604b07d0ca6eff61607f6735786678ae1f18885d)) ## [4.32.2](https://github.com/AstroNvim/AstroNvim/compare/v4.32.1...v4.32.2) (2025-03-15) ### Bug Fixes * **autocmds:** fix `auto_hlsearch` `vim.on_key` function to only check for start of mapping commands ([445c0e3](https://github.com/AstroNvim/AstroNvim/commit/445c0e3995ff2074083b01e7de0a2731458b5559)), closes [#2765](https://github.com/AstroNvim/AstroNvim/issues/2765) ## [4.32.1](https://github.com/AstroNvim/AstroNvim/compare/v4.32.0...v4.32.1) (2025-02-19) ### Bug Fixes * **_astrolsp:** use correct variable name 'operation' instead of 'module' in file operations ([52f6b2b](https://github.com/AstroNvim/AstroNvim/commit/52f6b2be972cb83923745961f714b3dd576263e0)) ## [4.32.0](https://github.com/AstroNvim/AstroNvim/compare/v4.31.1...v4.32.0) (2025-02-17) ### Features * **astrolsp:** add LSP based file operations and neo-tree integration ([71853c9](https://github.com/AstroNvim/AstroNvim/commit/71853c97440ac479a70c2dab507be6e029b4df9d)) * **autopairs:** only enable auto pairs in actual file editing buffers ([7e633c9](https://github.com/AstroNvim/AstroNvim/commit/7e633c9adc387b67452b971270422a29c0d36f0a)) * **mappings:** add `<Leader>R` to rename the current file ([415adc9](https://github.com/AstroNvim/AstroNvim/commit/415adc944ccf01e5df46a7705865abe2ed5161b2)) ### Bug Fixes * **astrolsp:** disable LSP file operations by default until v5 ([ac15557](https://github.com/AstroNvim/AstroNvim/commit/ac1555797980dc2791a391e9e40224ee5349d96b)) ## [4.31.1](https://github.com/AstroNvim/AstroNvim/compare/v4.31.0...v4.31.1) (2025-02-13) ### Bug Fixes * **treesitter:** load `nvim-treesitter` on `VeryLazy` as it can be needed before a file is opened ([54d7415](https://github.com/AstroNvim/AstroNvim/commit/54d741501bfbabf407f2b27a5ebd298638bf3b13)) ## [4.31.0](https://github.com/AstroNvim/AstroNvim/compare/v4.30.3...v4.31.0) (2025-02-13) ### Features * **astrocore:** enable large buffer notification by default ([ce26623](https://github.com/AstroNvim/AstroNvim/commit/ce26623bcbe1a863e6df0d2c238bdea7b282fc04)) * **astrocore:** increase the large file detection defaults ([b6a794f](https://github.com/AstroNvim/AstroNvim/commit/b6a794f95c075cdbbbb732451add60b53f1a5e01)) ### Bug Fixes * **astrocore:** fix incorrect diagnostic default setting ([0b6e721](https://github.com/AstroNvim/AstroNvim/commit/0b6e7211a0d304826a6bad936dc2c39930e9ac43)) ## [4.30.3](https://github.com/AstroNvim/AstroNvim/compare/v4.30.2...v4.30.3) (2025-02-13) ### Bug Fixes * fix incorrect large buffer function location ([5c2fb2c](https://github.com/AstroNvim/AstroNvim/commit/5c2fb2c660095e3bd2822c11d99254fa1aefc457)) ## [4.30.2](https://github.com/AstroNvim/AstroNvim/compare/v4.30.1...v4.30.2) (2025-02-13) ### Bug Fixes * **vim-illuminate:** disable fully on large buffers ([a64b2df](https://github.com/AstroNvim/AstroNvim/commit/a64b2df6152b4eb11023888ced7dc095af73ed46)) ## [4.30.1](https://github.com/AstroNvim/AstroNvim/compare/v4.30.0...v4.30.1) (2025-02-12) ### Bug Fixes * check if large buffer detection checks are enabled ([ec86d42](https://github.com/AstroNvim/AstroNvim/commit/ec86d42672c0fe82b153054e4a469fbf95a3715b)) ## [4.30.0](https://github.com/AstroNvim/AstroNvim/compare/v4.29.3...v4.30.0) (2025-02-12) ### Features * **astrocore:** add average line length to large buffer detection ([87dc70f](https://github.com/AstroNvim/AstroNvim/commit/87dc70f7761c3e9965315182f0c40bfbd2cbcd0e)) ### Performance Improvements * optimize large buffer detection ([1748b1d](https://github.com/AstroNvim/AstroNvim/commit/1748b1d2f8a0ecf46f26fca1d63b33723b300519)) * **treesitter:** evaluate large buffer detection immediately ([06c071d](https://github.com/AstroNvim/AstroNvim/commit/06c071d28fd7954996a8c1748bb4f1ed1dbc59b9)) ## [4.29.3](https://github.com/AstroNvim/AstroNvim/compare/v4.29.2...v4.29.3) (2025-02-04) ### Bug Fixes * **autopairs:** disable autopairs for more filetypes and make easily extendable ([f344658](https://github.com/AstroNvim/AstroNvim/commit/f34465805a3336127eae15b9f74ca9eb15cfc5a4)) * **lazydev:** use `luv` library bundled with `lua_ls` ([70a8a10](https://github.com/AstroNvim/AstroNvim/commit/70a8a10bbf356d290f83219e4f2e739a2134e7b5)) * use `opts_extend` for Mason registries ([4f6e3fa](https://github.com/AstroNvim/AstroNvim/commit/4f6e3faaf8853f6247b7a0bc2e2a7c0a43cdfdaf)) ## [4.29.2](https://github.com/AstroNvim/AstroNvim/compare/v4.29.1...v4.29.2) (2025-01-13) ### Bug Fixes * **notify:** pin `nvim-notify` to an older version for neovim v0.9 ([299a929](https://github.com/AstroNvim/AstroNvim/commit/299a92999d93ca922041e9af33ef94420cc3e487)) ## [4.29.1](https://github.com/AstroNvim/AstroNvim/compare/v4.29.0...v4.29.1) (2025-01-08) ### Bug Fixes * add hotpatch for Neovim v0.10.3 regression that breaks `:Inspect` ([c05308c](https://github.com/AstroNvim/AstroNvim/commit/c05308cdcbb21b3dc3fdc375be54238c167ba6cb)) * **snapshot:** update dependencies ([e341895](https://github.com/AstroNvim/AstroNvim/commit/e341895375a7994c90085e837b0384f3071f6463)) ## [4.29.0](https://github.com/AstroNvim/AstroNvim/compare/v4.28.1...v4.29.0) (2024-12-10) ### Features * **gitsigns:** add `[G`/`]G` mappings for first and last git hunk ([7077a2e](https://github.com/AstroNvim/AstroNvim/commit/7077a2eb548e8f8c19552f7da44c3d8c04eefabf)) ## [4.28.1](https://github.com/AstroNvim/AstroNvim/compare/v4.28.0...v4.28.1) (2024-11-24) ### Bug Fixes * **snapshot:** update dependencies ([9e5a0c9](https://github.com/AstroNvim/AstroNvim/commit/9e5a0c95a9ce28549784b9c00131bd652165159a)) ## [4.28.0](https://github.com/AstroNvim/AstroNvim/compare/v4.27.2...v4.28.0) (2024-11-15) ### Features * **astroui:** use new Lazygit theming in AstroUI ([e797484](https://github.com/AstroNvim/AstroNvim/commit/e7974843b7652f8bed38ff8ec6d4e5bab5d905ae)) ### Bug Fixes * **astroui:** improve LazyGit theming ([9f627ea](https://github.com/AstroNvim/AstroNvim/commit/9f627ea363b8de4ddcc5e8045c121e6be0f8c394)) * **autocmds:** `vim.highlight` getting deprecated ([31ea1b9](https://github.com/AstroNvim/AstroNvim/commit/31ea1b9d006b9c0732f8188c21fc01c7acc7cf40)) ## [4.27.2](https://github.com/AstroNvim/AstroNvim/compare/v4.27.1...v4.27.2) (2024-11-07) ### Bug Fixes * **snapshot:** update dependencies ([4da229b](https://github.com/AstroNvim/AstroNvim/commit/4da229bb799d277b0693e7c275b6f9364e264166)) ## [4.27.1](https://github.com/AstroNvim/AstroNvim/compare/v4.27.0...v4.27.1) (2024-10-28) ### Reverts * conflicting mapping health checks moved to individual plugins ([c4fa819](https://github.com/AstroNvim/AstroNvim/commit/c4fa819eabedd8b4d5ee6c69b72d0bfd2d855f06)) ## [4.27.0](https://github.com/AstroNvim/AstroNvim/compare/v4.26.8...v4.27.0) (2024-10-28) ### Features * **health:** add duplicate mapping report in `:checkhealth astronvim` ([33a90b5](https://github.com/AstroNvim/AstroNvim/commit/33a90b53b6089ab33a42203d570e75810f8f21bd)) ## [4.26.8](https://github.com/AstroNvim/AstroNvim/compare/v4.26.7...v4.26.8) (2024-10-22) ### Reverts * `mason-lspconfig.nvim` fixed, use original upstream ([a348a4e](https://github.com/AstroNvim/AstroNvim/commit/a348a4e9a21084bac047204a680dc5a415939a08)) ## [4.26.7](https://github.com/AstroNvim/AstroNvim/compare/v4.26.6...v4.26.7) (2024-10-15) ### Bug Fixes * **lspconfig:** use correct branch of `mason-lspconfig` fork ([5611677](https://github.com/AstroNvim/AstroNvim/commit/56116776c428328eeac2c5a3f50070daf2e49b2c)) ## [4.26.6](https://github.com/AstroNvim/AstroNvim/compare/v4.26.5...v4.26.6) (2024-10-15) ### Bug Fixes * **plugins:** use `mason-lspconfig` fork until PR fix is merged ([bee36ce](https://github.com/AstroNvim/AstroNvim/commit/bee36ce8b87ddf6c2e94288c61db1d748b216a1f)) * **snapshot:** fix `nvim-lspconfig` internal module renames ([4fd4781](https://github.com/AstroNvim/AstroNvim/commit/4fd4781ab0c2d9c876acef1fc5b3f01773c78be6)) ## [4.26.5](https://github.com/AstroNvim/AstroNvim/compare/v4.26.4...v4.26.5) (2024-09-24) ### Bug Fixes * **telescope:** unpin telescope as it doesn't truly follow semantic release and is not releasing new features ([f949939](https://github.com/AstroNvim/AstroNvim/commit/f949939cd09f1f3af9d419e04a5ecb21b697a8b3)) ## [4.26.4](https://github.com/AstroNvim/AstroNvim/compare/v4.26.3...v4.26.4) (2024-09-24) ### Bug Fixes * **telescope:** ensure `.git` folders are always ignored on Windows ([4cce0ca](https://github.com/AstroNvim/AstroNvim/commit/4cce0cad81c2089c3350f43b1accc16442d54823)) ### Reverts * remove all `jumpoptions` by default to avoid confusion ([e868e93](https://github.com/AstroNvim/AstroNvim/commit/e868e939cdfdd22a60ad182c398e5f6d519fbb06)) ## [4.26.3](https://github.com/AstroNvim/AstroNvim/compare/v4.26.2...v4.26.3) (2024-09-17) ### Bug Fixes * **dap:** revert back to using Plenary's JSON cleaning function ([cf31b6e](https://github.com/AstroNvim/AstroNvim/commit/cf31b6e33075ad0f0206c5aacd22fc375ab32ab6)) ## [4.26.2](https://github.com/AstroNvim/AstroNvim/compare/v4.26.1...v4.26.2) (2024-09-16) ### Bug Fixes * **alpha:** make plugin icon respect disable icons ([98cf96a](https://github.com/AstroNvim/AstroNvim/commit/98cf96a2a519ddfa480029124bc5288fdc82fa8d)) ## [4.26.1](https://github.com/AstroNvim/AstroNvim/compare/v4.26.0...v4.26.1) (2024-09-09) ### Bug Fixes * **telescope:** always ignore `.git` folders in results ([016c2cf](https://github.com/AstroNvim/AstroNvim/commit/016c2cfc5288118f315a7fb26082d90d86a529b6)) ## [4.26.0](https://github.com/AstroNvim/AstroNvim/compare/v4.25.2...v4.26.0) (2024-09-09) ### Features * **smart-splits:** add intelligent lazy loading of `smart-splits` ([9ac414d](https://github.com/AstroNvim/AstroNvim/commit/9ac414dfc4bfd580062f9a381e94dafacc3454e4)) ## [4.25.2](https://github.com/AstroNvim/AstroNvim/compare/v4.25.1...v4.25.2) (2024-09-07) ### Bug Fixes * **nvim-dap:** don't manually call `load_launchjs` ([a4e5fd8](https://github.com/AstroNvim/AstroNvim/commit/a4e5fd800a51f9d69d88e0717982682a32c08b26)) ## [4.25.1](https://github.com/AstroNvim/AstroNvim/compare/v4.25.0...v4.25.1) (2024-09-04) ### Bug Fixes * **which-key:** terminal mode trigger disabled upstream ([5a77860](https://github.com/AstroNvim/AstroNvim/commit/5a7786079a3ffd747c13a3b4160f22caaa57737b)) ## [4.25.0](https://github.com/AstroNvim/AstroNvim/compare/v4.24.1...v4.25.0) (2024-08-30) ### Features * **telescope:** add `<Leader>fg` to search git tracked files ([16db0c6](https://github.com/AstroNvim/AstroNvim/commit/16db0c64042419ded746ed858641abbd2bdaafac)) ## [4.24.1](https://github.com/AstroNvim/AstroNvim/compare/v4.24.0...v4.24.1) (2024-08-29) ### Bug Fixes * **cmp:** list extend `sources` table automatically ([53984b0](https://github.com/AstroNvim/AstroNvim/commit/53984b02dfa023439c4e7e086fb23e01e07a4c90)) ## [4.24.0](https://github.com/AstroNvim/AstroNvim/compare/v4.23.11...v4.24.0) (2024-08-26) ### Features * **astrolsp:** factor in `retriggerCharacters` in `signatureHelpProvider` ([fe6e596](https://github.com/AstroNvim/AstroNvim/commit/fe6e5961206b46d2c1b883ae538b971d5a7d6ac0)) ### Bug Fixes * **alpha:** improve window detection for dashboard ([6d43957](https://github.com/AstroNvim/AstroNvim/commit/6d439577678581b25eb86cc36e34c6e33369324d)), closes [#2691](https://github.com/AstroNvim/AstroNvim/issues/2691) * **astrolsp:** make sure to clear automatic signature help internals when leaving insert ([1b68ef4](https://github.com/AstroNvim/AstroNvim/commit/1b68ef4d174f12cebf53e9d17c5cddc9a70a1ad6)) ### Performance Improvements * **astrolsp:** use set lookup for signature help triggering ([20815a7](https://github.com/AstroNvim/AstroNvim/commit/20815a7792caeef7b1d209084ed0766c7d2fa737)) ## [4.23.11](https://github.com/AstroNvim/AstroNvim/compare/v4.23.10...v4.23.11) (2024-08-23) ### Bug Fixes * **autocmds:** make sure to clean up `q_close_windows` cache ([622b7e8](https://github.com/AstroNvim/AstroNvim/commit/622b7e8d5f11f2451e1fb6363200de86931505b8)) ## [4.23.10](https://github.com/AstroNvim/AstroNvim/compare/v4.23.9...v4.23.10) (2024-08-23) ### Bug Fixes * **autocmds:** don't overwrite buffer-local `q` mapping if set ([a368bd2](https://github.com/AstroNvim/AstroNvim/commit/a368bd203220392589ac60deb6d47d02db9c7f5c)) ### Performance Improvements * **autocmds:** Only set `q` to close mapping at most once for a buffer ([6cb78a6](https://github.com/AstroNvim/AstroNvim/commit/6cb78a6cdb80e92abd53633d6b835771dd9ed747)) ## [4.23.9](https://github.com/AstroNvim/AstroNvim/compare/v4.23.8...v4.23.9) (2024-08-22) ### Bug Fixes * **snapshot:** move `aerial` and `indent-blankline` to pinning commits until their next releases ([3258357](https://github.com/AstroNvim/AstroNvim/commit/3258357293fb50cff543f39bf812df12b223d132)) ## [4.23.8](https://github.com/AstroNvim/AstroNvim/compare/v4.23.7...v4.23.8) (2024-08-20) ### Bug Fixes * **snapshot:** pin treesitter to older version until all plugins update ([96a5317](https://github.com/AstroNvim/AstroNvim/commit/96a5317b2de8028785dd92192afeac7008f0b5ca)) ## [4.23.7](https://github.com/AstroNvim/AstroNvim/compare/v4.23.6...v4.23.7) (2024-08-19) ### Bug Fixes * **which-key:** don't show which-key in terminal mode by default ([7d3020e](https://github.com/AstroNvim/AstroNvim/commit/7d3020edd868304b8cf6b5b8fd2806b5bcabb4f7)) ## [4.23.6](https://github.com/AstroNvim/AstroNvim/compare/v4.23.5...v4.23.6) (2024-08-19) ### Bug Fixes * **autocmds:** don't create directories for URI like buffers ([9168082](https://github.com/AstroNvim/AstroNvim/commit/9168082a268fa665be3b8a3194631dc30ba4e727)), closes [#2682](https://github.com/AstroNvim/AstroNvim/issues/2682) ## [4.23.5](https://github.com/AstroNvim/AstroNvim/compare/v4.23.4...v4.23.5) (2024-08-15) ### Bug Fixes * **options:** make `>`/`<` follow `shiftwidth` ([0d35704](https://github.com/AstroNvim/AstroNvim/commit/0d357041a54fb18404250c05726dff2c4ad99068)) * **options:** make maintain view when jumping back to buffer ([f5dbbd2](https://github.com/AstroNvim/AstroNvim/commit/f5dbbd23f7cba8de14e697670acb3d2d7d82fad2)) ## [4.23.4](https://github.com/AstroNvim/AstroNvim/compare/v4.23.3...v4.23.4) (2024-08-09) ### Reverts * not using `on_attach` doesn't resolve aerial bug ([b0758c3](https://github.com/AstroNvim/AstroNvim/commit/b0758c334eb6f5074222d4811fee9075604d1066)) ## [4.23.3](https://github.com/AstroNvim/AstroNvim/compare/v4.23.2...v4.23.3) (2024-08-08) ### Bug Fixes * **aerial:** remove `on_attach` until upstream bug fixed ([43e3813](https://github.com/AstroNvim/AstroNvim/commit/43e38131799f0902e4c616dad1d0578514548d1a)) * **mappings:** don't set terminal movement commands in floating windows ([7d3214d](https://github.com/AstroNvim/AstroNvim/commit/7d3214d881e413ec7c4417a88bacc5982a4a5fe0)) ## [4.23.2](https://github.com/AstroNvim/AstroNvim/compare/v4.23.1...v4.23.2) (2024-08-04) ### Bug Fixes * **nvim-dap:** add nicer error message when parsing `.vscode/launch.json` file ([18b729b](https://github.com/AstroNvim/AstroNvim/commit/18b729bc4793393a40049a3744d7b2d920b146ba)) * **nvim-dap:** use AstroCore for JSON cleanup until plenary merges fix PR ([a84f11a](https://github.com/AstroNvim/AstroNvim/commit/a84f11ac4b8dfce4a2dfbdfca5d592fc6ac8ec9e)) ## [4.23.1](https://github.com/AstroNvim/AstroNvim/compare/v4.23.0...v4.23.1) (2024-08-01) ### Bug Fixes * **snapshot:** update `nvim-treesitter-text-objects` for bug fix ([85885ba](https://github.com/AstroNvim/AstroNvim/commit/85885bac4052fa3c3e1c2acc031a0ff1cae334cf)) ## [4.23.0](https://github.com/AstroNvim/AstroNvim/compare/v4.22.2...v4.23.0) (2024-07-31) ### Features * **astrolsp:** add the ability to automatically show signature help while editing ([4cb0e37](https://github.com/AstroNvim/AstroNvim/commit/4cb0e37aa0ce13a25850a2c77a953bdad166d416)) * **toggleterm:** use default `horizontal` direction for terminals ([fc1dfea](https://github.com/AstroNvim/AstroNvim/commit/fc1dfea6be2464a289be022ae6908cda58987298)) ## [4.22.2](https://github.com/AstroNvim/AstroNvim/compare/v4.22.1...v4.22.2) (2024-07-30) ### Bug Fixes * **astrolsp:** LSP signature help shouldn't be focusable ([101543f](https://github.com/AstroNvim/AstroNvim/commit/101543f2fe26ed53b742e4085ccbea8ed2940bf9)) ## [4.22.1](https://github.com/AstroNvim/AstroNvim/compare/v4.22.0...v4.22.1) (2024-07-30) ### Bug Fixes * **cmp:** protect against `nil` LSP kind in completion ([daf0b60](https://github.com/AstroNvim/AstroNvim/commit/daf0b604e8e1dabbe4d90e378c781a877b7ca966)) * **nvim-dap-ui:** fix incorrect loading order ([4f95228](https://github.com/AstroNvim/AstroNvim/commit/4f95228e559f938b80cb45223bef4bb54fd8ff95)) ## [4.22.0](https://github.com/AstroNvim/AstroNvim/compare/v4.21.0...v4.22.0) (2024-07-25) ### Features * **plugins:** migrate from `neodev` to `lazydev`, closes [#2618](https://github.com/AstroNvim/AstroNvim/issues/2618) ([0126d44](https://github.com/AstroNvim/AstroNvim/commit/0126d447633a5eddfb7cf0f93cdcae27c2df54fa)) ## [4.21.0](https://github.com/AstroNvim/AstroNvim/compare/v4.20.1...v4.21.0) (2024-07-22) ### Features * **dap:** automatically load vscode `launch.json` when loading DAP ([e43facb](https://github.com/AstroNvim/AstroNvim/commit/e43facbba4b904c27b96a73b46164ea0c73eeab5)) ### Bug Fixes * **better-escape:** load on "VeryLazy" now that `better-escape` works in all modes ([e0cb231](https://github.com/AstroNvim/AstroNvim/commit/e0cb23159376f47668d9395aa2b7f20405d22bfa)) * **better-escape:** only use `jj` and `jk` for escape in insert mode ([08399f6](https://github.com/AstroNvim/AstroNvim/commit/08399f6ead600d1ec45038e6b96a8240f06e8f91)) * **neo-tree:** extend sources list by default ([f97178d](https://github.com/AstroNvim/AstroNvim/commit/f97178d56b52cdfeafa0c57e4aced679bb8b05d3)) * **telescope:** automatically rebuild `telescope-fzf` if necessary ([7c6cb6f](https://github.com/AstroNvim/AstroNvim/commit/7c6cb6fe4d4888937881413a5377bd3a11ab02ec)) * **which-key:** extend `disable` lists by default as well ([b0df6ae](https://github.com/AstroNvim/AstroNvim/commit/b0df6aebc12bd54d4dea6e8dd34287a22fd3303d)) ## [4.20.1](https://github.com/AstroNvim/AstroNvim/compare/v4.20.0...v4.20.1) (2024-07-16) ### Bug Fixes * **astrolsp:** register LSP mapping group locally as well as globally ([ca129a7](https://github.com/AstroNvim/AstroNvim/commit/ca129a7b830877382877d9fc4a9c1ff18847e11a)) * **options:** don't set clipboard in SSH session with 0.10+ for OSC52 support ([b11f0d2](https://github.com/AstroNvim/AstroNvim/commit/b11f0d2b620fbced8e744e6675bb2982f0071886)) * **which-key:** automatically extend `spec` table in `which-key` ([5362d84](https://github.com/AstroNvim/AstroNvim/commit/5362d844d076b9bb6aa13ecb036750f58bbb5d23)) ### Performance Improvements * **ts-autotag:** remove unnecessary custom `config` ([7c6ff2e](https://github.com/AstroNvim/AstroNvim/commit/7c6ff2e4816b18c8796655c0af1d335503f7517a)) ## [4.20.0](https://github.com/AstroNvim/AstroNvim/compare/v4.19.0...v4.20.0) (2024-07-12) ### Features * **mappings:** add `<Leader>x` menu for quickfix/list access ([99c2b13](https://github.com/AstroNvim/AstroNvim/commit/99c2b13df7b4943b3f82ca772db3dfb8f13f42e7)) ### Bug Fixes * Move `editorconfig` ensurance back to `autocmd` for better user control ([309fb21](https://github.com/AstroNvim/AstroNvim/commit/309fb21c3679c13abb4d4b64a5f86fee7f21414d)) * **which-key:** update to the new v3 setup ([1839d93](https://github.com/AstroNvim/AstroNvim/commit/1839d93b078f38c5924cedcd8efefce9840e6869)) ### Performance Improvements * **vim-illuminate:** make large file detection more aggressive ([14a389f](https://github.com/AstroNvim/AstroNvim/commit/14a389fb114c9918b1bd79ebb2f2e5dba4f32e3d)) ## [4.19.0](https://github.com/AstroNvim/AstroNvim/compare/v4.18.0...v4.19.0) (2024-07-10) ### Features * **mappings:** add bindings for beginning and end of quickfix and location lists ([b0de586](https://github.com/AstroNvim/AstroNvim/commit/b0de586d0652505daee70849bf0bd5ac50ef0df0)) ### Bug Fixes * **astrolsp:** fix typo in mappings ([75bb91a](https://github.com/AstroNvim/AstroNvim/commit/75bb91a49400e4e0bd6f0d48b6036602a364e774)) ### Performance Improvements * **lspconfig:** optimize re-application of `editorconfig` ([8358cb2](https://github.com/AstroNvim/AstroNvim/commit/8358cb2e2dfcd598bf0185a1d437728d1c964333)) ## [4.18.0](https://github.com/AstroNvim/AstroNvim/compare/v4.17.4...v4.18.0) (2024-07-10) ### Features * **astrolsp:** add `<Leader>lA` for document source code actions ([5da7018](https://github.com/AstroNvim/AstroNvim/commit/5da70183cf72657a39d6eeead3ce4b7cf8dc45b7)), closes [#2655](https://github.com/AstroNvim/AstroNvim/issues/2655) ### Bug Fixes * **astrolsp:** visual mode formatting should check for `rangeFormatting` capability ([27341c6](https://github.com/AstroNvim/AstroNvim/commit/27341c62626dfb525ac2490548bc65898d2d7e17)) * **autocmds:** only emit each `augroup` event once ([b4716f5](https://github.com/AstroNvim/AstroNvim/commit/b4716f5aa7b2a1fdfa6ba34a74b39a7f8c711070)) ## [4.17.4](https://github.com/AstroNvim/AstroNvim/compare/v4.17.3...v4.17.4) (2024-07-09) ### Bug Fixes * **autocmds:** collect `augroups` before `AstroFile` events are triggered ([649dca3](https://github.com/AstroNvim/AstroNvim/commit/649dca3b98df3b9d6a3ff039e534d8b6ebd349f5)) ## [4.17.3](https://github.com/AstroNvim/AstroNvim/compare/v4.17.2...v4.17.3) (2024-07-09) ### Bug Fixes * **autocmds:** only trigger `filetypedetect` events after `AstroFile`/`AstroGitFile` events ([97085c1](https://github.com/AstroNvim/AstroNvim/commit/97085c159d7e468fe4aebc50b1f45fd3ab4f18ef)), closes [#2651](https://github.com/AstroNvim/AstroNvim/issues/2651) ## [4.17.2](https://github.com/AstroNvim/AstroNvim/compare/v4.17.1...v4.17.2) (2024-07-08) ### Bug Fixes * **astrolsp:** `servers` list should be extended by default ([167fd37](https://github.com/AstroNvim/AstroNvim/commit/167fd3780a66f9574d554f5e729073c782104829)) ## [4.17.1](https://github.com/AstroNvim/AstroNvim/compare/v4.17.0...v4.17.1) (2024-07-08) ### Reverts * **cmp:** visibility check was fine, move lazy loading back to `InsertEnter` ([4d7614f](https://github.com/AstroNvim/AstroNvim/commit/4d7614f65bd6afba5fa5f23ce9d1880bb5bd41b3)) ## [4.17.0](https://github.com/AstroNvim/AstroNvim/compare/v4.16.2...v4.17.0) (2024-07-08) ### Features * add support for more icon providers in `cmp` completion ([f633f03](https://github.com/AstroNvim/AstroNvim/commit/f633f03e1651d69203c1828c128ed1e36bdf6264)) ### Bug Fixes * **cmp:** centralize formatting function ([024428b](https://github.com/AstroNvim/AstroNvim/commit/024428bf96b5a7976cb52a55c001a268de520cb5)) * **cmp:** fix backwards compatibility for users using `lspkind` options ([d9edd6a](https://github.com/AstroNvim/AstroNvim/commit/d9edd6ab0555381299c00a392df8a700b2f459a4)) ### Reverts * **cmp:** use default `cmp.visible` function for checking visibility ([01a3aea](https://github.com/AstroNvim/AstroNvim/commit/01a3aea3982e1bdca7e4b70155bf1fabe3753bcb)) ## [4.16.2](https://github.com/AstroNvim/AstroNvim/compare/v4.16.1...v4.16.2) (2024-07-01) ### Bug Fixes * **astroui:** match `terminal` and `nofile` exactly in winbar disabling ([2869329](https://github.com/AstroNvim/AstroNvim/commit/28693294f01498d8137b4958f47c0be17407cb3b)) * **heirline:** fix type in winbar control ([7f4652f](https://github.com/AstroNvim/AstroNvim/commit/7f4652f09a03a665e5d8fcac6bc9d609e368e348)) ## [4.16.1](https://github.com/AstroNvim/AstroNvim/compare/v4.16.0...v4.16.1) (2024-07-01) ### Bug Fixes * **snapshot:** pin `nvim-dap` to commit as releases are not frequent ([bd696b7](https://github.com/AstroNvim/AstroNvim/commit/bd696b78b4c669631c6bebf37d60236da26b032c)) ## [4.16.0](https://github.com/AstroNvim/AstroNvim/compare/v4.15.1...v4.16.0) (2024-07-01) ### Features * **aerial:** add `]y`/`[y`/`]Y`/`[Y` to navigate between symbols ([16e09da](https://github.com/AstroNvim/AstroNvim/commit/16e09daa6c78ff30a47b5b69c904335f5bb543d4)) * **astrocore:** add `]e`/`[e` and `]w`/`[w` to navigate between errors and warnings ([24b59a7](https://github.com/AstroNvim/AstroNvim/commit/24b59a7275854e530440e7cd51d3d9cc2be8c131)) ## [4.15.1](https://github.com/AstroNvim/AstroNvim/compare/v4.15.0...v4.15.1) (2024-06-30) ### Bug Fixes * **telescope:** remove mappings that break default telescope behavior ([c5421e8](https://github.com/AstroNvim/AstroNvim/commit/c5421e8abf9bd209da5ef64892bbd68fbd2a06f2)) ## [4.15.0](https://github.com/AstroNvim/AstroNvim/compare/v4.14.0...v4.15.0) (2024-06-28) ### Features * **gitsigns:** add `ig` text objects for git hunks ([74686a2](https://github.com/AstroNvim/AstroNvim/commit/74686a2ae9f00daab08d770a66f671627f7ac107)) * **gitsigns:** set mappings with `on_attach` in `gitsigns` `opts` to make mappings context aware ([e0d2285](https://github.com/AstroNvim/AstroNvim/commit/e0d228527bca539b079dc5a1397ebd5aec2d90ad)) ### Bug Fixes * **gitsigns:** fix mappings incorrectly following lowercase/uppercase conventions ([35012ff](https://github.com/AstroNvim/AstroNvim/commit/35012ffdfaac0b9f472ac88111a227c49e693464)) ## [4.14.0](https://github.com/AstroNvim/AstroNvim/compare/v4.13.0...v4.14.0) (2024-06-27) ### Features * **astrocore:** add `]l`/`[l` for navigating loclist ([32c31d5](https://github.com/AstroNvim/AstroNvim/commit/32c31d5d6b3b544283344c9f2c4765be2fd41a08)) * **astrocore:** add `]q`/`[q` for navigating quickfix ([3624fc4](https://github.com/AstroNvim/AstroNvim/commit/3624fc479970917172445a08da851cbb634a5038)) ### Bug Fixes * **astroui:** set colorscheme to `astrotheme` rather than `astrodark` to respect light background on initial installation ([def9128](https://github.com/AstroNvim/AstroNvim/commit/def91287ce75fe5a43ff9d3a8fb361c3dff35b4c)), closes [#2639](https://github.com/AstroNvim/AstroNvim/issues/2639) * **lspconfig:** do not use `astrocore` in `cmd` function of plugin spec ([b97a1b9](https://github.com/AstroNvim/AstroNvim/commit/b97a1b9da78abdd62cf4b8822855af07a67a620a)) ## [4.13.0](https://github.com/AstroNvim/AstroNvim/compare/v4.12.1...v4.13.0) (2024-06-25) ### Features * **telescope:** open multiple selected files ([#2637](https://github.com/AstroNvim/AstroNvim/issues/2637)) ([cc1d152](https://github.com/AstroNvim/AstroNvim/commit/cc1d1529da8c33c421b21c59f73b41648b32ea3c)) ### Reverts * `luarocks` support improved in Lazy.nvim ([cc4396c](https://github.com/AstroNvim/AstroNvim/commit/cc4396c9e8f5515298a701ae59a236db6cd3f15b)) ## [4.12.1](https://github.com/AstroNvim/AstroNvim/compare/v4.12.0...v4.12.1) (2024-06-24) ### Bug Fixes * **astrocore:** safely load astrocore for initial installation protection ([6f91c78](https://github.com/AstroNvim/AstroNvim/commit/6f91c788fe7c845094ee7093d4ae55fa63cef963)) * **gitsigns:** `winbar` configured upstream for blame window ([dee34f1](https://github.com/AstroNvim/AstroNvim/commit/dee34f111daca65d6e5428cb0c94e9399b725d2c)) * **lazy:** disable `luarocks` integration if it is not installed ([9a81c8c](https://github.com/AstroNvim/AstroNvim/commit/9a81c8c5415f0519c5ad816db33974e4479c0089)) * **plugins:** manually disable `luarocks` in `plenary` and `telescope` for now ([6a967f3](https://github.com/AstroNvim/AstroNvim/commit/6a967f3803238a5eda2b16af35c24cd5444b37f1)) ## [4.12.0](https://github.com/AstroNvim/AstroNvim/compare/v4.11.1...v4.12.0) (2024-06-24) ### Features * update to `lazy.nvim` v11 ([ac1746f](https://github.com/AstroNvim/AstroNvim/commit/ac1746f2e5a821597d30f50f72b3fe3a6667a241)) ## [4.11.1](https://github.com/AstroNvim/AstroNvim/compare/v4.11.0...v4.11.1) (2024-06-21) ### Bug Fixes * **cmp_luasnip:** add missing `command` mode mappings ([5a9551c](https://github.com/AstroNvim/AstroNvim/commit/5a9551cf78ada904371fc9ce1b9987ea1ce6e3b1)) ## [4.11.0](https://github.com/AstroNvim/AstroNvim/compare/v4.10.5...v4.11.0) (2024-06-20) ### Features * **astroui:** use `opts` table for configuring when winbar is enabled/disabled ([211e0d1](https://github.com/AstroNvim/AstroNvim/commit/211e0d187df5681f7610349e48ef6f8b0ad959b8)) ## [4.10.5](https://github.com/AstroNvim/AstroNvim/compare/v4.10.4...v4.10.5) (2024-06-19) ### Bug Fixes * **guess-indent:** update to new `guess-ident.nvim` refactor ([96e2dc7](https://github.com/AstroNvim/AstroNvim/commit/96e2dc7864f90a659e5a09c110f086d9911a1e28)) ## [4.10.4](https://github.com/AstroNvim/AstroNvim/compare/v4.10.3...v4.10.4) (2024-06-17) ### Bug Fixes * **telescope:** ignore built-in colorschemes if possible by default since they are not compatible anyway ([0888e1d](https://github.com/AstroNvim/AstroNvim/commit/0888e1d54ede843cf70ba33c21ec40f82bdaef46)) ## [4.10.3](https://github.com/AstroNvim/AstroNvim/compare/v4.10.2...v4.10.3) (2024-06-13) ### Bug Fixes * **dressing:** use AstroUI for default prompt ([2195fc5](https://github.com/AstroNvim/AstroNvim/commit/2195fc54c3ed767ffb835f67c030bd4de853c654)) ## [4.10.2](https://github.com/AstroNvim/AstroNvim/compare/v4.10.1...v4.10.2) (2024-06-11) ### Bug Fixes * **telescope:** remove LSP mappings as they are currently broken ([4a8443b](https://github.com/AstroNvim/AstroNvim/commit/4a8443bf46f9071f016bb94e1c2367f2c9956bf2)) ## [4.10.1](https://github.com/AstroNvim/AstroNvim/compare/v4.10.0...v4.10.1) (2024-06-08) ### Bug Fixes * **dap:** dap vscode filetype definition moved upstream to `mason-nvim-dap` ([69fa069](https://github.com/AstroNvim/AstroNvim/commit/69fa069ed02f69d690cfda1e516c7e4c469e9f29)) ## [4.10.0](https://github.com/AstroNvim/AstroNvim/compare/v4.9.0...v4.10.0) (2024-06-07) ### Features * **dap:** add a basic configuration of the VS Code `launch.json` support for `nvim-dap` ([f1f7230](https://github.com/AstroNvim/AstroNvim/commit/f1f7230461fb22d945927e3f4bc3f1ef353c9449)) * **dap:** add more sophisticated JSON parsing to `launch.json` support ([c86f07d](https://github.com/AstroNvim/AstroNvim/commit/c86f07d02c779c240e236cea3f7b4c7fb8b612af)) ## [4.9.0](https://github.com/AstroNvim/AstroNvim/compare/v4.8.5...v4.9.0) (2024-06-07) ### Features * use the new `opts_extend` in lazy.nvim to make `ensure_installed` lists extend ([e095b80](https://github.com/AstroNvim/AstroNvim/commit/e095b80e89c819dad7b5d07d5a89e2516d6104b6)) ### Performance Improvements * **cmp:** improve lazy loading ([a2aeaa1](https://github.com/AstroNvim/AstroNvim/commit/a2aeaa1edccbf43b446b4885bf342526e5c8626f)) ## [4.8.5](https://github.com/AstroNvim/AstroNvim/compare/v4.8.4...v4.8.5) (2024-06-06) ### Bug Fixes * **treesitter:** fail silently if error loading query predicates ([88c1633](https://github.com/AstroNvim/AstroNvim/commit/88c1633813a132cfa263d92f992376ddc3c8b78d)), closes [#2620](https://github.com/AstroNvim/AstroNvim/issues/2620) ## [4.8.4](https://github.com/AstroNvim/AstroNvim/compare/v4.8.3...v4.8.4) (2024-06-05) ### Bug Fixes * **astrocore:** decrease default large buffer size from 500kb to 250kb ([dc30375](https://github.com/AstroNvim/AstroNvim/commit/dc3037573a7bc17a22907990e08a1dbab0766655)) * **telescope:** add selected icon to multiple selection ([7aaa4ef](https://github.com/AstroNvim/AstroNvim/commit/7aaa4ef670d793655190da52fe94bdf7e95d7421)) ## [4.8.3](https://github.com/AstroNvim/AstroNvim/compare/v4.8.2...v4.8.3) (2024-06-03) ### Bug Fixes * **mappings:** `gx` mapping in visual mode ([8fc1f24](https://github.com/AstroNvim/AstroNvim/commit/8fc1f2492904b2f96b611690d86a652e5271e30e)) ### Reverts * use `$LAZY` for lazy dir if it's set ([bf099f2](https://github.com/AstroNvim/AstroNvim/commit/bf099f2d2b6f49e2f8a47e304894ede7a4f2760f)) ## [4.8.2](https://github.com/AstroNvim/AstroNvim/compare/v4.8.1...v4.8.2) (2024-06-01) ### Bug Fixes * **lazy:** don't use `$LAZY` for the lazy.nvim dir ([2c25760](https://github.com/AstroNvim/AstroNvim/commit/2c25760d4ecf3c4e32dbf8a2aaa4e006f07fe15f)) ## [4.8.1](https://github.com/AstroNvim/AstroNvim/compare/v4.8.0...v4.8.1) (2024-05-31) ### Bug Fixes * **snapshot:** update `nvim-lspconfig` to get ESLint bug fix ([ced9369](https://github.com/AstroNvim/AstroNvim/commit/ced9369b624f43b2342ad08f549f32dc9bf6b4e6)) ## [4.8.0](https://github.com/AstroNvim/AstroNvim/compare/v4.7.9...v4.8.0) (2024-05-30) ### Features * backport default LSP mappings in Neovim v0.11 ([36b88be](https://github.com/AstroNvim/AstroNvim/commit/36b88bef78f9726a0b28dda936e9f42fdc7bdbeb)) ### Bug Fixes * **astrocore:** handle `vim.diagnostic` changes in neovim v0.11 ([80498ac](https://github.com/AstroNvim/AstroNvim/commit/80498ac2f0ad635922b802644813d378a7bcf5b2)) ## [4.7.9](https://github.com/AstroNvim/AstroNvim/compare/v4.7.8...v4.7.9) (2024-05-28) ### Bug Fixes * **notify:** make sure to return the `vim.notify` result ([64757c3](https://github.com/AstroNvim/AstroNvim/commit/64757c325b376c490a329d5a715659fcc027d86a)) ## [4.7.8](https://github.com/AstroNvim/AstroNvim/compare/v4.7.7...v4.7.8) (2024-05-28) ### Bug Fixes * **astrocore:** add missing `<Leader>/` mappings for native commenting ([42cba10](https://github.com/AstroNvim/AstroNvim/commit/42cba1043e8b26fc92221643750121d7e8e847e7)) * **astrolsp:** code action mapping should be `x` mode instead of `v` ([84db33e](https://github.com/AstroNvim/AstroNvim/commit/84db33ef993d1972c9c8b9f2c4886522673c3293)) ## [4.7.7](https://github.com/AstroNvim/AstroNvim/compare/v4.7.6...v4.7.7) (2024-05-24) ### Bug Fixes * **astrocore:** add new `enabled` key to rooter ([0cf4960](https://github.com/AstroNvim/AstroNvim/commit/0cf496075a12627c9b333a81d5ddf58634efab36)) ## [4.7.6](https://github.com/AstroNvim/AstroNvim/compare/v4.7.5...v4.7.6) (2024-05-23) ### Bug Fixes * **cmp:** improve `cmp` visibility check ([a32371a](https://github.com/AstroNvim/AstroNvim/commit/a32371ac30d9cbdc3e44908342df3059ebeae8f7)) ## [4.7.5](https://github.com/AstroNvim/AstroNvim/compare/v4.7.4...v4.7.5) (2024-05-21) ### Bug Fixes * **astroui:** do not overwrite `colors` when modified in place ([c3d90b9](https://github.com/AstroNvim/AstroNvim/commit/c3d90b987287194f4375ed96d16ff9ab0849b771)) ## [4.7.4](https://github.com/AstroNvim/AstroNvim/compare/v4.7.3...v4.7.4) (2024-05-21) ### Bug Fixes * **ts-context-commentstring:** add support for native commenting in neovim 0.10+ ([9a16612](https://github.com/AstroNvim/AstroNvim/commit/9a166127de101a5318106b149808deaee48ca61d)) ## [4.7.3](https://github.com/AstroNvim/AstroNvim/compare/v4.7.2...v4.7.3) (2024-05-18) ### Bug Fixes * **mappings:** add back next/previous diagnostic mappings to neovim 0.10 ([f0c9a3f](https://github.com/AstroNvim/AstroNvim/commit/f0c9a3fff7f6cab815dd6b38d120cdb291cd393b)) * **mappings:** add missing default diagnostic mapping backport ([b853b01](https://github.com/AstroNvim/AstroNvim/commit/b853b0154d8b8daae78668e55469973f2d5a927f)) ## [4.7.2](https://github.com/AstroNvim/AstroNvim/compare/v4.7.1...v4.7.2) (2024-05-17) ### Bug Fixes * **indent-blankline:** limit updating of `indent-blankline` in Neovim <0.10 ([ce2464c](https://github.com/AstroNvim/AstroNvim/commit/ce2464c90e024289d46557aadd20039bded22d3a)) ## [4.7.1](https://github.com/AstroNvim/AstroNvim/compare/v4.7.0...v4.7.1) (2024-05-16) ### Bug Fixes * **astroui:** use single character icon for `DapLogPoint` ([c7e2437](https://github.com/AstroNvim/AstroNvim/commit/c7e2437a4f24ee876b69fc3ae7bdd49c78e38173)) * **autocmd:** typo in unlist qf description ([#2597](https://github.com/AstroNvim/AstroNvim/issues/2597)) ([c14560e](https://github.com/AstroNvim/AstroNvim/commit/c14560ed0113342aa20a951de0098fef7c233bc5)) ## [4.7.0](https://github.com/AstroNvim/AstroNvim/compare/v4.6.7...v4.7.0) (2024-05-14) ### Features * **astroui:** add `runtime_condition` support to `null-ls` statusline integration ([5686c08](https://github.com/AstroNvim/AstroNvim/commit/5686c08563a8ecac2997435c1f1849a96dab1b03)) ## [4.6.7](https://github.com/AstroNvim/AstroNvim/compare/v4.6.6...v4.6.7) (2024-05-11) ### Bug Fixes * astrocore spelling in require ([#2588](https://github.com/AstroNvim/AstroNvim/issues/2588)) ([08622d6](https://github.com/AstroNvim/AstroNvim/commit/08622d6ef4c3b8872e0757c8ae0ce7611b943c40)) ## [4.6.6](https://github.com/AstroNvim/AstroNvim/compare/v4.6.5...v4.6.6) (2024-05-09) ### Bug Fixes * add missing windows `gdu` executable name possibility ([cb24728](https://github.com/AstroNvim/AstroNvim/commit/cb247284584b972f3ee071958f04e5809315433a)), closes [#2585](https://github.com/AstroNvim/AstroNvim/issues/2585) ## [4.6.5](https://github.com/AstroNvim/AstroNvim/compare/v4.6.4...v4.6.5) (2024-05-08) ### Bug Fixes * **cmp:** `<C-N>` and `` should start completion if not started ([54c9f6a](https://github.com/AstroNvim/AstroNvim/commit/54c9f6abcd383d8021a3ff7429c6b74fa9ed8a3a)) ### Performance Improvements * **notify:** optimize performance for notification pausing/resuming ([cd57fd4](https://github.com/AstroNvim/AstroNvim/commit/cd57fd4b8c81b168940dbfaf8bae861b6aa6866f)) ## [4.6.4](https://github.com/AstroNvim/AstroNvim/compare/v4.6.3...v4.6.4) (2024-05-07) ### Bug Fixes * notification deferment not playing nicely with `nvim-notify` ([d45edb1](https://github.com/AstroNvim/AstroNvim/commit/d45edb12bcc8f3709ae77ada53b2c72daf7f683e)), closes [#2579](https://github.com/AstroNvim/AstroNvim/issues/2579) ## [4.6.3](https://github.com/AstroNvim/AstroNvim/compare/v4.6.2...v4.6.3) (2024-05-07) ### Reverts * use main upstream for `guess-indent` as lazy gets very confused ([3d094ea](https://github.com/AstroNvim/AstroNvim/commit/3d094ea7a6dafa90ac7bf6f48ffb399b28c22b12)) ## [4.6.2](https://github.com/AstroNvim/AstroNvim/compare/v4.6.1...v4.6.2) (2024-05-06) ### Bug Fixes * **guess-indent:** update to new API for silencing indentation notifications ([4952573](https://github.com/AstroNvim/AstroNvim/commit/4952573bde22cdba7805ec7f83bb589a59701e2a)) * **mappings:** remove neovim v0.10 lsp mappings as they got reverted ([0da22af](https://github.com/AstroNvim/AstroNvim/commit/0da22afb4dcdbf360bf65aa85ef44eabf96afa72)) ## [4.6.1](https://github.com/AstroNvim/AstroNvim/compare/v4.6.0...v4.6.1) (2024-05-06) ### Bug Fixes * **autocmds:** respect modeline when forwarding events ([5bd0684](https://github.com/AstroNvim/AstroNvim/commit/5bd0684ced37db0dba3f66f10d3e6c84fd526a21)) ### Performance Improvements * **guess-indent:** improve lazy loading ([#2561](https://github.com/AstroNvim/AstroNvim/issues/2561)) ([c1e8e74](https://github.com/AstroNvim/AstroNvim/commit/c1e8e74312284223a6faa816e6b75dbfcd4d1c2e)) ## [4.6.0](https://github.com/AstroNvim/AstroNvim/compare/v4.5.1...v4.6.0) (2024-05-06) ### Features * add `:AstroVersion` for displaying current version ([168b296](https://github.com/AstroNvim/AstroNvim/commit/168b29644be57e2a59333de554b92d931c9b0566)) ## [4.5.1](https://github.com/AstroNvim/AstroNvim/compare/v4.5.0...v4.5.1) (2024-05-05) ### Bug Fixes * decouple mappings to make it easier to override them individually ([3ed1a45](https://github.com/AstroNvim/AstroNvim/commit/3ed1a453dfd079f1477fbeba3d28965a13c92df9)), closes [#2574](https://github.com/AstroNvim/AstroNvim/issues/2574) ## [4.5.0](https://github.com/AstroNvim/AstroNvim/compare/v4.4.4...v4.5.0) (2024-05-03) ### Features * **astrolsp:** add global inlay hints toggle ([7d73045](https://github.com/AstroNvim/AstroNvim/commit/7d730458b115bdc772ac926ce7818d8673b7abc7)) ### Bug Fixes * **astrolsp:** remove unnecessary backported `<C-S>` mapping. This is actually a bug because it overwrites a separate AstroNvim default ([1e36e3e](https://github.com/AstroNvim/AstroNvim/commit/1e36e3e7619957a708004b85a1de2c2761f5b354)) ## [4.4.4](https://github.com/AstroNvim/AstroNvim/compare/v4.4.3...v4.4.4) (2024-05-02) ### Bug Fixes * **comment:** make `<Leader>/` dot-repeatable ([e2edcc7](https://github.com/AstroNvim/AstroNvim/commit/e2edcc7e197d577912d29305f67d7c995ae47353)), closes [#2410](https://github.com/AstroNvim/AstroNvim/issues/2410) * make `git` optional in the path for execution ([b10119d](https://github.com/AstroNvim/AstroNvim/commit/b10119d295e369fabf46d2648b0ab969cbc5c0bc)) ## [4.4.3](https://github.com/AstroNvim/AstroNvim/compare/v4.4.2...v4.4.3) (2024-05-01) ### Bug Fixes * **health:** check for ripgrep (`rg`) executable ([2f43843](https://github.com/AstroNvim/AstroNvim/commit/2f438432d6de5e9bdb9c806af24964393640059e)) * **telescope:** only map Telescope's `live_grep` picker if `rg` is available ([25a7ebf](https://github.com/AstroNvim/AstroNvim/commit/25a7ebf5383becedfdd4dfe4f94f70367a20e68f)) ## [4.4.2](https://github.com/AstroNvim/AstroNvim/compare/v4.4.1...v4.4.2) (2024-05-01) ### Bug Fixes * **treesitter:** guarantee mason loads before treesitter ([cfd992f](https://github.com/AstroNvim/AstroNvim/commit/cfd992f5661016e658475e946dec12f56870f125)) ## [4.4.1](https://github.com/AstroNvim/AstroNvim/compare/v4.4.0...v4.4.1) (2024-04-30) ### Bug Fixes * **cmp:** update `vim.snippet` to use updated `active` API ([#2560](https://github.com/AstroNvim/AstroNvim/issues/2560)) ([b505f4f](https://github.com/AstroNvim/AstroNvim/commit/b505f4ff41f851fa4a008586995f79408daf72bc)) * **smart-splits:** disable aggressive lazy loading for multiplexer setup ([242f728](https://github.com/AstroNvim/AstroNvim/commit/242f728ab5431d9b7142e4efe0894b5960fb6569)) * **vim-illuminate:** add missing `large_file_cutoff` default ([782fcb0](https://github.com/AstroNvim/AstroNvim/commit/782fcb069ba7879e1ad2b43db2351dad3f9a7ea0)) ## [4.4.0](https://github.com/AstroNvim/AstroNvim/compare/v4.3.0...v4.4.0) (2024-04-29) ### Features * **mappings:** backport new default neovim diagnostic and LSP mappings ([91191e6](https://github.com/AstroNvim/AstroNvim/commit/91191e60e26d0a5f9b1fbe46cd18ce6c4873c476)) ### Bug Fixes * clear up language in update notification for AstroNvim ([8ca570a](https://github.com/AstroNvim/AstroNvim/commit/8ca570aa99e47f50274c1d804900efb54f19be1c)) * **mappings:** fix incorrectly normalized mappings ([cc66460](https://github.com/AstroNvim/AstroNvim/commit/cc66460b62dfd2929622f3b39a03d1d489f6585f)) ## [4.3.0](https://github.com/AstroNvim/AstroNvim/compare/v4.2.1...v4.3.0) (2024-04-26) ### Features * **alpha:** show the actual leader key on the dashboard ([3dabdd0](https://github.com/AstroNvim/AstroNvim/commit/3dabdd06a92f3f7af61e34bd2477005ceafc7598)) ### Bug Fixes * **autocmds:** typo in terminal_settings description ([#2552](https://github.com/AstroNvim/AstroNvim/issues/2552)) ([4b4abca](https://github.com/AstroNvim/AstroNvim/commit/4b4abca875443a3d305d1fcfa854bc3f45bc59c1)) ## [4.2.1](https://github.com/AstroNvim/AstroNvim/compare/v4.2.0...v4.2.1) (2024-04-23) ### Bug Fixes * **nvim-dap-ui:** temporarily pin `nvim-dap-ui` to commit until next release ([a6fb183](https://github.com/AstroNvim/AstroNvim/commit/a6fb183eeaf08000f2961bc05009592ff986975c)) ## [4.2.0](https://github.com/AstroNvim/AstroNvim/compare/v4.1.12...v4.2.0) (2024-04-18) ### Features * add notification to recommend running `:Lazy update` again after AstroNvim updates ([3c81105](https://github.com/AstroNvim/AstroNvim/commit/3c811058edc4094a276e637e1763ca14a6135acc)) ## [4.1.12](https://github.com/AstroNvim/AstroNvim/compare/v4.1.11...v4.1.12) (2024-04-18) ### Bug Fixes * **autocmds:** add missing `HighlightURL` default highlight group ([93b10eb](https://github.com/AstroNvim/AstroNvim/commit/93b10ebb1bbf878369625139031f5581c7d3e587)) ### Performance Improvements * optimize url highlighting auto command and disable for large buffers ([848ac6b](https://github.com/AstroNvim/AstroNvim/commit/848ac6b798196893239c680a9d0b6b50c21345f6)) ## [4.1.11](https://github.com/AstroNvim/AstroNvim/compare/v4.1.10...v4.1.11) (2024-04-16) ### Performance Improvements * **astrolsp:** improve lazy loading of AstroLSP ([35b8928](https://github.com/AstroNvim/AstroNvim/commit/35b892836116dd489bf41de4b965052364dabfdb)) ## [4.1.10](https://github.com/AstroNvim/AstroNvim/compare/v4.1.9...v4.1.10) (2024-04-11) ### Bug Fixes * **comment:** add missing `Comment.nvim` mappings for lazy loading ([9d5b0eb](https://github.com/AstroNvim/AstroNvim/commit/9d5b0eb59548e8a5667d3e04d0ca1d9bb487fac9)) ## [4.1.9](https://github.com/AstroNvim/AstroNvim/compare/v4.1.8...v4.1.9) (2024-04-10) ### Bug Fixes * **autocmds:** check if buffer is valid before checking for file ([40f7c42](https://github.com/AstroNvim/AstroNvim/commit/40f7c42b9589cd3fe45168b3875200c3e2e93ed8)) ## [4.1.8](https://github.com/AstroNvim/AstroNvim/compare/v4.1.7...v4.1.8) (2024-04-06) ### Bug Fixes * **mappings:** clear up language of `<Leader>q` and `Q` mappings ([e09e62e](https://github.com/AstroNvim/AstroNvim/commit/e09e62e5338e2b2b074c5a041b18a773c0eb55e3)) * **snapshot:** require AstroCore v1.1.1 for important bug fix ([4e0f63c](https://github.com/AstroNvim/AstroNvim/commit/4e0f63ce6efb6f1c1175afd8f77faf861b6f3317)) ## [4.1.7](https://github.com/AstroNvim/AstroNvim/compare/v4.1.6...v4.1.7) (2024-04-05) ### Bug Fixes * make sure `FileType` event is fired at the correct time after `AstroFile` ([eceb0a8](https://github.com/AstroNvim/AstroNvim/commit/eceb0a803bbaf146b0a7a33885b4d7cf410a345d)) ## [4.1.6](https://github.com/AstroNvim/AstroNvim/compare/v4.1.5...v4.1.6) (2024-04-04) ### Bug Fixes * **autocmds:** when triggering `AstroFile` events, only forward events for valid buffers ([3bf88e0](https://github.com/AstroNvim/AstroNvim/commit/3bf88e035e302a15504e1074018cb11e51fc1076)) ## [4.1.5](https://github.com/AstroNvim/AstroNvim/compare/v4.1.4...v4.1.5) (2024-04-03) ### Bug Fixes * **telescope:** load treesitter with telescope ([7462fb1](https://github.com/AstroNvim/AstroNvim/commit/7462fb100799ac8c9ec1968df2d97baf766d6853)) ## [4.1.4](https://github.com/AstroNvim/AstroNvim/compare/v4.1.3...v4.1.4) (2024-04-03) ### Bug Fixes * **autocmds:** fully retrigger original autocmd event after `AstroFile` ([112e209](https://github.com/AstroNvim/AstroNvim/commit/112e209d75bb728ecff416811c52a495531675d0)) ## [4.1.3](https://github.com/AstroNvim/AstroNvim/compare/v4.1.2...v4.1.3) (2024-04-02) ### Bug Fixes * **cmp:** guarantee all sources have a group index ([568da53](https://github.com/AstroNvim/AstroNvim/commit/568da5323cb17652d6eb7536a7668e83398260e9)) * **resession:** enable AstroCore resession extension for single tab restore ([0c9f87b](https://github.com/AstroNvim/AstroNvim/commit/0c9f87bff8232d3efbebdb3d8725ac65887dc28a)) ## [4.1.2](https://github.com/AstroNvim/AstroNvim/compare/v4.1.1...v4.1.2) (2024-04-02) ### Bug Fixes * **lspkind:** improve `cmp` and `lspkind` integration and loading order ([e1a5eca](https://github.com/AstroNvim/AstroNvim/commit/e1a5ecac5fc4dd2a157e466b5edbad49fca461aa)) ## [4.1.1](https://github.com/AstroNvim/AstroNvim/compare/v4.1.0...v4.1.1) (2024-04-01) ### Bug Fixes * **plugins:** explicitly mark all dependencies as `lazy = true` ([dbd3d13](https://github.com/AstroNvim/AstroNvim/commit/dbd3d1320459913bb6cadb3c932ccc986ccb57df)) ## [4.1.0](https://github.com/AstroNvim/AstroNvim/compare/v4.0.0...v4.1.0) (2024-04-01) ### Features * **dap:** enable dap on windows by default ([8d8f18d](https://github.com/AstroNvim/AstroNvim/commit/8d8f18d127b70e10a4e92fecb96a9d0eff75d49e)) ### Bug Fixes * **colorizer:** attach colorizer immediately after lazy loading ([f56a332](https://github.com/AstroNvim/AstroNvim/commit/f56a33276d8446cd562cc140ff0aa6673ae6e3b0)) ## [4.0.0](https://github.com/AstroNvim/AstroNvim/compare/v3.45.3...v4.0.0) (2024-04-01) ### ⚠ BREAKING CHANGES * **mappings:** change `gT` to `gy` for type definition to avoid conflict with core mapping * move `signs` and `diagnostics` configuration to AstroCore * **mappings:** change some UI/UX mappings to make more sense * **options:** move vim options to AstroCore `opts` * **ui:** unify capital/lowercase meaning for global/buffer * remove `mini.indentscope` and just use `indent-blankline.nvim` * **treesitter:** change loop text object from `l` to `o` * **astrolsp:** configure signs separately from diagnostics * remove `schemastore` from default plugins * **mappings:** make `uc` and `uC` toggle buffer/global cmp and move colorizer toggle to `uz` * **plugins:** move from `null-ls` to maintained fork `none-ls` * **ui:** use mini.indentscope for highlighting current context ([#2253](https://github.com/AstroNvim/AstroNvim/issues/2253)) * **neo-tree:** remove `o` binding, conflicts with new "Order by" keymaps * **mason:** rename `MasonUpdate` and `MasonUpdateAll` to `AstroMasonUpdate` and `AstroMasonUpdateAll` * move configuration defaults to `opts` tables * move updater, git, and mason utilities to `astrocore` * move buffer to `astrocore` and icons to `astroui` * move resession extension to AstroCore * make resession the default session manager * move status API to AstroUI * move colorscheme to AstroUI and polish to AstroCore * move astronvim.user_terminals to AstroCore * remove deprecated plugin configs and unnecessary LSPLoaded icon * move UI/UX utils to `astrocore` * move astronvim specific options to AstroCore options * move Heirline `setup_colors` function to AstroUI * move plugins and lazy_snapshot into `astronvim` module * move to a model of just providing plugins * remove updater mappings and commands * **astrolsp:** `setup_handlers` renamed to `handlers` * drop support for Neovim v0.8 * **plugins:** use `on_load` and remove some unnecessary `config` functions * modularize config with AstroCore, AstroUI, and AstroLSP ### Features * `large_buf` can be set to `false` to disable ([73d521e](https://github.com/AstroNvim/AstroNvim/commit/73d521e112f70f1d74e161531c66ea76327af4c6)) * add `<Leader>SF` to search all previous directory sessions ([ab9455a](https://github.com/AstroNvim/AstroNvim/commit/ab9455a99a664999ea83da8fe509bf01fc1da492)) * add `AstroLargeBuf` autocmd user event and update `max_file` usage to `large_buf` ([efaf0e5](https://github.com/AstroNvim/AstroNvim/commit/efaf0e5393793f70d6c8f5bda9ef58a2ab7f51bd)) * add `AstroUpdate` to update Lazy and Mason ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * add `init.lua` to warn user if they try to use AstroNvim as a direct Neovim configuration ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * add `vim.g.astronvim_options` as an optional function for setting up options ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * add configuration of plugin pinning ([9d1376d](https://github.com/AstroNvim/AstroNvim/commit/9d1376d5eddf44fabd0eb92153201939cfc938ed)) * add Neovim version detection on startup ([ad934f0](https://github.com/AstroNvim/AstroNvim/commit/ad934f0c996c93c9019cae82693c82ff27534271)) * **alpha:** use built in `button` function from Alpha ([1ad1e1e](https://github.com/AstroNvim/AstroNvim/commit/1ad1e1e0dc4b27a3c498130c0956a937245a5ef7)) * **astrocore:** disable rooter `autochdir` by default ([be5ee14](https://github.com/AstroNvim/AstroNvim/commit/be5ee1451e289b9b97f09528a0a0f8f86ce28044)) * **astrocore:** enable built-in project rooting by default ([9a8b7d1](https://github.com/AstroNvim/AstroNvim/commit/9a8b7d1675be66547e4ca4bdd19bd88d1d04be38)) * **astrocore:** increase the default size for large files ([e0b826d](https://github.com/AstroNvim/AstroNvim/commit/e0b826d4e854ea2ce59e927ccfe207e65cdc40f5)) * **astrolsp:** configure `vim.lsp.handlers` in configuration ([ab008dd](https://github.com/AstroNvim/AstroNvim/commit/ab008ddb438432982b67c9f2da74f65d580b0984)) * **astrolsp:** don't add formatting mappings when formatting is disabled ([26147a6](https://github.com/AstroNvim/AstroNvim/commit/26147a631e6c80370181c0617a4bc41ea4de8fbe)) * **astrolsp:** move lsp autocommands to AstroLSP `opts` ([8fe55d0](https://github.com/AstroNvim/AstroNvim/commit/8fe55d042e2d017f26e14b04f53e228b3ed45f29)) * **astrolsp:** move lsp user commands to AstroLSP `opts` ([2c19d9e](https://github.com/AstroNvim/AstroNvim/commit/2c19d9e600b52c62a6e05cad85a63e7f85c952b7)) * **cmp:** add buffer local cmp completion control ([815ee79](https://github.com/AstroNvim/AstroNvim/commit/815ee79ba4537e6073936d791ca7895c9d34ef12)) * **cmp:** allow `LuaSnip` to be disabled ([7958c12](https://github.com/AstroNvim/AstroNvim/commit/7958c12def1cc7a0e3fdba8e55983d2922df5f64)) * **cmp:** fallback to `vim.snippet` if available and no other snippet engine configured ([424f46b](https://github.com/AstroNvim/AstroNvim/commit/424f46b49ebd752997cb965e88f96f404172bde0)) * **cmp:** set `group_index` for lsp and buffer `cmp` sources ([bfb01ee](https://github.com/AstroNvim/AstroNvim/commit/bfb01ee8017a6c38d9cd0df258b0e67cb295d457)) * **config:** add ability to configure `mapleader` and `icons_enabled` in AstroNvim `opts` ([27adb26](https://github.com/AstroNvim/AstroNvim/commit/27adb26c3c65ce82489370f930de93237a671b48)) * **config:** move `maplocalleader` to AstroNvim `opts` to be set up before Lazy ([668691d](https://github.com/AstroNvim/AstroNvim/commit/668691d4bfa298ff38fdf2789412b9d6e0d2a6c3)) * **dev:** add dev utility to generate snapshot for stable releases ([5081890](https://github.com/AstroNvim/AstroNvim/commit/5081890702919d5046382c9af4d38e24e9db4c1a)) * **gitsigns:** use new preview hunk inline ([463be1a](https://github.com/AstroNvim/AstroNvim/commit/463be1a2630cbc2dcd63532d8add755107dbb1ca)) * **heirline:** add virtual environment component ([7761b63](https://github.com/AstroNvim/AstroNvim/commit/7761b6376394e465ab6fea30886f92d96b932869)) * **indent-blankline:** migrate to indent blankline v3 ([c2e15ee](https://github.com/AstroNvim/AstroNvim/commit/c2e15ee549871237072c50d2fcb358aa36ab67ae)) * **lazy:** use `$LAZY` environment directory for lazy dir if available ([1e93c9c](https://github.com/AstroNvim/AstroNvim/commit/1e93c9cd8145acbc4c9588feb60906510b98c44a)) * make resession the default session manager ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **mappings:** make `<Leader>uc` and `uC` toggle buffer/global cmp and move colorizer toggle to `uz` ([cfa1962](https://github.com/AstroNvim/AstroNvim/commit/cfa1962709b75bca9ee521535a490eae99eefa78)) * move to modular plugin for configuring LSP options ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move to modular plugin for configuring mappings and autocmds ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **neo-tree:** add shift+enter to system open files ([7a20dc7](https://github.com/AstroNvim/AstroNvim/commit/7a20dc79a4305a30b33744a398881e702be6b5a3)) * **nvim-lspconfig:** add lazy loading on `nvim-lspconfig` commands ([495a17a](https://github.com/AstroNvim/AstroNvim/commit/495a17a4691dfdcfc11d3153e98c325ca0cfde1c)) * **nvim-treesitter:** disable all treesitter modules for large buffers ([a92f05d](https://github.com/AstroNvim/AstroNvim/commit/a92f05d3a101db4406f9ef72a41b6888a17347a8)) * **options:** enable confirm by default ([d8055ac](https://github.com/AstroNvim/AstroNvim/commit/d8055ac78087d401f6f1cbfabd080f8d2e638b33)) * **options:** use the histogram algorithm for diff calculations ([f1cfd02](https://github.com/AstroNvim/AstroNvim/commit/f1cfd02c5164906dfcd555315daf1cbbdb54bc46)) * **plugins:** add `todo-comments.nvim` to the base installation ([4d690ca](https://github.com/AstroNvim/AstroNvim/commit/4d690caa269b5a85aca839e154f39c82dd1a3134)) * **plugins:** move from `null-ls` to maintained fork `none-ls` ([b4687e3](https://github.com/AstroNvim/AstroNvim/commit/b4687e3f61804bba70899401f1ada567a061fa61)) * **plugins:** move to `vim-illuminate` to reference highlighting ([1749d5a](https://github.com/AstroNvim/AstroNvim/commit/1749d5ac3be624fb67c58c7b06f92245bafe7736)) * **plugins:** use `on_load` and remove some unnecessary `config` functions ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * remove `mini.indentscope` and just use `indent-blankline.nvim` ([0e23d5b](https://github.com/AstroNvim/AstroNvim/commit/0e23d5b90b8f281835c67ccfe402287c99d5f0ab)) * **resession:** add `<Leader>SD` for deleting a directory session ([e4c586c](https://github.com/AstroNvim/AstroNvim/commit/e4c586cba5ca73286b838c87e13deedf61ed2f39)) * **resession:** add `<Leader>SS` to save current directory session ([76018e9](https://github.com/AstroNvim/AstroNvim/commit/76018e90c5cd082869e98210466b9b7737e23e1b)) * **treesitter:** change loop text object from `l` to `o` ([2ed7eb3](https://github.com/AstroNvim/AstroNvim/commit/2ed7eb37385468a89eb00a167954cc727829cbf7)) * **treesitter:** enable `auto_install` if user has the `tree-sitter` CLI ([ca0db4e](https://github.com/AstroNvim/AstroNvim/commit/ca0db4e8db4d812dbd75a61215078db2853bd529)) * **ui:** use mini.indentscope for highlighting current context ([#2253](https://github.com/AstroNvim/AstroNvim/issues/2253)) ([c2e15ee](https://github.com/AstroNvim/AstroNvim/commit/c2e15ee549871237072c50d2fcb358aa36ab67ae)) ### Bug Fixes * `astrocore.utils` moved to `astrocore` ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **alpha:** fix alpha on fresh installation ([16e2805](https://github.com/AstroNvim/AstroNvim/commit/16e2805175cfc6dd7b67279e07f1c5d382256d46)) * **alpha:** patch alpha button function until resolved upstream ([fb94050](https://github.com/AstroNvim/AstroNvim/commit/fb940502cfa5ce72d331317997717b97960c933d)) * **astrocore:** `syntax` toggle renamed to `buffer_syntax` ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **astrocore:** prefer version control over project files ([41c63b9](https://github.com/AstroNvim/AstroNvim/commit/41c63b9cfe759811e19bdd80198d3bf1d1d346d6)) * **astrolsp:** `setup_handlers` renamed to `handlers` ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **astrolsp:** configure signs separately from diagnostics ([10929d5](https://github.com/AstroNvim/AstroNvim/commit/10929d5a33b0e0b664e76103ed18a95635cb4b06)) * **astrolsp:** move `signs` to new dictionary format ([96bb76f](https://github.com/AstroNvim/AstroNvim/commit/96bb76ff351d39beeb6050dd115d8c5c830a5a93)) * **astrolsp:** update autoformat_enabled to autoformat ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **astrolsp:** update lsp mapping conditions ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **astrolsp:** which-key integration fixed ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **astroui:** add missing gitsigns handlers ([9d593be](https://github.com/AstroNvim/AstroNvim/commit/9d593beed4196d315b06036c7bcd48f350a84461)) * **autocmds:** always fire "AstroFile" if in a vscode session ([5fb7345](https://github.com/AstroNvim/AstroNvim/commit/5fb7345e04a958d278b4ffe6395952ce4fb3dedb)) * **autocmds:** fix large buffer detection autocmd ([2bfce12](https://github.com/AstroNvim/AstroNvim/commit/2bfce126de622a43f2844626c39c213bc1f081ba)) * **autocmds:** silently fail if `augroup` has already been deleted ([f77ec3f](https://github.com/AstroNvim/AstroNvim/commit/f77ec3fa17f92ac76edcfbcf762a8c212e864997)) * **autocmds:** use quotes in git command on windows ([b5ef0d2](https://github.com/AstroNvim/AstroNvim/commit/b5ef0d25693a49c829b09429f131361fc584d69a)) * **cmp:** use `completeopt` from `vim.opt` rather than hard coding in `nvim-cmp` ([a2b3571](https://github.com/AstroNvim/AstroNvim/commit/a2b35718fbf42ebed371694fd86353c213e480a5)) * disable cmp for large buffers ([8b81aa5](https://github.com/AstroNvim/AstroNvim/commit/8b81aa5b633ca01f9c89eab04f07a50e7f87f9be)) * disable completion and indent guides for large buffers ([8b81aa5](https://github.com/AstroNvim/AstroNvim/commit/8b81aa5b633ca01f9c89eab04f07a50e7f87f9be)) * fix initial startup ordering ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **heirline:** only apply sidebar padding for non full-width windows ([548a4c1](https://github.com/AstroNvim/AstroNvim/commit/548a4c1d288a1ccf5d226841c93b5d5868eab7c4)) * **heirline:** update to new `file_info` component defaults ([cf3974f](https://github.com/AstroNvim/AstroNvim/commit/cf3974fe229188b49f3386591803eeeac5a3e4a7)) * improve first installation path ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **indent-blankline:** improve lazy loading ([d9592cd](https://github.com/AstroNvim/AstroNvim/commit/d9592cddc9451836ebb659ff1bc527c296cf904b)) * **init:** improve initialization sequence ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **lspconfig:** resolve lsp attaching when new filetype buffer is not focused ([4f568eb](https://github.com/AstroNvim/AstroNvim/commit/4f568eb63387b3ea5810cca076a296eab0c46414)) * **mappings:** change `gT` to `gy` for type definition to avoid conflict with core mapping ([fe0e3d7](https://github.com/AstroNvim/AstroNvim/commit/fe0e3d708ffad29c06a3ce34e6986a0d5ac5ec52)) * **mappings:** change some UI/UX mappings to make more sense ([77ba866](https://github.com/AstroNvim/AstroNvim/commit/77ba866cb88ba26539d9aa115d8ca53f3205a2e0)) * **mappings:** fix incorrect mapping key casing ([a5cf6a0](https://github.com/AstroNvim/AstroNvim/commit/a5cf6a0a0603b65c8fbfcdcd0b568aee6247e760)) * **mappings:** move diagnostic mappings to always loaded ([e575551](https://github.com/AstroNvim/AstroNvim/commit/e575551e033961cfe2e4fac3d316cb2bcaba3fe5)) * **mason:** rename `MasonUpdate` and `MasonUpdateAll` to `AstroMasonUpdate` and `AstroMasonUpdateAll` ([9be64b9](https://github.com/AstroNvim/AstroNvim/commit/9be64b9d0f8fbd9d57209711a03460b8606abbd4)) * **neo-tree:** add missing fold icons from AstroUI ([bea5d52](https://github.com/AstroNvim/AstroNvim/commit/bea5d528e8ed72f68bfacf5ca1eea9399e315ea2)) * **neo-tree:** disable `foldcolumn` in neo-tree ([61e05d4](https://github.com/AstroNvim/AstroNvim/commit/61e05d4b38cdc0d6826ee01fb954e3740a2483bf)) * **neo-tree:** fix autocmds ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **neo-tree:** improve `h` and `l` navigation edge cases for empty directories and nested files ([f7f3204](https://github.com/AstroNvim/AstroNvim/commit/f7f3204f2d88a26c096a18119f24ebf8f413210f)) * **neo-tree:** remove `o` binding, conflicts with new "Order by" keymaps ([ba92f46](https://github.com/AstroNvim/AstroNvim/commit/ba92f464b1e6738e136fed6650935e3379963899)) * **notify:** add icon disable support to `nvim-notify` ([fcb833c](https://github.com/AstroNvim/AstroNvim/commit/fcb833c92d3b8ec263f2413ad2af1f147a7480a1)) * **notify:** return after closing window ([d68514c](https://github.com/AstroNvim/AstroNvim/commit/d68514c718017350bf603029e3623904a120d7e7)) * **nvim-treesitter:** force install parsers bundled with neovim ([3bd128e](https://github.com/AstroNvim/AstroNvim/commit/3bd128e17a23a7f1df13964aa8a4e8c2d9582aef)) * **options:** add error reporting to malformed user options ([d9eb52d](https://github.com/AstroNvim/AstroNvim/commit/d9eb52d6b6d5dd9f1e5c3fb19028c9882b455d3e)) * **options:** don't concatenate boolean in error message ([90f3c3b](https://github.com/AstroNvim/AstroNvim/commit/90f3c3bb82505ee1a512d531d2cc7216e13fc476)) * **options:** initialize buffer list on startup ([8ea4190](https://github.com/AstroNvim/AstroNvim/commit/8ea4190a67ee04c60868920c2fae1b0317a846ad)) * **plugins:** don't use the shorthand notation for plugins ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **plugins:** make sure `mason` is set up before mason plugins ([4afe41a](https://github.com/AstroNvim/AstroNvim/commit/4afe41a5b94f05802d6a81a7c6508eae3e71ec1a)) * **status:** allow for function in colors definition ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **status:** use user provided `status.colors` table for overriding ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **ui:** unify capital/lowercase meaning for global/buffer ([cf50450](https://github.com/AstroNvim/AstroNvim/commit/cf50450f87bd8897604511369dde729364ed42d1)) * **which-key:** remove separator icon when icons are disabled ([281606e](https://github.com/AstroNvim/AstroNvim/commit/281606e4c7696f3cc2d3eacf2cc5c342cdcbe2a4)) * **which-key:** use a more minimal which-key separator ([a5be725](https://github.com/AstroNvim/AstroNvim/commit/a5be725018ddca1c471f050b5117708efba1684f)) ### Performance Improvements * **autocmds:** improve performance of `AstroFile` detection ([09144c5](https://github.com/AstroNvim/AstroNvim/commit/09144c543ec785e19b3a26cdaf4030c78c02d751)) * **heirline:** simplify buffer matcher for disabling winbar ([91fd4d5](https://github.com/AstroNvim/AstroNvim/commit/91fd4d518971834b40209f6d254a0a176ce2d34c)) * **heirline:** use logic to calculate offset rather than hardcoded list ([72e1780](https://github.com/AstroNvim/AstroNvim/commit/72e17808ad7d6a9d18c9d5f80390222050d71e1d)) * improve initial installation and startup performance ([432897f](https://github.com/AstroNvim/AstroNvim/commit/432897fd8b1088dc44753ebda8cd53058d942e94)) * improve performance of triggered plugin loading ([bae0ad7](https://github.com/AstroNvim/AstroNvim/commit/bae0ad70021e47991cc4514dee99897d7654c3e6)) * **mappings:** remove unnecessary check ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **options:** set options directly ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **plugins:** lazy now ignores plugin fragments if a plugin is disabled ([811a0b1](https://github.com/AstroNvim/AstroNvim/commit/811a0b1ad4e45a900185b9990ad86d6f045d68ac)) * **toggleterm:** optimize toggleterm `on_create` function ([c6a9f03](https://github.com/AstroNvim/AstroNvim/commit/c6a9f03a11c511ce36180ff045c13252f6d6b492)) ### Miscellaneous Chores * remove deprecated plugin configs and unnecessary LSPLoaded icon ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) ### Code Refactoring * drop support for Neovim v0.8 ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * modularize config with AstroCore, AstroUI, and AstroLSP ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move `signs` and `diagnostics` configuration to AstroCore ([7898fcd](https://github.com/AstroNvim/AstroNvim/commit/7898fcd681ac19ecaadb3a1e85b120220fde986f)) * move astronvim specific options to AstroCore options ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move astronvim.user_terminals to AstroCore ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move buffer to `astrocore` and icons to `astroui` ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move colorscheme to AstroUI and polish to AstroCore ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move configuration defaults to `opts` tables ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move Heirline `setup_colors` function to AstroUI ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move plugins and lazy_snapshot into `astronvim` module ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move resession extension to AstroCore ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move status API to AstroUI ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move to a model of just providing plugins ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move UI/UX utils to `astrocore` ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * move updater, git, and mason utilities to `astrocore` ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) * **options:** move vim options to AstroCore `opts` ([170774b](https://github.com/AstroNvim/AstroNvim/commit/170774b87545e6a8fdffbec9a37a56403b1c1f5c)) * remove `schemastore` from default plugins ([aeb24b0](https://github.com/AstroNvim/AstroNvim/commit/aeb24b0154c0a8907191acd0546bec904ad215c3)) * remove updater mappings and commands ([0e0d8bd](https://github.com/AstroNvim/AstroNvim/commit/0e0d8bdef5e0a147f1f1a0c434539016d39940b5)) ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: README.md ================================================

AstroNvim

Install · Configure · Community Plugins · Website · Discord



AstroNvim is an aesthetically pleasing and feature-rich neovim config that is extensible and easy to use with a great set of plugins

## 🌟 Preview ![Preview Image](https://astronvim.com/themes/overview.png) ## ✨ Features - Common plugin specifications with [AstroCommunity](https://github.com/AstroNvim/astrocommunity) - File explorer with [Neo-tree](https://github.com/nvim-neo-tree/neo-tree.nvim) - Autocompletion with [Blink.cmp](https://github.com/Saghen/blink.cmp) - Git integration with [Gitsigns](https://github.com/lewis6991/gitsigns.nvim) - Statusline, Winbar, and Bufferline, Statuscolumn with [Heirline](https://github.com/rebelot/heirline.nvim) - Terminal with [Toggleterm](https://github.com/akinsho/toggleterm.nvim) - Fuzzy finding with [Snacks Picker](https://github.com/folke/snacks.nvim/blob/main/docs/picker.md) - Syntax highlighting with [Treesitter](https://github.com/nvim-treesitter/nvim-treesitter) - Formatting and Linting with [None-ls](https://github.com/nvimtools/none-ls.nvim) - Language Server Protocol with [Native LSP](https://github.com/neovim/nvim-lspconfig) - Debug Adapter Protocol with [nvim-dap](https://github.com/mfussenegger/nvim-dap) ## ⚡ Requirements - [Nerd Fonts](https://www.nerdfonts.com/font-downloads) (_Optional with manual intervention:_ See [Documentation on customizing icons](https://docs.astronvim.com/Recipes/icons)) [[1]](#1) - [Neovim 0.10+ (_Not_ including nightly)](https://github.com/neovim/neovim/releases/tag/stable) - [Tree-sitter CLI](https://github.com/tree-sitter/tree-sitter/blob/master/cli/README.md) (_Note:_ This is only necessary if you want to use `auto_install` feature with Treesitter) - A clipboard tool is necessary for the integration with the system clipboard (see [`:help clipboard-tool`](https://neovim.io/doc/user/provider.html#clipboard-tool) for supported solutions) - Terminal with true color support (for the default theme, otherwise it is dependent on the theme you are using) [[2]](#2) - Optional Requirements: - [ripgrep](https://github.com/BurntSushi/ripgrep) - live grep picker search (`fw`) - [lazygit](https://github.com/jesseduffield/lazygit) - git ui toggle terminal (`tl` or `gg`) - [go DiskUsage()](https://github.com/dundee/gdu) - disk usage toggle terminal (`tu`) - [bottom](https://github.com/ClementTsang/bottom) - process viewer toggle terminal (`tt`) - [Python](https://www.python.org/) - python repl toggle terminal (`tp`) - [Node](https://nodejs.org/en/) - node repl toggle terminal (`tn`) > [!NOTE] > [1] All downloadable Nerd Fonts contain icons which are used by AstroNvim. Install the Nerd Font of your choice to your system and in your terminal emulator settings, set its font face to that Nerd Font. If you are using AstroNvim on a remote system via SSH, you do not need to install the font on the remote system. > [!NOTE] > [2] Note when using default theme: For MacOS, the default terminal does not have true color support. You will need to use [iTerm2](https://iterm2.com/), [Kitty](https://sw.kovidgoyal.net/kitty/), [WezTerm](https://wezterm.org), or another [terminal emulator](https://github.com/termstandard/colors?tab=readme-ov-file#truecolor-support-in-output-devices) that has true color support. ## 🛠️ Installation AstroNvim is provided as a plugin that can be installed with the [`lazy.nvim`](https://github.com/folke/lazy.nvim) plugin manager and then used to import all of the plugin configurations that AstroNvim provides. To quickly get started it is recommended to start with the official [AstroNvim Template](https://github.com/AstroNvim/template) which provides a great starting point for a new AstroNvim based configuration. ### Linux/Mac OS (Unix) #### Make a backup of your current nvim and shared folder ```shell mv ~/.config/nvim ~/.config/nvim.bak mv ~/.local/share/nvim ~/.local/share/nvim.bak mv ~/.local/state/nvim ~/.local/state/nvim.bak mv ~/.cache/nvim ~/.cache/nvim.bak ``` #### Clone the template repository ```shell git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim rm -rf ~/.config/nvim/.git nvim ``` ### Windows (Powershell) #### Make a backup of your current nvim and nvim-data folder ```pwsh Rename-Item -Path $env:LOCALAPPDATA\nvim -NewName $env:LOCALAPPDATA\nvim.bak Rename-Item -Path $env:LOCALAPPDATA\nvim-data -NewName $env:LOCALAPPDATA\nvim-data.bak ``` #### Clone the repository ```pwsh git clone --depth 1 https://github.com/AstroNvim/template $env:LOCALAPPDATA\nvim Remove-Item $env:LOCALAPPDATA\nvim\.git -Recurse -Force nvim ``` #### Minimal `~/.config/nvim/init.lua` Some user's might not want to use an entire template or do any customization. Here is a minimal `~/.config/nvim/init.lua` file that simply set's up a base AstroNvim installation: ```lua local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" if not vim.uv.fs_stat(lazypath) then -- stylua: ignore vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) end vim.opt.rtp:prepend(lazypath) require("lazy").setup { "AstroNvim/AstroNvim", version = "^5", import = "astronvim.plugins" } ``` ## 📦 Basic Setup #### Install LSP Enter `:LspInstall` followed by the name of the server you want to install
Example: `:LspInstall pyright` #### Install language parser Enter `:TSInstall` followed by the name of the language you want to install
Example: `:TSInstall python` #### Install Debugger Enter `:DapInstall` followed by the name of the debugger you want to install
Example: `:DapInstall python` #### Manage plugins Run `:Lazy check` to check for plugin updates Run `:Lazy update` to apply any pending plugin updates Run `:Lazy clean` to remove any disabled or unused plugins Run `:Lazy sync` to update and clean plugins #### Update AstroNvim Packages Run `:AstroUpdate` (`pa`) to update both Neovim plugins and Mason packages ## 🗒️ Links - [AstroNvim Website](https://astronvim.com) - [AstroNvim Documentation](https://docs.astronvim.com) - [Setup](https://docs.astronvim.com/#-setup) is given for basic editor setup after installation - [Default Mappings](https://docs.astronvim.com/mappings) more about the default key bindings - [Customizing Plugins](https://docs.astronvim.com/configuration/customizing_plugins/) more about configuring and adding plugins ### 📹 Videos There have been some great review videos released by members of the community! Here are a few: - [Neovim With AstroNvim | Your New Advanced Development Editor](https://www.youtube.com/watch?v=GEHPiZ10gOk) (Version: 3, Content By: [@Cretezy](https://github.com/Cretezy)) - [Why I'm quitting VIM by Carlos Mafla](https://www.youtube.com/watch?v=71GDopdc9rw) (Version: 2, Content By: [@gigo6000](https://github.com/gigo6000)) - [Astro Vim - All in one Nvim config!! by John McBride](https://www.youtube.com/watch?v=JQLZ7NJRTEo) (Version: 1, Content By: [@jpmcb](https://github.com/jpmcb)) ## 🚀 Contributing If you plan to contribute, please check the [contribution guidelines](https://github.com/AstroNvim/.github/blob/main/CONTRIBUTING.md) first. ## ⭐ Credits Sincere appreciation to the following repositories, plugin authors and the entire neovim community out there that made the development of AstroNvim possible. - [Plugins](https://docs.astronvim.com/reference/default_plugins/) - [NvChad](https://github.com/NvChad/NvChad) - [LunarVim](https://github.com/LunarVim) - [CosmicVim](https://github.com/CosmicNvim/CosmicNvim)
[![Lua](https://img.shields.io/badge/Made%20with%20Lua-blue.svg?style=for-the-badge&logo=lua)](https://lua.org)
================================================ FILE: init.lua ================================================ vim.api.nvim_echo({ { "This repository is not meant to be used as a direct Neovim configuration\n", "ErrorMsg" }, { "Please check the AstroNvim documentation for installation details\n", "WarningMsg" }, { "Press any key to exit...", "MoreMsg" }, }, true, {}) vim.fn.getchar() vim.cmd.quit() ================================================ FILE: lua/astronvim/config.lua ================================================ ---@class AstroNvimOpts ---@field mapleader string? the leader key to map before setting up Lazy ---@field maplocalleader string? the local leader key to map before setting up Lazy ---@field icons_enabled boolean? whether to enable icons, default to `true` ---@field pin_plugins boolean? whether to pin plugins or not, if `nil` then will pin if version is set. ---@type AstroNvimOpts return { mapleader = " ", maplocalleader = ",", icons_enabled = true, } ================================================ FILE: lua/astronvim/dev.lua ================================================ local M = {} local astrocore = require "astrocore" --- Helper function to generate AstroNvim snapshots (For internal use only) ---@param write? false write to AstroNvim if in `dev` mode, false to force no write ---@return table # The plugin specification table of the snapshot function M.generate_snapshot(write) local astronvim = assert(astrocore.get_plugin "AstroNvim") if write ~= false then write = astronvim.dev end local prev_snapshot = require "astronvim.lazy_snapshot" for _, plugin in ipairs(prev_snapshot) do prev_snapshot[plugin[1]] = plugin end local plugins = assert(require("lazy").plugins()) table.sort(plugins, function(l, r) return l[1] < r[1] end) local function git_commit(dir) local commit = assert(astrocore.cmd({ "git", "-C", dir, "rev-parse", "HEAD" }, false)) if commit then return vim.trim(commit) end end local pinners = { ["*"] = function(plugin) return (plugin.version and ("version = %q"):format(plugin.version)) or ("commit = %q"):format(plugin.commit) end, ["AstroNvim/AstroNvim"] = false, -- Managed by user ["Bilal2453/luvit-meta"] = false, -- Not a real plugin, used for type stubs only ["rcarriga/nvim-notify"] = 'version = vim.fn.has "nvim-0.10" ~= 1 and "~3.14" or "^3"', -- example for pinning a plugin to a specific commit for older version of neovim -- ["neovim/nvim-lspconfig"] = function(plugin) -- return ('commit = vim.fn.has "nvim-0.10" ~= 1 and "76e7c8b029e6517f3689390d6599e9b446551704" or %q'):format( -- plugin.commit -- ) -- end, } --[=[@as { [string]: false|string|fun(plugin: LazyPlugin): string?} ]=] local snapshot, module = {}, "return {\n" for _, plugin in ipairs(plugins) do local pinner = vim.F.if_nil(pinners[plugin[1]], pinners["*"]) if pinner ~= false then plugin = { plugin[1], commit = git_commit(plugin.dir), version = plugin.version } local prev_version = vim.tbl_get(prev_snapshot, plugin[1], "version") if prev_version then plugin.version = prev_version end local pin = type(pinner) == "function" and pinner(plugin) or pinner if pin then module = module .. (" { %q, "):format(plugin[1]) .. pin .. ", optional = true },\n" table.insert(snapshot, plugin) end end end module = module .. "}\n" if write then local snapshot_file = astronvim.dir .. "/lua/astronvim/lazy_snapshot.lua" astrocore.with_file(snapshot_file, "w+", function(file) file:write(module) end) end return snapshot end return M ================================================ FILE: lua/astronvim/health.lua ================================================ -- ### AstroNvim Health Checks -- -- use with `:checkhealth astronvim` -- -- copyright 2023 -- license GNU General Public License v3.0 local M = {} local health = vim.health function M.check() health.start "Checking requirements" health.info("AstroNvim Version: " .. require("astronvim").version()) health.info("Neovim Version: v" .. vim.fn.matchstr(vim.fn.execute "version", "NVIM v\\zs[^\n]*")) if vim.version().prerelease then health.warn "Neovim nightly is not officially supported and may have breaking changes" elseif vim.fn.has "nvim-0.10.0" == 1 then health.ok "Using stable Neovim >= 0.10.0" else health.error "Neovim >= 0.10.0 is required" end local programs = { { cmd = { "git" }, type = "error", msg = "Used for core functionality such as updater and plugin management", }, { cmd = { "xdg-open", "rundll32", "explorer.exe", "open" }, type = "warn", msg = "Used for `gx` mapping for opening files with system opener (Optional)", }, { cmd = { "rg" }, type = "warn", msg = "Used for Pickers `live_grep` picker, `fw` and `fW` by default (Optional)", }, { cmd = { "lazygit" }, type = "warn", msg = "Used for mappings to pull up git TUI (Optional)" }, { cmd = { "node" }, type = "warn", msg = "Used for mappings to pull up node REPL (Optional)" }, { cmd = { "gdu", "gdu-go", "gdu_windows_amd64.exe" }, type = "warn", msg = "Used for mappings to pull up disk usage analyzer (Optional)", }, { cmd = { "btm" }, type = "warn", msg = "Used for mappings to pull up system monitor (Optional)" }, { cmd = { "python", "python3" }, type = "warn", msg = "Used for mappings to pull up python REPL (Optional)" }, } for _, program in ipairs(programs) do local name = table.concat(program.cmd, "/") local found = false for _, cmd in ipairs(program.cmd) do if vim.fn.executable(cmd) == 1 then name = cmd if not program.extra_check or program.extra_check(program) then found = true end break end end if found then health.ok(("`%s` is installed: %s"):format(name, program.msg)) else health[program.type](("`%s` is not installed: %s"):format(name, program.msg)) end end end return M ================================================ FILE: lua/astronvim/init.lua ================================================ local M = {} M.did_init = false M.config = require "astronvim.config" function M.version() local astrocore = require "astrocore" local plugin = assert(astrocore.get_plugin "AstroNvim") local version_ok, version_str = pcall(astrocore.read_file, plugin.dir .. "/version.txt") if not version_ok then require("astrocore").notify("Unable to calculate version", vim.log.levels.ERROR) return end version_str = "v" .. vim.trim(version_str) if not plugin.version then version_str = version_str .. "-dev" if vim.fn.executable "git" == 1 then local git_description = astrocore.cmd({ "git", "-C", plugin.dir, "describe", "--tags" }, false) if git_description then local nightly_version = git_description and git_description:match ".*(-%d+-g%x+)\n*$" if nightly_version then version_str = version_str .. nightly_version end end end end return version_str end function M.init() if vim.fn.has "nvim-0.10" == 0 then vim.api.nvim_echo({ { "AstroNvim requires Neovim >= 0.10.0\n", "ErrorMsg" }, { "Press any key to exit", "MoreMsg" }, }, true, {}) vim.fn.getchar() vim.cmd.quit() end -- HACK: Hot patch for issue in Neovim v0.10.3 where vim.hl is not defined -- TODO: remove when dropping support for Neovim v0.10 if vim.fn.has "nvim-0.10.3" == 1 and not vim.hl then vim.hl = vim.highlight end if M.did_init then return end M.did_init = true local notify = require "astronvim.notify" notify.setup() notify.defer_startup() -- force setup during initialization local plugin = require("lazy.core.config").spec.plugins.AstroNvim local opts = require("lazy.core.plugin").values(plugin, "opts") if opts.pin_plugins == nil then opts.pin_plugins = plugin.version ~= nil end ---@diagnostic disable-next-line: cast-local-type opts = vim.tbl_deep_extend("force", M.config, opts) ---@cast opts -nil M.config = opts if not vim.g.mapleader and M.config.mapleader then vim.g.mapleader = M.config.mapleader end if not vim.g.maplocalleader and M.config.maplocalleader then vim.g.maplocalleader = M.config.maplocalleader end if M.config.icons_enabled == false then vim.g.icons_enabled = false end end function M.setup() end return M ================================================ FILE: lua/astronvim/lazy_snapshot.lua ================================================ return { { "AstroNvim/astrocore", version = "^2", optional = true }, { "AstroNvim/astrolsp", version = "^3", optional = true }, { "AstroNvim/astrotheme", version = "^4", optional = true }, { "AstroNvim/astroui", version = "^3", optional = true }, { "JoosepAlviste/nvim-ts-context-commentstring", commit = "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f", optional = true }, { "L3MON4D3/LuaSnip", version = "^2", optional = true }, { "MunifTanjim/nui.nvim", version = "^0.4", optional = true }, { "NMAC427/guess-indent.nvim", commit = "84a4987ff36798c2fc1169cbaff67960aed9776f", optional = true }, { "RRethy/vim-illuminate", commit = "0d1e93684da00ab7c057410fecfc24f434698898", optional = true }, { "Saghen/blink.cmp", version = "^1", optional = true }, { "Saghen/blink.compat", version = "^2", optional = true }, { "WhoIsSethDaniel/mason-tool-installer.nvim", commit = "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc", optional = true }, { "akinsho/toggleterm.nvim", version = "^2", optional = true }, { "brenoprata10/nvim-highlight-colors", commit = "e2cb22089cc2358b2b995c09578224f142de6039", optional = true }, { "echasnovski/mini.icons", version = "^0.16", optional = true }, { "folke/lazy.nvim", version = "^11", optional = true }, { "folke/lazydev.nvim", version = "^1", optional = true }, { "folke/neoconf.nvim", commit = "bbe36f4d60ed096282f564ddae4e781e420a8270", optional = true }, { "folke/snacks.nvim", version = "^2", optional = true }, { "folke/todo-comments.nvim", commit = "31e3c38ce9b29781e4422fc0322eb0a21f4e8668", optional = true }, { "folke/which-key.nvim", version = "^3", optional = true }, { "jay-babu/mason-null-ls.nvim", version = "^2", optional = true }, { "jay-babu/mason-nvim-dap.nvim", version = "^2", optional = true }, { "kevinhwang91/nvim-ufo", version = "^1", optional = true }, { "kevinhwang91/promise-async", version = "^1", optional = true }, { "lewis6991/gitsigns.nvim", version = "^1", optional = true }, { "max397574/better-escape.nvim", version = "^2", optional = true }, { "mfussenegger/nvim-dap", commit = "085386b9359ddf8d76ad89b98973b8e332dc5ba3", optional = true }, { "mrjones2014/smart-splits.nvim", version = "^1", optional = true }, { "neovim/nvim-lspconfig", version = "~2.1", optional = true }, { "numToStr/Comment.nvim", commit = "e30b7f2008e52442154b66f7c519bfd2f1e32acb", optional = true }, { "nvim-lua/plenary.nvim", commit = "b9fd5226c2f76c951fc8ed5923d85e4de065e509", optional = true }, { "nvim-neo-tree/neo-tree.nvim", version = "^3", optional = true }, { "nvim-neotest/nvim-nio", version = "^1", optional = true }, { "nvim-treesitter/nvim-treesitter", commit = "42fc28ba918343ebfd5565147a42a26580579482", optional = true }, { "nvim-treesitter/nvim-treesitter-textobjects", commit = "5ca4aaa6efdcc59be46b95a3e876300cfead05ef", optional = true }, { "nvimtools/none-ls.nvim", commit = "3c206dfedf5f1385e9d29f85ffaec7874358592a", optional = true }, { "rafamadriz/friendly-snippets", commit = "6cd7280adead7f586db6fccbd15d2cac7e2188b9", optional = true }, { "rcarriga/cmp-dap", commit = "ea92773e84c0ad3288c3bc5e452ac91559669087", optional = true }, { "rcarriga/nvim-dap-ui", commit = "cf91d5e2d07c72903d052f5207511bf7ecdb7122", optional = true }, { "rebelot/heirline.nvim", version = "^1", optional = true }, { "s1n7ax/nvim-window-picker", version = "^2", optional = true }, { "stevearc/aerial.nvim", version = "^2.2", optional = true }, { "stevearc/resession.nvim", version = "^1", optional = true }, { "williamboman/mason-lspconfig.nvim", version = "^1", optional = true }, { "williamboman/mason.nvim", version = "^2", optional = true }, { "windwp/nvim-autopairs", commit = "c2a0dd0d931d0fb07665e1fedb1ea688da3b80b4", optional = true }, { "windwp/nvim-ts-autotag", commit = "db15f2e0df2f5db916e511e3fffb682ef2f6354f", optional = true }, } ================================================ FILE: lua/astronvim/notify.lua ================================================ ---AstroNvim Notify Utilities --- ---This module implements a pausable `vim.notify` in order to defer notifications on startup as well as allow for freely pausing and resuming of notifications --- ---Based on notification lazy loading in LazyVim ---https://github.com/LazyVim/LazyVim/blob/a50f92f7550fb6e9f21c0852e6cb190e6fcd50f5/lua/lazyvim/util/init.lua#L90-L125 --- ---@class astronvim.notify local M = {} ---@type table[] local notifications = {} local paused = false --- Check if notifications are paused ---@return boolean # whether or not the notifications are paused function M.is_paused() return paused end --- Check now many notifications are pending ---@return table[] # the number of pending notifications function M.pending() return notifications end --- Pause notifications function M.pause() paused = true end --- Resume paused notifications function M.resume() paused = false vim.schedule(function() vim.tbl_map(function(notif) vim.notify(vim.F.unpack_len(notif)) end, notifications) notifications = {} end) end --- A pausable `vim.notify` function ---@param message string|string[] Notification message ---@param level string|number Log level. See vim.log.levels ---@param opts notify.Options Notification options function M.notify(message, level, opts) if M.is_paused() then local pos = opts and opts.replace if type(pos) == "table" and pos.id then pos = pos.id end if type(pos) ~= "number" or not notifications[pos] then pos = #notifications + 1 end if opts then opts.replace = nil end notifications[pos] = vim.F.pack_len(message, level, opts) return { id = pos } else return M._original(message, level, opts) end end --- Set `vim.notify` to extend it to be pause-able ---@param notify? function|notify the original notification function (defaults to `vim.notify`) function M.setup(notify) if not notify then notify = vim.notify end assert(notify ~= M.notify, "vim.notify is already setup") M._original, vim.notify = notify, M.notify end --- Remove `astronvim.notify` utilities and restore original `vim.notify` function M.restore() M.notify = M._original if M.is_paused() then M.resume() end end --- Pause notifications for a 500ms delay or until `vim.notify` changes function M.defer_startup() M.pause() -- defer initially for 500ms or until `vim.notify` changes local timer, checker = vim.uv.new_timer(), vim.uv.new_check() local function replay() timer:stop() checker:stop() M.resume() end -- wait till vim.notify has been replaced checker:start(function() if vim.notify ~= M.notify then replay() end end) -- or if it took more than 500ms, then something went wrong timer:start(500, 0, replay) end return M ================================================ FILE: lua/astronvim/plugins/_astrocore.lua ================================================ local astronvim = require "astronvim" astronvim.init() return { { "folke/lazy.nvim", dir = vim.env.LAZY }, { "AstroNvim/AstroNvim", build = function() if astronvim.config.pin_plugins and astronvim.config.update_notification ~= false then local astrocore_avail, astrocore = pcall(require, "astrocore") if astrocore_avail then vim.schedule( function() astrocore.notify( "Pinned versions of core plugins may have been updated\nRun `:Lazy update` again to get these updates.", vim.log.levels.WARN ) end ) end end end, priority = 10000, lazy = false, }, { import = "astronvim.lazy_snapshot", cond = astronvim.config.pin_plugins }, { "AstroNvim/astrocore", dependencies = { "AstroNvim/astroui" }, lazy = false, priority = 10000, opts = function(_, opts) local get_icon = require("astroui").get_icon return require("astrocore").extend_tbl(opts, { features = { large_buf = { enabled = function(bufnr) return require("astrocore.buffer").is_valid(bufnr) end, notify = true, size = 1.5 * 1024 * 1024, lines = 100000, line_length = 1000, }, autopairs = true, -- enable autopairs at start cmp = true, -- enable completion at start diagnostics = true, -- enable diagnostics by default highlighturl = true, -- highlight URLs by default notifications = true, -- disable notifications }, diagnostics = { virtual_text = true, signs = { text = { [vim.diagnostic.severity.ERROR] = get_icon "DiagnosticError", [vim.diagnostic.severity.HINT] = get_icon "DiagnosticHint", [vim.diagnostic.severity.WARN] = get_icon "DiagnosticWarn", [vim.diagnostic.severity.INFO] = get_icon "DiagnosticInfo", }, }, update_in_insert = false, underline = true, severity_sort = true, float = { focused = false, style = "minimal", border = "rounded", source = true, header = "", prefix = "", }, -- TODO: remove check when dropping support for neovim v0.10 jump = vim.fn.has "nvim-0.11" == 1 and { float = true } or nil, }, rooter = { enabled = true, detector = { "lsp", { ".git", "_darcs", ".hg", ".bzr", ".svn" }, { "lua", "MakeFile", "package.json" } }, ignore = { servers = {}, dirs = {}, }, autochdir = false, scope = "global", notify = false, }, sessions = { autosave = { last = true, cwd = true }, ignore = { dirs = {}, filetypes = { "gitcommit", "gitrebase" }, buftypes = {}, }, }, } --[[@as AstroCoreOpts]]) end, }, } ================================================ FILE: lua/astronvim/plugins/_astrocore_autocmds.lua ================================================ local mid_mapping = false return { "AstroNvim/astrocore", ---@type AstroCoreOpts opts = { commands = { AstroVersion = { function() local version = require("astronvim").version() if version then require("astrocore").notify(("Version: *%s*"):format(version)) end end, desc = "Check AstroNvim Version", }, AstroReload = { function() require("astrocore").reload() end, desc = "Reload AstroNvim (Experimental)" }, AstroUpdate = { function() require("astrocore").update_packages() end, desc = "Update Lazy and Mason" }, AstroRename = { function(opts) require("astrocore").rename_file { to = opts.fargs[1], force = opts.bang } end, desc = "Rename the current file, optionally new filename argument (:AstroRename! will overwrite existing files)", bang = true, nargs = "?", complete = "file", }, }, autocmds = { auto_quit = { { event = "BufEnter", desc = "Quit AstroNvim if more than one window is open and only sidebar windows are list", callback = function() local wins = vim.api.nvim_tabpage_list_wins(0) -- neo-tree handles if there is only a single window left if #wins == 1 and vim.bo[vim.api.nvim_win_get_buf(wins[1])].filetype ~= "aerial" then return end local sidebar_fts = { aerial = true, ["neo-tree"] = true } for _, winid in ipairs(wins) do if vim.api.nvim_win_is_valid(winid) then local bufnr = vim.api.nvim_win_get_buf(winid) local filetype = vim.bo[bufnr].filetype -- If any visible windows are not sidebars, early return if not sidebar_fts[filetype] then return -- If the visible window is a sidebar else -- only count filetypes once, so remove a found sidebar from the detection sidebar_fts[filetype] = nil end end end if #vim.api.nvim_list_tabpages() > 1 then vim.cmd.tabclose() else vim.cmd.qall() end end, }, }, bufferline = { { event = { "BufAdd", "BufEnter", "TabNewEntered" }, desc = "Update buffers when adding new buffers", callback = function(args) local buf_utils = require "astrocore.buffer" if not vim.t.bufs then vim.t.bufs = {} end if not buf_utils.is_valid(args.buf) then return end if args.buf ~= buf_utils.current_buf then buf_utils.last_buf = buf_utils.is_valid(buf_utils.current_buf) and buf_utils.current_buf or nil buf_utils.current_buf = args.buf end local bufs = vim.t.bufs if not vim.tbl_contains(bufs, args.buf) then table.insert(bufs, args.buf) vim.t.bufs = bufs end vim.t.bufs = vim.tbl_filter(buf_utils.is_valid, vim.t.bufs) require("astrocore").event "BufsUpdated" end, }, { event = { "BufDelete", "TermClose" }, desc = "Update buffers when deleting buffers", callback = function(args) local removed for _, tab in ipairs(vim.api.nvim_list_tabpages()) do local bufs = vim.t[tab].bufs if bufs then for i, bufnr in ipairs(bufs) do if bufnr == args.buf then removed = true table.remove(bufs, i) vim.t[tab].bufs = bufs break end end end end vim.t.bufs = vim.tbl_filter(require("astrocore.buffer").is_valid, vim.t.bufs) if removed then require("astrocore").event "BufsUpdated" end vim.cmd.redrawtabline() end, }, }, checktime = { { event = { "FocusGained", "TermClose", "TermLeave" }, desc = "Check if buffers changed on editor focus", callback = function() if vim.bo.buftype ~= "nofile" then vim.cmd "checktime" end end, }, }, create_dir = { { event = "BufWritePre", desc = "Automatically create parent directories if they don't exist when saving a file", callback = function(args) local file = args.match if not require("astrocore.buffer").is_valid(args.buf) or file:match "^%w+:[\\/][\\/]" then return end vim.fn.mkdir(vim.fn.fnamemodify(vim.uv.fs_realpath(file) or file, ":p:h"), "p") end, }, }, editorconfig_filetype = { { event = "FileType", desc = "Ensure editorconfig settings take highest precedence", callback = function(args) if vim.F.if_nil(vim.b.editorconfig, vim.g.editorconfig) then local editorconfig_avail, editorconfig = pcall(require, "editorconfig") if editorconfig_avail then editorconfig.config(args.buf) end end end, }, }, file_user_events = { { event = { "BufReadPost", "BufNewFile", "BufWritePost" }, desc = "AstroNvim user events for file detection (AstroFile and AstroGitFile)", callback = function(args) if vim.b[args.buf].astrofile_checked then return end vim.b[args.buf].astrofile_checked = true vim.schedule(function() if not vim.api.nvim_buf_is_valid(args.buf) then return end local astro = require "astrocore" local current_file = vim.api.nvim_buf_get_name(args.buf) if vim.g.vscode or not (current_file == "" or vim.bo[args.buf].buftype == "nofile") then local skip_augroups = {} for _, autocmd in ipairs(vim.api.nvim_get_autocmds { event = args.event }) do if autocmd.group_name then skip_augroups[autocmd.group_name] = true end end skip_augroups["filetypedetect"] = false -- don't skip filetypedetect events astro.event "File" local folder = vim.fn.fnamemodify(current_file, ":p:h") if vim.fn.has "win32" == 1 then folder = ('"%s"'):format(folder) end if vim.fn.executable "git" == 1 then if astro.cmd({ "git", "-C", folder, "rev-parse" }, false) or astro.file_worktree() then astro.event "GitFile" pcall(vim.api.nvim_del_augroup_by_name, "file_user_events") end else pcall(vim.api.nvim_del_augroup_by_name, "file_user_events") end vim.schedule(function() if require("astrocore.buffer").is_valid(args.buf) then for _, autocmd in ipairs(vim.api.nvim_get_autocmds { event = args.event }) do if autocmd.group_name and not skip_augroups[autocmd.group_name] then vim.api.nvim_exec_autocmds( args.event, { group = autocmd.group_name, buffer = args.buf, data = args.data } ) skip_augroups[autocmd.group_name] = true end end end end) end end) end, }, }, highlightyank = { { event = "TextYankPost", desc = "Highlight yanked text", pattern = "*", -- TODO: remove check when dropping support for Neovim v0.10 callback = function() (vim.hl or vim.highlight).on_yank() end, }, }, large_buf_settings = { { event = "User", desc = "Disable certain functionality on very large files", pattern = "AstroLargeBuf", callback = function(args) vim.opt_local.list = false -- disable list chars vim.b[args.buf].autoformat = false -- disable autoformat on save vim.b[args.buf].completion = false -- disable completion end, }, }, q_close_windows = { { event = "BufWinEnter", desc = "Make q close help, man, quickfix, dap floats", callback = function(args) -- Add cache for buffers that have already had mappings created if not vim.g.q_close_windows then vim.g.q_close_windows = {} end -- If the buffer has been checked already, skip if vim.g.q_close_windows[args.buf] then return end -- Mark the buffer as checked vim.g.q_close_windows[args.buf] = true -- Check to see if `q` is already mapped to the buffer (avoids overwriting) for _, map in ipairs(vim.api.nvim_buf_get_keymap(args.buf, "n")) do if map.lhs == "q" then return end end -- If there is no q mapping already and the buftype is a non-real file, create one if vim.tbl_contains({ "help", "nofile", "quickfix" }, vim.bo[args.buf].buftype) then vim.keymap.set("n", "q", "close", { desc = "Close window", buffer = args.buf, silent = true, nowait = true, }) end end, }, { event = "BufDelete", desc = "Clean up q_close_windows cache", callback = function(args) if vim.g.q_close_windows then vim.g.q_close_windows[args.buf] = nil end end, }, }, restore_cursor = { { event = "BufReadPost", desc = "Restore last cursor position when opening a file", callback = function(args) local buf = args.buf if vim.b[buf].last_loc_restored or vim.tbl_contains({ "gitcommit" }, vim.bo[buf].filetype) then return end vim.b[buf].last_loc_restored = true local mark = vim.api.nvim_buf_get_mark(buf, '"') if mark[1] > 0 and mark[1] <= vim.api.nvim_buf_line_count(buf) then pcall(vim.api.nvim_win_set_cursor, 0, mark) end end, }, }, -- TODO: remove autocommand when dropping support for Neovim v0.10 terminal_settings = vim.fn.has "nvim-0.11" ~= 1 and { { event = "TermOpen", desc = "Disable line number/fold column/sign column for terminals", callback = function() vim.opt_local.number = false vim.opt_local.relativenumber = false vim.opt_local.foldcolumn = "0" vim.opt_local.signcolumn = "no" end, }, } or false, unlist_quickfix = { { event = "FileType", desc = "Unlist quickfix buffers", pattern = "qf", callback = function() vim.opt_local.buflisted = false end, }, }, }, on_keys = { auto_hlsearch = { function(char) if mid_mapping then return end local new_hlsearch if vim.fn.mode() == "n" then -- enable highlight search when actively searching in normal mode new_hlsearch = vim.tbl_contains({ "", "n", "N", "*", "#", "?", "/" }, vim.fn.keytrans(char)) elseif vim.fn.mode() == "r" then -- always enable highlight search in replace mode new_hlsearch = true -- enable highlight search when searching in command mode elseif vim.fn.mode() == "c" and vim.tbl_contains({ "" }, vim.fn.keytrans(char)) then local cmd = vim.fn.getcmdline() if (cmd:match "^s" or cmd:match "^%%s" or cmd:match "^'<,'>s") and vim.o.incsearch then new_hlsearch = true end else return end if vim.o.hlsearch ~= new_hlsearch then vim.opt.hlsearch = new_hlsearch end mid_mapping = true vim.schedule(function() mid_mapping = false end) end, }, }, }, } ================================================ FILE: lua/astronvim/plugins/_astrocore_mappings.lua ================================================ return { "AstroNvim/astrocore", ---@param opts AstroCoreOpts opts = function(_, opts) local astro = require "astrocore" local get_icon = require("astroui").get_icon -- initialize internally use mapping section titles opts._map_sections = { f = { desc = get_icon("Search", 1, true) .. "Find" }, p = { desc = get_icon("Package", 1, true) .. "Packages" }, l = { desc = get_icon("ActiveLSP", 1, true) .. "Language Tools" }, u = { desc = get_icon("Window", 1, true) .. "UI/UX" }, b = { desc = get_icon("Tab", 1, true) .. "Buffers" }, bs = { desc = get_icon("Sort", 1, true) .. "Sort Buffers" }, d = { desc = get_icon("Debugger", 1, true) .. "Debugger" }, g = { desc = get_icon("Git", 1, true) .. "Git" }, S = { desc = get_icon("Session", 1, true) .. "Session" }, t = { desc = get_icon("Terminal", 1, true) .. "Terminal" }, x = { desc = get_icon("List", 1, true) .. "Quickfix/Lists" }, } -- initialize mappings table local maps = astro.empty_map_table() local sections = assert(opts._map_sections) -- Normal -- -- Standard Operations maps.n["j"] = { "v:count == 0 ? 'gj' : 'j'", expr = true, silent = true, desc = "Move cursor down" } maps.x["j"] = maps.n["j"] maps.n["k"] = { "v:count == 0 ? 'gk' : 'k'", expr = true, silent = true, desc = "Move cursor up" } maps.x["k"] = maps.n["k"] maps.n["w"] = { "w", desc = "Save" } maps.n["q"] = { "confirm q", desc = "Quit Window" } maps.n["Q"] = { "confirm qall", desc = "Exit AstroNvim" } maps.n["n"] = { "enew", desc = "New File" } maps.n[""] = { "silent! update! | redraw", desc = "Force write" } maps.x[""] = maps.i[""] maps.n[""] = { "q!", desc = "Force quit" } maps.n["|"] = { "vsplit", desc = "Vertical Split" } maps.n["\\"] = { "split", desc = "Horizontal Split" } maps.n["/"] = { "gcc", remap = true, desc = "Toggle comment line" } maps.x["/"] = { "gc", remap = true, desc = "Toggle comment" } maps.n["gco"] = { "oVcxnormal gccfxa", desc = "Add Comment Below" } maps.n["gcO"] = { "OVcxnormal gccfxa", desc = "Add Comment Above" } maps.n["R"] = { function() require("astrocore").rename_file() end, desc = "Rename file" } -- Neovim Default LSP Mappings if vim.fn.has "nvim-0.11" ~= 1 then maps.n["gra"] = { function() vim.lsp.buf.code_action() end, desc = "vim.lsp.buf.code_action()" } maps.x["gra"] = { function() vim.lsp.buf.code_action() end, desc = "vim.lsp.buf.code_action()" } maps.n["grn"] = { function() vim.lsp.buf.rename() end, desc = "vim.lsp.buf.rename()" } maps.n["grr"] = { function() vim.lsp.buf.references() end, desc = "vim.lsp.buf.references()" } maps.n["gri"] = { function() vim.lsp.buf.implementation() end, desc = "vim.lsp.buf.implementation()" } maps.n["gO"] = { function() vim.lsp.buf.document_symbol() end, desc = "vim.lsp.buf.document_symbol()" } maps.i[""] = { function() vim.lsp.buf.signature_help() end, desc = "vim.lsp.buf.signature_help()" } maps.s[""] = { function() vim.lsp.buf.signature_help() end, desc = "vim.lsp.buf.signature_help()" } end -- Plugin Manager maps.n["p"] = vim.tbl_get(sections, "p") maps.n["pi"] = { function() require("lazy").install() end, desc = "Plugins Install" } maps.n["ps"] = { function() require("lazy").home() end, desc = "Plugins Status" } maps.n["pS"] = { function() require("lazy").sync() end, desc = "Plugins Sync" } maps.n["pu"] = { function() require("lazy").check() end, desc = "Plugins Check Updates" } maps.n["pU"] = { function() require("lazy").update() end, desc = "Plugins Update" } maps.n["pa"] = { function() require("astrocore").update_packages() end, desc = "Update Lazy and Mason" } -- Manage Buffers maps.n["c"] = { function() require("astrocore.buffer").close() end, desc = "Close buffer" } maps.n["C"] = { function() require("astrocore.buffer").close(0, true) end, desc = "Force close buffer" } maps.n["]b"] = { function() require("astrocore.buffer").nav(vim.v.count1) end, desc = "Next buffer", } maps.n["[b"] = { function() require("astrocore.buffer").nav(-vim.v.count1) end, desc = "Previous buffer", } maps.n[">b"] = { function() require("astrocore.buffer").move(vim.v.count1) end, desc = "Move buffer tab right", } maps.n["b"] = vim.tbl_get(sections, "b") maps.n["bc"] = { function() require("astrocore.buffer").close_all(true) end, desc = "Close all buffers except current" } maps.n["bC"] = { function() require("astrocore.buffer").close_all() end, desc = "Close all buffers" } maps.n["bl"] = { function() require("astrocore.buffer").close_left() end, desc = "Close all buffers to the left" } maps.n["bp"] = { function() require("astrocore.buffer").prev() end, desc = "Previous buffer" } maps.n["br"] = { function() require("astrocore.buffer").close_right() end, desc = "Close all buffers to the right" } maps.n["bs"] = vim.tbl_get(sections, "bs") maps.n["bse"] = { function() require("astrocore.buffer").sort "extension" end, desc = "By extension" } maps.n["bsr"] = { function() require("astrocore.buffer").sort "unique_path" end, desc = "By relative path" } maps.n["bsp"] = { function() require("astrocore.buffer").sort "full_path" end, desc = "By full path" } maps.n["bsi"] = { function() require("astrocore.buffer").sort "bufnr" end, desc = "By buffer number" } maps.n["bsm"] = { function() require("astrocore.buffer").sort "modified" end, desc = "By modification" } maps.n["l"] = vim.tbl_get(sections, "l") maps.n["ld"] = { function() vim.diagnostic.open_float() end, desc = "Hover diagnostics" } local function diagnostic_jump(dir, severity) local jump_opts = {} if type(severity) == "string" then jump_opts.severity = vim.diagnostic.severity[severity] end if vim.fn.has "nvim-0.11" == 1 then return function() jump_opts.count = dir and vim.v.count1 or -vim.v.count1 vim.diagnostic.jump(jump_opts) end else -- TODO: remove when dropping support for Neovim v0.10 local jump = vim.diagnostic["goto_" .. (dir and "next" or "prev")] return function() jump(jump_opts) end end end -- TODO: Remove mapping after dropping support for Neovim v0.10, it's automatic if vim.fn.has "nvim-0.11" == 0 then maps.n["[d"] = { diagnostic_jump(false), desc = "Previous diagnostic" } maps.n["]d"] = { diagnostic_jump(true), desc = "Next diagnostic" } end maps.n["[e"] = { diagnostic_jump(false, "ERROR"), desc = "Previous error" } maps.n["]e"] = { diagnostic_jump(true, "ERROR"), desc = "Next error" } maps.n["[w"] = { diagnostic_jump(false, "WARN"), desc = "Previous warning" } maps.n["]w"] = { diagnostic_jump(true, "WARN"), desc = "Next warning" } maps.n["gl"] = { function() vim.diagnostic.open_float() end, desc = "Hover diagnostics" } -- Navigate tabs maps.n["]t"] = { function() vim.cmd.tabnext() end, desc = "Next tab" } maps.n["[t"] = { function() vim.cmd.tabprevious() end, desc = "Previous tab" } -- Split navigation maps.n[""] = { "h", desc = "Move to left split" } maps.n[""] = { "j", desc = "Move to below split" } maps.n[""] = { "k", desc = "Move to above split" } maps.n[""] = { "l", desc = "Move to right split" } maps.n[""] = { "resize -2", desc = "Resize split up" } maps.n[""] = { "resize +2", desc = "Resize split down" } maps.n[""] = { "vertical resize -2", desc = "Resize split left" } maps.n[""] = { "vertical resize +2", desc = "Resize split right" } -- List management maps.n["x"] = vim.tbl_get(sections, "x") maps.n["xq"] = { "copen", desc = "Quickfix List" } maps.n["xl"] = { "lopen", desc = "Location List" } if vim.fn.has "nvim-0.11" == 0 then maps.n["]q"] = { vim.cmd.cnext, desc = "Next quickfix" } maps.n["[q"] = { vim.cmd.cprev, desc = "Previous quickfix" } maps.n["]Q"] = { vim.cmd.clast, desc = "End quickfix" } maps.n["[Q"] = { vim.cmd.cfirst, desc = "Beginning quickfix" } maps.n["]l"] = { vim.cmd.lnext, desc = "Next loclist" } maps.n["[l"] = { vim.cmd.lprev, desc = "Previous loclist" } maps.n["]L"] = { vim.cmd.llast, desc = "End loclist" } maps.n["[L"] = { vim.cmd.lfirst, desc = "Beginning loclist" } end -- Stay in indent mode maps.v[""] = { ""] = { ">gv", desc = "Indent line" } -- Improved Terminal Navigation local function term_nav(dir) return function() if vim.api.nvim_win_get_config(0).zindex then vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, false, true), "n", false) else vim.cmd.wincmd(dir) end end end maps.t[""] = { term_nav "h", desc = "Terminal left window navigation" } maps.t[""] = { term_nav "j", desc = "Terminal down window navigation" } maps.t[""] = { term_nav "k", desc = "Terminal up window navigation" } maps.t[""] = { term_nav "l", desc = "Terminal right window navigation" } maps.n["u"] = vim.tbl_get(sections, "u") -- Custom menu for modification of the user experience maps.n["uA"] = { function() require("astrocore.toggles").autochdir() end, desc = "Toggle rooter autochdir" } maps.n["ub"] = { function() require("astrocore.toggles").background() end, desc = "Toggle background" } maps.n["ud"] = { function() require("astrocore.toggles").diagnostics() end, desc = "Toggle diagnostics" } maps.n["ug"] = { function() require("astrocore.toggles").signcolumn() end, desc = "Toggle signcolumn" } maps.n["u>"] = { function() require("astrocore.toggles").foldcolumn() end, desc = "Toggle foldcolumn" } maps.n["ui"] = { function() require("astrocore.toggles").indent() end, desc = "Change indent setting" } maps.n["ul"] = { function() require("astrocore.toggles").statusline() end, desc = "Toggle statusline" } maps.n["un"] = { function() require("astrocore.toggles").number() end, desc = "Change line numbering" } maps.n["uN"] = { function() require("astrocore.toggles").notifications() end, desc = "Toggle Notifications" } maps.n["up"] = { function() require("astrocore.toggles").paste() end, desc = "Toggle paste mode" } maps.n["us"] = { function() require("astrocore.toggles").spell() end, desc = "Toggle spellcheck" } maps.n["uS"] = { function() require("astrocore.toggles").conceal() end, desc = "Toggle conceal" } maps.n["ut"] = { function() require("astrocore.toggles").tabline() end, desc = "Toggle tabline" } maps.n["uu"] = { function() require("astrocore.toggles").url_match() end, desc = "Toggle URL highlight" } maps.n["uv"] = { function() require("astrocore.toggles").virtual_text() end, desc = "Toggle virtual text" } -- TODO: remove check when dropping support for Neovim 0.10 if vim.fn.has "nvim-0.11" == 1 then maps.n["uV"] = { function() require("astrocore.toggles").virtual_lines() end, desc = "Toggle virtual lines" } end maps.n["uw"] = { function() require("astrocore.toggles").wrap() end, desc = "Toggle wrap" } maps.n["uy"] = { function() require("astrocore.toggles").buffer_syntax() end, desc = "Toggle syntax highlight (buffer)" } opts.mappings = maps end, } ================================================ FILE: lua/astronvim/plugins/_astrocore_options.lua ================================================ return { "AstroNvim/astrocore", ---@param opts AstroCoreOpts opts = function(_, opts) local opt = {} if vim.fn.has "nvim-0.11" == 1 then -- TODO: remove check when dropping support for Neovim v0.10 opt.tabclose = "uselast" -- go to last used tab when closing the current tab end opt.backspace = vim.list_extend(vim.opt.backspace:get(), { "nostop" }) -- don't stop backspace at insert opt.breakindent = true -- wrap indent to match line start opt.clipboard = "unnamedplus" -- connection to the system clipboard opt.cmdheight = 0 -- hide command line unless needed opt.completeopt = { "menu", "menuone", "noselect" } -- Options for insert mode completion opt.confirm = true -- raise a dialog asking if you wish to save the current file(s) opt.copyindent = true -- copy the previous indentation on autoindenting opt.cursorline = true -- highlight the text line of the cursor opt.diffopt = vim.list_extend(vim.opt.diffopt:get(), { "algorithm:histogram", "linematch:60" }) -- enable linematch diff algorithm opt.expandtab = true -- enable the use of space in tab opt.fillchars = { eob = " " } -- disable `~` on nonexistent lines opt.ignorecase = true -- case insensitive searching opt.infercase = true -- infer cases in keyword completion opt.jumpoptions = {} -- apply no jumpoptions on startup opt.laststatus = 3 -- global statusline opt.linebreak = true -- wrap lines at 'breakat' opt.mouse = "a" -- enable mouse support opt.number = true -- show numberline opt.preserveindent = true -- preserve indent structure as much as possible opt.pumheight = 10 -- height of the pop up menu opt.relativenumber = true -- show relative numberline opt.shiftround = true -- round indentation with `>`/`<` to shiftwidth opt.shiftwidth = 0 -- number of space inserted for indentation; when zero the 'tabstop' value will be used opt.shortmess = vim.tbl_deep_extend("force", vim.opt.shortmess:get(), { s = true, I = true, c = true, C = true }) -- disable search count wrap, startup messages, and completion messages opt.showmode = false -- disable showing modes in command line opt.showtabline = 2 -- always display tabline opt.signcolumn = "yes" -- always show the sign column opt.smartcase = true -- case sensitive searching opt.splitbelow = true -- splitting a new window below the current one opt.splitright = true -- splitting a new window at the right of the current one opt.tabstop = 2 -- number of space in a tab opt.termguicolors = true -- enable 24-bit RGB color in the TUI opt.timeoutlen = 500 -- shorten key timeout length a little bit for which-key opt.title = true -- set terminal title to the filename and path opt.undofile = true -- enable persistent undo opt.updatetime = 300 -- length of time to wait before triggering the plugin opt.virtualedit = "block" -- allow going past end of line in visual block mode opt.wrap = false -- disable wrapping of lines longer than the width of window opt.writebackup = false -- disable making a backup before overwriting a file local g = {} g.markdown_recommended_style = 0 if not vim.t.bufs then vim.t.bufs = vim.api.nvim_list_bufs() end -- initialize buffer list opts.options = { opt = opt, g = g, t = { bufs = vim.t.bufs } } end, } ================================================ FILE: lua/astronvim/plugins/_astrolsp.lua ================================================ return { "AstroNvim/astrolsp", lazy = true, ---@type AstroLSPOpts opts = { features = { codelens = true, inlay_hints = false, semantic_tokens = true, }, capabilities = vim.lsp.protocol.make_client_capabilities(), ---@diagnostic disable-next-line: missing-fields config = {}, defaults = { hover = { border = "rounded", silent = true, }, signature_help = { border = "rounded", silent = true, focusable = false, }, }, file_operations = { timeout = 10000, operations = { didCreate = true, didDelete = true, didRename = true, willCreate = true, willDelete = true, willRename = true, }, }, flags = {}, formatting = { format_on_save = { enabled = true }, disabled = {} }, handlers = { function(server, server_opts) require("lspconfig")[server].setup(server_opts) end }, servers = {}, on_attach = nil, }, specs = { { "AstroNvim/astrocore", ---@type AstroCoreOpts opts = { autocmds = { astrolsp_createfiles_events = { { event = "BufWritePre", desc = "trigger willCreateFiles before writing a new file", callback = function(args) local filename = require("astrocore.buffer").is_valid(args.buf) and vim.fn.expand("#" .. args.buf .. ":p") if filename and not vim.uv.fs_stat(filename) then vim.b[args.buf].new_file = filename require("astrolsp.file_operations").willCreateFiles(filename) end end, }, { event = "BufWritePost", desc = "trigger didCreateFiles after writing a new file", callback = function(args) local filename = vim.b[args.buf].new_file if filename then vim.b[args.buf].new_file = false require("astrolsp.file_operations").didCreateFiles(filename) end end, }, }, }, }, }, { "nvim-neo-tree/neo-tree.nvim", optional = true, opts = function(_, opts) local events = require "neo-tree.events" if not opts.event_handlers then opts.event_handlers = {} end local move_args = function(args) return { from = args.source, to = args.destination } end local operations = { willCreateFiles = { events = { events.BEFORE_FILE_ADD } }, didCreateFiles = { events = { events.FILE_ADDED } }, willDeleteFiles = { events = { events.BEFORE_FILE_DELETE } }, didDeleteFiles = { events = { events.FILE_DELETED } }, willRenameFiles = { events = { events.BEFORE_FILE_MOVE, events.BEFORE_FILE_RENAME }, args = move_args }, didRenameFiles = { events = { events.FILE_MOVED, events.FILE_RENAMED }, args = move_args }, } for operation, config in pairs(operations) do for _, event in ipairs(config.events) do table.insert(opts.event_handlers, { event = event, id = "astrolsp_" .. operation, handler = function(args) require("astrolsp.file_operations")[operation](config.args and config.args(args) or args) end, }) end end end, }, }, } ================================================ FILE: lua/astronvim/plugins/_astrolsp_autocmds.lua ================================================ local function formatting_enabled(client) local formatting_disabled = vim.tbl_get(require("astrolsp").config, "formatting", "disabled") return require("astrolsp.utils").supports_method(client, "textDocument/formatting") and formatting_disabled ~= true and not vim.tbl_contains(formatting_disabled, client.name) end return { "AstroNvim/astrolsp", ---@type AstroLSPOpts opts = { commands = { Format = { cond = formatting_enabled, function() vim.lsp.buf.format(require("astrolsp").format_opts) end, desc = "Format file with LSP", }, }, autocmds = { lsp_codelens_refresh = { cond = "textDocument/codeLens", { event = { "TextChanged", "InsertLeave", "BufEnter" }, desc = "Refresh codelens (buffer)", callback = function(args) if require("astrolsp").config.features.codelens then vim.lsp.codelens.refresh { bufnr = args.buf } end end, }, }, lsp_auto_signature_help = { cond = "textDocument/signatureHelp", { event = "TextChangedI", desc = "Automatically show signature help if enabled", callback = function(args) local signature_help = vim.b[args.buf].signature_help if signature_help == nil then signature_help = require("astrolsp").config.features.signature_help end if signature_help then local trigger = vim.b[args.buf].signature_help_triggerCharacters or {} local retrigger = vim.b[args.buf].signature_help_retriggerCharacters or {} local pos = vim.api.nvim_win_get_cursor(0)[2] local cur_char = vim.api.nvim_get_current_line():sub(pos, pos) if vim.g.signature_help_triggered and (cur_char:match "%s" or retrigger[cur_char]) or trigger[cur_char] then vim.g.signature_help_triggered = true vim.lsp.buf.signature_help() return end end vim.g.signature_help_triggered = false end, }, { event = "InsertLeave", desc = "Clear automatic signature help internals when leaving insert", callback = function() vim.g.signature_help_triggered = false end, }, }, lsp_auto_format = { cond = formatting_enabled, { event = "BufWritePre", desc = "autoformat on save", callback = function(_, _, bufnr) local astrolsp = require "astrolsp" local autoformat = assert(astrolsp.config.formatting.format_on_save) local buffer_autoformat = vim.b[bufnr].autoformat if buffer_autoformat == nil then buffer_autoformat = autoformat.enabled end if buffer_autoformat and ((not autoformat.filter) or autoformat.filter(bufnr)) then vim.lsp.buf.format(vim.tbl_deep_extend("force", astrolsp.format_opts, { bufnr = bufnr })) end end, }, }, }, }, } ================================================ FILE: lua/astronvim/plugins/_astrolsp_mappings.lua ================================================ return { "AstroNvim/astrolsp", ---@param opts AstroLSPOpts opts = function(_, opts) ---@type AstroLSPMappings local maps = require("astrocore").empty_map_table() maps.n["l"] = { desc = require("astroui").get_icon("ActiveLSP", 1, true) .. "Language Tools" } maps.v["l"] = { desc = require("astroui").get_icon("ActiveLSP", 1, true) .. "Language Tools" } maps.n["la"] = { function() vim.lsp.buf.code_action() end, desc = "LSP code action", cond = "textDocument/codeAction" } maps.x["la"] = { function() vim.lsp.buf.code_action() end, desc = "LSP code action", cond = "textDocument/codeAction" } maps.n["lA"] = { function() vim.lsp.buf.code_action { context = { only = { "source" }, diagnostics = {} } } end, desc = "LSP source action", cond = "textDocument/codeAction", } maps.n["ll"] = { function() vim.lsp.codelens.refresh() end, desc = "LSP CodeLens refresh", cond = "textDocument/codeLens" } maps.n["lL"] = { function() vim.lsp.codelens.run() end, desc = "LSP CodeLens run", cond = "textDocument/codeLens" } maps.n["uL"] = { function() require("astrolsp.toggles").codelens() end, desc = "Toggle CodeLens", cond = "textDocument/codeLens", } maps.n["gD"] = { function() vim.lsp.buf.declaration() end, desc = "Declaration of current symbol", cond = "textDocument/declaration", } maps.n["gd"] = { function() vim.lsp.buf.definition() end, desc = "Show the definition of current symbol", cond = "textDocument/definition", } local function formatting_checker(method) method = "textDocument/" .. (method or "formatting") return function(client) local disabled = opts.formatting.disabled return require("astrolsp.utils").supports_method(client, method) and disabled ~= true and not vim.tbl_contains(disabled, client.name) end end local formatting_enabled = formatting_checker() maps.n["lf"] = { function() vim.lsp.buf.format(require("astrolsp").format_opts) end, desc = "Format buffer", cond = formatting_enabled, } maps.v["lf"] = { function() vim.lsp.buf.format(require("astrolsp").format_opts) end, desc = "Format buffer", cond = formatting_checker "rangeFormatting", } maps.n["uf"] = { function() require("astrolsp.toggles").buffer_autoformat() end, desc = "Toggle autoformatting (buffer)", cond = formatting_enabled, } maps.n["uF"] = { function() require("astrolsp.toggles").autoformat() end, desc = "Toggle autoformatting (global)", cond = formatting_enabled, } maps.n["u?"] = { function() require("astrolsp.toggles").signature_help() end, desc = "Toggle automatic signature help", cond = "textDocument/signatureHelp", } maps.n["uh"] = { function() require("astrolsp.toggles").buffer_inlay_hints() end, desc = "Toggle LSP inlay hints (buffer)", cond = vim.lsp.inlay_hint and "textDocument/inlayHint" or false, } maps.n["uH"] = { function() require("astrolsp.toggles").inlay_hints() end, desc = "Toggle LSP inlay hints (global)", cond = vim.lsp.inlay_hint and "textDocument/inlayHint" or false, } maps.n["lR"] = { function() vim.lsp.buf.references() end, desc = "Search references", cond = "textDocument/references" } maps.n["lr"] = { function() vim.lsp.buf.rename() end, desc = "Rename current symbol", cond = "textDocument/rename" } maps.n["lh"] = { function() vim.lsp.buf.signature_help() end, desc = "Signature help", cond = "textDocument/signatureHelp" } maps.n["gK"] = { function() vim.lsp.buf.signature_help() end, desc = "Signature help", cond = "textDocument/signatureHelp" } maps.n["gy"] = { function() vim.lsp.buf.type_definition() end, desc = "Definition of current type", cond = "textDocument/typeDefinition", } maps.n["lG"] = { function() vim.lsp.buf.workspace_symbol() end, desc = "Search workspace symbols", cond = "workspace/symbol" } maps.n["uY"] = { function() require("astrolsp.toggles").buffer_semantic_tokens() end, desc = "Toggle LSP semantic highlight (buffer)", cond = function(client) return require("astrolsp.utils").supports_method(client, "textDocument/semanticTokens/full") and vim.lsp.semantic_tokens end, } opts.mappings = require("astrocore").extend_tbl(opts.mappings, maps) end, } ================================================ FILE: lua/astronvim/plugins/_astrotheme.lua ================================================ return { "AstroNvim/astrotheme", lazy = true, opts = { plugins = { ["dashboard-nvim"] = true } } } ================================================ FILE: lua/astronvim/plugins/_astroui.lua ================================================ local astroui_foldexpr = "v:lua.require'astroui.folding'.foldexpr()" return { "AstroNvim/astroui", lazy = true, specs = { { "AstroNvim/astrocore", opts = { autocmds = { persistent_astroui_foldexpr = { { event = "FileType", callback = function() if require("astrocore.buffer").is_valid() then if vim.wo[0][0].foldexpr ~= astroui_foldexpr and vim.go.foldexpr == astroui_foldexpr then vim.wo[0][0].foldexpr = astroui_foldexpr end end end, }, }, }, options = { opt = { foldcolumn = "1", -- display fold column foldenable = true, -- enable folds foldexpr = astroui_foldexpr, -- set function for calculating folds foldlevel = 99, -- set high foldlevel foldmethod = "expr", -- use `foldexpr` for calculating folds foldtext = "", -- use transparent foldtext }, }, }, }, }, ---@type AstroUIOpts opts = { colorscheme = "astrotheme", folding = { enabled = function(bufnr) return require("astrocore.buffer").is_valid(bufnr) end, methods = { "lsp", "treesitter", "indent" }, }, icons = { ActiveLSP = "", ActiveTS = "", ArrowLeft = "", ArrowRight = "", Bookmarks = "", BufferClose = "󰅖", DapBreakpoint = "", DapBreakpointCondition = "", DapBreakpointRejected = "", DapLogPoint = "󰛿", DapStopped = "󰁕", Debugger = "", DefaultFile = "󰈙", Diagnostic = "󰒡", DiagnosticError = "", DiagnosticHint = "󰌵", DiagnosticInfo = "󰋼", DiagnosticWarn = "", Ellipsis = "…", Environment = "", FileNew = "", FileModified = "", FileReadOnly = "", FoldClosed = "", FoldOpened = "", FoldSeparator = " ", FolderClosed = "", FolderEmpty = "", FolderOpen = "", Git = "󰊢", GitAdd = "", GitBranch = "", GitChange = "", GitConflict = "", GitDelete = "", GitIgnored = "◌", GitRenamed = "➜", GitSign = "▎", GitStaged = "✓", GitUnstaged = "✗", GitUntracked = "★", List = "", LSPLoading1 = "", LSPLoading2 = "󰀚", LSPLoading3 = "", MacroRecording = "", Package = "󰏖", Paste = "󰅌", Refresh = "", Search = "", Selected = "❯", Session = "󱂬", Sort = "󰒺", Spellcheck = "󰓆", Tab = "󰓩", TabClose = "󰅙", Terminal = "", Window = "", WordFile = "󰈭", }, text_icons = { ActiveLSP = "LSP:", ArrowLeft = "<", ArrowRight = ">", BufferClose = "x", DapBreakpoint = "B", DapBreakpointCondition = "C", DapBreakpointRejected = "R", DapLogPoint = "L", DapStopped = ">", DefaultFile = "[F]", DiagnosticError = "X", DiagnosticHint = "?", DiagnosticInfo = "i", DiagnosticWarn = "!", Ellipsis = "...", Environment = "Env:", FileModified = "*", FileReadOnly = "[lock]", FoldClosed = "+", FoldOpened = "-", FoldSeparator = " ", FolderClosed = "[D]", FolderEmpty = "[E]", FolderOpen = "[O]", GitAdd = "[+]", GitChange = "[/]", GitConflict = "[!]", GitDelete = "[-]", GitIgnored = "[I]", GitRenamed = "[R]", GitSign = "|", GitStaged = "[S]", GitUnstaged = "[U]", GitUntracked = "[?]", MacroRecording = "Recording:", Paste = "[PASTE]", Search = "?", Selected = "*", Spellcheck = "[SPELL]", TabClose = "X", }, lazygit = { theme_path = vim.fs.normalize(vim.fn.stdpath "cache" .. "/astroui-lazygit-config.yml"), theme = { [241] = { fg = "Special" }, activeBorderColor = { fg = "MatchParen", bold = true }, cherryPickedCommitBgColor = { bg = "Substitute" }, cherryPickedCommitFgColor = { fg = "Substitute" }, defaultFgColor = { fg = "Normal" }, inactiveBorderColor = { fg = "FloatBorder" }, markedBaseCommitBgColor = { bg = "CurSearch" }, markedBaseCommitFgColor = { fg = "CurSearch" }, optionsTextColor = { fg = "Function" }, searchingActiveBorderColor = { fg = "MatchParen", bold = true }, selectedLineBgColor = { bg = "Visual" }, -- set to `default` to have no background colour unstagedChangesColor = { fg = "DiagnosticError" }, }, }, }, } ================================================ FILE: lua/astronvim/plugins/_astroui_status.lua ================================================ return { "AstroNvim/astroui", ---@param opts AstroUIOpts opts = function(_, opts) local sign_handlers = {} -- gitsigns handlers local function gitsigns_handler(_) local gitsigns_avail, gitsigns = pcall(require, "gitsigns") if gitsigns_avail then vim.schedule(gitsigns.preview_hunk) end end for _, sign in ipairs { "Topdelete", "Untracked", "Add", "Change", "Changedelete", "Delete" } do local name = "GitSigns" .. sign if not sign_handlers[name] then sign_handlers[name] = gitsigns_handler end end sign_handlers["gitsigns_extmark_signs_"] = gitsigns_handler -- diagnostic handlers local function diagnostics_handler(args) if args.mods:find "c" then vim.schedule(vim.lsp.buf.code_action) else vim.schedule(vim.diagnostic.open_float) end end for _, sign in ipairs { "Error", "Hint", "Info", "Warn" } do local name = "DiagnosticSign" .. sign if not sign_handlers[name] then sign_handlers[name] = diagnostics_handler end end -- DAP handlers local function dap_breakpoint_handler(_) local dap_avail, dap = pcall(require, "dap") if dap_avail then vim.schedule(dap.toggle_breakpoint) end end for _, sign in ipairs { "", "Rejected", "Condition" } do local name = "DapBreakpoint" .. sign if not sign_handlers[name] then sign_handlers[name] = dap_breakpoint_handler end end opts.status = { fallback_colors = { none = "NONE", fg = "#abb2bf", bg = "#1e222a", dark_bg = "#2c323c", blue = "#61afef", green = "#98c379", grey = "#5c6370", bright_grey = "#777d86", dark_grey = "#5c5c5c", orange = "#ff9640", purple = "#c678dd", bright_purple = "#a9a1e1", red = "#e06c75", bright_red = "#ec5f67", white = "#c9c9c9", yellow = "#e5c07b", bright_yellow = "#ebae34", }, modes = { ["n"] = { "NORMAL", "normal" }, ["no"] = { "OP", "normal" }, ["nov"] = { "OP", "normal" }, ["noV"] = { "OP", "normal" }, ["no"] = { "OP", "normal" }, ["niI"] = { "NORMAL", "normal" }, ["niR"] = { "NORMAL", "normal" }, ["niV"] = { "NORMAL", "normal" }, ["i"] = { "INSERT", "insert" }, ["ic"] = { "INSERT", "insert" }, ["ix"] = { "INSERT", "insert" }, ["t"] = { "TERM", "terminal" }, ["nt"] = { "TERM", "terminal" }, ["v"] = { "VISUAL", "visual" }, ["vs"] = { "VISUAL", "visual" }, ["V"] = { "LINES", "visual" }, ["Vs"] = { "LINES", "visual" }, [""] = { "BLOCK", "visual" }, ["s"] = { "BLOCK", "visual" }, ["R"] = { "REPLACE", "replace" }, ["Rc"] = { "REPLACE", "replace" }, ["Rx"] = { "REPLACE", "replace" }, ["Rv"] = { "V-REPLACE", "replace" }, ["s"] = { "SELECT", "visual" }, ["S"] = { "SELECT", "visual" }, [""] = { "BLOCK", "visual" }, ["c"] = { "COMMAND", "command" }, ["cv"] = { "COMMAND", "command" }, ["ce"] = { "COMMAND", "command" }, ["r"] = { "PROMPT", "inactive" }, ["rm"] = { "MORE", "inactive" }, ["r?"] = { "CONFIRM", "inactive" }, ["!"] = { "SHELL", "inactive" }, ["null"] = { "null", "inactive" }, }, separators = { none = { "", "" }, left = { "", " " }, right = { " ", "" }, center = { " ", " " }, tab = { "", " " }, breadcrumbs = "  ", path = "  ", }, attributes = { buffer_active = { bold = true, italic = true }, buffer_picker = { bold = true }, macro_recording = { bold = true }, git_branch = { bold = true }, git_diff = { bold = true }, virtual_env = { bold = true }, }, icon_highlights = { file_icon = { tabline = function(self) return self.is_active or self.is_visible end, statusline = true, }, }, sign_handlers = sign_handlers, setup_colors = function() local astroui = require "astroui" ---@type AstroUIStatusOpts local status_opts = astroui.config.status local color = assert(status_opts.fallback_colors) local get_hlgroup = astroui.get_hlgroup local lualine_mode = require("astroui.status.hl").lualine_mode local function resolve_lualine(orig, ...) return (not orig or orig == "NONE") and lualine_mode(...) or orig end local Normal = get_hlgroup("Normal", { fg = color.fg, bg = color.bg }) local Comment = get_hlgroup("Comment", { fg = color.bright_grey, bg = color.bg }) local Error = get_hlgroup("Error", { fg = color.red, bg = color.bg }) local StatusLine = get_hlgroup("StatusLine", { fg = color.fg, bg = color.dark_bg }) local TabLine = get_hlgroup("TabLine", { fg = color.grey, bg = color.none }) local TabLineFill = get_hlgroup("TabLineFill", { fg = color.fg, bg = color.dark_bg }) local TabLineSel = get_hlgroup("TabLineSel", { fg = color.fg, bg = color.none }) local WinBar = get_hlgroup("WinBar", { fg = color.bright_grey, bg = color.bg }) local WinBarNC = get_hlgroup("WinBarNC", { fg = color.grey, bg = color.bg }) local Conditional = get_hlgroup("Conditional", { fg = color.bright_purple, bg = color.dark_bg }) local String = get_hlgroup("String", { fg = color.green, bg = color.dark_bg }) local TypeDef = get_hlgroup("TypeDef", { fg = color.yellow, bg = color.dark_bg }) local NvimEnvironmentName = get_hlgroup("NvimEnvironmentName", { fg = color.yellow, bg = color.dark_bg }) local GitSignsAdd = get_hlgroup("GitSignsAdd", { fg = color.green, bg = color.dark_bg }) local GitSignsChange = get_hlgroup("GitSignsChange", { fg = color.orange, bg = color.dark_bg }) local GitSignsDelete = get_hlgroup("GitSignsDelete", { fg = color.bright_red, bg = color.dark_bg }) local DiagnosticError = get_hlgroup("DiagnosticError", { fg = color.bright_red, bg = color.dark_bg }) local DiagnosticWarn = get_hlgroup("DiagnosticWarn", { fg = color.orange, bg = color.dark_bg }) local DiagnosticInfo = get_hlgroup("DiagnosticInfo", { fg = color.white, bg = color.dark_bg }) local DiagnosticHint = get_hlgroup("DiagnosticHint", { fg = color.bright_yellow, bg = color.dark_bg }) local HeirlineInactive = resolve_lualine(get_hlgroup("HeirlineInactive", { bg = nil }).bg, "inactive", color.dark_grey) local HeirlineNormal = resolve_lualine(get_hlgroup("HeirlineNormal", { bg = nil }).bg, "normal", color.blue) local HeirlineInsert = resolve_lualine(get_hlgroup("HeirlineInsert", { bg = nil }).bg, "insert", color.green) local HeirlineVisual = resolve_lualine(get_hlgroup("HeirlineVisual", { bg = nil }).bg, "visual", color.purple) local HeirlineReplace = resolve_lualine(get_hlgroup("HeirlineReplace", { bg = nil }).bg, "replace", color.bright_red) local HeirlineCommand = resolve_lualine(get_hlgroup("HeirlineCommand", { bg = nil }).bg, "command", color.bright_yellow) local HeirlineTerminal = resolve_lualine(get_hlgroup("HeirlineTerminal", { bg = nil }).bg, "insert", HeirlineInsert) local colors = { close_fg = Error.fg, fg = StatusLine.fg, bg = StatusLine.bg, section_fg = StatusLine.fg, section_bg = StatusLine.bg, git_branch_fg = Conditional.fg, mode_fg = StatusLine.bg, treesitter_fg = String.fg, virtual_env_fg = NvimEnvironmentName.fg, scrollbar = TypeDef.fg, git_added = GitSignsAdd.fg, git_changed = GitSignsChange.fg, git_removed = GitSignsDelete.fg, diag_ERROR = DiagnosticError.fg, diag_WARN = DiagnosticWarn.fg, diag_INFO = DiagnosticInfo.fg, diag_HINT = DiagnosticHint.fg, winbar_fg = WinBar.fg, winbar_bg = WinBar.bg, winbarnc_fg = WinBarNC.fg, winbarnc_bg = WinBarNC.bg, tabline_bg = TabLineFill.bg, tabline_fg = TabLineFill.bg, buffer_fg = Comment.fg, buffer_path_fg = WinBarNC.fg, buffer_close_fg = Comment.fg, buffer_bg = TabLineFill.bg, buffer_active_fg = Normal.fg, buffer_active_path_fg = WinBarNC.fg, buffer_active_close_fg = Error.fg, buffer_active_bg = Normal.bg, buffer_visible_fg = Normal.fg, buffer_visible_path_fg = WinBarNC.fg, buffer_visible_close_fg = Error.fg, buffer_visible_bg = Normal.bg, buffer_overflow_fg = Comment.fg, buffer_overflow_bg = TabLineFill.bg, buffer_picker_fg = Error.fg, tab_close_fg = Error.fg, tab_close_bg = TabLineFill.bg, tab_fg = TabLine.fg, tab_bg = TabLine.bg, tab_active_fg = TabLineSel.fg, tab_active_bg = TabLineSel.bg, inactive = HeirlineInactive, normal = HeirlineNormal, insert = HeirlineInsert, visual = HeirlineVisual, replace = HeirlineReplace, command = HeirlineCommand, terminal = HeirlineTerminal, } local user_colors = status_opts.colors if type(user_colors) == "table" then colors = require("astrocore").extend_tbl(colors, user_colors) elseif type(user_colors) == "function" then local new_colors = user_colors(colors) if new_colors then colors = new_colors end end for _, section in ipairs { "git_branch", "file_info", "git_diff", "diagnostics", "lsp", "macro_recording", "mode", "cmd_info", "treesitter", "nav", "virtual_env", } do if not colors[section .. "_bg"] then colors[section .. "_bg"] = colors["section_bg"] end if not colors[section .. "_fg"] then colors[section .. "_fg"] = colors["section_fg"] end end return colors end, winbar = { enabled = { bufname = {}, buftype = {}, filetype = {} }, disabled = { bufname = {}, buftype = { "^terminal$", "^nofile$" }, filetype = {} }, }, } end, } ================================================ FILE: lua/astronvim/plugins/aerial.lua ================================================ return { "stevearc/aerial.nvim", event = "User AstroFile", specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["lS"] = { function() require("aerial").toggle() end, desc = "Symbols outline" } end, }, }, opts = function(_, opts) opts = require("astrocore").extend_tbl(opts, { attach_mode = "global", backends = { "lsp", "treesitter", "markdown", "man" }, layout = { min_width = 28 }, show_guides = true, filter_kind = false, guides = { mid_item = "├ ", last_item = "└ ", nested_top = "│ ", whitespace = " ", }, keymaps = { ["[y"] = "actions.prev", ["]y"] = "actions.next", ["[Y"] = "actions.prev_up", ["]Y"] = "actions.next_up", ["{"] = false, ["}"] = false, ["[["] = false, ["]]"] = false, }, on_attach = function(bufnr) local astrocore = require "astrocore" astrocore.set_mappings({ n = { ["]y"] = { function() require("aerial").next(vim.v.count1) end, desc = "Next symbol" }, ["[y"] = { function() require("aerial").prev(vim.v.count1) end, desc = "Previous symbol" }, ["]Y"] = { function() require("aerial").next_up(vim.v.count1) end, desc = "Next symbol upwards" }, ["[Y"] = { function() require("aerial").prev_up(vim.v.count1) end, desc = "Previous symbol upwards" }, }, }, { buffer = bufnr }) end, }) local large_buf = vim.tbl_get(require("astrocore").config, "features", "large_buf") if large_buf then opts.disable_max_lines, opts.disable_max_size = large_buf.lines or nil, large_buf.size or nil end return opts end, } ================================================ FILE: lua/astronvim/plugins/autopairs.lua ================================================ return { "windwp/nvim-autopairs", event = "User AstroFile", specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["ua"] = { function() require("astrocore.toggles").autopairs() end, desc = "Toggle autopairs" } end, }, }, opts_extend = { "disable_filetype" }, opts = { check_ts = true, enabled = function(bufnr) return require("astrocore.buffer").is_valid(bufnr) end, ts_config = { java = false }, fast_wrap = { map = "", chars = { "{", "[", "(", '"', "'" }, pattern = ([[ [%'%"%)%>%]%)%}%,] ]]):gsub("%s+", ""), offset = 0, end_key = "$", keys = "qwertyuiopzxcvbnmasdfghjkl", check_comma = true, highlight = "PmenuSel", highlight_grey = "LineNr", }, }, config = function(...) require "astronvim.plugins.configs.nvim-autopairs"(...) end, } ================================================ FILE: lua/astronvim/plugins/better-escape.lua ================================================ return { "max397574/better-escape.nvim", event = "VeryLazy", opts = { timeout = 300, default_mappings = false, mappings = { i = { j = { k = "", j = "" } }, }, }, } ================================================ FILE: lua/astronvim/plugins/blink.lua ================================================ local function has_words_before() local line, col = (unpack or table.unpack)(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil end ---@type function?, function? local icon_provider, hl_provider local function get_kind_icon(CTX) -- Evaluate icon provider if not icon_provider then local _, mini_icons = pcall(require, "mini.icons") if _G.MiniIcons then icon_provider = function(ctx) local is_specific_color = ctx.kind_hl and ctx.kind_hl:match "^HexColor" ~= nil if ctx.item.source_name == "LSP" then local icon, hl = mini_icons.get("lsp", ctx.kind or "") if icon then ctx.kind_icon = icon if not is_specific_color then ctx.kind_hl = hl end end elseif ctx.item.source_name == "Path" then ctx.kind_icon, ctx.kind_hl = mini_icons.get(ctx.kind == "Folder" and "directory" or "file", ctx.label) elseif ctx.item.source_name == "Snippets" then ctx.kind_icon, ctx.kind_hl = mini_icons.get("lsp", "snippet") end end end if not icon_provider then local lspkind_avail, lspkind = pcall(require, "lspkind") if lspkind_avail then icon_provider = function(ctx) if ctx.item.source_name == "LSP" then local icon = lspkind.symbolic(ctx.kind, { mode = "symbol" }) if icon then ctx.kind_icon = icon end elseif ctx.item.source_name == "Snippets" then local icon = lspkind.symbolic("Snippet", { mode = "symbol" }) if icon then ctx.kind_icon = icon end end end end end if not icon_provider then icon_provider = function() end end end -- Evaluate highlight provider if not hl_provider then local highlight_colors_avail, highlight_colors = pcall(require, "nvim-highlight-colors") if highlight_colors_avail then local kinds hl_provider = function(ctx) if not kinds then kinds = require("blink.cmp.types").CompletionItemKind end if ctx.item.kind == kinds.Color then local doc = vim.tbl_get(ctx, "item", "documentation") if doc then local color_item = highlight_colors_avail and highlight_colors.format(doc, { kind = kinds[kinds.Color] }) if color_item and color_item.abbr_hl_group then if color_item.abbr then ctx.kind_icon = color_item.abbr end ctx.kind_hl = color_item.abbr_hl_group end end end end end if not hl_provider then hl_provider = function() end end end -- Call resolved providers icon_provider(CTX) hl_provider(CTX) -- Return text and highlight information return { text = CTX.kind_icon .. CTX.icon_gap, highlight = CTX.kind_hl } end return { "Saghen/blink.cmp", version = "^1", -- make sure to always set version to v1 even on development event = { "InsertEnter", "CmdlineEnter" }, opts_extend = { "sources.default", "cmdline.sources", "term.sources" }, opts = { enabled = function() local astro = require "astrocore" local dap_prompt = astro.is_available "cmp-dap" -- add interoperability with cmp-dap and vim.tbl_contains({ "dap-repl", "dapui_watches", "dapui_hover" }, vim.bo.filetype) if vim.bo.buftype == "prompt" and not dap_prompt then return false end return vim.F.if_nil(vim.b.completion, astro.config.features.cmp) end, -- remember to enable your providers here sources = { default = { "lsp", "path", "snippets", "buffer" }, }, keymap = { [""] = { "show", "show_documentation", "hide_documentation" }, [""] = { "select_prev", "fallback" }, [""] = { "select_next", "fallback" }, [""] = { "select_next", "show" }, [""] = { "select_prev", "show" }, [""] = { "select_next", "fallback" }, [""] = { "select_prev", "fallback" }, [""] = { "scroll_documentation_up", "fallback" }, [""] = { "scroll_documentation_down", "fallback" }, [""] = { "hide", "fallback" }, [""] = { "accept", "fallback" }, [""] = { "select_next", "snippet_forward", function(cmp) if has_words_before() or vim.api.nvim_get_mode().mode == "c" then return cmp.show() end end, "fallback", }, [""] = { "select_prev", "snippet_backward", function(cmp) if vim.api.nvim_get_mode().mode == "c" then return cmp.show() end end, "fallback", }, }, fuzzy = { implementation = "prefer_rust" }, completion = { list = { selection = { preselect = false, auto_insert = true } }, menu = { auto_show = function(ctx) return ctx.mode ~= "cmdline" end, border = "rounded", winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder,CursorLine:PmenuSel,Search:None", draw = { treesitter = { "lsp" }, components = { kind_icon = { text = function(ctx) return get_kind_icon(ctx).text end, highlight = function(ctx) return get_kind_icon(ctx).highlight end, }, }, }, }, accept = { auto_brackets = { enabled = true }, }, documentation = { auto_show = true, auto_show_delay_ms = 0, window = { border = "rounded", winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder,CursorLine:PmenuSel,Search:None", }, }, }, cmdline = { keymap = { [""] = { "hide", "fallback" }, }, completion = { ghost_text = { enabled = false } }, }, signature = { window = { border = "rounded", winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder", }, }, }, specs = { { -- disable blink icons if icons are disabled "Saghen/blink.cmp", opts = function(_, opts) if vim.g.icons_enabled == false then if not opts.appearance then opts.appearance = {} end opts.appearance.kind_icons = { Text = "T", Method = "M", Function = "F", Constructor = "C", Field = "F", Variable = "V", Property = "P", Class = "C", Interface = "I", Struct = "S", Module = "M", Unit = "U", Value = "V", Enum = "E", EnumMember = "E", Keyword = "K", Constant = "C", Snippet = "S", Color = "C", File = "F", Reference = "R", Folder = "F", Event = "E", Operator = "O", TypeParameter = "T", } end end, }, { "AstroNvim/astrolsp", optional = true, opts = function(_, opts) opts.capabilities = require("blink.cmp").get_lsp_capabilities(opts.capabilities) -- disable AstroLSP signature help if `blink.cmp` is providing it local blink_opts = require("astrocore").plugin_opts "blink.cmp" if vim.tbl_get(blink_opts, "signature", "enabled") == true then if not opts.features then opts.features = {} end opts.features.signature_help = false end end, }, { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["uc"] = { function() require("astrocore.toggles").buffer_cmp() end, desc = "Toggle autocompletion (buffer)" } maps.n["uC"] = { function() require("astrocore.toggles").cmp() end, desc = "Toggle autocompletion (global)" } end, }, }, } ================================================ FILE: lua/astronvim/plugins/comment.lua ================================================ -- TODO: Remove when dropping support for Neovim v0.10 return { "numToStr/Comment.nvim", enabled = vim.fn.has "nvim-0.11" ~= 1, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["/"] = { function() return require("Comment.api").call( "toggle.linewise." .. (vim.v.count == 0 and "current" or "count_repeat"), "g@$" )() end, expr = true, silent = true, desc = "Toggle comment line", } maps.x["/"] = { "lua require('Comment.api').locked('toggle.linewise')(vim.fn.visualmode())", desc = "Toggle comment", } end, }, }, keys = function(_, keys) local plugin = require("lazy.core.config").spec.plugins["Comment.nvim"] local opts = require("lazy.core.plugin").values(plugin, "opts", false) if vim.tbl_get(opts, "mappings", "basic") ~= false then vim.list_extend(keys, { { vim.tbl_get(opts, "toggler", "line") or "gcc", desc = "Comment toggle current line" }, { vim.tbl_get(opts, "toggler", "block") or "gbc", desc = "Comment toggle current block" }, { vim.tbl_get(opts, "opleader", "line") or "gc", desc = "Comment toggle linewise" }, { vim.tbl_get(opts, "opleader", "block") or "gb", desc = "Comment toggle blockwise" }, { vim.tbl_get(opts, "opleader", "line") or "gc", mode = "x", desc = "Comment toggle linewise (visual)" }, { vim.tbl_get(opts, "opleader", "block") or "gb", mode = "x", desc = "Comment toggle blockwise (visual)" }, }) end if vim.tbl_get(opts, "mappings", "extra") ~= false then vim.list_extend(keys, { { vim.tbl_get(keys, "extra", "below") or "gco", desc = "Comment insert below" }, { vim.tbl_get(opts, "extra", "above") or "gcO", desc = "Comment insert above" }, { vim.tbl_get(opts, "extra", "eol") or "gcA", desc = "Comment insert end of line" }, }) end end, opts = function(_, opts) local commentstring_avail, commentstring = pcall(require, "ts_context_commentstring.integrations.comment_nvim") if commentstring_avail then opts.pre_hook = commentstring.create_pre_hook() end end, } ================================================ FILE: lua/astronvim/plugins/configs/cmp-dap.lua ================================================ return function(_, _) local blink_avail, blink = pcall(require, "blink.cmp") if blink_avail then for _, dap_ft in ipairs { "dap-repl", "dapui_watches", "dapui_hover" } do blink.add_filetype_source(dap_ft, "dap") end end end ================================================ FILE: lua/astronvim/plugins/configs/lspconfig.lua ================================================ return function(_, _) local astrocore = require "astrocore" local function setup_servers() local was_setup, astrolsp = {}, require "astrolsp" for _, server in ipairs(astrolsp.config.servers) do if not was_setup[server] then astrolsp.lsp_setup(server) was_setup[server] = true end end astrocore.exec_buffer_autocmds("FileType", { group = "lspconfig" }) astrocore.event "LspSetup" end if astrocore.is_available "mason-lspconfig.nvim" then astrocore.on_load("mason-lspconfig.nvim", setup_servers) else setup_servers() end end ================================================ FILE: lua/astronvim/plugins/configs/luasnip.lua ================================================ return function(_, opts) if opts then require("luasnip").config.setup(opts) end vim.tbl_map(function(type) require("luasnip.loaders.from_" .. type).lazy_load() end, { "vscode", "snipmate", "lua" }) end ================================================ FILE: lua/astronvim/plugins/configs/mason-lspconfig.lua ================================================ return function(_, opts) local is_available = require("astrocore").is_available if is_available "mason-tool-installer.nvim" then opts.ensure_installed = nil end if is_available "astrolsp" then require("astrolsp.mason-lspconfig").register_servers() end require("mason-lspconfig").setup(opts) end ================================================ FILE: lua/astronvim/plugins/configs/mason-null-ls.lua ================================================ return function(_, opts) if require("astrocore").is_available "mason-tool-installer.nvim" then opts.ensure_installed = nil end require("mason-null-ls").setup(opts) end ================================================ FILE: lua/astronvim/plugins/configs/mason-nvim-dap.lua ================================================ return function(_, opts) if require("astrocore").is_available "mason-tool-installer.nvim" then opts.ensure_installed = nil end require("mason-nvim-dap").setup(opts) end ================================================ FILE: lua/astronvim/plugins/configs/mason-tool-installer.lua ================================================ return function(_, opts) local mason_tool_installer = require "mason-tool-installer" mason_tool_installer.setup(opts) if opts.run_on_start ~= false then mason_tool_installer.run_on_start() end end ================================================ FILE: lua/astronvim/plugins/configs/nvim-autopairs.lua ================================================ return function(_, opts) local npairs = require "nvim-autopairs" npairs.setup(opts) local astrocore = require "astrocore" if not astrocore.config.features.autopairs then npairs.disable() end end ================================================ FILE: lua/astronvim/plugins/configs/nvim-dap-ui.lua ================================================ return function(_, opts) local dap, dapui = require "dap", require "dapui" dap.listeners.after.event_initialized.dapui_config = function() dapui.open() end dap.listeners.before.event_terminated.dapui_config = function() dapui.close() end dap.listeners.before.event_exited.dapui_config = function() dapui.close() end dapui.setup(opts) end ================================================ FILE: lua/astronvim/plugins/configs/nvim-dap.lua ================================================ return function() local parser, cleaner local vscode = require "dap.ext.vscode" vscode.json_decode = function(str) if cleaner == nil then local plenary_avail, plenary = pcall(require, "plenary.json") cleaner = plenary_avail and function(s) return plenary.json_strip_comments(s, {}) end or false end if not parser then local json5_avail, json5 = pcall(require, "json5") parser = json5_avail and json5.parse or vim.json.decode end if type(cleaner) == "function" then str = cleaner(str) end local parsed_ok, parsed = pcall(parser, str) if not parsed_ok then require("astrocore").notify("Error parsing `.vscode/launch.json`.", vim.log.levels.ERROR) parsed = {} end return parsed end end ================================================ FILE: lua/astronvim/plugins/configs/nvim-treesitter.lua ================================================ return function(plugin, opts) local ts = require(plugin.main) -- if no compiler or git available, disable installation if vim.fn.executable "git" == 0 or not vim.tbl_contains( require("nvim-treesitter.install").compilers, function(c) return c ~= vim.NIL and vim.fn.executable(c) == 1 end, { predicate = true } ) then opts.auto_install = false opts.ensure_installed = nil end -- disable all treesitter modules on large buffer for _, module in ipairs(ts.available_modules()) do if not opts[module] then opts[module] = {} end local module_opts = opts[module] local disable = module_opts.disable module_opts.disable = function(lang, bufnr) return require("astrocore.buffer").is_large(bufnr) or (type(disable) == "table" and vim.tbl_contains(disable, lang)) or (type(disable) == "function" and disable(lang, bufnr)) end end ts.setup(opts) end ================================================ FILE: lua/astronvim/plugins/configs/ts-autotag.lua ================================================ return function(_, opts) require("nvim-ts-autotag").setup(opts) require("astrocore").exec_buffer_autocmds("FileType", { group = "nvim_ts_xmltag" }) end ================================================ FILE: lua/astronvim/plugins/configs/vim-illuminate.lua ================================================ return function(_, opts) require("illuminate").configure(opts) end ================================================ FILE: lua/astronvim/plugins/dap.lua ================================================ return { "mfussenegger/nvim-dap", lazy = true, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local get_icon = require("astroui").get_icon local maps = opts.mappings maps.n["d"] = vim.tbl_get(opts, "_map_sections", "d") -- modified function keys found with `showkey -a` in the terminal to get key code -- run `nvim -V3log +quit` and search through the "Terminal info" in the `log` file for the correct keyname maps.n[""] = { function() require("dap").continue() end, desc = "Debugger: Start" } maps.n[""] = { function() require("dap").terminate() end, desc = "Debugger: Stop" } -- Shift+F5 maps.n[""] = { -- Shift+F9 function() vim.ui.input({ prompt = "Condition: " }, function(condition) if condition then require("dap").set_breakpoint(condition) end end) end, desc = "Debugger: Conditional Breakpoint", } maps.n[""] = { function() require("dap").restart_frame() end, desc = "Debugger: Restart" } -- Control+F5 maps.n[""] = { function() require("dap").pause() end, desc = "Debugger: Pause" } maps.n[""] = { function() require("dap").toggle_breakpoint() end, desc = "Debugger: Toggle Breakpoint" } maps.n[""] = { function() require("dap").step_over() end, desc = "Debugger: Step Over" } maps.n[""] = { function() require("dap").step_into() end, desc = "Debugger: Step Into" } maps.n[""] = { function() require("dap").step_out() end, desc = "Debugger: Step Out" } -- Shift+F11 maps.n["db"] = { function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint (F9)" } maps.n["dB"] = { function() require("dap").clear_breakpoints() end, desc = "Clear Breakpoints" } maps.n["dc"] = { function() require("dap").continue() end, desc = "Start/Continue (F5)" } maps.n["dC"] = { function() vim.ui.input({ prompt = "Condition: " }, function(condition) if condition then require("dap").set_breakpoint(condition) end end) end, desc = "Conditional Breakpoint (S-F9)", } maps.n["di"] = { function() require("dap").step_into() end, desc = "Step Into (F11)" } maps.n["do"] = { function() require("dap").step_over() end, desc = "Step Over (F10)" } maps.n["dO"] = { function() require("dap").step_out() end, desc = "Step Out (S-F11)" } maps.n["dq"] = { function() require("dap").close() end, desc = "Close Session" } maps.n["dQ"] = { function() require("dap").terminate() end, desc = "Terminate Session (S-F5)" } maps.n["dp"] = { function() require("dap").pause() end, desc = "Pause (F6)" } maps.n["dr"] = { function() require("dap").restart_frame() end, desc = "Restart (C-F5)" } maps.n["dR"] = { function() require("dap").repl.toggle() end, desc = "Toggle REPL" } maps.n["ds"] = { function() require("dap").run_to_cursor() end, desc = "Run To Cursor" } if not opts.signs then opts.signs = {} end opts.signs.DapBreakpoint = { text = get_icon "DapBreakpoint", texthl = "DiagnosticInfo" } opts.signs.DapBreakpointCondition = { text = get_icon "DapBreakpointCondition", texthl = "DiagnosticInfo" } opts.signs.DapBreakpointRejected = { text = get_icon "DapBreakpointRejected", texthl = "DiagnosticError" } opts.signs.DapLogPoint = { text = get_icon "DapLogPoint", texthl = "DiagnosticInfo" } opts.signs.DapStopped = { text = get_icon "DapStopped", texthl = "DiagnosticWarn" } end, }, }, dependencies = { { "jay-babu/mason-nvim-dap.nvim", dependencies = { "nvim-dap", "williamboman/mason.nvim" }, cmd = { "DapInstall", "DapUninstall" }, opts_extend = { "ensure_installed" }, opts = { ensure_installed = {}, handlers = {} }, config = function(...) require "astronvim.plugins.configs.mason-nvim-dap"(...) end, }, { "rcarriga/nvim-dap-ui", lazy = true, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["d"] = vim.tbl_get(opts, "_map_sections", "d") maps.v["d"] = vim.tbl_get(opts, "_map_sections", "d") maps.n["dE"] = { function() vim.ui.input({ prompt = "Expression: " }, function(expr) if expr then require("dapui").eval(expr, { enter = true }) end end) end, desc = "Evaluate Input", } maps.n["du"] = { function() require("dapui").toggle() end, desc = "Toggle Debugger UI" } maps.n["dh"] = { function() require("dap.ui.widgets").hover() end, desc = "Debugger Hover" } maps.v["dE"] = { function() require("dapui").eval() end, desc = "Evaluate Input" } end, }, }, dependencies = { { "nvim-neotest/nvim-nio", lazy = true } }, opts = { floating = { border = "rounded" } }, config = function(...) require "astronvim.plugins.configs.nvim-dap-ui"(...) end, }, { "rcarriga/cmp-dap", lazy = true, config = function(...) require "astronvim.plugins.configs.cmp-dap"(...) end, specs = { { "Saghen/blink.cmp", optional = true, specs = { "Saghen/blink.compat", lazy = true, opts = {} }, opts = { sources = { providers = { dap = { name = "dap", module = "blink.compat.source", score_offset = 100, }, }, }, }, }, }, }, }, config = function(...) require "astronvim.plugins.configs.nvim-dap"(...) end, } ================================================ FILE: lua/astronvim/plugins/gitsigns.lua ================================================ return { "lewis6991/gitsigns.nvim", enabled = vim.fn.executable "git" == 1, event = "User AstroGitFile", opts = function(_, opts) local astrocore, get_icon = require "astrocore", require("astroui").get_icon return astrocore.extend_tbl(opts, { signs = { add = { text = get_icon "GitSign" }, change = { text = get_icon "GitSign" }, delete = { text = get_icon "GitSign" }, topdelete = { text = get_icon "GitSign" }, changedelete = { text = get_icon "GitSign" }, untracked = { text = get_icon "GitSign" }, }, signs_staged = { add = { text = get_icon "GitSign" }, change = { text = get_icon "GitSign" }, delete = { text = get_icon "GitSign" }, topdelete = { text = get_icon "GitSign" }, changedelete = { text = get_icon "GitSign" }, untracked = { text = get_icon "GitSign" }, }, on_attach = function(bufnr) local prefix, maps = "g", astrocore.empty_map_table() for _, mode in ipairs { "n", "v" } do maps[mode][prefix] = { desc = get_icon("Git", 1, true) .. "Git" } end maps.n[prefix .. "l"] = { function() require("gitsigns").blame_line() end, desc = "View Git blame" } maps.n[prefix .. "L"] = { function() require("gitsigns").blame_line { full = true } end, desc = "View full Git blame" } maps.n[prefix .. "p"] = { function() require("gitsigns").preview_hunk_inline() end, desc = "Preview Git hunk" } maps.n[prefix .. "r"] = { function() require("gitsigns").reset_hunk() end, desc = "Reset Git hunk" } maps.v[prefix .. "r"] = { function() require("gitsigns").reset_hunk { vim.fn.line ".", vim.fn.line "v" } end, desc = "Reset Git hunk", } maps.n[prefix .. "R"] = { function() require("gitsigns").reset_buffer() end, desc = "Reset Git buffer" } maps.n[prefix .. "s"] = { function() require("gitsigns").stage_hunk() end, desc = "Stage/Unstage Git hunk" } maps.v[prefix .. "s"] = { function() require("gitsigns").stage_hunk { vim.fn.line ".", vim.fn.line "v" } end, desc = "Stage Git hunk", } maps.n[prefix .. "S"] = { function() require("gitsigns").stage_buffer() end, desc = "Stage Git buffer" } maps.n[prefix .. "d"] = { function() require("gitsigns").diffthis() end, desc = "View Git diff" } maps.n["[G"] = { function() require("gitsigns").nav_hunk "first" end, desc = "First Git hunk" } maps.n["]G"] = { function() require("gitsigns").nav_hunk "last" end, desc = "Last Git hunk" } maps.n["]g"] = { function() require("gitsigns").nav_hunk "next" end, desc = "Next Git hunk" } maps.n["[g"] = { function() require("gitsigns").nav_hunk "prev" end, desc = "Previous Git hunk" } for _, mode in ipairs { "o", "x" } do maps[mode]["ig"] = { ":Gitsigns select_hunk", desc = "inside Git hunk" } end astrocore.set_mappings(maps, { buffer = bufnr }) end, worktrees = astrocore.config.git_worktrees, }) end, } ================================================ FILE: lua/astronvim/plugins/guess-indent.lua ================================================ return { "NMAC427/guess-indent.nvim", cmd = "GuessIndent", specs = { { "AstroNvim/astrocore", opts = { autocmds = { GuessIndent = { { event = "BufReadPost", desc = "Guess indentation when loading a file", callback = function(args) require("guess-indent").set_from_buffer(args.buf, true, true) end, }, { event = "BufNewFile", desc = "Guess indentation when saving a new file", callback = function(args) vim.api.nvim_create_autocmd("BufWritePost", { buffer = args.buf, once = true, callback = function(wargs) require("guess-indent").set_from_buffer(wargs.buf, true, true) end, }) end, }, }, }, }, }, }, opts = { auto_cmd = false }, } ================================================ FILE: lua/astronvim/plugins/heirline.lua ================================================ return { "rebelot/heirline.nvim", event = "BufEnter", specs = { { "AstroNvim/astrocore", ---@param opts AstroCoreOpts opts = function(_, opts) local maps = opts.mappings maps.n["bb"] = { function() require("astroui.status.heirline").buffer_picker(function(bufnr) vim.api.nvim_win_set_buf(0, bufnr) end) end, desc = "Select buffer from tabline", } maps.n["bd"] = { function() require("astroui.status.heirline").buffer_picker( function(bufnr) require("astrocore.buffer").close(bufnr) end ) end, desc = "Close buffer from tabline", } maps.n["b\\"] = { function() require("astroui.status.heirline").buffer_picker(function(bufnr) vim.cmd.split() vim.api.nvim_win_set_buf(0, bufnr) end) end, desc = "Horizontal split buffer from tabline", } maps.n["b|"] = { function() require("astroui.status.heirline").buffer_picker(function(bufnr) vim.cmd.vsplit() vim.api.nvim_win_set_buf(0, bufnr) end) end, desc = "Vertical split buffer from tabline", } opts.autocmds.heirline_colors = { { event = "User", pattern = "AstroColorScheme", desc = "Refresh heirline colors", callback = function() if package.loaded["heirline"] then require("astroui.status.heirline").refresh_colors() end end, }, } end, }, }, opts = function(_, opts) local status = require "astroui.status" local ui_config = require("astroui").config local cached_func = function(func, ...) local cached local args = { ... } return function(self) if cached == nil then cached = func(unpack(args)) end if type(cached) == "function" then return cached(self) end return cached end end return require("astrocore").extend_tbl(opts, { opts = { colors = require("astroui").config.status.setup_colors(), disable_winbar_cb = function(args) local enabled = vim.tbl_get(ui_config, "status", "winbar", "enabled") if enabled and status.condition.buffer_matches(enabled, args.buf) then return false end local disabled = vim.tbl_get(ui_config, "status", "winbar", "disabled") return not require("astrocore.buffer").is_valid(args.buf) or (disabled and status.condition.buffer_matches(disabled, args.buf)) end, }, statusline = { -- statusline hl = { fg = "fg", bg = "bg" }, status.component.mode(), status.component.git_branch(), status.component.file_info(), status.component.git_diff(), status.component.diagnostics(), status.component.fill(), status.component.cmd_info(), status.component.fill(), status.component.lsp(), status.component.virtual_env(), status.component.treesitter(), status.component.nav(), status.component.mode { surround = { separator = "right" } }, }, winbar = { -- winbar init = function(self) self.bufnr = vim.api.nvim_get_current_buf() end, fallthrough = false, { condition = function() return not status.condition.is_active() end, status.component.separated_path(), status.component.file_info { file_icon = { hl = cached_func(status.hl.file_icon, "winbar"), padding = { left = 0 } }, filename = {}, filetype = false, file_read_only = false, hl = cached_func(status.hl.get_attributes, "winbarnc", true), surround = false, update = { "BufEnter", "BufFilePost" }, }, }, status.component.breadcrumbs { hl = cached_func(status.hl.get_attributes, "winbar", true) }, }, tabline = { -- bufferline { -- automatic sidebar padding condition = function(self) self.winid = vim.api.nvim_tabpage_list_wins(0)[1] self.winwidth = vim.api.nvim_win_get_width(self.winid) return self.winwidth ~= vim.o.columns -- only apply to sidebars and not require("astrocore.buffer").is_valid(vim.api.nvim_win_get_buf(self.winid)) -- if buffer is not in tabline end, provider = function(self) return (" "):rep(self.winwidth + 1) end, hl = { bg = "tabline_bg" }, }, status.heirline.make_buflist(status.component.tabline_file_info()), -- component for each buffer tab status.component.fill { hl = { bg = "tabline_bg" } }, -- fill the rest of the tabline with background color { -- tab list condition = function() return #vim.api.nvim_list_tabpages() >= 2 end, -- only show tabs if there are more than one status.heirline.make_tablist { -- component for each tab provider = status.provider.tabnr(), hl = function(self) return status.hl.get_attributes(status.heirline.tab_type(self, "tab"), true) end, }, { -- close button for current tab provider = status.provider.close_button { kind = "TabClose", padding = { left = 1, right = 1 } }, hl = cached_func(status.hl.get_attributes, "tab_close", true), on_click = { callback = function() require("astrocore.buffer").close_tab() end, name = "heirline_tabline_close_tab_callback", }, }, }, }, statuscolumn = { init = function(self) self.bufnr = vim.api.nvim_get_current_buf() end, status.component.foldcolumn(), status.component.numbercolumn(), status.component.signcolumn(), }, }) end, } ================================================ FILE: lua/astronvim/plugins/highlight-colors.lua ================================================ return { "brenoprata10/nvim-highlight-colors", event = { "User AstroFile", "InsertEnter" }, cmd = "HighlightColors", specs = { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["uz"] = { function() vim.cmd.HighlightColors "Toggle" end, desc = "Toggle color highlight" } end, }, opts = { enable_named_colors = false, virtual_symbol = "󱓻", exclude_buffer = function(bufnr) local buf_utils = require "astrocore.buffer" return buf_utils.is_large(bufnr) or not buf_utils.is_valid(bufnr) end, }, } ================================================ FILE: lua/astronvim/plugins/lazydev.lua ================================================ return { "folke/lazydev.nvim", ft = "lua", cmd = "LazyDev", opts_extend = { "library" }, opts = { library = { { path = "${3rd}/luv/library", words = { "vim%.uv" } }, { path = "lazy.nvim", words = { "Lazy" } }, { path = "astrocore", words = { "AstroCore" } }, { path = "astrolsp", words = { "AstroLSP" } }, { path = "astroui", words = { "AstroUI" } }, { path = "astrotheme", words = { "AstroTheme" } }, }, }, specs = { { "Saghen/blink.cmp", optional = true, opts = { sources = { default = { "lazydev" }, providers = { lazydev = { name = "LazyDev", module = "lazydev.integrations.blink", score_offset = 100 }, }, }, }, }, }, } ================================================ FILE: lua/astronvim/plugins/lspconfig.lua ================================================ return { "neovim/nvim-lspconfig", specs = { { "AstroNvim/astrolsp", opts = function(_, opts) local maps = opts.mappings maps.n["li"] = { "LspInfo", desc = "LSP information", cond = function() return vim.fn.exists ":LspInfo" > 0 end } end, }, }, dependencies = { { "folke/neoconf.nvim", lazy = true, opts = {} }, { "williamboman/mason-lspconfig.nvim", version = "^1", -- make sure to always set version to v1 even on development dependencies = { "williamboman/mason.nvim" }, cmd = { "LspInstall", "LspUninstall" }, opts_extend = { "ensure_installed" }, opts = { ensure_installed = {}, handlers = { function(server) require("astrolsp").lsp_setup(server) end }, }, config = function(...) require "astronvim.plugins.configs.mason-lspconfig"(...) end, }, }, cmd = function(_, cmds) -- HACK: lazy load lspconfig on `:Neoconf` if neoconf is available if require("lazy.core.config").spec.plugins["neoconf.nvim"] then table.insert(cmds, "Neoconf") end vim.list_extend(cmds, { "LspInfo", "LspLog", "LspStart" }) -- add normal `nvim-lspconfig` commands end, event = "User AstroFile", config = function(...) require "astronvim.plugins.configs.lspconfig"(...) end, } ================================================ FILE: lua/astronvim/plugins/luasnip.lua ================================================ return { "L3MON4D3/LuaSnip", lazy = true, build = vim.fn.has "win32" == 0 and "echo 'NOTE: jsregexp is optional, so not a big deal if it fails to build\n'; make install_jsregexp" or nil, dependencies = { { "rafamadriz/friendly-snippets", lazy = true } }, opts = { history = true, delete_check_events = "TextChanged", region_check_events = "CursorMoved", }, specs = { { "Saghen/blink.cmp", optional = true, opts = { snippets = { preset = "luasnip" } } }, }, config = function(...) require "astronvim.plugins.configs.luasnip"(...) end, } ================================================ FILE: lua/astronvim/plugins/mason-tool-installer.lua ================================================ return { "WhoIsSethDaniel/mason-tool-installer.nvim", cmd = { "MasonToolsInstall", "MasonToolsInstallSync", "MasonToolsUpdate", "MasonToolsUpdateSync", "MasonToolsClean", }, dependencies = { "williamboman/mason.nvim", { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["pM"] = { "MasonToolsUpdate", desc = "Mason Update" } end, }, }, init = function(plugin) require("astrocore").on_load("mason.nvim", plugin.name) end, opts_extend = { "ensure_installed" }, opts = { ensure_installed = {}, integrations = { ["mason-lspconfig"] = false, ["mason-null-ls"] = false, ["mason-nvim-dap"] = false }, }, config = function(...) require "astronvim.plugins.configs.mason-tool-installer"(...) end, } ================================================ FILE: lua/astronvim/plugins/mason.lua ================================================ return { "williamboman/mason.nvim", cmd = { "Mason", "MasonInstall", "MasonUninstall", "MasonUninstallAll", "MasonLog", }, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["pm"] = { function() require("mason.ui").open() end, desc = "Mason Installer" } end, }, }, opts_extend = { "registries" }, opts = function(_, opts) if not opts.registries then opts.registries = {} end table.insert(opts.registries, "github:mason-org/mason-registry") if not opts.ui then opts.ui = {} end opts.ui.icons = vim.g.icons_enabled == false and { package_installed = "O", package_uninstalled = "X", package_pending = "0", } or { package_installed = "✓", package_uninstalled = "✗", package_pending = "⟳", } end, build = ":MasonUpdate", } ================================================ FILE: lua/astronvim/plugins/mini-icons.lua ================================================ return { "echasnovski/mini.icons", lazy = true, init = function() package.preload["nvim-web-devicons"] = function() require("mini.icons").mock_nvim_web_devicons() return package.loaded["nvim-web-devicons"] end end, opts = function(_, opts) if vim.g.icons_enabled == false then opts.style = "ascii" end end, specs = { { "nvim-neo-tree/neo-tree.nvim", optional = true, opts = { default_component_configs = { icon = { provider = function(icon, node) local text, hl local mini_icons = require "mini.icons" if node.type == "file" then text, hl = mini_icons.get("file", node.name) elseif node.type == "directory" then text, hl = mini_icons.get("directory", node.name) if node:is_expanded() then text = nil end end if text then icon.text = text end if hl then icon.highlight = hl end end, }, kind_icon = { provider = function(icon, node) icon.text, icon.highlight = require("mini.icons").get("lsp", node.extra.kind.name) end, }, }, }, }, }, } ================================================ FILE: lua/astronvim/plugins/neo-tree.lua ================================================ return { "nvim-neo-tree/neo-tree.nvim", specs = { { "nvim-lua/plenary.nvim", lazy = true }, { "MunifTanjim/nui.nvim", lazy = true }, { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["e"] = { "Neotree toggle", desc = "Toggle Explorer" } maps.n["o"] = { function() if vim.bo.filetype == "neo-tree" then vim.cmd.wincmd "p" else vim.cmd.Neotree "focus" end end, desc = "Toggle Explorer Focus", } opts.autocmds.neotree_start = { { event = "BufEnter", desc = "Open Neo-Tree on startup with directory", callback = function(args) if package.loaded["neo-tree"] then return true else local stats = vim.uv.fs_stat(vim.api.nvim_buf_get_name(args.buf)) if stats and stats.type == "directory" then require("lazy").load { plugins = { "neo-tree.nvim" } } pcall(vim.api.nvim_exec_autocmds, "BufEnter", { group = "NeoTree_NetrwDeferred", buffer = args.buf }) return true end end end, }, } opts.autocmds.neotree_refresh = { { event = "TermClose", pattern = "*lazygit*", desc = "Refresh Neo-Tree sources when closing lazygit", callback = function() local manager_avail, manager = pcall(require, "neo-tree.sources.manager") if manager_avail then for _, source in ipairs { "filesystem", "git_status", "document_symbols" } do local module = "neo-tree.sources." .. source if package.loaded[module] then manager.refresh(require(module).name) end end end end, }, } end, }, }, cmd = "Neotree", opts_extend = { "sources", "event_handlers" }, opts = function(_, opts) local astro, get_icon = require "astrocore", require("astroui").get_icon local git_available = vim.fn.executable "git" == 1 local sources = { { source = "filesystem", display_name = get_icon("FolderClosed", 1, true) .. "File" }, { source = "buffers", display_name = get_icon("DefaultFile", 1, true) .. "Bufs" }, { source = "diagnostics", display_name = get_icon("Diagnostic", 1, true) .. "Diagnostic" }, } if git_available then table.insert(sources, 3, { source = "git_status", display_name = get_icon("Git", 1, true) .. "Git" }) end opts = astro.extend_tbl(opts, { enable_git_status = git_available, auto_clean_after_session_restore = true, close_if_last_window = true, sources = { "filesystem", "buffers", git_available and "git_status" or nil }, source_selector = { winbar = true, content_layout = "center", sources = sources, }, default_component_configs = { indent = { padding = 0, expander_collapsed = get_icon "FoldClosed", expander_expanded = get_icon "FoldOpened", }, icon = { folder_closed = get_icon "FolderClosed", folder_open = get_icon "FolderOpen", folder_empty = get_icon "FolderEmpty", folder_empty_open = get_icon "FolderEmpty", default = get_icon "DefaultFile", }, modified = { symbol = get_icon "FileModified" }, git_status = { symbols = { added = get_icon "GitAdd", deleted = get_icon "GitDelete", modified = get_icon "GitChange", renamed = get_icon "GitRenamed", untracked = get_icon "GitUntracked", ignored = get_icon "GitIgnored", unstaged = get_icon "GitUnstaged", staged = get_icon "GitStaged", conflict = get_icon "GitConflict", }, }, }, commands = { system_open = function(state) vim.ui.open(state.tree:get_node():get_id()) end, parent_or_close = function(state) local node = state.tree:get_node() if node:has_children() and node:is_expanded() then state.commands.toggle_node(state) else require("neo-tree.ui.renderer").focus_node(state, node:get_parent_id()) end end, child_or_open = function(state) local node = state.tree:get_node() if node:has_children() then if not node:is_expanded() then -- if unexpanded, expand state.commands.toggle_node(state) else -- if expanded and has children, seleect the next child if node.type == "file" then state.commands.open(state) else require("neo-tree.ui.renderer").focus_node(state, node:get_child_ids()[1]) end end else -- if has no children state.commands.open(state) end end, copy_selector = function(state) local node = state.tree:get_node() local filepath = node:get_id() local filename = node.name local modify = vim.fn.fnamemodify local vals = { ["BASENAME"] = modify(filename, ":r"), ["EXTENSION"] = modify(filename, ":e"), ["FILENAME"] = filename, ["PATH (CWD)"] = modify(filepath, ":."), ["PATH (HOME)"] = modify(filepath, ":~"), ["PATH"] = filepath, ["URI"] = vim.uri_from_fname(filepath), } local options = vim.tbl_filter(function(val) return vals[val] ~= "" end, vim.tbl_keys(vals)) if vim.tbl_isempty(options) then astro.notify("No values to copy", vim.log.levels.WARN) return end table.sort(options) vim.ui.select(options, { prompt = "Choose to copy to clipboard:", format_item = function(item) return ("%s: %s"):format(item, vals[item]) end, }, function(choice) local result = vals[choice] if result then astro.notify(("Copied: `%s`"):format(result)) vim.fn.setreg("+", result) end end) end, }, window = { width = 30, mappings = { [""] = "system_open", [""] = false, ["[b"] = "prev_source", ["]b"] = "next_source", O = "system_open", Y = "copy_selector", h = "parent_or_close", l = "child_or_open", }, fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode [""] = "move_cursor_down", [""] = "move_cursor_up", }, }, filesystem = { follow_current_file = { enabled = true }, filtered_items = { hide_gitignored = git_available }, hijack_netrw_behavior = "open_current", use_libuv_file_watcher = vim.fn.has "win32" ~= 1, }, }) if not opts.event_handlers then opts.event_handlers = {} end table.insert(opts.event_handlers, { event = "neo_tree_buffer_enter", handler = function(_) vim.opt_local.signcolumn = "auto" vim.opt_local.foldcolumn = "0" end, }) return opts end, } ================================================ FILE: lua/astronvim/plugins/none-ls.lua ================================================ return { "nvimtools/none-ls.nvim", main = "null-ls", specs = { { "nvim-lua/plenary.nvim", lazy = true }, { "AstroNvim/astrolsp", opts = function(_, opts) local maps = opts.mappings maps.n["lI"] = { "NullLsInfo", desc = "Null-ls information", cond = function() return vim.fn.exists ":NullLsInfo" > 0 end, } end, }, }, dependencies = { { "jay-babu/mason-null-ls.nvim", dependencies = { "williamboman/mason.nvim" }, cmd = { "NullLsInstall", "NullLsUninstall" }, opts_extend = { "ensure_installed" }, opts = { ensure_installed = {}, handlers = {} }, config = function(...) require "astronvim.plugins.configs.mason-null-ls"(...) end, }, }, event = "User AstroFile", opts = function(_, opts) opts.on_attach = require("astrolsp").on_attach end, } ================================================ FILE: lua/astronvim/plugins/nvim-ufo.lua ================================================ -- TODO: Remove when dropping support for Neovim v0.10 return { "kevinhwang91/nvim-ufo", event = { "User AstroFile", "InsertEnter" }, enabled = vim.fn.has "nvim-0.11" ~= 1, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["zR"] = { function() require("ufo").openAllFolds() end, desc = "Open all folds" } maps.n["zM"] = { function() require("ufo").closeAllFolds() end, desc = "Close all folds" } maps.n["zr"] = { function() require("ufo").openFoldsExceptKinds() end, desc = "Fold less" } maps.n["zm"] = { function() require("ufo").closeFoldsWith() end, desc = "Fold more" } maps.n["zp"] = { function() require("ufo").peekFoldedLinesUnderCursor() end, desc = "Peek fold" } local opt = opts.options.opt opt.foldcolumn = "1" opt.foldexpr = "0" opt.foldenable = true opt.foldlevel = 99 opt.foldlevelstart = 99 opts.autocmds.persistent_astroui_foldexpr = nil end, }, { "AstroNvim/astrolsp", optional = true, opts = function(_, opts) local astrocore = require "astrocore" if astrocore.is_available "nvim-ufo" then opts.capabilities = astrocore.extend_tbl(opts.capabilities, { textDocument = { foldingRange = { dynamicRegistration = false, lineFoldingOnly = true } }, }) end end, }, }, dependencies = { { "kevinhwang91/promise-async", lazy = true } }, opts = { preview = { mappings = { scrollB = "", scrollF = "", scrollU = "", scrollD = "", }, }, provider_selector = function(_, filetype, buftype) local function handleFallbackException(bufnr, err, providerName) if type(err) == "string" and err:match "UfoFallbackException" then return require("ufo").getFolds(bufnr, providerName) else return require("promise").reject(err) end end return (filetype == "" or buftype == "nofile") and "indent" -- only use indent until a file is opened or function(bufnr) return require("ufo") .getFolds(bufnr, "lsp") :catch(function(err) return handleFallbackException(bufnr, err, "treesitter") end) :catch(function(err) return handleFallbackException(bufnr, err, "indent") end) end end, }, } ================================================ FILE: lua/astronvim/plugins/resession.lua ================================================ return { "stevearc/resession.nvim", lazy = true, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n["S"] = vim.tbl_get(opts, "_map_sections", "S") maps.n["Sl"] = { function() require("resession").load "Last Session" end, desc = "Load last session" } maps.n["Ss"] = { function() require("resession").save() end, desc = "Save this session" } maps.n["SS"] = { function() require("resession").save(vim.fn.getcwd(), { dir = "dirsession" }) end, desc = "Save this dirsession", } maps.n["St"] = { function() require("resession").save_tab() end, desc = "Save this tab's session" } maps.n["Sd"] = { function() require("resession").delete() end, desc = "Delete a session" } maps.n["SD"] = { function() require("resession").delete(nil, { dir = "dirsession" }) end, desc = "Delete a dirsession" } maps.n["Sf"] = { function() require("resession").load() end, desc = "Load a session" } maps.n["SF"] = { function() require("resession").load(nil, { dir = "dirsession" }) end, desc = "Load a dirsession" } maps.n["S."] = { function() require("resession").load(vim.fn.getcwd(), { dir = "dirsession" }) end, desc = "Load current dirsession", } opts.autocmds.resession_auto_save = { { event = "VimLeavePre", desc = "Save session on close", callback = function() local buf_utils = require "astrocore.buffer" local autosave = require("astrocore").config.sessions.autosave if autosave and buf_utils.is_valid_session() then local save = require("resession").save if autosave.last then save("Last Session", { notify = false }) end if autosave.cwd then save(vim.fn.getcwd(), { dir = "dirsession", notify = false }) end end end, }, } end, }, }, opts = { buf_filter = function(bufnr) return require("astrocore.buffer").is_restorable(bufnr) end, tab_buf_filter = function(tabpage, bufnr) return vim.tbl_contains(vim.t[tabpage].bufs, bufnr) end, extensions = { astrocore = { enable_in_tab = true } }, }, } ================================================ FILE: lua/astronvim/plugins/smart-splits.lua ================================================ local term = vim.trim((vim.env.TERM_PROGRAM or ""):lower()) local mux = term == "tmux" or term == "wezterm" or vim.env.KITTY_LISTEN_ON return { "mrjones2014/smart-splits.nvim", lazy = true, event = mux and "VeryLazy" or nil, -- load early if mux detected specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n[""] = { function() require("smart-splits").move_cursor_left() end, desc = "Move to left split" } maps.n[""] = { function() require("smart-splits").move_cursor_down() end, desc = "Move to below split" } maps.n[""] = { function() require("smart-splits").move_cursor_up() end, desc = "Move to above split" } maps.n[""] = { function() require("smart-splits").move_cursor_right() end, desc = "Move to right split" } maps.n[""] = { function() require("smart-splits").resize_up() end, desc = "Resize split up" } maps.n[""] = { function() require("smart-splits").resize_down() end, desc = "Resize split down" } maps.n[""] = { function() require("smart-splits").resize_left() end, desc = "Resize split left" } maps.n[""] = { function() require("smart-splits").resize_right() end, desc = "Resize split right" } end, }, }, opts = { ignored_filetypes = { "nofile", "quickfix", "qf", "prompt" }, ignored_buftypes = { "nofile" } }, } ================================================ FILE: lua/astronvim/plugins/snacks.lua ================================================ return { "folke/snacks.nvim", lazy = false, priority = 1000, opts = function(_, opts) local get_icon = require("astroui").get_icon local buf_utils = require "astrocore.buffer" opts.dashboard = { preset = { keys = { { key = "n", action = "n", icon = get_icon("FileNew", 0, true), desc = "New File " }, { key = "f", action = "ff", icon = get_icon("Search", 0, true), desc = "Find File " }, { key = "o", action = "fo", icon = get_icon("DefaultFile", 0, true), desc = "Recents " }, { key = "w", action = "fw", icon = get_icon("WordFile", 0, true), desc = "Find Word " }, { key = "'", action = "f'", icon = get_icon("Bookmarks", 0, true), desc = "Bookmarks " }, { key = "s", action = "Sl", icon = get_icon("Refresh", 0, true), desc = "Last Session " }, }, header = table.concat({ " █████ ███████ ████████ ██████ ██████ ", "██ ██ ██ ██ ██ ██ ██ ██", "███████ ███████ ██ ██████ ██ ██", "██ ██ ██ ██ ██ ██ ██ ██", "██ ██ ███████ ██ ██ ██ ██████ ", "", "███ ██ ██ ██ ██ ███ ███", "████ ██ ██ ██ ██ ████ ████", "██ ██ ██ ██ ██ ██ ██ ████ ██", "██ ██ ██ ██ ██ ██ ██ ██ ██", "██ ████ ████ ██ ██ ██", }, "\n"), }, sections = { { section = "header", padding = 5 }, { section = "keys", gap = 1, padding = 3 }, { section = "startup" }, }, } -- configure image support opts.image = { doc = { enabled = false } } -- configure `vim.ui.input` opts.input = {} -- configure notifier opts.notifier = {} opts.notifier.icons = { debug = get_icon "Debugger", error = get_icon "DiagnosticError", info = get_icon "DiagnosticInfo", trace = get_icon "DiagnosticHint", warn = get_icon "DiagnosticWarn", } -- configure picker and `vim.ui.select` opts.picker = { ui_select = true } opts.indent = { indent = { char = "▏" }, scope = { char = "▏" }, filter = function(bufnr) return buf_utils.is_valid(bufnr) and not buf_utils.is_large(bufnr) and vim.g.snacks_indent ~= false and vim.b[bufnr].snacks_indent ~= false end, animate = { enabled = false }, } opts.scope = { filter = function(bufnr) return buf_utils.is_valid(bufnr) and not buf_utils.is_large(bufnr) end, } opts.zen = { toggles = { dim = false, diagnostics = false, inlay_hints = false }, on_open = function(win) -- disable snacks indent vim.b[win.buf].snacks_indent_old = vim.b[win.buf].snacks_indent vim.b[win.buf].snacks_indent = false end, on_close = function(win) -- restore snacks indent setting vim.b[win.buf].snacks_indent = vim.b[win.buf].snacks_indent_old end, win = { width = function() return math.min(120, math.floor(vim.o.columns * 0.75)) end, height = 0.9, backdrop = { transparent = false, win = { wo = { winhighlight = "Normal:Normal" } }, }, wo = { number = false, relativenumber = false, signcolumn = "no", foldcolumn = "0", winbar = "", list = false, showbreak = "NONE", }, }, } end, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings local snack_opts = require("astrocore").plugin_opts "snacks.nvim" -- Snacks.dashboard mappins maps.n["h"] = { function() if vim.bo.filetype == "snacks_dashboard" then require("astrocore.buffer").close() else require("snacks").dashboard() end end, desc = "Home Screen", } -- Snacks.indent mappings maps.n["u|"] = { function() require("snacks").toggle.indent():toggle() end, desc = "Toggle indent guides" } -- Snacks.notifier mappings if vim.tbl_get(snack_opts, "notifier", "enabled") ~= false then maps.n["uD"] = { function() require("snacks.notifier").hide() end, desc = "Dismiss notifications" } end -- Snacks.gitbrowse mappings if vim.tbl_get(snack_opts, "gitbrowse", "enabled") ~= false then if vim.fn.executable "git" == 1 then maps.n["g"] = vim.tbl_get(opts, "_map_sections", "g") maps.n["go"] = { function() require("snacks").gitbrowse() end, desc = "Git browse (open)" } maps.x["go"] = { function() require("snacks").gitbrowse() end, desc = "Git browse (open)" } end end -- Snacks.picker if vim.tbl_get(snack_opts, "picker", "enabled") ~= false then maps.n["f"] = vim.tbl_get(opts, "_map_sections", "f") if vim.fn.executable "git" == 1 then maps.n["g"] = vim.tbl_get(opts, "_map_sections", "g") maps.n["gb"] = { function() require("snacks").picker.git_branches() end, desc = "Git branches" } maps.n["gc"] = { function() require("snacks").picker.git_log() end, desc = "Git commits (repository)", } maps.n["gC"] = { function() require("snacks").picker.git_log { current_file = true, follow = true } end, desc = "Git commits (current file)", } maps.n["gt"] = { function() require("snacks").picker.git_status() end, desc = "Git status" } maps.n["gT"] = { function() require("snacks").picker.git_stash() end, desc = "Git stash" } end maps.n["f"] = { function() require("snacks").picker.resume() end, desc = "Resume previous search" } maps.n["f'"] = { function() require("snacks").picker.marks() end, desc = "Find marks" } maps.n["fl"] = { function() require("snacks").picker.lines() end, desc = "Find lines", } maps.n["fa"] = { function() require("snacks").picker.files { dirs = { vim.fn.stdpath "config" }, desc = "Config Files" } end, desc = "Find AstroNvim config files", } maps.n["fb"] = { function() require("snacks").picker.buffers() end, desc = "Find buffers" } maps.n["fc"] = { function() require("snacks").picker.grep_word() end, desc = "Find word under cursor" } maps.n["fC"] = { function() require("snacks").picker.commands() end, desc = "Find commands" } maps.n["ff"] = { function() require("snacks").picker.files { hidden = vim.tbl_get((vim.uv or vim.loop).fs_stat ".git" or {}, "type") == "directory", } end, desc = "Find files", } maps.n["fF"] = { function() require("snacks").picker.files { hidden = true, ignored = true } end, desc = "Find all files", } maps.n["fg"] = { function() require("snacks").picker.git_files() end, desc = "Find git files" } maps.n["fh"] = { function() require("snacks").picker.help() end, desc = "Find help" } maps.n["fk"] = { function() require("snacks").picker.keymaps() end, desc = "Find keymaps" } maps.n["fm"] = { function() require("snacks").picker.man() end, desc = "Find man" } maps.n["fn"] = { function() require("snacks").picker.notifications() end, desc = "Find notifications" } maps.n["fo"] = { function() require("snacks").picker.recent() end, desc = "Find old files" } maps.n["fO"] = { function() require("snacks").picker.recent { filter = { cwd = true } } end, desc = "Find old files (cwd)", } maps.n["fp"] = { function() require("snacks").picker.projects() end, desc = "Find projects" } maps.n["fr"] = { function() require("snacks").picker.registers() end, desc = "Find registers" } maps.n["fs"] = { function() require("snacks").picker.smart() end, desc = "Find buffers/recent/files" } maps.n["ft"] = { function() require("snacks").picker.colorschemes() end, desc = "Find themes" } if vim.fn.executable "rg" == 1 then maps.n["fw"] = { function() require("snacks").picker.grep() end, desc = "Find words" } maps.n["fW"] = { function() require("snacks").picker.grep { hidden = true, ignored = true } end, desc = "Find words in all files", } end maps.n["fu"] = { function() require("snacks").picker.undo() end, desc = "Find undo history" } maps.n["lD"] = { function() require("snacks").picker.diagnostics() end, desc = "Search diagnostics" } maps.n["ls"] = { function() local aerial_avail, aerial = pcall(require, "aerial") if aerial_avail and aerial.snacks_picker then aerial.snacks_picker() else require("snacks").picker.lsp_symbols() end end, desc = "Search symbols", } end -- Snacks.zen mappings if vim.tbl_get(snack_opts, "zen", "enabled") ~= false then maps.n["uZ"] = { function() require("snacks").toggle.zen():toggle() end, desc = "Toggle zen mode" } end end, }, { "nvim-neo-tree/neo-tree.nvim", optional = true, opts = { commands = { find_files_in_dir = function(state) local node = state.tree:get_node() local path = node.type == "file" and node:get_parent_id() or node:get_id() require("snacks").picker.files { cwd = path } end, find_all_files_in_dir = function(state) local node = state.tree:get_node() local path = node.type == "file" and node:get_parent_id() or node:get_id() require("snacks").picker.files { cwd = path, hidden = true, ignored = true } end, find_words_in_dir = function(state) local node = state.tree:get_node() local path = node.type == "file" and node:get_parent_id() or node:get_id() require("snacks").picker.grep { cwd = path } end, find_all_words_in_dir = function(state) local node = state.tree:get_node() local path = node.type == "file" and node:get_parent_id() or node:get_id() require("snacks").picker.grep { cwd = path, hidden = true, ignored = true } end, }, filesystem = { window = { mappings = { f = { "show_help", nowait = false, config = { title = "Find Files", prefix_key = "f" } }, ["f/"] = "filter_on_submit", ff = "find_files_in_dir", fF = "find_all_files_in_dir", fw = vim.fn.executable "rg" == 1 and "find_words_in_dir" or nil, fW = vim.fn.executable "rg" == 1 and "find_all_words_in_dir" or nil, }, }, }, }, }, }, } ================================================ FILE: lua/astronvim/plugins/todo-comments.lua ================================================ return { "folke/todo-comments.nvim", dependencies = { { "folke/snacks.nvim", optional = true } }, cmd = { "TodoTrouble", "TodoLocList", "TodoQuickFix" }, event = "User AstroFile", specs = { { "nvim-lua/plenary.nvim", lazy = true }, { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings local astrocore = require "astrocore" if astrocore.is_available "snacks.nvim" and vim.tbl_get(astrocore.plugin_opts "snacks.nvim", "picker", "enabled") ~= false then maps.n["fT"] = { function() if not package.loaded["todo-comments"] then -- make sure to load todo-comments require("lazy").load { plugins = { "todo-comments.nvim" } } end require("snacks").picker.todo_comments() end, desc = "Find TODOs", } end maps.n["]T"] = { function() require("todo-comments").jump_next() end, desc = "Next TODO comment" } maps.n["[T"] = { function() require("todo-comments").jump_prev() end, desc = "Previous TODO comment" } end, }, { "nvim-telescope/telescope.nvim", optional = true, specs = { { "folke/todo-comments.nvim", cmd = { "TodoTelescope" } }, { "AstroNvim/astrocore", opts = { mappings = { n = { ["fT"] = { "TodoTelescope", desc = "Find TODOs" } } } }, }, }, }, { "ibhagwan/fzf-lua", optional = true, specs = { { "folke/todo-comments.nvim", cmd = { "TodoFzfLua" } }, { "AstroNvim/astrocore", opts = { mappings = { n = { ["fT"] = { "TodoFzfLua", desc = "Find TODOs" } } } }, }, }, }, }, opts = {}, } ================================================ FILE: lua/astronvim/plugins/toggleterm.lua ================================================ return { "akinsho/toggleterm.nvim", cmd = { "ToggleTerm", "TermExec" }, specs = { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings local astro = require "astrocore" maps.n["t"] = vim.tbl_get(opts, "_map_sections", "t") if vim.fn.executable "git" == 1 and vim.fn.executable "lazygit" == 1 then maps.n["g"] = vim.tbl_get(opts, "_map_sections", "g") local lazygit = { callback = function() local worktree = astro.file_worktree() local flags = worktree and (" --work-tree=%s --git-dir=%s"):format(worktree.toplevel, worktree.gitdir) or "" astro.toggle_term_cmd { cmd = "lazygit " .. flags, direction = "float" } end, desc = "ToggleTerm lazygit", } maps.n["gg"] = { lazygit.callback, desc = lazygit.desc } maps.n["tl"] = { lazygit.callback, desc = lazygit.desc } end if vim.fn.executable "node" == 1 then maps.n["tn"] = { function() astro.toggle_term_cmd "node" end, desc = "ToggleTerm node" } end local gdu = "gdu" if vim.fn.executable(gdu) ~= 1 then if vim.fn.has "win32" == 1 then gdu = "gdu_windows_amd64.exe" elseif vim.fn.has "mac" == 1 then gdu = "gdu-go" end end if vim.fn.executable(gdu) == 1 then maps.n["tu"] = { function() astro.toggle_term_cmd { cmd = gdu, direction = "float" } end, desc = "ToggleTerm gdu" } end if vim.fn.executable "btm" == 1 then maps.n["tt"] = { function() astro.toggle_term_cmd { cmd = "btm", direction = "float" } end, desc = "ToggleTerm btm" } end local python = vim.fn.executable "python" == 1 and "python" or vim.fn.executable "python3" == 1 and "python3" if python then maps.n["tp"] = { function() astro.toggle_term_cmd(python) end, desc = "ToggleTerm python" } end maps.n["tf"] = { "ToggleTerm direction=float", desc = "ToggleTerm float" } maps.n["th"] = { "ToggleTerm size=10 direction=horizontal", desc = "ToggleTerm horizontal split" } maps.n["tv"] = { "ToggleTerm size=80 direction=vertical", desc = "ToggleTerm vertical split" } maps.n[""] = { 'execute v:count . "ToggleTerm"', desc = "Toggle terminal" } maps.t[""] = { "ToggleTerm", desc = "Toggle terminal" } maps.i[""] = { "ToggleTerm", desc = "Toggle terminal" } maps.n[""] = { 'execute v:count . "ToggleTerm"', desc = "Toggle terminal" } -- requires terminal that supports binding maps.t[""] = { "ToggleTerm", desc = "Toggle terminal" } -- requires terminal that supports binding maps.i[""] = { "ToggleTerm", desc = "Toggle terminal" } -- requires terminal that supports binding end, }, { "nvim-neo-tree/neo-tree.nvim", optional = true, opts = function(_, opts) if not opts.commands then opts.commands = {} end if not opts.window then opts.window = {} end if not opts.window.mappings then opts.window.mappings = {} end local function toggleterm_in_direction(state, direction) local node = state.tree:get_node() local path = node.type == "file" and node:get_parent_id() or node:get_id() require("toggleterm.terminal").Terminal:new({ dir = path, direction = direction }):toggle() end local prefix = "T" ---@diagnostic disable-next-line: assign-type-mismatch opts.window.mappings[prefix] = { "show_help", nowait = false, config = { title = "New Terminal", prefix_key = prefix } } for suffix, direction in pairs { f = "float", h = "horizontal", v = "vertical" } do local command = "toggleterm_" .. direction opts.commands[command] = function(state) toggleterm_in_direction(state, direction) end opts.window.mappings[prefix .. suffix] = command end end, }, }, opts = { highlights = { Normal = { link = "Normal" }, NormalNC = { link = "NormalNC" }, NormalFloat = { link = "NormalFloat" }, FloatBorder = { link = "FloatBorder" }, StatusLine = { link = "StatusLine" }, StatusLineNC = { link = "StatusLineNC" }, WinBar = { link = "WinBar" }, WinBarNC = { link = "WinBarNC" }, }, size = 10, ---@param t Terminal on_create = function(t) vim.opt_local.foldcolumn = "0" vim.opt_local.signcolumn = "no" if t.hidden then local function toggle() t:toggle() end vim.keymap.set({ "n", "t", "i" }, "", toggle, { desc = "Toggle terminal", buffer = t.bufnr }) vim.keymap.set({ "n", "t", "i" }, "", toggle, { desc = "Toggle terminal", buffer = t.bufnr }) end end, shading_factor = 2, float_opts = { border = "rounded" }, }, } ================================================ FILE: lua/astronvim/plugins/treesitter.lua ================================================ return { "nvim-treesitter/nvim-treesitter", branch = "master", main = "nvim-treesitter.configs", dependencies = { { "nvim-treesitter/nvim-treesitter-textobjects", lazy = true } }, event = "VeryLazy", lazy = vim.fn.argc(-1) == 0, -- load treesitter immediately when opening a file from the cmdline cmd = { "TSBufDisable", "TSBufEnable", "TSBufToggle", "TSDisable", "TSEnable", "TSToggle", "TSInstall", "TSInstallInfo", "TSInstallSync", "TSModuleInfo", "TSUninstall", "TSUpdate", "TSUpdateSync", }, build = ":TSUpdate", init = function(plugin) -- PERF: add nvim-treesitter queries to the rtp and it's custom query predicates early -- This is needed because a bunch of plugins no longer `require("nvim-treesitter")`, which -- no longer trigger the **nvim-treeitter** module to be loaded in time. -- Luckily, the only thins that those plugins need are the custom queries, which we make available -- during startup. -- CODE FROM LazyVim (thanks folke!) https://github.com/LazyVim/LazyVim/commit/1e1b68d633d4bd4faa912ba5f49ab6b8601dc0c9 require("lazy.core.loader").add_to_rtp(plugin) pcall(require, "nvim-treesitter.query_predicates") end, opts_extend = { "ensure_installed" }, opts = function(_, opts) local astrocore = require "astrocore" if astrocore.is_available "mason.nvim" then require("lazy").load { plugins = { "mason.nvim" } } end opts = astrocore.extend_tbl(opts, { auto_install = vim.fn.executable "tree-sitter" == 1, -- only enable auto install if `tree-sitter` cli is installed highlight = { enable = true }, incremental_selection = { enable = true }, indent = { enable = true }, textobjects = { select = { enable = true, lookahead = true, keymaps = { ["ak"] = { query = "@block.outer", desc = "around block" }, ["ik"] = { query = "@block.inner", desc = "inside block" }, ["ac"] = { query = "@class.outer", desc = "around class" }, ["ic"] = { query = "@class.inner", desc = "inside class" }, ["a?"] = { query = "@conditional.outer", desc = "around conditional" }, ["i?"] = { query = "@conditional.inner", desc = "inside conditional" }, ["af"] = { query = "@function.outer", desc = "around function " }, ["if"] = { query = "@function.inner", desc = "inside function " }, ["ao"] = { query = "@loop.outer", desc = "around loop" }, ["io"] = { query = "@loop.inner", desc = "inside loop" }, ["aa"] = { query = "@parameter.outer", desc = "around argument" }, ["ia"] = { query = "@parameter.inner", desc = "inside argument" }, }, }, move = { enable = true, set_jumps = true, goto_next_start = { ["]k"] = { query = "@block.outer", desc = "Next block start" }, ["]f"] = { query = "@function.outer", desc = "Next function start" }, ["]a"] = { query = "@parameter.inner", desc = "Next argument start" }, }, goto_next_end = { ["]K"] = { query = "@block.outer", desc = "Next block end" }, ["]F"] = { query = "@function.outer", desc = "Next function end" }, ["]A"] = { query = "@parameter.inner", desc = "Next argument end" }, }, goto_previous_start = { ["[k"] = { query = "@block.outer", desc = "Previous block start" }, ["[f"] = { query = "@function.outer", desc = "Previous function start" }, ["[a"] = { query = "@parameter.inner", desc = "Previous argument start" }, }, goto_previous_end = { ["[K"] = { query = "@block.outer", desc = "Previous block end" }, ["[F"] = { query = "@function.outer", desc = "Previous function end" }, ["[A"] = { query = "@parameter.inner", desc = "Previous argument end" }, }, }, swap = { enable = true, swap_next = { [">K"] = { query = "@block.outer", desc = "Swap next block" }, [">F"] = { query = "@function.outer", desc = "Swap next function" }, [">A"] = { query = "@parameter.inner", desc = "Swap next argument" }, }, swap_previous = { ["ur"] = { function() require("illuminate").toggle_buf() end, desc = "Toggle reference highlighting (buffer)" } maps.n["uR"] = { function() require("illuminate").toggle() end, desc = "Toggle reference highlighting (global)" } end, }, }, opts = { delay = 200, min_count_to_highlight = 2, should_enable = function(bufnr) local buf_utils = require "astrocore.buffer" return buf_utils.is_valid(bufnr) and not buf_utils.is_large(bufnr) end, }, config = function(...) require "astronvim.plugins.configs.vim-illuminate"(...) end, } ================================================ FILE: lua/astronvim/plugins/which-key.lua ================================================ return { "folke/which-key.nvim", event = "VeryLazy", opts_extend = { "spec", "disable.ft", "disable.bt" }, opts = function(_, opts) if not opts.icons then opts.icons = {} end opts.icons.group = "" opts.icons.rules = false opts.icons.separator = "-" if vim.g.icons_enabled == false then opts.icons.breadcrumb = ">" opts.icons.group = "+" opts.icons.keys = { Up = "Up", Down = "Down", Left = "Left", Right = "Right", C = "Ctrl+", M = "Alt+", D = "Cmd+", S = "Shift+", CR = "Enter", Esc = "Esc", ScrollWheelDown = "ScrollDown", ScrollWheelUp = "ScrollUp", NL = "Enter", BS = "Backspace", Space = "Space", Tab = "Tab", F1 = "F1", F2 = "F2", F3 = "F3", F4 = "F4", F5 = "F5", F6 = "F6", F7 = "F7", F8 = "F8", F9 = "F9", F10 = "F10", F11 = "F11", F12 = "F12", } end end, } ================================================ FILE: lua/astronvim/plugins/window-picker.lua ================================================ return { "s1n7ax/nvim-window-picker", main = "window-picker", lazy = true, opts = { picker_config = { statusline_winbar_picker = { use_winbar = "smart" } } }, } ================================================ FILE: neovim.yml ================================================ --- base: lua51 globals: vim: any: true ================================================ FILE: selene.toml ================================================ std = "neovim" [rules] global_usage = "allow" if_same_then_else = "allow" incorrect_standard_library_use = "allow" mixed_table = "allow" multiple_statements = "allow" ================================================ FILE: version.txt ================================================ 5.3.15