diff --git a/.gitea/ISSUE_TEMPLATE/bug_report.yml b/.gitea/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index f99f104..0000000 --- a/.gitea/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Issue report -description: Report any errors, bugs, or unexpected behaviors related to presence.nvim -title: "[Bug]: " -labels: [bug] -assignees: - - jiriks74 -body: - - type: markdown - attributes: - value: | - Before reporting, please search [existing issues](https://gitea.stefka.eu/jiriks74/astronvim_config/issues/) and make sure that you are on the latest commit - - - type: dropdown - attributes: - label: "Are you on the latest version of the commit?" - description: "If no, please backup your current config and update." - options: - - "Yes" - - "No" - validations: - required: true - - - type: input - attributes: - label: "Which commit are you on?" - description: "To thet the commit hash run `git rev-parse --short HEAD` in the config directory (`~/.config/nvim/lua/user`)" - validations: - required: true - - - type: dropdown - attributes: - label: "Have you modified the config?" - description: "If so, backup your current config and try the default one before reporting." - options: - - "Yes" - - "No" - validations: - required: true - - - type: textarea - attributes: - label: "Description" - description: "A short summary of the error, bug, or unexpected behavior you're facing." - validations: - required: true - - - type: textarea - attributes: - label: "Neovim version" - description: "Output of `nvim --version`" - render: markdown - placeholder: | - NVIM: v0.6.0-dev+209-g0603eba6e - Build type: Release - LuaJIT: 2.1.0-beta3 - value: | - NVIM: - Build type: - LuaJIT: - validations: - required: true - - - type: input - attributes: - label: "OS information" - placeholder: "Ubuntu 22.04" - validations: - required: true - - - type: textarea - attributes: - label: "Steps to reproduce" - description: "Steps to reproduce the issue with your config(s) if applicable." - placeholder: | - 1. Setup presence.nvim with `require("presence"):setup({...})` - 2. Run Neovim with `nvim test.txt` - 3. ... - validations: - required: true - - - type: textarea - attributes: - label: "Logs" - description: "The full list of `:messages` from one or more `nvim` instances.\nPlease insert the logs into code blocks." - placeholder: | -
- - ``` - [presence.nvim] Using runtime path: /run/user/1000 - [presence.nvim] Using Discord IPC socket path: /run/user/1000/discord-ipc-0 - [presence.nvim] Checking Discord IPC socket at /run/user/1000/discord-ipc-0... - ``` - -
- value: | -
- - ``` - - ``` - -
- validations: - required: true - - - type: textarea - attributes: - label: "Aditional info" - description: "If you'd like to add anything else put it here." - validations: - required: false diff --git a/.gitea/ISSUE_TEMPLATE/feature_request.yml b/.gitea/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 9ebd200..0000000 --- a/.gitea/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Feature request -description: Report any errors, bugs, or unexpected behaviors related to presence.nvim -title: "[FEAT]: " -labels: [enhancement] -assignees: - - jiriks74 -body: - - type: textarea - attributes: - label: Is your feature request related to a problem? - description: A clear and concise description of what the problem is. Ex. I'm always frustrated when... - validations: - required: true - - - type: textarea - attributes: - label: Describe the solution you'd like - description: A clear and concise description of what you want to happen. - validations: - required: false - - - type: textarea - attributes: - label: Describe alternatives you've considered - description: A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false - - - type: textarea - attributes: - label: Additional context - description: Add any other context or screenshots about the feature request here. - validations: - required: false diff --git a/.gitea/workflows/luacheck.yml b/.gitea/workflows/luacheck.yml deleted file mode 100644 index 37f3d1d..0000000 --- a/.gitea/workflows/luacheck.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Luacheck -on: [push, pull_request] -jobs: - Luacheck: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Luacheck - run: | - apt update && apt install lua-check -y - - - name: Luacheck linter - run: | - luacheck . diff --git a/.gitea/workflows/stylua.yml b/.gitea/workflows/stylua.yml deleted file mode 100644 index 4e3869a..0000000 --- a/.gitea/workflows/stylua.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: StyLua -on: [push, pull_request] -jobs: - StyLuacheck: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: StyLua check - run: | - npx @johnnymorganz/stylua-bin . diff --git a/.luacheckrc b/.luacheckrc deleted file mode 100644 index fac5255..0000000 --- a/.luacheckrc +++ /dev/null @@ -1,9 +0,0 @@ -std = { - globals = { - "vim", - "require", - }, - read_globals = { - "fallback", - }, -} diff --git a/README.md b/README.md index 4f9606e..ae91ebc 100644 --- a/README.md +++ b/README.md @@ -15,23 +15,39 @@ ```bash git clone https://github.com/AstroNvim/AstroNvim ~/.config/nvim + nvim +PackerSync ``` - Clone my config into `~/.config/nvim/lua/user` + - For NeoVim >= 8.0 ```bash git clone https://github.com/jiriks74/astronvim_config ~/.config/nvim/lua/user ``` + - For NeoVim < 8.0 use `neovim7.2` branch + + ```bash + git clone -b neovim7.2 https://github.com/jiriks74/astronvim_config ~/.config/nvim/lua/user + ``` + +- Open nvim and run `:PackerSync` + +```bash +nvim +PackerSync +``` + ## Useful info - Folding with treesitter - To get folding for your language, you need to run `:TSInstall ` (eg. `TSInstall cpp` to get C++ folding) - Install language servers - - Use `Space+p+m` keybind to open install menu. + - Use `Space+p+I` keybind to open install menu. - To install package under the cursor, press `i` - To uninstall package under the cursor press `X` +- Debugging + - See `vimspector` under [`Extra plugin included`](#extra-plugins-included) - LaTeX - To use `vimtex` plugin, you need to have LaTeX installed - [`texlive-most`](https://wiki.archlinux.org/title/TeX_Live#Installation) package on ArchLinux @@ -43,6 +59,14 @@ ## Extra plugins included +- [vimspector](https://github.com/puremourning/vimspector) + - Simple plugin for debugging + - You need have to have `neovim` python module installed + + ```bash + pip3 install neovim + ``` + - You have to create a file with `Launch` config - see the [plugin repository](https://github.com/puremourning/vimspector) - [vim-pio](https://github.com/jiriks74/vim-pio) - PlatformIO vim plugin @@ -70,6 +94,37 @@ | CTRL+e | ["\"] | Copilot accept | | CTRL+s | ["\"] | Toggle autosave | +### Mappings for vimspector (debugging) + +| Shortcut | Vim keybind | Description | +|-------------|-------------------|--------------------| +| Space+d+d | ["\dd"] | Launch | +| Space+d+S | ["\dS"] | Stop | +| Space+d+c | ["\dc"] | Continue | +| Space+d+p | ["\dp"] | Pause | +| Space+d+e | ["\de"] | Reset | +| Space+d+r | ["\dr"] | Restart | +| Space+d+R | ["\dR"] | Run to cursor | +| Space+d+C | ["\dC"] | Go to current line | +| Space+d+P | ["\dP"] | Move cursor to the program counter in current frame | +| | Breakpoints | | +| Space+d+b+t | ["\dbt"] | Toggle breakpoint | +| Space+d+b+l | ["\dbl"] | List breakpoints | +| Space+d+b+c | ["\dbc"] | Clear breakpoints | +| Space+d+b+C | ["\dbC"] | Toggle CBreakpoint or LogPoint on current line | +| Space+d+b+f | ["\dbf"] | Add a function breakpoint for expression under cursor | +| Space+d+b+n | ["\dbn"] | Jump to next breakpoint | +| Space+d+b+p | ["\dbp"] | Jump to previous breakpoint | +| | Step keybinds | | +| Space+d+s+s | ["\dss"] | Step over | +| Space+d+s+i | ["\dsi"] | Step into | +| Space+d+s+o | ["\dso"] | Step out | +| | Frame keybinds | | +| Space+d+f+u | ["\dfu"] | Up frame | +| Space+d+f+d | ["\dfd"] | Down frame | + +There are also some [VSCode like keybinds setup by the plugin](https://github.com/puremourning/vimspector#visual-studio--vscode) + ### Mappings for markdown preview | Shortcut | Vim keybind | Description | @@ -82,8 +137,6 @@ ## TODO -- [ ] Nvim-DAP - - Modified the default AstroNvim config - [ ] [Mappings for `vimtex`](#mappings-for-vimtex) - [ ] Better section for `vim-pio` - [ ] Add section for setting up debugging @@ -93,6 +146,7 @@ - [ ] Better [`README.md`](https://github.com/jiriks74/astronvim_config/blob/neovim7.2/README.md) for [`neovim7.2`](https://github.com/jiriks74/astronvim_config/tree/neovim7.2) branch - [ ] Add section redirecting to [`neovim72`](https://github.com/jiriks74/astronvim_config/tree/neovim7.2) - branch's [`README.md`](https://github.com/jiriks74/astronvim_config/blob/neovim7.2/README.md) if user has Neovim < 8.0 + branch's [`README.md`](https://github.com/jiriks74/astronvim_config/blob/neovim7.2/README.md) it user has Neovim < 8.0 +- [ ] Add `.vimspector.json` template - [ ] Setting up simple wiki? - [ ] Add section for ["weirongxu/plantuml-previewer.vim"](https://github.com/weirongxu/plantuml-previewer.vim) diff --git a/init.lua b/init.lua index 012e059..4512d44 100644 --- a/init.lua +++ b/init.lua @@ -1,16 +1,14 @@ -- AstroNvim Configuration Table -- All configuration changes should go inside of the table below --- A split up user configuration example can be found at: https://github.com/AstroNvim/split_user_example - -- You can think of a Lua "table" as a dictionary like data structure the -- normal format is "key = value". These also handle array like data structures -- where a value with no key simply has an implicit numeric key local config = { + -- Configure AstroNvim updates updater = { remote = "origin", -- remote to use - -- channel = "nightly", -- "stable" or "nightly" channel = "nightly", -- "stable" or "nightly" version = "latest", -- "latest", tag name, or regex search like "v1.*" to only do updates before v2 (STABLE ONLY) branch = "nightly", -- branch name (NIGHTLY ONLY) @@ -18,6 +16,7 @@ local config = { pin_plugins = nil, -- nil, true, false (nil will pin plugins on stable only) skip_prompts = false, -- skip prompts about breaking changes show_changelog = true, -- show the changelog after performing an update + auto_reload = false, -- automatically reload and sync packer after a successful update auto_quit = false, -- automatically quit the current session after a successful update -- remotes = { -- easily add new remotes to track -- ["remote_name"] = "https://remote_url.come/repo.git", -- full remote url @@ -25,9 +24,10 @@ local config = { -- ["remote3"] = "github_user", -- GitHub user assume AstroNvim fork -- }, }, + -- Set colorscheme to use - -- colorscheme = "astrodark", - colorscheme = "tokyonight-night", + colorscheme = "default_theme", + -- Add highlight groups in any theme highlights = { -- init = { -- this table overrides highlights in all themes @@ -37,7 +37,8 @@ local config = { -- Normal = { bg = "#000000" }, -- }, }, - -- set vim options here (vim.. = value) + + -- set vim options here (vim.. = value) options = { opt = { -- set to true or false etc. @@ -48,28 +49,17 @@ local config = { wrap = false, -- sets vim.opt.wrap }, g = { - -- sets vim.g.mapleader - mapleader = " ", - -- enable or disable auto formatting at start (lsp.formatting.format_on_save must be enabled) - autoformat_enabled = true, - -- enable completion at start - cmp_enabled = true, - -- enable autopairs at start - autopairs_enabled = true, - -- set the visibility of diagnostics in the UI (0=off, 1=only show in status line, 2=virtual text off, 3=all on) - diagnostics_mode = 3, - -- disable icons in the UI (disable if no nerd font is available, requires :PackerSync after changing) - icons_enabled = true, - -- disable notifications when toggling UI elements - ui_notifications_enabled = true, - -- Taglist - Tlist_Use_Right_Window = 1, - Tlist_GainFocus_On_ToggleOpen = 1, - Tlist_Auto_Update = 1, - -- Tlist_Close_On_Select = 1, + mapleader = " ", -- sets vim.g.mapleader + cmp_enabled = true, -- enable completion at start + autopairs_enabled = true, -- enable autopairs at start + diagnostics_enabled = true, -- enable diagnostics at start + status_diagnostics_enabled = true, -- enable diagnostics in statusline - -- MarkdownPreview - mkdp_auto_close = 0, + -- copilot_no_tab_map = true, + -- copilot_assume_mapped = true, + -- copilot_tab_fallback = "", + + vimspector_enable_mappings = 'VISUAL_STUDIO', }, }, -- If you need more control, you can use the function()...end notation @@ -82,10 +72,69 @@ local config = { -- return local_vim -- end, + -- Set dashboard header + header = { + " █████ ███████ ████████ ██████ ██████", + "██ ██ ██ ██ ██ ██ ██ ██", + "███████ ███████ ██ ██████ ██ ██", + "██ ██ ██ ██ ██ ██ ██ ██", + "██ ██ ███████ ██ ██ ██ ██████", + " ", + " ███  ██ ██  ██ ██ ███  ███", + " ████  ██ ██  ██ ██ ████  ████", + " ██ ██  ██ ██  ██ ██ ██ ████ ██", + " ██  ██ ██  ██  ██  ██ ██  ██  ██", + " ██   ████   ████   ██ ██      ██", + }, + + -- Default theme configuration + default_theme = { + -- Modify the color palette for the default theme + colors = { + fg = "#abb2bf", + bg = "#1e222a", + }, + highlights = function(hl) -- or a function that returns a new table of colors to set + local C = require "default_theme.colors" + + hl.Normal = { fg = C.fg, bg = C.bg } + + -- New approach instead of diagnostic_style + hl.DiagnosticError.italic = true + hl.DiagnosticHint.italic = true + hl.DiagnosticInfo.italic = true + hl.DiagnosticWarn.italic = true + + return hl + end, + -- enable or disable highlighting for extra plugins + plugins = { + aerial = true, + beacon = false, + bufferline = true, + dashboard = true, + highlighturl = true, + hop = false, + indent_blankline = true, + lightspeed = false, + ["neo-tree"] = true, + notify = true, + ["nvim-tree"] = false, + ["nvim-web-devicons"] = true, + rainbow = true, + symbols_outline = false, + telescope = true, + vimwiki = false, + ["which-key"] = true, + }, + }, + -- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on diagnostics = { + virtual_text = true, underline = true, }, + -- Extend LSP configuration lsp = { -- enable servers that you already have installed without mason @@ -93,20 +142,10 @@ local config = { -- "pyright" }, formatting = { - -- control auto formatting on save - format_on_save = { - enabled = false, -- enable or disable format on save globally - allow_filetypes = { -- enable format on save for specified filetypes only - -- "go", - }, - ignore_filetypes = { -- disable format on save for specified filetypes - -- "python", - }, + format_on_save = false, -- enable or disable auto formatting on save + disabled = { -- disable formatting capabilities for the listed clients + -- "sumneko_lua", }, - disabled = { -- disable formatting capabilities for the listed language servers - -- "lua_ls", - }, - timeout_ms = 1000, -- default format timeout -- filter = function(client) -- fully override the default formatting function -- return true -- end @@ -121,19 +160,13 @@ local config = { -- on_attach = function(client, bufnr) -- end, - -- override the LSP setup handler function based on server name - -- setup_handlers = { - -- -- first function changes the default setup handler - -- function(server, opts) require("lspconfig")[server].setup(opts) end, - -- -- keys for a specific server name will be used for that LSP - -- lua_ls = function(server, opts) - -- -- custom lua_ls setup handler - -- require("lspconfig")["lua_ls"].setup(opts) - -- end, - -- }, + -- override the mason server-registration function + -- server_registration = function(server, opts) + -- require("lspconfig")[server].setup(opts) + -- end, -- Add overrides for LSP server settings, the keys are the name of the server - config = { + ["server-settings"] = { -- example for addings schemas to yamlls -- yamlls = { -- override table for require("lspconfig").yamlls.setup({...}) -- settings = { @@ -148,9 +181,10 @@ local config = { -- }, clangd = { capabilities = { offsetEncoding = "utf-8" }, - }, + } }, }, + -- Mapping data with "desc" stored directly by vim.keymap.set(). -- -- Please use this mappings table to set keyboard mapping since this is the @@ -159,60 +193,51 @@ local config = { mappings = { -- first key is the mode n = { - ["fT"] = { - function() require("telescope.builtin").colorscheme { enable_preview = true } end, - desc = "Find themes", - }, -- second key is the lefthand side of the map -- mappings seen under group name "Buffer" ["bb"] = { "tabnew", desc = "New tab" }, ["bc"] = { "BufferLinePickClose", desc = "Pick to close" }, ["bj"] = { "BufferLinePick", desc = "Pick to jump" }, ["bt"] = { "BufferLineSortByTabs", desc = "Sort by tabs" }, - -- tables with the `name` key will be registered with which-key if it's installed - -- this is useful for naming menus - ["b"] = { name = "Buffers" }, - -- Trigger Alpha dashboard on close when no buffers are left - ["c"] = { - function() - local bufs = vim.fn.getbufinfo { buflisted = true } - require("astronvim.utils.buffer").close(0) - if require("astronvim.utils").is_available "alpha-nvim" and not bufs[2] then require("alpha").start(true) end - end, - desc = "Close buffer", - }, - -- quick save - -- [""] = { ":w!", desc = "Save File" }, -- change description but the same command + ["uD"] = { "Alpha", desc = "Alpha dashboard" }, + + ["dd"] = { "call vimspector#Launch()", desc = "Launch" }, + ["dS"] = { "call vimspector#Stop()", desc = "Stop" }, + ["dc"] = { "call vimspector#Continue()", desc = "Continue" }, + ["dp"] = { "call vimspector#Pause()", desc = "Pause" }, + ["de"] = { "call vimspector#Reset()", desc = "Reset" }, + ["dr"] = { "call vimspector#Restart()", desc = "Restart" }, + ["dR"] = { "call vimspector#RunToCursor()", desc = "Run to cursor" }, + ["dC"] = { "call vimspector#GoToCurrentLine()", desc = "Go to current line" }, + ["dP"] = { "call vimspector#JumpToProgramCounter()", + desc = "Move Cursor to the program counter in current frame" }, + + -- Breakpoints + ["dbt"] = { "call vimspector#ToggleBreakpoint()", desc = "Toggle breakpoint" }, + ["dbl"] = { "call vimspector#ListBreakpoints()", desc = "List breakpoints" }, + ["dbc"] = { "call vimspector#ClearBreakpoints()", desc = "Clear breakpoints" }, + ["dbC"] = { "call vimspector#ToggleBreakpoint( { trigger expr, hit count expr } )", + desc = "Toggle CBreakpoint or LogPoint on current line" }, + ["dbf"] = { "call vimspector#AddFunctionBreakpoint( '' )", + desc = "Add a function breakpoint for expression under cursor" }, + ["dbn"] = { "call vimspector#JumpToNextBreakpoint()", desc = "Jump to next breakpoint" }, + ["dbp"] = { "call vimspector#JumpToPreviousBreakpoint()", desc = "Jump to previous breakpoint" }, + + -- Step + ["dss"] = { "call vimspector#StepOver()", desc = "Step over" }, + ["dsi"] = { "call vimspector#StepInto()", desc = "Step into" }, + ["dso"] = { "call vimspector#StepOut()", desc = "Step out" }, + + -- Frames + ["dfu"] = { "call vimspector#UpFrame()", desc = "Up frame" }, + ["dfd"] = { "call vimspector#DownFrame()", desc = "Down frame" }, - -- Debugger mappings - ["dl"] = { name = "Load launch.json" }, - ["L"] = { - "LiveServer", - desc = " Live server", - }, - -- Config loading - ["dlc"] = { - function() require("dap.ext.vscode").load_launchjs(nil, { cppdbg = { "c", "cpp", "asm" } }) end, - desc = "C/C++/asm", - }, - ["dln"] = { - function() - require("dap.ext.vscode").load_launchjs( - nil, - { node2 = { "javascript", "javascriptreact", "typescriptreact", "typescript" } } - ) - end, - desc = "Node", - }, - -- Load launch.json for all supported languages - ["dla"] = { function() require("dap.ext.vscode").load_launchjs(nil, nil) end, desc = "All" }, -- Mardown preview - ["m"] = { name = " Markdown" }, ["mp"] = { "MarkdownPreview", desc = "Markdown preview" }, ["ms"] = { "MarkdownPreviewStop", desc = "Markdown preview stop" }, ["mt"] = { "MarkdownPreviewToggle", desc = "Markdown preview toggle" }, + -- Vimtex mappings - ["x"] = { name = " LaTeX" }, ["xi"] = { "VimtexInfo", desc = "Info" }, ["xI"] = { "VimtexInfoFull", desc = "Full info" }, ["xt"] = { "VimtexTocOpen", desc = "Open table of contents" }, @@ -235,513 +260,215 @@ local config = { ["xX"] = { "VimtexReloadState", desc = "Reload the state for the current buffer" }, ["xs"] = { "VimtexToggleMain", desc = "Set current file as 'current project'" }, ["xa"] = { "VimtexContextMenu", desc = "Show context menu" }, - -- Trouble, Taglist - ["lt"] = { desc = false, name = "Trouble, Tagbar" }, - -- Taglist - ["ltT"] = { "TlistToggle", desc = "Tagbar toggle" }, - -- Trouble - ["ltx"] = { "TroubleToggle", desc = "Toggle Trouble" }, - ["ltw"] = { "TroubleToggle workspace_diagnostics", desc = "Workspace diagnostics" }, - ["ltd"] = { "TroubleToggle document_diagnostics", desc = "Document diagnostics" }, - ["ltq"] = { "TroubleToggle quickfix", desc = "Quickfix" }, - ["ltl"] = { "TroubleToggle loclist", desc = "Loc List" }, - ["ltR"] = { "TroubleToggle lsp_references", desc = "Lsp references" }, - -- ["ftt"] = { "TodoTrouble", desc = "Todo Trouble" }, - -- + -- Autosave [""] = { "ASToggle", desc = "Toggle autosave" }, - ["fs"] = { "ASToggle", desc = "Toggle autosave" }, + + -- quick save + -- [""] = { ":w!", desc = "Save File" }, -- change description but the same command }, - v = { - -- Carbon code sharing - ["s"] = { ":CarbonNow", desc = "Share code on Carbon", silent = true }, + i = { + -- [""] = { "copilot#Accept('')", silent = true, expr = true }, + -- [""] = { "copilot#Accept('')" }, + -- Oopen cmp menu + [""] = { "cmp#complete()", silent = true, expr = true }, }, t = { -- setting a mapping to false will disable it -- [""] = false, }, }, - -- Configure require("lazy").setup() options - lazy = { - defaults = { lazy = true }, - performance = { - rtp = { - -- customize default disabled vim plugins - disabled_plugins = { - "tohtml", - "gzip", - "matchit", - "zipPlugin", - "netrwPlugin", - "tarPlugin", - "matchparen", - }, - }, - }, - }, + -- Configure plugins plugins = { - -- Theme - { - "folke/tokyonight.nvim", - event = "UIEnter", - }, - -- You can disable default plugins as follows: - -- { "max397574/better-escape.nvim", enabled = false }, - -- - -- You can also easily customize additional setup of plugins that is outside of the plugin's setup call - -- { - -- "L3MON4D3/LuaSnip", - -- config = function(plugin, opts) - -- -- include the default astronvim config that calls the setup call - -- require "plugins.configs.luasnip"(plugin, opts) - -- -- add more custom luasnip configuration such as filetype extend or custom snippets - -- local luasnip = require "luasnip" - -- luasnip.filetype_extend("javascript", { "javascriptreact" }) - -- end, - -- }, - -- { - -- "windwp/nvim-autopairs", - -- config = function(plugin, opts) - -- -- include the default astronvim config that calls the setup call - -- require "plugins.configs.nvim-autopairs"(plugin, opts) - -- -- add more custom autopairs configuration such as custom rules - -- local npairs = require "nvim-autopairs" - -- local Rule = require "nvim-autopairs.rule" - -- local cond = require "nvim-autopairs.conds" - -- npairs.add_rules( - -- { - -- Rule("$", "$", { "tex", "latex" }) - -- -- don't add a pair if the next character is % - -- :with_pair(cond.not_after_regex "%%") - -- -- don't add a pair if the previous character is xxx - -- :with_pair( - -- cond.not_before_regex("xxx", 3) - -- ) - -- -- don't move right when repeat character - -- :with_move(cond.none()) - -- -- don't delete if the next character is xx - -- :with_del(cond.not_after_regex "xx") - -- -- disable adding a newline when you press - -- :with_cr(cond.none()), - -- }, - -- -- disable for .vim files, but it work for another filetypes - -- Rule("a", "a", "-vim") - -- ) - -- end, - -- }, - -- By adding to the which-key config and using our helper function you can add more which-key registered bindings - -- { - -- "folke/which-key.nvim", - -- config = function(plugin, opts) - -- require "plugins.configs.which-key" (plugin, opts) - -- -- Add bindings which show up as group name - -- local wk = require "which-key" - -- wk.register({ - -- m = { name = "Markdown" }, - -- ft = { name = "Trouble" }, - -- b = { name = "Buffers" }, - -- }, { mode = "n", prefix = "" }) - -- end, - -- }, - { - "dstein64/vim-startuptime", - cmd = "StartupTime", - }, + init = { + -- You can disable default plugins as follows: + -- ["goolord/alpha-nvim"] = { disable = true }, - { - -- override nvim-cmp plugin - "hrsh7th/nvim-cmp", - dependencies = { - "hrsh7th/cmp-emoji", -- add cmp source as dependency of cmp + -- You can also add new plugins here as well: + -- Add plugins, the packer syntax without the "use" + -- { "andweeb/presence.nvim" }, + -- { + -- "ray-x/lsp_signature.nvim", + -- event = "BufRead", + -- config = function() + -- require("lsp_signature").setup() + -- end, + -- }, + -- + { + "folke/todo-comments.nvim", + event = "BufRead", + config = function() + require("todo-comments").setup() + end, + }, + { "zbirenbaum/copilot.lua", + -- event = "VimEnter", + event = "BufRead", + -- after = "feline.nvim", + config = function() + vim.defer_fn(function() + require("copilot").setup() + end, 100) + end, }, - -- override the options table that is used in the `require("cmp").setup()` call - opts = function(_, opts) - -- opts parameter is the default options table - -- the function is lazy loaded so cmp is able to be required - local cmp = require "cmp" - local luasnip = require "luasnip" - -- modify the mapping part of the table - -- Disable tab completion, use CTRL + J or CTRL + K instead - opts.mapping[""] = cmp.mapping.confirm { select = false } - opts.mapping[""] = cmp.mapping.confirm { select = false } - - if luasnip.expandable() then - luasnip.expand() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - fallback() - end - opts.sources = cmp.config.sources { - -- Copilot Source - { name = "copilot", group_index = 2 }, - { name = "nvim_lsp", priority = 1000 }, - { name = "luasnip", priority = 750 }, - { name = "buffer", priority = 500 }, - { name = "path", priority = 250 }, - { name = "emoji", priority = 700 }, -- add new source - } - - return opts - end, - }, - { - "onsails/lspkind.nvim", - opts = { - mode = "symbol", - symbol_map = { - -- Copilot icon - Copilot = "", - Array = "󰅪", - Boolean = "⊨", - Class = "󰌗", - Constructor = "", - Key = "󰌆", - Namespace = "󰅪", - Null = "NULL", - Number = "#", - Object = "󰀚", - Package = "󰏗", - Property = "", - Reference = "", - Snippet = "", - String = "󰀬", - TypeParameter = "󰊄", - Unit = "", - }, - menu = {}, + -- { "github/copilot.vim" }, + { + "zbirenbaum/copilot-cmp", + -- after = "copilot.lua", + after = { "nvim-cmp", "copilot.lua" }, + config = function() + -- astronvim.add_cmp_source("copilot_cmp") + astronvim.add_cmp_source({ name = "copilot", priority = 1050, keyword_length = -1, max_item_count = 4 }) + require("copilot_cmp").setup { + method = "getCompletionsCycling", + -- method = "getPanelCompletions", + formatters = { + label = require("copilot_cmp.format").format_label_text, + insert_text = require("copilot_cmp.format").format_insert_text, + preview = require("copilot_cmp.format").deindent, + }, + } + end, }, - enabled = vim.g.icons_enabled, - config = require "plugins.configs.lspkind", - }, - - -- You can also add new plugins here as well: - -- Add plugins, the lazy syntax - - --Social - { - "jiriks74/presence.nvim", - event = "UIEnter", - }, - { - "ellisonleao/carbon-now.nvim", - cmd = "CarbonNow", - opts = { - base_url = "https://carbon.now.sh/", - open_cmd = "xdg-open", - options = { - theme = "night-owl", - window_theme = "none", - font_family = "Hack", - font_size = "18px", - bg = "none", - line_numbers = true, - line_height = "133%", - drop_shadow = false, - drop_shadow_offset_y = "20px", - drop_shadow_blur = "68px", - width = "680", - watermark = false, - }, + { "puremourning/vimspector" }, + { "lervag/vimtex" }, + { "normen/vim-pio" }, + { + "iamcco/markdown-preview.nvim", + run = function() vim.fn["mkdp#util#install"]() end, }, - }, - - -- Comments - { - "folke/todo-comments.nvim", - event = "User AstroFile", - opts = { - signs = true, -- show icons in the signs column - sign_priority = 8, -- sign priority - -- keywords recognized as todo comments - keywords = { - FIX = { - icon = " ", -- icon used for the sign, and in search results - color = "error", -- can be a hex color, or a named color (see below) - alt = { "FIXME", "BUG", "FIXIT", "ISSUE" }, -- a set of other keywords that all map to this FIX keywords - -- signs = false, -- configure signs for some keywords individually - }, - TODO = { icon = " ", color = "info" }, - HACK = { icon = " ", color = "warning" }, - WARN = { icon = " ", color = "warning", alt = { "WARNING", "XXX" } }, - PERF = { icon = " ", alt = { "OPTIM", "PERFORMANCE", "OPTIMIZE" } }, - NOTE = { icon = " ", color = "hint", alt = { "INFO" } }, - TEST = { icon = "⏲ ", color = "test", alt = { "TESTING", "PASSED", "FAILED" } }, - }, - gui_style = { - fg = "NONE", -- The gui style to use for the fg highlight group. - bg = "BOLD", -- The gui style to use for the bg highlight group. - }, - merge_keywords = true, -- when true, custom keywords will be merged with the defaults - -- highlighting of the line containing the todo comment - -- * before: highlights before the keyword (typically comment characters) - -- * keyword: highlights of the keyword - -- * after: highlights after the keyword (todo text) - highlight = { - -- enable multine todo comments - multiline = true, - -- lua pattern to match the next multiline from the start of the matched keyword - multiline_pattern = "^.", - -- extra lines that will be re-evaluated when changing a line - multiline_context = 10, - -- "fg" or "bg" or empty - before = "", - -- "fg", "bg", "wide", "wide_bg", "wide_fg" or empty. (wide and wide_bg is the same as bg, - -- but will also highlight surrounding characters, wide_fg acts accordingly but with fg) - keyword = "wide", - -- "fg" or "bg" or empty - after = "fg", - -- pattern or table of patterns, used for highlighting (vim regex) - pattern = [[.*<(KEYWORDS)\s*:]], - -- uses treesitter to match keywords in comments only - comments_only = true, - -- ignore lines longer than this - max_line_len = 400, - -- list of file types to exclude highlighting - exclude = {}, - }, - -- list of named colors where we try to extract the guifg from the - -- list of highlight groups or use the hex color if hl not found as a fallback - colors = { - error = { "DiagnosticError", "ErrorMsg", "#DC2626" }, - warning = { "DiagnosticWarn", "WarningMsg", "#FBBF24" }, - info = { "DiagnosticInfo", "#2563EB" }, - hint = { "DiagnosticHint", "#10B981" }, - default = { "Identifier", "#7C3AED" }, - test = { "Identifier", "#FF00FF" }, - }, - search = { - command = "rg", - args = { - "--color=never", - "--no-heading", - "--with-filename", - "--line-number", - "--column", - }, - -- regex that will be used to match keywords. - -- don't replace the (KEYWORDS) placeholder - pattern = [[\b(KEYWORDS):]], -- ripgrep regex - -- pattern = [[\b(KEYWORDS)\b]], -- match without the extra colon. You'll likely get false positives - }, + { + "Pocco81/auto-save.nvim", + config = function() + require("auto-save").setup() + end, }, - }, - -- Show todo comments, warnings, errors, ... - { - "folke/trouble.nvim", - -- cmd = { "TroubleToggle", "TodoTrouble" } - cmd = "TroubleToggle", - }, - -- TOC (functions, macros, ...) - { - "yegappan/taglist", - cmd = "TlistToggle", - }, + { "weirongxu/plantuml-previewer.vim" }, + { "aklt/plantuml-syntax" }, + { "tyru/open-browser.vim" }, - -- Code completion - { - "zbirenbaum/copilot.lua", - cmd = "Copilot", - event = "User AstroFile", - config = function() - require("copilot").setup { - suggestion = { enabled = false }, - panel = { enabled = false }, - } - end, - }, - { - "zbirenbaum/copilot-cmp", - config = function() require("copilot_cmp").setup() end, - event = "User AstroFile", - }, + -- We also support a key value style plugin definition similar to NvChad: + -- ["ray-x/lsp_signature.nvim"] = { + -- event = "BufRead", + -- config = function() + -- require("lsp_signature").setup() + -- end, + -- }, + -- ["weirongxu/plantuml-previewer.vim"] = { + -- requires = { {"aklt/plantuml-syntax"} }, + -- -- depends = "aklt/plantuml-syntax", + -- requires = { {"tyru/open-browser.vim"} }, + -- -- depends = "tyru/open-browser.vim", + -- }, - -- PlatformIO - { - "normen/vim-pio", - -- event = "BufEnter" - cmd = { "PIO", "PIOInit", "PIOInstall", "PIOUninstall", "PIONewProject", "PIOAddLibrary", "PIORemoveLibrary" }, }, + -- All other entries override the require("").setup({...}) call for default plugins + ["null-ls"] = function(config) -- overrides `require("null-ls").setup(config)` + -- config variable is the default configuration table for the setup function call + -- local null_ls = require "null-ls" - -- Jupiter notebooks - { - "kiyoon/jupynium.nvim", - build = "pip3 install --user .", - event = "BufEnter *.ju.py", - opts = { - python_host = "/usr/bin/python3", - }, - }, - { "stevearc/dressing.nvim" }, - - -- Live server - { - "aurum77/live-server.nvim", - run = function() require("live_server.util").install() end, - cmd = { "LiveServer", "LiveServerStart", "LiveServerStop" }, - }, - - -- Text related - { - -- LaTeX - "lervag/vimtex", - event = "BufEnter *.tex", - }, - { - "iamcco/markdown-preview.nvim", - requires = { "tyru/open-browser.vim" }, - event = "BufEnter *.md", - config = function() vim.fn["mkdp#util#install"]() end, - }, - - -- PlantUML - { - "weirongxu/plantuml-previewer.vim", - event = "BufEnter *.uml", - }, - { - "aklt/plantuml-syntax", - event = "BufEnter *.uml", - }, - - -- Basic editor functionality - { - "Pocco81/auto-save.nvim", - event = "User AstroFile", - config = function() require("auto-save").setup() end, - }, - - -- Tasks.json - { - "stevearc/overseer.nvim", - cmd = { - "OverseerOpen", - "OverseerClose", - "OverseerToggle", - "OverseerSaveBundle", - "OverseerLoadBundle", - "OverseerDeleteBundle", - "OverseerRunCmd", - "OverseerRun", - "OverseerInfo", - "OverseerBuild", - "OverseerQuickAction", - "OverseerTaskAction ", - "OverseerClearCache", - }, - opts = {}, - }, - - -- { - -- "ray-x/lsp_signature.nvim", - -- event = "BufRead", - -- config = function() - -- require("lsp_signature").setup() - -- end, - -- }, - - -- Plugin entries can also be used to override the default options for plugins as well - { - "goolord/alpha-nvim", - opts = function(_, opts) - -- customize the dashboard header - opts.section.header.val = { - "███████ ████████ ███████ ███████ ██ ██ █████ ███████ ██ ██ ", - "██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ", - "███████ ██ █████ █████ █████ ███████ █████ ██ ██ ", - " ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ", - "███████ ██ ███████ ██ ██ ██ ██ ██ ██ ███████ ██████ ", - "", - " █████ ███████ ████████ ██████ ██████ ", - " ██ ██ ██ ██ ██ ██ ██ ██ ", - " ███████ ███████ ██ ██████ ██ ██ ", - " ██ ██ ██ ██ ██ ██ ██ ██ ", - " ██ ██ ███████ ██ ██ ██ ██████ ", - "", - " ███ ██ ██ ██ ██ ███ ███", - " ████ ██ ██ ██ ██ ████ ████", - " ██ ██ ██ ██ ██ ██ ██ ████ ██", - " ██ ██ ██ ██ ██ ██ ██ ██ ██", - " ██ ████ ████ ██ ██ ██", - } - return opts - end, - }, - { - "jose-elias-alvarez/null-ls.nvim", - opts = function(_, config) - -- config variable is the default configuration table for the setup function call - -- local null_ls = require "null-ls" - - -- Check supported formatters and linters - -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting - -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics - config.sources = { - -- Set a formatter - -- null_ls.builtins.formatting.stylua, - -- null_ls.builtins.formatting.prettier, - } - return config -- return final config table - end, - }, - { - "nvim-treesitter/nvim-treesitter", - opts = { - -- ensure_installed = { "lua" }, - }, + -- Check supported formatters and linters + -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting + -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics + config.sources = { + -- Set a formatter + -- null_ls.builtins.formatting.stylua, + -- null_ls.builtins.formatting.prettier, + } + return config -- return final config table + end, + treesitter = { -- overrides `require("treesitter").setup(...)` + -- ensure_installed = { "lua" }, }, -- use mason-lspconfig to configure LSP installations - { - "williamboman/mason-lspconfig.nvim", - -- overrides `require("mason-lspconfig").setup(...)` - opts = { - -- ensure_installed = { "lua_ls" }, - }, + ["mason-lspconfig"] = { -- overrides `require("mason-lspconfig").setup(...)` + -- ensure_installed = { "sumneko_lua" }, }, -- use mason-null-ls to configure Formatters/Linter installation for null-ls sources - { - "jay-babu/mason-null-ls.nvim", - -- overrides `require("mason-null-ls").setup(...)` - opts = { - -- ensure_installed = { "prettier", "stylua" }, - }, + ["mason-null-ls"] = { -- overrides `require("mason-null-ls").setup(...)` + -- ensure_installed = { "prettier", "stylua" }, }, - { - "jay-babu/mason-nvim-dap.nvim", - -- overrides `require("mason-nvim-dap").setup(...)` - opts = { - -- ensure_installed = { "python" }, + }, + + -- LuaSnip Options + luasnip = { + -- Add paths for including more VS Code style snippets in luasnip + vscode_snippet_paths = {}, + -- Extend filetypes + filetype_extend = { + -- javascript = { "javascriptreact" }, + }, + }, + + -- CMP Source Priorities + -- modify here the priorities of default cmp sources + -- higher value == higher priority + -- The value can also be set to a boolean for disabling default sources: + -- false == disabled + -- true == 1000 + cmp = { + source_priority = { + nvim_lsp = 1000, + luasnip = 750, + buffer = 500, + path = 250, + }, + -- mappings = { + -- [""] = cmp.mapping(function(fallback) + -- if luasnip.expandable() then + -- luasnip.expand() + -- elseif luasnip.expand_or_jumpable() then + -- luasnip.expand_or_jump() + -- elseif has_words_before() then + -- cmp.complete() + -- else + -- fallback() + -- end + -- end, { + -- "i", + -- "s", + -- }), + -- [""] = cmp.mapping(function(fallback) + -- if luasnip.jumpable(-1) then + -- luasnip.jump(-1) + -- else + -- fallback() + -- end + -- end, { + -- "i", + -- "s", + -- }), + -- + -- } + }, + + -- Modify which-key registration (Use this with mappings table in the above.) + ["which-key"] = { + -- Add bindings which show up as group name + register = { + -- first key is the mode, n == normal mode + n = { + -- second key is the prefix, prefixes + [""] = { + -- third key is the key to bring up next level and its displayed + -- group name in which-key top level menu + ["b"] = { name = "Buffer" }, + ["d"] = { + name = "Debugging", + ["b"] = { name = "Breakpoints" }, + ["s"] = { name = "Step" }, + ["f"] = { name = "Frames" }, + }, + ["m"] = { name = "Markdown" }, + ["x"] = { name = "LaTeX" }, + }, }, }, }, - -- Customize Heirline options - heirline = { - -- -- Customize different separators between sections - -- separators = { - -- breadcrumbs = " > ", - -- tab = { "", "" }, - -- }, - -- -- Customize colors for each element each element has a `_fg` and a `_bg` - -- colors = function(colors) - -- colors.git_branch_fg = require("astronvim.utils").get_hlgroup "Conditional" - -- return colors - -- end, - -- -- Customize attributes of highlighting in Heirline components - -- attributes = { - -- -- styling choices for each heirline element, check possible attributes with `:h attr-list` - -- git_branch = { bold = true }, -- bold the git branch statusline component - -- }, - -- -- Customize if icons should be highlighted - -- icon_highlights = { - -- breadcrumbs = false, -- LSP symbols in the breadcrumbs - -- file_icon = { - -- winbar = false, -- Filetype icon in the winbar inactive windows - -- statusline = true, -- Filetype icon in the statusline - -- tabline = true, -- Filetype icon in the tabline - -- }, - -- }, - }, + -- This function is run last and is a good place to configuring -- augroups/autocommands and custom filetypes also this just pure lua so -- anything that doesn't fit in the normal config locations above can go here @@ -758,6 +485,24 @@ local config = { -- ["~/%.config/foo/.*"] = "fooscript", -- }, -- } + local function alpha_on_bye(cmd) + local bufs = vim.fn.getbufinfo { buflisted = true } + vim.cmd(cmd) + if require("core.utils").is_available "alpha-nvim" and not bufs[2] then + require("alpha").start(true) + end + end + + vim.keymap.del("n", "c") + if require("core.utils").is_available "bufdelete.nvim" then + vim.keymap.set("n", "c", function() + alpha_on_bye "Bdelete!" + end, { desc = "Close buffer" }) + else + vim.keymap.set("n", "c", function() + alpha_on_bye "bdelete!" + end, { desc = "Close buffer" }) + end end, } diff --git a/plugins/cmp.lua b/plugins/cmp.lua new file mode 100644 index 0000000..184e8ac --- /dev/null +++ b/plugins/cmp.lua @@ -0,0 +1,97 @@ +local kind_icons = { + NONE = "", + Array = "", + Boolean = "⊨", + Class = "", + Constructor = "", + Key = "", + Namespace = "", + Null = "NULL", + Number = "#", + Object = "⦿", + Package = "", + Property = "", + Reference = "", + Snippet = "", + String = "𝓐", + TypeParameter = "", + Unit = "", + + Text = "", + Method = "", + Function = "", + Field = "ﰠ", + Variable = "", + Interface = "", + Module = "", + Value = "", + Enum = "", + Keyword = "", + Color = "", + File = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "פּ", + Event = "", + Operator = "", + Copilot = "", +} +local cmp = require("cmp") +-- local has_words_before = function() +-- if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then return false end +-- local line, col = unpack(vim.api.nvim_win_get_cursor(0)) +-- return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match("^%s*$") == nil +-- end +return { + formatting = { + fields = { "kind", "abbr", "menu" }, + format = function(_, vim_item) + vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) + return vim_item + end, + }, + -- completion = { + -- keyword_length = 0, + -- }, + -- mapping = { + -- [""] = vim.schedule_wrap(function(fallback) + -- if cmp.visible() and has_words_before() then + -- cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) + -- else + -- fallback() + -- end + -- end), + -- [''] = cmp.mapping(function(fallback) + -- if vim.fn['vsnip#jumpable'](1) == 1 then + -- feedkey('(vsnip-jump-next)', '') + -- else + -- local copilot_keys = vim.fn['copilot#Accept']() + -- if copilot_keys ~= '' then + -- vim.api.nvim_feedkeys(copilot_keys, 'i', true) + -- else + -- fallback() + -- end + -- end + -- end, { 'i', 's' }), + -- }, +} +-- local cmp = require "cmp" +-- local luasnip = require "luasnip" +-- return { +-- preselect = cmp.PreselectMode.None, +-- mapping = { +-- [""] = cmp.mapping.confirm { select = false }, +-- [""] = cmp.mapping(function(fallback) +-- if luasnip.expandable() then +-- luasnip.expand() +-- elseif luasnip.expand_or_jumpable() then +-- luasnip.expand_or_jump() +-- fallback() +-- end +-- end, { +-- "i", +-- "s", +-- }), +-- }, +-- }