lunatix lunatix
  • Emacs Lisp 81%
  • Nix 17.2%
  • Shell 1.1%
  • Just 0.7%
Find a file
2026-08-09 21:24:27 +07:00
apps/dashboard feat: add git subdomain to duckdns for forgejo 2026-08-09 21:23:36 +07:00
docs feat(emacs): port doom config onto own lunaris framework 2026-08-07 20:43:28 +07:00
emacs chore: remove stray emacs lock file 2026-08-09 21:24:27 +07:00
modules feat: add git subdomain to duckdns for forgejo 2026-08-09 21:23:36 +07:00
.gitignore fix(emacs): doom cursor colors, emacs-state backspace, lsp/forge dirs 2026-08-08 17:17:56 +07:00
.nixd.json fix(emacs): repair letf! function places, exec-path, nil lsp 2026-08-08 13:59:21 +07:00
flake.lock chore: bump website input (remove nuxt-ui branding) 2026-08-09 19:03:28 +07:00
flake.nix feat(server): Nuxt dashboard service + nixos-facter for oracle 2026-08-09 16:41:22 +07:00
HANDOFF.md feat: add git subdomain to duckdns for forgejo 2026-08-09 21:23:36 +07:00
justfile chore(server): add switch-oracle recipe 2026-08-09 14:29:30 +07:00
README.md docs(server): note ubuntu login for oracle deploy 2026-08-09 14:34:47 +07:00

LunatixOS

Personal NixOS configuration for the igloo host, built on a dendritic flake layout using the den framework, flake-parts, and import-tree.

Every file under modules/ is imported automatically, so the configuration is organized as small, self-contained aspects rather than a single monolithic module tree.

Overview

  • Host: igloo (hostname nixos), x86_64-linux
  • Hardware: Dell Latitude 3250
  • Primary user: lunixose
  • Channel: nixpkgs-unstable
  • State version: 26.05
  • Filesystem: Btrfs on LUKS with home, nix, and boot partitions; encrypted swap
  • Boot: systemd-boot with EFI, latest kernel

Reinstall on a fresh machine

Boot the NixOS installer ISO, connect to the network, then:

nix-shell -p just git 
git clone https://github.com/lunixose/lunatix
cd lunatix
just bootstrap
lsblk -o NAME,SIZE,TYPE,MODEL,SERIAL

Stash the LUKS passphrase where disko expects it while formatting. This is used only during formatting — boot still prompts interactively:

echo -n 'your-passphrase' > /tmp/secret.key

Partition, format and mount the disk at /mnt. This is DESTRUCTIVE — it wipes the target disk:

just disko-format

Install the system onto the freshly mounted /mnt:

just install
just switch

Desktop

Both a Wayland and an X11 desktop are configured:

  • KDE Plasma 6 with the SDDM display manager
  • Hyprland, configured in Lua, with the Noctalia shell (Catppuccin Pink)

Oracle VPS

oracle (aarch64-linux) is a headless server deployed onto an Oracle Cloud free-tier instance. It ships SSH + firewall only; services (PiHole, Forgejo, Syncthing, Caddy) are added as aspects later.

Bootstrapping from the stock Ubuntu image (one time):

# 1. Capture the instance host key — this becomes the agenix rekey recipient.
ssh-keyscan <oracle-ip> | grep ed25519 > modules/community/lix/hardware/oracle.pub

# 2. Deploy NixOS over SSH. Oracle logs in as `ubuntu` (passwordless sudo).
#    nixos-anywhere downloads the aarch64 kexec image, builds the closure on
#    the instance (--build-on remote), and --copy-host-keys keeps the host key
#    so secrets decrypt on first boot.
just deploy-oracle ubuntu@<oracle-ip>

Secrets use agenix-rekey: edit with the master identity, rekey to each host's key at build time. See justfile (secret, rekey).

Diagrams

The den framework exposes an aspect-resolution graph for every host. This repo builds Mermaid diagrams for it via den-diagram:

nix build .#diag-igloo    # host-level aspect resolution
nix build .#diag-fleet    # fleet-wide Sankey

Each result is a plain .mmd text file under result/. Paste it into any Mermaid renderer (GitHub markdown, mermaid.live) or pipe through mmdc for SVG:

nix run nixpkgs#mermaid-cli -- -i result/diag-igloo.mmd -o diag-igloo.svg

Usage

Build and switch the host configuration:

just build           # build only
just switch          # build and activate

Test changes in a VM before applying them to hardware:

nix run .#vm

The flake file is generated by flake-file. After changing flake inputs declared inside modules, regenerate it:

nix run .#write-flake