commit afe167a752d5e1119d3ed982f52d6dba104611ef Author: Zakarya Date: Fri Apr 18 12:43:43 2025 -0700 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..3411816 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Zakarya's Neovim Config + +I decided to get into Neovim because I thought it would be funny, here is the result. + +## To install: + +For Unix-like systems (Linux, MacOS, etc.): + +(Remember to back up any existing configuration) +```bash +cd ~/.config/nvim + +git clone https://git.colormatic.org/zakarya/nvim-config.git . +``` + +For Windows: +Good luck. + +For any other operating systems that I didn't mention: +Have fun. + +This configuration uses lazy.nvim for package management and Mason for collecting LSPs. + +It also has formatting, autocomplete, and the Gruvbox theme. + +**Special actions:** +To activate the formatter, do `:Fmt` +To open the file explorer window, do `:Exp` +To enter the selected autocomplete selection, press `Tab` diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..0db0164 --- /dev/null +++ b/init.lua @@ -0,0 +1,41 @@ +require("config.lazy") + + +-- Gruvbox theme +vim.o.background = "dark" +vim.cmd([[colorscheme gruvbox]]) + + +-- Vim config +local opt = vim.opt + +opt.expandtab = false +opt.cursorline = true +opt.tabstop = 3 +opt.wrap = false +opt.number = true +opt.spell = true +opt.spelllang = "en_us" -- Change to your preferred language + + +-- Commands +vim.api.nvim_create_user_command("Exp", function() + Snacks.explorer.open() +end, { range = true }) + +vim.api.nvim_create_user_command("Fmt", function(args) + local range = nil + if args.count ~= -1 then + local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true) + [1] + range = { + start = { args.line1, 0 }, + ["end"] = { args.line2, end_line:len() }, + } + end + require("conform").format({ async = true, lsp_format = "fallback", range = range }) +end, { range = true }) + + +-- Don't highlight Zakarya style multiline comments as an error +vim.cmd([[highlight link cCommentStartError cComment]]) diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..e29aa39 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,15 @@ +{ + "ale": { "branch": "master", "commit": "baaca9a5d7016c52466c3b4cd2d161b317d801ed" }, + "blink.cmp": { "branch": "main", "commit": "cb5e346d9e0efa7a3eee7fd4da0b690c48d2a98e" }, + "conform.nvim": { "branch": "master", "commit": "6632e7d788a85bf8405ea0c812d343fc308b7b8c" }, + "gruvbox.nvim": { "branch": "main", "commit": "a933d8666dad9363dc6908ae72cfc832299c2f59" }, + "indentmini.nvim": { "branch": "main", "commit": "59c2be5387e3a3308bb43f07e7e39fde0628bd4d" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "lualine.nvim": { "branch": "master", "commit": "86fe39534b7da729a1ac56c0466e76f2c663dc42" }, + "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, + "nvim-cursorline": { "branch": "main", "commit": "804f0023692653b2b2368462d67d2a87056947f9" }, + "nvim-treesitter": { "branch": "master", "commit": "684eeac91ed8e297685a97ef70031d19ac1de25a" }, + "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, + "nvim-web-devicons": { "branch": "master", "commit": "c90dee4e930ab9f49fa6d77f289bff335b49e972" }, + "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" } +} diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua new file mode 100644 index 0000000..6cbfe08 --- /dev/null +++ b/lua/config/lazy.lua @@ -0,0 +1,35 @@ +-- Bootstrap 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 + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, +}) diff --git a/lua/plugins/ale.lua b/lua/plugins/ale.lua new file mode 100644 index 0000000..b368f72 --- /dev/null +++ b/lua/plugins/ale.lua @@ -0,0 +1,22 @@ +return { + { + "dense-analysis/ale", + config = function() + -- Make the Lua LS not freak out about the undefined globals + vim.g.ale_linters = { + lua = { 'sumneko_lua' }, + } + + vim.g.ale_lua_sumneko_lua_executable = 'lua-language-server' + vim.g.ale_lua_sumneko_lua_options = { + settings = { + Lua = { + diagnostics = { + globals = { 'vim', 'Snacks' }, + }, + }, + }, + } + end + }, +} diff --git a/lua/plugins/blink.lua b/lua/plugins/blink.lua new file mode 100644 index 0000000..6487119 --- /dev/null +++ b/lua/plugins/blink.lua @@ -0,0 +1,66 @@ +return { + { + "saghen/blink.cmp", + + -- use a release tag to download pre-built binaries + version = "1.*", + -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust + -- build = "cargo build --release", + -- If you use nix, you can build from source using latest nightly rust with: + -- build = "nix run .#build-plugin", + + ---@module "blink.cmp" + ---@type blink.cmp.Config + opts = { + -- "default" (recommended) for mappings similar to built-in completions (C-y to accept) + -- "super-tab" for mappings similar to vscode (tab to accept) + -- "enter" for enter to accept + -- "none" for no mappings + -- + -- All presets have the following mappings: + -- C-space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { + -- set to "none" to disable the "default" preset + preset = "none", + + [""] = { "select_prev", "fallback" }, + [""] = { "select_next", "fallback" }, + [""] = { "accept", "fallback" }, + + -- disable a keymap from the preset + [""] = {}, + + -- show with a list of providers + [""] = { function(cmp) cmp.show({ providers = { "snippets" } }) end }, + }, + + appearance = { + -- "mono" (default) for "Nerd Font Mono" or "normal" for "Nerd Font" + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = "mono" + }, + + -- (Default) Only show the documentation popup when manually triggered + completion = { documentation = { auto_show = false } }, + + -- Default list of enabled providers defined so that you can extend it + -- elsewhere in your config, without redefining it, due to `opts_extend` + sources = { + default = { "lsp", "path", "buffer" }, + }, + + -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance + -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, + -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` + -- + -- See the fuzzy documentation for more information + fuzzy = { implementation = "prefer_rust_with_warning" } + }, + opts_extend = { "sources.default" } + } +} diff --git a/lua/plugins/conform.lua b/lua/plugins/conform.lua new file mode 100644 index 0000000..0ed3203 --- /dev/null +++ b/lua/plugins/conform.lua @@ -0,0 +1,14 @@ +return { + { + "stevearc/conform.nvim", + + opts = {}, + config = function() + require("conform").setup({ + formatters_by_ft = { + json = { "prettier" } + } + }) + end, + }, +} diff --git a/lua/plugins/cursorline.lua b/lua/plugins/cursorline.lua new file mode 100644 index 0000000..5b593f3 --- /dev/null +++ b/lua/plugins/cursorline.lua @@ -0,0 +1,19 @@ +return { + { + "ya2s/nvim-cursorline", + config = function() + require("nvim-cursorline").setup({ + cursorline = { + enable = true, + timeout = 0, + number = false, + }, + cursorword = { + enable = true, + min_length = 3, + hl = { underline = true }, + } +}) + end, + }, +} diff --git a/lua/plugins/gruvbox.lua b/lua/plugins/gruvbox.lua new file mode 100644 index 0000000..e908aa7 --- /dev/null +++ b/lua/plugins/gruvbox.lua @@ -0,0 +1,7 @@ +return { + { + "ellisonleao/gruvbox.nvim", + priority = 1000, + config = true, + }, +} diff --git a/lua/plugins/indent.lua b/lua/plugins/indent.lua new file mode 100644 index 0000000..2bc3e73 --- /dev/null +++ b/lua/plugins/indent.lua @@ -0,0 +1,10 @@ +return { + { + "nvimdev/indentmini.nvim", + config = function() + require("indentmini").setup() + + vim.cmd.highlight("IndentLine guifg=#444444") -- Set indent line color + end + } +} diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..db1e46d --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,9 @@ +return { + { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("lualine").setup() + end, + }, +} diff --git a/lua/plugins/mason.lua b/lua/plugins/mason.lua new file mode 100644 index 0000000..95b0e02 --- /dev/null +++ b/lua/plugins/mason.lua @@ -0,0 +1,8 @@ +return { + { + "williamboman/mason.nvim", + config = function() + require("mason").setup() + end, + }, +} diff --git a/lua/plugins/snacks.lua b/lua/plugins/snacks.lua new file mode 100644 index 0000000..91545c3 --- /dev/null +++ b/lua/plugins/snacks.lua @@ -0,0 +1,21 @@ +return { + { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + opts = { + bigfile = { enabled = true }, + dashboard = { enabled = true }, + explorer = { enabled = true }, + indent = { enabled = true }, + input = { enabled = true }, + picker = { enabled = true }, + notifier = { enabled = true }, + quickfile = { enabled = true }, + scope = { enabled = true }, + scroll = { enabled = true }, + statuscolumn = { enabled = true }, + words = { enabled = true }, + }, + }, +} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua new file mode 100644 index 0000000..67943ad --- /dev/null +++ b/lua/plugins/treesitter.lua @@ -0,0 +1,8 @@ +return { + { + "nvim-treesitter/nvim-treesitter" + }, + { + "windwp/nvim-ts-autotag" + } +}