[vim] Fix broken color scheme

I learned once again that true color schemes don't work in macOS's Terminal.app.
I also learned that the default color scheme in neovim is very plain and doesn't
provide a lot of variation for treesitter syntax elements. So, choose a different
built-in color scheme as the default.

I also learned about the ColorScheme autocmd event, which is fired after a color
scheme is applied. Convert the (janky) reloadColorscheme function to a set of
autocommands that trigger based on the color scheme name.

Along the way, add some explicit configuration for treesitter: enable highlighting,
indentation, and make sure some of my common languages have plugins installed.
Also link the "objcpp" filetype to both "objc" and "cpp" treesitter plugins.

Lastly, make some updates to the git gutter color configuration. Create some
autocommands that are applied after the plugin is loaded. For the gutter, use
color 233 from the 256 color palette, which is a very dark gray.
This commit is contained in:
Eryn Wells 2024-09-19 13:45:02 -07:00
parent 7d26910371
commit 383fd5ceb9
4 changed files with 81 additions and 56 deletions

View file

@ -3,8 +3,25 @@
-- Ensure there's always a gutter column so there's no stutter when changes cause it to appear. -- Ensure there's always a gutter column so there's no stutter when changes cause it to appear.
vim.wo.signcolumn = "yes" vim.wo.signcolumn = "yes"
vim.cmd [[ local gitgutter_colorscheme_group = vim.api.nvim_create_augroup("GitGutterColorSchemeOverrides", { clear = true })
highlight GitGutterAdd ctermfg=Green ctermbg=0
highlight GitGutterChange ctermfg=DarkBlue ctermbg=0 local function update_gitgutter_colors()
highlight GitGutterDelete ctermfg=Red ctermbg=0 vim.cmd [[
]] hi! SignColumn ctermbg=233
hi! GitGutterAdd ctermbg=233
hi! GitGutterRemove ctermbg=233
hi! GitGutterChange ctermbg=233
hi! GitGutterChangeDelete ctermbg=233
]]
end
vim.api.nvim_create_autocmd("User", {
pattern = "GitGutter",
callback = update_gitgutter_colors,
group = gitgutter_colorscheme_group,
})
vim.api.nvim_create_autocmd("ColorScheme", {
callback = update_gitgutter_colors,
group = gitgutter_colorscheme_group,
})

View file

@ -61,13 +61,12 @@ vim.cmd [[
]] ]]
require 'autocommands' require 'autocommands'
require 'colors'
require 'configuration' require 'configuration'
require 'diagnostics' require 'diagnostics'
require 'treesitter'
require 'lsp' require 'lsp'
local colors = require 'colors'
colors.init()
local keys = require 'keys' local keys = require 'keys'
keys.init_key_opts() keys.init_key_opts()
keys.init_window_key_mappings() keys.init_window_key_mappings()

View file

@ -1,58 +1,51 @@
-- Eryn Wells <eryn@erynwells.me> -- Eryn Wells <eryn@erynwells.me>
local function reloadColorscheme(colorschemeName) -- Allow using GUI style colors (#RRGGBB hex codes) in color terminals if we
if colorschemeName == nil then -- know it can do it. This is required for most modern color themes. Apple's
-- Terminal.app doesn't have True Color support though, so make sure it's
-- off for that.
vim.g.termguicolors = not vim.env.TERM_PROGRAM == "Apple_Terminal"
local colorscheme_group = vim.api.nvim_create_augroup("ColorSchemeOverrides", { clear = true })
vim.api.nvim_create_autocmd("ColorScheme", {
callback = function()
vim.cmd [[ vim.cmd [[
highlight clear hi! ColorColumn cterm=NONE ctermbg=233
hi! CursorColumn cterm=NONE ctermbg=233
hi! CursorLine cterm=NONE ctermbg=233
hi! CursorLineNr cterm=bold ctermfg=White ctermbg=233
hi! LineNr ctermfg=DarkGray ctermbg=233
]] ]]
else end,
vim.cmd { group = colorscheme_group,
cmd = "colorscheme", })
args = {colorschemeName},
}
end
-- Make some bespoke adjustments for my cursor and line length highlights vim.api.nvim_create_autocmd("ColorScheme", {
vim.cmd [[ pattern = "default",
highlight ColorColumn cterm=NONE ctermbg=Black callback = function()
highlight CursorColumn cterm=NONE ctermbg=Black vim.cmd [[ hi! NormalFloat ctermfg=8 ]]
highlight CursorLine cterm=NONE ctermbg=Black end,
highlight CursorLineNr cterm=bold ctermfg=White ctermbg=Black group = colorscheme_group,
highlight LineNr ctermfg=DarkGray })
]]
-- Allow using GUI style colors (#RRGGBB hex codes) in color terminals if we vim.api.nvim_create_autocmd("ColorScheme", {
-- know it can do it. This is required for most modern color themes. Apple's pattern = "dracula",
-- Terminal.app doesn't have True Color support though, so make sure it's callback = function()
-- off for that. vim.cmd [[ highlight CursorLineNr guibg=#44475a ]]
vim.g.termguicolors = not vim.env.TERM_PROGRAM == "Apple_Terminal" end,
group = colorscheme_group,
})
local themeName = vim.g.colors_name vim.api.nvim_create_autocmd("ColorScheme", {
if themeName == nil then pattern = "witchhazel",
callback = function()
vim.cmd [[ vim.cmd [[
highlight! NormalFloat ctermbg=8 hi! default link LineNr CursorLineNr
hi! default link CursorLineNr CursorLine
]] ]]
elseif themeName == "witchhazel" then end,
vim.cmd [[ group = colorscheme_group,
highlight! default link LineNr CursorLineNr })
highlight! default link CursorLineNr CursorLine
]]
elseif themeName == "dracula" then
vim.cmd [[
highlight CursorLineNr guibg=#44475a
]]
end
end
local function init() vim.cmd [[ color zaibatsu ]]
if vim.env.TERM_PROGRAM == "Apple_Terminal" then
reloadColorscheme(nil)
else
reloadColorscheme("dracula")
end
end
return {
init = init,
reloadColorscheme = reloadColorscheme
}

View file

@ -0,0 +1,16 @@
-- Treesitter configuration
-- Eryn Wells <eryn@erynwells.me>
local treesitter = require 'nvim-treesitter.configs'
-- For some reason the Lua linter complains about missing fields here even
-- though they're not requried. So, ignore the error.
---@diagnostic disable:missing-fields
treesitter.setup {
highlight = { enable = true },
indent = { enable = true },
ensure_installed = { "c", "cpp", "javascript", "lua", "objc", "python", "rust", "vim" },
auto_install = true,
}
vim.treesitter.language.register("objcpp", { "objc", "cpp" })