Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: rhysd/action-setup-vim@v1
with:
neovim: true
version: v0.12
- name: Validate config loads without errors
run: nvim --headless -c "lua vim.cmd('q!')" -c "qa!"
- name: Check Lua syntax
run: |
for f in $(find lua colors -name '*.lua' -not -path '*/lazy-lock.json'); do
nvim --headless -c "lua local ok, err = loadfile('$f'); if not ok then io.stderr:write(err..'\n'); vim.cmd('cquit!') else vim.cmd('q!') end" 2>/dev/null || exit 1
done
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: JohnnyMorganz/stylua-action@v4
with:
version: latest
args: --check lua/
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
lazy-lock.json
.DS_Store
*.swp
*.swo
Expand Down
16 changes: 16 additions & 0 deletions .luarc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json",
"runtime": {
"version": "LuaJIT"
},
"workspace": {
"checkThirdParty": false,
"library": [
"${3rd}/luv/library",
"${3rd}/busted/library"
]
},
"diagnostics": {
"globals": ["vim"]
}
}
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Changelog

## 2026-06-26

### Bugfixes
- Fixed deprecated `vim.loop.fs_stat` -> `vim.uv.fs_stat` in lazy.lua
- Fixed inconsistent hex format in `seul` palette (`#1b1b1bff` -> `#1b1b1b`)
- Fixed selene config from `lua52` to `luajit`

### Configuration improvements
- Updated Neovim requirement to >= 0.11 (README + badge)
- Enabled `update_in_insert = true` for real-time diagnostics
- Added `cmdheight = 0` for cleaner UI with noice.nvim
- Created `.luarc.json` for LuaLS project configuration
- Removed `lazy-lock.json` from gitignore (reproducible installs)
- Created `.editorconfig` for cross-editor consistency

### New keymaps
- Window navigation: `<C-h/j/k/l>` for moving between splits
- Clipboard: `<leader>y` (yank selection), `<leader>Y` (yank line) to system clipboard
- Terminal: `<Esc><Esc>` to exit terminal mode
- DAP: `<leader>db/dC/dx/dr/di/dO>` for debugger control
- Harpoon: `<leader>ha` (add), `<leader>hh` (menu), `<leader>h1-4` (quick jump)
- Sessions: `<leader>qs` (save), `<leader>ql` (load), `<leader>qd` (stop)

### New plugins
- `stevearc/dressing.nvim` - improved UI for vim.ui.select/input
- `ThePrimeagen/harpoon` (harpoon2) - quick file navigation
- `folke/persistence.nvim` - session save/restore
- `OXY2DEV/markview.nvim` - inline markdown rendering

### LSP expansion
- Added 6 new language servers: `dockerls`, `emmet_ls`, `gopls`, `sqlls`, `taplo`, `vimls`

### Formatters and linters
- Formatters: `shfmt` (shell), `taplo` (TOML), `sqlfluff` (SQL)
- Linters: `shellcheck` (sh/bash/zsh), `markdownlint` (markdown)

### Dashboard
- Removed V character from alpha-nvim ASCII art
- Added flame accents (`~`) around the X
- Added quote: "The eternal withers and the ephemeral marks our memories."
- Added diagnostics section to lualine statusline

### Nvim 0.12 features
- Enabled `vim.lsp.completion.enable()` for inline LSP completion

### CI
- Pinned Neovim version to v0.12 (stable instead of nightly)
- Added StyLua formatting check job
- Added Lua syntax validation step via `loadfile`
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<p align="center"><a href="https://dev.xscriptor.com/en/?mode=so"><img src="https://raw.githubusercontent.com/xscriptor/xassets/main/xrepos/nvim/logo.svg" height="50" alt="X"/></a></p>
<div align="center">

