diff --git a/navigate/.config/navigate/bookmarks.conf b/navigate/.config/navigate/bookmarks.conf new file mode 100644 index 0000000..1aa408a --- /dev/null +++ b/navigate/.config/navigate/bookmarks.conf @@ -0,0 +1,3 @@ +doc=/home/quak/collection +test=/home/quak/ +dot=/home/quak/dotfiles/ diff --git a/navigate/.config/navigate/navigate.conf b/navigate/.config/navigate/navigate.conf new file mode 100644 index 0000000..dc85706 --- /dev/null +++ b/navigate/.config/navigate/navigate.conf @@ -0,0 +1,17 @@ +[general] +show_stack_on_push = false +show_stack_on_pop = false +show_stack_on_bookmark = false + +[format] +stack_separator = " - " +bookmarks_separator = " - " +align_separators = true + +[styles] +stack_number = "default" +stack_separator = "cyan" +stack_path = "default" +bookmarks_name = "default" +bookmarks_seperator = "cyan" +bookmarks_path = "default" diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua index 33683e5..20e1d0d 100644 --- a/nvim/.config/nvim/init.lua +++ b/nvim/.config/nvim/init.lua @@ -1,15 +1,21 @@ require("zegonix") - -- [[ Install `lazy.nvim` plugin manager ]] -- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info -local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = 'https://github.com/folke/lazy.nvim.git' - local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath } - if vim.v.shell_error ~= 0 then - error('Error cloning lazy.nvim:\n' .. out) - end + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "--branch=stable", + lazyrepo, + lazypath, + }) + if vim.v.shell_error ~= 0 then + error("Error cloning lazy.nvim:\n" .. out) + end end ---@diagnostic disable-next-line: undefined-field vim.opt.rtp:prepend(lazypath) @@ -24,11 +30,14 @@ vim.opt.rtp:prepend(lazypath) -- :Lazy update -- -- NOTE: Here is where you install your plugins. -require('lazy').setup({ - require('plugins.neo-tree'), - require('plugins.bufferline'), - require('plugins.lualine'), - require('plugins.treesitter'), - require('plugins.telescope'), --- require('plugins.lsp'), +require("lazy").setup({ + require("plugins.alpha"), + require("plugins.autocompletion"), + require("plugins.formatter"), + require("plugins.lsp"), + require("plugins.lualine"), + require("plugins.misc"), + require("plugins.neo-tree"), + require("plugins.telescope"), + require("plugins.treesitter"), }) diff --git a/nvim/.config/nvim/lua/plugins/alpha.lua b/nvim/.config/nvim/lua/plugins/alpha.lua new file mode 100644 index 0000000..7024f19 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/alpha.lua @@ -0,0 +1,24 @@ +return { + 'goolord/alpha-nvim', + dependencies = { + 'nvim-tree/nvim-web-devicons', + }, + + config = function() + local alpha = require 'alpha' + local dashboard = require 'alpha.themes.startify' + + dashboard.section.header.val = { + [[ ]], + [[ ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ]], + [[ ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ]], + [[ ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ]], + [[ ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ]], + [[ ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ]], + [[ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ]], + [[ ]], + } + + alpha.setup(dashboard.opts) + end, + } \ No newline at end of file diff --git a/nvim/.config/nvim/lua/plugins/autocompletion.lua b/nvim/.config/nvim/lua/plugins/autocompletion.lua new file mode 100644 index 0000000..88ae2bd --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/autocompletion.lua @@ -0,0 +1,140 @@ +-- plugin for autocompletion +return { + "hrsh7th/nvim-cmp", + dependencies = { + -- Snippet Engine & its associated nvim-cmp source + { + "L3MON4D3/LuaSnip", + build = (function() + -- Build Step is needed for regex support in snippets. + -- This step is not supported in many windows environments. + -- Remove the below condition to re-enable on windows. + if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then + return + end + return "make install_jsregexp" + end)(), + }, + "saadparwaiz1/cmp_luasnip", + + -- Adds other completion capabilities. + -- nvim-cmp does not ship with all sources by default. They are split + -- into multiple repos for maintenance purposes. + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + + -- adds a number of snippets + "rafamadriz/friendly-snippets", + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + luasnip.config.setup({}) + + local kind_icons = { + Text = "󰉿", + Method = "m", + Function = "󰊕", + Constructor = "", + Field = "", + Variable = "󰆧", + Class = "󰌗", + Interface = "", + Module = "", + Property = "", + Unit = "", + Value = "󰎠", + Enum = "", + Keyword = "󰌋", + Snippet = "", + Color = "󰏘", + File = "󰈙", + Reference = "", + Folder = "󰉋", + EnumMember = "", + Constant = "󰇽", + Struct = "", + Event = "", + Operator = "󰆕", + TypeParameter = "󰊄", + } + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + completion = { completeopt = "menu,menuone,noinsert" }, + + -- read `:help ins-completion` for explanation + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_next_item(), -- Select the [n]ext item + [""] = cmp.mapping.select_prev_item(), -- Select the [p]revious item + [""] = cmp.mapping.confirm({ select = true }), -- Accept the completion with Enter. + [""] = cmp.mapping.complete({}), -- Manually trigger a completion from nvim-cmp. + + -- Think of as moving to the right of your snippet expansion. + -- So if you have a snippet that's like: + -- function $name($args) + -- $body + -- end + -- + -- will move you to the right of each of the expansion locations. + -- is similar, except moving you backwards. + [""] = cmp.mapping(function() + if luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + end + end, { "i", "s" }), + [""] = cmp.mapping(function() + if luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + end + end, { "i", "s" }), + + -- Select next/previous item with Tab / Shift + Tab + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }), + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }, + formatting = { + fields = { "kind", "abbr", "menu" }, + format = function(entry, vim_item) + -- Kind icons + vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) + -- vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind + vim_item.menu = ({ + nvim_lsp = "[LSP]", + luasnip = "[Snippet]", + buffer = "[Buffer]", + path = "[Path]", + })[entry.source.name] + return vim_item + end, + }, + }) + end, +} diff --git a/nvim/.config/nvim/lua/plugins/bufferline.lua b/nvim/.config/nvim/lua/plugins/bufferline.lua deleted file mode 100644 index b7ccb30..0000000 --- a/nvim/.config/nvim/lua/plugins/bufferline.lua +++ /dev/null @@ -1,60 +0,0 @@ -return { - 'akinsho/bufferline.nvim', - dependencies = { - 'moll/vim-bbye', - 'nvim-tree/nvim-web-devicons', - }, - config = function() - require('bufferline').setup { - options = { - mode = 'buffers', -- set to "tabs" to only show tabpages instead - themable = true, -- allows highlight groups to be overriden i.e. sets highlights as default - numbers = 'none', -- | "ordinal" | "buffer_id" | "both" | function({ ordinal, id, lower, raise }): string, - close_command = 'Bdelete! %d', -- can be a string | function, see "Mouse actions" - buffer_close_icon = '✗', - close_icon = '✗', - path_components = 1, -- Show only the file name without the directory - modified_icon = '●', - left_trunc_marker = '', - right_trunc_marker = '', - max_name_length = 30, - max_prefix_length = 30, -- prefix used when a buffer is de-duplicated - tab_size = 21, - diagnostics = false, - diagnostics_update_in_insert = false, - color_icons = true, - show_buffer_icons = true, - show_buffer_close_icons = true, - show_close_icon = true, - persist_buffer_sort = true, -- whether or not custom sorted buffers should persist - separator_style = { '│', '│' }, -- | "thick" | "thin" | { 'any', 'any' }, - enforce_regular_tabs = true, - always_show_bufferline = true, - show_tab_indicators = false, - indicator = { - -- icon = '▎', -- this should be omitted if indicator style is not 'icon' - style = 'none', -- Options: 'icon', 'underline', 'none' - }, - icon_pinned = '󰐃', - minimum_padding = 1, - maximum_padding = 5, - maximum_length = 15, - sort_by = 'insert_at_end', - }, - highlights = { - separator = { - fg = '#434C5E', - }, - buffer_selected = { - bold = true, - italic = false, - }, - -- separator_selected = {}, - -- tab_selected = {}, - -- background = {}, - -- indicator_selected = {}, - -- fill = {}, - }, - } - end, -} diff --git a/nvim/.config/nvim/lua/plugins/formatter.lua b/nvim/.config/nvim/lua/plugins/formatter.lua new file mode 100644 index 0000000..385d675 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/formatter.lua @@ -0,0 +1,56 @@ +-- plugin for formatter and linter +return { + "nvimtools/none-ls.nvim", + dependencies = { + "nvimtools/none-ls-extras.nvim", + "jayp0521/mason-null-ls.nvim", -- ensure dependencies are installed + }, + config = function() + local null_ls = require("null-ls") + local formatting = null_ls.builtins.formatting -- to setup formatters + local diagnostics = null_ls.builtins.diagnostics -- to setup linters + + -- Formatters & linters for mason to install + require("mason-null-ls").setup({ + ensure_installed = { + "checkmake", -- linter for Makefiles + "stylua", -- lua formatter + "ruff", -- Python linter and formatter + "shfmt", -- Shell formatter + "rust_hdl", + "clangd", + "clippy", + }, + automatic_installation = true, + }) + + local sources = { + diagnostics.checkmake, + formatting.prettier.with({ filetypes = { "html", "json", "yaml", "markdown" } }), + formatting.stylua, + formatting.shfmt.with({ args = { "-i", "4" } }), + formatting.terraform_fmt, + require("none-ls.formatting.ruff").with({ extra_args = { "--extend-select", "I" } }), + require("none-ls.formatting.ruff_format"), + } + + local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) + null_ls.setup({ + -- debug = true, -- Enable debug mode. Inspect logs with :NullLsLog. + sources = sources, + -- you can reuse a shared lspconfig on_attach callback here + on_attach = function(client, bufnr) + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + vim.lsp.buf.format({ async = false }) + end, + }) + end + end, + }) + end, +} diff --git a/nvim/.config/nvim/lua/plugins/gitsigns.lua b/nvim/.config/nvim/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..33fe868 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,21 @@ +-- Adds git related signs to the gutter, as well as utilities for managing changes +return { + 'lewis6991/gitsigns.nvim', + opts = { + -- See `:help gitsigns.txt` + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + signs_staged = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + }, + } \ No newline at end of file diff --git a/nvim/.config/nvim/lua/plugins/lsp.lua b/nvim/.config/nvim/lua/plugins/lsp.lua index 3ca3af1..8c2ae5d 100644 --- a/nvim/.config/nvim/lua/plugins/lsp.lua +++ b/nvim/.config/nvim/lua/plugins/lsp.lua @@ -1,252 +1,235 @@ +-- plugin for language servers return { - -- Main LSP Configuration - 'neovim/nvim-lspconfig', - dependencies = { - -- Automatically install LSPs and related tools to stdpath for Neovim - { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants - 'williamboman/mason-lspconfig.nvim', - 'WhoIsSethDaniel/mason-tool-installer.nvim', + "neovim/nvim-lspconfig", + dependencies = { + -- Automatically install LSPs and related tools to stdpath for Neovim + { "williamboman/mason.nvim", config = true }, -- NOTE: Must be loaded before dependants + "williamboman/mason-lspconfig.nvim", + "WhoIsSethDaniel/mason-tool-installer.nvim", - -- Useful status updates for LSP. - -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` - { 'j-hui/fidget.nvim', opts = {} }, - - -- Allows extra capabilities provided by nvim-cmp - 'hrsh7th/cmp-nvim-lsp', - }, - config = function() - -- Brief aside: **What is LSP?** - -- - -- LSP is an initialism you've probably heard, but might not understand what it is. - -- - -- LSP stands for Language Server Protocol. It's a protocol that helps editors - -- and language tooling communicate in a standardized fashion. - -- - -- In general, you have a "server" which is some tool built to understand a particular - -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers - -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone - -- processes that communicate with some "client" - in this case, Neovim! - -- - -- LSP provides Neovim with features like: - -- - Go to definition - -- - Find references - -- - Autocompletion - -- - Symbol Search - -- - and more! - -- - -- Thus, Language Servers are external tools that must be installed separately from - -- Neovim. This is where `mason` and related plugins come into play. - -- - -- If you're wondering about lsp vs treesitter, you can check out the wonderfully - -- and elegantly composed help section, `:help lsp-vs-treesitter` - - -- This function gets run when an LSP attaches to a particular buffer. - -- That is to say, every time a new file is opened that is associated with - -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this - -- function will be executed to configure the current buffer - vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), - callback = function(event) - -- NOTE: Remember that Lua is a real programming language, and as such it is possible - -- to define small helper and utility functions so you don't have to repeat yourself. - -- - -- In this case, we create a function that lets us more easily define mappings specific - -- for LSP related items. It sets the mode, buffer and description for us each time. - local map = function(keys, func, desc, mode) - mode = mode or 'n' - vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) - end - - -- Jump to the definition of the word under your cursor. - -- This is where a variable was first declared, or where a function is defined, etc. - -- To jump back, press . - map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') - - -- Find references for the word under your cursor. - map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - - -- Jump to the implementation of the word under your cursor. - -- Useful when your language has ways of declaring types without an actual implementation. - map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') - - -- Jump to the type of the word under your cursor. - -- Useful when you're not sure what type a variable is and you want to see - -- the definition of its *type*, not where it was *defined*. - map('D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') - - -- Fuzzy find all the symbols in your current document. - -- Symbols are things like variables, functions, types, etc. - map('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - - -- Fuzzy find all the symbols in your current workspace. - -- Similar to document symbols, except searches over your entire project. - map('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') - - -- Rename the variable under your cursor. - -- Most Language Servers support renaming across files, etc. - map('rn', vim.lsp.buf.rename, '[R]e[n]ame') - - -- Execute a code action, usually your cursor needs to be on top of an error - -- or a suggestion from your LSP for this to activate. - map('ca', vim.lsp.buf.code_action, '[C]ode [A]ction', { 'n', 'x' }) - - -- WARN: This is not Goto Definition, this is Goto Declaration. - -- For example, in C this would take you to the header. - map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - - -- The following two autocommands are used to highlight references of the - -- word under your cursor when your cursor rests there for a little while. - -- See `:help CursorHold` for information about when this is executed - -- - -- When you move your cursor, the highlights will be cleared (the second autocommand). - local client = vim.lsp.get_client_by_id(event.data.client_id) - if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then - local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) - vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { - buffer = event.buf, - group = highlight_augroup, - callback = vim.lsp.buf.document_highlight, - }) - - vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { - buffer = event.buf, - group = highlight_augroup, - callback = vim.lsp.buf.clear_references, - }) - - vim.api.nvim_create_autocmd('LspDetach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), - callback = function(event2) - vim.lsp.buf.clear_references() - vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } - end, - }) - end - - -- The following code creates a keymap to toggle inlay hints in your - -- code, if the language server you are using supports them - -- - -- This may be unwanted, since they displace some of your code - if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then - map('th', function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) - end, '[T]oggle Inlay [H]ints') - end - end, - }) - - -- Change diagnostic symbols in the sign column (gutter) - -- if vim.g.have_nerd_font then - -- local signs = { ERROR = '', WARN = '', INFO = '', HINT = '' } - -- local diagnostic_signs = {} - -- for type, icon in pairs(signs) do - -- diagnostic_signs[vim.diagnostic.severity[type]] = icon - -- end - -- vim.diagnostic.config { signs = { text = diagnostic_signs } } - -- end - - -- LSP servers and clients are able to communicate to each other what features they support. - -- By default, Neovim doesn't support everything that is in the LSP specification. - -- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities. - -- So, we create new capabilities with nvim cmp, and then broadcast that to the servers. - local capabilities = vim.lsp.protocol.make_client_capabilities() - capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) - - -- Enable the following language servers - -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. - -- - -- Add any additional override configuration in the following tables. Available keys are: - -- - cmd (table): Override the default command used to start the server - -- - filetypes (table): Override the default list of associated filetypes for the server - -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features. - -- - settings (table): Override the default settings passed when initializing the server. - -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ - local servers = { - clangd = {}, - -- gopls = {}, - -- pyright = {}, - rust_analyzer = {}, - -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs - -- - -- Some languages (like typescript) have entire language plugins that can be useful: - -- https://github.com/pmizio/typescript-tools.nvim - -- - -- But for many setups, the LSP (`ts_ls`) will work just fine - -- ts_ls = {}, - -- - - -- python linter + language server - ruff = {}, - pylsp = { - settings = { - pylsp = { - plugins = { - pyflakes = { enabled = false }, - pycodestyle = { enabled = false }, - autopep8 = { enabled = false }, - yapf = { enabled = false }, - mccabe = { enabled = false }, - pylsp_mypy = { enabled = false }, - pylsp_black = { enabled = false }, - pylsp_isort = { enabled = false }, - }, - }, - }, + -- Useful status updates for LSP. + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` + { + "j-hui/fidget.nvim", + tag = "v1.4.0", + opts = { + progress = { + display = { + done_icon = "✓", -- Icon shown when all LSP progress tasks are complete + }, }, + notification = { + window = { + winblend = 0, -- Background color opacity in the notification window + }, + }, + }, + }, + }, + config = function() + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }), + -- Create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + callback = function(event) + local map = function(keys, func, desc, mode) + mode = mode or "n" + vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) + end - lua_ls = { - -- cmd = {...}, - -- filetypes = { ...}, - -- capabilities = {}, - settings = { - Lua = { - completion = { - callSnippet = 'Replace', + -- Jump to the definition of the word under your cursor. + -- This is where a variable was first declared, or where a function is defined, etc. + -- To jump back, press . + map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") + + -- Find references for the word under your cursor. + map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") + + -- Jump to the implementation of the word under your cursor. + -- Useful when your language has ways of declaring types without an actual implementation. + map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") + + -- Jump to the type of the word under your cursor. + -- Useful when you're not sure what type a variable is and you want to see + -- the definition of its *type*, not where it was *defined*. + map("D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition") + + -- Fuzzy find all the symbols in your current document. + -- Symbols are things like variables, functions, types, etc. + map("ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") + + -- Fuzzy find all the symbols in your current workspace. + -- Similar to document symbols, except searches over your entire project. + map("ws", require("telescope.builtin").lsp_dynamic_workspace_symbols, "[W]orkspace [S]ymbols") + + -- Rename the variable under your cursor. + -- Most Language Servers support renaming across files, etc. + map("rn", vim.lsp.buf.rename, "[R]e[n]ame") + + -- Execute a code action, usually your cursor needs to be on top of an error + -- or a suggestion from your LSP for this to activate. + map("ca", vim.lsp.buf.code_action, "[C]ode [A]ction", { "n", "x" }) + + -- Opens a popup that displays documentation about the word under your cursor + -- See `:help K` for why this keymap + map("K", vim.lsp.buf.hover, "[K]ontext - Show Tooltip") + + -- WARN: This is not Goto Definition, this is Goto Declaration. + -- For example, in C this would take you to the header. + map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + + -- The following two autocommands are used to highlight references of the + -- word under your cursor when your cursor rests there for a little while. + -- See `:help CursorHold` for information about when this is executed + -- + -- When you move your cursor, the highlights will be cleared (the second autocommand). + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then + local highlight_augroup = vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false }) + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + + vim.api.nvim_create_autocmd("LspDetach", { + group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }), + callback = function(event2) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds({ group = "kickstart-lsp-highlight", buffer = event2.buf }) + end, + }) + end + + -- The following code creates a keymap to toggle inlay hints in your + -- code, if the language server you are using supports them + -- + -- This may be unwanted, since they displace some of your code + if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then + map("th", function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf })) + end, "[T]oggle Inlay [H]ints") + end + end, + }) + + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities()) + + -- Enable the following language servers + local servers = { + clangd = {}, + lua_ls = { + -- cmd = {...}, + -- filetypes = { ...}, + -- capabilities = {}, + settings = { + Lua = { + completion = { + callSnippet = "Replace", + }, + runtime = { version = "LuaJIT" }, + workspace = { + checkThirdParty = false, + library = { + "${3rd}/luv/library", + unpack(vim.api.nvim_get_runtime_file("", true)), }, - runtime = { version = 'LuaJIT' }, - workspace = { - checkThirdParty = false, - library = { - '${3rd}/luv/library', - unpack(vim.api.nvim_get_runtime_file('', true)), - }, - }, - diagnostics = { disable = { 'missing-fields' } }, + }, + diagnostics = { disable = { "missing-fields" } }, - -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings - -- diagnostics = { disable = { 'missing-fields' } }, + -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings + -- diagnostics = { disable = { 'missing-fields' } }, + }, + }, + }, + pylsp = { + settings = { + pylsp = { + plugins = { + pyflakes = { enabled = false }, + pycodestyle = { enabled = false }, + autopep8 = { enabled = false }, + yapf = { enabled = false }, + mccabe = { enabled = false }, + pylsp_mypy = { enabled = false }, + pylsp_black = { enabled = false }, + pylsp_isort = { enabled = false }, }, }, }, - } - - -- Ensure the servers and tools above are installed - -- To check the current status of installed tools and/or manually install - -- other tools, you can run - -- :Mason - -- - -- You can press `g?` for help in this menu. - require('mason').setup() - - -- You can add other tools here that you want Mason to install - -- for you, so that they are available from within Neovim. - local ensure_installed = vim.tbl_keys(servers or {}) - vim.list_extend(ensure_installed, { - 'stylua', -- Used to format Lua code - }) - require('mason-tool-installer').setup { ensure_installed = ensure_installed } - - require('mason-lspconfig').setup { - handlers = { - function(server_name) - local server = servers[server_name] or {} - -- This handles overriding only values explicitly passed - -- by the server configuration above. Useful when disabling - -- certain features of an LSP (for example, turning off formatting for ts_ls) - server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) - require('lspconfig')[server_name].setup(server) - end, + }, + ruff = { + -- Notes on code actions: https://github.com/astral-sh/ruff-lsp/issues/119#issuecomment-1595628355 + -- Get isort like behavior: https://github.com/astral-sh/ruff/issues/8926#issuecomment-1834048218 + commands = { + RuffAutofix = { + function() + vim.lsp.buf.execute_command({ + command = "ruff.applyAutofix", + arguments = { + { uri = vim.uri_from_bufnr(0) }, + }, + }) + end, + description = "Ruff: Fix all auto-fixable problems", + }, + RuffOrganizeImports = { + function() + vim.lsp.buf.execute_command({ + command = "ruff.applyOrganizeImports", + arguments = { + { uri = vim.uri_from_bufnr(0) }, + }, + }) + end, + description = "Ruff: Format imports", + }, }, - } - end, - } + }, + rust_analyzer = { + ["rust-analyzer"] = { + cargo = { + features = "all", + }, + checkOnSave = true, + check = { + command = "clippy", + }, + }, + }, + } + + -- Ensure the servers and tools above are installed + require("mason").setup() + + -- You can add other tools here that you want Mason to install + -- for you, so that they are available from within Neovim. + local ensure_installed = vim.tbl_keys(servers or {}) + vim.list_extend(ensure_installed, { + "stylua", -- Used to format Lua code + "clangd", + "rust-analyzer", + }) + require("mason-tool-installer").setup({ ensure_installed = ensure_installed }) + + require("mason-lspconfig").setup({ + handlers = { + function(server_name) + local server = servers[server_name] or {} + -- This handles overriding only values explicitly passed + -- by the server configuration above. Useful when disabling + -- certain features of an LSP (for example, turning off formatting for ts_ls) + server.capabilities = vim.tbl_deep_extend("force", {}, capabilities, server.capabilities or {}) + require("lspconfig")[server_name].setup(server) + end, + }, + }) + end, +} diff --git a/nvim/.config/nvim/lua/plugins/lualine.lua b/nvim/.config/nvim/lua/plugins/lualine.lua index 5f69610..e6478fe 100644 --- a/nvim/.config/nvim/lua/plugins/lualine.lua +++ b/nvim/.config/nvim/lua/plugins/lualine.lua @@ -1,4 +1,157 @@ +-- Set lualine as statusline return { - 'nvim-lualine/lualine.nvim', - dependencies = { 'nvim-tree/nvim-web-devicons' } + "nvim-lualine/lualine.nvim", + config = function() + -- Adapted from: https://github.com/nvim-lualine/lualine.nvim/blob/master/lua/lualine/themes/onedark.lua + local colors = { + black = "#181820", + red = "#E00010", + green = "#34AD1F", + yellow = "#E1D719", + blue = "#2B58D4", + magenta = "#E02482", + purple = "#9018E0", + cyan = "#15D7E5", + white = "#E0E0E0", + dim_black = "#2C2C3C", + dim_red = "#FF4054", + dim_green = "#51E740", + dim_yellow = "#E8DC80", + dim_blue = "#709FE3", + dim_magenta = "#FBB0DD", + dim_cyan = "#60D7E1", + dim_white = "#C0C0C0", + fg = "#E0E0E0", + bg = "#181820", + gray1 = "#54546D", + gray2 = "#2A2A37", + gray3 = "#363646", + } + + local kanagawa_paper = { + normal = { + a = { fg = colors.bg, bg = colors.dim_red, gui = "bold" }, + b = { fg = colors.fg, bg = colors.gray3 }, + c = { fg = colors.fg, bg = colors.bg }, + }, + command = { a = { fg = colors.bg, bg = colors.yellow, gui = "bold" } }, + insert = { a = { fg = colors.bg, bg = colors.blue, gui = "bold" } }, + visual = { a = { fg = colors.bg, bg = colors.purple, gui = "bold" } }, + terminal = { a = { fg = colors.bg, bg = colors.cyan, gui = "bold" } }, + replace = { a = { fg = colors.bg, bg = colors.dim_red, gui = "bold" } }, + inactive = { + a = { fg = colors.gray1, bg = colors.bg, gui = "bold" }, + b = { fg = colors.gray1, bg = colors.bg }, + c = { fg = colors.gray1, bg = colors.gray2 }, + }, + } + + local mama_mia = { + normal = { + a = { fg = colors.bg, bg = colors.dim_blue, gui = "bold" }, + b = { fg = colors.fg, bg = colors.gray3 }, + c = { fg = colors.fg, bg = colors.bg }, + }, + command = { a = { fg = colors.bg, bg = colors.dim_yellow, gui = "bold" } }, + insert = { a = { fg = colors.bg, bg = colors.dim_magenta, gui = "bold" } }, + visual = { a = { fg = colors.bg, bg = colors.dim_cyan, gui = "bold" } }, + terminal = { a = { fg = colors.bg, bg = colors.cyan, gui = "bold" } }, + replace = { a = { fg = colors.bg, bg = colors.red1, gui = "bold" } }, + inactive = { + a = { fg = colors.gray1, bg = colors.bg, gui = "bold" }, + b = { fg = colors.gray1, bg = colors.bg }, + c = { fg = colors.gray1, bg = colors.gray2 }, + }, + } + + -- local kanagawa_paper = require("themes.kanagawa-paper") + -- Import color theme based on environment variable NVIM_THEME + local env_var_nvim_theme = "mama_mia" + + -- Define a table of themes + local themes = { + kanagawa_paper = kanagawa_paper, + mama_mia = mama_mia, + } + + local mode = { + "mode", + fmt = function(str) + return str + end, + } + + local filename = { + "filename", + file_status = true, -- displays file status (readonly status, modified status) + path = 0, -- 0 = just filename, 1 = relative path, 2 = absolute path + } + + local hide_in_width = function() + return vim.fn.winwidth(0) > 100 + end + + local diagnostics = { + "diagnostics", + sources = { "nvim_diagnostic" }, + sections = { "error", "warn" }, + symbols = { error = " ", warn = " ", info = " ", hint = " " }, + colored = false, + update_in_insert = false, + always_visible = false, + cond = hide_in_width, + } + + local diff = { + "diff", + colored = false, + symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols + cond = hide_in_width, + } + + require("lualine").setup({ + options = { + icons_enabled = true, + theme = themes[env_var_nvim_theme], -- Set theme based on environment variable + -- Some useful glyphs: + -- https://www.nerdfonts.com/cheat-sheet + --         + section_separators = { left = "", right = "" }, + component_separators = { left = ":", right = ":" }, + disabled_filetypes = { "alpha", "neo-tree", "Avante" }, + always_divide_middle = true, + }, + sections = { + lualine_a = { mode }, + lualine_b = { "branch" }, + lualine_c = { filename }, + lualine_x = { + diagnostics, + --diff, + { "encoding", cond = hide_in_width }, + { "filetype", cond = hide_in_width }, + }, + lualine_y = { "location" }, + lualine_z = { "progress" }, + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = { { "filename", path = 1 } }, + lualine_x = { { "location", padding = 0 } }, + lualine_y = {}, + lualine_z = {}, + }, + tabline = { + lualine_a = { "buffers" }, + lualine_b = {}, + lualine_c = {}, + lualine_x = {}, + lualine_y = {}, + lualine_z = {}, + }, + + extensions = { "fugitive" }, + }) + end, } diff --git a/nvim/.config/nvim/lua/plugins/misc.lua b/nvim/.config/nvim/lua/plugins/misc.lua new file mode 100644 index 0000000..15bafa5 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/misc.lua @@ -0,0 +1,62 @@ +-- Standalone plugins with less than 10 lines of config go here +return { + { + -- tmux & split window navigation + 'christoomey/vim-tmux-navigator', + }, + { + -- autoclose tags + 'windwp/nvim-ts-autotag', + }, + { + -- detect tabstop and shiftwidth automatically + 'tpope/vim-sleuth', + }, + { + -- Powerful Git integration for Vim + 'tpope/vim-fugitive', + }, + { + -- GitHub integration for vim-fugitive + 'tpope/vim-rhubarb', + }, + { + -- Hints keybinds + 'folke/which-key.nvim', + opts = { + -- win = { + -- border = { + -- { '┌', 'FloatBorder' }, + -- { '─', 'FloatBorder' }, + -- { '┐', 'FloatBorder' }, + -- { '│', 'FloatBorder' }, + -- { '┘', 'FloatBorder' }, + -- { '─', 'FloatBorder' }, + -- { '└', 'FloatBorder' }, + -- { '│', 'FloatBorder' }, + -- }, + -- }, + }, + }, + { + -- Autoclose parentheses, brackets, quotes, etc. + 'windwp/nvim-autopairs', + event = 'InsertEnter', + config = true, + opts = {}, + }, + { + -- Highlight todo, notes, etc in comments + 'folke/todo-comments.nvim', + event = 'VimEnter', + dependencies = { 'nvim-lua/plenary.nvim' }, + opts = { signs = false }, + }, + { + -- high-performance color highlighter + 'norcalli/nvim-colorizer.lua', + config = function() + require('colorizer').setup() + end, + }, + } \ No newline at end of file diff --git a/nvim/.config/nvim/lua/plugins/neo-tree.lua b/nvim/.config/nvim/lua/plugins/neo-tree.lua index 0edd879..d0a3c63 100644 --- a/nvim/.config/nvim/lua/plugins/neo-tree.lua +++ b/nvim/.config/nvim/lua/plugins/neo-tree.lua @@ -1,328 +1,325 @@ return { "nvim-neo-tree/neo-tree.nvim", - branch = "v3.x", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended - "MunifTanjim/nui.nvim", - -- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information - { - 's1n7ax/nvim-window-picker', - version = '2.*', - config = function() - require 'window-picker'.setup({ - filter_rules = { - include_current_win = false, - autoselect_one = true, - -- filter using buffer options - bo = { - -- if the file type is one of following, the window will be ignored - filetype = { 'neo-tree', "neo-tree-popup", "notify" }, - -- if the buffer type is one of following, the window will be ignored - buftype = { 'terminal', "quickfix" }, - }, + event = "VeryLazy", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + -- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information + { + "s1n7ax/nvim-window-picker", + version = "2.*", + config = function() + require("window-picker").setup({ + filter_rules = { + include_current_win = false, + autoselect_one = true, + -- filter using buffer options + bo = { + -- if the file type is one of following, the window will be ignored + filetype = { "neo-tree", "neo-tree-popup", "notify" }, + -- if the buffer type is one of following, the window will be ignored + buftype = { "terminal", "quickfix" }, }, + }, }) - end, + end, + keys = { + { "w", ":Neotree toggle float", silent = true, desc = "Popup File Explorer" }, + -- { 'e', ':Neotree toggle position=left', silent = true, desc = 'Left File Explorer' }, + { + "ngs", + ":Neotree float git_status", + silent = true, + desc = "Neotree Open Git Status Window", + }, }, }, - config = function () - -- If you want icons for diagnostic errors, you'll need to define them somewhere: - vim.fn.sign_define("DiagnosticSignError", - {text = " ", texthl = "DiagnosticSignError"}) - vim.fn.sign_define("DiagnosticSignWarn", - {text = " ", texthl = "DiagnosticSignWarn"}) - vim.fn.sign_define("DiagnosticSignInfo", - {text = " ", texthl = "DiagnosticSignInfo"}) - vim.fn.sign_define("DiagnosticSignHint", - {text = "󰌵", texthl = "DiagnosticSignHint"}) + }, + config = function() + -- If you want icons for diagnostic errors, you'll need to define them somewhere: + vim.fn.sign_define("DiagnosticSignError", { text = " ", texthl = "DiagnosticSignError" }) + vim.fn.sign_define("DiagnosticSignWarn", { text = " ", texthl = "DiagnosticSignWarn" }) + vim.fn.sign_define("DiagnosticSignInfo", { text = " ", texthl = "DiagnosticSignInfo" }) + vim.fn.sign_define("DiagnosticSignHint", { text = "󰌵", texthl = "DiagnosticSignHint" }) - require("neo-tree").setup({ - close_if_last_window = false, -- Close Neo-tree if it is the last window left in the tab - popup_border_style = "rounded", - enable_git_status = true, - enable_diagnostics = true, - open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes - sort_case_insensitive = false, -- used when sorting files and directories in the tree - sort_function = nil , -- use a custom function for sorting files and directories in the tree - -- sort_function = function (a,b) - -- if a.type == b.type then - -- return a.path > b.path - -- else - -- return a.type > b.type - -- end - -- end , -- this sorts files and directories descendantly - default_component_configs = { - container = { - enable_character_fade = true - }, - indent = { - indent_size = 2, - padding = 1, -- extra padding on left hand side - -- indent guides - with_markers = true, - indent_marker = "│", - last_indent_marker = "└", - highlight = "NeoTreeIndentMarker", - -- expander config, needed for nesting files - with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders - expander_collapsed = "", - expander_expanded = "", - expander_highlight = "NeoTreeExpander", - }, - icon = { - folder_closed = "", - folder_open = "", - folder_empty = "󰜌", - provider = function(icon, node, state) -- default icon provider utilizes nvim-web-devicons if available - if node.type == "file" or node.type == "terminal" then - local success, web_devicons = pcall(require, "nvim-web-devicons") - local name = node.type == "terminal" and "terminal" or node.name - if success then - local devicon, hl = web_devicons.get_icon(name) - icon.text = devicon or icon.text - icon.highlight = hl or icon.highlight - end - end - end, - -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there - -- then these will never be used. - default = "*", - highlight = "NeoTreeFileIcon" - }, - modified = { - symbol = "[+]", - highlight = "NeoTreeModified", - }, - name = { - trailing_slash = false, - use_git_status_colors = true, - highlight = "NeoTreeFileName", - }, - git_status = { - symbols = { - -- Change type - added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name - modified = "", -- or "", but this is redundant info if you use git_status_colors on the name - deleted = "✖",-- this can only be used in the git_status source - renamed = "󰁕",-- this can only be used in the git_status source - -- Status type - untracked = "", - ignored = "", - unstaged = "󰄱", - staged = "", - conflict = "", - } - }, - -- If you don't want to use these columns, you can set `enabled = false` for each of them individually - file_size = { - enabled = true, - required_width = 64, -- min width of window required to show this column - }, - type = { - enabled = true, - required_width = 122, -- min width of window required to show this column - }, - last_modified = { - enabled = true, - required_width = 88, -- min width of window required to show this column - }, - created = { - enabled = true, - required_width = 110, -- min width of window required to show this column - }, - symlink_target = { - enabled = false, - }, + require("neo-tree").setup({ + close_if_last_window = false, -- Close Neo-tree if it is the last window left in the tab + popup_border_style = "rounded", + enable_git_status = true, + enable_diagnostics = true, + open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes + sort_case_insensitive = false, -- used when sorting files and directories in the tree + sort_function = nil, -- use a custom function for sorting files and directories in the tree + -- sort_function = function (a,b) + -- if a.type == b.type then + -- return a.path > b.path + -- else + -- return a.type > b.type + -- end + -- end , -- this sorts files and directories descendantly + default_component_configs = { + container = { + enable_character_fade = true, }, - -- A list of functions, each representing a global custom command - -- that will be available in all sources (if not overridden in `opts[source_name].commands`) - -- see `:h neo-tree-custom-commands-global` - commands = {}, - window = { - position = "left", - width = 40, - mapping_options = { - noremap = true, - nowait = true, - }, - mappings = { - [""] = { - "toggle_node", - nowait = false, -- disable `nowait` if you have existing combos starting with this char that you want to use - }, - ["<2-LeftMouse>"] = "open", - [""] = "open", - [""] = "cancel", -- close preview or floating neo-tree window - ["P"] = { "toggle_preview", config = { use_float = true, use_image_nvim = true } }, - -- Read `# Preview Mode` for more information - ["l"] = "focus_preview", - ["S"] = "open_split", - ["s"] = "open_vsplit", - -- ["S"] = "split_with_window_picker", - -- ["s"] = "vsplit_with_window_picker", - ["t"] = "open_tabnew", - -- [""] = "open_drop", - -- ["t"] = "open_tab_drop", - ["w"] = "open_with_window_picker", - --["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing - ["C"] = "close_node", - -- ['C'] = 'close_all_subnodes', - ["z"] = "close_all_nodes", - --["Z"] = "expand_all_nodes", - ["a"] = { - "add", - -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details - -- some commands may take optional config options, see `:h neo-tree-mappings` for details - config = { - show_path = "none" -- "none", "relative", "absolute" - } - }, - ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. - ["d"] = "delete", - ["r"] = "rename", - ["y"] = "copy_to_clipboard", - ["x"] = "cut_to_clipboard", - ["p"] = "paste_from_clipboard", - ["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add": - -- ["c"] = { - -- "copy", - -- config = { - -- show_path = "none" -- "none", "relative", "absolute" - -- } - --} - ["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add". - ["q"] = "close_window", - ["R"] = "refresh", - ["?"] = "show_help", - ["<"] = "prev_source", - [">"] = "next_source", - ["i"] = "show_file_details", - } + indent = { + indent_size = 2, + padding = 1, -- extra padding on left hand side + -- indent guides + with_markers = true, + indent_marker = "│", + last_indent_marker = "└", + highlight = "NeoTreeIndentMarker", + -- expander config, needed for nesting files + with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders + expander_collapsed = "", + expander_expanded = "", + expander_highlight = "NeoTreeExpander", }, - nesting_rules = {}, - filesystem = { - filtered_items = { - visible = false, -- when true, they will just be displayed differently than normal items - hide_dotfiles = true, - hide_gitignored = true, - hide_hidden = true, -- only works on Windows for hidden files/directories - hide_by_name = { - --"node_modules" - }, - hide_by_pattern = { -- uses glob style patterns - --"*.meta", - --"*/src/*/tsconfig.json", - }, - always_show = { -- remains visible even if other settings would normally hide it - --".gitignored", - }, - always_show_by_pattern = { -- uses glob style patterns - --".env*", - }, - never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show - --".DS_Store", - --"thumbs.db" - }, - never_show_by_pattern = { -- uses glob style patterns - --".null-ls_*", - }, - }, - follow_current_file = { - enabled = false, -- This will find and focus the file in the active buffer every time - -- -- the current file is changed while the tree is open. - leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` - }, - group_empty_dirs = false, -- when true, empty folders will be grouped together - hijack_netrw_behavior = "open_default", -- netrw disabled, opening a directory opens neo-tree - -- in whatever position is specified in window.position - -- "open_current", -- netrw disabled, opening a directory opens within the - -- window like netrw would, regardless of window.position - -- "disabled", -- netrw left alone, neo-tree does not handle opening dirs - use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes - -- instead of relying on nvim autocmd events. - window = { - mappings = { - [""] = "navigate_up", - ["."] = "set_root", - ["H"] = "toggle_hidden", - ["/"] = "fuzzy_finder", - ["D"] = "fuzzy_finder_directory", - ["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm - -- ["D"] = "fuzzy_sorter_directory", - ["f"] = "filter_on_submit", - [""] = "clear_filter", - ["[g"] = "prev_git_modified", - ["]g"] = "next_git_modified", - ["o"] = { "show_help", nowait=false, config = { title = "Order by", prefix_key = "o" }}, - ["oc"] = { "order_by_created", nowait = false }, - ["od"] = { "order_by_diagnostics", nowait = false }, - ["og"] = { "order_by_git_status", nowait = false }, - ["om"] = { "order_by_modified", nowait = false }, - ["on"] = { "order_by_name", nowait = false }, - ["os"] = { "order_by_size", nowait = false }, - ["ot"] = { "order_by_type", nowait = false }, - -- [''] = function(state) ... end, - }, - fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode - [""] = "move_cursor_down", - [""] = "move_cursor_down", - [""] = "move_cursor_up", - [""] = "move_cursor_up", - -- [''] = function(state, scroll_padding) ... end, - }, - }, - - commands = {} -- Add a custom command or override a global one using the same function name + icon = { + folder_closed = "", + folder_open = "", + folder_empty = "󰜌", + -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there + -- then these will never be used. + default = "*", + highlight = "NeoTreeFileIcon", }, - buffers = { - follow_current_file = { - enabled = true, -- This will find and focus the file in the active buffer every time - -- -- the current file is changed while the tree is open. - leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` - }, - group_empty_dirs = true, -- when true, empty folders will be grouped together - show_unloaded = true, - window = { - mappings = { - ["bd"] = "buffer_delete", - [""] = "navigate_up", - ["."] = "set_root", - ["o"] = { "show_help", nowait=false, config = { title = "Order by", prefix_key = "o" }}, - ["oc"] = { "order_by_created", nowait = false }, - ["od"] = { "order_by_diagnostics", nowait = false }, - ["om"] = { "order_by_modified", nowait = false }, - ["on"] = { "order_by_name", nowait = false }, - ["os"] = { "order_by_size", nowait = false }, - ["ot"] = { "order_by_type", nowait = false }, - } - }, + modified = { + symbol = "[+]", + highlight = "NeoTreeModified", + }, + name = { + trailing_slash = false, + use_git_status_colors = true, + highlight = "NeoTreeFileName", }, git_status = { - window = { - position = "float", - mappings = { - ["A"] = "git_add_all", - ["gu"] = "git_unstage_file", - ["ga"] = "git_add_file", - ["gr"] = "git_revert_file", - ["gc"] = "git_commit", - ["gp"] = "git_push", - ["gg"] = "git_commit_and_push", - ["o"] = { "show_help", nowait=false, config = { title = "Order by", prefix_key = "o" }}, - ["oc"] = { "order_by_created", nowait = false }, - ["od"] = { "order_by_diagnostics", nowait = false }, - ["om"] = { "order_by_modified", nowait = false }, - ["on"] = { "order_by_name", nowait = false }, - ["os"] = { "order_by_size", nowait = false }, - ["ot"] = { "order_by_type", nowait = false }, - } - } - } - }) + symbols = { + -- Change type + added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name + modified = "", -- or "", but this is redundant info if you use git_status_colors on the name + deleted = "✖", -- this can only be used in the git_status source + renamed = "󰁕", -- this can only be used in the git_status source + -- Status type + untracked = "", + ignored = "", + unstaged = "󰄱", + staged = "", + conflict = "", + }, + }, + -- If you don't want to use these columns, you can set `enabled = false` for each of them individually + file_size = { + enabled = true, + required_width = 64, -- min width of window required to show this column + }, + type = { + enabled = true, + required_width = 122, -- min width of window required to show this column + }, + last_modified = { + enabled = true, + required_width = 88, -- min width of window required to show this column + }, + created = { + enabled = true, + required_width = 110, -- min width of window required to show this column + }, + symlink_target = { + enabled = false, + }, + }, + -- A list of functions, each representing a global custom command + -- that will be available in all sources (if not overridden in `opts[source_name].commands`) + -- see `:h neo-tree-custom-commands-global` + commands = {}, + window = { + position = "left", + width = 40, + mapping_options = { + noremap = true, + nowait = true, + }, + mappings = { + [""] = { + "toggle_node", + nowait = false, -- disable `nowait` if you have existing combos starting with this char that you want to use + }, + ["<2-LeftMouse>"] = "open", + [""] = "open", + [""] = "cancel", -- close preview or floating neo-tree window + ["P"] = { "toggle_preview", config = { use_float = true, use_image_nvim = true } }, + -- Read `# Preview Mode` for more information + ["l"] = "open", + ["S"] = "open_split", + ["s"] = "open_vsplit", + -- ["S"] = "split_with_window_picker", + -- ["s"] = "vsplit_with_window_picker", + ["t"] = "open_tabnew", + -- [""] = "open_drop", + -- ["t"] = "open_tab_drop", + ["w"] = "open_with_window_picker", + --["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing + ["C"] = "close_node", + -- ['C'] = 'close_all_subnodes', + ["z"] = "close_all_nodes", + --["Z"] = "expand_all_nodes", + ["a"] = { + "add", + -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details + -- some commands may take optional config options, see `:h neo-tree-mappings` for details + config = { + show_path = "none", -- "none", "relative", "absolute" + }, + }, + ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. + ["d"] = "delete", + ["r"] = "rename", + ["y"] = "copy_to_clipboard", + ["x"] = "cut_to_clipboard", + ["p"] = "paste_from_clipboard", + ["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add": + -- ["c"] = { + -- "copy", + -- config = { + -- show_path = "none" -- "none", "relative", "absolute" + -- } + --} + ["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add". + ["q"] = "close_window", + ["R"] = "refresh", + ["?"] = "show_help", + ["<"] = "prev_source", + [">"] = "next_source", + ["i"] = "show_file_details", + }, + }, + nesting_rules = {}, + filesystem = { + filtered_items = { + visible = false, -- when true, they will just be displayed differently than normal items + hide_dotfiles = true, + hide_gitignored = true, + hide_hidden = true, -- only works on Windows for hidden files/directories + hide_by_name = { + "__pycache__", + ".python-version", + ".git", + ".venv", + }, + hide_by_pattern = { -- uses glob style patterns + --"*.meta", + --"*/src/*/tsconfig.json", + }, + always_show = { -- remains visible even if other settings would normally hide it + --".gitignored", + }, + always_show_by_pattern = { -- uses glob style patterns + --".env*", + }, + never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show + --".DS_Store", + --"thumbs.db" + }, + never_show_by_pattern = { -- uses glob style patterns + --".null-ls_*", + }, + }, + follow_current_file = { + enabled = false, -- This will find and focus the file in the active buffer every time + -- -- the current file is changed while the tree is open. + leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` + }, + group_empty_dirs = false, -- when true, empty folders will be grouped together + hijack_netrw_behavior = "open_default", -- netrw disabled, opening a directory opens neo-tree + -- in whatever position is specified in window.position + -- "open_current", -- netrw disabled, opening a directory opens within the + -- window like netrw would, regardless of window.position + -- "disabled", -- netrw left alone, neo-tree does not handle opening dirs + use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes + -- instead of relying on nvim autocmd events. + window = { + mappings = { + [""] = "navigate_up", + ["."] = "set_root", + ["H"] = "toggle_hidden", + ["/"] = "fuzzy_finder", + ["D"] = "fuzzy_finder_directory", + ["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm + -- ["D"] = "fuzzy_sorter_directory", + ["f"] = "filter_on_submit", + [""] = "clear_filter", + ["[g"] = "prev_git_modified", + ["]g"] = "next_git_modified", + ["o"] = { "show_help", nowait = false, config = { title = "Order by", prefix_key = "o" } }, + ["oc"] = { "order_by_created", nowait = false }, + ["od"] = { "order_by_diagnostics", nowait = false }, + ["og"] = { "order_by_git_status", nowait = false }, + ["om"] = { "order_by_modified", nowait = false }, + ["on"] = { "order_by_name", nowait = false }, + ["os"] = { "order_by_size", nowait = false }, + ["ot"] = { "order_by_type", nowait = false }, + -- [''] = function(state) ... end, + }, + fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode + [""] = "move_cursor_down", + [""] = "move_cursor_down", + [""] = "move_cursor_up", + [""] = "move_cursor_up", + -- [''] = function(state, scroll_padding) ... end, + }, + }, - vim.cmd([[nnoremap \ :Neotree reveal]]) + commands = {}, -- Add a custom command or override a global one using the same function name + }, + buffers = { + follow_current_file = { + enabled = true, -- This will find and focus the file in the active buffer every time + -- -- the current file is changed while the tree is open. + leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` + }, + group_empty_dirs = true, -- when true, empty folders will be grouped together + show_unloaded = true, + window = { + mappings = { + ["bd"] = "buffer_delete", + [""] = "navigate_up", + ["."] = "set_root", + ["o"] = { "show_help", nowait = false, config = { title = "Order by", prefix_key = "o" } }, + ["oc"] = { "order_by_created", nowait = false }, + ["od"] = { "order_by_diagnostics", nowait = false }, + ["om"] = { "order_by_modified", nowait = false }, + ["on"] = { "order_by_name", nowait = false }, + ["os"] = { "order_by_size", nowait = false }, + ["ot"] = { "order_by_type", nowait = false }, + }, + }, + }, + git_status = { + window = { + position = "float", + mappings = { + ["A"] = "git_add_all", + ["gu"] = "git_unstage_file", + ["ga"] = "git_add_file", + ["gr"] = "git_revert_file", + ["gc"] = "git_commit", + ["gp"] = "git_push", + ["gg"] = "git_commit_and_push", + ["o"] = { "show_help", nowait = false, config = { title = "Order by", prefix_key = "o" } }, + ["oc"] = { "order_by_created", nowait = false }, + ["od"] = { "order_by_diagnostics", nowait = false }, + ["om"] = { "order_by_modified", nowait = false }, + ["on"] = { "order_by_name", nowait = false }, + ["os"] = { "order_by_size", nowait = false }, + ["ot"] = { "order_by_type", nowait = false }, + }, + }, + }, + }) - vim.keymap.set('n', 'e', ':Neotree toggle position=left', { noremap = true, silent = true }) - end + vim.cmd([[nnoremap \ :Neotree reveal]]) + end, } diff --git a/nvim/.config/nvim/lua/zegonix/keybindings.lua b/nvim/.config/nvim/lua/zegonix/keybindings.lua index edb116c..8b53ff1 100644 --- a/nvim/.config/nvim/lua/zegonix/keybindings.lua +++ b/nvim/.config/nvim/lua/zegonix/keybindings.lua @@ -1,61 +1,85 @@ -- set leader key -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' +vim.g.mapleader = " " +vim.g.maplocalleader = " " -- disable the spacebar key's default behaviour in normal and visual modes -vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) +vim.keymap.set({ "n", "v" }, "", "", { silent = true }) -- command options local opts = { noremap = true, silent = true } +-- Allow moving the cursor through wrapped lines with j, k +vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) +vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) + +-- clear highlights +vim.keymap.set("n", "", ":noh", opts) + -- save file -vim.keymap.set({ 'n' }, '', ' w ', opts) +vim.keymap.set("n", "", " w ", opts) -- quit file -vim.keymap.set('n', '', ' q ', opts) - +vim.keymap.set("n", "", " q ", opts) -- this overwrites the mapping for visual block mode, v-block can be entered via C-v while in visual mode -- delete single character without copying into register -vim.keymap.set('n', 'x', '"_x', opts) +vim.keymap.set("n", "x", '"_x', opts) -- Vertical scroll and center -vim.keymap.set('n', '', 'zz', opts) -vim.keymap.set('n', '', 'zz', opts) +vim.keymap.set("n", "", "zz", opts) +vim.keymap.set("n", "", "zz", opts) -- Find and center -vim.keymap.set('n', 'n', 'nzzzv', opts) -vim.keymap.set('n', 'N', 'Nzzzv', opts) +vim.keymap.set("n", "n", "nzzzv", opts) +vim.keymap.set("n", "N", "Nzzzv", opts) + +-- Resize with arrows +vim.keymap.set("n", "", ":resize -1", opts) +vim.keymap.set("n", "", ":resize +1", opts) +vim.keymap.set("n", "", ":vertical resize -1", opts) +vim.keymap.set("n", "", ":vertical resize +1", opts) -- Buffers ---vim.keymap.set('n', '', ':bnext', opts) ---vim.keymap.set('n', '', ':bprevious', opts) -vim.keymap.set('n', 'w', ':bdelete!', opts) -- close buffer -vim.keymap.set('n', 'n', ' enew ', opts) -- new buffer +vim.keymap.set("n", "", ":bnext", opts) +vim.keymap.set("n", "", ":bprevious", opts) +vim.keymap.set("n", "x", ":bdelete!", opts) -- close buffer +vim.keymap.set("n", "b", " enew ", opts) -- new buffer + +-- Increment/decrement numbers +vim.keymap.set("n", "+", "", opts) -- increment +vim.keymap.set("n", "-", "", opts) -- decrement -- Window management -vim.keymap.set('n', 'v', 'v', opts) -- split window vertically -vim.keymap.set('n', 'h', 's', opts) -- split window horizontally -vim.keymap.set('n', 'se', '=', opts) -- make split windows equal width & height -vim.keymap.set('n', 'xs', ':close', opts) -- close current split window +vim.keymap.set("n", "v", "v", opts) -- split window vertically +vim.keymap.set("n", "h", "s", opts) -- split window horizontally +vim.keymap.set("n", "se", "=", opts) -- make split windows equal width & height +vim.keymap.set("n", "xs", ":close", opts) -- close current split window -- Navigate between splits -vim.keymap.set('n', '', ':wincmd k', opts) -vim.keymap.set('n', '', ':wincmd j', opts) -vim.keymap.set('n', '', ':wincmd h', opts) -vim.keymap.set('n', '', ':wincmd l', opts) +vim.keymap.set("n", "", ":wincmd k", opts) +vim.keymap.set("n", "", ":wincmd j", opts) +vim.keymap.set("n", "", ":wincmd h", opts) +vim.keymap.set("n", "", ":wincmd l", opts) -- Toggle line wrapping -vim.keymap.set('n', 'lw', 'set wrap!', opts) +vim.keymap.set("n", "lw", "set wrap!", opts) + +-- Press jk fast to exit insert mode +vim.keymap.set("i", "jk", "", opts) +vim.keymap.set("i", "kj", "", opts) + +-- Move text up and down +vim.keymap.set({ "n", "v" }, "", ":m .+1==", opts) +vim.keymap.set({ "n", "v" }, "", ":m .-1==", opts) -- Stay in indent mode -vim.keymap.set('v', '<', '', '>gv', opts) +vim.keymap.set("v", "<", "", ">gv", opts) -- Keep last yanked when pasting -vim.keymap.set('v', 'p', '"_dP', opts) +vim.keymap.set("v", "p", '"_dP', opts) -- Tabs -vim.keymap.set('n', 'tn', ':tabnew', opts) -- open new tab -vim.keymap.set('n', 'tw', ':tabclose', opts) -- close current tab -vim.keymap.set('n', '', ':tabn', opts) -- go to next tab -vim.keymap.set('n', '', ':tabp', opts) -- go to previous tab +vim.keymap.set("n", "tn", ":tabnew", opts) -- open new tab +vim.keymap.set("n", "tw", ":tabclose", opts) -- close current tab +vim.keymap.set("n", "", ":tabn", opts) -- go to next tab +vim.keymap.set("n", "", ":tabp", opts) -- go to previous tab diff --git a/nvim/.config/nvim/lua/zegonix/settings.lua b/nvim/.config/nvim/lua/zegonix/settings.lua index 04b974a..5298e38 100644 --- a/nvim/.config/nvim/lua/zegonix/settings.lua +++ b/nvim/.config/nvim/lua/zegonix/settings.lua @@ -1,9 +1,11 @@ -- enable line numbers and make them relative -vim.o.number = true +vim.wo.number = true vim.o.relativenumber = true -- sync clipboards of nvim and os -vim.o.clipboard = 'unnamedplus' +vim.schedule(function() + vim.opt.clipboard = "unnamedplus" +end) -- disable line wrap.. vim.o.wrap = false @@ -11,7 +13,7 @@ vim.o.linebreak = true vim.o.breakindent = true -- enable mouse mode (default = '') -vim.o.mouse = 'a' +vim.o.mouse = "a" -- copies the indetation of the current line vim.o.autoindent = true @@ -21,6 +23,7 @@ vim.o.smartindent = true vim.o.hlsearch = true -- enable highlighting of hits with current serch expression vim.o.incsearch = true -- enable incremental search vim.o.ignorecase = true -- search ignore case +vim.keymap.set("n", "", "nohlsearch") -- clear search highlight on `ESC` -- set tab to 4 spaces and convert tabs to spaces vim.o.tabstop = 4 @@ -35,16 +38,33 @@ vim.o.sidescrolloff = 8 -- view settings vim.o.cursorline = true -- highlight current line vim.o.termguicolors = true -- enable true colors (rgb) -vim.o.showmode = true -- show current mode (normal, insert, visual) -vim.o.pumheight = 8 -- pop up menu height +vim.o.showmode = false -- show current mode (normal, insert, visual) +vim.o.pumheight = 10 -- pop up menu height +vim.o.cmdheight = 1 vim.o.signcolumn = "yes" vim.o.updatetime = 250 +vim.o.timeoutlen = 300 +vim.o.splitbelow = true +vim.o.splitright = true +vim.o.conceallevel = 0 -- history settings -vim.o.undofile = false +vim.opt.list = true +vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" } +-- stuff +vim.opt.undofile = true +vim.o.backup = false +vim.o.writebackup = false +vim.o.whichwrap = "bs<>[]hl" -- which "horizontal" keys are allowed to travel to prev/next line +vim.o.backspace = "indent,eol,start" +vim.o.fileencoding = "utf-8" -vim.o.completeopt = 'menuone,noselect' +vim.o.completeopt = "menuone,noselect" vim.opt.isfname:append("@-@") +vim.opt.shortmess:append("c") -- don't give |ins-completion-menu| messages +vim.opt.iskeyword:append("-") -- hyphenated words recognized by searches +vim.opt.formatoptions:remove({ "c", "r", "o" }) -- don't insert the current comment leader automatically for auto-wrapping comments using 'textwidth', hitting in insert mode, or hitting 'o' or 'O' in normal mode. +vim.opt.runtimepath:remove("/usr/share/vim/vimfiles") -- separate vim plugins from neovim in case vim still in use diff --git a/picom/.config/picom.conf b/picom/.config/picom.conf index 052409d..7d627b2 100644 --- a/picom/.config/picom.conf +++ b/picom/.config/picom.conf @@ -14,7 +14,9 @@ fade-delta = 8; # opacity transparent-clipping = false; opacity-rule = [ - "90:class_g = 'Alacritty'" + "90:class_g = 'Alacritty'", + "85:class_g = 'Polybar'", + "95:class_g = 'SpeedCrunch'", ]; # corners @@ -28,4 +30,4 @@ backend = "xrender"; vsync = true; use-damage = true; xrender-sync = true; -xrender-sync-fence = true; \ No newline at end of file +xrender-sync-fence = true;