Merge branch 'main' into development

This commit is contained in:
Joshua Finch
2026-08-12 09:47:50 -05:00
27 changed files with 476 additions and 183 deletions

View File

@@ -1,22 +1,43 @@
-- Autocommands for handling large files and switching between large file buffers and others
local largefile_group = vim.api.nvim_create_augroup('largefile', { clear = true })
local max_filesize = 4 * (1024 * 1024) -- 4 MB
local old_eventignore = false
-- Disables syntax, treesitter and folding on larger files
vim.api.nvim_create_autocmd({ 'BufReadPre' }, {
pattern = '*',
group = vim.api.nvim_create_augroup('largefile', { clear = true }),
callback = function(args)
local max_filesize_MiB = 1
group = largefile_group,
callback = function(ev)
if ev.file then
local status, size = pcall(function() return vim.loop.fs_stat(ev.file).size end)
if status and size > max_filesize then
old_eventignore = vim.o.eventignore
vim.o.eventignore = 'FileType' -- Reduce the calls for filetype specific plugins or syntax highlighting
local _, stats = pcall(function()
return vim.loop.fs_stat(vim.api.nvim_buf_get_name(args.buf))
end)
local file_size = math.floor(0.5 + (stats.size / (1024 * 1024)))
if file_size > max_filesize_MiB then
print(string.format('File detected above %sMiB. Disabling syntax, treesitter, and folding.', max_filesize_MiB))
vim.api.nvim_command('set foldmethod=manual')
vim.api.nvim_command('set noswapfile')
vim.api.nvim_command('set noundofile')
vim.api.nvim_command('set noloadplugins')
vim.b[ev.buf].is_large_file = true
vim.bo['bufhidden'] = 'unload'
vim.bo['buftype'] = 'nowrite'
vim.bo['swapfile'] = false
vim.bo['undofile'] = false
vim.bo['undolevels'] = -1
end
end
end,
})
vim.api.nvim_create_autocmd({ 'BufWinEnter' }, {
group = largefile_group,
callback = function(ev)
if old_eventignore ~= false then
vim.o.eventignore = old_eventignore -- Restore the old setting
old_eventignore = false
end
if vim.b[ev.buf].is_large_file then
vim.wo.wrap = false
else
vim.wo.wrap = vim.o.wrap -- Restore to default setting
end
end
})
-- End large file handling

View File

