From 1380fa224b8b28c2acb219db1315fd14a8c0edef Mon Sep 17 00:00:00 2001 From: huyjaky Date: Fri, 29 Nov 2024 11:44:20 +0700 Subject: [PATCH] custom-hypr - add: nvim config --- .config/nvim/.gitignore | 41 +++ .config/nvim/.neoconf.json | 20 ++ .config/nvim/.stylua.toml | 7 + .config/nvim/README.md | 52 ++++ .config/nvim/init.lua | 19 ++ .config/nvim/lazy-lock.json | 87 ++++++ .config/nvim/lua/community.lua | 14 + .config/nvim/lua/core/autocmds.lua | 44 +++ .config/nvim/lua/core/mappings.lua | 60 ++++ .config/nvim/lua/core/options.lua | 33 +++ .config/nvim/lua/lazy_setup.lua | 43 +++ .config/nvim/lua/plugins/astrocore.lua | 46 +++ .config/nvim/lua/plugins/astrolsp.lua | 115 ++++++++ .config/nvim/lua/plugins/astroui.lua | 19 ++ .config/nvim/lua/plugins/auto-save.lua | 32 +++ .config/nvim/lua/plugins/cmp.lua | 77 +++++ .config/nvim/lua/plugins/code-runner.lua | 30 ++ .config/nvim/lua/plugins/colorschemes.lua | 93 ++++++ .config/nvim/lua/plugins/conda.lua | 5 + .../configs/lsp/config/basedpyright.lua | 34 +++ .../lua/plugins/configs/lsp/config/clangd.lua | 19 ++ .../lua/plugins/configs/lsp/formatting.lua | 20 ++ .config/nvim/lua/plugins/configs/ui/alpha.lua | 180 ++++++++++++ .../nvim/lua/plugins/configs/ui/heirline.lua | 215 ++++++++++++++ .../lua/plugins/configs/ui/highlights.lua | 41 +++ .config/nvim/lua/plugins/configs/ui/icons.lua | 59 ++++ .../nvim/lua/plugins/configs/ui/lspkind.lua | 38 +++ .../nvim/lua/plugins/configs/ui/status.lua | 39 +++ .../lua/plugins/configs/ui/transparent.lua | 39 +++ .config/nvim/lua/plugins/disabled.lua | 34 +++ .config/nvim/lua/plugins/distant.lua | 21 ++ .config/nvim/lua/plugins/editor.lua | 266 ++++++++++++++++++ .config/nvim/lua/plugins/indent-scope.lua | 90 ++++++ .config/nvim/lua/plugins/lsp-features.lua | 44 +++ .../lua/plugins/markdown-preview-nvim.lua | 42 +++ .config/nvim/lua/plugins/mason-setup.lua | 40 +++ .config/nvim/lua/plugins/mason.lua | 46 +++ .config/nvim/lua/plugins/mini-icons.lua | 47 ++++ .config/nvim/lua/plugins/mini-move.lua | 40 +++ .config/nvim/lua/plugins/motion.lua | 134 +++++++++ .config/nvim/lua/plugins/multiple-cursor.lua | 40 +++ .config/nvim/lua/plugins/multiple-visual.lua | 4 + .config/nvim/lua/plugins/neo-tree.lua | 34 +++ .config/nvim/lua/plugins/noice.lua | 109 +++++++ .config/nvim/lua/plugins/none-ls.lua | 22 ++ .config/nvim/lua/plugins/nvim-dap-ui.lua | 50 ++++ .../lua/plugins/nvim-dap-virtual-text.lua | 9 + .config/nvim/lua/plugins/smooth-cursor.lua | 75 +++++ .config/nvim/lua/plugins/todo-comments.lua | 25 ++ .config/nvim/lua/plugins/treesitter.lua | 27 ++ .config/nvim/lua/plugins/ts-rainbow.lua | 33 +++ .config/nvim/lua/plugins/ui.lua | 41 +++ .../nvim/lua/plugins/ultimate-autopair.lua | 64 +++++ .config/nvim/lua/polish.lua | 6 + .config/nvim/neovim.yml | 6 + .config/nvim/selene.toml | 8 + 56 files changed, 2878 insertions(+) create mode 100644 .config/nvim/.gitignore create mode 100644 .config/nvim/.neoconf.json create mode 100644 .config/nvim/.stylua.toml create mode 100644 .config/nvim/README.md create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lazy-lock.json create mode 100644 .config/nvim/lua/community.lua create mode 100644 .config/nvim/lua/core/autocmds.lua create mode 100644 .config/nvim/lua/core/mappings.lua create mode 100644 .config/nvim/lua/core/options.lua create mode 100644 .config/nvim/lua/lazy_setup.lua create mode 100644 .config/nvim/lua/plugins/astrocore.lua create mode 100644 .config/nvim/lua/plugins/astrolsp.lua create mode 100644 .config/nvim/lua/plugins/astroui.lua create mode 100644 .config/nvim/lua/plugins/auto-save.lua create mode 100644 .config/nvim/lua/plugins/cmp.lua create mode 100644 .config/nvim/lua/plugins/code-runner.lua create mode 100644 .config/nvim/lua/plugins/colorschemes.lua create mode 100644 .config/nvim/lua/plugins/conda.lua create mode 100644 .config/nvim/lua/plugins/configs/lsp/config/basedpyright.lua create mode 100644 .config/nvim/lua/plugins/configs/lsp/config/clangd.lua create mode 100644 .config/nvim/lua/plugins/configs/lsp/formatting.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/alpha.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/heirline.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/highlights.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/icons.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/lspkind.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/status.lua create mode 100644 .config/nvim/lua/plugins/configs/ui/transparent.lua create mode 100644 .config/nvim/lua/plugins/disabled.lua create mode 100644 .config/nvim/lua/plugins/distant.lua create mode 100644 .config/nvim/lua/plugins/editor.lua create mode 100644 .config/nvim/lua/plugins/indent-scope.lua create mode 100644 .config/nvim/lua/plugins/lsp-features.lua create mode 100644 .config/nvim/lua/plugins/markdown-preview-nvim.lua create mode 100644 .config/nvim/lua/plugins/mason-setup.lua create mode 100644 .config/nvim/lua/plugins/mason.lua create mode 100644 .config/nvim/lua/plugins/mini-icons.lua create mode 100644 .config/nvim/lua/plugins/mini-move.lua create mode 100644 .config/nvim/lua/plugins/motion.lua create mode 100644 .config/nvim/lua/plugins/multiple-cursor.lua create mode 100644 .config/nvim/lua/plugins/multiple-visual.lua create mode 100644 .config/nvim/lua/plugins/neo-tree.lua create mode 100644 .config/nvim/lua/plugins/noice.lua create mode 100644 .config/nvim/lua/plugins/none-ls.lua create mode 100644 .config/nvim/lua/plugins/nvim-dap-ui.lua create mode 100644 .config/nvim/lua/plugins/nvim-dap-virtual-text.lua create mode 100644 .config/nvim/lua/plugins/smooth-cursor.lua create mode 100644 .config/nvim/lua/plugins/todo-comments.lua create mode 100644 .config/nvim/lua/plugins/treesitter.lua create mode 100644 .config/nvim/lua/plugins/ts-rainbow.lua create mode 100644 .config/nvim/lua/plugins/ui.lua create mode 100644 .config/nvim/lua/plugins/ultimate-autopair.lua create mode 100644 .config/nvim/lua/polish.lua create mode 100644 .config/nvim/neovim.yml create mode 100644 .config/nvim/selene.toml diff --git a/.config/nvim/.gitignore b/.config/nvim/.gitignore new file mode 100644 index 0000000..6fd0a37 --- /dev/null +++ b/.config/nvim/.gitignore @@ -0,0 +1,41 @@ +# Compiled Lua sources +luac.out + +# luarocks build files +*.src.rock +*.zip +*.tar.gz + +# Object files +*.o +*.os +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.def +*.exp + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + diff --git a/.config/nvim/.neoconf.json b/.config/nvim/.neoconf.json new file mode 100644 index 0000000..4da33ca --- /dev/null +++ b/.config/nvim/.neoconf.json @@ -0,0 +1,20 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + }, + "lspconfig": { + "lua_ls": { + "Lua.format.enable": false + } + } +} diff --git a/.config/nvim/.stylua.toml b/.config/nvim/.stylua.toml new file mode 100644 index 0000000..bfcffff --- /dev/null +++ b/.config/nvim/.stylua.toml @@ -0,0 +1,7 @@ +column_width = 120 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferDouble" +call_parentheses = "None" +collapse_simple_statement = "Always" diff --git a/.config/nvim/README.md b/.config/nvim/README.md new file mode 100644 index 0000000..8ae2a7f --- /dev/null +++ b/.config/nvim/README.md @@ -0,0 +1,52 @@ +# nvim-config + + ```powershell + vi" hightlight inline on """ + ``` + +My personal neovim config + +## Installation + +- Windows + + ```powershell + Rename-Item -Path $env:LOCALAPPDATA\nvim -NewName $env:LOCALAPPDATA\nvim.bak + Rename-Item -Path $env:LOCALAPPDATA\nvim-data -NewName $env:LOCALAPPDATA\nvim-data.bak + git clone https://github.com/Penguin-jpg/nvim-config $env:LOCALAPPDATA\nvim + nvim + ``` + +- Unix + + ```shell + mv ~/.config/nvim ~/.config/nvim.bak + mv ~/.local/share/nvim ~/.local/share/nvim.bak + git clone https://github.com/Penguin-jpg/nvim-config ~/.config/nvim + nvim + ``` + +## Dependency + +- Python + + ```shell + sudo apt-get install python3-dev python3-pip python3-venv + pip install pynvim + ``` + +- Node + + ```shell + npm install -g neovim + ``` + +- Cargo + ```shell + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + rustup update + cargo install --locked yazi-fm yazi-cli + ``` +- Optional + - [ripgrep (for live grep)](https://github.com/BurntSushi/ripgrep) + - [wezterm](https://wezfurlong.org/wezterm/index.html) diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..425b155 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,19 @@ +-- This file simply bootstraps the installation of Lazy.nvim and then calls other files for execution +-- This file doesn't necessarily need to be touched, BE CAUTIOUS editing this file and proceed at your own risk. +local lazypath = vim.env.LAZY or vim.fn.stdpath "data" .. "/lazy/lazy.nvim" +if not (vim.env.LAZY or (vim.uv or 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(lazypath) + +-- validate that lazy is available +if not pcall(require, "lazy") then + -- stylua: ignore + vim.api.nvim_echo({ { ("Unable to load lazy from: %s\n"):format(lazypath), "ErrorMsg" }, { "Press any key to exit...", "MoreMs" } }, true, {}) + vim.fn.getchar() + vim.cmd.quit() +end + +require "lazy_setup" +require "polish" diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..4924839 --- /dev/null +++ b/.config/nvim/lazy-lock.json @@ -0,0 +1,87 @@ +{ + "AstroNvim": { "branch": "main", "commit": "c82ef216d0776b19cd7229fb916c4b30fbe3484c" }, + "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, + "LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" }, + "aerial.nvim": { "branch": "master", "commit": "9c29a1a66eb31384888e413e510ba72496e06770" }, + "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, + "astrocommunity": { "branch": "main", "commit": "bb7988ac0efe0c17936c350c6da19051765f0e71" }, + "astrocore": { "branch": "main", "commit": "0fcaac66d115948605c14eaf45a41d3923eaafeb" }, + "astrolsp": { "branch": "main", "commit": "2f6b0a4059775a1dac011d2944dd41fd4a8fe7a8" }, + "astrotheme": { "branch": "main", "commit": "41b7d8430a55fd771e41bd763af4c3fd1c2fc0b5" }, + "astroui": { "branch": "main", "commit": "58c4130bd15c28827eab19dcc20fb9483bf5cad8" }, + "auto-save.nvim": { "branch": "main", "commit": "5fbcaac0a2698c87a9a1bd2083cb6949505cca12" }, + "bamboo.nvim": { "branch": "master", "commit": "d38c50257d9fb16b17050569b29d777b1f2503ee" }, + "better-escape.nvim": { "branch": "master", "commit": "199dcc2643dec5d8dbdab4ec672cf405224dcb3b" }, + "catppuccin": { "branch": "main", "commit": "0b5df9c9e641b1212b21a0762ccad4434fd41322" }, + "clangd_extensions.nvim": { "branch": "main", "commit": "8f7b72100883e0e34400d9518d40a03f21e4d0a6" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-dap": { "branch": "master", "commit": "ea92773e84c0ad3288c3bc5e452ac91559669087" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "code_runner.nvim": { "branch": "main", "commit": "dcedccbf969a0f3bc00db446172b4966e83101dd" }, + "cyberdream.nvim": { "branch": "main", "commit": "cd3c2e7955034a5bec0e1beb9d7cb80c639ef5d5" }, + "dressing.nvim": { "branch": "master", "commit": "43b8f74e0b1e3f41e51f640f8efa3bcd401cea0d" }, + "duplicate.nvim": { "branch": "main", "commit": "ab057af7872c44e6fbd48df9b03983c8e67c50a7" }, + "flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" }, + "friendly-snippets": { "branch": "main", "commit": "de8fce94985873666bd9712ea3e49ee17aadb1ed" }, + "gitsigns.nvim": { "branch": "main", "commit": "0b04035bb7b3c83e999b9676e2fb46fd0aa9f910" }, + "grug-far.nvim": { "branch": "main", "commit": "190c03d54e8976491e6e49acb97087bf4182b079" }, + "guess-indent.nvim": { "branch": "main", "commit": "6cd61f7a600bb756e558627cd2e740302c58e32d" }, + "heirline.nvim": { "branch": "master", "commit": "cc359b628266cb9a84b2d71c883f2b99e16473a0" }, + "indent-blankline.nvim": { "branch": "master", "commit": "3fe94b8034dd5241cb882bb73847303b58857ecf" }, + "kanagawa.nvim": { "branch": "master", "commit": "e5f7b8a804360f0a48e40d0083a97193ee4fcc87" }, + "lazy.nvim": { "branch": "main", "commit": "7967abe55752aa90532e6bb4bd4663fe27a264cb" }, + "lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" }, + "lsp_signature.nvim": { "branch": "master", "commit": "a38da0a61c172bb59e34befc12efe48359884793" }, + "lspkind.nvim": { "branch": "master", "commit": "a700f1436d4a938b1a1a93c9962dc796afbaef4d" }, + "luvit-meta": { "branch": "main", "commit": "57d464c4acb5c2e66bd4145060f5dc9e96a7bbb7" }, + "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, + "markview.nvim": { "branch": "main", "commit": "72cd34279e94ee96ee33bdf30a87b00e6d45319d" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "43894adcf10bb1190c2184bd7c1750e8ea2b3dce" }, + "mason-null-ls.nvim": { "branch": "main", "commit": "2b8433f76598397fcc97318d410e0c4f7a4bea6a" }, + "mason-nvim-dap.nvim": { "branch": "main", "commit": "8b9363d83b5d779813cdd2819b8308651cec2a09" }, + "mason.nvim": { "branch": "main", "commit": "c43eeb5614a09dc17c03a7fb49de2e05de203924" }, + "mini.bufremove": { "branch": "main", "commit": "1ee294a97e091d3cf967974df622c0d887890dc2" }, + "mini.icons": { "branch": "main", "commit": "54686be7d58807906cb2c8c2216e0bf9c044f19a" }, + "mini.indentscope": { "branch": "main", "commit": "da9af64649e114aa79480c238fd23f6524bc0903" }, + "mini.move": { "branch": "main", "commit": "4caa1c212f5ca3d1633d21cfb184808090ed74b1" }, + "mini.surround": { "branch": "main", "commit": "48a9795c9d352c771e1ab5dedab6063c0a2df037" }, + "monokai-pro.nvim": { "branch": "master", "commit": "4f4133601296881bb2197800bd68d2bba9eaadb9" }, + "multiple-cursors.nvim": { "branch": "main", "commit": "2f5e786c43aa9c0fc34b295cfcc9bfbacef8e926" }, + "neo-tree.nvim": { "branch": "main", "commit": "a77af2e764c5ed4038d27d1c463fa49cd4794e07" }, + "neoconf.nvim": { "branch": "main", "commit": "24db302fe23c4c07233e4b9d79ebe1dd2d3c975b" }, + "noice.nvim": { "branch": "main", "commit": "c6f6fb178ebe9b4fd90383de743c3399f8c3a37c" }, + "none-ls.nvim": { "branch": "main", "commit": "1f2bf17eddfdd45aed254b6922c6c68b933dba9e" }, + "nui.nvim": { "branch": "main", "commit": "a0fd35fcbb4cb479366f1dc5f20145fd718a3733" }, + "nvim-autopairs": { "branch": "master", "commit": "78a4507bb9ffc9b00f11ae0ac48243d00cb9194d" }, + "nvim-cmp": { "branch": "main", "commit": "be7bd4c5f860c79da97af3a26d489af50babfd4b" }, + "nvim-dap": { "branch": "master", "commit": "cc92b054720a96170eca6bd9bdedd43d2b0a7a8a" }, + "nvim-dap-ui": { "branch": "master", "commit": "ffa89839f97bad360e78428d5c740fdad9a0ff02" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "76d80c3d171224315b61c006502a1e30c213a9ab" }, + "nvim-highlight-colors": { "branch": "main", "commit": "e967e2ba13fd4ca731b41d0e5cc1ac2edcd6e25e" }, + "nvim-lspconfig": { "branch": "master", "commit": "dafd61d6533bd90ecf6e2a3a972298fdddc74d82" }, + "nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" }, + "nvim-notify": { "branch": "master", "commit": "fbef5d32be8466dd76544a257d3f3dce20082a07" }, + "nvim-spider": { "branch": "main", "commit": "77a74131775f7d427f148c65a6119966a0b3da25" }, + "nvim-treesitter": { "branch": "master", "commit": "7930b5f983c37bb07c9af27274334a7adcb3e5af" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" }, + "nvim-ts-autotag": { "branch": "main", "commit": "e239a560f338be31337e7abc3ee42515daf23f5e" }, + "nvim-ts-context-commentstring": { "branch": "main", "commit": "9c74db656c3d0b1c4392fc89a016b1910539e7c0" }, + "nvim-ufo": { "branch": "main", "commit": "a5390706f510d39951dd581f6d2a972741b3fa26" }, + "plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" }, + "promise-async": { "branch": "main", "commit": "38a4575da9497326badd3995e768b4ccf0bb153e" }, + "rainbow-delimiters.nvim": { "branch": "master", "commit": "d803ba7668ba390aa4cfd3580183c982cac36fd8" }, + "resession.nvim": { "branch": "master", "commit": "cc819b0489938d03e4f3532a583354f0287c015b" }, + "smart-splits.nvim": { "branch": "master", "commit": "00fba7a0e912a8d82da91a3b6b11d641fa500bd8" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, + "telescope.nvim": { "branch": "master", "commit": "85922dde3767e01d42a08e750a773effbffaea3e" }, + "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, + "transparent.nvim": { "branch": "main", "commit": "8a2749a2fa74f97fe6557f61b89ac7fd873f3c21" }, + "treesj": { "branch": "main", "commit": "03415ac60791d48e120a80d37e080744faf3ac15" }, + "trouble.nvim": { "branch": "main", "commit": "46cf952fc115f4c2b98d4e208ed1e2dce08c9bf6" }, + "ultimate-autopair.nvim": { "branch": "v0.6", "commit": "9e3209190c22953566ae4e6436ad2b4ff4dabb95" }, + "vim-illuminate": { "branch": "master", "commit": "5eeb7951fc630682c322e88a9bbdae5c224ff0aa" }, + "vim-visual-multi": { "branch": "master", "commit": "a6975e7c1ee157615bbc80fc25e4392f71c344d4" }, + "which-key.nvim": { "branch": "main", "commit": "9b365a6428a9633e3eeb34dbef1b791511c54f70" } +} diff --git a/.config/nvim/lua/community.lua b/.config/nvim/lua/community.lua new file mode 100644 index 0000000..cc2cbcd --- /dev/null +++ b/.config/nvim/lua/community.lua @@ -0,0 +1,14 @@ +-- AstroCommunity: import any community modules here +-- We import this file in `lazy_setup.lua` before the `plugins/` folder. +-- This guarantees that the specs are processed before any user plugins. + +---@type LazySpec +return { + "AstroNvim/astrocommunity", + { import = "astrocommunity.pack.lua" }, + { import = "astrocommunity.pack.json" }, + -- { import = "astrocommunity.pack.markdown" }, + { import = "astrocommunity.color.nvim-highlight-colors" }, + { import = "astrocommunity.diagnostics.trouble-nvim" }, + { import = "astrocommunity.neovim-lua-development.lazydev-nvim" }, +} diff --git a/.config/nvim/lua/core/autocmds.lua b/.config/nvim/lua/core/autocmds.lua new file mode 100644 index 0000000..e54106c --- /dev/null +++ b/.config/nvim/lua/core/autocmds.lua @@ -0,0 +1,44 @@ +-- Some commands that I want to execute in specific timing +vim.api.nvim_create_augroup("disable_comment_newline", { clear = true }) +vim.api.nvim_create_augroup("auto_wrap", { clear = true }) +vim.api.nvim_create_augroup("disable_suspend_with_c_z", { clear = true }) +vim.api.nvim_create_augroup("clear_last_search", { clear = true }) + +-- NOTE: CursorLineNr setting +vim.api.nvim_set_hl(0, "CursorLineNr", { fg = "#FFD700", bg = "none", bold = true }) +-- NOTE: visual line colors +vim.api.nvim_set_hl(0, "Visual", { fg = "#000000", bg = "#FFFFFF", bold = true }) + +-- NOTE: Set colors for hightlights for similar words +-- vim.api.nvim_set_hl(0, "LspReferenceRead", { fg = "#FF0000" }) +-- vim.api.nvim_set_hl(0, "LspReferenceWrite", { fg = "#FF0000" }) +-- vim.api.nvim_set_hl(0, "LspReferenceText", { fg = "#FF0000" }) + +vim.api.nvim_create_autocmd("BufEnter", { + desc = "Disable auto insert comment newline", + group = "disable_comment_newline", + command = "set formatoptions-=cro", +}) + +vim.api.nvim_create_autocmd("FileType", { + desc = "Enable wrap and spell for text like documents", + group = "auto_wrap", + pattern = { "gitcommit", "markdown", "text", "plaintext" }, + callback = function() + vim.opt_local.wrap = true + vim.opt_local.spell = true + end, +}) + +vim.api.nvim_create_autocmd("BufEnter", { + desc = "Remap to nothing so that it doesn't suspend terminal", + group = "disable_suspend_with_c_z", + command = "nnoremap ", +}) + +vim.api.nvim_create_autocmd("BufWinEnter", { + desc = "Clear last search pattern", + group = "clear_last_search", + pattern = "*", + command = "let @/ = ''", +}) diff --git a/.config/nvim/lua/core/mappings.lua b/.config/nvim/lua/core/mappings.lua new file mode 100644 index 0000000..8b58b65 --- /dev/null +++ b/.config/nvim/lua/core/mappings.lua @@ -0,0 +1,60 @@ +-- Mapping data with "desc" stored directly by vim.keymap.set(). +-- +-- Please use this mappings table to set keyboard mapping since this is the +-- lower level configuration and more robust one. (which-key will +-- automatically pick-up stored data by this setting.) + +return function() + local mappings = require("astrocore").empty_map_table() + + ------------------------------------------- + ------- Disable default mappings ---------- + ------------------------------------------- + mappings.n[""] = false + mappings.n[""] = false + mappings.n[""] = false + mappings.n[""] = false + mappings.n[""] = false + mappings.n[""] = false + mappings.n[""] = false + mappings.n[""] = false + + ------------------------------------------- + ----------- Utility functions ------------- + ------------------------------------------- + mappings.n[""] = { "u", desc = "Undo" } + -- mappings.n[""] = { "u", desc = "Undo" } + mappings.n["K"] = { function() vim.lsp.buf.hover() end, desc = "Hover symbol details"} + + mappings.i[""] = { "u", desc = "Undo" } + mappings.i[""] = { "dw", desc = "Delete a word backward" } + mappings.i[""] = { "w!", desc = "Save file" } + mappings.i["jj"] = { "", desc = "Normal mode" } + + mappings.i[""] = { "", desc = "Unindent line" } + mappings.v[""] = { ">gv", desc = "Indent line" } + mappings.v[""] = { ""] = { "ggVG", desc = "Select all lines" } + + return mappings +end diff --git a/.config/nvim/lua/core/options.lua b/.config/nvim/lua/core/options.lua new file mode 100644 index 0000000..90df014 --- /dev/null +++ b/.config/nvim/lua/core/options.lua @@ -0,0 +1,33 @@ +return { + -- vim.opt. + opt = { + number = true, -- show line number + relativenumber = true, -- show relative line number + spell = false, -- disable spell check + wrap = false, -- disable auto wrap lines + signcolumn = "yes", -- show changes of file + foldcolumn = "1", -- show foldcolumn + foldenable = true, -- enable fold for nvim-ufo + foldlevel = 99, -- set high foldlevel for nvim-ufo + foldlevelstart = 99, -- start with all code unfolded + guicursor = "n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20", -- default cursor setting + clipboard = "unnamedplus", -- enable system clipboard + termguicolors = true, -- true color support + mouse = "a", -- enable mouse + mousemoveevent = true, -- enable mousemove event + laststatus = 3, -- only show one statusline + swapfile = false, -- don't use swapfile + shiftwidth = 2, -- number of space inserted for indentation; when zero the 'tabstop' value will be used + tabstop = 2, -- set the number of space in a tab to 4 + softtabstop = 2, -- can be differnt from tabstop + showtabline = 0, -- always show tabline + expandtab = true, -- use spaces instead of tab + undofile = true, -- enable persistent undo + }, + -- vim.g. + g = { + -- configure global vim variables (vim.g) + -- NOTE: `mapleader` and `maplocalleader` must be set in the AstroNvim opts or before `lazy.setup` + -- This can be found in the `lua/lazy_setup.lua` file + }, +} diff --git a/.config/nvim/lua/lazy_setup.lua b/.config/nvim/lua/lazy_setup.lua new file mode 100644 index 0000000..db9d8bd --- /dev/null +++ b/.config/nvim/lua/lazy_setup.lua @@ -0,0 +1,43 @@ +require("lazy").setup({ + + { + "AstroNvim/AstroNvim", + version = "^4", -- Remove version tracking to elect for nighly AstroNvim + import = "astronvim.plugins", + opts = { -- AstroNvim options must be set here with the `import` key + mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up + maplocalleader = ",", -- This ensures the localleader key must be configured before Lazy is set up + icons_enabled = true, -- Set to false to disable icons (if no Nerd Font is available) + pin_plugins = nil, -- Default will pin plugins when tracking `version` of AstroNvim, set to true/false to override + }, + }, + { import = "community" }, + { import = "plugins" }, +} --[[@as LazySpec]], { + -- Configure any other `lazy.nvim` configuration options here + install = { colorscheme = { "astrodark", "habamax" } }, + + ui = { + backdrop = 100, + border = "single", + size = { width = 0.8, height = 0.8 }, + }, + + checker = { + enabled = true, + notify = false, + }, + + performance = { + rtp = { + -- disable some rtp plugins, add more to your liking + disabled_plugins = { + "gzip", + "netrwPlugin", + "tarPlugin", + "tohtml", + "zipPlugin", + }, + }, + }, +} --[[@as LazyConfig]]) diff --git a/.config/nvim/lua/plugins/astrocore.lua b/.config/nvim/lua/plugins/astrocore.lua new file mode 100644 index 0000000..3b73bfe --- /dev/null +++ b/.config/nvim/lua/plugins/astrocore.lua @@ -0,0 +1,46 @@ +-- AstroCore provides a central place to modify mappings, vim options, autocommands, and more! +-- Configuration documentation can be found with `:h astrocore` +-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`) +-- as this provides autocomplete and documentation while editing + +---@type LazySpec +return { + "AstroNvim/astrocore", + ---@type AstroCoreOpts + opts = { + -- Configure core features of AstroNvim + features = { + large_buf = { size = 1024 * 500, lines = 10000 }, -- set global limits for large files for disabling features like treesitter + autopairs = false, -- enable autopairs at start + cmp = true, -- enable completion at start + diagnostics_mode = 3, -- diagnostic mode on start (0 = off, 1 = no signs/virtual text, 2 = no virtual text, 3 = on) + highlighturl = false, -- highlight URLs at start + notifications = true, -- enable notifications at start + }, + -- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on + diagnostics = { + -- virtual_text = true, + underline = true, + update_in_insert = false, + }, + -- Configuration table of session options for AstroNvim's session management powered by Resession + sessions = { + -- Configure auto saving + autosave = { + last = true, -- auto save last session + cwd = false, -- auto save session for each working directory + }, + -- Patterns to ignore when saving sessions + ignore = { + dirs = {}, -- working directories to ignore sessions in + filetypes = { "gitcommit", "gitrebase" }, -- filetypes to ignore sessions + buftypes = {}, -- buffer types to ignore sessions + }, + }, + -- vim options can be configured here + options = require "core.options", + -- Mappings can be configured through AstroCore as well. + -- NOTE: keycodes follow the casing in the vimdocs. For example, `` must be capitalized + mappings = require "core.mappings"(), + }, +} diff --git a/.config/nvim/lua/plugins/astrolsp.lua b/.config/nvim/lua/plugins/astrolsp.lua new file mode 100644 index 0000000..131251c --- /dev/null +++ b/.config/nvim/lua/plugins/astrolsp.lua @@ -0,0 +1,115 @@ +-- Configuration documentation can be found with `:h astrolsp` +-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`) +-- as this provides autocomplete and documentation while editing + +---@type LazySpec +return { + "AstroNvim/astrolsp", + ---@type AstroLSPOpts + opts = { + -- Configuration table of features provided by AstroLSP + features = { + autoformat = false, -- enable or disable auto formatting on start + codelens = true, -- enable/disable codelens refresh on start + inlay_hints = true, -- enable/disable inlay hints on start + semantic_tokens = true, -- enable/disable semantic token highlighting + }, + -- customize lsp formatting options + formatting = require "plugins.configs.lsp.formatting", + -- enable servers that you already have installed without mason + servers = {}, + -- customize language server configuration options passed to `lspconfig` + ---@diagnostic disable: missing-fields + config = { + clangd = require "plugins.configs.lsp.config.clangd", + basedpyright = require "plugins.configs.lsp.config.basedpyright", + }, + -- customize how language servers are attached + handlers = { + -- a function without a key is simply the default handler, functions take two parameters, the server name and the configured options table for that server + -- function(server, opts) require("lspconfig")[server].setup(opts) end + + -- the key is the server that is being setup with `lspconfig` + -- rust_analyzer = false, -- setting a handler to false will disable the set up of that language server + -- pyright = function(_, opts) require("lspconfig").pyright.setup(opts) end -- or a custom handler function can be passed + }, + -- Configure buffer local auto commands to add when attaching a language server + autocmds = { + -- first key is the `augroup` to add the auto commands to (:h augroup) + lsp_document_highlight = { + -- Optional condition to create/delete auto command group + -- can either be a string of a client capability or a function of `fun(client, bufnr): boolean` + -- condition will be resolved for each client on each execution and if it ever fails for all clients, + -- the auto commands will be deleted for that buffer + cond = "textDocument/documentHighlight", + -- cond = function(client, bufnr) return client.name == "lua_ls" end, + -- list of auto commands to set + { + -- events to trigger + event = { "CursorHold", "CursorHoldI" }, + -- the rest of the autocmd options (:h nvim_create_autocmd) + desc = "Document Highlighting", + callback = function() vim.lsp.buf.document_highlight() end, + }, + { + event = { "CursorMoved", "CursorMovedI", "BufLeave" }, + desc = "Document Highlighting Clear", + callback = function() vim.lsp.buf.clear_references() end, + }, + }, + -- disable inlay hints in insert mode + disable_inlay_hints_on_insert = { + -- only create for language servers that support inlay hints + -- (and only if vim.lsp.inlay_hint is available) + cond = vim.lsp.inlay_hint and "textDocument/inlayHint" or false, + { + -- when going into insert mode + event = "InsertEnter", + desc = "disable inlay hints on insert", + callback = function(args) + local filter = { bufnr = args.buf } + -- if the inlay hints are currently enabled + if vim.lsp.inlay_hint.is_enabled(filter) then + -- disable the inlay hints + vim.lsp.inlay_hint.enable(false, filter) + -- create a single use autocommand to turn the inlay hints back on + -- when leaving insert mode + vim.api.nvim_create_autocmd("InsertLeave", { + buffer = args.buf, + once = true, + callback = function() vim.lsp.inlay_hint.enable(true, filter) end, + }) + end + end, + }, + }, + }, + -- mappings to be set up on attaching of a language server + mappings = { + n = { + gh = { function() vim.lsp.buf.hover() end, desc = "Hover symbol details", cond = "textDocument/hover" }, + gl = { function() vim.diagnostic.open_float() end, desc = "Hover diagnostics" }, + -- a `cond` key can provided as the string of a server capability to be required to attach, or a function with `client` and `bufnr` parameters from the `on_attach` that returns a boolean + gD = { + function() vim.lsp.buf.declaration() end, + desc = "Declaration of current symbol", + cond = "textDocument/declaration", + }, + ["uY"] = { + function() require("astrolsp.toggles").buffer_semantic_tokens() end, + desc = "Toggle LSP semantic highlight (buffer)", + cond = function(client) return client.server_capabilities.semanticTokensProvider and vim.lsp.semantic_tokens end, + }, + }, + }, + -- A custom `on_attach` function to be run after the default `on_attach` function + -- takes two parameters `client` and `bufnr` (`:h lspconfig-setup`) + on_attach = function(client, bufnr) + -- this would disable semanticTokensProvider for all clients + -- client.server_capabilities.semanticTokensProvider = nil + + -- Disable ruff_lsp hover in favor of pyright + if client.name == "ruff_lsp" then client.server_capabilities.hoverProvider = false end + end, + }, +} diff --git a/.config/nvim/lua/plugins/astroui.lua b/.config/nvim/lua/plugins/astroui.lua new file mode 100644 index 0000000..ce854a8 --- /dev/null +++ b/.config/nvim/lua/plugins/astroui.lua @@ -0,0 +1,19 @@ +-- AstroUI provides the basis for configuring the AstroNvim User Interface +-- Configuration documentation can be found with `:h astroui` +-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`) +-- as this provides autocomplete and documentation while editing + +---@type LazySpec +return { + "AstroNvim/astroui", + ---@type AstroUIOpts + opts = { + -- change colorscheme + colorscheme = "bamboo", + -- AstroUI allows you to easily modify highlight groups easily for any and all colorschemes + highlights = require "plugins.configs.ui.highlights", + -- Icons can be configured throughout the interface + icons = require "plugins.configs.ui.icons", + status = require "plugins.configs.ui.status", + }, +} diff --git a/.config/nvim/lua/plugins/auto-save.lua b/.config/nvim/lua/plugins/auto-save.lua new file mode 100644 index 0000000..548ecb8 --- /dev/null +++ b/.config/nvim/lua/plugins/auto-save.lua @@ -0,0 +1,32 @@ +return { + "okuuva/auto-save.nvim", + cmd = "ASToggle", -- optional for lazy loading on command + event = { "InsertLeave", "TextChanged" }, -- optional for lazy loading on trigger events + opts = { + -- your config goes here + -- or just leave it empty :) + enabled = true, -- start auto-save when the plugin is loaded (i.e. when your package manager loads it) + trigger_events = { -- See :h events + -- immediate_save = { "BufLeave", "FocusLost" }, -- vim events that trigger an immediate save + defer_save = {"TextChanged" }, -- vim events that trigger a deferred save (saves after `debounce_delay`) + cancel_deferred_save = { "InsertEnter" }, -- vim events that cancel a pending deferred save + }, + -- function that takes the buffer handle and determines whether to save the current buffer or not + -- return true: if buffer is ok to be saved + -- return false: if it's not ok to be saved + -- if set to `nil` then no specific condition is applied + -- + condition = function(buf) + -- Check if vim-visual-multi is active + local visual_multi_active = vim.g.VM_is_active or false + if visual_multi_active then return false end + -- Additional conditions can be added here if needed + return true + end, + + write_all_buffers = false, -- write all buffers when the current one meets `condition` + noautocmd = false, -- do not execute autocmds when saving + lockmarks = false, -- lock marks when saving, see `:h lockmarks` for more details + debounce_delay = 10000, -- delay after which a pending save is executed + }, +} diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua new file mode 100644 index 0000000..ec57633 --- /dev/null +++ b/.config/nvim/lua/plugins/cmp.lua @@ -0,0 +1,77 @@ +return { + { + "onsails/lspkind.nvim", + opts = { + symbol_map = require "plugins.configs.ui.lspkind", + }, + }, + { + "hrsh7th/nvim-cmp", + opts = function(_, opts) + local cmp = require "cmp" + local luasnip = require "luasnip" + + 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 + + return require("astrocore").extend_tbl(opts, { + -- Configure window style + window = { + completion = { + winhighlight = "Normal:Pmenu,CursorLine:PmenuSel,Search:None", + -- border = "none", + side_padding = 0, + }, + }, + formatting = { + -- Show icon at the beginning and menu at the end + fields = { "kind", "abbr", "menu" }, + format = function(entry, vim_item) + local kind = require("lspkind").cmp_format { mode = "symbol_text", maxwidth = 50 }(entry, vim_item) + local strings = vim.split(kind.kind, "%s", { trimetry = true }) + kind.kind = " " .. (strings[1] or "") .. " " + kind.menu = " [" .. (strings[2] or "") .. "]" + return kind + end, + }, + -- Always select the first option + completion = { + completeopt = "menu,menuone,noinsert", + }, + -- Custom mapping + mapping = { + -- Esc to close completion menu + [""] = cmp.mapping { i = cmp.mapping.abort(), c = cmp.mapping.close() }, + -- Tab to select completion + [""] = cmp.mapping(function(fallback) + if cmp.visible() and has_words_before() then + cmp.confirm { select = true } + else + fallback() + end + end, { "i", "s" }), + -- Use and to select luasnip + [""] = cmp.mapping(function(fallback) + if luasnip.jumpable(1) then + luasnip.jump(1) + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }, + experimental = { + ghost_text = false, -- this feature conflict with copilot.vim's preview. + }, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/code-runner.lua b/.config/nvim/lua/plugins/code-runner.lua new file mode 100644 index 0000000..1b4370a --- /dev/null +++ b/.config/nvim/lua/plugins/code-runner.lua @@ -0,0 +1,30 @@ +return { + "CRAG666/code_runner.nvim", + opts = { + filetype = { + java = { + "cd $dir &&", + "javac $fileName &&", + "java $fileNameWithoutExt", + }, + python = { + "cd $dir &&", + "python3 -u $fileName", + }, + rust = { + "cd $dir &&", + "rustc $fileName &&", + "$dir/$fileNameWithoutExt", + }, + }, + }, + keys = { + { "r", ":RunCode", mode = "n", noremap = true, silent = false, desc = "Run code" }, + { "rf", ":RunFile", mode = "n", noremap = true, silent = false, desc = "Run file" }, + { "rft", ":RunFile tab", mode = "n", noremap = true, silent = false, desc = "Run file in new tab" }, + { "rp", ":RunProject", mode = "n", noremap = true, silent = false, desc = "Run project" }, + { "rc", ":RunClose", mode = "n", noremap = true, silent = false, desc = "Close run" }, + { "crf", ":CRFiletype", mode = "n", noremap = true, silent = false, desc = "Change run filetype" }, + { "crp", ":CRProjects", mode = "n", noremap = true, silent = false, desc = "Change run projects" }, + }, +} diff --git a/.config/nvim/lua/plugins/colorschemes.lua b/.config/nvim/lua/plugins/colorschemes.lua new file mode 100644 index 0000000..114c69c --- /dev/null +++ b/.config/nvim/lua/plugins/colorschemes.lua @@ -0,0 +1,93 @@ +return { + { + "catppuccin/nvim", + name = "catppuccin", + opts = { + flavour = "mocha", -- latte, frappe, macchiato, mocha + background = { -- :h background + light = "latte", + dark = "mocha", + }, + color_overrides = { + mocha = { + rosewater = "#efc9c2", + flamingo = "#ebb2b2", + pink = "#f2a7de", + mauve = "#b889f4", + red = "#ea7183", + maroon = "#ea838c", + peach = "#f39967", + yellow = "#eaca89", + green = "#96d382", + teal = "#78cec1", + sky = "#91d7e3", + sapphire = "#68bae0", + blue = "#739df2", + lavender = "#a0a8f6", + text = "#b5c1f1", + subtext1 = "#a6b0d8", + subtext0 = "#959ec2", + overlay2 = "#848cad", + overlay1 = "#717997", + overlay0 = "#63677f", + surface2 = "#505469", + surface1 = "#3e4255", + surface0 = "#2c2f40", + base = "#1a1c2a", + mantle = "#141620", + crust = "#0e0f16", + }, + }, + integrations = { + aerial = true, + alpha = true, + cmp = true, + dap = true, + dap_ui = true, + gitsigns = true, + illuminate = true, + markdown = true, + mason = true, + native_lsp = true, + neotree = true, + notify = true, + semantic_tokens = true, + symbols_outline = true, + telescope = true, + treesitter = true, + ts_rainbow = false, + which_key = true, + window_picker = true, + }, + }, + }, + + { + "scottmckendry/cyberdream.nvim", + opts = { + transparent = true, + italic_comments = true, + hide_fillchars = true, + borderless_telescope = false, + terminal_colors = false, + integrations = { rainbow_delimiters = true }, + }, + }, + + { + "loctvl842/monokai-pro.nvim", + opts = { + terminal_colors = true, + devicons = true, -- highlight the icons of `nvim-web-devicons` + filter = "pro", -- classic | octagon | pro | machine | ristretto | spectrum + plugins = { + indent_blankline = { + context_highlight = "pro", -- default | pro + context_start_underline = false, + }, + }, + }, + }, + + { "ribru17/bamboo.nvim", lazy = true, opts = { integrations = { mini = true } } }, +} diff --git a/.config/nvim/lua/plugins/conda.lua b/.config/nvim/lua/plugins/conda.lua new file mode 100644 index 0000000..59780ef --- /dev/null +++ b/.config/nvim/lua/plugins/conda.lua @@ -0,0 +1,5 @@ + +return { + "kmontocam/nvim-conda", + dependencies = { "nvim-lua/plenary.nvim" }, +} diff --git a/.config/nvim/lua/plugins/configs/lsp/config/basedpyright.lua b/.config/nvim/lua/plugins/configs/lsp/config/basedpyright.lua new file mode 100644 index 0000000..38c8b92 --- /dev/null +++ b/.config/nvim/lua/plugins/configs/lsp/config/basedpyright.lua @@ -0,0 +1,34 @@ +return { + before_init = function(_, c) + if not c.settings then c.settings = {} end + if not c.settings.python then c.settings.python = {} end + c.settings.python.pythonPath = vim.fn.exepath "python" + end, + settings = { + basedpyright = { + analysis = { + -- diagnosticMode = "workspace", + diagnosticMode = "openFilesOnly", + typeCheckingMode = "basic", + autoImportCompletions = true, + autoSearchPath = true, + inlayHints = { + variableTypes = true, + functionReturnTypes = true, + callArgumentNames = true, + pytestParameters = true, + }, + useLibraryCodeForTypes = true, + diagnosticSeverityOverrides = { + reportUnusedImport = "information", + reportUnusedFunction = "information", + reportUnusedVariable = "information", + -- reportGeneralTypeIssues = "none", + -- reportOptionalMemberAccess = "none", + -- reportOptionalSubscript = "none", + -- reportPrivateImportUsage = "none", + }, + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/configs/lsp/config/clangd.lua b/.config/nvim/lua/plugins/configs/lsp/config/clangd.lua new file mode 100644 index 0000000..93ba604 --- /dev/null +++ b/.config/nvim/lua/plugins/configs/lsp/config/clangd.lua @@ -0,0 +1,19 @@ +return { + capabilities = { + offsetEncoding = "utf-8", + }, + cmd = { + "clangd", + "--background-index", + "--clang-tidy", + "--all-scopes-completion", + "--header-insertion=iwyu", + "--completion-style=detailed", + "--fallback-style=Microsoft", + }, + init_options = { + clangdFileStatus = true, + usePlaceholders = false, + completeUnimported = true, + }, +} diff --git a/.config/nvim/lua/plugins/configs/lsp/formatting.lua b/.config/nvim/lua/plugins/configs/lsp/formatting.lua new file mode 100644 index 0000000..be08b7b --- /dev/null +++ b/.config/nvim/lua/plugins/configs/lsp/formatting.lua @@ -0,0 +1,20 @@ +-- Customize lsp formatting options +return { -- 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 + -- "lua", + }, + }, + disabled = { -- disable formatting capabilities for the listed language servers + -- disable lua_ls formatting capability if you want to use StyLua to format your lua code + -- "lua_ls", + }, + timeout_ms = 1000, -- default format timeout + -- filter = function(client) -- fully override the default formatting function + -- return true + -- end +} diff --git a/.config/nvim/lua/plugins/configs/ui/alpha.lua b/.config/nvim/lua/plugins/configs/ui/alpha.lua new file mode 100644 index 0000000..8783c65 --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/alpha.lua @@ -0,0 +1,180 @@ +-- Store alpha themes + +local banners = { + [1] = { + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣤⣶⣶⣶⣶⣶⣦⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⠿⠿⠿⢿⣿⣿⣿⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⢿⣿⣿⣿⡿⠿⠿⢿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⡄⠀⠀⠸⢿⣿⠟⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠘⢿⣿⡿⠁⠀⠀⣾⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⠟⢹⠛⢿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⣸⡀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣠⣼⣿⣷⣤⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠈⠉⠁⠈⠉⠁⠉⠉⠀⠉⠉⠈⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + }, + [2] = { + " ", + " ", + " ", + " ⣴⣶⣤⡤⠦⣤⣀⣤⠆ ⣈⣭⣿⣶⣿⣦⣼⣆ ", + " ⠉⠻⢿⣿⠿⣿⣿⣶⣦⠤⠄⡠⢾⣿⣿⡿⠋⠉⠉⠻⣿⣿⡛⣦ ", + " ⠈⢿⣿⣟⠦ ⣾⣿⣿⣷ ⠻⠿⢿⣿⣧⣄ ", + " ⣸⣿⣿⢧ ⢻⠻⣿⣿⣷⣄⣀⠄⠢⣀⡀⠈⠙⠿⠄ ", + " ⢠⣿⣿⣿⠈ ⣻⣿⣿⣿⣿⣿⣿⣿⣛⣳⣤⣀⣀ ", + " ⢠⣧⣶⣥⡤⢄ ⣸⣿⣿⠘ ⢀⣴⣿⣿⡿⠛⣿⣿⣧⠈⢿⠿⠟⠛⠻⠿⠄ ", + " ⣰⣿⣿⠛⠻⣿⣿⡦⢹⣿⣷ ⢊⣿⣿⡏ ⢸⣿⣿⡇ ⢀⣠⣄⣾⠄ ", + " ⣠⣿⠿⠛ ⢀⣿⣿⣷⠘⢿⣿⣦⡀ ⢸⢿⣿⣿⣄ ⣸⣿⣿⡇⣪⣿⡿⠿⣿⣷⡄ ", + " ⠙⠃ ⣼⣿⡟ ⠈⠻⣿⣿⣦⣌⡇⠻⣿⣿⣷⣿⣿⣿ ⣿⣿⡇ ⠛⠻⢷⣄ ", + " ⢻⣿⣿⣄ ⠈⠻⣿⣿⣿⣷⣿⣿⣿⣿⣿⡟ ⠫⢿⣿⡆ ", + " ⠻⣿⣿⣿⣿⣶⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⣀⣤⣾⡿⠃ ", + " ", + }, + [3] = { + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⢀⢄⠀⠀⡴⠁⠈⡆⠀⢀⡤⡀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠢⣄⠀⠀⡇⠀⡕⠀⢸⠀⢠⠃⠀⢮⠀⠹⠀⠀⣠⢾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⣞⠀⢀⠇⠀⡇⠀⡸⠀⠈⣆⠀⡸⠀⢰⠀⠀⡇⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⠘⢶⣯⣊⣄⡨⠟⡡⠁⠐⢌⠫⢅⣢⣑⣵⠶⠁⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⢀⣀⣀⠀⠀⠀⠀⠀⣼⣀⠀⢀⠒⠒⠂⠉⠀⠀⠀⠀⠁⠐⠒⠂⡀⠀⣸⣄⠀⠀⠀⠀⠀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⢠⢮⣵⣶⣦⡩⡲⣄⠀⠀⣿⣿⣽⠲⠭⣥⣖⣂⣀⣀⣀⣀⣐⣢⡭⠵⠖⣿⣿⢫⠀⠀⣠⣖⣯⣶⣶⣮⡷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀", + " ⠀⠀ ⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣾⣿⣿⣿⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⢸⡟⢉⣉⠙⣿⣿⣦⠀⣿⣿⣿⣿⣷⣲⠶⠤⠭⣭⡭⠭⠴⠶⣖⣾⣿⣿⡿⢸⢀⣼⣿⡿⠋⣉⠉⢳⠁⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣶⣿⣿⣿⣿⣶⣶⣤⣄⡀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠮⣳⣴⣫⠂⠘⣿⣿⣇⢷⢻⣿⣿⣿⣿⣿⣷⣶⣶⣶⣶⣿⣿⣿⣿⣿⢿⢃⡟⣼⣿⣿⠁⠸⣘⣢⣚⠜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠈⢧⢻ ⣿⣿⣟⠻⣿⣿⣿⣿⠛⣩⣿⣿ ⢟⡞⢀⣿⣿⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀ ", + "⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣒⣒⣦⣄⣿⣿⣿⢀⡬⣟⣯ ⣿⢷⣼⡟⢿⣿⡿⣿⣿ ⡻⣤⡀⣿⣿⣸⡠⢔⣒⡒⢤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀ ", + "⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⢾⣟⣅⠉⢎⣽⣿⣿⡏⡟⣤⣮⣿⣿ ⡏⣿⠀⠀⣿⢡⣷ ⣿⣟⢎⣷⢻⣿⣿⣾⡟⠉⣽⡇⡇⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀ ", + "⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿ ⠀⡴⣫⣭⣭⣍⡲⢄⠀⠀⠀⠀⠈⠻⠋⣠⡮⣻⣿⣿⠃⠳⣏⣼⣿⣿⣿⣿⡇⣿⣴⣴⣿⣾⣿⣿⣿⡿⣄⣩⠏⢸⣿⣿⣿⣧⡀⠛⠞⠁⠀⠀⠀⢀⣤⣺⣭⣭⣭⡝⢦⠀⠀⠀⠀⢸⣿⣿⣿⡿⠿⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠿⢿⣿⣿⣿⡇ ", + "⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⡟⠁⠀⠀⠀⠈⢻⣿⣿⣿ ⢸⢹⡟⠁⠀⠉⢫⡳⣵⣄⠀⠀⢀⠴⢊⣿⣾⣿⣿⣿⠀⠀⠀⠻⣬⣽⣿⣿⣿⣿ ⣿⣿⣿⣿⣯⣵⠏⠀⠀⢸⣿⣿⣿⣿⣿⣗⢤⡀⠀⠀⣠⣿⢟⠟⠉⠀⠈⢻⢸⡆⠀⠀⠀⢸⣿⣿⠏⣠⣤⡄⣠⣤⡌⢿⣿⣿⣿⣿⡿⢁⣤⣄⢀⣤⣄⠹⣿⣿⡇ ", + "⠀⠀⠀⠀⣿⣿⣿⠛⠛⠛⠛⠛⠛⢛⣿⣮⣿⣿⣿⠀⠀⠀⠀⠀⠀⢈⣿⣿⡟ ⠘⢏⢧⣤⡀⠀⠀⣇⢻⣿⣆⢔⢕⣵⠟⣏⣿⣿⣿⠋⣵⠚⠄⣾⣿⣿⣿⡿⠟⣛⣛⣛⣛⠻⣿⣿⣿⣿⣧⢰⠓⣏⠻⣿⣿⣿⢹⠻⣿⣿⢦⣸⣿⡏⡾⠀⠀⢠⣤⠎⡼⠀⠀⠀⠀⠸⣿⣿⠀⢿⣿⣿⣿⣿⡟⢸⣿⣿⣿⣿⡇⠸⣿⣿⣿⣿⡿⠀⣿⣿⠇ ", + "⠀⠀⠀⠀⠸⣿⣿⣧⡀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⢀⣼⣿⣿⠃ ⠀⠈⠑⠂⠁⠀⠀⣿⠸⣿⢏⢂⣾⠇⠀⣿⣿⣿⡇⡆⠹⢷⣴⣿⡿⠟⠉⣐⡀⠄⣠⡄⡠⣁⡠⠙⠻⢿⣿⣴⡾⠃⢠⢹⣿⣿⢸⠀⢹⣿⣷⢹⣿⢃⡇⠀⠀⠈⠒⠋⠀⠀⠀⠀⠀⠀⢻⣿⣆⠀⠙⠿⠟⠋⢀⣾⣿⣿⣿⣿⣷⡀⠈⠻⡿⠋⠁⣰⣿⡟⠀ ", + "⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⠟⠉⠻⣿⣿⣿⣿⣶⣿⣿⣿⣿⣷⠀ ⠀⠀⠀⠀⠀⠀⠀⢹⡀⣿⢀⣿⣿⡀⠀⢫⣿⣿⣷⣙⠒⠀⠄⠐⠂⣼⠾⣵⠾⠟⣛⣛⠺⢷⣮⠷⣢⠐⠂⠀⠀⠒⣣⣾⣿⡿⡎⠀⢠⣿⣿⡄⣿⣸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣶⣶⣶⣾⣿⣿⡿⠋⠙⢿⣿⣿⣷⣶⣶⣶⣿⣿⣿⡇⠀ ", + "⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⡇⣠⣷⡀⢹⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀ ⠀⠀⠀⠀⠀⠀⠀⠘⣟⣿⢸⣿⣿⣷⣄⡈⣾⣿⣿⣿⣿⣿⠻⡷⢺⠃⠠⠁⠈⠋⠀⠀⠉⠁⠙⡀⠘⡗⣾⠿⣿⣿⣿⣿⣿⡿⢀⣴⣿⣿⡿⢃⣯⣽⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⢁⣴⣧⡀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀ ", + "⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⡆⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣵⡞⠀⠁⠐⢁⠎⠄⣠⠀⠀⡄⠀⢳⠈⠆⠈⠈⢳⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⣸⡷⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣌⠛⢿⣿⣿⣿⣿⣿⣿⠿⠋⣠⣢⠂⠀⢂⠌⠀⠃⠀⠀⠘⠀⢢⡑⠀⠰⣵⡀⠻⢿⣿⣿⣿⣿⣿⣿⡿⠋⣰⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀ ", + " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠋⠛⠋⠛⠙⠛⠙⠛⠙⠛⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠙⠳⣤⣭⢛⣻⠿⣿⣷⣶⢞⡟⡁⢀⢄⠎⠀⠀⠀⠀⠀⡀⠁⠀⠳⢠⠀⢈⢿⢳⣶⣾⣿⠿⣟⣛⣅⡴⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠙⠛⠙⠛⠛⠋⠛⠋⠛⠋⠀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠉⠙⠛⠻⠿⠿⡟⢜⠔⡠⢊⠔⠀⡆⠀⡆⠀⠀⢡⢰⢠⠀⢢⠱⣌⢂⠃⢿⠿⠿⠟⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⢀⢤⣊⡰⠵⢺⠉⠸⠀⢰⢃⠀⠀⠀⠀⠀⠸⢸⠀⠀⡇⡞⡑⠬⢆⣑⢤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠈⠁⠀⠀⠀⠘⣾⡸⢀⡜⡾⡀⡇⠀⠀⡴⢠⢻⢦⠀⢃⡿⠀⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡎⠀⠱⡡⠐⠀⠠⠃⢢⠋⠀⢧⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢤⡀⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ", + " " + }, + [4] = { + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⠿⠿⠿⠿⢿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣶⣾⣿⣿⠀⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⠀⣿⣿⣷⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣾⣿⡿⠟⠛⠉⠉⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠉⠉⠛⠻⢿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⡿⠋⠀⠀⠀⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠙⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠃⠀⠀⣠⣶⣾⣿⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⣿⣷⣦⣄⠀⠀⠸⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⢀⣾⣿⡿⠛⠉⠀⣿⣿⡇⠀⠀⣀⣀⠀⠀⠀⠀⠀⣀⣀⠀⠀⢸⣿⣿⠀⠉⠛⢿⣿⣷⡀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣆⢸⣿⣿⠀⠀⠀⠀⣿⣿⡇⠀⢾⣿⣿⡇⠀⠀⠀⢾⣿⣿⡇⠀⢸⣿⣿⠀⠀⠀⠈⣿⣿⡇⣼⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣄⠀⠀⠀⣿⣿⡇⠀⠈⠙⠋⠀⠀⠀⠀⠈⠙⠋⠀⠀⢸⣿⣿⠀⠀⠀⣰⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⣷⣶⣶⣿⣿⣿⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣿⣿⣿⣶⣶⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠛⠛⠛⠛⠛⠛⢻⣿⣿⠛⣿⣿⣿⢻⣿⣿⠛⠛⠛⠛⠛⠛⠛⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⠀⢸⣿⣿⠀⣿⣿⣿⢸⣿⣿⠀⠀⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣈⣉⣉⣉⣉⡉⢹⣿⣿⠀⢸⣿⣿⠀⣿⣿⣿⢸⣿⣿⠀⠀⣿⣿⡏⢉⣉⣉⣉⣉⣁⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⢸⣿⣿⠀⣿⣿⣿⢸⣿⣿⠀⠀⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇⢸⣿⣿⠀⢸⣿⣿⠀⣿⣿⣿⢸⣿⣿⠀⠀⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇⢸⣿⣿⠀⢸⣿⣿⠀⣿⣿⣿⢸⣿⣿⠀⠀⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡇⢸⣿⣿⣄⣼⣿⣿⠀⣿⣿⣿⠸⣿⣿⣆⣠⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣄⠻⢿⣿⣿⠿⢋⣴⣿⣿⣿⣦⡙⠿⣿⣿⡿⠛⣠⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣷⣶⣤⣴⣶⣿⣿⠿⠙⢿⣿⣿⣶⣦⣴⣶⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⠿⠛⠋⠁⠀⠀⠀⠈⠙⠛⠿⠿⠛⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + }, + [5] = { + [[ ██████ ]], + [[ ████▒▒▒▒▒▒████ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ]], + [[ ██▒▒▒▒▒▒ ▒▒▓▓▒▒▒▒▒▒ ▓▓▓▓ ]], + [[ ██▒▒▒▒▒▒ ▒▒▓▓▒▒▒▒▒▒ ▒▒▓▓ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ]], + [[ ██▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒██▒▒▒▒██ ]], + [[ ████ ██▒▒██ ██▒▒▒▒██ ██▒▒██ ]], + [[ ██ ██ ████ ████ ]], + }, + [7] = { + "⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣾⣿⣿⣿⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣶⣿⣿⣿⣿⣶⣶⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣶⣶⣿⣿⣿⣷⣶⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⡿⠿⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠿⢿⣿⣿⣿⡇⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⡟⠁⠀⠀⠀⠈⢻⣿⣿⣿⠀⠀⠀⠀⠀⠀⢸⣿⣿⠏⣠⣤⡄⣠⣤⡌⢿⣿⣿⣿⣿⡿⢁⣤⣄⢀⣤⣄⠹⣿⣿⡇⠀⠀⠀⠀⠀⢺⣿⣿⡿⠋⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠛⠛⠛⠛⠛⠛⢛⣿⣮⣿⣿⣿⠀⠀⠀⠀⠀⠀⢈⣿⣿⡟⠀⠀⠀⠀⠀⠀⠸⣿⣿⠀⢿⣿⣿⣿⣿⡟⢸⣿⣿⣿⣿⡇⠸⣿⣿⣿⣿⡿⠀⣿⣿⠇⠀⠀⠀⠀⠀⢸⣿⣿⡇⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⠋⠁⠠⢴⣾⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣧⡀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⢀⣼⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⢻⣿⣆⠀⠙⠿⠟⠋⢀⣾⣿⣿⣿⣿⣷⡀⠈⠻⡿⠋⠁⣰⣿⡟⠀⠀⠀⠀⠀⠀⠀⢿⣿⣷⣄⠀⠀⠀⢀⣰⣿⣿⣿⣿⣿⣿⣷⣶⣦⣤⣄⣼⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⠟⠉⠻⣿⣿⣿⣿⣶⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣶⣶⣶⣾⣿⣿⡿⠋⠙⢿⣿⣿⣷⣶⣶⣶⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣷⣾⣿⣿⣿⡟⢻⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⡇⣠⣷⡀⢹⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⢁⣴⣧⡀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⢀⣼⣆⢘⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠋⠛⠋⠛⠙⠛⠙⠛⠙⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠙⠛⠙⠛⠛⠋⠛⠋⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠙⠛⠛⠋⠛⠋⠛⠋⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + }, + [8] = { + "⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣾⣿⣿⣿⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⡟⠁⠀⠀⠀⠈⢻⣿⣿⣿⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠛⠛⠛⠛⠛⠛⢛⣿⣮⣿⣿⣿⠀⠀⠀⠀⠀⠀⢈⣿⣿⡟⠀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣧⡀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⢀⣼⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⠟⠉⠻⣿⣿⣿⣿⣶⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⡇⣠⣷⡀⢹⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠋⠛⠋⠛⠙⠛⠙⠛⠙⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + }, + [9] = { + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣶⣿⣿⣿⣿⣶⣶⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⡿⠿⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠿⢿⣿⣿⣿⡇⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⢸⣿⣿⠏⣠⣤⡄⣠⣤⡌⢿⣿⣿⣿⣿⡿⢁⣤⣄⢀⣤⣄⠹⣿⣿⡇⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠸⣿⣿⠀⢿⣿⣿⣿⣿⡟⢸⣿⣿⣿⣿⡇⠸⣿⣿⣿⣿⡿⠀⣿⣿⠇⠀⠀⠀⠀⠀ ", + "⠀⠀⠀⠀⠀⠀⠀⢻⣿⣆⠀⠙⠿⠟⠋⢀⣾⣿⣿⣿⣿⣷⡀⠈⠻⡿⠋⠁⣰⣿⡟⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣶⣶⣶⣾⣿⣿⡿⠋⠙⢿⣿⣿⣷⣶⣶⣶⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⢁⣴⣧⡀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠙⠛⠙⠛⠛⠋⠛⠋⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", + }, + [10] = { + [[ ]], + [[ ]], + [[ ]], + [[ ]], + [[ ]], + [[ ]], + [[ ]], + [[ __ ]], + [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], + [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], + [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], + [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], + [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], + [[ Welcome       ]], + }, +} + +return banners diff --git a/.config/nvim/lua/plugins/configs/ui/heirline.lua b/.config/nvim/lua/plugins/configs/ui/heirline.lua new file mode 100644 index 0000000..211e994 --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/heirline.lua @@ -0,0 +1,215 @@ +local M = {} + +local status = require "astroui.status" +local get_icon = require("astroui").get_icon +local is_available = require("astrocore").is_available +local path_func = status.provider.filename { modify = ":.:h", fallback = "" } + +-- custom statusline +M.statusline = { + hl = { fg = "fg", bg = "bg" }, + -- Show mode text + status.component.mode { + -- enable mode text with padding as well as an icon before it + mode_text = { + icon = { kind = "Mode", padding = { left = 0, right = 1 } }, + }, + -- surround the component with a separators + surround = { + separator = "left", + }, + }, + status.component.file_info { + file_icon = { padding = { left = 0, right = 1 } }, + filename = { fallback = "Empty" }, + filetype = false, + file_modified = false, + surround = { + separator = "none", + color = "bg", + }, + }, + status.component.git_branch { + padding = { left = 2, right = 1 }, + surround = { + separator = "none", + color = "bg", + }, + }, + -- Add a icon to represent diagnostic and git git diff + -- status.component.builder { + -- provider = function() return get_icon "Diagnostic" .. "/" .. get_icon "Github" end, + -- hl = { fg = "black" }, + -- surround = { + -- separator = { " ", "" }, + -- color = "#81ab9e", + -- }, + -- }, + status.component.diagnostics { + surround = { + separator = "none", + color = "bg", + }, + }, + status.component.git_diff { + padding = { left = 1 }, + surround = { + separator = "none", + color = "bg", + }, + }, + status.component.fill(), + -- Show search counts and results + { + condition = function(self) + local query = vim.fn.getreg "/" + if query == "" then return false end + query = query:gsub([[^\V]], "") + query = query:gsub([[\<]], ""):gsub([[\>]], "") + + local search_count = vim.fn.searchcount { recompute = 1, maxcount = -1 } + if search_count.total == 0 then return false end + + self.query = query + self.count = search_count + return true + end, + status.component.builder { + provider = function(self) + return status.utils.stylize(" " .. self.query .. " " .. self.count.current .. "/" .. self.count.total, { + icon = { kind = "Search" }, + }) + end, + hl = { fg = "black" }, + surround = { + separator = "left", + color = "search_bg", + }, + }, + }, + -- Show file encoding + status.component.builder { + provider = function() + return status.utils.stylize(string.upper(vim.bo.fileencoding), { + icon = { kind = "FileEncoding", padding = { right = 1 } }, + }) + end, + hl = { fg = "text_fg" }, + padding = { right = 1 }, + }, + -- Show tab width + status.component.builder { + provider = function() + return status.utils.stylize(tostring(vim.bo.tabstop), { + icon = { kind = "TabWidth", padding = { right = 1 } }, + }) + end, + hl = { fg = "text_fg" }, + padding = { right = 1 }, + }, + -- Show Grapple tag + status.component.builder { + condition = function() + if status.condition.is_file and is_available "grapple.nvim" then return true end + return false + end, + provider = function() + local tag = tostring(require("grapple").name_or_index()) + if tag == "nil" then tag = "NO" end + return status.utils.stylize(tag, { + icon = { kind = "Grapple", padding = { right = 1 } }, + }) + end, + + hl = { fg = "text_fg" }, + padding = { right = 1 }, + }, + -- Show Codeium status + status.component.builder { + condition = function() + if status.condition.lsp_attached and is_available "neocodeium" then return true end + return false + end, + provider = function() + local codeium_status = "OFF" + if require("neocodeium.options").options.enabled == true then codeium_status = "ON" end + return status.utils.stylize(codeium_status, { + icon = { kind = "Codeium", padding = { right = 1 } }, + }) + end, + hl = { fg = "text_fg" }, + padding = { right = 1 }, + }, + status.component.lsp { + lsp_client_names = { + icon = { kind = "ActiveLSP", padding = { right = 1 } }, + }, + surround = { separator = "left" }, + }, + { + status.component.builder { + { provider = get_icon "ScrollText" }, + padding = { right = 1 }, + hl = { fg = "black" }, + surround = { + separator = { " ", "" }, + color = { main = "nav_icon_bg", left = "bg" }, + }, + }, + status.component.nav { + percentage = { padding = { left = 0 } }, + ruler = false, + scrollbar = false, + surround = { separator = { "", "" } }, + }, + }, +} + +-- custom winbar +M.winbar = { + -- store the current buffer number + init = function(self) self.bufnr = vim.api.nvim_get_current_buf() end, + fallthrough = false, -- pick the correct winbar based on condition + -- inactive winbar + { + condition = function() return not status.condition.is_active() end, + -- show the path to the file relative to the working directory + status.component.separated_path { path_func = path_func }, + -- add the file name and icon + status.component.file_info { + file_icon = { hl = status.hl.file_icon "winbar", padding = { left = 0 } }, + filename = {}, + filetype = false, + file_modified = false, + file_read_only = false, + hl = status.hl.get_attributes("winbarnc", true), + surround = false, + update = "BufEnter", + }, + }, + -- active winbar + { + -- show the path to the file relative to the working directory + status.component.separated_path { path_func = path_func }, + -- add the file name and icon + status.component.file_info { -- add file_info to breadcrumbs + file_icon = { hl = status.hl.filetype_color, padding = { left = 0 } }, + filename = {}, + filetype = false, + file_modified = false, + file_read_only = false, + hl = status.hl.get_attributes("winbar", true), + surround = false, + update = "BufEnter", + }, + -- show the breadcrumbs + status.component.breadcrumbs { + icon = { hl = true }, + hl = status.hl.get_attributes("winbar", true), + prefix = true, + padding = { left = 0 }, + }, + }, +} + +return M diff --git a/.config/nvim/lua/plugins/configs/ui/highlights.lua b/.config/nvim/lua/plugins/configs/ui/highlights.lua new file mode 100644 index 0000000..3609ec2 --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/highlights.lua @@ -0,0 +1,41 @@ +return { + init = function() -- this table overrides highlights in all themes + local get_hlgroup = require("astroui").get_hlgroup + local ui = require "astroui" + local utils = require "astrocore" + + local hl = { + -- remove background of virtual texts + DiagnosticVirtualTextError = { fg = get_hlgroup("DiagnosticError").fg, bg = "none" }, + DiagnosticVirtualTextHint = { fg = get_hlgroup("DiagnosticHint").fg, bg = "none" }, + DiagnosticVirtualTextInfo = { fg = get_hlgroup("DiagnosticInfo").fg, bg = "none" }, + DiagnosticVirtualTextWarn = { fg = get_hlgroup("DiagnosticWarn").fg, bg = "none" }, + + -- remove background of inlay hints + LspInlayHint = { fg = get_hlgroup("LspInlayHint").fg, bg = "none" }, + } + + if utils.is_available "kanagawa.nvim" and ui.config.colorscheme == "kanagawa" then + local colors = require("kanagawa.colors").setup() + local theme = colors.theme + hl = utils.extend_tbl(hl, { + Pmenu = { fg = theme.ui.shade0, bg = theme.ui.bg_p1 }, -- add `blend = vim.o.pumblend` to enable transparency + PmenuSel = { fg = "NONE", bg = theme.ui.bg_p2 }, + PmenuSbar = { bg = theme.ui.bg_m1 }, + PmenuThumb = { bg = theme.ui.bg_p2 }, + TelescopeTitle = { fg = theme.ui.special, bold = true }, + TelescopePromptNormal = { bg = theme.ui.bg_p1 }, + TelescopePromptBorder = { fg = theme.ui.bg_p1, bg = theme.ui.bg_p1 }, + TelescopeResultsNormal = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m1 }, + TelescopeResultsBorder = { fg = theme.ui.bg_m1, bg = theme.ui.bg_m1 }, + TelescopePreviewNormal = { bg = theme.ui.bg_dim }, + TelescopePromptNormalopePreviewBorder = { bg = theme.ui.bg_dim, fg = theme.ui.bg_dim }, + }) + end + + return hl + end, + astrotheme = { -- a table of overrides/changes when applying the astrotheme theme + -- Normal = { bg = "#000000" }, + }, +} diff --git a/.config/nvim/lua/plugins/configs/ui/icons.lua b/.config/nvim/lua/plugins/configs/ui/icons.lua new file mode 100644 index 0000000..7de765b --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/icons.lua @@ -0,0 +1,59 @@ +return { + -- LSP + ActiveLSP = "", + ActiveTS = "", + LSPLoaded = "", + LSPLoading1 = "⠋", + LSPLoading2 = "⠙", + LSPLoading3 = "⠹", + LSPLoading4 = "⠸", + LSPLoading5 = "⠼", + LSPLoading6 = "⠴", + LSPLoading7 = "⠦", + LSPLoading8 = "⠧", + LSPLoading9 = "⠇", + LSPLoading10 = "⠏", + -- Git + Github = "  ", + GitAdd = "", + GitBranch = "", + GitChange = "", + GitConflict = "", + GitDelete = "", + GitIgnored = "", + GitRenamed = "", + GitStaged = "✓", + GitUnstaged = "✗", + GitUntracked = "★", + Neogit = "", + -- Files + Ellipsis = "", + DefaultFile = "", + FileModified = "", + FileReadOnly = "", + FoldClosed = "", + FoldOpened = "", + FolderClosed = "", + FolderEmpty = "", + FolderOpen = "", + -- DAP + DapBreakpoint = "", + DapBreakpointCondition = "", + DapBreakpointRejected = "", + DapLogPoint = "", + DapStopped = "", + -- Diagnostics + Diagnostic = " 󰒡 ", + DiagnosticError = "", + DiagnosticHint = "", + DiagnosticInfo = "󰋼", + DiagnosticWarn = "", + -- Misc + Mode = "     ", + FileEncoding = "", + ScrollText = "", + TabWidth = "", + Search = "", + Grapple = "󰓹", + Codeium = "󱚝", +} diff --git a/.config/nvim/lua/plugins/configs/ui/lspkind.lua b/.config/nvim/lua/plugins/configs/ui/lspkind.lua new file mode 100644 index 0000000..256ccba --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/lspkind.lua @@ -0,0 +1,38 @@ +-- LSP kind symbol map +return { + Array = "", + Boolean = "", + Class = "", + Color = "", + Constant = "", + Constructor = "", + Enum = "", + EnumMember = "", + Event = "", + Field = "", + File = "", + Folder = "", + Function = "", + Interface = "", + Key = "", + Keyword = "󰌋", + Method = "", + Module = "", + Namespace = "", + Null = "", + Number = "", + Object = "", + Operator = "", + Package = "", + Property = "", + Reference = "", + Snippet = "󰗀", + String = "", + Struct = "", + Text = "󰉿", + TypeParameter = "", + Unit = "ﱦ", + Value = "", + Variable = "", +} + diff --git a/.config/nvim/lua/plugins/configs/ui/status.lua b/.config/nvim/lua/plugins/configs/ui/status.lua new file mode 100644 index 0000000..113948e --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/status.lua @@ -0,0 +1,39 @@ +return { + separators = { + left = { " ", " " }, -- separator for the left side of the statusline + right = { " ", "" }, -- separator for the right side of the statusline + -- tab = { "", "" }, + }, + colors = function(hl) + local get_hlgroup = require("astroui").get_hlgroup + -- use helper function to get highlight group properties + hl.text_fg = "#60b2a7" + hl.insert = "#a9b665" + hl.visual = "#e8b142" + hl.replace = "#ea6962" + hl.terminal = "#a89984" + hl.file_info_fg = hl.text_fg + hl.file_info_bg = "#bac2de" + hl.git_branch_fg = "#bd81b6" + hl.git_branch_bg = "#f5c2e7" + hl.lsp_fg = "black" + hl.lsp_bg = "#7fb4ca" + hl.search_bg = "#c8c093" + hl.grapple_bg = "#eba0ac" + hl.file_encoding_bg = "#f7768e" + hl.tab_width_bg = "#ff966c" + hl.nav_fg = "black" + hl.nav_bg = get_hlgroup("String").fg + hl.nav_icon_bg = hl.nav_bg + hl.normal = "#ade8f4" + return hl + end, + attributes = { + mode = { bold = true }, + file_info = { bold = false }, + git_branch = { bold = false }, + diagnostics = { bold = false }, + git_diff = { bold = false }, + lsp = { bold = false }, + }, +} diff --git a/.config/nvim/lua/plugins/configs/ui/transparent.lua b/.config/nvim/lua/plugins/configs/ui/transparent.lua new file mode 100644 index 0000000..1000a34 --- /dev/null +++ b/.config/nvim/lua/plugins/configs/ui/transparent.lua @@ -0,0 +1,39 @@ +return function(opts) + return require("astrocore").extend_tbl(opts, { + -- table: default groups + groups = { + "Normal", + "NormalNC", + "Comment", + "Constant", + "Special", + "Identifier", + "Statement", + "PreProc", + "Type", + "Underlined", + "Todo", + "String", + "Function", + "Conditional", + "Repeat", + "Operator", + "Structure", + "LineNr", + "NonText", + "SignColumn", + "CursorLineNr", + "EndOfBuffer", + }, + -- table: additional groups that should be cleared + extra_groups = { + -- "NormalFloat", + -- "NvimTreeNormal", + -- "NeoTreeNormal", + -- "NeoTreeFloatBorder", + -- "NeoTreeNormalNC", + }, + -- table: groups you don't want to clear + exclude_groups = {}, + }) +end diff --git a/.config/nvim/lua/plugins/disabled.lua b/.config/nvim/lua/plugins/disabled.lua new file mode 100644 index 0000000..d4d8f32 --- /dev/null +++ b/.config/nvim/lua/plugins/disabled.lua @@ -0,0 +1,34 @@ +-- Plugins to disable +return { + { "nvim-neo-tree/neo-tree.nvim", enabled = true }, + { "s1n7ax/nvim-window-picker", enabled = false }, + { "akinsho/toggleterm.nvim", enabled = false }, + { "NvChad/nvim-colorizer.lua", enabled = false }, + { "catppuccin/nvim", name = "catppuccin", enabled = false }, + { "rebelot/kanagawa.nvim", enabled = false }, + { "folke/tokyonight.nvim", enabled = false }, + { "f4z3r/gruvbox-material.nvim", name = "gruvbox-material", enabled = false }, + { "b0o/SchemaStore.nvim", enabled = false }, + + { "ray-x/lsp_signature.nvim", enabled = false }, + { "kmontocam/nvim-conda", enabled = false }, + { "NMAC427/guess-indent.nvim", enabled = false }, + { "lukas-reineke/indent-blankline.nvim", enabled = false }, + { "chipsenkbeil/distant.nvim", enabled = false }, + { "gen740/SmoothCursor.nvim", enabled = false }, + { "stevearc/resession.nvim", enabled = true }, + { "AstroNvim/astrotheme", enabled = false }, + { "echasnovski/mini.move", enabled = true }, + { "scottmckendry/cyberdream.nvim", enabled = false }, + { "HiPhish/rainbow-delimiters.nvim", enabled = true }, + { "xiyaowong/transparent.nvim", enabled = true }, + { "MagicDuck/grug-far.nvim", enabled = false }, + { "loctvl842/monokai-pro.nvim", enabled = false }, + { "xiyaowong/transparent.nvim", enabled = false }, + { "iamcco/markdown-preview.nvim", enabled = false }, + { "max397574/better-escape.nvim", enabled = false }, + + -- { "hrsh7th/nvim-cmp", enabled = false }, +} + +-- if true then return {} end diff --git a/.config/nvim/lua/plugins/distant.lua b/.config/nvim/lua/plugins/distant.lua new file mode 100644 index 0000000..4539e1f --- /dev/null +++ b/.config/nvim/lua/plugins/distant.lua @@ -0,0 +1,21 @@ + +-- NOTE: control remote pc +return { + "chipsenkbeil/distant.nvim", + branch = "v0.3", + event = "VimEnter", + cmd = { + "DistantLaunch", + "DistantOpen", + "DistantConnect", + "DistantInstall", + "DistantMetadata", + "DistantShell", + "DistantShell", + "DistantSystemInfo", + "DistantClientVersion", + "DistantSessionInfo", + "DistantCopy", + }, + config = function() require("distant"):setup() end, +} diff --git a/.config/nvim/lua/plugins/editor.lua b/.config/nvim/lua/plugins/editor.lua new file mode 100644 index 0000000..05bfd9c --- /dev/null +++ b/.config/nvim/lua/plugins/editor.lua @@ -0,0 +1,266 @@ +local rainbow = require "plugins.ts-rainbow" +-- Plugins that enhance editor experience +return { + { + "numToStr/Comment.nvim", + opts = { + -- Ignore empty line + ignore = "^$", + }, + keys = { + { + "", + function() require("Comment.api").toggle.linewise.count(vim.v.count > 0 and vim.v.count or 1) end, + mode = { "n", "i" }, + desc = "Comment line", + }, + { + "", + "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", + mode = { "v" }, + desc = "Comment block", + }, + }, + }, + -- Built-in terminal support + { + "akinsho/toggleterm.nvim", + opts = function(_, opts) + -- Use powershell for toggleterm on windows + -- if vim.fn.has "win32" then opts.shell = "pwsh.exe" end + end, + }, + -- File tagging and navigation + -- { + -- "cbochs/grapple.nvim", + -- dependencies = { + -- "nvim-lua/plenary.nvim", + -- { + -- "AstroNvim/astrocore", + -- opts = function(_, opts) + -- opts.mappings.n[""] = { desc = require("astroui").get_icon("Grapple", 1, true) .. "Grapple" } + -- end, + -- }, + -- }, + -- opts = { + -- scope = "git_branch", + -- }, + -- cmd = { "Grapple" }, + -- keys = { + -- { "a", "Grapple tag", desc = "Add tag to file" }, + -- { "d", "Grapple untag", desc = "Delete tag from file" }, + -- { "e", "Grapple toggle_tags", desc = "Select from tags" }, + -- { "s", "Grapple toggle_scopes", desc = "Select a project scope" }, + -- { "x", "Grapple reset", desc = "Clear tags" }, + -- { "", "Grapple cycle forward", desc = "Select next tag" }, + -- { "", "Grapple cycle backward", desc = "Select previous tag" }, + -- }, + -- }, + -- Better escape support + -- { + -- "max397574/better-escape.nvim", + -- opts = { + -- mapping = { "jj", "kk", "jk" }, + -- }, + -- }, + -- Better indent blankline + -- { + -- "shellRaining/hlchunk.nvim", + -- event = { "BufReadPre", "BufNewFile" }, + -- config = function(_, opts) + -- require("hlchunk").setup(require("astrocore").extend_tbl(opts, { + -- ignore = {}, + -- chunk = { + -- enable = true, + -- notify = false, + -- chars = { + -- -- horizontal_line = "━", + -- -- vertical_line = "┃", + -- -- left_top = "┏", + -- -- left_bottom = "┗", + -- -- right_arrow = "➤", + -- }, + -- style = "#06D001", + -- delay = 25, + -- }, + -- indent = { + -- enable = false, + -- use_treesitter = true, + -- chars = { + -- "│", + -- }, + -- }, + -- blank = { + -- enable = false, + -- chars = { + -- " ", + -- }, + -- style = { + -- { bg = "#434437" }, + -- { bg = "#2f4440" }, + -- { bg = "#433054" }, + -- { bg = "#284251" }, + -- }, + -- }, + -- line_num = { + -- enable = false, + -- }, + -- })) + -- end, + -- }, + -- AI code completion + -- { + -- "monkoose/neocodeium", + -- event = "LspAttach", + -- config = function() + -- local neocodeium = require "neocodeium" + -- neocodeium.setup() + -- vim.keymap.set("n", ";", function() require("neocodeium.commands").toggle() end) + -- vim.keymap.set("i", "", function() require("neocodeium").accept() end) + -- vim.keymap.set("i", "", function() require("neocodeium").accept_word() end) + -- vim.keymap.set("i", "", function() require("neocodeium").accept_line() end) + -- vim.keymap.set("i", "", function() require("neocodeium").cycle_or_complete() end) + -- vim.keymap.set("i", "", function() require("neocodeium").cycle_or_complete(-1) end) + -- vim.keymap.set("i", "", function() require("neocodeium").clear() end) + -- end, + -- }, + -- Multi-cursors support + { + "brenton-leighton/multiple-cursors.nvim", + version = "*", + opts = {}, + keys = { + { "", "MultipleCursorsAddDown", mode = { "n", "i", "x" } }, + { "", "MultipleCursorsAddUp", mode = { "n", "i", "x" } }, + { "", "MultipleCursorsMouseAddDelete", mode = { "n", "i" } }, + { "a", "MultipleCursorsAddMatches", mode = { "n", "x" } }, + { "", "MultipleCursorsAddJumpNextMatch", mode = { "n", "x" } }, + }, + }, + -- Better code folding + { + "kevinhwang91/nvim-ufo", + opts = { + -- Add virtual text to show how many lines are folded + fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate) + local newVirtText = {} + local suffix = (" 󰁂 %d "):format(endLnum - lnum) + local sufWidth = vim.fn.strdisplaywidth(suffix) + local targetWidth = width - sufWidth + local curWidth = 0 + for _, chunk in ipairs(virtText) do + local chunkText = chunk[1] + local chunkWidth = vim.fn.strdisplaywidth(chunkText) + if targetWidth > curWidth + chunkWidth then + table.insert(newVirtText, chunk) + else + chunkText = truncate(chunkText, targetWidth - curWidth) + local hlGroup = chunk[2] + table.insert(newVirtText, { chunkText, hlGroup }) + chunkWidth = vim.fn.strdisplaywidth(chunkText) + -- str width returned from truncate() may less than 2nd argument, need padding + if curWidth + chunkWidth < targetWidth then + suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) + end + break + end + curWidth = curWidth + chunkWidth + end + table.insert(newVirtText, { suffix, "MoreMsg" }) + return newVirtText + end, + }, + }, + + -- Better split navigation and resize + { + "mrjones2014/smart-splits.nvim", + event = "VeryLazy", -- load on very lazy for mux detection + opts = function(_, opts) + opts.ignored_filetypes = { "nofile", "quickfix", "qf", "prompt" } + opts.ignored_buftypes = { "nofile" } + end, + keys = { + { + "", + function() require("smart-splits").move_cursor_left() end, + mode = { "n" }, + desc = "Move to left split", + }, + { + "", + function() require("smart-splits").move_cursor_right() end, + mode = { "n", "t" }, + desc = "Move to right split", + }, + { + "", + function() require("smart-splits").move_cursor_up() end, + mode = { "n" }, + desc = "Move to above split", + }, + { + "", + function() require("smart-splits").move_cursor_down() end, + mode = { "n" }, + desc = "Move to below split", + }, + { + "", + function() require("smart-splits").resize_left() end, + mode = { "n" }, + desc = "Resize split left", + }, + { + "", + function() require("smart-splits").resize_right() end, + mode = { "n" }, + desc = "Resize split right", + }, + { + "", + function() require("smart-splits").resize_up() end, + mode = { "n" }, + desc = "Resize split up", + }, + { + "", + function() require("smart-splits").resize_down() end, + mode = { "n" }, + desc = "Resize split down", + }, + }, + }, + -- -- Find and replace + -- { + -- "MagicDuck/grug-far.nvim", + -- cmd = "GrugFar", + -- config = function() + -- require("grug-far").setup { + -- windowCreationCommand = "tabnew", + -- } + -- end, + -- keys = { + -- { + -- "R", + -- function() require("grug-far").grug_far { prefills = { search = vim.fn.expand "" } } end, + -- mode = { "n" }, + -- desc = "Open GrugFar", + -- }, + -- }, + -- }, + -- Markdown preview support + { + "OXY2DEV/markview.nvim", + dependencies = { + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + opts.ensure_installed = + require("astrocore").list_insert_unique(opts.ensure_installed, { "markdown", "markdown_inline" }) + end, + }, + }, + ft = { "markdown" }, + }, +} diff --git a/.config/nvim/lua/plugins/indent-scope.lua b/.config/nvim/lua/plugins/indent-scope.lua new file mode 100644 index 0000000..9cc3a9a --- /dev/null +++ b/.config/nvim/lua/plugins/indent-scope.lua @@ -0,0 +1,90 @@ +local ignore_filetypes = { + "aerial", + "alpha", + "dashboard", + "help", + "lazy", + "mason", + "neo-tree", + "NvimTree", + "neogitstatus", + "notify", + "startify", + "toggleterm", + "Trouble", +} +local ignore_buftypes = { + "nofile", + "prompt", + "quickfix", + "terminal", +} +local char = "󰥓" + +return { + "echasnovski/mini.indentscope", + event = "User AstroFile", + opts = function() + + vim.api.nvim_set_hl(0, "MiniIndentscopeSymbol", { fg = "#FF4500" }) -- Replace #FF4500 with your desired color + return { + options = { try_as_border = true, border = "both" }, + symbol = require("astrocore").plugin_opts("indent-blankline.nvim").context_char or char, + draw = { + delay = 0, + animation = function(s, n) return 10 end, + }, + } + end, + dependencies = { + { + "lukas-reineke/indent-blankline.nvim", + optional = true, + opts = { scope = { enabled = false } }, + }, + { + "AstroNvim/astrocore", + opts = { + autocmds = { + mini_indentscope = { + { + event = "FileType", + desc = "Disable indentscope for certain filetypes", + callback = function(event) + if vim.b[event.buf].miniindentscope_disable == nil then + local filetype = vim.bo[event.buf].filetype + local blankline_opts = require("astrocore").plugin_opts "indent-blankline.nvim" + if vim.tbl_contains(blankline_opts.filetype_exclude or ignore_filetypes, filetype) then + vim.b[event.buf].miniindentscope_disable = true + end + end + end, + }, + { + event = "BufWinEnter", + desc = "Disable indentscope for certain buftypes", + callback = function(event) + if vim.b[event.buf].miniindentscope_disable == nil then + local buftype = vim.bo[event.buf].buftype + local blankline_opts = require("astrocore").plugin_opts "indent-blankline.nvim" + if vim.tbl_contains(blankline_opts.buftype_exclude or ignore_buftypes, buftype) then + vim.b[event.buf].miniindentscope_disable = true + end + end + end, + }, + { + event = "TermOpen", + desc = "Disable indentscope for terminals", + callback = function(event) + if vim.b[event.buf].miniindentscope_disable == nil then + vim.b[event.buf].miniindentscope_disable = true + end + end, + }, + }, + }, + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/lsp-features.lua b/.config/nvim/lua/plugins/lsp-features.lua new file mode 100644 index 0000000..43ec8e9 --- /dev/null +++ b/.config/nvim/lua/plugins/lsp-features.lua @@ -0,0 +1,44 @@ +-- Plugins to add additional functionality for LSP +return { + -- Signature help + { + "ray-x/lsp_signature.nvim", + event = "User AstroFile", + config = function() + require("lsp_signature").setup { + bind = true, + handler_opts = { border = "rounded" }, + hint_enable = true, + + hint_prefix = "🐼 ", + debug = true, + verbose = true, + } + end, + }, + -- Additional features for Clangd + { + "p00f/clangd_extensions.nvim", + lazy = true, + ft = { "c", "cpp" }, + dependencies = { + "AstroNvim/astrocore", + opts = { + autocmds = { + clangd_extensions = { + { + event = "LspAttach", + desc = "Load clangd_extensions with clangd", + callback = function(args) + if assert(vim.lsp.get_client_by_id(args.data.client_id)).name == "clangd" then + require "clangd_extensions" + vim.api.nvim_del_augroup_by_name "clangd_extensions" + end + end, + }, + }, + }, + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/markdown-preview-nvim.lua b/.config/nvim/lua/plugins/markdown-preview-nvim.lua new file mode 100644 index 0000000..5ee3991 --- /dev/null +++ b/.config/nvim/lua/plugins/markdown-preview-nvim.lua @@ -0,0 +1,42 @@ +---@type LazySpec +return { + "iamcco/markdown-preview.nvim", + build = function(plugin) + local package_manager = vim.fn.executable "yarn" and "yarn" or vim.fn.executable "npx" and "npx -y yarn" or false + + --- HACK: Use `yarn` or `npx` when possible, otherwise throw an error + ---@see https://github.com/iamcco/markdown-preview.nvim/issues/690 + ---@see https://github.com/iamcco/markdown-preview.nvim/issues/695 + if not package_manager then error "Missing `yarn` or `npx` in the PATH" end + + local cmd = string.format( + "!cd %s && cd app && COREPACK_ENABLE_AUTO_PIN=0 %s install --frozen-lockfile", + plugin.dir, + package_manager + ) + + vim.cmd(cmd) + end, + ft = { "markdown", "markdown.mdx" }, + cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, + init = function() + local plugin = require("lazy.core.config").spec.plugins["markdown-preview.nvim"] + vim.g.mkdp_filetypes = require("lazy.core.plugin").values(plugin, "ft", true) + end, + dependencies = { + { "AstroNvim/astroui", opts = { icons = { Markdown = "" } } }, + { + "AstroNvim/astrocore", + optional = true, + opts = function(_, opts) + local maps = opts.mappings + local prefix = "M" + + maps.n[prefix] = { desc = require("astroui").get_icon("Markdown", 1, true) .. "Markdown" } + maps.n[prefix .. "p"] = { "MarkdownPreview", desc = "Preview" } + maps.n[prefix .. "s"] = { "MarkdownPreviewStop", desc = "Stop preview" } + maps.n[prefix .. "t"] = { "MarkdownPreviewToggle", desc = "Toggle preview" } + end, + }, + }, +} diff --git a/.config/nvim/lua/plugins/mason-setup.lua b/.config/nvim/lua/plugins/mason-setup.lua new file mode 100644 index 0000000..ba0a838 --- /dev/null +++ b/.config/nvim/lua/plugins/mason-setup.lua @@ -0,0 +1,40 @@ +return { + "williamboman/mason.nvim", + opts = function() + require("mason").setup { + ui = { + ---@since 1.0.0 + -- Whether to automatically check for new versions when opening the :Mason window. + check_outdated_packages_on_open = true, + + ---@since 1.0.0 + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "single", + + ---@since 1.0.0 + -- Width of the window. Accepts: + -- - Integer greater than 1 for fixed width. + -- - Float in the range of 0-1 for a percentage of screen width. + width = 0.8, + + ---@since 1.0.0 + -- Height of the window. Accepts: + -- - Integer greater than 1 for fixed height. + -- - Float in the range of 0-1 for a percentage of screen height. + height = 0.9, + + icons = { + ---@since 1.0.0 + -- The list icon to use for installed packages. + package_installed = "  ", + ---@since 1.0.0 + -- The list icon to use for packages that are installing, or queued for installation. + package_pending = "  ", + ---@since 1.0.0 + -- The list icon to use for packages that are not installed. + package_uninstalled = "  ", + }, + }, + } + end, +} diff --git a/.config/nvim/lua/plugins/mason.lua b/.config/nvim/lua/plugins/mason.lua new file mode 100644 index 0000000..9e9e93f --- /dev/null +++ b/.config/nvim/lua/plugins/mason.lua @@ -0,0 +1,46 @@ +-- Customize Mason plugins + +---@type LazySpec +return { + -- use mason-lspconfig to configure LSP installations + { + "williamboman/mason-lspconfig.nvim", + -- overrides `require("mason-lspconfig").setup(...)` + opts = function(_, opts) + -- add more things to the ensure_installed table protecting against community packs modifying it + opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { + "lua_ls", + "clangd", + "basedpyright", + "ruff", + }) + end, + }, + -- 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 = function(_, opts) + -- add more things to the ensure_installed table protecting against community packs modifying it + opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { + "stylua", + "clang-format", + -- "black", + "prettier", + }) + end, + }, + { + "jay-babu/mason-nvim-dap.nvim", + -- add this to lazy load dap-related plugins + init = function() end, + -- overrides `require("mason-nvim-dap").setup(...)` + opts = function(_, opts) + -- add more things to the ensure_installed table protecting against community packs modifying it + opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { + "codelldb", + "python", + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/mini-icons.lua b/.config/nvim/lua/plugins/mini-icons.lua new file mode 100644 index 0000000..8d228ae --- /dev/null +++ b/.config/nvim/lua/plugins/mini-icons.lua @@ -0,0 +1,47 @@ +return { + "echasnovski/mini.icons", + opts = function(_, opts) + if vim.g.icons_enabled ~= false then + opts.style = "glyph" -- Use glyph icons when available + else + opts.style = "ascii" -- Fallback to ASCII if glyphs are disabled + end + end, + lazy = true, + specs = { + { "nvim-tree/nvim-web-devicons", enabled = false, optional = true }, + { + "nvim-neo-tree/neo-tree.nvim", + 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, + }, + }, + }, + }, + }, + init = function() + package.preload["nvim-web-devicons"] = function() + require("mini.icons").mock_nvim_web_devicons() + return package.loaded["nvim-web-devicons"] + end + end, +} diff --git a/.config/nvim/lua/plugins/mini-move.lua b/.config/nvim/lua/plugins/mini-move.lua new file mode 100644 index 0000000..b8d119d --- /dev/null +++ b/.config/nvim/lua/plugins/mini-move.lua @@ -0,0 +1,40 @@ +return { + "echasnovski/mini.move", + keys = function(_, keys) + local plugin = require("lazy.core.config").spec.plugins["mini.move"] + local opts = require("lazy.core.plugin").values(plugin, "opts", false) -- resolve mini.clue options + -- Populate the keys based on the user's options + local mappings = { + { opts.mappings.line_left, desc = "Move line left" }, + { opts.mappings.line_right, desc = "Move line right" }, + { opts.mappings.line_down, desc = "Move line down" }, + { opts.mappings.line_up, desc = "Move line up" }, + { opts.mappings.left, desc = "Move selection left", mode = "v" }, + { opts.mappings.right, desc = "Move selection right", mode = "v" }, + { opts.mappings.down, desc = "Move selection down", mode = "v" }, + { opts.mappings.up, desc = "Move selection up", mode = "v" }, + } + mappings = vim.tbl_filter(function(m) return m[1] and #m[1] > 0 end, mappings) + return vim.list_extend(mappings, keys) + end, + opts = { + mappings = { + left = "", + right = "", + down = "", + up = "", + line_left = "", + line_right = "", + line_down = "", + line_up = "", + }, + }, + specs = { + { + "bamboo", -- Replace with the correct name for the Bamboo colorscheme package if necessary + optional = true, + ---@type BambooOptions -- Adjust type if Bamboo has specific options + opts = { integrations = { mini = true } }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/motion.lua b/.config/nvim/lua/plugins/motion.lua new file mode 100644 index 0000000..837632e --- /dev/null +++ b/.config/nvim/lua/plugins/motion.lua @@ -0,0 +1,134 @@ +-- Plugins related to motion +return { + -- Faster change/delete/replace delimiter pairs + { + "echasnovski/mini.surround", + opts = { n_lines = 200 }, + keys = { + { "sa", mode = { "n", "x" }, desc = "Add surrounding" }, + { "sd", mode = { "n", "x" }, desc = "Delete surrounding" }, + { "sr", mode = { "n", "x" }, desc = "Replace surrounding" }, + { "sf", mode = { "n", "x" }, desc = "Find right surrounding" }, + { "sF", mode = { "n", "x" }, desc = "Find left surrounding" }, + { "sh", mode = { "n", "x" }, desc = "Highlight surrounding" }, + { "sn", mode = { "n", "x" }, desc = "Update `MiniSurround.config.n_lines`" }, + }, + }, + -- Brackets splitjoin + { + "Wansmer/treesj", + cmd = { "TSJToggle", "TSJSplit", "TSJJoin" }, + opts = { + use_default_keymaps = false, + max_join_length = 150, + }, + keys = { + { "gs", "TSJToggle", mode = { "n" }, desc = "Toggle splitjoin" }, + }, + }, + -- { + -- "echasnovski/mini.ai", + -- event = "User AstroFile", + -- opts = function() + -- -- Register to which-key + -- local i = { + -- [" "] = "Whitespace", + -- ["?"] = "User Prompt", + -- _ = "Underscore", + -- a = "Argument", + -- b = "Paired ), ], }", + -- c = "Class", + -- d = "Digit(s)", + -- e = "Word in CamelCase & snake_case", + -- f = "Function", + -- g = "Entire file", + -- o = "Block, conditional, loop", + -- q = "Quote `, \", '", + -- t = "Tag", + -- u = "Use/call function & method", + -- U = "Use/call without dot in name", + -- } + -- local a = vim.deepcopy(i) + -- for k, v in pairs(a) do + -- a[k] = v:gsub(" including.*", "") + -- end + + -- local ic = vim.deepcopy(i) + -- local ac = vim.deepcopy(a) + -- for key, name in pairs { n = "Next", l = "Last" } do + -- i[key] = vim.tbl_extend("force", { name = "Inside " .. name .. " textobject" }, ic) + -- a[key] = vim.tbl_extend("force", { name = "Around " .. name .. " textobject" }, ac) + -- end + -- require("which-key").register { + -- mode = { "o", "x" }, + -- i = i, + -- a = a, + -- } + + -- -- define custom textobjects + -- local ai = require "mini.ai" + -- return { + -- n_lines = 500, + -- custom_textobjects = { + -- o = ai.gen_spec.treesitter { -- code block + -- a = { "@block.outer", "@conditional.outer", "@loop.outer" }, + -- i = { "@block.inner", "@conditional.inner", "@loop.inner" }, + -- }, + -- f = ai.gen_spec.treesitter { a = "@function.outer", i = "@function.inner" }, -- function + -- c = ai.gen_spec.treesitter { a = "@class.outer", i = "@class.inner" }, -- class + -- t = { "<([%p%w]-)%f[^<%w][^<>]->.-", "^<.->().*()$" }, -- tags + -- d = { "%f[%d]%d+" }, -- digits + -- e = { -- Word with case + -- { "%u[%l%d]+%f[^%l%d]", "%f[%S][%l%d]+%f[^%l%d]", "%f[%P][%l%d]+%f[^%l%d]", "^[%l%d]+%f[^%l%d]" }, + -- "^().*()$", + -- }, + -- u = ai.gen_spec.function_call(), -- u for "Usage" + -- U = ai.gen_spec.function_call { name_pattern = "[%w_]" }, -- without dot in function name + -- }, + -- } + -- end, + -- }, + -- Better move by word + { + "chrisgrieser/nvim-spider", + opts = {}, + keys = { + { "w", "lua require('spider').motion('w')", mode = { "n", "o", "x" }, desc = "Spider-w" }, + { "e", "lua require('spider').motion('e')", mode = { "n", "o", "x" }, desc = "Spider-e" }, + { "b", "lua require('spider').motion('b')", mode = { "n", "o", "x" }, desc = "Spider-b" }, + { "ge", "lua require('spider').motion('ge')", mode = { "n", "o", "x" }, desc = "Spider-ge" }, + }, + }, + -- Duplicate line/block up/down + { + "hinell/duplicate.nvim", + keys = { + { "", "LineDuplicate -1", mode = { "n" }, desc = "Duplicate line up" }, + { "", "LineDuplicate +1", mode = { "n" }, desc = "Duplicate line down" }, + { "", "VisualDuplicate -1", mode = { "x" }, desc = "Duplicate block up" }, + { "", "VisualDuplicate +1", mode = { "x" }, desc = "Duplicate block down" }, + }, + }, + -- Better character motion + { + "folke/flash.nvim", + event = "VeryLazy", + opts = {}, + keys = { + { "gj", function() require("flash").jump() end, mode = { "n", "x", "o" }, desc = "Flash" }, + { + "gJ", + function() require("flash").treesitter() end, + mode = { "n", "x", "o" }, + desc = "Flash Treesitter", + }, + { "r", function() require("flash").remote() end, mode = "o", desc = "Remote Flash" }, + { + "R", + function() require("flash").treesitter_search() end, + mode = { "x", "o" }, + desc = "Treesitter Search", + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/multiple-cursor.lua b/.config/nvim/lua/plugins/multiple-cursor.lua new file mode 100644 index 0000000..2226b00 --- /dev/null +++ b/.config/nvim/lua/plugins/multiple-cursor.lua @@ -0,0 +1,40 @@ +return { + "brenton-leighton/multiple-cursors.nvim", + event = 'VimEnter', + cmd = { + "MultipleCursorsAddDown", + "MultipleCursorsAddUp", + "MultipleCursorsMouseAddDelete", + "MultipleCursorsAddMatches", + "MultipleCursorsAddMatchesV", + "MultipleCursorsAddJumpNextMatch", + "MultipleCursorsJumpNextMatch", + "MultipleCursorsLock", + }, + dependencies = { + "AstroNvim/astrocore", + opts = function(_, opts) + local maps = opts.mappings + for lhs, map in pairs { + [""] = { "MultipleCursorsAddDown", desc = "Add cursor down" }, + [""] = { "MultipleCursorsAddUp", desc = "Add cursor up" }, + [""] = { "MultipleCursorsMouseAddDelete", desc = "Add cursor with mouse" }, + } do + maps.n[lhs] = map + maps.i[lhs] = map + end + local prefix = "c" + for lhs, map in pairs { + [prefix .. "a"] = { "MultipleCursorsAddMatches", desc = "Add cursor matches" }, + [prefix .. "A"] = { "MultipleCursorsAddMatchesV", desc = "Add cursor matches in previous visual area" }, + [prefix .. "j"] = { "MultipleCursorsAddJumpNextMatch", desc = "Add cursor and jump to next match" }, + [prefix .. "J"] = { "MultipleCursorsJumpNextMatch", desc = "Move cursor to next match" }, + [prefix .. "l"] = { "MultipleCursorsLock", desc = "Lock virtual cursors" }, + } do + maps.n[lhs] = map + maps.x[lhs] = map + end + end, + }, + opts = {}, +} diff --git a/.config/nvim/lua/plugins/multiple-visual.lua b/.config/nvim/lua/plugins/multiple-visual.lua new file mode 100644 index 0000000..ab1b1e3 --- /dev/null +++ b/.config/nvim/lua/plugins/multiple-visual.lua @@ -0,0 +1,4 @@ +return { + "mg979/vim-visual-multi", + event = "VeryLazy", +} diff --git a/.config/nvim/lua/plugins/neo-tree.lua b/.config/nvim/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..637600c --- /dev/null +++ b/.config/nvim/lua/plugins/neo-tree.lua @@ -0,0 +1,34 @@ +-- NOTE: always show hidden files and dot files +return { + "nvim-neo-tree/neo-tree.nvim", + opts = { + source_selector = { + winbar = false, + }, + filesystem = { + filtered_items = { + visible = true, + show_hidden_count = true, + hide_dotfiles = true, + hide_gitignored = true, + hide_by_name = { + -- '.zip', + -- '.rar', + -- '.pdf', + -- '.DS_Store', + -- 'thumbs.db', + }, + never_show = {}, + + never_show_by_pattern = { -- uses glob style patterns + '*.zip', + '*.rar', + '*.pdf', + }, + }, + }, + enable_git_status = false, + enable_diagnostics = false, + git_status_async = false, + }, +} diff --git a/.config/nvim/lua/plugins/noice.lua b/.config/nvim/lua/plugins/noice.lua new file mode 100644 index 0000000..ca85a39 --- /dev/null +++ b/.config/nvim/lua/plugins/noice.lua @@ -0,0 +1,109 @@ +return { + "folke/noice.nvim", + event = "VeryLazy", + dependencies = { "MunifTanjim/nui.nvim" }, + + config = function() + require("noice").setup { + -- Configuration here, or leave empty to use defaults + views = { }, + messages = { + enabled = false, -- disables the Noice messages UI + }, + notify = { + enabled = false, -- disables Noice notifications + }, + lsp = { + progress = { + enabled = false, + }, + hover = { + enabled = false, -- disables Noice LSP hover + }, + signature = { + enabled = false, -- disables Noice LSP signature help + }, + message = { + enabled = false, + }, + }, + presets = { + bottom_search = false, -- use a classic bottom cmdline for search + command_palette = true, -- position the cmdline and popupmenu together + long_message_to_split = false, -- long messages will be sent to a split + inc_rename = false, -- enables an input dialog for inc-rename.nvim + lsp_doc_border = false, -- add a border to hover docs and signature help + }, + + routes = { + -- disable "written" notification + { + filter = { event = "msg_show", kind = "", find = "written" }, + opts = { skip = true }, + }, + -- disable paste/undo notification + { + filter = { event = "msg_show", find = "^%d+ more lines" }, + opts = { skip = true }, + }, + -- disable delete/undo notification + { + filter = { event = "msg_show", find = "^%d+ fewer lines" }, + opts = { skip = true }, + }, + -- disable yank notification + { + filter = { event = "msg_show", find = "^%d+ lines yanked$" }, + opts = { skip = true }, + }, + -- disable move notification + { + filter = { event = "msg_show", find = "^%d+ lines moved$" }, + }, + }, + } + end, + specs = { + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + if opts.ensure_installed ~= "all" then + opts.ensure_installed = require("astrocore").list_insert_unique( + opts.ensure_installed, + { "bash", "markdown", "markdown_inline", "regex", "vim" } + ) + end + end, + }, + { + "AstroNvim/astrolsp", + optional = true, + ---@param opts AstroLSPOpts + opts = function(_, opts) + -- No need to manage lsp_handlers as noice is not handling them now + end, + }, + { + "heirline.nvim", + optional = true, + opts = function(_, opts) + local noice_opts = require("astrocore").plugin_opts "noice.nvim" + if vim.tbl_get(noice_opts, "lsp", "progress", "enabled") ~= false then -- check if lsp progress is enabled + opts.statusline[9] = require("astroui.status").component.lsp { lsp_progress = false } + end + end, + }, + { + "folke/edgy.nvim", + optional = true, + opts = function(_, opts) + if not opts.bottom then opts.bottom = {} end + table.insert(opts.bottom, { + ft = "noice", + size = { height = 0.4 }, + filter = function(_, win) return vim.api.nvim_win_get_config(win).relative == "" end, + }) + end, + }, + }, +} diff --git a/.config/nvim/lua/plugins/none-ls.lua b/.config/nvim/lua/plugins/none-ls.lua new file mode 100644 index 0000000..4f51935 --- /dev/null +++ b/.config/nvim/lua/plugins/none-ls.lua @@ -0,0 +1,22 @@ +-- Customize None-ls sources + +---@type LazySpec +return { + "nvimtools/none-ls.nvim", + opts = function(_, opts) + -- 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/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/formatting + -- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics + opts.sources = { + -- Set a formatter + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.clang_format, + -- null_ls.builtins.formatting.black, + null_ls.builtins.formatting.prettier, + } + return opts + end, +} diff --git a/.config/nvim/lua/plugins/nvim-dap-ui.lua b/.config/nvim/lua/plugins/nvim-dap-ui.lua new file mode 100644 index 0000000..401bcd0 --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-dap-ui.lua @@ -0,0 +1,50 @@ +return { + "rcarriga/nvim-dap-ui", + requires = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" }, + opts = { + eval = true, + mappings = { + edit = "e", + expand = { "", "<2-LeftMouse>" }, + open = "o", + remove = "d", + repl = "r", + toggle = "t" + }, + + layouts = { + { + elements = { + { + id = "repl", + size = 0.5, + }, + { + id = "console", + size = 0.5, + }, + }, + position = "left", + size = 40, + }, + { + elements = { + { + id = "scopes", + size = 0.25, + }, + { + id = "breakpoints", + size = 0.25, + }, + -- { + -- id = "stacks", + -- size = 0.25, + -- }, + }, + position = "bottom", + size = 20, + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/nvim-dap-virtual-text.lua b/.config/nvim/lua/plugins/nvim-dap-virtual-text.lua new file mode 100644 index 0000000..6e8fcde --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-dap-virtual-text.lua @@ -0,0 +1,9 @@ +return { + "theHamsta/nvim-dap-virtual-text", + event = "User AstroFile", + opts = { + commented = false, + enabled = true, + enabled_commands = true, + }, +} diff --git a/.config/nvim/lua/plugins/smooth-cursor.lua b/.config/nvim/lua/plugins/smooth-cursor.lua new file mode 100644 index 0000000..aa6ef32 --- /dev/null +++ b/.config/nvim/lua/plugins/smooth-cursor.lua @@ -0,0 +1,75 @@ +return { + "gen740/SmoothCursor.nvim", + config = function() + require("smoothcursor").setup { + type = "default", -- Cursor movement calculation method, choose "default", "exp" (exponential) or "matrix". + + cursor = "", -- Cursor shape (requires Nerd Font). Disabled in fancy mode. + texthl = "SmoothCursor", -- Highlight group. Default is { bg = nil, fg = "#FFD400" }. Disabled in fancy mode. + linehl = nil, -- Highlights the line under the cursor, similar to 'cursorline'. "CursorLine" is recommended. Disabled in fancy mode. + + fancy = { + enable = true, -- enable fancy mode + head = { cursor = "▷", texthl = "SmoothCursor", linehl = nil }, -- false to disable fancy head + body = { + { cursor = "󰝥", texthl = "SmoothCursorRed" }, + { cursor = "󰝥", texthl = "SmoothCursorOrange" }, + { cursor = "●", texthl = "SmoothCursorYellow" }, + { cursor = "●", texthl = "SmoothCursorGreen" }, + { cursor = "•", texthl = "SmoothCursorAqua" }, + { cursor = ".", texthl = "SmoothCursorBlue" }, + { cursor = ".", texthl = "SmoothCursorPurple" }, + }, + tail = { cursor = nil, texthl = "SmoothCursor" }, -- false to disable fancy tail + }, + + matrix = { -- Loaded when 'type' is set to "matrix" + head = { + -- Picks a random character from this list for the cursor text + cursor = require "smoothcursor.matrix_chars", + -- Picks a random highlight from this list for the cursor text + texthl = { + "SmoothCursor", + }, + linehl = nil, -- No line highlight for the head + }, + body = { + length = 6, -- Specifies the length of the cursor body + -- Picks a random character from this list for the cursor body text + cursor = require "smoothcursor.matrix_chars", + -- Picks a random highlight from this list for each segment of the cursor body + texthl = { + "SmoothCursorGreen", + }, + }, + tail = { + -- Picks a random character from this list for the cursor tail (if any) + cursor = nil, + -- Picks a random highlight from this list for the cursor tail + texthl = { + "SmoothCursor", + }, + }, + unstop = false, -- Determines if the cursor should stop or not (false means it will stop) + }, + + autostart = true, -- Automatically start SmoothCursor + always_redraw = true, -- Redraw the screen on each update + flyin_effect = nil, -- Choose "bottom" or "top" for flying effect + speed = 25, -- Max speed is 100 to stick with your current position + intervals = 35, -- Update intervals in milliseconds + priority = 10, -- Set marker priority + timeout = 3000, -- Timeout for animations in milliseconds + threshold = 3, -- Animate only if cursor moves more than this many lines + max_threshold = nil, -- If you move more than this many lines, don't animate (if `nil`, deactivate check) + disable_float_win = false, -- Disable in floating windows + enabled_filetypes = nil, -- Enable only for specific file types, e.g., { "lua", "vim" } + disabled_filetypes = nil, -- Disable for these file types, ignored if enabled_filetypes is set. e.g., { "TelescopePrompt", "NvimTree" } + -- Show the position of the latest input mode positions. + -- A value of "enter" means the position will be updated when entering the mode. + -- A value of "leave" means the position will be updated when leaving the mode. + -- `nil` = disabled + show_last_positions = nil, + } + end, +} diff --git a/.config/nvim/lua/plugins/todo-comments.lua b/.config/nvim/lua/plugins/todo-comments.lua new file mode 100644 index 0000000..818a833 --- /dev/null +++ b/.config/nvim/lua/plugins/todo-comments.lua @@ -0,0 +1,25 @@ +return { + "folke/todo-comments.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + + 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" }, + GOAL = { 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" } }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..55af936 --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,27 @@ +-- Customize Treesitter + +---@type LazySpec +return { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + -- add more things to the ensure_installed table protecting against community packs modifying it + opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, { + "lua", + "c", + "cpp", + "python", + -- "javascript", + }) + opts.highlight = { + enable = true, + disable = { "c", "rust", "tsx", "javascript", "python"}, + additional_vim_regex_highlighting = false, + custom_captures = { + -- Highlight local variables + ["variable.local"] = "Identifier", + }, + } + + vim.api.nvim_set_hl(0, "Identifier", { fg = "#55ffff" }) + end, +} diff --git a/.config/nvim/lua/plugins/ts-rainbow.lua b/.config/nvim/lua/plugins/ts-rainbow.lua new file mode 100644 index 0000000..6f7802a --- /dev/null +++ b/.config/nvim/lua/plugins/ts-rainbow.lua @@ -0,0 +1,33 @@ +return { + { + "HiPhish/rainbow-delimiters.nvim", + dependencies = { + "nvim-treesitter/nvim-treesitter", + { + "AstroNvim/astrocore", + opts = { + mappings = { + n = { + ["u("] = { + function() + local bufnr = vim.api.nvim_get_current_buf() + require("rainbow-delimiters").toggle(bufnr) + require("astrocore").notify( + string.format( + "Buffer rainbow delimeters %s", + require("rainbow-delimiters").is_enabled(bufnr) and "on" or "off" + ) + ) + end, + desc = "Toggle rainbow delimeters (buffer)", + }, + }, + }, + }, + }, + }, + event = "User AstroFile", + main = "rainbow-delimiters.setup", + opts = {}, + }, +} diff --git a/.config/nvim/lua/plugins/ui.lua b/.config/nvim/lua/plugins/ui.lua new file mode 100644 index 0000000..26e24e8 --- /dev/null +++ b/.config/nvim/lua/plugins/ui.lua @@ -0,0 +1,41 @@ +-- Plugins related to UI +return { + { + "goolord/alpha-nvim", + dependencies = { "echasnovski/mini.icons" }, + opts = function(_, opts) + -- customize the dashboard header + opts.section.header.val = require("plugins.configs.ui.alpha")[10] + opts.section.buttons.val = {} + end, + -- config = function() require("alpha").setup(require("alpha.themes.startify").config) end, + }, + { + "rebelot/heirline.nvim", + opts = function(_, opts) + opts.statusline = require("plugins.configs.ui.heirline").statusline + opts.winbar = require("plugins.configs.ui.heirline").winbar + end, + }, + { + "rcarriga/nvim-notify", + opts = function(_, opts) + -- Do this to prevent the warning + opts.background_colour = "#000000" + opts.timeout = 2000 + opts.fps = 60 + opts.render = "compact" + opts.top_down = false + end, + }, + + -- Transparent background + { + "xiyaowong/transparent.nvim", + lazy = false, + opts = function(_, opts) opts = require "plugins.configs.ui.transparent"(opts) end, + keys = { + { "uT", "TransparentToggle", desc = "Toggle transparent" }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/ultimate-autopair.lua b/.config/nvim/lua/plugins/ultimate-autopair.lua new file mode 100644 index 0000000..26edc94 --- /dev/null +++ b/.config/nvim/lua/plugins/ultimate-autopair.lua @@ -0,0 +1,64 @@ +return { + "altermo/ultimate-autopair.nvim", + event = "InsertEnter", + branch = "v0.6", --recommended as each new version will have breaking changes + opts = { + -- disable autopair in the command line: https://github.com/altermo/ultimate-autopair.nvim/issues/8 + cmap = false, + extensions = { + cond = { + -- disable in comments + -- https://github.com/altermo/ultimate-autopair.nvim/blob/6fd0d6aa976a97dd6f1bed4d46be1b437613a52f/Q%26A.md?plain=1#L26 + cond = { + function(fn) return not fn.in_node "comment" end, + }, + }, + -- get fly mode working on strings: + -- https://github.com/altermo/ultimate-autopair.nvim/issues/33 + fly = { + nofilter = true, + }, + }, + config_internal_pairs = { + { '"', '"', fly = true }, + { "'", "'", fly = true }, + { "[", "]", fly = true }, + { "{", "}", fly = true }, + { "(", ")", fly = true }, + -- { "<", ">", fly = true }, + }, + }, + dependencies = { + { + "AstroNvim/astrocore", + opts = { + mappings = { + n = { + ["ua"] = { + desc = "Toggle Ultimate Autopair", + function() + local notify = require("astrocore").notify + local function bool2str(bool) return bool and "on" or "off" end + local ok, ultimate_autopair = pcall(require, "ultimate-autopair") + if ok then + ultimate_autopair.toggle() + vim.g.ultimate_autopair_enabled = require("ultimate-autopair.core").disable + notify(string.format("ultimate-autopair %s", bool2str(not vim.g.ultimate_autopair_enabled))) + else + notify "ultimate-autopair not available" + end + end, + }, + }, + }, + }, + }, + }, + specs = { + { + "windwp/nvim-autopairs", + optional = true, + enabled = false, + }, + }, +} diff --git a/.config/nvim/lua/polish.lua b/.config/nvim/lua/polish.lua new file mode 100644 index 0000000..a9bca36 --- /dev/null +++ b/.config/nvim/lua/polish.lua @@ -0,0 +1,6 @@ +-- This will run last in the setup process and is a good place to configure +-- things like custom filetypes. This just pure lua so anything that doesn't +-- fit in the normal config locations above can go here + +-- Run autocommands +require("core.autocmds") \ No newline at end of file diff --git a/.config/nvim/neovim.yml b/.config/nvim/neovim.yml new file mode 100644 index 0000000..b9235ab --- /dev/null +++ b/.config/nvim/neovim.yml @@ -0,0 +1,6 @@ +--- +base: lua51 + +globals: + vim: + any: true diff --git a/.config/nvim/selene.toml b/.config/nvim/selene.toml new file mode 100644 index 0000000..e7005c3 --- /dev/null +++ b/.config/nvim/selene.toml @@ -0,0 +1,8 @@ +std = "neovim" + +[rules] +global_usage = "allow" +if_same_then_else = "allow" +incorrect_standard_library_use = "allow" +mixed_table = "allow" +multiple_statements = "allow"