Initial Commit

This commit is contained in:
Lorenzo Good 2025-05-16 18:11:06 -05:00
commit d18f18fc29
Signed by: lorenzo
GPG key ID: 7FCD64BD81180ED0
28 changed files with 1415 additions and 0 deletions

1
nvim/config/init.lua Executable file
View file

@ -0,0 +1 @@
require 'FoehammerVim'.init()

3
nvim/config/lua/.luarc.json Executable file
View file

@ -0,0 +1,3 @@
{
"workspace.checkThirdParty": false
}

View file

@ -0,0 +1,10 @@
local function init()
require 'FoehammerVim.vim'.init()
require 'FoehammerVim.theme'.init()
require 'FoehammerVim.languages'.init()
require 'FoehammerVim.telescope'.init()
end
return {
init = init,
}

View file

@ -0,0 +1,239 @@
local lspconfig = require 'lspconfig'
local treesitter = require 'nvim-treesitter.configs'
local treesitter_context = require 'treesitter-context'
local cmp = require 'cmp'
local luasnip = require 'luasnip'
local cmp_lsp = require 'cmp_nvim_lsp'
local rust_tools = require 'rust-tools'
local function autocmd(args)
local event = args[1]
local group = args[2]
local callback = args[3]
vim.api.nvim_create_autocmd(event, {
group = group,
buffer = args[4],
callback = function()
callback()
end,
once = args.once,
})
end
local function on_attach(client, buffer)
local augroup_highlight = vim.api.nvim_create_augroup("custom-lsp-references", { clear = true })
local autocmd_clear = vim.api.nvim_clear_autocmds
local opts = { buffer = buffer, remap = false }
vim.bo[buffer].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Enable completion triggered by <c-x><c-o>
vim.bo[buffer].omnifunc = 'v:lua.vim.lsp.omnifunc'
vim.keymap.set('n', '<leader>gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', '<leader>gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', '<leader>K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', '<leader>gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<leader>wa', vim.lsp.buf.add_workspace_folder, opts)
vim.keymap.set('n', '<leader>wr', vim.lsp.buf.remove_workspace_folder, opts)
vim.keymap.set('n', '<leader>wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts)
vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<leader>f', function() vim.lsp.buf.format { async = true } end, opts)
vim.cmd [[autocmd BufWritePre * lua vim.lsp.buf.format({ async = false })]]
if client.server_capabilities.documentHighlightProvider then
autocmd_clear { group = augroup_highlight, buffer = buffer }
autocmd { "CursorHold", augroup_highlight, vim.lsp.buf.document_highlight, buffer }
autocmd { "CursorMoved", augroup_highlight, vim.lsp.buf.clear_references, buffer }
end
end
local function init()
rust_tools.setup {
server = {
settings = {
['rust-analyzer'] = {
cargo = {
buildScripts = {
enable = true,
},
},
diagnostics = {
enable = false,
},
files = {
excludeDirs = { ".direnv", ".git" },
watcherExclude = { ".direnv", ".git" },
},
},
},
on_attach = on_attach,
},
}
local language_servers = {
astro = {},
clangd = {},
cssls = {},
dagger = {},
diagnosticls = {
filetypes = { "python" },
init_options = {
filetypes = {
python = "black"
},
formatFiletypes = {
python = { "black" }
},
formatters = {
black = {
command = "black",
args = { "--quiet", "-" },
rootPatterns = { "pyproject.toml" },
},
},
}
},
elixirls = {
cmd = { "elixir-ls" },
},
gopls = {
settings = {
gopls = {
gofumpt = true,
},
},
},
html = {
filetypes = { "html", "htmldjango" },
},
jsonls = {},
lua_ls = {
settings = {
Lua = {
diagnostics = {
globals = { "vim" },
},
runtime = {
version = 'LuaJIT',
},
telemetry = {
enable = false,
},
workspace = {
library = vim.api.nvim_get_runtime_file("", true),
},
}
}
},
nil_ls = {
settings = {
['nil'] = {
formatting = { command = { 'alejandra' } },
}
}
},
pyright = {},
tsserver = {},
tailwindcss = {
filetypes = { "templ", "astro", "typescriptreact", "react", "html", "heex" },
settings = {
tailwindCSS = {
includeLanguages = {
templ = "html",
},
},
},
},
yamlls = {
settings = {
yaml = {
keyOrdering = false,
},
},
},
zls = {},
}
local capabilities = cmp_lsp.default_capabilities()
-- Initialize servers
for server, server_config in pairs(language_servers) do
local config = { on_attach = on_attach, capabilities = capabilities }
if server_config then
for k, v in pairs(server_config) do
config[k] = v
end
end
lspconfig[server].setup(config)
end
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist)
treesitter.setup {
auto_install = false,
ignore_install = {},
ensure_installed = {},
highlight = { enable = true },
indent = { enable = true },
modules = {},
rainbow = { enable = true },
sync_install = false,
}
treesitter_context.setup()
cmp.setup({
snippet = {
-- REQUIRED - you must specify a snippet engine
expand = function(args)
luasnip.lsp_expand(args.body) -- For `luasnip` users.
end,
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
mapping = cmp.mapping.preset.insert({
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' }, -- For luasnip users.
}, {
{ name = 'buffer' },
})
})
vim.g.vimtex_view_method = "zathura"
end
return {
init = init,
}

View file

@ -0,0 +1,45 @@
local telescope = require 'telescope'
local actions = require 'telescope.actions'
local function init()
telescope.setup {
defaults = {
file_ignore_patterns = {
"node_modules/.*",
"%.pem"
},
layout_strategy = "flex",
layout_config = {
horizontal = {
prompt_position = "bottom",
preview_width = 0.55,
},
vertical = { mirror = false },
width = 0.87,
height = 0.8,
preview_cutoff = 125,
},
mappings = {
i = {
["<esc>"] = actions.close,
["<C-u>"] = false,
["<c-d>"] = actions.delete_buffer + actions.move_to_top,
},
},
}
}
telescope.load_extension('notify')
local options = { noremap = true, silent = true }
vim.keymap.set('n', '<leader>ff', '<CMD>lua require ("telescope.builtin").find_files()<CR>', options)
vim.keymap.set('n', '<leader>fg', '<CMD>lua require ("telescope.builtin").live_grep()<CR>', options)
vim.keymap.set('n', '<leader>cd', '<CMD>lua require ("telescope.builtin").diagnostics()<CR>', options)
vim.keymap.set('n', '<leader>b', '<CMD>lua require ("telescope.builtin").buffers()<CR>', options)
end
return {
init = init,
}

View file

@ -0,0 +1,162 @@
local gitsigns = require 'gitsigns'
local lualine = require 'lualine'
local noice = require 'noice'
local notify = require 'notify'
local gruvbox = require 'gruvbox'
local function setup_lualine()
local colors = {
black = '#282828',
white = '#ebdbb2',
red = '#fb4934',
green = '#b8bb26',
blue = '#459588',
yellow = '#faBD2f',
gray = '#928374',
darkgray = '#3c3836',
lightgray = '#504945',
inactivegray = '#7c6f64',
}
local theme = {
normal = {
a = { bg = colors.gray, fg = colors.black, gui = 'bold' },
b = { bg = colors.lightgray, fg = colors.white },
c = { bg = colors.darkgray, fg = colors.gray },
},
insert = {
a = { bg = colors.blue, fg = colors.black, gui = 'bold' },
b = { bg = colors.lightgray, fg = colors.white },
c = { bg = colors.lightgray, fg = colors.white },
},
visual = {
a = { bg = colors.yellow, fg = colors.black, gui = 'bold' },
b = { bg = colors.lightgray, fg = colors.white },
c = { bg = colors.inactivegray, fg = colors.black },
},
replace = {
a = { bg = colors.red, fg = colors.black, gui = 'bold' },
b = { bg = colors.lightgray, fg = colors.white },
c = { bg = colors.black, fg = colors.white },
},
command = {
a = { bg = colors.green, fg = colors.black, gui = 'bold' },
b = { bg = colors.lightgray, fg = colors.white },
c = { bg = colors.inactivegray, fg = colors.black },
},
inactive = {
a = { bg = colors.darkgray, fg = colors.gray, gui = 'bold' },
b = { bg = colors.darkgray, fg = colors.gray },
c = { bg = colors.darkgray, fg = colors.gray },
},
}
lualine.setup({
options = {
icons_enabled = true,
theme = theme,
component_separators = { left = '', right = '' },
section_separators = { left = '', right = '' },
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = vim.go.laststatus == 3,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
},
},
sections = {
lualine_a = { 'mode' },
lualine_b = { 'branch', 'diff', 'diagnostics' },
lualine_c = { 'filename' },
lualine_x = { 'encoding', {
'fileformat',
symbols = {
unix = "",
mac = "󰀶",
}
},
'filetype' },
lualine_y = { 'progress' },
lualine_z = { 'location' },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { 'filename' },
lualine_x = { 'location' },
lualine_y = {},
lualine_z = {},
},
})
end
local function init()
gitsigns.setup {}
setup_lualine()
notify.setup({
render = "compact",
timeout = 1000,
})
noice.setup({
lsp = {
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
["cmp.entry.get_documentation"] = true, -- requires hrsh7th/nvim-cmp
},
},
-- you can enable a preset for easier configuration
presets = {
bottom_search = true, -- use a classic bottom cmdline for search
command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- 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
},
})
gruvbox.setup {
terminal_colors = true,
undercurl = true,
underline = true,
bold = true,
italic = {
strings = true,
emphasis = true,
comments = true,
operators = false,
folds = true,
},
strikethrough = true,
invert_selection = false,
invert_signs = false,
invert_tabline = false,
invert_intend_guides = false,
inverse = true, -- invert background for search, diffs, statuslines and errors
contrast = "", -- can be "hard", "soft" or empty string
palette_overrides = {},
overrides = {},
dim_inactive = false,
transparent_mode = false,
}
vim.o.background = "dark"
vim.cmd [[colorscheme gruvbox]]
end
return {
init = init,
}