![Neovim](https://img.shields.io/badge/Neovim-0.10+-57A143?style=flat&logo=neovim&logoColor=white)
![Neovim](https://img.shields.io/badge/Neovim-0.11+-57A143?style=flat&logo=neovim&logoColor=white)
![Lua](https://img.shields.io/badge/Lua-5.1-2C2D72?style=flat&logo=lua&logoColor=white)
![License](https://img.shields.io/badge/license-MIT-blue?style=flat)
![PRs](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat)
Expand All @@ -20,15 +20,18 @@ Complete Neovim configuration with essential plugins, LSP, DAP, formatting, lint
<li><a href="#themes">Themes</a></li>
<li><a href="#keybindings">Keybindings</a></li>
<li><a href="#included-plugins">Included Plugins</a></li>
<li><a href="#colors">Colors</a></li>
<li><a href="#notes">Notes</a></li>
<li><a href="#related-documents">Related Documents</a></li>
<li><a href="#related-repos">Related Repos</a></li>
<li><a href="#x">X</a></li>
</ul>


<h2 id="requirements" align="center">Requirements</h2>

<ul>
<li>Neovim >= 0.10 (nightly for <code>vim.lsp.config</code> API)</li>
<li>Neovim >= 0.11</li>
<li>git</li>
<li>ripgrep</li>
<li>fd</li>
Expand Down Expand Up @@ -137,7 +140,7 @@ vim.g.langmap_en = ""
<p>If a formatter or linter binary is not installed, <code>conform</code> and <code>nvim-lint</code> will skip it without failing. Use Mason or your preferred package manager to install them.</p>


<h2 align="center">Related documents</h2>
<h2 align="center" id="related-documents">Related documents</h2>

<ul>
<li><a href="./docs/cheatsheet.md">Cheatsheet</a></li>
Expand Down
32 changes: 31 additions & 1 deletion docs/cheatsheet.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@
- `<leader>q` → Quit all (`:qa`).
- `<leader>e` → Open file explorer (Oil.nvim).
- `<leader>t` → Toggle terminal (ToggleTerm).
- `<leader>y` → Yank selected text to system clipboard.
- `<leader>Y` → Yank current line to system clipboard.

### Window Navigation
- `<C-h>` → Move to left window.
- `<C-j>` → Move to window below.
- `<C-k>` → Move to window above.
- `<C-l>` → Move to right window.
- `<Esc><Esc>` → Exit terminal mode.

### Telescope
- `<leader>ff` → Find files.
Expand All @@ -68,4 +77,25 @@
- `[d` → Previous diagnostic.
- `]d` → Next diagnostic.
- `<leader>do`→ Open diagnostic float.
- `<leader>dl`→ Send diagnostics to location list.
- `<leader>dl`→ Send diagnostics to location list.

### Debug (DAP)
- `<leader>db`→ Toggle breakpoint.
- `<leader>dC`→ Continue.
- `<leader>dx`→ Terminate.
- `<leader>dr`→ Step over.
- `<leader>di`→ Step into.
- `<leader>dO`→ Step out.

### Harpoon
- `<leader>ha`→ Add current file to harpoon.
- `<leader>hh`→ Toggle harpoon menu.
- `<leader>h1`→ Go to harpoon file 1.
- `<leader>h2`→ Go to harpoon file 2.
- `<leader>h3`→ Go to harpoon file 3.
- `<leader>h4`→ Go to harpoon file 4.

### Sessions
- `<leader>qs`→ Save current session.
- `<leader>ql`→ Load last session.
- `<leader>qd`→ Stop session (no auto-save).
61 changes: 53 additions & 8 deletions docs/troubleshooting.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,59 @@
<h1 align="center">Troubleshooting</h1>

If theres an issue with treesitter just run:
<h2>Treesitter issues</h2>

<p>If you see missing syntax highlighting or parser errors:</p>

```bash
rm -rf ~/.local/share/nvim/lazy/nvim-treesitter
# after you should open this again:
nvim
#run lazy
:lazy
#and press
U
S
```
```

<p>Then run <code>:Lazy</code> and press <code>U</code> to update, or rebuild parsers with:</p>

```vim
:TSUpdate
```

<h2>LSP not working</h2>

<p>Check that servers are installed:</p>

```vim
:Mason
```

<p>If a server is missing, install it from Mason. Then verify the language server starts:</p>

```vim
:checkhealth lsp
```

<h2>Missing icons</h2>

<p>If you see missing or broken icons, make sure you have a Nerd Font installed and
configured in your terminal. The config uses <code>nvim-web-devicons</code>
which requires a patched font.</p>

<h2>Plugin not loading</h2>

```vim
:Lazy
```

<p>Press <code>I</code> to install missing plugins, or <code>U</code> to update all.</p>

<p>To reset a single plugin:</p>

```bash
rm -rf ~/.local/share/nvim/lazy/PLUGIN_NAME
nvim
```

<h2>General health check</h2>

```vim
:checkhealth
```

<p>This runs diagnostics for Neovim and all configured plugins.</p>
53 changes: 53 additions & 0 deletions lazy-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
"alpha-nvim": { "branch": "main", "commit": "6c6a89d5b068b5251c8bdf0dd57bb921bcfeeb09" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" },
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" },
"fidget.nvim": { "branch": "main", "commit": "ef99df04a1c53a453602421bc0f756997edc8289" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "2038c666bd9d8a0b7349a0b6ee00dc83104b9ecf" },
"harpoon": { "branch": "harpoon2", "commit": "87b1a3506211538f460786c23f98ec63ad9af4e5" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"markview.nvim": { "branch": "main", "commit": "301e431c7b618235f5447d54465c70934bd33668" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "50bf3871b539896bd0650b882f6e6b467cc1c1eb" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
"nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-dap": { "branch": "master", "commit": "9e848e09a697ee95302a3ef2dd43fd6eb709e570" },
"nvim-dap-python": { "branch": "master", "commit": "1808458eba2b18f178f990e01376941a42c7f93b" },
"nvim-dap-ui": { "branch": "master", "commit": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49" },
"nvim-dap-vscode-js": { "branch": "main", "commit": "03bd29672d7fab5e515fc8469b7d07cc5994bbf6" },
"nvim-lint": { "branch": "master", "commit": "a219b2c9e5b4765e5c845aba119dad55806fcaf1" },
"nvim-lspconfig": { "branch": "master", "commit": "3371bf298c1f56efc26771ee961f461176958fb5" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
"nvim-surround": { "branch": "main", "commit": "8b47db616ef658b8fc27e61db2896aa2f40134de" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-treesitter-context": { "branch": "master", "commit": "b311b30818951d01f7b4bf650521b868b3fece16" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"oil.nvim": { "branch": "master", "commit": "b73018b75affd13fa38e2fc94ef753b465f770d7" },
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" },
"telescope.nvim": { "branch": "master", "commit": "427b576c16792edad01a92b89721d923c19ad60f" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"vim-illuminate": { "branch": "master", "commit": "0d1e93684da00ab7c057410fecfc24f434698898" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}
9 changes: 9 additions & 0 deletions lua/config/keymaps.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,12 @@ map("n", "<leader>dl", vim.diagnostic.setloclist, { desc = "Diagnostic list" })

map("n", "<leader>t", "<cmd>ToggleTerm<cr>", { desc = "Toggle terminal" })
map("t", "<leader>t", "<cmd>ToggleTerm<cr>", { desc = "Toggle terminal" })
map("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" })

map("n", "<C-h>", "<C-w>h", { desc = "Window left" })
map("n", "<C-j>", "<C-w>j", { desc = "Window down" })
map("n", "<C-k>", "<C-w>k", { desc = "Window up" })
map("n", "<C-l>", "<C-w>l", { desc = "Window right" })

map({ "n", "x" }, "<leader>y", '"+y', { desc = "Yank to clipboard" })
map("n", "<leader>Y", '"+Y', { desc = "Yank line to clipboard" })
2 changes: 1 addition & 1 deletion lua/config/lazy.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"

if not vim.loop.fs_stat(lazypath) then
if not vim.uv.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
Expand Down
3 changes: 2 additions & 1 deletion lua/config/options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ opt.backup = false
opt.confirm = true
opt.laststatus = 3
opt.showmode = false
opt.cmdheight = 0
opt.list = true
opt.listchars = { tab = "->", trail = ".", extends = ">", precedes = "<", nbsp = "+" }
opt.fillchars = { eob = " " }

vim.diagnostic.config({
underline = true,
update_in_insert = false,
update_in_insert = true,
severity_sort = true,
float = { border = "rounded" },
signs = true,
Expand Down
Loading
Loading