diff --git a/.stylua.toml b/.stylua.toml
index 139e9397..6bc6d94f 100644
--- a/.stylua.toml
+++ b/.stylua.toml
@@ -1,3 +1,4 @@
+# filepath: /home/kali/.config/nvim/.stylua.toml
column_width = 160
line_endings = "Unix"
indent_type = "Spaces"
diff --git a/README.md b/README.md
index 41139505..79e811ae 100644
--- a/README.md
+++ b/README.md
@@ -4,9 +4,9 @@
A starting point for Neovim that is:
-* Small
-* Single-file
-* Completely Documented
+- Small
+- Single-file
+- Completely Documented
**NOT** a Neovim distribution, but instead a starting point for your configuration.
@@ -14,7 +14,7 @@ A starting point for Neovim that is:
### Install Neovim
-Kickstart.nvim targets *only* the latest
+Kickstart.nvim targets _only_ the latest
['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest
['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim.
If you are experiencing issues, please make sure you have the latest versions.
@@ -22,13 +22,16 @@ If you are experiencing issues, please make sure you have the latest versions.
### Install External Dependencies
External Requirements:
+
- Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`)
- [ripgrep](https://github.com/BurntSushi/ripgrep#installation),
[fd-find](https://github.com/sharkdp/fd#installation)
- Clipboard tool (xclip/xsel/win32yank or other depending on the platform)
- A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons
- if you have it set `vim.g.have_nerd_font` in `init.lua` to true
-- Emoji fonts (Ubuntu only, and only if you want emoji!) `sudo apt install fonts-noto-color-emoji`
+- Emoji fonts (only if you want emoji!)
+ - On Arch Linux: `sudo pacman -S noto-fonts-emoji` or `yay -S noto-fonts-emoji`
+ - On Ubuntu: `sudo apt install fonts-noto-color-emoji`
- Language Setup:
- If you want to write Typescript, you need `npm`
- If you want to write Golang, you will need `go`
@@ -40,16 +43,15 @@ External Requirements:
### Install Kickstart
-> [!NOTE]
-> [Backup](#FAQ) your previous configuration (if any exists)
+> [!NOTE] > [Backup](#FAQ) your previous configuration (if any exists)
Neovim's configurations are located under the following paths, depending on your OS:
-| OS | PATH |
-| :- | :--- |
-| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
-| Windows (cmd)| `%localappdata%\nvim\` |
-| Windows (powershell)| `$env:LOCALAPPDATA\nvim\` |
+| OS | PATH |
+| :------------------- | :---------------------------------------- |
+| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
+| Windows (cmd) | `%localappdata%\nvim\` |
+| Windows (powershell) | `$env:LOCALAPPDATA\nvim\` |
#### Recommended Step
@@ -115,19 +117,18 @@ examples of adding popularly requested plugins.
> [!NOTE]
> For more information about a particular plugin check its repository's documentation.
-
### Getting Started
[The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o)
### FAQ
-* What should I do if I already have a pre-existing Neovim configuration?
- * You should back it up and then delete all associated files.
- * This includes your existing init.lua and the Neovim files in `~/.local`
+- What should I do if I already have a pre-existing Neovim configuration?
+ - You should back it up and then delete all associated files.
+ - This includes your existing init.lua and the Neovim files in `~/.local`
which can be deleted with `rm -rf ~/.local/share/nvim/`
-* Can I keep my existing configuration in parallel to kickstart?
- * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
+- Can I keep my existing configuration in parallel to kickstart?
+ - Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
to maintain multiple configurations. For example, you can install the kickstart
configuration in `~/.config/nvim-kickstart` and create an alias:
```
@@ -137,18 +138,18 @@ examples of adding popularly requested plugins.
config directory and the matching local directory
`~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim
distribution that you would like to try out.
-* What if I want to "uninstall" this configuration:
- * See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information
-* Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
- * The main purpose of kickstart is to serve as a teaching tool and a reference
+- What if I want to "uninstall" this configuration:
+ - See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information
+- Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
+ - The main purpose of kickstart is to serve as a teaching tool and a reference
configuration that someone can easily use to `git clone` as a basis for their own.
As you progress in learning Neovim and Lua, you might consider splitting `init.lua`
into smaller parts. A fork of kickstart that does this while maintaining the
same functionality is available here:
- * [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
- * Discussions on this topic can be found here:
- * [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
- * [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
+ - [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
+ - Discussions on this topic can be found here:
+ - [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
+ - [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
### Install Recipes
@@ -170,23 +171,27 @@ This requires:
```lua
{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
```
+
Windows with gcc/make using chocolatey
Alternatively, one can install gcc and make which don't require changing the config,
the easiest way is to use choco:
1. install [chocolatey](https://chocolatey.org/install)
-either follow the instructions on the page or use winget,
-run in cmd as **admin**:
+ either follow the instructions on the page or use winget,
+ run in cmd as **admin**:
+
```
winget install --accept-source-agreements chocolatey.chocolatey
```
2. install all requirements using choco, exit the previous cmd and
-open a new one so that choco path is set, and run in cmd as **admin**:
+ open a new one so that choco path is set, and run in cmd as **admin**:
+
```
choco install -y neovim git ripgrep wget fd unzip gzip mingw make
```
+
WSL (Windows Subsystem for Linux)
@@ -197,9 +202,20 @@ sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
```
+
#### Linux Install
+
+Arch Linux Install Steps
+
+```
+sudo pacman -S neovim make gcc ripgrep unzip git xclip
+# If you need additional packages from AUR, use yay:
+# yay -S neovim-git # For the git version of neovim
+```
+
+
Ubuntu Install Steps
```
@@ -207,6 +223,7 @@ sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
```
+
Debian Install Steps
@@ -224,12 +241,14 @@ sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
# make it available in /usr/local/bin, distro installs to /usr/bin
sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/
```
+
Fedora Install Steps
```
sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
```
+
Arch Install Steps
@@ -237,5 +256,5 @@ sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
```
sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
```
-
+
diff --git a/debug.lua.bak b/debug.lua.bak
deleted file mode 100644
index 1bc7501c..00000000
--- a/debug.lua.bak
+++ /dev/null
@@ -1,179 +0,0 @@
--- debug.lua
---
--- Shows how to use the DAP plugin to debug your code.
---
--- Primarily focused on configuring the debugger for Go, but can
--- be extended to other languages as well. That's why it's called
--- kickstart.nvim and not kitchen-sink.nvim ;)
-
-return {
- -- NOTE: Yes, you can install new plugins here!
- 'mfussenegger/nvim-dap',
- -- NOTE: And you can specify dependencies as well
- dependencies = {
- -- Creates a beautiful debugger UI
- 'rcarriga/nvim-dap-ui',
-
- -- Required dependency for nvim-dap-ui
- 'nvim-neotest/nvim-nio',
-
- -- Installs the debug adapters for you
- 'williamboman/mason.nvim',
- 'jay-babu/mason-nvim-dap.nvim',
-
- -- Add your own debuggers here
- 'leoluz/nvim-dap-go',
- 'mfussenegger/nvim-dap-python', -- Uncomment to add Python support
- 'theHamsta/nvim-dap-virtual-text', -- Uncomment to add virtual text support
- },
- keys = {
- -- Basic debugging keymaps, feel free to change to your liking!
- {
- 'g@',
- function()
- require('dap').continue()
- end,
- desc = 'Debug: Start/Continue',
- },
- {
- '',
- function()
- require('dap').step_into()
- end,
- desc = 'Debug: Step Into',
- },
- {Read debug.lua, lines 1 to 153
-
-
- '',
- function()
- require('dap').step_over()
- end,
- desc = 'Debug: Step Over',
- },
- {
- '',
- function()
- require('dap').step_out()
- end,
- desc = 'Debug: Step Out',
- },
- {
- '.',
- function()
- require('dap').toggle_breakpoint()
- end,
- desc = 'Debug: Toggle Breakpoint',
- },
- {
- 'B',
- function()
- require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ')
- end,
- desc = 'Debug: Set Breakpoint',
- },
- -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
- {
- '',
- function()
- require('dapui').toggle()
- end,
- desc = 'Debug: See last session result.',
- },
- },
- config = function()
- local dap = require 'dap'
- local dapui = require 'dapui'
-
- require('mason-nvim-dap').setup {
- -- Makes a best effort to setup the various debuggers with
- -- reasonable debug configurations
- automatic_installation = true,
-
- -- You can provide additional configuration to the handlers,
- -- see mason-nvim-dap README for more information
- handlers = {},
-
- -- You'll need to check that you have the required things installed
- -- online, please don't ask me how to install them :)
- ensure_installed = {
- -- Update this to ensure that you have the debuggers for the langs you want
- 'delve',
- 'debugpy', -- Python debugger
- },
- }
-
- -- Dap UI setup
- -- For more information, see |:help nvim-dap-ui|
- dapui.setup {
- -- Set icons to characters that are more likely to work in every terminal.
- -- Feel free to remove or use ones that you like more! :)
- -- Don't feel like these are good choices.
- icons = { expanded = '▾', collapsed = '▸', current_frame = '*' },
- controls = {
- icons = {
- pause = '⏸',
- play = '▶',
- step_into = '⏎',
- step_over = '⏭',
- step_out = '⏮',
- step_back = 'b',
- run_last = '▶▶',
- terminate = '⏹',
- disconnect = '⏏',
- },
- },
- }
-
- -- Change breakpoint icons
- -- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' })
- -- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' })
- -- local breakpoint_icons = vim.g.have_nerd_font
- -- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' }
- -- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' }
- -- for type, icon in pairs(breakpoint_icons) do
- -- local tp = 'Dap' .. type
- -- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak'
- -- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl })
- -- end
-
- dap.listeners.after.event_initialized['dapui_config'] = dapui.open
- dap.listeners.before.event_terminated['dapui_config'] = dapui.close
- dap.listeners.before.event_exited['dapui_config'] = dapui.close
-
- -- Install golang specific config
- require('dap-go').setup {
- delve = {
- -- On Windows delve must be run attached or it crashes.
- -- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
- detached = vim.fn.has 'win32' == 0,
- },
- }
-
- -- Python configuration
- require('dap-python').setup('python') -- Uses the Python in your PATH
- require('dap-python').test_runner = 'pytest'
-
- -- Make sure the configurations table exists
- dap.configurations.python = dap.configurations.python or {}
-
- -- Add some common Python debug configurations
- table.insert(dap.configurations.python, {
- type = 'python',
- request = 'launch',
- name = 'Launch file',
- program = '${file}',
- pythonPath = function()
- -- Try to detect python path from virtual environment
- local cwd = vim.fn.getcwd()
- if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then
- return cwd .. '/venv/bin/python'
- elseif vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then
- return cwd .. '/.venv/bin/python'
- else
- return 'python'
- end
- end,
- })
- end,
-}
diff --git a/disable_flow_control.sh b/disable_flow_control.sh
deleted file mode 100644
index e4ec8eab..00000000
--- a/disable_flow_control.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-# Disable flow control (Ctrl+S, Ctrl+Q) in the terminal
-# This allows Ctrl+S to be used for saving in Neovim
-stty -ixon
-
-# Optional: You can also add this line to make Ctrl+S work in programs that use readline
-# (like the bash/zsh command line itself)
-if [ -t 0 ]; then
- bind -r '\C-s' 2>/dev/null || true
-fi
diff --git a/init.lua b/init.lua
index de1cc296..14cfa8b1 100644
--- a/init.lua
+++ b/init.lua
@@ -91,6 +91,9 @@ local vim = vim
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
+-- Test leader key mapping
+vim.keymap.set('n', 'zz', function() print("Leader key is working!") end, { desc = "Test leader key" })
+
-- Set to true if you have a Nerd Font installed and selected in the terminal
vim.g.have_nerd_font = true
@@ -320,59 +323,112 @@ require('lazy').setup({
-- Then, because we use the `opts` key (recommended), the configuration runs
-- after the plugin has been loaded as `require(MODULE).setup(opts)`.
- { -- Useful plugin to show you pending keybinds.
- 'folke/which-key.nvim',
- event = 'VimEnter', -- Sets the loading event to 'VimEnter'
- opts = {
- -- delay between pressing a key and opening which-key (milliseconds)
- -- this setting is independent of vim.o.timeoutlen
- delay = 0,
- icons = {
- -- set icon mappings to true if you have a Nerd Font
- mappings = vim.g.have_nerd_font,
- -- If you are using a Nerd Font: set icons.keys to an empty table which will use the
- -- default which-key.nvim defined Nerd Font icons, otherwise define a string table
- keys = vim.g.have_nerd_font and {} or {
- Up = ' ',
- Down = ' ',
- Left = ' ',
- Right = ' ',
- C = ' ',
- M = ' ',
- D = ' ',
- S = ' ',
- CR = ' ',
- Esc = ' ',
- ScrollWheelDown = ' ',
- ScrollWheelUp = ' ',
- NL = ' ',
- BS = ' ',
- Space = ' ',
- Tab = ' ',
- F1 = '',
- F2 = '',
- F3 = '',
- F4 = '',
- F5 = '',
- F6 = '',
- F7 = '',
- F8 = '',
- F9 = '',
- F10 = '',
- F11 = '',
- F12 = '',
- },
- },
+ -- NOTE: which-key is now configured in custom/plugins/which_key_integration.lua
+ -- { -- Useful plugin to show you pending keybinds.
+ -- 'folke/which-key.nvim',
+ -- event = 'VimEnter', -- Sets the loading event to 'VimEnter'
+ -- opts = {
+ -- -- delay between pressing a key and opening which-key (milliseconds)
+ -- -- this setting is independent of vim.o.timeoutlen
+ -- delay = 0,
+ -- icons = {
+ -- -- set icon mappings to true if you have a Nerd Font
+ -- mappings = vim.g.have_nerd_font,
+ -- -- If you are using a Nerd Font: set icons.keys to an empty table which will use the
+ -- -- default which-key.nvim defined Nerd Font icons, otherwise define a string table
+ -- keys = vim.g.have_nerd_font and {} or {
+ -- Up = ' ',
+ -- Down = ' ', -- { -- Useful plugin to show you pending keybinds.
+ -- 'folke/which-key.nvim',
+ -- event = 'VimEnter', -- Sets the loading event to 'VimEnter'
+ -- opts = {
+ -- -- delay between pressing a key and opening which-key (milliseconds)
+ -- -- this setting is independent of vim.o.timeoutlen
+ -- delay = 0,
+ -- icons = {
+ -- -- set icon mappings to true if you have a Nerd Font
+ -- mappings = vim.g.have_nerd_font,
+ -- -- If you are using a Nerd Font: set icons.keys to an empty table which will use the
+ -- -- default which-key.nvim defined Nerd Font icons, otherwise define a string table
+ -- keys = vim.g.have_nerd_font and {} or {
+ -- Up = ' ',
+ -- Down = ' ',
+ -- Left = ' ',
+ -- Right = ' ',
+ -- C = ' ',
+ -- M = ' ',
+ -- D = ' ',
+ -- S = ' ',
+ -- CR = ' ',
+ -- Esc = ' ',
+ -- ScrollWheelDown = ' ',
+ -- ScrollWheelUp = ' ',
+ -- NL = ' ',
+ -- BS = ' ',
+ -- Space = ' ',
+ -- Tab = ' ',
+ -- F1 = '',
+ -- F2 = '',
+ -- F3 = '',
+ -- F4 = '',
+ -- F5 = '',
+ -- F6 = '',
+ -- F7 = '',
+ -- F8 = '',
+ -- F9 = '',
+ -- F10 = '',
+ -- F11 = '',
+ -- F12 = '',
+ -- },
+ -- },
- -- Document existing key chains
- spec = {
- { 's', group = '[S]earch' },
- { 't', group = '[T]oggle' },
- { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } },
- { 'b', group = '[B]uffer' },
- },
- },
- },
+ -- -- Document existing key chains
+ -- spec = {
+ -- { 's', group = '[S]earch' },
+ -- { 't', group = '[T]oggle' },
+ -- { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } },
+ -- { 'b', group = '[B]uffer' },
+ -- },
+ -- },
+ -- },
+ -- Left = ' ',
+ -- Right = ' ',
+ -- C = ' ',
+ -- M = ' ',
+ -- D = ' ',
+ -- S = ' ',
+ -- CR = ' ',
+ -- Esc = ' ',
+ -- ScrollWheelDown = ' ',
+ -- ScrollWheelUp = ' ',
+ -- NL = ' ',
+ -- BS = ' ',
+ -- Space = ' ',
+ -- Tab = ' ',
+ -- F1 = '',
+ -- F2 = '',
+ -- F3 = '',
+ -- F4 = '',
+ -- F5 = '',
+ -- F6 = '',
+ -- F7 = '',
+ -- F8 = '',
+ -- F9 = '',
+ -- F10 = '',
+ -- F11 = '',
+ -- F12 = '',
+ -- },
+ -- },
+
+ -- -- Document existing key chains
+ -- spec = {
+ -- { 's', group = '[S]earch' },
+ -- { 't', group = '[T]oggle' },
+ -- { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } },
+ -- { 'b', group = '[B]uffer' },
+ -- },
+ -- },
+ -- },
-- NOTE: Plugins can specify dependencies.
--
@@ -458,7 +514,7 @@ require('lazy').setup({
vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' })
vim.keymap.set('n', 's.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
- vim.keymap.set('n', '', function() builtin.buffers() end, { desc = '[ ] Find existing buffers' })
+ vim.keymap.set('n', 'bb', function() builtin.buffers() end, { desc = '[B]uffers [B]rowse' })
-- Slightly advanced example of overriding default behavior and theme
vim.keymap.set('n', '/', function()
diff --git a/lua/custom/keybinding_cheatsheet.md b/lua/custom/keybinding_cheatsheet.md
new file mode 100644
index 00000000..c2dfa653
--- /dev/null
+++ b/lua/custom/keybinding_cheatsheet.md
@@ -0,0 +1,50 @@
+# Neovim Keybinding Cheatsheet
+
+## General
+
+| Key | Mode | Description |
+| ----------- | ---- | ----------------------- |
+| `w` | n | Save file |
+| `q` | n | Quit |
+| `Q` | n | Force quit all |
+| `W` | n | Save and quit |
+| `/` | n | Clear search highlights |
+| `` | n | Clear highlights |
+
+## Navigation
+
+### Window Navigation
+
+| Key | Mode | Description |
+| ------- | ---- | -------------------- |
+| `` | n | Move to left window |
+| `` | n | Move to lower window |
+| `` | n | Move to upper window |
+| `` | n | Move to right window |
+
+### Window Management (`w`)
+
+| Key | Mode | Description |
+| ------------ | ---- | ------------------------- |
+| `wv` | n | Split window vertically |
+| `ws` | n | Split window horizontally |
+| `wq` | n | Close current window |
+| `wo` | n | Close other windows |
+| `wh` | n | Go to left window |
+| `wj` | n | Go to lower window |
+| `wk` | n | Go to upper window |
+| `wl` | n | Go to right window |
+
+### Window Resizing
+
+| Key | Mode | Description |
+| ----------- | ---- | ---------------------- |
+| `` | n | Increase window height |
+| `` | n | Decrease window height |
+| `` | n | Decrease window width |
+| `` | n | Increase window width |
+
+### Tab Management (`t`)
+
+| Key | Mode | Description |
+| --- | ---- | ----------- |
diff --git a/lua/custom/keybindings_ref.md b/lua/custom/keybindings_ref.md
new file mode 100644
index 00000000..a7354e24
--- /dev/null
+++ b/lua/custom/keybindings_ref.md
@@ -0,0 +1,182 @@
+# Neovim Keybindings Reference
+
+A comprehensive reference for all keybindings in this Neovim configuration, organized by prefix and functionality.
+
+## General Operations
+
+- `w` - Save file
+- `q` - Quit
+- `Q` - Force quit all
+- `W` - Save and quit
+- `/` - Clear search highlights
+- `` - Clear highlights
+
+## Navigation
+
+### Window Navigation
+
+- `` - Move focus to the left window
+- `` - Move focus to the down window
+- `` - Move focus to the up window
+- `` - Move focus to the right window
+
+### Window Management (`w`)
+
+- `wv` - Split window vertically
+- `ws` - Split window horizontally
+- `wq` - Close current window
+- `wo` - Close other windows
+
+### Window Resizing
+
+- `` - Increase window height
+- `` - Decrease window height
+- `` - Decrease window width
+- `` - Increase window width
+
+### Tab Management (`t`)
+
+- `tn` - New tab
+- `to` - New tab with file
+- `tc` - Close tab
+- `` - Next tab
+- `` - Previous tab
+
+### Buffer Navigation (`b`)
+
+- `` - Find buffers
+- `bd` - Delete buffer
+- `bn` - Next buffer
+- `bp` - Previous buffer
+- `bp` - Pick buffer
+- `bc` - Pick buffer to close
+- `bh` - Previous buffer
+- `bl` - Next buffer
+- `bH` - Move buffer left
+- `bL` - Move buffer right
+- `b1-9` - Go to buffer 1-9
+- `` - Go to buffer 1-9
+
+## File Operations (`f`)
+
+### File Search (Telescope)
+
+- `ff` - Find files
+- `fg` - Live grep
+- `fb` - Find buffers
+- `fh` - Help tags
+- `fr` - Recent files
+- `fc` - Grep current string
+- `fk` - Find keymaps
+- `fd` - Search diagnostics
+- `fw` - Search current buffer
+
+### Git Search (`fg`)
+
+- `fgc` - Git commits
+- `fgb` - Git branches
+- `fgs` - Git status
+- `fgt` - Git stash
+
+### File Explorer
+
+- `e` - Open file explorer
+
+## Editing
+
+### Line Movement
+
+- `` - Move line down
+- `` - Move line up
+- `` (visual) - Move selection down
+- `` (visual) - Move selection up
+
+### Indentation
+
+- `<` (visual) - Decrease indent
+- `>` (visual) - Increase indent
+
+## Terminal (`tt`)
+
+- `tt` - Toggle terminal
+- `tf` - Toggle floating terminal
+- `th` - Toggle horizontal terminal
+- `tv` - Toggle vertical terminal
+- `` (terminal) - Exit terminal mode
+
+## Diagnostics (`x`)
+
+- `xx` - Toggle trouble
+- `xw` - Toggle workspace diagnostics
+- `xd` - Toggle document diagnostics / Open diagnostic float
+- `xq` - Toggle quickfix
+- `xl` - Toggle location list / Open diagnostic list
+- `[d` - Previous diagnostic
+- `]d` - Next diagnostic
+
+## Plugin-specific Keybindings
+
+### Harpoon (`h`)
+
+- `ha` - Add file to harpoon
+- `hh` - Toggle quick menu
+- `h1-9` - Jump to file 1-9
+
+### LeetCode (`l`)
+
+- `ll` - Open LeetCode
+- `ld` - Daily Challenge
+- `lr` - Random Problem
+- `ls` - Submit Solution
+- `lt` - Test Solution
+- `lm` - LeetCode Menu
+- `li` - Problem Info
+- `lc` - Toggle Console
+- `la` - Switch Tab
+
+### Neorg (`n`)
+
+- `ni` - Neorg index
+- `nr` - Return from workspace
+- `nt` - Toggle concealer
+- `nm` - Inject metadata
+
+#### Neorg Journal (`nj`)
+
+- `njj` - Today's journal entry
+- `njt` - Tomorrow's journal entry
+- `njy` - Yesterday's journal entry
+
+#### Neorg Workspace (`nw`)
+
+- `nwn` - Switch to notes workspace
+- `nww` - Switch to work workspace
+- `nwp` - Switch to personal workspace
+
+#### Neorg Export (`ne`)
+
+- `neh` - Export to HTML
+- `nem` - Export to Markdown
+- `nep` - Export to PDF
+
+### LSP (`ls`)
+
+- `lsr` - Rename symbol
+- `lsa` - Code actions
+- `lsf` - Format document
+- `lsd` - Go to definition
+- `lst` - Go to type definition
+- `lsD` - Go to declaration
+- `lsi` - Go to implementation
+- `lsr` - Go to references
+
+### Test (`te`)
+
+- `ter` - Run test
+- `tes` - Run test suite
+- `tef` - Run test file
+- `tel` - Run last test
+
+### Code/Copilot (`c`)
+
+- Various code and Copilot-related commands
diff --git a/lua/custom/keybindings_reference.md b/lua/custom/keybindings_reference.md
new file mode 100644
index 00000000..be820fc3
--- /dev/null
+++ b/lua/custom/keybindings_reference.md
@@ -0,0 +1,187 @@
+# Neovim Keybindings Reference
+
+This document provides a comprehensive reference for all keybindings in this Neovim configuration, organized by category.
+
+## Navigation
+
+### Window Navigation
+
+- `` - Move focus to the left window
+- `` - Move focus to the down window
+- `` - Move focus to the up window
+- `