commit f42b5230a84b2bbdb264e4ee98a3878fd610b701
parent 059b9b883a346be8cc2a0311088ef89257704854
Author: Jake Koroman <jake@jakekoroman.com>
Date: Fri, 3 Oct 2025 13:26:13 -0400
add nvim.
Diffstat:
7 files changed, 168 insertions(+), 0 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -8,3 +8,4 @@ emacs/image-dired/
emacs/recentf
emacs/tramp
emacs/transient
+nvim/lazy-lock.json
diff --git a/nvim/ftplugin/lua.lua b/nvim/ftplugin/lua.lua
@@ -0,0 +1,2 @@
+vim.o.shiftwidth = 2
+vim.o.softtabstop = 2
diff --git a/nvim/init.lua b/nvim/init.lua
@@ -0,0 +1,77 @@
+vim.o.relativenumber = true
+vim.o.expandtab = true
+vim.o.shiftwidth = 4
+vim.o.softtabstop = 4
+vim.o.mouse = 'a'
+vim.o.makeprg = './build.sh'
+vim.o.clipboard = 'unnamedplus'
+vim.o.breakindent = true
+vim.o.ignorecase = true
+vim.o.smartcase = true
+vim.o.signcolumn = 'auto'
+vim.o.cursorline = false
+vim.o.scrolloff = 10
+vim.o.confirm = true
+vim.o.autochdir = false
+vim.o.cinoptions = 'l1,t0,(0,:0'
+
+vim.g.mapleader = ' '
+vim.g.maplocalleader = ' '
+
+local colemakdh_binds = {
+ -- movement
+ { modes = { 'n', 'o', 'x' }, lhs = 'n', rhs = 'h', },
+ { modes = { 'n', 'o', 'x' }, lhs = 'e', rhs = 'j', },
+ { modes = { 'n', 'o', 'x' }, lhs = 'i', rhs = 'k', },
+ { modes = { 'n', 'o', 'x' }, lhs = 'o', rhs = 'l', },
+ { modes = { 'n' }, lhs = 'N', rhs = '^', },
+ { modes = { 'n' }, lhs = 'O', rhs = '$', },
+
+ -- closing the loop of overwritten binds
+ { modes = { 'n', 'o', 'x'}, lhs = 'j', rhs = 'e', },
+ { modes = { 'n', 'o', 'x'}, lhs = 'k', rhs = 'n', },
+ { modes = { 'n', 'o', 'x'}, lhs = 'K', rhs = 'N', },
+ { modes = { 'n', 'o', 'x'}, lhs = 'h', rhs = 'o', },
+ { modes = { 'n', 'o', 'x'}, lhs = 'H', rhs = 'O', },
+ { modes = { 'n', 'o', 'x'}, lhs = 'l', rhs = 'i', },
+ { modes = { 'n', 'o', 'x'}, lhs = 'L', rhs = 'I', },
+}
+
+for _, bind in ipairs(colemakdh_binds) do
+ for _, mode in ipairs(bind.modes) do
+ vim.keymap.set(mode, bind.lhs, bind.rhs)
+ end
+end
+
+-- disable man mode remaps
+vim.g.no_man_maps = 1
+
+vim.keymap.set('n', '<M-e>', '<cmd>cnext<CR>')
+vim.keymap.set('n', '<M-i>', '<cmd>cprev<CR>')
+
+vim.api.nvim_create_autocmd('TextYankPost', {
+ desc = 'Highlight when yanking (copying) text',
+ group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
+ callback = function()
+ vim.hl.on_yank()
+ end,
+})
+
+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
+ error('Error cloning lazy.nvim:\n' .. out)
+ end
+end
+
+local rtp = vim.opt.runtimepath
+rtp:prepend(lazypath)
+
+require('lazy').setup({
+ require 'plugins.nvim-mini',
+ require 'plugins.catppuccin',
+ require 'plugins.treesitter',
+ require 'plugins.telescope',
+})
diff --git a/nvim/lua/plugins/catppuccin.lua b/nvim/lua/plugins/catppuccin.lua
@@ -0,0 +1,20 @@
+return {
+ 'catppuccin/nvim',
+ name = "catppuccin",
+ config = function ()
+ require('catppuccin').setup({
+ flavor = 'auto',
+ background = {
+ light = 'latte',
+ dark = 'mocha',
+ },
+ transparent_background = true,
+ no_italic = true,
+ styles = {
+ conditionals = {},
+ },
+ auto_integrations = true,
+ })
+ vim.cmd.colorscheme 'catppuccin'
+ end,
+}
diff --git a/nvim/lua/plugins/nvim-mini.lua b/nvim/lua/plugins/nvim-mini.lua
@@ -0,0 +1,9 @@
+return {
+ 'nvim-mini/mini.nvim',
+ version = false,
+ config = function ()
+ require('mini.surround').setup()
+ require('mini.ai').setup { n_lines = 500 }
+ require('mini.statusline').setup()
+ end
+}
diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua
@@ -0,0 +1,47 @@
+return {
+ 'nvim-telescope/telescope.nvim',
+ event = 'VimEnter',
+ dependencies = {
+ 'nvim-lua/plenary.nvim',
+ {
+ 'nvim-telescope/telescope-fzf-native.nvim',
+ build = 'make'
+ },
+ 'nvim-telescope/telescope-ui-select.nvim',
+ },
+ config = function()
+ require('telescope').setup {
+ extensions = {
+ ['ui-select'] = {
+ require('telescope.themes').get_dropdown(),
+ },
+ },
+ }
+
+ pcall(require('telescope').load_extension, 'fzf')
+ pcall(require('telescope').load_extension, 'ui-select')
+
+ local builtin = require 'telescope.builtin'
+ vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
+ vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
+ vim.keymap.set('n', '<leader>ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
+ vim.keymap.set('n', '<leader>sw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
+ vim.keymap.set('n', '<leader>sg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
+ vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
+ vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
+ vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
+ vim.keymap.set('n', '<leader>,', builtin.buffers)
+ vim.keymap.set('n', '<leader>.', builtin.find_files)
+ vim.keymap.set('n', '<leader>>', function()
+ builtin.find_files { no_ignore = true }
+ end, { desc = 'find all files' })
+
+ vim.keymap.set('n', '<leader>sn', function()
+ builtin.find_files { cwd = vim.fn.stdpath 'config' }
+ end, { desc = '[S]earch [N]eovim files' } )
+
+ vim.keymap.set('n', '<leader>sm', function()
+ builtin.man_pages { sections = { 'ALL' } }
+ end, { desc = '[S]earch [M]an pages' })
+ end,
+}
diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua
@@ -0,0 +1,12 @@
+return {
+ 'nvim-treesitter/nvim-treesitter',
+ build = ':TSUpdate',
+ main = 'nvim-treesitter.configs',
+ opts = {
+ ensure_installed = { 'bash', 'c', 'zig', 'diff', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc' },
+ auto_install = true,
+ highlight = {
+ enable = true,
+ },
+ },
+}