Skip to content

stephansama/nvim

Screenshot

Article explaining neovim config

interactive bundle visualization

bundle visualization generated using bloat.nvim and Esbuild analyzer

⚙️ Installation

Install directly to neovim config with the following command

git clone https://github.com/stephansama/nvim ~/.config/nvim

or install to a specific folder and invoke the config with the following command

git clone https://github.com/stephansama/nvim ~/.config/stephansamanvim

# then launch neovim with the newly downloaded configuration
NVIM_APPNAME=stephansamanvim nvim

✨ Features

This Neovim configuration is built to be a highly customized and efficient development environment. Here are some of the key features:

  • 📦 Plugin Management: Uses lazy.nvim for declarative and optimized plugin management, ensuring fast startup times.
  • 📝 Schema-Driven Configuration: Leverages TypeScript and zod to create and enforce schemas for configuration files like key mappings and dashboard shortcuts. This provides strong typing and validation for what would otherwise be plain JSON or Lua tables.
  • Lua Type-Checking: Utilizes tstl to generate Lua from TypeScript, enabling robust type-checking and autocompletion for the Lua configuration within the editor.
  • 🧩 Modular Structure: The configuration is broken down into logical modules for plugins, LSP settings, key mappings, and utilities, making it easy to manage and extend.
  • 🚀 Built-in Tooling: Includes scripts for building schemas, syncing snippets, and other automation tasks, managed via pnpm and a Makefile.

📁 File structure

graph TD
    A["nvim/"] --> N[".husky/"];
    A --> O["ftplugin/"];
    A --> P["images/"];
    A --> Q["lsp/"];
    A --> R["lua/"];
    A --> T["snippets/"];

    subgraph lua
        R --> R1["config/"];
        R --> R2["icons/"];
        R --> R3["keys/"];
        R --> R4["plugins/"];
        R --> R5["schemas/"];
        R --> R6["utils/"];
    end

    subgraph plugins
        R4 --> R4_1["debug/"];
        R4 --> R4_2["editor/"];
        R4 --> R4_3["lang/"];
        R4 --> R4_4["test/"];
        R4 --> R4_5["ui/"];
    end
Loading

Copyright © 2023-present @stephansama