Initial commit

This commit is contained in:
2025-04-18 12:43:43 -07:00
commit afe167a752
14 changed files with 304 additions and 0 deletions

29
README.md Normal file
View File

@ -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`

41
init.lua Normal file
View File

@ -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]])

15
lazy-lock.json Normal file
View File

@ -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" }
}

35
lua/config/lazy.lua Normal file
View File

@ -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 },
})

22
lua/plugins/ale.lua Normal file
View File

@ -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
},
}

66
lua/plugins/blink.lua Normal file
View File

@ -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",
["<Up>"] = { "select_prev", "fallback" },
["<Down>"] = { "select_next", "fallback" },
["<Tab>"] = { "accept", "fallback" },
-- disable a keymap from the preset
["<C-e>"] = {},
-- show with a list of providers
["<C-space>"] = { 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" }
}
}

14
lua/plugins/conform.lua Normal file
View File

@ -0,0 +1,14 @@
return {
{
"stevearc/conform.nvim",
opts = {},
config = function()
require("conform").setup({
formatters_by_ft = {
json = { "prettier" }
}
})
end,
},
}

View File

@ -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,
},
}

7
lua/plugins/gruvbox.lua Normal file
View File

@ -0,0 +1,7 @@
return {
{
"ellisonleao/gruvbox.nvim",
priority = 1000,
config = true,
},
}

10
lua/plugins/indent.lua Normal file
View File

@ -0,0 +1,10 @@
return {
{
"nvimdev/indentmini.nvim",
config = function()
require("indentmini").setup()
vim.cmd.highlight("IndentLine guifg=#444444") -- Set indent line color
end
}
}

9
lua/plugins/lualine.lua Normal file
View File

@ -0,0 +1,9 @@
return {
{
"nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
config = function()
require("lualine").setup()
end,
},
}

8
lua/plugins/mason.lua Normal file
View File

@ -0,0 +1,8 @@
return {
{
"williamboman/mason.nvim",
config = function()
require("mason").setup()
end,
},
}

21
lua/plugins/snacks.lua Normal file
View File

@ -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 },
},
},
}

View File

@ -0,0 +1,8 @@
return {
{
"nvim-treesitter/nvim-treesitter"
},
{
"windwp/nvim-ts-autotag"
}
}