Space Elevator gets you to orbit. What you do up there is your business.
Answer four questions, get a complete NixOS desktop with everything working — app store, updates, rollback. If that's all you ever want, you never touch a config file. But the thing you're running is plain NixOS: every feature is one line, all of nixpkgs is one search away, and your daily driver is your gateway to Nix space.
sh nix run github:jspadgett/space-elevator
New to NixOS? The complete beginner's guide takes you from blank USB stick to working desktop.
Like any good desktop distro, the baseline just works. Every generated config includes:
Hardware & drivers — GPU driver matched to your detected card (AMD / Intel / NVIDIA), firmware updates (fwupd), periodic SSD TRIM, TLP power management on laptops.
Desktop plumbing — PipeWire audio, Bluetooth, CUPS printing with network discovery, auto-mounting and MTP support (gvfs/udisks2), Nerd Fonts + Noto, everyday apps, Flatpak with Flathub pre-configured.
System sanity — NetworkManager, a drop-by-default firewall, zram swap, earlyoom, automatic Nix garbage collection, and quality-of-life Nix tooling (nh, nvd, nix-tree).
A GUI app store — Discover, GNOME Software, or COSMIC Store wired to Flathub, so installing apps never requires editing a config file. Plus a generated update.sh for one-command system updates, with NixOS generation rollback as the safety net.
- Hostname, username, and an optional login password (hashed into the config so first boot just works)
- Desktop environment — KDE Plasma, GNOME, COSMIC, or Hyprland
- Flavors — optional bundles: Gaming (Steam + gamemode), Development (Docker + libvirt), Catppuccin theming, KDE Connect
Everything else is detected from the machine and confirmed with a keypress: GPU vendor, laptop vs. desktop, timezone, locale, and keyboard layout. On NixOS it offers to capture your real hardware configuration; in the installer ISO it sets up for nixos-install directly.
Set SE_NONINTERACTIVE=1 plus any SE_* variables (see the header of scaffold.sh) to generate without prompts — useful for scripting and CI. The test suite in tests/run.sh uses this to generate and verify a config for every desktop environment, and CI evaluates each one against nixpkgs.
Defaults over decisions. Anything with an obviously correct answer for a desktop is baked in. You choose identity (hostname, user, DE, flavors); the tool handles plumbing.
Self-contained. Every module is vendored in this repository under modules/. Nothing is fetched at run time, so output is reproducible and auditable.
Import-is-enable. Modules contain no options plumbing. Importing a file turns the feature on; deleting the import line turns it off. The baseline is just imports too — nothing is locked in.
No framework dependency. The output is plain Nix. Once generated, the configuration is entirely yours.
| Category | Modules |
|---|---|
| Baseline (always) | base · base-locale · audio · bluetooth · printing · nerdfonts · desktop-packages · networkmanager · firewall · flatpak · nix-gc · nix-tools · zram · gvfs · earlyoom |
| Detected | amdgpu / intel-gpu / nvidia · tlp (laptops) |
| Desktop (pick one) | plasma · gnome · cosmic · hyprland (each with its app store) |
| Flavors (optional) | steam + gamemode · docker + virtualisation · theming (Catppuccin) · kdeconnect |
Adding a module takes two steps:
- Drop a
.nixfile into the appropriatemodules/category. - Add it to the baseline array or a flavor line in
scaffold.sh.
No schema, no manifest, no codegen. Modules that need the user's name can use the @USERNAME@ placeholder — it's substituted automatically.
- Nix with flakes enabled (
experimental-features = nix-command flakes)
Issues and pull requests are welcome. New modules should follow the import-is-enable convention: no options declarations, no cross-module dependencies, one feature per file.
MIT — use it, fork it, ship it. Generated configurations are yours to do with as you please.