neovim cfg overhaul

This commit is contained in:
turtlebasket
2026-02-19 14:28:34 -08:00
parent 4d34926921
commit 5c5128be85
4 changed files with 209 additions and 134 deletions

13
config/neovim/README.md Normal file
View File

@@ -0,0 +1,13 @@
# Neovim Config
Backup from live config to this folder:
```bash
cp ~/.config/nvim/{init.lua,lazy-lock.json} config/neovim/
```
Restore from this folder to live config:
```bash
cp config/neovim/{init.lua,lazy-lock.json} ~/.config/nvim/
```

181
config/neovim/init.lua Normal file
View File

@@ -0,0 +1,181 @@
-- INSTALL LAZY.NVIM (if not bootstrapping automatically):
-- git clone --filter=blob:none https://github.com/folke/lazy.nvim.git --branch=stable \
-- ~/.local/share/nvim/lazy/lazy.nvim
-- NOTE: if vscode-neovim is active, exit early for stock behavior.
if vim.g.vscode then
return
end
-- aliases
local o = vim.o
local c = vim.cmd
local map = vim.api.nvim_set_keymap
-- leader keys
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- options
o.termguicolors = true
o.mouse = 'a'
o.smartindent = true
o.wrap = false
o.relativenumber = true
o.tabstop = 4
o.shiftwidth = 4
o.expandtab = true
-- Prefer LSP semantic tokens over treesitter captures when both exist.
vim.hl.priorities.semantic_tokens = 140
vim.hl.priorities.treesitter = 100
-- ensure .svelte files are detected correctly
vim.filetype.add({
extension = {
svelte = 'svelte',
},
})
-- set wrap if markdown file
vim.cmd('autocmd FileType markdown setlocal wrap')
-- keybinds
map('n', '<c-b>', ':NvimTreeToggle<cr>', { silent = true })
map('n', '<c-`>', ':ToggleTerm direction="float"<cr>', { silent = true })
map('t', '<c-`>', '<Cmd>:ToggleTerm<cr>', { silent = true })
map('n', '<leader>gs', ':Telescope git_status<cr>', { silent = true })
map('n', '<leader>gc', ':Telescope git_commits<cr>', { silent = true })
map('n', '<leader>:', ':Telescope commands<cr>', { silent = true })
map('n', '<leader><leader>', ':Telescope find_files<cr>', { silent = true })
map('n', '<leader>f', ':Telescope grep_string<cr>', { silent = true })
map('n', '<leader>e', '<cmd>lua vim.diagnostic.open_float()<cr>', { silent = true })
map('n', '<a-k>', ':GitGutterPrevHunk<cr>', { silent = true })
map('n', '<a-j>', ':GitGutterNextHunk<cr>', { silent = true })
-- buffer management
map('n', '<c-h>', ':bp<cr>', { silent = true })
map('n', '<c-l>', ':bn<cr>', { silent = true })
-- lazy.nvim bootstrap
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',
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require('lazy').setup({
{
'Mofiqul/vscode.nvim',
name = 'vscode',
priority = 1000,
lazy = false,
config = function()
require('vscode').setup({
transparent = true,
})
end,
},
{ 'airblade/vim-gitgutter' },
{
'nvim-lualine/lualine.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' },
config = function()
require('lualine').setup({
options = {
theme = 'vscode',
globalstatus = true,
},
})
end,
},
{
'nvim-treesitter/nvim-treesitter',
build = ':TSUpdate',
config = function()
local treesitter = require('nvim-treesitter')
local wanted = { 'svelte', 'javascript', 'typescript', 'html', 'css' }
treesitter.setup({})
vim.api.nvim_create_autocmd('FileType', {
pattern = wanted,
callback = function()
pcall(vim.treesitter.start)
end,
})
end,
},
{
'neovim/nvim-lspconfig',
config = function()
local capabilities = require('cmp_nvim_lsp').default_capabilities()
vim.lsp.config('pyright', { capabilities = capabilities })
vim.lsp.config('ts_ls', { capabilities = capabilities })
vim.lsp.config('svelte', { capabilities = capabilities })
vim.lsp.config('rust_analyzer', { capabilities = capabilities })
vim.lsp.enable('pyright')
vim.lsp.enable('ts_ls')
vim.lsp.enable('svelte')
vim.lsp.enable('rust_analyzer')
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client and client.server_capabilities.semanticTokensProvider then
vim.lsp.semantic_tokens.start(args.buf, client.id)
end
end,
})
end,
},
{ 'hrsh7th/cmp-nvim-lsp' },
{
'hrsh7th/nvim-cmp',
dependencies = { 'hrsh7th/cmp-nvim-lsp' },
config = function()
local cmp = require('cmp')
cmp.setup({
sources = {
{ name = 'nvim_lsp' },
},
})
end,
},
{
'nvim-tree/nvim-tree.lua',
dependencies = { 'nvim-tree/nvim-web-devicons' },
config = function()
require('nvim-tree').setup({ view = { width = 42 } })
end,
},
{
'nvim-telescope/telescope.nvim',
dependencies = { 'nvim-lua/plenary.nvim' },
},
{
'akinsho/toggleterm.nvim',
version = '*',
config = function()
require('toggleterm').setup()
end,
},
})
-- NOTE: pcall prevents plugin system errors on first load
if not pcall(function()
c.colorscheme('vscode')
end) then
print('Failed to load colorscheme - probably has not been installed')
end

