aboutsummaryrefslogtreecommitdiff
path: root/config/nvim
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-10-30 19:01:51 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-10-30 19:01:51 +0100
commit8350aa04f51882f11bd40a51eacd4a0c47bafc02 (patch)
tree69e94b2e26ca370108c476eade15150c34b307d1 /config/nvim
parent1cb7eb48c4e81626d3df6736fd0e2a866674def5 (diff)
parent2b09251962f4b80eeee1c6e11bde8d29536915e6 (diff)
Merge branch 'main' of git.sr.ht:~rbdr/dotfiles
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.json26
-rw-r--r--config/nvim/lua/lsp.lua80
-rw-r--r--config/nvim/lua/plugins.lua6
-rw-r--r--config/nvim/lua/treesitter_config.lua1
6 files changed, 242 insertions, 37 deletions
diff --git a/config/nvim/colors/tranquil-light.vim b/config/nvim/colors/tranquil-light.vim
new file mode 100644
index 0000000..4046a97
--- /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 gui=NONE,nocombine cterm=NONE,nocombine
+
+" Types & Structs
+hi Structure guifg=#0000F1
+hi Type guifg=#0000F1 gui=bold cterm=bold
+hi Typedef guifg=#80FFCC
+hi Function guifg=#FF5EC4
+
+" 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 bef9479..9d6f765 100644
--- a/config/nvim/lazy-lock.json
+++ b/config/nvim/lazy-lock.json
@@ -1,27 +1,27 @@
{
"LargeFile": { "branch": "master", "commit": "3941a37b2b0288524300348a39521a46539bf9f6" },
- "coq_nvim": { "branch": "coq", "commit": "8ff6e8a9983b537b94be65c18d27710810c764c9" },
- "fzf-lua": { "branch": "main", "commit": "fd6588ee052e150eb61f578fa8c40648def5b334" },
+ "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": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
+ "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": "2647cce4cb64fb35c212146663384e05ae126bdf" },
- "nvim-dap": { "branch": "master", "commit": "2edd6375692d9ac1053d50acfe415c1eb2ba92d0" },
- "nvim-dap-ui": { "branch": "master", "commit": "73a26abf4941aa27da59820fd6b028ebcdbcf932" },
+ "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": "69a1624aff5dc30dddd0c59d99a947b63c80bf2a" },
+ "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
- "nvim-treesitter-endwise": { "branch": "master", "commit": "d6cbb83307d516ec076d17c9a33d704ef626ee8c" },
- "oil.nvim": { "branch": "master", "commit": "08c2bce8b00fd780fb7999dbffdf7cd174e896fb" },
+ "nvim-treesitter-endwise": { "branch": "master", "commit": "a61a9de7965324d4019fb1637b66bfacdcb01f51" },
+ "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" },
- "undotree": { "branch": "master", "commit": "b951b87b46c34356d44aa71886aecf9dd7f5788a" },
- "vim-fugitive": { "branch": "master", "commit": "593f831d6f6d779cbabb70a4d1e6b1b1936a88af" },
+ "undotree": { "branch": "master", "commit": "0f1c9816975b5d7f87d5003a19c53c6fd2ff6f7f" },
+ "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": "370ec46f710e058c9c1646273e6b225acf47cbed" }
+ "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" }
}
diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua
index 7dfb050..6c69119 100644
--- a/config/nvim/lua/lsp.lua
+++ b/config/nvim/lua/lsp.lua
@@ -1,15 +1,37 @@
-local lspconfig = require('lspconfig')
local coq = require('coq')
-local capabilities = vim.lsp.protocol.make_client_capabilities()
-capabilities.textDocument.completion.completionItem.snippetSupport = true
-lspconfig.ts_ls.setup(coq.lsp_ensure_capabilities({}))
-lspconfig.eslint.setup(coq.lsp_ensure_capabilities({}))
-lspconfig.svelte.setup(coq.lsp_ensure_capabilities({}))
-lspconfig.pyright.setup(coq.lsp_ensure_capabilities({}))
-lspconfig.dartls.setup(coq.lsp_ensure_capabilities({}))
-lspconfig.rust_analyzer.setup(coq.lsp_ensure_capabilities({
- -- Server-specific settings. See `:help lspconfig-setup`
+vim.lsp.config('ts_ls', coq.lsp_ensure_capabilities({
+ cmd = { 'typescript-language-server', '--stdio' },
+ filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
+ root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json' }
+}))
+vim.lsp.enable('ts_ls')
+
+vim.lsp.config('eslint', coq.lsp_ensure_capabilities({
+ cmd = { 'vscode-eslint-language-server', '--stdio' },
+ filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
+ root_markers = { '.eslintrc', '.eslintrc.js', '.eslintrc.json', 'package.json' }
+}))
+vim.lsp.enable('eslint')
+
+vim.lsp.config('svelte', coq.lsp_ensure_capabilities({
+ cmd = { 'svelteserver', '--stdio' },
+ filetypes = { 'svelte' },
+ root_markers = { 'package.json', 'svelte.config.js' }
+}))
+vim.lsp.enable('svelte')
+
+vim.lsp.config('pyright', coq.lsp_ensure_capabilities({
+ cmd = { 'pyright-langserver', '--stdio' },
+ filetypes = { 'python' },
+ root_markers = { 'pyproject.toml', 'setup.py', 'requirements.txt' }
+}))
+vim.lsp.enable('pyright')
+
+vim.lsp.config('rust_analyzer', coq.lsp_ensure_capabilities({
+ cmd = { 'rust-analyzer' },
+ filetypes = { 'rust' },
+ root_markers = { 'Cargo.toml', 'rust-project.json' },
settings = {
['rust-analyzer'] = {
imports = {
@@ -27,18 +49,39 @@ lspconfig.rust_analyzer.setup(coq.lsp_ensure_capabilities({
enable = true
},
checkOnSave = {
+ enable = true,
command = "clippy"
}
},
},
- on_attach = function(client, bufnr)
- vim.lsp.inlay_hint.enable(true, { bufnr = bufnr })
- end
}))
-lspconfig.lua_ls.setup(coq.lsp_ensure_capabilities({}))
+vim.lsp.enable('rust_analyzer')
--- Global mappings.
--- See `:help vim.diagnostic.*` for documentation on any of the below functions
+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' },
+}))
+vim.lsp.enable('lua_ls')
+
+vim.lsp.config('gleam', coq.lsp_ensure_capabilities({
+ cmd = { 'gleam', 'lsp' },
+ filetypes = { 'gleam' },
+ root_markers = { 'gleam.toml' },
+}))
+vim.lsp.enable('gleam')
+
+-- 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,
+})
+
+-- Global mappings
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
@@ -51,9 +94,8 @@ vim.api.nvim_create_autocmd('LspAttach', {
callback = function(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-
- -- Buffer local mappings.
- -- See `:help vim.lsp.*` for documentation on any of the below functions
+
+ -- Buffer local mappings
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
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',