Skip to content
AnoRebelPublic

About

My personal Neovim config

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Latest commit

Β 

History

114 Commits

Folders and files

Repository files navigation

AnoNvim

AnoNvim

A modern, feature-rich Neovim configuration focused on providing a complete development environment. Built with Lua and designed for extensibility.

Features

  • πŸš€ Performance

    • Fast startup with lazy loading and optimized initialization
    • Efficient plugin management with Lazy.nvim
    • Startup profiling support (AVIM_PROFILE env var)
    • Optimized file operations with better error handling
  • 🎨 User Interface

    • Dynamic theme switching based on time
    • Beautiful and functional UI components with Snacks.nvim
    • Random Alpha logos/banners
    • Winbar with context information (Dropbar)
    • Advanced file picker with line number jump support (file:123)
  • πŸ“ Development

    • Advanced LSP integration with buffer-local keymaps
    • Modern completion engine with Blink.cmp
    • AI coding assistant (CodeCompanion)
    • Git integration with conflict resolution
    • Database integration with Dbee
    • Unified logging system (all logs go to avim.log)
  • πŸ”§ Tools & Utilities

    • Fuzzy finding with Snacks picker (with preview highlighting)
    • File tree with mini.files and NeoTree
    • Terminal integration with floating and split options
    • REST API client
    • Session management with Persisted
    • Advanced search and replace with GrugFar
    • Multiple cursors support
    • Cheatsheet of every mapping, laid out to fit the window (:Cheatsheet, ch)
  • βš™οΈ Configuration

    • Type checking and linting
    • Automatic package management with Mason
    • Extensive customization options
    • Well-documented codebase with type annotations
    • Custom update system (:AnoUpdate, :AnoCheckUpdate, :AnoVersion)

Requirements

  • Neovim >= 0.12.0
  • Git >= 2.19.0
  • A Nerd Font (Optional but recommended)
  • For optional features:
    • Node.js >= 20.18
    • Python >= 3.10
    • Go >= 1.23
    • Rust ( >= latest stable)

Neovim 0.12 is a hard requirement, not a recommendation: the config uses the native vim.lsp.config / vim.lsp.enable API, vim.lsp.codelens.enable, and Mason 2.0 patterns, none of which exist on earlier releases. :checkhealth avim reports an error below that floor.

The installer provisions the toolchain with mise (neovim, node, python, rust, luajit, tree-sitter, ripgrep, fd, fzf) and installs Python packages (pynvim) with uv. It also adds the activation line for your shell so the tools are on PATH. Pass --no-install-dependencies to manage all of that yourself.

Installation

