Other Linux Distributions

This repo is a NixOS workstation, but many user-level choices translate to Fedora, Ubuntu, Debian, and other Linux distributions. Treat the Nix files as an inventory and policy reference, not as something another distro can apply directly.

Target Shape

AreaExpected result
DesktopGNOME or Hyprland on Wayland, PipeWire, NetworkManager, printing, SSH.
ShellZsh login shell with Starship and a small alias set.
EditorsNeovim and Zed with language servers available on PATH.
TerminalGhostty, usually launching Zsh and sometimes Zellij.
Dev servicesDocker, PostgreSQL, and Redis for local development.
CLI toolsripgrep, fd, jq/yq, fzf, bat, direnv, just, and common compilers.
FontsNerd fonts plus Inter, Open Sans, Noto, and other UI/code fonts.
SecretsSOPS-extracted SSH keys under a normal user-owned path.

Translation Map

NixOS sourcePortable equivalent
environment.systemPackagesDistro packages, language installers, or Nix profile packages.
home.packagesDistro packages or Home Manager outside NixOS.
programs.* Home Manager optionsDotfiles under ~/.config or app-native settings.
services.* NixOS optionsNative systemd units and distro service packages.
sops.secrets.*Decrypt with SOPS to files under ~/.local/share/sops.
conf/modules/*Copy selected app config directories into ~/.config.

What Copies Cleanly

ComponentPortable approach
ZellijCopy conf/modules/zellij to ~/.config/zellij.
NeovimClone github:desertthunder/nvim to ~/.config/nvim.
StarshipCopy conf/modules/starship.toml to ~/.config/starship.toml.
ZathuraCopy conf/modules/zathura/zathurarc.
FastfetchCopy conf/modules/fastfetch.
ripgrepRecreate the small config from the program page or source.
SSH keysUse conf/scripts/keys.sh after placing the age key.

What Needs Native Distro Setup

AreaNotes
Desktop sessionInstall GNOME, Hyprland, portals, and login-manager pieces natively.
System servicesEnable Docker, PostgreSQL, Redis, SSH, CUPS, and Tailscale with systemd.
FontsPrefer distro packages; use user font installs for missing Nerd Fonts.
Language toolsUse upstream installers where distro versions lag too far.
SecretsThere is no /run/secrets unless you recreate that pattern yourself.
NixOS aliasesDo not copy aliases that call nixos-rebuild.
  1. Start from the distro’s GNOME edition or another well-supported desktop.
  2. Install baseline CLI tools, editors, fonts, and development services.
  3. Enable Docker, PostgreSQL, Redis, SSH, printing, and Tailscale.
  4. Copy only app configs you actually use.
  5. Extract SSH keys with SOPS if this machine should use repo-managed keys.
  6. Add Nix or Home Manager later only if native packages become too divergent.

Package Strategy

Use native packages for the OS layer: desktop, printing, Bluetooth, networking, Docker, PostgreSQL, Redis, OpenSSH, and Tailscale.

Use language-native installers for fast-moving ecosystems when needed:

ToolchainTypical source
Rustrustup
Bunupstream installer
uvupstream installer
Node/TypeScriptdistro package, pnpm, or project-local tooling
Zedupstream package
Claude CodeNix, upstream package, or npm-style install depending on availability

Use Nix outside NixOS only when it clearly reduces drift. This repo does not currently expose a standalone homeConfigurations.<user> output, so Home Manager outside NixOS would need a small extra flake entry.

Secrets And SSH

NixOS uses SOPS-Nix to mount secrets at /run/secrets. Other distros should use normal user-owned files. The intended portable flow is:

StepResult
Put the age key at ~/.config/sops/age/keys.txtSOPS can decrypt locally.
Run ./conf/scripts/keys.shGit SSH keys land under ~/.local/share/sops.
Point SSH identities at those filesGitHub, Codeberg, and Tangled work.

See Secrets and SSH for current key names and host aliases.

Sanity Checks

After setup, confirm the shape rather than exact package parity:

CheckWhy
Shell is ZshLogin environment matches the dotfiles.
Starship loadsPrompt integration works.
Neovim and Zed startEditors can see expected language tools.
Zellij validates configTerminal workspace config is compatible.
Docker runs a test containerUser is in the Docker group and daemon works.
PostgreSQL accepts a local connectionLocal dev database is ready.
Redis returns PONGLocal cache service is ready.
SSH reaches Git hostsSOPS-extracted keys and aliases are correct.

Expect package substitutions. The goal is the same working environment, not an exact reproduction of NixOS internals.