~/projects/lazychad

Dev Tooling — Maintained

LazyChad

An NvChad-based Neovim config that installs itself across Arch, Debian and Fedora — packaged for the AUR and as .deb/.rpm, with a bundled cross-distro installer for Neovim nightly.

Problem

A good editor setup is worth little if it only installs on one machine. Getting a recent-enough Neovim onto Arch, Debian/Kali and Fedora means fighting outdated distro packages and one-off PPAs or COPRs — and NvChad's newer features need Neovim 0.12+, which currently only exists on the nightly channel. I wanted a config that installs itself the same way on any of those systems.

Approach

  • Packaged LazyChad for real distribution — an AUR package plus .deb and .rpm artifacts, built and published by CI (a push syncs the AUR; a version tag builds the packages with nfpm).
  • Bundled lazychad-nvim, which installs Neovim nightly from the official GitHub release tarball into /usr/local, detects the CPU architecture, and verifies the result is actually 0.12+ before reporting success — falling back to the system package manager (chosen by which binary exists) when the download is unavailable.
  • Made lazychad-deps best-effort: it auto-detects the distro family (including derivatives like Mint and Rocky), installs each dependency with per-package retry so one renamed package can't abort the run, prints a summary of anything that still needs attention, and sets up the Node, Python and Rust providers so :checkhealth comes back green.
  • Kept the editor itself intelligent — a toolchain layer live-scans the Mason registry to recommend an LSP, formatter and linter per filetype instead of hardcoding long tool lists, with blacklisting so a failed install isn't retried forever.

Impact

  • One command takes a fresh Arch, Kali or Fedora box to an identical, working editor — no manual Neovim build, no PPA or COPR hunting.
  • Installs survive the messy reality of distro packaging — renamed or missing packages, and externally-managed Python (PEP 668) — instead of failing outright.
  • An install-method-aware uninstaller removes exactly what was installed, the way it was installed.

Result

A Neovim configuration that ships like a product: installable from the AUR or a .deb/.rpm, version-verified, and reproducible across the distros I actually use.

What I Learned

  • Distribution is a feature — the install experience matters as much as the config it delivers.
  • Resilient automation beats clever automation: surfacing what failed and continuing is more useful than aborting on the first error.
  • Pinning to a fast-moving target like Neovim nightly means verifying versions explicitly — never trusting that "installed" means "recent enough".

Next Steps

  • Add CI smoke tests that install the package inside clean distro containers.
  • Promote the fallback package managers (openSUSE, Alpine, Void) to first-class, tested install paths.
  • Surface the toolchain recommendations as a one-screen status report on first launch.
View code on GitHub ↗ ← All projects