bash <(curl -s https://raw.githubusercontent.com/AnoRebel/AnoNvim/main/.install/installer.sh)

Installation Options

Options:
    -h, --help                    Print this help message
    -l, --local                   Install local copy of AnoNvim
    -y, --yes                     Automatic yes to prompts
    --overwrite                   Replace an existing AnoNvim directory/link without asking
    --no-install-dependencies     Skip dependency installation (mise toolchains, uv packages)

After installation:

  1. Run avim to start AnoNvim
  2. Initial setup will install required plugins

Lua rocks

rest.nvim is installed as a LuaRock. Its HTTP parser needs the luarocks-build-treesitter-parser build backend, and LuaRocks only looks for backends in its own tree. If the rock build fails with module 'luarocks.build.treesitter-parser' not found, install the backend where LuaRocks looks, then rebuild the plugin:

ROOT="${XDG_DATA_HOME:-$HOME/.local/share}/anonvim/lazy-rocks"
luarocks --tree "$ROOT/hererocks" --lua-version 5.1 install luarocks-build-treesitter-parser

Then run :Lazy build rest.nvim inside AnoNvim.

Docker

Try AnoNvim without touching your host setup. The image uses mise to provision Neovim and the toolchains plugins need at build time (Node, Python, Rust, LuaJIT, tree-sitter), so it works the same on any host.

docker build -t anonvim .
docker run -it --rm anonvim

# or work on a real project inside the container
docker run -it --rm -v "$PWD:/work" -w /work anonvim

Neovim tracks latest and Node tracks lts by default. Pin them for a reproducible image:

docker build --build-arg NVIM_VERSION=0.12.4 --build-arg NODE_VERSION=24 -t anonvim .

The build fails loudly if the resolved Neovim is older than the required 0.12.

Directory Structure

.
β”œβ”€β”€ init.lua                  # Main entry point
β”œβ”€β”€ lua/avim
β”‚   β”œβ”€β”€ core                  # Core functionality
β”‚   β”‚   β”œβ”€β”€ defaults.lua      # Default settings
β”‚   β”‚   β”œβ”€β”€ init.lua          # Core initialization
β”‚   β”‚   β”œβ”€β”€ log.lua           # Logging system
β”‚   β”‚   └── settings.lua      # Neovim settings
β”‚   β”œβ”€β”€ commands.lua          # Commands and autocommand definitions
β”‚   β”œβ”€β”€ health.lua            # Health check
β”‚   β”œβ”€β”€ icons.lua             # Icon definitions
β”‚   β”œβ”€β”€ lazy.lua              # Plugin management
β”‚   β”œβ”€β”€ update.lua            # Update system
β”‚   β”œβ”€β”€ plugins               # Plugin configurations
β”‚   β”‚   β”œβ”€β”€ ai.lua            # AI related configurations
β”‚   β”‚   β”œβ”€β”€ bufferline.lua    # Bufferline(top bar) configurations
β”‚   β”‚   β”œβ”€β”€ blink.lua         # Code completion (blink.cmp) configurations
β”‚   β”‚   β”œβ”€β”€ database.lua      # Database configurations
β”‚   β”‚   β”œβ”€β”€ editor.lua        # Editor configurations
β”‚   β”‚   β”œβ”€β”€ explorer.lua      # File explorer configurations
β”‚   β”‚   β”œβ”€β”€ extras.lua        # Extra plugin configurations
β”‚   β”‚   β”œβ”€β”€ formatting.lua    # Code formatting configurations
β”‚   β”‚   β”œβ”€β”€ git.lua           # Git configurations
β”‚   β”‚   β”œβ”€β”€ lsp.lua           # LSP configurations
β”‚   β”‚   β”œβ”€β”€ lualine.lua       # Lualine(bottom bar) configurations
β”‚   β”‚   β”œβ”€β”€ rest.lua          # Rest client configurations
β”‚   β”‚   β”œβ”€β”€ search.lua        # Search and Replace configurations
β”‚   β”‚   β”œβ”€β”€ snacks.lua        # Folke's Snacks configurations
β”‚   β”‚   β”œβ”€β”€ themes.lua        # Themes configurations
β”‚   β”‚   β”œβ”€β”€ treesitter.lua    # Treesitter configurations
β”‚   β”‚   β”œβ”€β”€ ...               # Other plugin configurations
β”‚   β”‚   └── ui.lua            # UI components and configurations
β”‚   └── utilities             # Utility functions
β”œβ”€β”€ patches                   # Local patches applied to third-party plugins
└── Dockerfile                # Containerized AnoNvim (mise-provisioned)

Plugin patches

Some plugins carry local fixes that upstream has not adopted. Rather than editing the plugin in place β€” which is lost on the next update β€” each fix lives as a patch in patches/, applied by lua/avim/utilities/patch.lua.

lazy.nvim checks a plugin out with git checkout, which refuses to run while a tracked file has local changes, so every patch is reversed before lazy installs, updates or restores and re-applied once the operation finishes. A build hook re-applies it for fresh clones, so a plugin is never left unpatched after :Lazy sync.

Patching is idempotent, and a patch that no longer applies is refused with an error rather than written as conflict markers, since a Lua file containing <<<<<<< would break startup far from the cause. If you see such an error, the plugin is left at pristine upstream and the patch needs rebasing against the new source.

To add one:

# make your edit inside the plugin checkout, then:
git -C ~/.local/share/anonvim/lazy/<plugin> diff > patches/<plugin>.patch

Then add build = require("avim.utilities.patch").builder("<plugin>") to its spec.

Key Bindings

AnoNvim provides multiple ways to explore keybindings:

  1. Keymaps Search:

    • Snacks.picker.keymaps() or <leader>fk
  2. Which Key:

    • Press <leader> to see available key bindings
    • Context-aware key suggestions

Note: <leader> key is mapped to the Space key

Plugin Categories

🧠 AI Assistance
πŸ“ Editor Enhancement
🎨 User Interface
πŸ› οΈ Development Tools
πŸ“¦ Git Integration

Gallery

Screenshots (Click to expand)

Fuzzy finder β€” snacks.nvim backs vim.ui.select, so every list (files, buffers, sessions, code actions) is searchable.

Fuzzy finder

Cheatsheet β€” every mapping in theme-coloured cards that reflow to the window. A tab per section filters the sheet: press its key, cycle with <Tab>, or click it (:Cheatsheet, <leader>ch).

Cheatsheet

Completion and signature help β€” blink.cmp with LSP items first, signature float in the shared style.

Completion

Diagnostics β€” inline virtual text and the Trouble list, in one theme-driven float style.

Diagnostics

Git diff view β€” diffview.nvim for staging and reviewing changes.

Diffview

Markdown preview β€” markview.nvim renders markdown in the buffer.

Markdown

HTTP client β€” rest.nvim runs requests straight from .http files.

rest.nvim

Sessions β€” per-directory, per-git-branch session save and restore.

Sessions

Undo tree β€” browse and jump through edit history.

Undo tree

Multiple cursors β€” edit many places at once.

Multiple cursors

AI chat β€” CodeCompanion, with the local agent CLI as backend.

CodeCompanion

Credits

Built upon the great works of:

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE for more details.

About

My personal Neovim config

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages