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

@@ -7,9 +7,9 @@ Included are configs for:
- tmux - tmux
- wezterm - wezterm
- zsh - zsh
- gitconfig
Planned configs are: Planned configs are:
- gitconfig
- newsboat - newsboat
## Deployment ## Deployment
@@ -97,3 +97,12 @@ The config adds the following settings outside of oh-my-zsh:
- `zsh_exports`: Exported variables for the system - `zsh_exports`: Exported variables for the system
- `zsh_functions`: Custom functions beyond simple aliasing can fulfill but not requiring a script - `zsh_functions`: Custom functions beyond simple aliasing can fulfill but not requiring a script
- `zsh_local`: Local ZSH settings for a specific system such as any environment specific bash required to set up a system's shell or direct ZSH settings - `zsh_local`: Local ZSH settings for a specific system such as any environment specific bash required to set up a system's shell or direct ZSH settings
### Gitconfig
The gitconfig, centered on nvim integration, gives contains a selection of useful aliases and sets some basic defaults.
It also includes a local override config hosted at `~/.config/git/local` for adding username and email as well as any other options needed for a local machine.
> [!NOTE]
> For signing support put the `gpgsign` option in the local gitconfig

View File

@@ -17,6 +17,7 @@ declare -A configs=(
["nvim/snippets"]="$HOME/.config/nvim/" ["nvim/snippets"]="$HOME/.config/nvim/"
["tmux.conf"]="$HOME/.tmux.conf" ["tmux.conf"]="$HOME/.tmux.conf"
["wezterm/wezterm.lua"]="$HOME/.config/wezterm/wezterm.lua" ["wezterm/wezterm.lua"]="$HOME/.config/wezterm/wezterm.lua"
["gitconfig"]="$HOME/.gitconfig"
) )
declare -a config_directories=( declare -a config_directories=(

43
gitconfig Normal file
View File

@@ -0,0 +1,43 @@
[push]
default = simple
[core]
autocrlf = input
[filter "lfs"]
clean = git-lfs clean -- %f
process = git-lfs filter-process
required = true
smudge = git-lfs smudge -- %f
[pull]
rebase = false
[init]
defaultBranch = main
[alias]
c = commit
d = diff
dl = diff HEAD^ HEAD
ds = diff --staged
l = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
s = status
branches = branch -avv
staash = stash --all
supdate = submodule update --remote
srupdate = submodule update --recursive
[merge]
tool = nvimdiff
[core]
editor = nvim
[rerere]
enabled = true
[include]
path = ~/.config/git/local
# vim: ft=gitconfig

View File

@@ -0,0 +1 @@
vim.bo.shiftwidth=2

View File

@@ -1,9 +0,0 @@
return {
cmd = {
"arduino-language-server",
"-clangd", "/usr/lib/llvm/21/bin/clangd",
"-cli", "/usr/bin/arduino-cli",
"-cli-config", "~/.arduino15/arduino-cli.yaml",
"-fqbn", "esp32:esp32:adafruit_qtpy_esp32s3_nopsram"
}
}

View File

@@ -1,3 +1,10 @@
return { return {
filetypes = { 'zsh', 'bash', 'sh' } cmd = { 'bash-language-server', 'start' },
settings = {
bashIde = {
globPattern = vim.env.GLOB_PATTERN or '*@(.sh|.inc|.bash|.command)',
},
},
filetypes = { 'zsh', 'bash', 'sh' },
root_markers = { '.git' },
} }

91
nvim/after/lsp/clangd.lua Normal file
View File

@@ -0,0 +1,91 @@
-- https://clangd.llvm.org/extensions.html#switch-between-sourceheader
local function switch_source_header(bufnr, client)
local method_name = 'textDocument/switchSourceHeader'
---@diagnostic disable-next-line:param-type-mismatch
if not client or not client:supports_method(method_name) then
return vim.notify(('method %s is not supported by any servers active on the current buffer'):format(method_name))
end
local params = vim.lsp.util.make_text_document_params(bufnr)
---@diagnostic disable-next-line:param-type-mismatch
client:request(method_name, params, function(err, result)
if err then
error(tostring(err))
end
if not result then
vim.notify('corresponding file cannot be determined')
return
end
vim.cmd.edit(vim.uri_to_fname(result))
end, bufnr)
end
local function symbol_info(bufnr, client)
local method_name = 'textDocument/symbolInfo'
---@diagnostic disable-next-line:param-type-mismatch
if not client or not client:supports_method(method_name) then
return vim.notify('Clangd client not found', vim.log.levels.ERROR)
end
local win = vim.api.nvim_get_current_win()
local params = vim.lsp.util.make_position_params(win, client.offset_encoding)
---@diagnostic disable-next-line:param-type-mismatch
client:request(method_name, params, function(err, res)
if err or #res == 0 then
-- Clangd always returns an error, there is no reason to parse it
return
end
local container = string.format('container: %s', res[1].containerName) ---@type string
local name = string.format('name: %s', res[1].name) ---@type string
vim.lsp.util.open_floating_preview({ name, container }, '', {
height = 2,
width = math.max(string.len(name), string.len(container)),
focusable = false,
focus = false,
title = 'Symbol Info',
})
end, bufnr)
end
---@class ClangdInitializeResult: lsp.InitializeResult
---@field offsetEncoding? string
---@type vim.lsp.Config
return {
cmd = { 'clangd' },
filetypes = { 'c', 'c.doxygen', 'cpp', 'cpp.doxygen', 'objc', 'objcpp', 'cuda' },
root_markers = {
'.clangd',
'.clang-tidy',
'.clang-format',
'compile_commands.json',
'compile_flags.txt',
'configure.ac', -- AutoTools
'.git',
},
get_language_id = function(_, ftype)
local t = { objc = 'objective-c', objcpp = 'objective-cpp', cuda = 'cuda-cpp' }
return t[ftype] or ftype
end,
capabilities = {
textDocument = {
completion = {
editsNearCursor = true,
},
},
offsetEncoding = { 'utf-8', 'utf-16' },
},
---@param init_result ClangdInitializeResult
on_init = function(client, init_result)
if init_result.offsetEncoding then
client.offset_encoding = init_result.offsetEncoding
end
end,
on_attach = function(client, bufnr)
vim.api.nvim_buf_create_user_command(bufnr, 'LspClangdSwitchSourceHeader', function()
switch_source_header(bufnr, client)
end, { desc = 'Switch between source/header' })
vim.api.nvim_buf_create_user_command(bufnr, 'LspClangdShowSymbolInfo', function()
symbol_info(bufnr, client)
end, { desc = 'Show symbol info' })
end,
}

View File

@@ -1,7 +1,7 @@
return { return {
cmd = vim.lsp.rpc.connect('127.0.0.1', 6005),
filetypes = { filetypes = {
'gd', 'gdscript', 'gdscript3' 'gd', 'gdscript', 'gdscript3'
}, },
root_markers = { 'project.godot', '.git' }, root_markers = { 'project.godot', '.git' },
cmd = vim.lsp.rpc.connect('127.0.0.1', 6005)
} }

View File

@@ -1,3 +0,0 @@
return {
template_extension = { 'html', 'jinja', 'j2', 'tera' }
}

View File

@@ -0,0 +1,15 @@
vim.filetype.add {
extension = {
-- tera = 'jinja',
jinja = 'jinja',
jinja2 = 'jinja',
j2 = 'jinja',
}
}
return {
name = 'jinja_lsp',
cmd = { 'jinja-lsp' },
filetypes = { 'jinja', 'tera', 'html' },
-- template_extension = { 'html', 'jinja', 'j2', 'tera' },
}

View File

@@ -1,19 +1,28 @@
return { return {
cmd = { 'pylsp' },
filetypes = { 'python' },
root_markers = {
'pyproject.toml',
'setup.py',
'setup.cfg',
'requirements.txt',
'Pipfile',
'.git',
},
settings = { settings = {
pylsp = { pylsp = {
plugins = { plugins = {
pycodestyle = { pycodestyle = {
enabled = false, enabled = true,
ignore = { ignore = {
'E501' 'E501' -- line-too-long
}, },
maxLineLength = 120, maxLineLength = 120,
}, },
pylint = { pylint = {
enabled = true, enabled = true,
args = { args = {
'--disable=line-too-long', '--disable=line-too-long,import-error',
'--disable=missing-function-docstring'
}, },
} }
} }

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 -- Disables syntax, treesitter and folding on larger files
vim.api.nvim_create_autocmd({ 'BufReadPre' }, { vim.api.nvim_create_autocmd({ 'BufReadPre' }, {
pattern = '*', group = largefile_group,
group = vim.api.nvim_create_augroup('largefile', { clear = true }), callback = function(ev)
callback = function(args) if ev.file then
local max_filesize_MiB = 1 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() vim.b[ev.buf].is_large_file = true
return vim.loop.fs_stat(vim.api.nvim_buf_get_name(args.buf)) vim.bo['bufhidden'] = 'unload'
end) vim.bo['buftype'] = 'nowrite'
vim.bo['swapfile'] = false
local file_size = math.floor(0.5 + (stats.size / (1024 * 1024))) vim.bo['undofile'] = false
vim.bo['undolevels'] = -1
if file_size > max_filesize_MiB then end
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')
end 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) vim.api.nvim_create_user_command('TreeSitterInstall', function(opts)
for index, value in ipairs(opts.fargs) do for index, value in ipairs(opts.fargs) do
if index > 0 then 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 if result.code == 0 then
print('Completed install of tree-sitter-' .. value) 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 -- Allow for leaving Terminal mode using the escape key instead of the odd default
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>') 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.telescope') -- Floating window fuzzy searching different sources
require('plugins.telekasten') -- Note taking plugin require('plugins.telekasten') -- Note taking plugin
require('plugins.mason') -- LSP and DAP manager 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 require('plugins.render-markdown') -- Render markdown directly in neovim
vim.pack.add({ 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-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/tpope/vim-fugitive', -- _The_ Git integration plugin people have been using forever
'https://github.com/habamax/vim-godot' -- Godot specific bindings and debug 'https://github.com/habamax/vim-godot' -- Godot specific bindings and debug
@@ -30,5 +29,4 @@ vim.schedule(function()
-- Experimental -- Experimental
-- require('plugins.note_taking') -- In house note taking plugin (TODO: rename once the plugin name is solidified) -- require('plugins.note_taking') -- In house note taking plugin (TODO: rename once the plugin name is solidified)
-- require('plugins.nvim-lint') -- Linter loader
end) end)

View File

@@ -1,7 +1,7 @@
-- Treesitter -- Treesitter
local rocks_path = os.getenv('HOME') .. "/.luarocks/lib/luarocks/rocks-5.1" 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 for _, parser_dir in ipairs(vim.fn.glob(rocks_path .. '/tree-sitter-*/*/', true, true)) do
vim.opt.runtimepath:prepend(parser_dir) vim.opt.runtimepath:prepend(parser_dir)
end end
@@ -9,7 +9,6 @@ end
-- Start treesitter parsing on the current buffer -- Start treesitter parsing on the current buffer
vim.api.nvim_create_autocmd("FileType", { vim.api.nvim_create_autocmd("FileType", {
callback = function(ev) callback = function(ev)
-- Use pcall to prevent blocking errors
pcall(vim.treesitter.start, ev.buf) pcall(vim.treesitter.start, ev.buf)
end end
}) })
@@ -53,12 +52,11 @@ vim.api.nvim_create_autocmd('LspAttach', {
-- end, -- end,
-- }) -- })
-- Keyboard Mappings
local bufnr = args.buf local bufnr = args.buf
local bufopts = { noremap = true, silent = true, buffer = bufnr } 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', '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.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
@@ -74,5 +72,14 @@ vim.api.nvim_create_autocmd('LspAttach', {
}) })
-- Enable LSP engines -- Enable LSP engines
-- vim.lsp.enable('clangd') local enabled_lsps = {
vim.lsp.enable('gdscript') '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 end
vim.pack.add({ vim.pack.add({
-- 'https://github.com/nvim-tree/nvim-web-devicons',
'https://github.com/nvim-lualine/lualine.nvim' 'https://github.com/nvim-lualine/lualine.nvim'
}) })

View File

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

View File

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

View File

@@ -1,6 +1,5 @@
vim.pack.add({ vim.pack.add({
'https://github.com/kevinhwang91/nvim-bqf', -- 'https://github.com/kevinhwang91/nvim-bqf',
'https://github.com/nvim-telescope/telescope-file-browser.nvim',
'https://github.com/nvim-lua/plenary.nvim', 'https://github.com/nvim-lua/plenary.nvim',
'https://github.com/nvim-telescope/telescope.nvim', 'https://github.com/nvim-telescope/telescope.nvim',
}) })
@@ -23,9 +22,7 @@ require('telescope').setup {
layout_config = { prompt_position = 'bottom' }, layout_config = { prompt_position = 'bottom' },
-- layout_strategy = 'vertical', -- layout_strategy = 'vertical',
mappings = { mappings = {
i = { i = { ['<ESC>'] = require('telescope.actions').close, },
['<ESC>'] = require('telescope.actions').close,
},
}, },
prompt_prefix = '', prompt_prefix = '',
results_title = false, results_title = false,
@@ -35,7 +32,6 @@ require('telescope').setup {
}, },
pickers = { pickers = {
diagnostics = { diagnostics = {
-- theme = 'ivy',
initial_mode = 'normal', initial_mode = 'normal',
layout_config = { layout_config = {
preview_cutoff = 9999, preview_cutoff = 9999,
@@ -46,18 +42,12 @@ require('telescope').setup {
local builtin = require('telescope.builtin') 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', ';;', 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', ';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', ';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) vim.keymap.set('n', ';w', function() builtin.lsp_dynamic_workspace_symbols() end)

View File

@@ -1,47 +1,46 @@
-- Experimental -- Experimental
-- vim.o.autocomplete = true -- vim.o.autocomplete = true
vim.opt.background = 'dark' -- Force a dark background for the colorscheme 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.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.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.cursorcolumn = true -- Highlight the column the cursor is on
vim.opt.cursorline = true -- Highlight the line 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.expandtab = true -- Expand tabs into spaces
vim.opt.fileformat = 'unix' -- Explicitly state that files should use the unix style EOL characters. 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.fillchars = 'fold: ' -- Sets the character that fills in a fold line (removes the dots)
vim.opt.foldcolumn = '0' -- Disables the foldcolumn 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.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.foldlevelstart = 4 -- Sets the initial fold level vim.opt.foldmethod = 'expr' -- Attempt to use the syntax of a file to set folds.
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.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.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.ignorecase = true -- Case-insensitive searching vim.opt.list = true -- Show the listchars
vim.opt.list = true -- Show the listchars vim.opt.listchars = 'tab:|·,trail:¬,extends:»,precedes:«,nbsp:+' -- Characters to display when showing whitespace
vim.opt.listchars = 'tab:|·,trail:¬,extends:»,precedes:«,nbsp:+' -- Characters to display when showing whitespace vim.opt.mouse = 'a' -- Enable mouse mode
vim.opt.mouse = 'a' -- Enable mouse mode vim.opt.number = true -- Show the line number in the gutter.
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.pumheight = 15 -- Maximum height of the auto complete floating window vim.opt.relativenumber = true -- Show the relative line numbers
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.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.shiftround = true -- Round indentation to shiftwidth vim.opt.shiftwidth = 4 -- Number of spaces a tab counts for when converting tabs to spaces
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.shortmess = 'at' -- Abbreviations and truncation of cmd messages vim.opt.showmatch = true -- Show matching bracket
vim.opt.showmatch = true -- Show matching bracket vim.opt.signcolumn = 'yes' -- Always show the gutter
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.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.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.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.splitbelow = true -- Split windows below when horizontal splitting vim.opt.splitright = true -- Split windows right when vertical 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.swapfile = false -- Disable the creation of swap files for open files vim.opt.tabstop = 4 -- Setting the value of spaces per tab
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.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.undodir = os.getenv('HOME') .. '/.config/nvim/undodir' -- Set a specific undo file directory vim.opt.undofile = true -- Enable undo files
vim.opt.undofile = true -- Enable undo files vim.opt.updatetime = 300 -- Swapfile update time in milliseconds
vim.opt.updatetime = 300 -- Swapfile update time in milliseconds vim.opt.wrap = false -- Do _not_ wrap lines
vim.opt.wrap = false -- Do _not_ wrap lines
vim.g.netrw_banner = 0 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_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_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

37
nvim/snippets/all.lua Normal file
View File

@@ -0,0 +1,37 @@
-- require('luasnip.session.snippet_collection').clear_snippets('all')
-- local ls = require('luasnip')
-- local s = ls.snippet
-- local sn = ls.snippet_node
-- local i = ls.insert_node
-- local t = ls.text_node
-- local c = ls.choice_node
-- local r = ls.restore_node
--
-- -- Replacement of autopairs
-- local function pair(pair_begin, pair_end)
-- -- Auto-pair using snippets
-- return s({ trig = pair_begin, wordTrig = false }, {
-- t({ pair_begin }),
-- c(1, {
-- r(1, "content", i(1)),
-- sn(nil, { t({"", "\t"}), r(1, "content", i(1)), t({ "", "" }) }),
-- }),
-- t({ pair_end }),
-- })
-- end
--
-- ls.add_snippets('all', {
-- pair('(', ')'),
-- pair('{', '}'),
-- pair('[', ']'),
-- pair('<', '>'),
-- pair("'", "'"),
-- pair('"', '"'),
-- pair('`', '`'),
-- }, {
-- -- type = 'autosnippets',
-- -- key = 'all_auto',
-- })
-- end autopairs

View File

@@ -1,44 +1,36 @@
local ls = require('luasnip') local ls = require('luasnip')
local s = ls.snippet local s = ls.snippet
-- local sn = ls.snippet_node
local i = ls.insert_node local i = ls.insert_node
local t = ls.text_node local t = ls.text_node
local l = require('luasnip.extras').lambda -- local l = require('luasnip.extras').lambda
local fmt = require('luasnip.extras.fmt').fmt local fmt = require('luasnip.extras.fmt').fmt
local ts_post = require('luasnip.extras.treesitter_postfix').treesitter_postfix -- local ts_post = require('luasnip.extras.treesitter_postfix').treesitter_postfix
return { ls.add_snippets('python', {
ts_post({ s('docstring single', {
matchTSNode = { t("''' "), i(0, 'text'), t(" '''")
query = [[ }),
(function_definition s('def', fmt([[
parameters: (parameters) @params def {func}({args}) -> {ret}:
return_type: (type) @return ''' {doc} '''
) @prefix {body}
]],
query_lang = "python",
},
trig = "docstring",
}, fmt([[
''' {}
Keyword arguments:
{} () -
Return:
{} - {}
'''
]], { ]], {
i(1, 'Description'), func = i(1, 'fname'),
l(l.LS_TSCAPTURE_PARAMS), args = i(2),
l(l.LS_TSCAPTURE_RETURN), ret = i(3, 'None'),
l(l.LS_TSDATA), doc = i(4, 'docstring'),
body = i(5, 'pass'),
}, {
})), })),
-- s( s('ternary', {
-- { trig = "thingy" }, i(1, 'then'), t(' if '), i(2, 'condition'), t(' else '), i(3, 'else')
-- { t('Woot!') } }),
-- ), s('tuple ternary', fmt([[
-- s( ({if_true}, {if_false})[{condition}]
-- { trig = 'thingy2' }, ]], {
-- { t('Woot2!') } if_true = i(1, 'if_true'),
-- ) if_false = i(2, 'if_false'),
} condition = i(3, 'condition'),
})),
})

View File

@@ -1,12 +1,33 @@
# True color support # True color support
set-option -g default-terminal 'tmux-256color' set-option -ga terminal-overrides ',xterm-*:Tc'
set-option -ga terminal-overrides ',xterm-256color:Tc'
# Set encoding to Unicode8 # Set encoding to Unicode8
setw -gq utf8 on setw -gq utf8 on
set -g status-interval 5
set -g display-time 4000
# Numbering changes
set -g base-index 1
set -g pane-base-index 1
set -g renumber-windows on
# History lengthening from the default 2k
set -g history-limit 50000
setw -g mode-keys vi
set -g focus-events on
# Window resizing on host shell size changes TODO: needs testing with pair coding
set -g window-size latest
setw -g aggressive-resize on
# set -g default-command 'reattach-to-user-namespace -l $SHELL' # TODO: Is this necessary for Mac still?
# Allow for external system clipboard # Allow for external system clipboard
set-option -g set-clipboard external set-option -g set-clipboard external
# set-option -g allow-passthrough on
# Allow mouse interactions # Allow mouse interactions
set -g mouse on set -g mouse on
@@ -37,7 +58,6 @@ bind -n M-l next-window
# Plugins # Plugins
set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank' set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'egel/tmux-gruvbox' set -g @plugin 'egel/tmux-gruvbox'

View File

@@ -1,10 +1,10 @@
local wezterm = require 'wezterm' local wezterm = require 'wezterm'
local act = wezterm.action
local config = wezterm.config_builder() local config = wezterm.config_builder()
-- Visual options -- Visual options
config.color_scheme = 's3r0 modified (terminal.sexy)' config.color_scheme = 's3r0 modified (terminal.sexy)'
-- config.color_scheme = 'Mashup Colors (terminal.sexy)'
config.font = wezterm.font 'Inconsolata Nerd Font Mono' config.font = wezterm.font 'Inconsolata Nerd Font Mono'
config.font_size = 12 config.font_size = 12
@@ -24,35 +24,7 @@ config.automatically_reload_config = true
-- Linux specific fixes -- Linux specific fixes
if wezterm.target_triple == 'x86_64-unknown-linux-gnu' then if wezterm.target_triple == 'x86_64-unknown-linux-gnu' then
-- Fixing the cursor theme config.disable_default_key_bindings = true
local xcursor_size = nil
local xcursor_theme = nil
local theme_success, stdout, _ = wezterm.run_child_process({
"gsettings",
"get",
"org.gnome.desktop.interface",
"cursor-theme"
})
if theme_success then
xcursor_theme = stdout:gsub("'(.+)'\n", "%1")
end
local cursor_success, _, _ = wezterm.run_child_process({
"gsettings",
"get",
"org.gnome.desktop.interface",
"cursor-size"
})
if cursor_success then
xcursor_size = tonumber(stdout)
end
config.xcursor_theme = xcursor_theme
config.xcursor_size = xcursor_size
-- end cursor theme
end end
local local_config_filename = os.getenv('HOME') .. '/.config/wezterm/local.lua' local local_config_filename = os.getenv('HOME') .. '/.config/wezterm/local.lua'
@@ -62,4 +34,9 @@ if local_config ~= nil then
config = local_setup.setup(config) config = local_setup.setup(config)
end end
config.keys = {
{key = 'V', mods = 'CTRL', action = act.PasteFrom 'Clipboard'},
{key = 'V', mods = 'CTRL', action = act.PasteFrom 'PrimarySelection'},
}
return config return config

View File

@@ -1,3 +1,4 @@
export EDITOR=nvim export EDITOR=nvim
export MANPAGER="less -R --use-color -Dd+r -Du+b" # Colored MAN pages export MANPAGER="less -R --use-color -Dd+r -Du+b" # Colored MAN pages
export DOCKER_DEFAULT_PLATFORM=linux/amd64 export DOCKER_DEFAULT_PLATFORM=linux/amd64
export GPG_TTY=$(tty)