View file

@ -0,0 +1,72 @@
local function set_vim_g()
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
end
local function set_vim_opt()
local settings = {
relativenumber = true,
number = true,
showmode = false,
clipboard = 'unnamedplus',
breakindent = true,
undofile = true,
ignorecase = true,
smartcase = true,
signcolumn = 'yes',
updatetime = 250,
timeoutlen = 300,
splitright = true,
splitbelow = true,
inccommand = 'split',
cursorline = true,
scrolloff = 10,
hlsearch = true,
termguicolors = true,
tabstop = 4,
shiftwidth = 4
}
for k, v in pairs(settings) do
vim.opt[k] = v
end
end
local function set_vim_keymaps()
local options = { noremap = false, silent = true }
vim.keymap.set('n', '<leader>h', '<CMD>wincmd h<CR>', options)
vim.keymap.set('n', '<leader>j', '<CMD>wincmd j<CR>', options)
vim.keymap.set('n', '<leader>k', '<CMD>wincmd k<CR>', options)
vim.keymap.set('n', '<leader>l', '<CMD>wincmd l<CR>', options)
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
-- Bandaid Peel
vim.keymap.set('n', '<left>', '<Nop>')
vim.keymap.set('n', '<right>', '<Nop>')
vim.keymap.set('n', '<up>', '<Nop>')
vim.keymap.set('n', '<down>', '<No')
-- Tabs:
vim.api.nvim_set_keymap("n", "<leader>ta", ":$tabnew<CR>", { noremap = true })
vim.api.nvim_set_keymap("n", "<leader>tc", ":tabclose<CR>", { noremap = true })
vim.api.nvim_set_keymap("n", "<leader>to", ":tabonly<CR>", { noremap = true })
vim.api.nvim_set_keymap("n", "<leader>tn", ":tabn<CR>", { noremap = true })
vim.api.nvim_set_keymap("n", "<leader>tp", ":tabp<CR>", { noremap = true })
-- move current tab to previous position
vim.api.nvim_set_keymap("n", "<leader>tmp", ":-tabmove<CR>", { noremap = true })
-- move current tab to next position
vim.api.nvim_set_keymap("n", "<leader>tmn", ":+tabmove<CR>", { noremap = true })
end
local function init()
vim.loader.enable()
set_vim_g()
set_vim_opt()
set_vim_keymaps()
end
return {
init = init,
}