@@ -10,7 +10,7 @@ end, { nargs = '*' })
vim.api.nvim_create_user_command('TreeSitterInstall', function(opts)
for index, value in ipairs(opts.fargs) do
if index > 0 then
local result = vim.system({ 'luarocks', 'install', 'tree-sitter-' .. value }, { text = true }):wait()
local result = vim.system({ 'luarocks', '--local', '--lua-version', '5.1', 'install', 'tree-sitter-' .. value }, { text = true }):wait()
if result.code == 0 then
print('Completed install of tree-sitter-' .. value)

View File

@@ -66,3 +66,10 @@ vim.keymap.set('n', '<leader>eo', ':Lexplore<CR>', options)
-- Allow for leaving Terminal mode using the escape key instead of the odd default
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>')
local sc = require('statuscolumn')
vim.keymap.set('n', '<leader>q', function ()
print('woot')
sc.show_both_nums = not sc.show_both_nums
vim.opt.statuscolumn = "%!v:lua.require('statuscolumn').statusColumn()"
end)

View File

@@ -14,11 +14,10 @@ vim.schedule(function()
require('plugins.telescope') -- Floating window fuzzy searching different sources
require('plugins.telekasten') -- Note taking plugin
require('plugins.mason') -- LSP and DAP manager
-- require('plugins.twilight') -- Focus mode, dim lines around the cursor's location
require('plugins.render-markdown') -- Render markdown directly in neovim
vim.pack.add({
'https://github.com/windwp/nvim-autopairs', -- Autocomplete symbol pairs when typing
'https://github.com/windwp/nvim-autopairs', -- Autocomplete symbol pairs when typing TODO: disabled for now, using snippets instead. remove if that feels better
'https://github.com/tpope/vim-surround', -- Change surrounding characters (doesn't need setup called)
'https://github.com/tpope/vim-fugitive', -- _The_ Git integration plugin people have been using forever
'https://github.com/habamax/vim-godot' -- Godot specific bindings and debug
@@ -30,5 +29,4 @@ vim.schedule(function()
-- Experimental
-- require('plugins.note_taking') -- In house note taking plugin (TODO: rename once the plugin name is solidified)
-- require('plugins.nvim-lint') -- Linter loader
end)

View File

@@ -1,7 +1,7 @@
-- Treesitter
local rocks_path = os.getenv('HOME') .. "/.luarocks/lib/luarocks/rocks-5.1"
-- Pick up the installed
-- Pick up the installed parsers in the install dir
for _, parser_dir in ipairs(vim.fn.glob(rocks_path .. '/tree-sitter-*/*/', true, true)) do
vim.opt.runtimepath:prepend(parser_dir)
end
@@ -9,7 +9,6 @@ end
-- Start treesitter parsing on the current buffer
vim.api.nvim_create_autocmd("FileType", {
callback = function(ev)
-- Use pcall to prevent blocking errors
pcall(vim.treesitter.start, ev.buf)
end
})
@@ -53,12 +52,11 @@ vim.api.nvim_create_autocmd('LspAttach', {
-- end,
-- })
-- Keyboard Mappings
local bufnr = args.buf
local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', '<C-[>', vim.diagnostic.goto_prev, bufopts)
vim.keymap.set('n', '<C-]>', vim.diagnostic.goto_next, bufopts)
vim.keymap.set('n', '<C-[>', function() vim.diagnostic.jump({ count = -1, float = true }) end, bufopts)
vim.keymap.set('n', '<C-]>', function() vim.diagnostic.jump({ count = 1, float = true }) end, bufopts)
vim.keymap.set('n', 'ga', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
@@ -74,5 +72,14 @@ vim.api.nvim_create_autocmd('LspAttach', {
})
-- Enable LSP engines
-- vim.lsp.enable('clangd')
vim.lsp.enable('gdscript')
local enabled_lsps = {
'clangd',
'gdscript',
'jinja_lsp',
'pylsp',
'r_language_server',
}
for _, lsp in pairs(enabled_lsps) do
vim.lsp.enable(lsp)
end

View File

@@ -7,7 +7,6 @@ local function get_schema()
end
vim.pack.add({
-- 'https://github.com/nvim-tree/nvim-web-devicons',
'https://github.com/nvim-lualine/lualine.nvim'
})

View File

@@ -1,5 +1,5 @@
vim.pack.add({
-- 'https://github.com/saadparwaiz1/cmp_luasnip',
'https://github.com/saadparwaiz1/cmp_luasnip',
'https://github.com/rafamadriz/friendly-snippets',
'https://github.com/L3MON4D3/LuaSnip'
})
@@ -18,7 +18,8 @@ local function luasnip_dependency_update()
if out.code == 0 then
vim.notify('LuaSnip jsregexp built successfully!', vim.log.levels.INFO)
else
vim.notify('Failed to build LuaSnip jsregexp:\n' .. (out.stderr or out.stdout or ''), vim.log.levels.ERROR)
vim.notify('Failed to build LuaSnip jsregexp:\n' .. (out.stderr or out.stdout or ''),
vim.log.levels.ERROR)
end
end)
end)
@@ -42,6 +43,6 @@ require('luasnip.loaders.from_vscode').lazy_load()
require('luasnip.loaders.from_lua').lazy_load({ paths = "./snippets" })
-- TODO: Figure out keymappings that make sense
vim.keymap.set({ 'i' }, '<C-k>', function() require('luasnip').expand() end, { silent = true })
vim.keymap.set({ 'i', 's' }, '<C-l>', function() require('luasnip').jump(1) end, { silent = true })
vim.keymap.set({ 'i', 's' }, '<C-j>', function() require('luasnip').jump(-1) end, { silent = true })
vim.keymap.set({ 'i' }, '<C-K>', function() require('luasnip').expand() end, { silent = true })
vim.keymap.set({ 'i', 's' }, '<C-L>', function() require('luasnip').jump(1) end, { silent = true })
vim.keymap.set({ 'i', 's' }, '<C-H>', function() require('luasnip').jump(-1) end, { silent = true })

View File

@@ -16,7 +16,6 @@ require('mason-lspconfig').setup {
'marksman', -- markdown
'pylsp', -- Python
'rust_analyzer', -- Rust
'ts_ls', -- Typscript
'yamlls', -- YAML
}
}

View File

@@ -1,6 +1,5 @@
vim.pack.add({
'https://github.com/kevinhwang91/nvim-bqf',
'https://github.com/nvim-telescope/telescope-file-browser.nvim',
-- 'https://github.com/kevinhwang91/nvim-bqf',
'https://github.com/nvim-lua/plenary.nvim',
'https://github.com/nvim-telescope/telescope.nvim',
})
@@ -23,9 +22,7 @@ require('telescope').setup {
layout_config = { prompt_position = 'bottom' },
-- layout_strategy = 'vertical',
mappings = {
i = {
['<ESC>'] = require('telescope.actions').close,
},
i = { ['<ESC>'] = require('telescope.actions').close, },
},
prompt_prefix = '',
results_title = false,
@@ -35,7 +32,6 @@ require('telescope').setup {
},
pickers = {
diagnostics = {
-- theme = 'ivy',
initial_mode = 'normal',
layout_config = {
preview_cutoff = 9999,
@@ -46,18 +42,12 @@ require('telescope').setup {
local builtin = require('telescope.builtin')
vim.keymap.set('n', ';f', function()
builtin.find_files({
no_ignore = false,
hidden = true,
})
end)
vim.keymap.set('n', ';r', function() builtin.live_grep() end)
vim.keymap.set('n', ';b', function() builtin.buffers() end)
vim.keymap.set('n', ';h', function() builtin.help_tags() end)
vim.keymap.set('n', ';;', function() builtin.resume() end)
vim.keymap.set('n', ';b', function() builtin.buffers() end)
vim.keymap.set('n', ';d', function() builtin.diagnostics() end)
vim.keymap.set('n', ';t', function() builtin.treesitter() end)
vim.keymap.set('n', ';f', function() builtin.find_files({ no_ignore = false, hidden = true }) end)
vim.keymap.set('n', ';h', function() builtin.help_tags() end)
vim.keymap.set('n', ';r', function() builtin.live_grep() end)
vim.keymap.set('n', ';s', function() builtin.lsp_document_symbols() end)
vim.keymap.set('n', ';t', function() builtin.treesitter() end)
vim.keymap.set('n', ';w', function() builtin.lsp_dynamic_workspace_symbols() end)

View File

@@ -1,47 +1,46 @@
-- Experimental
-- vim.o.autocomplete = true
vim.opt.background = 'dark' -- Force a dark background for the colorscheme
vim.opt.clipboard = 'unnamed,unnamedplus' -- Use both the "*" and "+" registers for yanks and deletes (puts things in the system clipboard)
vim.opt.completeopt = 'fuzzy,menuone,noinsert,popup' -- Change how the completion menu is interacted with and displays
vim.opt.cursorcolumn = true -- Highlight the column the cursor is on
vim.opt.cursorline = true -- Highlight the line the cursor is on.
vim.opt.expandtab = true -- Expand tabs into spaces
vim.opt.fileformat = 'unix' -- Explicitly state that files should use the unix style EOL characters.
-- vim.opt.fillchars = 'fold: ' -- Sets the character that fills in a fold line (removes the dots)
vim.opt.foldcolumn = '0' -- Disables the foldcolumn
vim.opt.foldexpr = 'v:lua.vim.treesitter.foldexpr()' -- Uses Treesitter to determine where code folding should occur
vim.opt.foldlevel = 10 -- Sets the initial level at which folds will be closed
vim.opt.foldlevelstart = 4 -- Sets the initial fold level
vim.opt.foldmethod = 'expr' -- Attempt to use the syntax of a file to set folds.
vim.opt.foldnestmax = 4 -- Maximum level of fold nesting
vim.opt.formatoptions = 'cqrto' -- Allow auto insertion of comment lines when using o or O on a comment.
vim.opt.ignorecase = true -- Case-insensitive searching
vim.opt.list = true -- Show the listchars
vim.opt.listchars = 'tab:|·,trail:¬,extends:»,precedes:«,nbsp:+' -- Characters to display when showing whitespace
vim.opt.mouse = 'a' -- Enable mouse mode
vim.opt.number = true -- Show the line number in the gutter.
vim.opt.pumheight = 15 -- Maximum height of the auto complete floating window
vim.opt.relativenumber = true -- Relative line number
vim.opt.sidescrolloff = 8 -- Side scrolling leadoff to keep the cursor a few characters from the screen edge instead of going all the way to it
vim.opt.shiftround = true -- Round indentation to shiftwidth
vim.opt.shiftwidth = 4 -- Number of spaces a tab counts for when converting tabs to spaces
vim.opt.shortmess = 'at' -- Abbreviations and truncation of cmd messages
vim.opt.showmatch = true -- Show matching bracket
vim.opt.signcolumn = 'yes' -- Always show the gutter
vim.opt.smartcase = true -- Keeps searches Case-insensitive until the search has an upper case character
vim.opt.smartindent = true -- Attempt to insert indentation to fit traditional languages.
vim.opt.softtabstop = 4 -- Number of spaces a tab counts for when converting tabs to spaces
vim.opt.splitbelow = true -- Split windows below when horizontal splitting
vim.opt.splitright = true -- Split windows right when vertical splitting
vim.opt.swapfile = false -- Disable the creation of swap files for open files
vim.opt.tabstop = 4 -- Setting the value of spaces per tab
vim.opt.termguicolors = true -- Enable the truecolor GUI colors in a terminal
vim.opt.undodir = os.getenv('HOME') .. '/.config/nvim/undodir' -- Set a specific undo file directory
vim.opt.undofile = true -- Enable undo files
vim.opt.updatetime = 300 -- Swapfile update time in milliseconds
vim.opt.wrap = false -- Do _not_ wrap lines
vim.opt.background = 'dark' -- Force a dark background for the colorscheme
vim.opt.clipboard = 'unnamed,unnamedplus' -- Use both the "*" and "+" registers for yanks and deletes (puts things in the system clipboard)
vim.opt.completeopt = 'fuzzy,menuone,noinsert,popup' -- Change how the completion menu is interacted with and displays
vim.opt.cursorcolumn = true -- Highlight the column the cursor is on
vim.opt.cursorline = true -- Highlight the line the cursor is on.
vim.opt.expandtab = true -- Expand tabs into spaces
vim.opt.fileformat = 'unix' -- Explicitly state that files should use the unix style EOL characters.
vim.opt.fillchars = 'fold: ' -- Sets the character that fills in a fold line (removes the dots)
vim.opt.foldcolumn = '0' -- Disables the foldcolumn
vim.opt.foldexpr = 'v:lua.vim.treesitter.foldexpr()' -- Uses Treesitter to determine where code folding should occur
vim.opt.foldlevelstart = 4 -- Sets the initial fold level
vim.opt.foldmethod = 'expr' -- Attempt to use the syntax of a file to set folds.
vim.opt.foldnestmax = 4 -- Maximum level of fold nesting
vim.opt.formatoptions = 'cqrto' -- Allow auto insertion of comment lines when using o or O on a comment.
vim.opt.ignorecase = true -- Case-insensitive searching
vim.opt.list = true -- Show the listchars
vim.opt.listchars = 'tab:|·,trail:¬,extends:»,precedes:«,nbsp:+' -- Characters to display when showing whitespace
vim.opt.mouse = 'a' -- Enable mouse mode
vim.opt.number = true -- Show the line number in the gutter.
vim.opt.pumheight = 15 -- Maximum height of the auto complete floating window
vim.opt.relativenumber = true -- Show the relative line numbers
vim.opt.sidescrolloff = 8 -- Side scrolling leadoff to keep the cursor a few characters from the screen edge instead of going all the way to it
vim.opt.shiftround = true -- Round indentation to shiftwidth
vim.opt.shiftwidth = 4 -- Number of spaces a tab counts for when converting tabs to spaces
vim.opt.shortmess = 'at' -- Abbreviations and truncation of cmd messages
vim.opt.showmatch = true -- Show matching bracket
vim.opt.signcolumn = 'yes' -- Always show the gutter
vim.opt.smartcase = true -- Keeps searches Case-insensitive until the search has an upper case character
vim.opt.smartindent = true -- Attempt to insert indentation to fit traditional languages.
vim.opt.softtabstop = 4 -- Number of spaces a tab counts for when converting tabs to spaces
vim.opt.splitbelow = true -- Split windows below when horizontal splitting
vim.opt.splitright = true -- Split windows right when vertical splitting
vim.opt.swapfile = false -- Disable the creation of swap files for open files
vim.opt.tabstop = 4 -- Setting the value of spaces per tab
vim.opt.termguicolors = true -- Enable the truecolor GUI colors in a terminal
vim.opt.undodir = os.getenv('HOME') .. '/.config/nvim/undodir' -- Set a specific undo file directory
vim.opt.undofile = true -- Enable undo files
vim.opt.updatetime = 300 -- Swapfile update time in milliseconds
vim.opt.wrap = false -- Do _not_ wrap lines
vim.g.netrw_banner = 0
vim.g.netrw_liststyle = 3 -- Use the tree style display for netrw directory listings
vim.g.netrw_winsize = 25 -- Percentage based pane size for directory exploring
vim.g.netrw_banner = 0 -- Remove the banner
vim.g.netrw_liststyle = 3 -- Use the tree style display for netrw directory listings
vim.g.netrw_winsize = 25 -- Percentage based pane size for directory exploring

81
nvim/lua/statuscolumn.lua Normal file
View File

@@ -0,0 +1,81 @@
local statuscolumn = {}
local show_both_nums = false
statuscolumn.setHL = function ()
local colors = {
'#888cd8',
'#8081cd',
'#7877c2',
'#706cb7',
'#6862ad',
'#6057a2',
'#584d97',
'#50438d',
'#493a82',
'#413078',
}
for i, color in ipairs(colors) do
vim.api.nvim_set_hl(0, 'Gradient_' .. i, { fg = color })
end
end
statuscolumn.border = function()
-- if vim.v.relnum < 9 then
-- return '%#Gradient_' .. (vim.v.relnum + 1) .. '#│'
-- else
-- return '%#Gradient_10#│'
-- end
return ''
end
statuscolumn.folds = function()
local foldlevel = vim.fn.foldlevel(vim.v.lnum)
local foldlevel_before = vim.fn.foldlevel((vim.v.lnum - 1) >= 1 and vim.v.lnum - 1 or 1)
local foldlevel_after = vim.fn.foldlevel((vim.v.lnum + 1) <= vim.fn.line('$') and (vim.v.lnum + 1) or vim.fn.line('$'))
local foldclosed = vim.fn.foldclosed(vim.v.lnum)
if foldlevel == 0 then
return ' '
end
if foldclosed ~= -1 and foldclosed == vim.v.lnum then
return ''
end
if foldlevel > foldlevel_before then
return ''
end
if foldlevel > foldlevel_after then
return ''
end
return ''
end
statuscolumn.numbers = function()
if show_both_nums then
return string.format('%-3s %2s ', vim.v.lnum, vim.v.relnum)
else
return string.format('%2s', vim.v.relnum)
end
end
statuscolumn.statusColumn = function()
local column_text = ''
-- statuscolumn.setHL()
column_text = table.concat({
'%s',
statuscolumn.numbers(),
-- statuscolumn.border(),
-- statuscolumn.folds(), ' ',
})
return column_text
end
return statuscolumn