The Problem

Installing third‑party Linux software often requires adding repositories, importing GPG keys, and manually configuring package sources. On distributions such as Debian or Ubuntu, a simple apt install is not always sufficient, and many development toolchains (e.g., Rust via rustup) ship their own installers rather than rely on distribution packages. This fragmentation forces users to repeat the same steps on every new machine.

What This Does

Nixite automates the generation of a bash script that installs a user‑selected set of applications across Debian‑based, Fedora, and Arch systems. The core logic lives in src/scripts/index.ts, which reads TOML definitions from registry/ (95 files such as registry/apt-ghostty.toml, registry/arch-kicad.toml, etc.) and produces a single install script. Package metadata follows a TOML format; a typical entry contains installsystem for the system package manager and optional [ubuntu], [arch] sections for distro‑specific names. The UI is built with Astro: src/pages/index.astro renders the package list, while src/components/Category.astro, src/components/Pkg.astro, and related Astro components handle selection and rendering. Configuration files .prettierrc, tsconfig.json, and astro.config.mjs govern formatting, type checking, and the build pipeline. A Python helper, searchpkgs.py, can be used to discover package names before adding them to the registry.

How To Use It

Setup: Ensure Node.js (or Bun) is available; the repository uses package.json for dependencies and bun.lock for lock‑file management. Install dependencies with npm install or bun install. Configuration: Add new packages by creating a <name>.toml file inside registry/ (e.g., registry/spotify.toml). Include install_system for the default package manager and optional [ubuntu], [arch] tables for distro‑specific names. Run python registry.py to regenerate internal data, then prettier -uwu src/*.json to format JSON configs. Running it: Execute the generated script or invoke the CLI directly via npx tsx src/scripts/index.ts (the entry point defined in src/scripts/index.ts). The script will output a bash command that installs the selected software silently, suppressing confirmation prompts where possible.

Real‑World Use

A system administrator provisioning a fresh workstation can open the Nixite web UI, select “Development tools”, and click “Generate script”. The produced script installs Git, Neovim, Rust (via rustup), and selected IDE extensions without manual repository additions. The administrator then runs the script as root; all packages are installed using the distribution’s native package manager where available, falling back to the provided custom installers for proprietary tools.

Code Health & Issues

No test files – repository‑wide untested code paths; no automated unit or integration tests are present. No CI/CD pipeline – .github/ or any CI configuration is absent, so there is no automated build/test gate on every push. No LICENSE file – it is unclear what usage/redistribution rights apply to the project and its generated scripts. Dependencies declared without a lockfile – package.json lists dependencies but no lockfile is committed (the repo contains bun.lock only for Bun; a npm/yarn lockfile is missing), which can lead to non‑reproducible builds across environments.

The Bottom Line

Nixite provides a practical solution for unattended Linux software installation, abstracting away repository and key management through a simple TOML‑driven registry and an Astro‑based UI. The codebase is functional but lacks essential SDLC safeguards: no tests, no continuous integration, no license, and missing dependency lockfile. It is well‑suited for individual developers or small teams that need to spin up multiple machines quickly and are comfortable manually reviewing the generated install scripts. For organizations requiring strict reproducibility, automated testing, and clear licensing, additional tooling and governance would be required.