Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

💫 Neovim

A fast and highly customisable Neovim IDE with lazy loading, and modular configurations.

Heavy and bloated


📑 ToC


📸 Showcase

DashboardEditor
DashboardEditor
DebuggingAI
DebuggingAI

🔥 Supports

Plugins

  • Highly customisable plugin manager with lazy.nvim
  • Package manager with mason.nvim

    optional, you can disable this, and install package yourself

  • NvChad UI
  • Task runner, builtin file runner
  • Formatting, linting, debugging, testing
  • Querying database, rest api, json, yaml
  • AI integration with tab completion, MCP, VectorCode
  • Fast find files, image viewer with snacks.nvim
  • Others: translate, session, chezmoi, wakatime

Note

And much more...! You will get lost in this config.

Languages

Note

The higher the order, the better configured the language is

  • Author using:
    • javascript, typescript(nodejs, deno)

      deno: Install from mason or external yourself

    • go
    • python
    • sql(postgresql)
    • github(github_action)
    • gitlab
    • shell
    • docker
  • Others:
    • java
    • c, cpp
    • html
    • css
    • react
    • tailwind
    • c#/cs
    • flutter(dart)
    • vim
    • rust
    • kotlin
    • powershell
    • sql

      mssql: Haven't test

    • lua

      Just for configuring neovim :((

  • Ops:
    • groovy + jenkinsfile
    • hcl+ terraform
    • kubernetes
    • helm
    • nginx
    • ansible
  • Configuring languages:
    • toml
    • yaml
    • xml
    • config(sshconfig, tmux)
    • kmonad
    • grafana(alloy)
  • Writing:
    • markdown
    • latex
    • d2
    • plantuml

Note

See lua/plugins/extras/languages/ for more detail


🥴 Usage

Prerequisites

  • neovim:

    version >= 0.11

  • make: Some plugins require this
  • curl
  • delta
  • ripgrep: telescope, vimgrep replacement
  • fd: telescope
  • npm, npx: for some plugins and stuff installed via Mason, treesitter generate
  • go: Some stuff installed via Mason
  • treesitter cli: to use treesitter

Note

If you don't use mason, never mind those requirements from Mason

Install

# echo 'please star this repo!'# sudo rm -rf /

Note

I suggest forking this repo in order to up to date with the upstream (this repo)

Warning

We all know how to do that

You shouldn't enter nvim for now. Use nvim --clean ./lua/plugins/languages/init.lua or another editor to edit the lua/plugins/languages/init.lua!!! Otherwise you will install tons of plugins and requirements from what I'm using.

Structure

lua
├── configs Extendable settings for builtin, plugins options
│ ├── dap nvim-dap config
│ │ └── ...
│ ├── diagnostic (Neo)vim diagnostic setup
│ ├── lazy lazy.nvim config
│ ├── mason Mason's config (custom registries)
│ ├── lsp Neovim's lsp setting
│ ├── runner Builtin file runner
│ └── ui UI (mostly for nvchad)
│ └── ...
├── core (Neo)vim native settings
├── overseer overseer.nvim templates
│ └── template
│ └── default
├── plugins lazy.nvim plugins specs
│ ├── extras Plugins can be toggle
│ │ ├── ai AI integration
│ │ ├── blink blink.cmp extensions
│ │ ├── chezmoi Chezmoi stuff
│ │ ├── coding Package manager, lint, format
│ │ ├── dap Debug
│ │ ├── database Database
│ │ ├── git Easier to interact with git
│ │ ├── languages User's preference to enable
│ │ │ └── ...
│ │ ├── lsp Enhance LSP usage
│ │ ├── mason Mason package manager
│ │ ├── motion Extend neovim motions
│ │ ├── others Others
│ │ ├── silly When you are stress
│ │ ├── telescope Telescope extensions
│ │ ├── test Testing
│ │ ├── ui Extend UI things
│ └── main Shouldn't disable, you don't want to break the config
├── types Custom types, overriding types for lua annotating
└── utils Utilities

Note

Extra plugins in lua/plugins/extras are (may) safely disabled. You should disable by group in lua/plugins/extras/init.lua, lua/plugins/extras/languages/init.lua, and individually in lua/plugins/extras/others.


📒 Notes

Keymaps

There are some keymaps you should know in this config (and native neovim keymaps)

Note

ModeKeymapDescriptions
n<leader><leader>Find Files
n<leader>eToggle File Tree
n<leader>TabOpen File Tree and Focus Current File
n<leader>yYank all into System Clipboard
nHNavigate Left Buffer in NvChad Tabufline
nLNavigate Right Buffer in NvChad Tabufline
n<leader>cClose Buffer
n<leader><Esc>No Highlight Search Matches
n<C-s>Save Buffer
nZZWrite Quit
nZQQuit
i<C-s>LSP Show Signature
n<C-w><C-d>LSP Float Diagnostic
nKLSP Hover Documentation
n<leader>atToggle AI Completion Suggestion
n<leader>oHUncloak The File laytan/cloak.nvim

Warning

With completion behavior, see questions below

Should read

  • Setting up new LSP in after/lsp/

    For better overriding

  • Use mason tools to install all packages (Language servers, linters, formatters, runtime)
    :MasonToolsInstall
  • Plugins are updated every week (set in lazy config)
  • Some languages pack require others, you should (or must?) enable yourself:
    • rest: http
    • jenkins: groovy
    • react: typescript
    • ansible: yaml (for yaml syntax highlighting)
  • Set $NVIM_NO_IDE to any value to disable lsp, format, lint (quick editing)

    Ex:

     NVIM_NO_IDE=1 lazygit # commit, quick edit
  • Working with sql:
    • With PostgreSQL or PLpgSQL,..., set ft to pgsql and not using treesitter, but lifepillar/pgsql.vim

      Ex:

      • # vim: set ft=pgsql:
  • Working with latex:
    • on Arch:
      pacman -Sy texlive-latex texlive-latexextra texlive-binextra texlive-langother libxcrypt-compat
      pacman -S texlive-fontextra # For fonts...
    • other: idk
  • helm_ls includes yaml_ls already, no need to run yaml_ls
  • With groovy-language-server, ensure you are using java@18 or so...

For configuring

  • lazy.nvim only run config and init once. Not like opts
  • If NvChad UI's color is broken, use <leader>ur
  • Don't use NvChad's auto command
  • lsp currently not enabled by compound filetype
  • nvim-lint can lint the compound filetype
  • conform format the last filetype in the compound file, one by one
  • PlantUML tree-sitter queries from here

✏️ Others

Questions

Control space in Windows Terminal doesn't work

On windows terminal which cannot send Ctrl + Space into shell, you can send Ctrl + Space as Alt + ; by editing windows terminal config json (LocalState/settings.json):

{
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b;"
},
"id": "User.sendInput.63E68121",
"keys": "ctrl+space"
}
]
}

Change the behavior of completion

See https://cmp.saghen.dev/configuration/keymap.html and change lua/plugins/main/blink-cmp.lua. You should read all the docs.

Change the NvChad UI

It may be possible. But it may require times to config.

Tips & Tricks

References

About

uitvim :P (IDE)

Topics

Resources

Stars

29 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages