Skip to content

Xrayya/neovim-dotfile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

185 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neovim Dotfiles

Lua Neovim

My personal Neovim configuration — built with modularity, and a plug-and-play mindset in mind.


🧰 Prerequisites

First of all, this repo is built and tested using the latest Neovim stable release and primarily on Linux. If you use the older version of Neovim and/or not using Linux, you might need to do your own adjustment.

Some plugins used in this config have specific external dependencies.

For example:

  • nvim-telescope expects ripgrep and fd to be available in your system (see the official notes here).
  • telescope-all-recent requires libsqlite3 to be accessible from your PATH (see the requirements here).
  • nvim-treesitter requires tree-sitter-cli and a working C compiler (see details here).
  • Some situation might require you to have Node.js or other JavaScript runtime installed, e.g. using nvim-dap with vscode-js-debug. You need to check the official documentations.

Note

For Windows users, related to tree-sitter-cli and C compiler: If you enable the /essentials/treesitter module and run into C compiler issues on Windows, you do not need to install Visual Studio.

A lighter and simpler alternative is to install MinGW (for example via Scoop), then set the CC environment variable to point to your compiler executable (like cc.exe or gcc.exe). tree-sitter-cli will automatically use the compiler defined in the CC environment variable if it is present.


🚀 Installation

  1. Clone this repository into your $XDG_CONFIG_HOME, for example on Linux:

    git clone https://github.com/Xrayya/neovim-dotfile.git ~/.config/nvim
    
  2. Open Neovim and let it automatically install all required dependencies and also create lua/extra-cofig/init.lua file

  3. You might want to update the all the plugins with :Lazy sync since I keep lazy-lock.json tracked and might out of date. You might also want to remove the lockfile altogether, it's your choice. I keep the lazy-lock.json because I need it.

  4. Enable predefined plugins by importing the appropriate files into lua/extra-config/init.lua

That’s it.


⚙️ Usage

After installation, you’ll immediately get a fully working setup: keymaps, options, and a set of carefully chosen core plugins are enabled by default.

This repository also provides a collection of predefined essential plugins and extra (optional) plugins that you can enable as needed — true plug-and-play.

For your own customization, extra-config/init.lua is the intended entry point. Use it to define personal tweaks or load additional configurations that are not included by default. This file is gitignore'd by default since the philosophy is to make this whole Neovim configuration modular, plug and play, and can be ajdusted for multiple purposes in multiple environment. Well, at least I always keep that mindset in mind when I develop this repository.

You can explore existing modules under:

Feel free to import, extend, or organize them into your own subfolders. Or, if you prefer, fork this repository and shape it entirely to your liking.


📦 Plugins

Below is an overview of the plugins used in this setup.

🔑 Core Plugins

The foundation of the configuration: editor options, keymaps, and the most critical plugins. Core plugins include:


🎒 Essential Plugins

Quality-of-life improvements such as statusline, snippets, and Git integration. Some highlights:


🧩 Extra (Optional) Plugins for Specific Needs

Additional features such as Discord presence, AI integrations, and language-specific tooling. This section is still growing.

Some notable extras:


✨ Preview

A quick look at how this Neovim setup feels in daily use.

Editing Experience

Clean syntax highlighting, LSP diagnostics, and completion out of the box.

Editing

Navigation & Search

Fast project-wide navigation powered by Telescope.

Telescope

Git Integration

Inline Git signs and context-aware diffs for real-world workflows.

Git

Running Debugger

Running Chrome Debugger in React Project and stop on breakpoint

Running Chrome Debugger in React Project

Optional Extras

Additional UI enhancements and tools you can opt into.

Extras


🎨 My Preferences, My Taste

This is my personal Neovim configuration, designed primarily for how I work and think.

That said, the structure is intentionally kept flexible so it can adapt to different workflows and use cases. Some choices may reflect my personal preferences and might not align with everyone’s taste — and that’s okay.

It’s open source. Tweak it, bend it, or completely reshape it into something that feels right for you.

For reference, here is my current lua/extra-config/init.lua:

---@module "lazy"
---@type LazySpec
return {
  {
    -- only set this if you're on windows
    "prochri/telescope-all-recent.nvim",
    init = function()
      vim.g.sqlite_clib_path = vim.fn.stdpath("data") .. "/sqlitelib/sqlite3.dll" -- or any path to sqlite3.dll
    end
  },
  { import = "xrayya.essentials" },
  { import = "xrayya.essentials.treesitter" },
  { import = "xrayya.extras.ui.alpha" },
  { import = "xrayya.extras.ui.smear-cursor" },
  { import = "xrayya.extras.aerial" },
  { import = "xrayya.extras.colorizer" },
  { import = "xrayya.extras.todo-comment" },
  { import = "xrayya.extras.external" },
  { import = "xrayya.extras.lazygit" },
  { import = "xrayya.extras.tmux" },
  { import = "xrayya.extras.ui.undo-glow" },
  { import = "xrayya.extras.markdown-preview" },

  { import = "xrayya.extras.langs.lua" },
  { import = "xrayya.extras.langs.html-css" },
  { import = "xrayya.extras.langs.tailwindcss" },
  { import = "xrayya.extras.langs.js-ts-typescript-tools" },
  { import = "xrayya.extras.langs.json" },
  { import = "xrayya.extras.langs.yaml" },
  { import = "xrayya.extras.langs.c-cpp" },
  { import = "xrayya.extras.langs.java-java" },
  { import = "xrayya.extras.langs.python" },
  { import = "xrayya.extras.langs.xml" },
  { import = "xrayya.extras.langs.git" },
  { import = "xrayya.extras.langs.bash" },
  { import = "xrayya.extras.langs.ini" },
  { import = "xrayya.extras.langs.kitty" },
  { import = "xrayya.extras.langs.udev" },

  { import = "xrayya.extras.formatter.stylua" },
  { import = "xrayya.extras.formatter.prettier" },

  {import = "xrayya.extras.debugger.js-chrome-msedge"}
}

🛠 Contributing

Found something that could be improved? Feel free to open an Issue or submit a Pull Request — contributions are always welcome.


Made with ❤️ by Xrayya

About

My current Neovim dotfile, customized in my way

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors