summaryrefslogtreecommitdiff
path: root/.config/nvim/lua
diff options
context:
space:
mode:
authorjoott <josh@ottmail.me>2025-07-30 15:53:29 -0400
committerjoott <josh@ottmail.me>2025-07-30 15:53:29 -0400
commit26694e09e8f5bf2262737312e7ad217118db20de (patch)
treeca55eee2f8c5106c61e747979780d6f393fd24c9 /.config/nvim/lua
parent89a596a50ec61b8ebd6040b06a7cab994afd1b3a (diff)
downloaddotfiles-26694e09e8f5bf2262737312e7ad217118db20de.tar.gz
dotfiles-26694e09e8f5bf2262737312e7ad217118db20de.zip
switching to yadm
Diffstat (limited to '.config/nvim/lua')
-rw-r--r--.config/nvim/lua/commands.lua28
-rw-r--r--.config/nvim/lua/keymaps.lua96
-rw-r--r--.config/nvim/lua/luasnip-helpers.lua41
-rw-r--r--.config/nvim/lua/luasnip-nodes.lua31
-rw-r--r--.config/nvim/lua/options.lua35
-rw-r--r--.config/nvim/lua/plugins.lua97
6 files changed, 328 insertions, 0 deletions
diff --git a/.config/nvim/lua/commands.lua b/.config/nvim/lua/commands.lua
new file mode 100644
index 0000000..45b674f
--- /dev/null
+++ b/.config/nvim/lua/commands.lua
@@ -0,0 +1,28 @@
+vim.api.nvim_create_autocmd("ColorScheme", {
+ pattern = "*",
+ callback = function()
+ package.loaded["feline"] = nil
+ package.loaded["neopywal.theme.plugins.feline"] = nil
+ require("feline").setup({
+ components = require("neopywal.theme.plugins.feline").get(),
+ })
+ end,
+})
+
+vim.api.nvim_create_autocmd({'BufEnter', 'BufWinEnter'}, {
+ pattern = '*.jl',
+ callback = function(ev)
+ vim.keymap.set('n', '<leader>js', '<cmd>lua _jlrepl_open()<CR>', { noremap = true, silent = true , buffer = true })
+ end
+})
+
+vim.api.nvim_create_autocmd({'BufEnter', 'BufWinEnter'}, {
+ pattern = '*.tex',
+ callback = function(ev)
+ vim.keymap.set('i', '<C-f>', [[<Esc>: silent exec '.!inkscape-figures create "'.getline('.').'" "'.b:vimtex.root.'/figures/"'<CR><CR>:w<CR>]], { buffer = true})
+ vim.keymap.set('n', '<C-f>', [[: silent exec '!inkscape-figures edit "'.b:vimtex.root.'/figures/" > /dev/null 2>&1 &'<CR><CR>:redraw!<CR>]], { buffer = true})
+
+ vim.keymap.set('i', '<C-x>', [[<Esc>: silent exec '.!xoppdog shake "'.getline('.').'" "'.b:vimtex.root.'/figures/"'<CR><CR>:w<CR>]], { buffer = true})
+ vim.keymap.set('n', '<C-x>', [[: silent exec '!xoppdog fetch "'.b:vimtex.root.'/figures/" > /dev/null 2>&1 &'<CR><CR>:redraw!<CR>]], { buffer = true})
+ end
+})
diff --git a/.config/nvim/lua/keymaps.lua b/.config/nvim/lua/keymaps.lua
new file mode 100644
index 0000000..519b336
--- /dev/null
+++ b/.config/nvim/lua/keymaps.lua
@@ -0,0 +1,96 @@
+local function map(m, k, v)
+ vim.keymap.set(m, k, v, { noremap = true, silent = true })
+end
+local builtin = require('telescope.builtin')
+
+map('', '<Up>', 'gk')
+map('', '<Down>', 'gj')
+map('n', 'J', 'mzJ`z')
+
+map('', 'o', 'o<Esc>')
+map('', 'O', 'O<Esc>')
+
+map('t', '<C-Space>', [[<C-\><C-n>]])
+
+map('n', '<leader>W', '<cmd>set wrap!<CR>')
+
+-- telescope
+map('n', '<leader>pf', builtin.find_files, {})
+map('n', '<leader>pg', function()
+ -- If the directory is not a git repository, fallback to regular find_files.
+ if pcall(builtin.git_files) then
+ else
+ pcall(builtin.find_files)
+ end
+end, {})
+map('n', '<leader>fs', function()
+ builtin.grep_string({ search = vim.fn.input("Grep > ") })
+end, {})
+
+-- mini
+map('n', '-', '<cmd>lua MiniFiles.open()<CR>')
+map('n', '<leader>wt', '<cmd>lua MiniTrailspace.trim()<CR>')
+
+-- toggleterm
+map('n', '<leader>g', '<cmd>lua _lazygit_toggle()<CR>')
+
+-- misc plugin keymaps
+map('n', '<leader>u', vim.cmd.UndotreeToggle)
+
+map('n', '<C-h>', vim.cmd.HopWord)
+
+map('n', '<leader>vv', vim.cmd.VimtexCompile)
+map('n', '<leader>vc', '<cmd>VimtexClean!<CR>')
+
+map('n', '<leader>tw', '<cmd>Twilight<CR>')
+
+map('n', '<leader>o', '<cmd>Outline<CR>')
+
+-- buffers
+map('n', '<PageUp>', '<cmd>bnext<CR>')
+map('n', '<PageDown>', '<cmd>bprevious<CR>')
+map('n', '<leader>br', '<cmd>BufferClose<CR>')
+map('n', '<leader>Q', '<cmd>BufferClose!<CR>')
+map('n', '<leader>bn', '<cmd>BufferOrderByBufferNumber<CR>')
+map('n', '<leader>U', '<cmd>bufdo bd<CR>') --close all
+map('n', '<leader>vs', '<cmd>vsplit<CR><cmd>bnext<CR>') --ver split + open next buffer
+
+-- buffer position nav + reorder
+map('n', '<M-Left>', '<cmd>BufferMovePrevious<CR>')
+map('n', '<M-Right>', '<cmd>BufferMoveNext<CR>')
+map('n', '<M-1>', '<cmd>BufferGoto 1<CR>')
+map('n', '<M-2>', '<cmd>BufferGoto 2<CR>')
+map('n', '<M-3>', '<cmd>BufferGoto 3<CR>')
+map('n', '<M-4>', '<cmd>BufferGoto 4<CR>')
+map('n', '<M-5>', '<cmd>BufferGoto 5<CR>')
+map('n', '<M-6>', '<cmd>BufferGoto 6<CR>')
+map('n', '<M-7>', '<cmd>BufferGoto 7<CR>')
+map('n', '<M-8>', '<cmd>BufferGoto 8<CR>')
+map('n', '<M-9>', '<cmd>BufferGoto 9<CR>')
+map('n', '<M-0>', '<cmd>BufferLast<CR>')
+map('n', '<M-p>', '<cmd>BufferPin<CR>')
+
+-- window resizing
+map('n', '<S-Left>', ':vertical resize -2<CR>')
+map('n', '<S-Right>', ':vertical resize +2<CR>')
+map('n', '<S-Up>', ':resize +2<CR>')
+map('n', '<S-Down>', ':resize -2<CR>')
+
+-- clipboard management
+map('x', 'p', '\"_dP')
+
+map('n', '<leader>y', '\"+y')
+map('v', '<leader>y', '\"+y')
+map('n', '<leader>Y', '\"+Y')
+
+map('n', '<leader>d', '\"+d')
+map('v', '<leader>d', '\"+d')
+
+-- luasnip
+vim.cmd([[
+imap <silent><expr> <Tab> luasnip#expand_or_jumpable() ? '<Plug>luasnip-expand-or-jump' : '<Tab>'
+inoremap <silent> <S-Tab> <cmd>lua require'luasnip'.jump(-1)<CR>
+
+snoremap <silent> <Tab> <cmd>lua require('luasnip').jump(1)<CR>
+snoremap <silent> <S-Tab> <cmd>lua require('luasnip').jump(-1)<CR>
+]])
diff --git a/.config/nvim/lua/luasnip-helpers.lua b/.config/nvim/lua/luasnip-helpers.lua
new file mode 100644
index 0000000..e912046
--- /dev/null
+++ b/.config/nvim/lua/luasnip-helpers.lua
@@ -0,0 +1,41 @@
+local n = require("luasnip-nodes")
+local utils = {}
+
+utils.get_visual = function(args, parent)
+ if (#parent.snippet.env.LS_SELECT_RAW > 0) then
+ return n.sn(nil, n.i(1, parent.snippet.env.LS_SELECT_RAW))
+ else -- If LS_SELECT_RAW is empty, return a blank insert node
+ return n.sn(nil, n.i(1))
+ end
+end
+
+utils.in_mathzone = function() -- math context detection
+ return vim.fn['vimtex#syntax#in_mathzone']() == 1
+end
+utils.in_text = function()
+ return not utils.in_mathzone()
+end
+utils.in_comment = function() -- comment detection
+ return vim.fn['vimtex#syntax#in_comment']() == 1
+end
+utils.in_env = function(name) -- generic environment detection
+ local is_inside = vim.fn['vimtex#env#is_inside'](name)
+ return (is_inside[1] > 0 and is_inside[2] > 0)
+end
+-- A few concrete environments---adapt as needed
+utils.in_equation = function() -- equation environment detection
+ return utils.in_env('equation')
+end
+utils.in_itemize = function() -- itemize environment detection
+ return utils.in_env('itemize')
+end
+utils.in_enumerate = function() -- itemize environment detection
+ return utils.in_env('enumerate')
+end
+utils.in_tikz = function() -- TikZ picture environment detection
+ return utils.in_env('tikzpicture')
+end
+
+utils.line_begin = require("luasnip.extras.expand_conditions").line_begin
+
+return utils
diff --git a/.config/nvim/lua/luasnip-nodes.lua b/.config/nvim/lua/luasnip-nodes.lua
new file mode 100644
index 0000000..1b48f00
--- /dev/null
+++ b/.config/nvim/lua/luasnip-nodes.lua
@@ -0,0 +1,31 @@
+local nodes = {}
+
+local ls = require("luasnip")
+local extras = require("luasnip.extras")
+
+nodes.s = ls.snippet
+nodes.sn = ls.snippet_node
+nodes.isn = ls.indent_snippet_node
+nodes.t = ls.text_node
+nodes.i = ls.insert_node
+nodes.f = ls.function_node
+nodes.c = ls.choice_node
+nodes.d = ls.dynamic_node
+nodes.r = ls.restore_node
+nodes.events = require("luasnip.util.events")
+nodes.ai = require("luasnip.nodes.absolute_indexer")
+nodes.l = extras.lambda
+nodes.rep = extras.rep
+nodes.p = extras.partial
+nodes.m = extras.match
+nodes.n = extras.nonempty
+nodes.dl = extras.dynamic_lambda
+nodes.fmt = require("luasnip.extras.fmt").fmt
+nodes.fmta = require("luasnip.extras.fmt").fmta
+nodes.conds = require("luasnip.extras.expand_conditions")
+nodes.postfix = require("luasnip.extras.postfix").postfix
+nodes.types = require("luasnip.util.types")
+nodes.parse = require("luasnip.util.parser").parse_snippet
+nodes.ms = ls.multi_snippet
+
+return nodes
diff --git a/.config/nvim/lua/options.lua b/.config/nvim/lua/options.lua
new file mode 100644
index 0000000..cd293f4
--- /dev/null
+++ b/.config/nvim/lua/options.lua
@@ -0,0 +1,35 @@
+vim.cmd "set undofile"
+-- vim.opt.isfname:append("@-@")
+vim.g.mapleader = ' '
+
+local options = {
+ nu = true,
+ relativenumber = true,
+
+ tabstop = 4,
+ softtabstop = 4,
+ shiftwidth = 4,
+ expandtab = true,
+
+ smartindent = false,
+ autoindent = true,
+
+ wrap = true,
+
+ hlsearch = false,
+ incsearch = true,
+
+ scrolloff = 8,
+ signcolumn = "no",
+ cursorline = true,
+ cursorlineopt = "number",
+
+ ignorecase = true,
+ smartcase = true,
+
+ showmode = false,
+}
+
+for k, v in pairs(options) do
+ vim.opt[k] = v
+end
diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua
new file mode 100644
index 0000000..8ddca61
--- /dev/null
+++ b/.config/nvim/lua/plugins.lua
@@ -0,0 +1,97 @@
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system({
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable", -- latest stable release
+ lazypath,
+ })
+end
+vim.opt.rtp:prepend(lazypath)
+
+require("lazy").setup({
+ "nvim-tree/nvim-web-devicons",
+ "mbbill/undotree",
+ "williamboman/mason.nvim",
+ "williamboman/mason-lspconfig.nvim",
+ "neovim/nvim-lspconfig",
+ 'hrsh7th/nvim-cmp',
+ 'hrsh7th/cmp-nvim-lsp',
+ 'hrsh7th/cmp-buffer',
+ 'hrsh7th/cmp-path',
+ 'hrsh7th/cmp-cmdline',
+ 'saadparwaiz1/cmp_luasnip',
+ 'feline-nvim/feline.nvim',
+ 'lervag/vimtex',
+ 'MeanderingProgrammer/render-markdown.nvim',
+ 'sitiom/nvim-numbertoggle',
+ 'folke/twilight.nvim',
+ 'lewis6991/gitsigns.nvim',
+ { 'akinsho/toggleterm.nvim', version = "*", config = true },
+ { 'echasnovski/mini.files', version = '*' },
+ { 'echasnovski/mini.trailspace', version = '*' },
+ { 'echasnovski/mini.move', version = '*' },
+ { 'numToStr/Comment.nvim', lazy = false, },
+ {
+ "goolord/alpha-nvim",
+ dependencies = { 'nvim-tree/nvim-web-devicons' },
+ config = function()
+ local startify = require("alpha.themes.startify")
+ startify.file_icons.provider = "devicons"
+ require("alpha").setup(
+ startify.config
+ )
+ end,
+ },
+ {
+ 'nvim-telescope/telescope.nvim', branch = '0.1.x',
+ dependencies = { 'nvim-lua/plenary.nvim' }
+ },
+ {
+ "nvim-treesitter/nvim-treesitter",
+ build = function()
+ require("nvim-treesitter.install").update({ with_sync = true })
+ end,
+ },
+ {
+ "L3MON4D3/LuaSnip",
+ version = "v2.*",
+ build = "make install_jsregexp"
+ },
+ {
+ "smoka7/hop.nvim",
+ version = "*",
+ config = function()
+ require("hop").setup({ keys = "tnseridhaofuwyplcqxz" })
+ end,
+ },
+ {
+ 'romgrk/barbar.nvim',
+ init = function() vim.g.barbar_auto_setup = false end,
+ opts = {
+ sidebar_filetypes = {
+ undotree = {
+ text = 'undotree',
+ align = 'center',
+ },
+ },
+ },
+ },
+ {
+ 'windwp/nvim-autopairs',
+ event = "InsertEnter",
+ config = true
+ },
+ {
+ 'RedsXDD/neopywal.nvim',
+ name = "neopywal",
+ lazy = false,
+ priority = 1000,
+ },
+ {
+ 'hedyhli/outline.nvim',
+ config = function() require("outline").setup() end,
+ },
+})