View File

@@ -0,0 +1,15 @@
{
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
"nvim-cmp": { "branch": "main", "commit": "da88697d7f45d16852c6b2769dc52387d1ddc45f" },
"nvim-lspconfig": { "branch": "master", "commit": "44acfe887d4056f704ccc4f17513ed41c9e2b2e6" },
"nvim-tree.lua": { "branch": "master", "commit": "e11ce83ed9a00f065bf676ae4e6c261c766989ba" },
"nvim-treesitter": { "branch": "main", "commit": "3edb01f912867603c2aef9079f208f0244c0885b" },
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"telescope.nvim": { "branch": "master", "commit": "5255aa27c422de944791318024167ad5d40aad20" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"vim-gitgutter": { "branch": "main", "commit": "0acb772e76064cc406664ab595b58b3fac76488a" },
"vscode": { "branch": "main", "commit": "aa1102a7e15195c9cca22730b09224a7f7745ba8" }
}

View File

@@ -1,134 +0,0 @@
-- INSTALL PACKER:
-- git clone --depth 1 https://github.com/wbthomason/packer.nvim\
-- ~/.local/share/nvim/site/pack/packer/start/packer.nvim
-- check for vscode nvim plugin
-- (https://github.com/vscode-neovim/vscode-neovim)
if vim.g.vscode then
do return end
else
if vim.g.neovide then
vim.o.guifont = "CaskaydiaCove Nerd Font:h14"
vim.g.neovide_hide_mouse_when_typing = true
end
end
-- aliases
local o = vim.o
local c = vim.cmd
local map = vim.api.nvim_set_keymap
-- options
o.termguicolors = true
o.mouse = 'a'
-- o.autoindent = true
o.smartindent = true -- replacing autoindent with this
o.wrap = false
o.nobinary = true
o.relativenumber = true
o.tabstop = 4
o.shiftwidth = 4
o.expandtab = true
-- set wrap if markdown file
vim.cmd('autocmd FileType markdown setlocal wrap')
-- NOTE: pcall prevents plugin system from shitting itself on first load
if not pcall(function()
-- c.colorscheme 'catppuccin'
c.colorscheme "vscode"
end) then
print("Failed to load colorscheme - probably has not been installed")
end
-- keybinds
-- file management
-- map('n', '<c-t>', ':CHADopen<cr>', {silent = true})
map('n', '<c-b>', ':NvimTreeToggle<cr>', {silent = true})
map('n', '<c-`>', ':ToggleTerm direction="float"<cr>', {silent = true})
-- exit terminal requires <Cmd> prefix
map('t', '<c-`>', '<Cmd>:ToggleTerm<cr>', {silent = true})
map('n', '<Space>gs', ':Telescope git_status<cr>', {silent = true})
map('n', '<Space>gc', ':Telescope git_commits<cr>', {silent = true})
map('n', '<Space>:', ':Telescope commands<cr>', {silent = true})
map('n', '<Space><Space>', ':Telescope find_files<cr>', {silent = true})
map('n', '<Space>f', ':Telescope grep_string<cr>', {silent = true})
-- buffer management
map('n', '<c-h>', ':bp<cr>', {silent = true})
map('n', '<c-l>', ':bn<cr>', {silent = true})
-- plugin configs
vim.g['airline_powerline_fonts'] = 1
vim.g['airline_theme'] = 'powerlineish'
vim.g['airline#extensions#tabline#enabled'] = 1
vim.g['airline#extensions#tabline#fnamemod'] = ':t'
-- plugin imports
return require('packer').startup(function(use)
-- Packer can manage itself
use 'wbthomason/packer.nvim'
-- Visual
use 'vim-airline/vim-airline'
use 'vim-airline/vim-airline-themes'
use { "catppuccin/nvim", as = "catppuccin" }
use 'airblade/vim-gitgutter'
-- Editor
use {'neovim/nvim-lspconfig', config = function()
local lspc = require('lspconfig')
-- lspc['pyright'].setup{}
-- lspc['tsserver'].setup{}
-- lspc['clojure_lsp'].setup{}
-- lspc['racket_langserver'].setup{}
-- lspc['rust_analyzer'].setup{}
-- lspc['gopls'].setup{}
end}
use 'hrsh7th/cmp-nvim-lsp'
use {'hrsh7th/nvim-cmp', config = function()
local cmp = require 'cmp'
cmp.setup {
sources = {
{ name = 'nvim_lsp' },
}
}
end}
use {"nvim-tree/nvim-tree.lua"}
use {"nvim-tree/nvim-web-devicons"}
require("nvim-tree").setup()
use 'nvim-lua/plenary.nvim'
use 'nvim-telescope/telescope.nvim'
use {"akinsho/toggleterm.nvim", tag = '*'}
require("toggleterm").setup()
use {'nvim-treesitter/nvim-treesitter', run = ':TSUpdate', config = function()
require'nvim-treesitter.configs'.setup{
highlight = {enable = true}
}
end}
-- vscode theme
use 'Mofiqul/vscode.nvim'
-- NOTE: requires Node.js >= 17
-- use {'github/copilot.vim', run = ':Copilot setup'}
-- Specify Filetype for .python Files
-- vim.api.nvim_exec([[
-- autocmd BufNewFile,BufRead *.sage set filetype=python
-- ]], false)
end)