aboutsummaryrefslogtreecommitdiff
path: root/config/nvim
diff options
context:
space:
mode:
authorRuben Beltran del Rio <jj@r.bdr.sh>2025-10-19 12:42:04 +0200
committerRuben Beltran del Rio <jj@r.bdr.sh>2025-10-20 12:23:30 +0200
commit34eb520236eeeb4eb5417c184541bfb9d0d5efee (patch)
treeca7ab5ad37c57da2c841a88c37e870f589afb577 /config/nvim
parentc86fab0e8d470c7e30bb875c3f7f9d17fdb975f5 (diff)
First pass at using a light theme
Diffstat (limited to 'config/nvim')
-rw-r--r--config/nvim/colors/tranquil-light.vim160
-rw-r--r--config/nvim/init.lua6
-rw-r--r--config/nvim/lazy-lock.json18
-rw-r--r--config/nvim/lua/lsp.lua118
-rw-r--r--config/nvim/lua/plugins.lua6
-rw-r--r--config/nvim/lua/treesitter_config.lua1
6 files changed, 219 insertions, 90 deletions
diff --git a/config/nvim/colors/tranquil-light.vim b/config/nvim/colors/tranquil-light.vim
new file mode 100644
index 0000000..54f374d
--- /dev/null
+++ b/config/nvim/colors/tranquil-light.vim
@@ -0,0 +1,160 @@
+" Vim color scheme
+"
+" Name: tranquil-light.vim
+" Maintainer: Rubén Beltrán del Río <ben@nsovocal.com>
+" Last Change: 05 Mar 2025
+" License: public domain
+" Version: 1.1.0
+"
+" 256 color scheme using tranquil systems palette in light mode
+
+set background=light
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let g:colors_name = "tranquil-light"
+
+" Variables & Constants
+hi @variable guifg=#0F261F
+hi link @lsp.type.unresolvedReference.rust DiagnosticUnderlineError
+hi Constant guifg=#0000F1
+
+" Types & Structs
+hi Structure guifg=#0000F1
+hi Type guifg=#0000F1 gui=bold cterm=bold
+hi Typedef guifg=#80FFCC
+hi Function guifg=#FF616B
+
+" Functions and Macros
+hi link @lsp.type.macro.rust Macro
+hi link @function.macro.rust Macro
+hi Macro guifg=#23C17C gui=bold cterm=bold
+hi Include guifg=#23C17C gui=none cterm=none
+hi Define guifg=#23C17C gui=italic cterm=italic
+hi PreProc guifg=#23C17C
+hi PreCondit guifg=#23C17C gui=bold cterm=bold
+
+" Language
+hi Comment guifg=#0F261F guibg=#FFB4F0
+hi SpecialComment guifg=#0F261F gui=bold cterm=bold
+hi Todo guifg=#0F261F guibg=bg gui=bold cterm=bold
+hi Delimiter guifg=#90A6A2
+hi Identifier guifg=#4F8FE6
+hi Statement guifg=#6F807C gui=bold cterm=bold
+hi Keyword guifg=#6F807C gui=bold,italic cterm=bold,italic
+hi Repeat guifg=#6F807C gui=bold cterm=bold
+hi Exception guifg=#6F807C gui=bold cterm=bold
+hi Operator guifg=#FA2B00
+hi Special guifg=#FA2B00 gui=italic cterm=italic
+hi SpecialChar guifg=#FA2B00 gui=bold cterm=bold
+hi Label guifg=#6F807C gui=none cterm=none
+hi StorageClass guifg=#6F807C gui=italic cterm=italic
+
+" Text
+hi Normal guifg=#0F261F guibg=NONE ctermbg=NONE
+hi Underlined guifg=#B5D1CC gui=underline cterm=underline
+hi Ignore guifg=#B5D1CC guibg=bg
+hi Error guifg=#FFFFFF guibg=#FA2B00
+hi Debug guifg=#FFB4F0 gui=bold cterm=bold
+
+" Specific Types
+hi Boolean guifg=#19a6b0
+hi Number guifg=#19a6b0
+hi Float guifg=#19A6B0
+hi Character guifg=#23C17C guibg=#FEFEFE
+hi String guifg=#23C17C guibg=#FEFEFE
+hi Conditional guifg=#FA2B00 gui=bold cterm=bold
+
+" File Browser
+hi Directory guifg=#23C17C gui=bold
+
+" Editor
+hi Cursor guifg=#FFFFFF guibg=#0000F1
+hi CursorLine guibg=#F1F1F1
+hi CursorColumn guibg=#F1F1F1
+hi LineNr guifg=#0000F1 guibg=#FEFEFE
+hi CursorLineNr guifg=#FFFFFF guibg=#0000F1
+hi NonText guifg=#90A6A2 guibg=none
+hi SpecialKey guifg=#0000F1
+hi ColorColumn guifg=#FFFFFF guibg=#FA4B00
+hi WinSep guifg=#0f261F
+hi SignColumn guifg=#23C17C guibg=#DAE6E3
+hi StatusLine guifg=#FFFFFF guibg=#0F261F
+hi StatusLineNC guifg=#DAE6E3 guibg=#90A6A2
+hi TabLineFill guifg=#FFFFFF guibg=#0F261F
+hi TabLine guifg=#FFFFFF guibg=#0F261F
+hi TabLineSel guifg=#FFFFFF guibg=#23C17C
+hi Tag guifg=#0F261F gui=underline cterm=underline guisp=#0000F1
+hi Title guifg=#4F8FE6
+hi VertSplit guifg=#0F261F guibg=#FFFFFF gui=bold cterm=bold
+
+" Editor / Search & Matching
+hi IncSearch guifg=#0F261F guibg=#FFAB00
+hi CurSearch guifg=#FFFFFF guibg=#23C17C
+hi Search guifg=#0F261F guibg=#FFBF6E
+hi Substitute guifg=#0F261F guibg=#29BDAD
+hi MatchParen guifg=#0F261F guibg=#FFAB00 gui=bold cterm=bold
+hi VisualNOS guibg=#0024CC
+hi Visual guibg=#0024CC guifg=#FFFFFF
+
+" Editor / Text Folding
+hi FoldColumn guifg=#FFFFFF guibg=#0F261F
+hi Folded guifg=#FFFFFF guibg=#90A6A2
+
+" Diffing
+hi DiffAdd guifg=#23C17C guibg=#F1F1F1
+hi DiffChange guifg=#FFFFFF guibg=#0000F1
+hi DiffDelete guifg=#FA2B00 guibg=#90A6A2
+hi DiffText gui=bold cterm=bold
+hi DiffTextAdd gui=bold cterm=bold
+hi link @text.diff.add DiffAdd
+hi link @text.diff.delete DiffDelete
+
+" Editor / Messages
+hi MsgArea guibg=#FFFFFF
+hi OkMsg guifg=#FFFFFF guibg=#23C17C gui=bold cterm=bold
+hi ErrorMsg guifg=#FFFFFF guibg=#FA2B00 gui=bold cterm=bold
+hi WarningMsg guifg=#0F261F guibg=#FFAB00 gui=bold cterm=bold
+hi StderrMsg guifg=#FA2B00
+hi StdoutMsg guifg=#0F261F
+hi ModeMsg guifg=#FFFFFF guibg=#0000F1
+hi MoreMsg guifg=#FFFFFF guibg=#23C17C
+hi Question guifg=#0F261F guibg=#80FFCC
+
+" Complete Menu
+hi Pmenu guifg=#0F261F guibg=#80FFCC
+hi PmenuSel guifg=#FFFFFF guibg=#0F261F
+hi PmenuSbar guibg=#0F261F
+hi PmenuThumb guifg=#80FFCC
+hi WildMenu guifg=#80FFCC guibg=#0F261F
+
+" WhichKey
+hi WhichKeyNormal guibg=#0F261F
+hi WhichKeyBorder guibg=#23C17C guifg=#FFFFFF
+hi WhichKeyDesc guifg=#90A6A2
+hi WhichKeyGroup guifg=#23C17C
+hi WhichKeyIcon guibg=#0F261F guifg=#FA2B00
+hi WhichKeyIconAzure guibg=#0F261F guifg=#FFB4F0
+hi WhichKeyIconBlue guibg=#0F261F guifg=#4F8FE6
+hi WhichKeyIconCyan guibg=#0F261F guifg=#80FFCC
+hi WhichKeyIconGreen guibg=#0F261F guifg=#23C17C
+hi WhichKeyIconGrey guibg=#0F261F guifg=#90A6A2
+hi WhichKeyIconOrange guibg=#0F261F guifg=#FFCFC4
+hi WhichKeyIconPurple guibg=#0F261F guifg=#FF616B
+hi WhichKeyIconRed guibg=#0F261F guifg=#FA2B00
+hi WhichKeyIconYellow guibg=#0F261F guifg=#FAED8F
+hi WhichKeySeparator guifg=#B5D1CC
+hi WhichKeyTitle guifg=#23C17C
+
+" LSP Related
+hi LspInlayHint guifg=#90A6A2
+hi DiagnosticError guifg=#FFFFFF guibg=#FA2B00
+hi DiagnosticWarn guifg=#0F261F guibg=#FAED8F
+hi DiagnosticInfo guifg=#FFFFFF guibg=#4F8FE6
+hi DiagnosticHint guifg=#0F261F guibg=#FFB4F0
+hi DiagnosticUnderlineError guifg=#0F261F guisp=#FA2B00 gui=undercurl,italic cterm=undercurl,italic
+
+" FZF
+hi @fzf.hlplus guifg=#FFFFFF
diff --git a/config/nvim/init.lua b/config/nvim/init.lua
index f614402..8bf4824 100644
--- a/config/nvim/init.lua
+++ b/config/nvim/init.lua
@@ -10,7 +10,7 @@ vim.opt.colorcolumn='80,150' -- Show color columns
-- Color
vim.opt.termguicolors = true
-vim.cmd.color('tranquil')
+vim.cmd.color('tranquil-light')
-- Tab Style (Always override with editorconfig)
vim.opt.tabstop = 2 -- 2 Spaces per tab
@@ -29,9 +29,11 @@ vim.opt.smartcase = true -- Unless we use both cases in searc
vim.opt.wildmode = 'list:longest,list:full' -- Autocomplete common matching string
-- Folding Behavior
-vim.opt.foldmethod = 'syntax' -- Use syntax highlight to define folds
+vim.opt.foldmethod = 'expr' -- Use treesitter for folds
+vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
vim.opt.foldnestmax = 10 -- Max 10 folds
vim.opt.foldlevelstart = 99 -- Start with all folds open
+vim.opt.foldcolumn = "auto"
-- Relative Number Behavior
vim.api.nvim_create_autocmd({'FocusLost', 'InsertEnter'}, {
diff --git a/config/nvim/lazy-lock.json b/config/nvim/lazy-lock.json
index 3164297..9d6f765 100644
--- a/config/nvim/lazy-lock.json
+++ b/config/nvim/lazy-lock.json
@@ -1,21 +1,21 @@
{
"LargeFile": { "branch": "master", "commit": "3941a37b2b0288524300348a39521a46539bf9f6" },
- "coq_nvim": { "branch": "coq", "commit": "d2aeb3221cb46bfd1c51afd1b247d092c52ec0d6" },
- "fzf-lua": { "branch": "main", "commit": "7c21f30f6182ca2463681c0f287d032b48882d4f" },
+ "coq_nvim": { "branch": "coq", "commit": "a63d28a9aa59c20a503ce38608fb6bc7cb3842f4" },
+ "fzf-lua": { "branch": "main", "commit": "c102a4eeb10a04ed7e69ce80918923c4175c19d8" },
"gemini.vim": { "branch": "master", "commit": "c9efb59c97b71c28d4678c79fd21fbdd3a69d196" },
- "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
- "lazydev.nvim": { "branch": "main", "commit": "258d2a5ef4a3e3d6d9ba9da72c9725c53e9afcbd" },
+ "lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" },
+ "lazydev.nvim": { "branch": "main", "commit": "e28ce52fc7ff79fcb76f0e79ee6fb6182fca90b9" },
"neogen": { "branch": "main", "commit": "d7f9461727751fb07f82011051338a9aba07581d" },
"nota.nvim": { "branch": "main", "commit": "503bfaa93968986a9df5376c4543207c70dd2a07" },
- "nvim-autopairs": { "branch": "master", "commit": "23320e75953ac82e559c610bec5a90d9c6dfa743" },
- "nvim-dap": { "branch": "master", "commit": "7367cec8e8f7a0b1e4566af9a7ef5959d11206a7" },
+ "nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" },
+ "nvim-dap": { "branch": "master", "commit": "6782b097af2417a4c3e33849b0a26ae2188bd7ea" },
"nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" },
"nvim-dap-vscode-js": { "branch": "main", "commit": "03bd29672d7fab5e515fc8469b7d07cc5994bbf6" },
- "nvim-lspconfig": { "branch": "master", "commit": "db8fef885009fdec0daeff3e5dda92e1f539611e" },
+ "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-endwise": { "branch": "master", "commit": "a61a9de7965324d4019fb1637b66bfacdcb01f51" },
- "oil.nvim": { "branch": "master", "commit": "919e155fdf38e9148cdb5304faaaf53c20d703ea" },
+ "oil.nvim": { "branch": "master", "commit": "7e1cd7703ff2924d7038476dcbc04b950203b902" },
"oleoboard.nvim": { "branch": "main", "commit": "3652b39db3a8faca3fb767ace799479124bc79f3" },
"snes-syntax-vim": { "branch": "master", "commit": "a6a699c8905f7b6119bf91e44f960667d9f03d59" },
"tree-sitter-api-notation": { "branch": "main", "commit": "3113c6077d9ed1e662a891714ac00e1ee3bb7657" },
@@ -23,5 +23,5 @@
"vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" },
"vim-indent-object": { "branch": "master", "commit": "8ab36d5ec2a3a60468437a95e142ce994df598c6" },
"vim-togglelist": { "branch": "master", "commit": "48f0d30292efdf20edc883e61b121e6123e03df7" },
- "which-key.nvim": { "branch": "main", "commit": "904308e6885bbb7b60714c80ab3daf0c071c1492" }
+ "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" }
}
diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua
index 7434504..6c69119 100644
--- a/config/nvim/lua/lsp.lua
+++ b/config/nvim/lua/lsp.lua
@@ -1,45 +1,37 @@
local coq = require('coq')
--- Prepare capabilities with COQ support
-local capabilities = vim.lsp.protocol.make_client_capabilities()
-capabilities.textDocument.completion.completionItem.snippetSupport = true
-capabilities = coq.lsp_ensure_capabilities(capabilities)
-
--- Configure each LSP server
-vim.lsp.config('ts_ls', {
+vim.lsp.config('ts_ls', coq.lsp_ensure_capabilities({
cmd = { 'typescript-language-server', '--stdio' },
- root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json' },
- capabilities = capabilities,
-})
+ filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
+ root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json' }
+}))
+vim.lsp.enable('ts_ls')
-vim.lsp.config('eslint', {
+vim.lsp.config('eslint', coq.lsp_ensure_capabilities({
cmd = { 'vscode-eslint-language-server', '--stdio' },
- root_markers = { '.eslintrc', '.eslintrc.js', '.eslintrc.json', 'package.json' },
- capabilities = capabilities,
-})
+ filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
+ root_markers = { '.eslintrc', '.eslintrc.js', '.eslintrc.json', 'package.json' }
+}))
+vim.lsp.enable('eslint')
-vim.lsp.config('svelte', {
+vim.lsp.config('svelte', coq.lsp_ensure_capabilities({
cmd = { 'svelteserver', '--stdio' },
- root_markers = { 'package.json', 'svelte.config.js' },
- capabilities = capabilities,
-})
+ filetypes = { 'svelte' },
+ root_markers = { 'package.json', 'svelte.config.js' }
+}))
+vim.lsp.enable('svelte')
-vim.lsp.config('pyright', {
+vim.lsp.config('pyright', coq.lsp_ensure_capabilities({
cmd = { 'pyright-langserver', '--stdio' },
- root_markers = { 'pyproject.toml', 'setup.py', 'requirements.txt' },
- capabilities = capabilities,
-})
-
-vim.lsp.config('dartls', {
- cmd = { 'dart', 'language-server', '--protocol=lsp' },
- root_markers = { 'pubspec.yaml' },
- capabilities = capabilities,
-})
+ filetypes = { 'python' },
+ root_markers = { 'pyproject.toml', 'setup.py', 'requirements.txt' }
+}))
+vim.lsp.enable('pyright')
-vim.lsp.config('rust_analyzer', {
+vim.lsp.config('rust_analyzer', coq.lsp_ensure_capabilities({
cmd = { 'rust-analyzer' },
+ filetypes = { 'rust' },
root_markers = { 'Cargo.toml', 'rust-project.json' },
- capabilities = capabilities,
settings = {
['rust-analyzer'] = {
imports = {
@@ -57,61 +49,35 @@ vim.lsp.config('rust_analyzer', {
enable = true
},
checkOnSave = {
+ enable = true,
command = "clippy"
}
},
},
-})
+}))
+vim.lsp.enable('rust_analyzer')
-vim.lsp.config('lua_ls', {
+vim.lsp.config('lua_ls', coq.lsp_ensure_capabilities({
cmd = { 'lua-language-server' },
+ filetypes = { 'lua' },
root_markers = { '.luarc.json', '.luarc.jsonc', '.luacheckrc', 'stylua.toml', 'selene.toml' },
- capabilities = capabilities,
-})
-
--- Auto-enable LSP servers based on filetype
-vim.api.nvim_create_autocmd('FileType', {
- pattern = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
- callback = function()
- vim.lsp.enable('ts_ls')
- vim.lsp.enable('eslint')
- end,
-})
+}))
+vim.lsp.enable('lua_ls')
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'svelte',
- callback = function()
- vim.lsp.enable('svelte')
- end,
-})
-
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'python',
- callback = function()
- vim.lsp.enable('pyright')
- end,
-})
-
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'dart',
- callback = function()
- vim.lsp.enable('dartls')
- end,
-})
-
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'rust',
- callback = function()
- vim.lsp.enable('rust_analyzer')
- -- Enable inlay hints for Rust
- vim.lsp.inlay_hint.enable(true, { bufnr = 0 })
- end,
-})
+vim.lsp.config('gleam', coq.lsp_ensure_capabilities({
+ cmd = { 'gleam', 'lsp' },
+ filetypes = { 'gleam' },
+ root_markers = { 'gleam.toml' },
+}))
+vim.lsp.enable('gleam')
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'lua',
- callback = function()
- vim.lsp.enable('lua_ls')
+-- Enable inlay hints for Rust when LSP attaches
+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.name == 'rust_analyzer' then
+ vim.lsp.inlay_hint.enable(true, { bufnr = args.buf })
+ end
end,
})
diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua
index 882c76d..ce637e9 100644
--- a/config/nvim/lua/plugins.lua
+++ b/config/nvim/lua/plugins.lua
@@ -28,9 +28,9 @@ require('lazy').setup({
['fg'] = {'fg', 'Normal'},
['bg'] = {'bg', 'Normal'},
['hl'] = {'fg', 'Comment'},
- ['fg+'] = {'fg', 'CursorLine'},
- ['bg+'] = {'bg', 'CursorLine'},
- ['hl+'] = {'fg', 'Statement'},
+ ['fg+'] = {'fg', 'Type'},
+ ['bg+'] = {'bg', 'Comment'},
+ ['hl+'] = {'fg', '@fzf.hlplus'},
['info'] = {'fg', 'PreProc'},
['prompt'] = {'fg', 'Conditional'},
['pointer'] = {'fg', 'Exception'},
diff --git a/config/nvim/lua/treesitter_config.lua b/config/nvim/lua/treesitter_config.lua
index ded65ac..16986d6 100644
--- a/config/nvim/lua/treesitter_config.lua
+++ b/config/nvim/lua/treesitter_config.lua
@@ -8,6 +8,7 @@ require'nvim-treesitter.configs'.setup {
'diff',
'dockerfile',
'gitcommit',
+ 'gleam',
'graphql',
'html',
'htmldjango',