My current neovim config

This commit is contained in:
twig 2022-10-10 18:12:32 -07:00
commit ec3acd5976
7 changed files with 308 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
[Pp]lugin/

13
after/plugin/color.lua Normal file
View File

@ -0,0 +1,13 @@
vim.opt.termguicolors = true
vim.opt.background = "dark"
vim.g.everforest_better_performance = 1
vim.g.everforest_disable_italic_comment = 1
vim.g.sonokai_better_performance = 1
vim.g.sonokai_disable_italic_comment = 1
--vim.cmd("colorscheme sonokai")
vim.cmd("colorscheme gruvbox")
--vim.cmd('highlight Comment guifg=#f8c0a0')
vim.cmd('highlight Comment guifg=#9296a0')

53
init.lua Normal file
View File

@ -0,0 +1,53 @@
-- Only required if you have packer configured as `opt`
require('buildcmd')
require('statusline')
require('packer_init')
require('keybindings')
--vim.opt.guicursor = " "
vim.opt.nu = true
vim.opt.relativenumber = true
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
vim.opt.smartindent = true
vim.opt.wrap = false
require('nvim-treesitter.configs').setup {
ensure_installed = { "c", "cpp", "lua", "zig", "rust" },
sync_install = false,
auto_install = false,
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
incremental_selection = {
},
indent = {
enable = true,
},
}
require('treesitter-context').setup {
enable = true,
max_lines = 0,
min_window_height = 0,
}
require('nvim-autopairs').setup{
}
require('telescope').setup{
defaults = {
},
pickers = {
find_files = {
--theme = "dropdown",
},
git_files = {
--theme = "dropdown",
}
},
extensions = {
}
}

35
lua/buildcmd.lua Normal file
View File

@ -0,0 +1,35 @@
local job_id, job_buffer
local function job_exit(jobId, exit_code, _)
job_id = nil
echo("Job done")
end
local function has_buffer()
return job_buffer and vim.fn.buflisted(job_buffer) == 1
end
function save_all_and_build()
if job_id then
echo ("Job processing")
return
end
local opts = {}
vim.api.nvim_exec('wa', opts)
if not has_buffer() then
job_buffer = vim.api.nvim_create_buf(true, true)
end
local job_window = vim.fn.bufwinnr(job_buffer)
if job_window ~= -1 then
vim.cmd(job_window .. ' wincmd w')
else
vim.cmd('buffer ' .. job_buffer)
end
vim.api.nvim_buf_set_option(job_buffer, 'filetype', 'build')
vim.api.nvim_buf_set_option(job_buffer, 'modified', false)
-- TODO: if I want to get fancy I can set a build string per language.
job_id = vim.fn.termopen("zig build", {on_exit = job_exit})
vim.api.nvim_buf_set_name(job_buffer, '[build]')
end

44
lua/keybindings.lua Normal file
View File

@ -0,0 +1,44 @@
require('buildcmd')
local tbuiltin = require('telescope.builtin')
vim.g.mapleader = ' ' --space
local function project_files()
local opts = {}
local ok = pcall(tbuiltin.git_files, opts)
if not ok then tbuiltin.find_files(opts) end
end
-- Mappings, mostly taken from nvim-lspconfig
local opts = { noremap=true, silent=true }
vim.keymap.set('n', '<leader>q', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '<leader>e', '<cmd>Ex<CR>', opts)
vim.keymap.set('n', '<leader>ff', project_files, opts)
vim.keymap.set('n', '<leader>fb', '<cmd>Telescope buffers<cr>', opts)
vim.keymap.set('n', '<leader>bb', save_all_and_build, opts)
-- TODO: get fancy and read the commentstring and user
-- Would love to have this be alt but that doesn't work...
vim.keymap.set('i', '<A-t>', '// TODO(twig): ', opts)
vim.keymap.set('i', '<A-y>', '// NOTE(twig): ', opts)
local on_attach = function(client, bufnr)
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings
local bufopts = { noremap=true, silent=true, buffer=bufnr }
-- Replace these with telescope equivalent
vim.keymap.set('n', '<leader>rb', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', '<leader>rd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', '<leader>rf', tbuiltin.lsp_references, bufopts)
vim.keymap.set('n', '<leader>rs', tbuiltin.lsp_document_symbols, bufopts)
vim.keymap.set('n', '<leader>rr', vim.lsp.buf.rename, bufopts)
end
local lsp_flags = {
debounce_text_changes = 150, --wtf is this
}
require('lspconfig')['zls'].setup {
on_attach = on_attach,
flags = lsp_flags
}
--TODO: other languages I care about.

15
lua/packer_init.lua Normal file
View File

@ -0,0 +1,15 @@
vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function(use)
-- Packer can manage itself
use 'wbthomason/packer.nvim'
use 'sainnhe/everforest'
use 'sainnhe/sonokai'
use { 'nvim-treesitter/nvim-treesitter' }
use 'neovim/nvim-lspconfig'
use 'nvim-treesitter/nvim-treesitter-context'
use { 'nvim-telescope/telescope.nvim', tag = '0.1.0', requires = {{'nvim-lua/plenary.nvim'}} }
use { 'windwp/nvim-autopairs' }
use { 'tomasr/molokai' }
use 'morhetz/gruvbox'
end)

