# Editors

Three editors are configured and deployed by the `shell` component: Neovim (primary), Micro (lightweight), and Yazi (terminal file manager).

---

## Neovim

Config lives in `nvim/`. Deployed to `~/.config/nvim/` during `shell` module install.

### Plugin Manager

[vim-plug](https://github.com/junegunn/vim-plug) is auto-installed on first launch. Run `:PlugInstall` after the first start to fetch all plugins.

### Plugins

#### Language & Completion

| Plugin | Purpose |
|--------|---------|
| `neoclide/coc.nvim` | LSP client, auto-completion, diagnostics |
| `rust-lang/rust.vim` | Rust filetype support |
| `nvim-telescope/telescope.nvim` | Fuzzy finder (files, grep, LSP symbols) |

#### UI

| Plugin | Purpose |
|--------|---------|
| `vim-airline/vim-airline` | Status bar |
| `vim-airline/vim-airline-themes` | Airline theme collection |
| `junegunn/goyo.vim` | Distraction-free writing mode |
| `voldikss/vim-floaterm` | Floating terminal windows |
| `norcalli/nvim-colorizer.lua` | Inline colour preview |

#### Navigation

| Plugin | Purpose |
|--------|---------|
| `preservim/nerdtree` | File tree sidebar |
| `junegunn/fzf` + `fzf.vim` | Fuzzy file/buffer search |
| `elihunter173/dirbuf.nvim` | Editable directory buffer |

#### Snippets

| Plugin | Purpose |
|--------|---------|
| `SirVer/ultisnips` | Snippet engine |
| `honza/vim-snippets` | Snippet collection |

#### Database

| Plugin | Purpose |
|--------|---------|
| `tpope/vim-dadbod` | Database query runner |
| `kristijanhusak/vim-dadbod-ui` | GUI for vim-dadbod |

#### Markdown

| Plugin | Purpose |
|--------|---------|
| `tadmccorkle/markdown.nvim` | Enhanced Markdown support |
| `ellisonleao/glow.nvim` | Markdown preview in terminal |

#### Theme

| Plugin | Purpose |
|--------|---------|
| `the_miro/cyberqueer.nvim` | CyberQueer colour scheme (local) |

### CoC LSP Settings

`nvim/coc-settings.json` configures language servers for:
- Python (pyright)
- Lua (lua-language-server)
- Rust (rust-analyzer via rust.vim)

### CyberQueer Airline Theme

`nvim/cyberqueer-airline.vim` — a custom vim-airline theme using the CyberQueer palette, providing hot-pink/violet segments in the status bar.

---

## Micro

A modern, keyboard-friendly terminal editor. Config in `micro/`. Deployed to `~/.config/micro/`.

### Settings (`settings.json`)

| Setting | Value | Effect |
|---------|-------|--------|
| `colorscheme` | `miro-darcula` | Custom dark colour scheme |
| Various | — | File-type-specific settings |

### Keybindings (`bindings.json`)

Custom keybindings extending Micro's defaults. See `micro/bindings.json` for the full list.

### Colour Schemes

`micro/colorschemes/` contains additional colour scheme definitions including the custom `miro-darcula` scheme.

### Plugins (`micro/plug/`)

| Plugin | Purpose |
|--------|---------|
| `filemanager` | Sidebar file browser |
| `mlsp` | Language Server Protocol integration |

---

## Yazi

A fast, feature-rich terminal file manager written in Rust.  
Config in `yazi/`. Deployed to `~/.config/yazi/`.

### Configuration Files

| File | Purpose |
|------|---------|
| `yazi.toml` | Core settings (openers, file rules, display) |
| `theme.toml` | CyberQueer colour palette |
| `keymap.toml` | Keybindings (17 KB, extensively customised) |

### Theme

`yazi/theme.toml` maps the CyberQueer colours to Yazi's theme variables. It is a colour-substitution target in `apply-theme.sh`, so it updates automatically when you change the palette.

### File Openers

| File type | Opens with |
|-----------|-----------|
| `*.svg` | Inkscape |
| Text files | Neovim |
| Everything else | `xdg-open` (system default) |

### Display Options

- Hidden files visible by default
- Symlinks shown and followed
- Three-pane layout (parent, current, preview)

---

## Launching Editors

From the Hyprland desktop:

| Shortcut | Action |
|----------|--------|
| `Super + M` | Open Micro in Kitty |
| `Super + E` | Open Yazi in Kitty |
| `Super + T` then `nvim` | Neovim in terminal |

From the shell:
```bash
nvim file.rs          # Neovim
micro config.yaml     # Micro
yazi                  # Yazi file manager
```
