An open API service indexing awesome lists of open source software.

https://github.com/thomashighbaugh/nvim-forge

My Personal Development Environment
https://github.com/thomashighbaugh/nvim-forge

lazy-nvim lua neovim neovim-conf neovim-config neovim-dotfiles neovim-lua nvim nvim-configs nvim-configuration nvim-lua nvim-settings nvimrc personal-development-enviroment

Last synced: 4 months ago
JSON representation

My Personal Development Environment

Awesome Lists containing this project

README

        

# Neovim Forge

My [Winchester Mystery](https://en.wikipedia.org/wiki/Winchester_Mystery_House)
Neovim Configuration, using `lazy.nvim` for plugin management and Lua as its
configuration language. My _Personal Development Environment_ (PDE) and the core tool used in cultivating my Personal Knowledge Base (PKB).

> **Warning**
> This is my personal configuration, subject to experimentation
> and radical rewrites periodically, rebases or substantially modifications
> without prior warning and other things that may make this unstable for you
> to use as it is presented.

With this in mind, **feel free to take from it as you please**, use pieces of
it or the whole thing as a basis for your own, and you are more than welcome
to **submit pull requests** if it so pleases you, that's why its on
GitHub |wink|

## Installation

To use this configuration, clone or copy it directly into your `~/.config/nvim` directory.

```sh

# Back up your old configuration if present
mv ~/.config/nim ~/.config/nvim.bak

# Now clone this one
git clone https://github.com/Thomashighbaugh/nvim-forge ~/.config/nvim

```

And that _should_ be it, if you have the prerequisites installed it should run through the lazy.nvim installation process and handle setting up everything in the process from Treesitter grammars to Mason dependencies, it might just take a few minutes so be patient.

## Configuration Structure

This configuration roughly follows that of LazyVim, with some minor changes that are mostly due to personal taste, which while arbitrary is much easier to quickly locate various things when they are arranged in the way one prefers and not an artificially imposed standard. The lion's share of the configuration exists within the `lua/` subdirectory as is the convention of Lua-based NeoVim configurations.

Unlike many other highly customized NeoVim configurations, as well as most major configuration frameworks, the configuration is not nested within a subdirectory of the Lua subdirectory named after the author, plugin or configuration, I find no need to brand this configuration in a way that makes using its parts elsewhere highly onerous and introduces a needless source of potential errors for me to deal with instead of working on code like I intend to be.

Below is a representation of the structure of the configuration in tree format

 .
├──  Dockerfile
├──  ftplugin
│ └──  java.lua
├──  init.lua
├──  lazy-lock.json
├──  lua
│ ├──  code_action_utils.lua
│ ├──  core
│ │ ├──  autocommands.lua
│ │ ├──  keymaps.lua
│ │ ├──  options.lua
│ │ ├──  usercommands.lua
│ │ └──  utils.lua
│ └──  plugins
│ ├──  aisync.lua
│ ├──  bufferline.lua
│ ├──  cmp.lua
│ ├──  codesnap.lua
│ ├──  comments.lua
│ ├──  conform.lua
│ ├──  dap
│ │ └──  debug_adapter.lua
│ ├──  dashboard.lua
│ ├──  devdocs.lua
│ ├──  dressing.lua
│ ├──  flash.lua
│ ├──  focus.lua
│ ├──  git.lua
│ ├──  image_preview.lua
│ ├──  inc_rename.lua
│ ├──  indent-blankline.lua
│ ├──  init.lua
│ ├──  lsp
│ │ ├──  aerial.lua
│ │ ├──  glance.lua
│ │ ├──  lazydev.lua
│ │ ├──  lsp-config.lua
│ │ ├──  mason.lua
│ │ ├──  nvim-navic.lua
│ │ ├──  outline.lua
│ │ └──  trouble.lua
│ ├──  lualine.lua
│ ├──  luasnip.lua
│ ├──  mini-align.lua
│ ├──  mini-indentscope.lua
│ ├──  neo-tree.lua
│ ├──  noice.lua
│ ├──  nvim-autopairs.lua
│ ├──  nvim-lint.lua
│ ├──  nvim-notify.lua
│ ├──  nvim-surround.lua
│ ├──  nvim-tree.lua
│ ├──  oil.lua
│ ├──  ollama.lua
│ ├──  rainbow-delimiters.lua
│ ├──  rest.lua
│ ├──  snipe.lua
│ ├──  ssr.lua
│ ├──  statuscol.lua
│ ├──  symbols.lua
│ ├──  telescope.lua
│ ├──  toggleterm.lua
│ ├──  treesitter.lua
│ ├──  web_devicons.lua
│ ├──  which-key.lua
│ └──  yanky.lua
├── 󰂺 README.md → .github/README.md
├──  snippets
│ ├──  all.lua
│ ├──  java.snippets
│ ├──  javascript.lua
│ ├──  lua.lua
│ ├──  markdown.lua
│ ├──  package.json
│ ├──  vscode
│ │ ├──  c.json
│ │ ├──  cpp.json
│ │ ├──  css.json
│ │ ├──  frameworks
│ │ │ ├──  ejs.json
│ │ │ ├──  flutter.json
│ │ │ ├──  jekyll.json
│ │ │ └──  vue
│ │ │ ├──  html.json
│ │ │ ├──  javascript.json
│ │ │ ├──  pug.json
│ │ │ └──  vue.json
│ │ ├──  gdscript.json
│ │ ├──  gitcommit.json
│ │ ├──  global.json
│ │ ├──  glsl.json
│ │ ├──  go.json
│ │ ├──  haskell.json
│ │ ├──  html.json
│ │ ├──  java.json
│ │ ├──  javascript
│ │ │ ├──  javascript.json
│ │ │ ├──  react-native-ts.json
│ │ │ ├──  react-native.json
│ │ │ ├──  react-ts.json
│ │ │ ├──  react.json
│ │ │ └──  typescript.json
│ │ ├──  kotlin.json
│ │ ├──  kubernetes.json
│ │ ├──  latex
│ │ │ ├──  latex-snippets.json
│ │ │ └──  vscode-latex-snippets.json
│ │ ├──  latex.json
│ │ ├──  lua.json
│ │ ├──  markdown.json
│ │ ├──  meson.json
│ │ ├──  norg.json
│ │ ├──  org.json
│ │ ├──  package-lock.json
│ │ ├──  package.json
│ │ ├──  python
│ │ │ ├──  base.json
│ │ │ ├──  comprehension.json
│ │ │ ├──  debug.json
│ │ │ ├──  python.json
│ │ │ └──  unittest.json
│ │ ├──  rust.json
│ │ ├──  scala.json
│ │ ├──  shell.json
│ │ └──  sql.json
│ └──  yaml.lua
└──  spell
├──  en.dict
├──  en.utf-8.add
└──  en.utf-8.add.spl

## Keybindings

Below are the keybind mappings used in this configuration, they are subject to change and are not exhaustive, but they should give you a good idea of how the configuration is set up and how to use it.

### General Keybindings

> [!] Note:
>
> - means press both keys at the same time
> → means first the key on the left then the key on the right

### Basic Navigation and Editing

| Keys | Mode | Description |
| --------------------------------- | ------------- | --------------------------- |
| j/k | Normal/Visual | _Better_ Up/Down |
| / | Normal | Search |
| g, | Normal | Go to the newest change |
| g; | Normal | Go to last change |
| i | Normal | _Better_ Insert |
| ,w | Normal | Save |
| Alt + Enter | Normal | List suggested code actions |

### Text Manipulation

| Keys | Mode | Description |
| ---------------------------------- | --------------- | ---------------------------------- |
| Ctrl + k | Normal | Move line up |
| Ctrl + j | Normal | Move line down |
| Ctrl + k | Visual | Move line up visual |
| Ctrl + j | Visual | Move line down visual |
| < | Visual | Unindent lines in visual selection |
| > | Visual | Indent lines in visual selection |
| p | Visual | Paste without yanking |
| p | Select(x) | Paste without yanking |
| c | Normal/Visual | Change without yanking |
| C | Normal | Change line without yanking |
| Space + Up | Normal | Add blank line below |
| Space + Down | Normal | Add blank line below |
| Ctrl + , | Insert | Add comma after character |
| Ctrl + b | Insert | Add curly with comma {}, |
| i + q | Operator/Visual | Inner Single Quotes |
| i + Q | Operator/Visual | Inner Double Quotes |
| a + q | Operator/Visual | Around Single Quotes |
| a + Q | Operator/Visual | Around Double Quotes |
| a + ' | Operator/Visual | Around Single Quotes |
| a + " | Operator/Visual | Around Double Quotes |
| i + r | Operator/Visual | Inner Brackets |
| a + r | Operator/Visual | Inner Brackets |

### Buffer Management

| Keys | Mode | Description |
| -------------------------------------------------- | ------ | -------------------- |
| ,bd | Normal | Delete Buffer |
| Leaderfn | Normal | New File |
| Shift + Left | Normal | Buffer Previous |
| Shift + Right | Normal | Buffer Next |
| Spacebp | Normal | Pin Buffer |
| Spacebk | Normal | Pick Buffer |
| Spacebo | Normal | Close Other Buffers |
| SpacebLeft | Normal | Move Buffer to Left |
| SpacebRight | Normal | Move Buffer to Right |
| Spaceb1 | Normal | Go to Buffer 1 |
| Spaceb2 | Normal | Go to Buffer 2 |
| Spaceb3 | Normal | Go to Buffer 3 |
| Spaceb4 | Normal | Go to Buffer 4 |
| Spaceb5 | Normal | Go to Buffer 5 |
| Spaceb6 | Normal | Go to Buffer 6 |
| Spaceb7 | Normal | Go to Buffer 7 |
| Spaceb8 | Normal | Go to Buffer 8 |
| Spaceb9 | Normal | Go to Buffer 9 |

### Window Management

| Keys | Mode | Description |
| ------------------------------------- | ------ | ----------------------------------- |
| Space\\ | Normal | Split Window Vertically |
| Space/ | Normal | Split Window Vertically |
| Spaceh/l/k/j | Normal | Move split panes Left/Right/Up/Down |
| Spacem | Normal | Equalize split panes |
| Alt + Up | Normal | Resize pane up |
| Alt + Down | Normal | Resize pane down |
| Alt + Left | Normal | Resize pane left |
| Alt + Right | Normal | Resize pane right |

### Search and Replace

| Keys | Mode | Description |
| --------------------------- | ------ | ---------------------------------------- |
| ,R | Normal | Search and Replace the word under cursor |
| ,r | Normal | Search and replace in visual selection |

### Selection and Deletion

| Keys | Mode | Description |
| --------------------------------- | ------ | ----------------------------------- |
| Control + a | Normal | Select All |
| d + D | Normal | Delete current line without yanking |
| d + d | Normal | Yank non-empty lines |

### Insert Mode

| Keys | Mode | Description |
| --------------------------------- | ------ | ------------------------------------- |
| Escape | Insert | Exit Insert Mode |
| Control + l | Insert | Correct Word |
| Alt + i | Insert | Jump to Beginn of Line in insert mode |
| Alt + a | Insert | Jump to End of Line in insert mode |
| Ctrl + b | Insert | Add curly with comma {}, |

### Editor Functionality

| Keys | Mode | Description |
| ----------------------------------------------- | ------------- | ----------------------------------- |
| Escape | Insert/Normal | Escape and clear highlighted search |
| z. | Normal | 󰓆 Fix Spelling |
| z= | Normal | Spelling suggestions |
| Leadermm | Normal | File Changes (Messages) |
| Leaderct | Normal | Toggle TS Context |

### Plugin Management (Lazy)

| Keys | Mode | Description |
| ----------------------------------------------- | ------ | ------------------ |
| Leaderla | Normal | Open Lazy |
| Leaderlc | Normal | Check Lazy Plugins |
| Leaderls | Normal | Sync Lazy Plugins |

### Debugging

| Keys | Mode | Description |
| -------------------------------------------------------------- | ------ | -------------------------- |
| LeaderdB | Normal | Add Conditional Breakpoint |
| Leaderdc | Normal | Dap Continue |
| Leaderdsi | Normal | Dap Step Into |
| Leaderdso | Normal | Dap Step Over |
| Leaderdst | Normal | Dap Step Out |
| Leaderdt | Normal | Dap Terminate |
| Leaderdl | Normal | Dap Show Log |
| Leaderdr | Normal | Dap Toggle Repl |

### Diff View

| Keys | Mode | Description |
| ----------------------------------------------- | ------ | --------------- |
| Leaderdv | Normal | Diffview Toggle |

### Noice

| Keys | Mode | Description |
| ---------------------------------------------- | ------ | ------------------- |
| Spacenn | Normal | Noice Messages |
| Spacena | Normal | Noice All Messages |
| Spacenl | Normal | Noice Last |
| Spacent | Normal | Noice Telescope |
| Spacene | Normal | Noice Errors |
| Spacens | Normal | Noice Notifications |

### Terminal Bindings

| Keys | Mode | Description |
| ------------------------------ | -------- | ------------------ |
| Escape | Terminal | Exit Terminal Mode |
| kj | Terminal | Exit Terminal Mode |
| Ctrl + h | Terminal | Window Left |
| Ctrl + j | Terminal | Window Down |
| Ctrl + k | Terminal | Window Up |
| Ctrl + l | Terminal | Window Right |
| Ctrl + w | Terminal | Window |

### Java Development Tools

| Keys | Mode | Description |
| ----------------------------------------------- | ------------- | ------------------- |
| Alt + o | Normal | Organize Imports |
| crv | Normal/Visual | Extract Variable |
| crc | Normal/Visual | Extract Constant |
| crm | Visual | Extract Method |
| Leaderdf | Normal | Test Class |
| Leaderdn | Normal | Test Nearest Method |

### LuaSnip

| Keys | Mode | Description |
| ------------------------------------------------- | ------------- | ----------- |
| Ctrl + i | Insert/Select | |
| Ctrl + l | Insert/Select | |
| Ctrl + h | Insert/Select | |
| Ctrl + Shift + o | Insert/Select | |
| Ctrl + Shift + a | Insert/Select | |

### Nvim-Toggler

| Keys | Mode | Description |
| -------------------------------- | ------------- | -------------- |
| Leaderw | Normal/Visual | Toggle a Value |

### Nvim-Tree

| Keys | Mode | Description |
| ------------------------------ | ------ | --------------------- |
| Ctrl + t | Normal | Up Change Directory |
| Ctrl + d | Normal | Change Root Directory |
| ? | Normal | Help |

### LSP (Language Server Protocol)

| Keys | Mode | Description |
| --------------------------------------------------------- | ------------- | ---------------------------- |
| Spaced | Normal | Open Diagnostic Window |
| SpaceLeft | Normal | |
| SpaceRight | Normal | |
| Spaceq | Normal | Send Diagnostic to Locallist |
| K | Normal | Hover |
| gra | Normal/Visual | LSP Code Action |
| Alt + Enter | Normal/Visual | LSP Code Action |
| grn | Normal | LSP Rename |
| grr | Normal | LSP References |
| grd | Normal | LSP Go to Definition |
| grD | Normal | LSP Go to Declaration |
| gri | Normal | LSP Go to Implementation |
| grf | Normal | |
| grk | Normal | LSP Signature Help |
| grs | Normal | LSP Document Symbols |
| grt | Normal | LSP Type Definition |
| grwa | Normal | LSP Add Workspace Folder |
| grwr | Normal | LSP Remove Workspace Folder |
| grwl | Normal | List Workplace Folder |
| Spaceih | Normal | Inlay Hints |

### Treesitter

| Keys | Mode | Description |
| ------------ | --------------- | ---------------- |
| m | Visual/Operator | Treesitter Nodes |

## Inspiration

The following projects were instrumental in the crafting of this environment

- [Allaman's nvim](https://github.com/Allaman/nvim)
- [Alexis12119's nvim-config](https://github.com/Alexis12119/nvim-config)
- [glepnir's nvim](https://github.com/glepnir/nvim)
- [ayamir's nvimdots](https://github.com/ayamir/nvimdots)
- [CharlesChiuGit's nvimdots](https://github.com/CharlesChiuGit/nvimdots.lua)
- [dragove's nvim](https://github.com/dragove/nvim)
- [Dharmx's Nvim](https://github.com/dharmx/nvim)
- [loctvl842's nvim'](https://github.com/loctvl842/nvim)
- **... and many, many more!**

```

```