147
lua/statusline.lua Normal file
View File

@ -0,0 +1,147 @@
local modes = {
["n"] = "NORMAL",
["no"] = "NORMAL",
["v"] = "VISUAL",
["V"] = "VISUAL LINE",
[""] = "VISUAL BLOCK",
["s"] = "SELECT",
["S"] = "SELECT LINE",
[""] = "SELECT BLOCK",
["i"] = "INSERT",
["ic"] = "INSERT",
["R"] = "REPLACE",
["Rv"] = "VISUAL REPLACE",
["c"] = "COMMAND",
["cv"] = "VIM EX",
["ce"] = "EX",
["r"] = "PROMPT",
["rm"] = "MOAR",
["r?"] = "CONFIRM",
["!"] = "SHELL",
["t"] = "TERMINAL",
}
local function mode()
local current_mode = vim.api.nvim_get_mode().mode
return string.format(" %s ", modes[current_mode]):upper()
end
local function update_mode_colors()
local current_mode = vim.api.nvim_get_mode().mode
local mode_color = "%#StatusLineAccent#"
if current_mode == "n" then
mode_color = "%#StatuslineAccent#"
elseif current_mode == "i" or current_mode == "ic" then
mode_color = "%#Search#"
elseif current_mode == "v" or current_mode == "V" or current_mode == "" then
mode_color = "%#DiffText#"
elseif current_mode == "R" then
mode_color = "%#Visual#"
elseif current_mode == "c" then
mode_color = "%#Cursor#"
elseif current_mode == "t" then
mode_color = "%#FloatShadow#"
end
return mode_color
end
local function filepath()
local fpath = vim.fn.fnamemodify(vim.fn.expand "%", ":~:.:h")
if fpath == "" or fpath == "." then
return " "
end
return string.format(" %%<%s/", fpath)
end
local function filename()
local fname = vim.fn.expand "%:t"
-- wtf
if fname == "" then
return ""
end
return fname .. " "
end
local function lsp()
local count = {}
local levels = {
errors = "Error",
warnings = "Warn",
info = "Info",
hints = "Hint",
}
for k, level in pairs(levels) do
count[k] = vim.tbl_count(vim.diagnostic.get(0, {severity = level }))
end
local errors = ""
local warnings = ""
local hints = ""
local info = ""
if count["errors"] ~= 0 then
errors = " %#LspDiagnosticsSignError# " .. count["errors"]
end
if count["warnings"] ~= 0 then
warnings = " %#LspDiagnosticsSignHint# " .. count["warnings"]
end
if count["hints"] ~= 0 then
hints = " %#LspDiagnosticsSignHint# " .. count["hints"]
end
if count["info"] ~= 0 then
info = " %#LspDiagnosticsSignInformation# " .. count["info"]
end
return errors .. warnings .. hints .. info .. "%#Normal#"
end
local function filetype()
return string.format(" %s ", vim.bo.filetype):upper()
end
local function lineinfo()
if vim.bo.filetype == "alpha" then
return ""
end
return " %l:%c %P %"
end
Statusline = {}
Statusline.active = function()
return table.concat {
"%#Statusline#",
update_mode_colors(),
mode(),
"%#Statusline# ",
filepath(),
filename(),
"%#Normal#",
lsp(),
"%=%#StatusLineExtra#",
filetype(),
lineinfo(),
}
end
function Statusline.inactive()
return " %#Statusline#%F"
end
function Statusline.short()
return "%#StatusLineNC#  NvimTree"
end
vim.api.nvim_exec([[
augroup Statusline
au!
au WinEnter,BufEnter * setlocal statusline=%!v:lua.Statusline.active()
au WinLeave,BufLeave * setlocal statusline=%!v:lua.Statusline.inactive()
au WinEnter,BufEnter,FileType NvimTree setlocal statusline=%!v:lua.Statusline.short()
augroup END
]], false)