91
nvim/default.nix Normal file
View file

@ -0,0 +1,91 @@
{pkgs, ...}: let
plugins = let
inherit (pkgs) vimPlugins;
in
with vimPlugins; [
# Languages
nvim-lspconfig
nvim-treesitter.withAllGrammars
nvim-cmp
luasnip
cmp_luasnip
cmp-nvim-lsp
cmp-buffer
rust-tools-nvim
# Telescope Stuff
telescope-nvim
plenary-nvim
# Extra Stuff
gitsigns-nvim
lualine-nvim
noice-nvim
nvim-notify
gruvbox-nvim
nui-nvim
nvim-treesitter-context
nvim-web-devicons
vimtex
];
packages = let
inherit (pkgs) nodePackages;
in
with pkgs; [
#LSPs
cuelsp
elixir-ls
gopls
lua-language-server
rust-analyzer
tailwindcss-language-server
nil
nodePackages."@astrojs/language-server"
nodePackages."typescript-language-server"
nodePackages."diagnostic-languageserver"
nodePackages."vscode-langservers-extracted"
nodePackages."yaml-language-server"
pyright
zls
#Formatters
gofumpt
alejandra
rustfmt
python3Packages.black
# Telescope Stuff
ripgrep
fd
];
vimPlugin = let
inherit (pkgs.vimUtils) buildVimPlugin;
in
buildVimPlugin {
name = "FoehammerVim";
src = ./config;
};
extraConfig = ''
lua << EOF
require 'FoehammerVim'.init()
EOF
'';
in {
home.packages = with pkgs; [ripgrep fd];
programs.neovim = {
inherit extraConfig;
plugins = plugins ++ [vimPlugin];
extraPackages = packages;
enable = true;
defaultEditor = true;
withNodeJs = true;
withPython3 = true;
withRuby = true;
};
}