This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a Neovim configuration written primarily in Fennel (a Lisp that compiles to Lua). The configuration is structured as follows:
init.lua- Entry point that bootstraps Lazy.nvim and Hotpot.nvim, then loads Fennel modulesfnl/- Main Fennel source directory containing all configuration modulesafter_opt/- Contains Lua configuration files loaded after plugin setuplua/- Direct Lua modules and utilities
- kaza - Custom utility framework providing macros and helper functions
- hotpot.nvim - Enables Fennel compilation and evaluation in Neovim
- lazy.nvim - Plugin manager with lazy loading configuration
- Fennel configuration modules:
fnl/core/- Core Neovim settings (options, mappings, autocommands, LSP)fnl/plugs.fnl- Plugin definitions and configurationsfnl/setup.fnl- Main setup orchestrationfnl/kaza/- Custom utility frameworkfnl/util/- Utility functions and macros
The configuration uses Lazy.nvim with extensive lazy loading. Plugins are defined in fnl/plugs.fnl with event-based loading patterns and custom configuration through lambda functions.
- Plugin installation and updates are handled automatically by Lazy.nvim
- Run
:Lazyto open the plugin manager interface - Run
:Lazy syncto update all plugins
- Hotpot.nvim compiles Fennel files automatically
- Use
:Fnlcommands for Fennel REPL and evaluation - Fennel files in
fnl/are automatically compiled tolua/when modified
- LSP configurations are in
after_opt/lsp_conf.lua - Formatting is handled by null-ls with stylua for Lua files
- Mason.nvim manages LSP server installations
- Source configuration changes with
:source %or restart Neovim - Use
:checkhealthto diagnose configuration issues - Monitor startup time with
nvim --startuptime startup.log
init.lua- Bootstrap and load Fennel compilerfnl/kaza/init.fnl- Initialize utility frameworkfnl/core/opt/init.fnl- Set Neovim optionsfnl/plugs.fnl- Load plugin specificationsfnl/setup.fnl- Final setup and customizations
UltiSnips/- Code snippets for various languagesafter/ftplugin/- Filetype-specific configurationsplug/- Legacy Vim scripts and utilitiesgallery/- Screenshots and documentation images
- Use kebab-case for function names in Fennel
- Macros are imported from
util.macrosandkaza.macros - Configuration uses functional programming patterns with immutable data structures
- Most plugins use lazy loading with
["User plug-lazy-load"]event - Configuration functions use lambda expressions
(λ [] ...) - Key mappings are organized with prefix-based systems through the kaza framework
req-fandref-fmacros for safe require callsnmapsfunction for creating nested key mappings- Custom command definitions through
cmdmacro