NixDaemon

NixOS pentest workstation as one flake — IceBreaker's successor
git clone https://git.daemon-sec.xyz/NixDaemon.git
Log | Files | Refs | README

commit d9c39bdde4535d8be00dcc575ba0238ec9f23864
parent 734ff2e5a7c1f490ed00fecf416409c518d6fcbb
Author: DAEMON <zer0sec.xp@icloud.com>
Date:   Thu,  8 Oct 2026 03:43:15 +0100

added new tools

Diffstat:
MREADME.md | 25+++++++++++++++++++------
Mhome/cheats/nix.md | 20+++++++++++---------
Mhome/default.nix | 3+++
Ahome/gpg/daemon-main.pub.asc | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahome/modules/git.nix | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahome/modules/gpg.nix | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Ahome/modules/ssh.nix | 46++++++++++++++++++++++++++++++++++++++++++++++
Mhome/modules/tools.nix | 4+++-
Msecrets/secrets.yaml | 7+++++--
9 files changed, 271 insertions(+), 18 deletions(-)

diff --git a/README.md b/README.md @@ -30,7 +30,7 @@ keybinds, Caelestia as bar/launcher/lock, kitty with tmux-style keys, zsh through the dotfiles checkout, the general tools, and the secrets. Built from the vault's `04Tools/NixDaemon-Migration/` material on 2026-10-07. -The companion repo is [`daemon-sec-dotfiles`](https://gitlab.com/DAEMON-404): +The companion repo is `daemon-sec-dotfiles` (private, same account): home-manager links every dotfile from its checkout (`~/git/daemon-sec-dotfiles`) into `$HOME`, so editing the checkout edits the live config. @@ -70,11 +70,15 @@ NixDaemon/ │ ├── modules/neovim.nix nvf: Neovim with a small Nix-built plugin set, Rosé Pine, LSPs for this machine's languages │ ├── modules/prompt.nix starship (two-line, one Rosé Pine colour per section) and fastfetch (NixOS logo) │ ├── modules/fan.nix `fan`: status and watch without root; max/auto with the clamp watchdog +│ ├── modules/ssh.nix the ssh key (private half from sops) and ~/.ssh/config +│ ├── modules/gpg.nix the GPG main key: public in home/gpg/, secret from sops, gpg.conf, trust +│ ├── modules/git.nix git identity, signing with the main key, aliases, delta │ ├── modules/gtk.nix Yaru-purple icons, cursor, prefer-dark │ ├── hypr/*.lua omarchy (shim) · core · looknfeel · defaults · bindings · lid · caelestia │ ├── kitty/scrollback.lua kitty copy mode as a Neovim buffer │ ├── caelestia/ scheme.json (dark) · scheme-dawn.json · rose-pine-{dark,dawn}.txt · shell-tokens.json -│ └── cheats/*.md the cards: nix.md, gpg.md +│ ├── cheats/*.md the cards: nix.md, gpg.md +│ └── gpg/daemon-main.pub.asc the main key's public half └── modules/workstation.nix Claude Code, Claude desktop, Obsidian, gh, glab ``` @@ -113,10 +117,13 @@ them (the repo is jj, colocated with git; `nix-cheat repo`). ### From the repo, without a checkout +The repo is private, so the reference is the ssh form: + ```sh -sudo nixos-rebuild switch --flake gitlab:DAEMON-404/NixDaemon#nixos -nh os switch gitlab:DAEMON-404/NixDaemon -nix flake show gitlab:DAEMON-404/NixDaemon +REPO='git+ssh://git@gitlab.com/DAEMON-404/NixDaemon.git' +sudo nixos-rebuild switch --flake "$REPO#nixos" +nh os switch "$REPO" +nix flake show "$REPO" ``` ### Fresh install @@ -124,7 +131,7 @@ nix flake show gitlab:DAEMON-404/NixDaemon 1. Boot the NixOS live ISO, partition and mount at `/mnt`; generate `hardware-configuration.nix` with `nixos-generate-config --root /mnt` and compare it with `hosts/laptop/hardware-configuration.nix` (UUIDs). -2. `git clone https://gitlab.com/DAEMON-404/NixDaemon && cd NixDaemon`, drop +2. `git clone git@gitlab.com:DAEMON-404/NixDaemon.git && cd NixDaemon`, drop the new hardware file into `hosts/laptop/`, `git add` it. 3. `sudo nixos-install --flake .#nixos`, reboot, log in at tuigreet, pick **Hyprland (UWSM)** once. @@ -270,6 +277,12 @@ sudo install -D -m 600 -o root -g root ~/.config/sops/age/keys.txt /var/lib/sops Edit with `sops secrets/secrets.yaml`, declare with `sops.secrets.NAME = { };`, rebuild. `nix-cheat secrets` has the commands. +What the file holds today: `ssh_id_ed25519` (the SSH private key, used by +home/modules/ssh.nix), `gpg_main_secret` (the armored GPG secret key, still +under its own passphrase, imported by home/modules/gpg.nix on first +activation), and `example`. So a fresh install needs exactly one secret +restored by hand, the age key; ssh, gpg and git then come up from the flake. + **secretspec** is for a project's runtime secrets: declared next to the project in `secretspec.toml`, values in the system keyring (`~/.config/secretspec/config.toml`: provider `keyring`, profile `default`; diff --git a/home/cheats/nix.md b/home/cheats/nix.md @@ -38,22 +38,24 @@ sudo nixos-rebuild switch --flake ~/NixDaemon#nixos # same, from any directory ## remote — build straight from the GitLab repo The flake does not have to be checked out: any `nix` command takes a **flake reference** to the repo. -`gitlab:DAEMON-404/NixDaemon` is the public repo; `?ref=main` pins a branch, `?rev=<sha>` a commit. +The repo is **private**, so use the ssh form (the key in ~/.ssh/config is registered on GitLab); `?ref=main` pins a branch, `?rev=<sha>` a commit. ```sh -sudo nixos-rebuild switch --flake gitlab:DAEMON-404/NixDaemon#nixos # this machine, from the pushed main -sudo nixos-rebuild boot --flake 'gitlab:DAEMON-404/NixDaemon?ref=main#nixos' -nh os switch gitlab:DAEMON-404/NixDaemon # nh takes the same reference -nix build gitlab:DAEMON-404/NixDaemon#nixosConfigurations.nixos.config.system.build.toplevel --no-link --print-out-paths -nix flake show gitlab:DAEMON-404/NixDaemon # what the repo exports -nix flake metadata gitlab:DAEMON-404/NixDaemon # which commit nix resolved -git+https://gitlab.com/DAEMON-404/NixDaemon.git # the long form of the same reference +REPO='git+ssh://git@gitlab.com/DAEMON-404/NixDaemon.git' +sudo nixos-rebuild switch --flake "$REPO#nixos" # this machine, from the pushed main +sudo nixos-rebuild boot --flake "$REPO?ref=main#nixos" +nh os switch "$REPO" # nh takes the same reference +nix build "$REPO#nixosConfigurations.nixos.config.system.build.toplevel" --no-link --print-out-paths +nix flake show "$REPO" # what the repo exports +nix flake metadata "$REPO" # which commit nix resolved +# root (sudo) fetches with root's ssh: either run the fetch as you first (nix build …, cached), or give +# root the key via /root/.ssh/config, or use an https token in ~/.config/nix/netrc (machine gitlab.com …). ``` **Fresh machine, from the live ISO** (disk already partitioned and mounted at /mnt): ```sh sudo nixos-generate-config --root /mnt --show-hardware-config > hardware-configuration.nix # compare with hosts/laptop/ -git clone https://gitlab.com/DAEMON-404/NixDaemon ~/NixDaemon && cd ~/NixDaemon +git clone git@gitlab.com:DAEMON-404/NixDaemon.git ~/NixDaemon && cd ~/NixDaemon # ssh key first (see *secrets*) # copy the new hardware-configuration.nix into hosts/laptop/, git add it, then: sudo nixos-install --flake .#nixos ``` diff --git a/home/default.nix b/home/default.nix @@ -13,6 +13,9 @@ ./modules/neovim.nix # nvf: Neovim with a small, Nix-built plugin set ./modules/prompt.nix # starship prompt and fastfetch card, Rosé Pine, NixOS logo ./modules/fan.nix # `fan`: status/watch without root, max/auto with a clamp watchdog + ./modules/ssh.nix # the ssh key (sops) and ~/.ssh/config + ./modules/gpg.nix # the GPG main key (public in-repo, secret via sops) and gpg.conf + ./modules/git.nix # git identity, signing with the main key, delta ./modules/gtk.nix # Yaru-purple icons, cursor, prefer-dark ]; diff --git a/home/gpg/daemon-main.pub.asc b/home/gpg/daemon-main.pub.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +wi7hMx1q26s= +=LAhI +-----END PGP PUBLIC KEY BLOCK----- diff --git a/home/modules/git.nix b/home/modules/git.nix @@ -0,0 +1,81 @@ +# home/modules/git.nix — git, from the flake (was ~/.gitconfig written by the +# bootstrap script plus the dotfiles' .config/git, which is not linked). +# +# Identity: DAEMON-404 <zer0sec.xp@icloud.com>; every commit and tag signed +# with the GPG main key (home/modules/gpg.nix), which GitLab already knows. +# Credentials for https remotes come from gh / glab; clones use ssh anyway. +# delta paints diffs (Rosé Pine, from the dotfiles' git config). +{ ... }: +{ + programs.git = { + enable = true; + signing = { + key = "3374F5B7E65B8CDB7949E2EBBFB092454FAFECB4"; + format = "openpgp"; + signByDefault = true; # commit.gpgSign and tag.gpgSign + }; + settings = { + user = { + name = "DAEMON-404"; + email = "zer0sec.xp@icloud.com"; + }; + alias = { + co = "checkout"; + br = "branch"; + ci = "commit"; + st = "status"; + lg = "log --oneline --graph --decorate -20"; + }; + init.defaultBranch = "main"; + pull.rebase = true; + push.autoSetupRemote = true; + diff = { + algorithm = "histogram"; + colorMoved = "default"; + mnemonicPrefix = true; + }; + commit.verbose = true; + column.ui = "auto"; + branch.sort = "-committerdate"; + tag.sort = "-version:refname"; + rerere = { + enabled = true; + autoupdate = true; + }; + merge.conflictstyle = "zdiff3"; + core = { + autocrlf = "input"; + safecrlf = "warn"; + }; + credential = { + "https://github.com".helper = "!gh auth git-credential"; + "https://gist.github.com".helper = "!gh auth git-credential"; + "https://gitlab.com".helper = "!glab auth git-credential"; + }; + }; + }; + + programs.delta = { + enable = true; + enableGitIntegration = true; + options = { + navigate = true; + light = false; + line-numbers = true; + side-by-side = false; + hyperlinks = true; + syntax-theme = "none"; + minus-style = "\"#eb6f92\" \"#26233a\""; + minus-emph-style = "bold \"#eb6f92\" \"#403d52\""; + plus-style = "\"#9ccfd8\" \"#26233a\""; + plus-emph-style = "bold \"#31748f\" \"#403d52\""; + line-numbers-minus-style = "\"#eb6f92\""; + line-numbers-plus-style = "\"#31748f\""; + line-numbers-zero-style = "\"#6e6a86\""; + file-style = "\"#31748f\" bold"; + file-decoration-style = "\"#c4a7e7\" ul"; + hunk-header-style = "\"#eb6f92\" bold"; + hunk-header-decoration-style = "\"#6e6a86\" box"; + }; + }; +} diff --git a/home/modules/gpg.nix b/home/modules/gpg.nix @@ -0,0 +1,51 @@ +# home/modules/gpg.nix — the GPG main key and gpg.conf, from the flake. +# +# public key home/gpg/daemon-main.pub.asc → imported with ultimate trust (programs.gpg.publicKeys) +# secret key sops secret gpg_main_secret (the armored export, still under its own passphrase): +# imported into the keyring on activation if the keyring lacks it +# gpg.conf programs.gpg.settings (the gpg-cheat `setup` defaults) +# +# The agent itself is NixOS's (programs.gnupg.agent, pinentry-gnome3), so +# services.gpg-agent is deliberately not enabled here. +# Key: daemon (Main_Key) <zer0sec.xp@icloud.com>, RSA 4096, 2025-12-30, the one on GitLab. +{ config, pkgs, lib, ... }: +let + fpr = "3374F5B7E65B8CDB7949E2EBBFB092454FAFECB4"; +in +{ + sops.secrets.gpg_main_secret = { }; + + programs.gpg = { + enable = true; + mutableKeys = true; # other people's keys and new subkeys stay editable + mutableTrust = true; + publicKeys = [ + { source = ../gpg/daemon-main.pub.asc; trust = 5; } + ]; + settings = { + default-key = fpr; + default-recipient-self = true; + keyid-format = "0xlong"; + with-fingerprint = true; + with-subkey-fingerprints = true; + personal-cipher-preferences = "AES256 AES192 AES"; + personal-digest-preferences = "SHA512 SHA384 SHA256"; + cert-digest-algo = "SHA512"; + no-emit-version = true; + no-comments = true; + keyserver = "hkps://keys.openpgp.org"; + auto-key-locate = "local,wkd"; + trust-model = "tofu+pgp"; + }; + }; + + # Import the secret key once (idempotent: skipped when the keyring has it). + # Runs after sops-nix has decrypted the secrets. + home.activation.gpgMainKey = lib.hm.dag.entryAfter [ "sops-nix" ] '' + if [ -r "${config.sops.secrets.gpg_main_secret.path}" ] \ + && ! ${pkgs.gnupg}/bin/gpg --batch --list-secret-keys ${fpr} >/dev/null 2>&1; then + run ${pkgs.gnupg}/bin/gpg --batch --quiet --import "${config.sops.secrets.gpg_main_secret.path}" \ + && echo "gpg: imported the main secret key ${fpr}" + fi + ''; +} diff --git a/home/modules/ssh.nix b/home/modules/ssh.nix @@ -0,0 +1,46 @@ +# home/modules/ssh.nix — the SSH key and client config, from the flake. +# +# The private key is a sops secret (secrets/secrets.yaml: ssh_id_ed25519; +# `nix-cheat secrets`). At login sops-nix decrypts it with the age key into +# the runtime secrets dir and ~/.config/sops-nix/secrets/ssh_id_ed25519 points +# there; ~/.ssh/config names that path, so a fresh machine has a working key +# as soon as ~/.config/sops/age/keys.txt is restored. The public half is +# plain text in ~/.ssh/id_ed25519.pub (comment daemonsec@nixos; registered on +# gitlab.com as "nixos", auth and signing, and glab's git_protocol is ssh). +# +# A plain copy from before this module may still sit at ~/.ssh/id_ed25519; +# nothing reads it any more. +{ config, ... }: +let + key = config.sops.secrets.ssh_id_ed25519.path; +in +{ + sops.secrets.ssh_id_ed25519 = { }; # → %r/secrets.d/…, mode 0400 (ssh is happy with that) + + home.file.".ssh/id_ed25519.pub".text = '' + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAsXOt8jkVBgL2ANFgkftVfRlswxBvBUM33Tv/bS+I5Z daemonsec@nixos + ''; + + programs.ssh = { + enable = true; + enableDefaultConfig = false; + settings = { + "gitlab.com" = { + User = "git"; + IdentityFile = key; + IdentitiesOnly = "yes"; + }; + "github.com" = { + User = "git"; + IdentityFile = key; + IdentitiesOnly = "yes"; + }; + "*" = { + IdentityFile = key; + AddKeysToAgent = "yes"; + ServerAliveInterval = 30; + HashKnownHosts = "no"; + }; + }; + }; +} diff --git a/home/modules/tools.nix b/home/modules/tools.nix @@ -98,7 +98,6 @@ in dust duf procs - delta difftastic hyperfine glow @@ -116,4 +115,7 @@ in localsend # phone ↔ laptop file drops on the LAN; port 53317 is open in hosts/laptop/default.nix vesktop # Discord client; its config is linked from the dotfiles (dotfiles.nix) ]; + + # Browser + programs.floorp.enable = true; } diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml @@ -3,6 +3,9 @@ #ENC[AES256_GCM,data:tM+6SNM68Ic6u4+prSUMzOZHnBzcffTZdlDyopfXDEuIaBxUofzyL1BhYsojlFHAZ34GXVZ3feBT+INw72d1jH1y/HJX7aJ3NnRKfBhV,iv:pfuzt7HNngh72wSmuqY23l1rrKBYY1A7sHa318ITBsA=,tag:PZXXy8nmNMtsH36zsD+09A==,type:comment] #ENC[AES256_GCM,data:a2p5hr+IkHu5tV8yGp/BrT6Lo8NGpafVVv6AXuVVHqQxGjz1F1JCm2udrOTNYUjfq5ktUALQZxtvFjRJuFNoKcGgaDf8luu5cA==,iv:PWN3vdbdD7fSuaKs7o47c/Ynxgxdr8ZlIwRDCRiz720=,tag:/rJ8dymNnO7Hnjc1uIow3w==,type:comment] example: ENC[AES256_GCM,data:EgrtVBB9Lt+pu0u3g9DP7Xwzr5PktqBr4vLw50rn/YlPVdMUzTgO/JmVgyVmjBlFXZySHDk=,iv:lFC1wvWwTdvFFbnXVNeXZGV5nGNCWFHq9kvBNn9bA2U=,tag:ta6b1cPg5MUimd7rRdT1Xw==,type:str] +gpg_main_secret: ENC[AES256_GCM,data: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,iv:WJKJp6pacZEEjgJ1jN7vZW6HezWC/2Ed17kMWfVMGpM=,tag:b/vcH8vTGSW2d2AlGMY1kA==,type:str] +ssh_id_ed25519: ENC[AES256_GCM,data:teoDa3F5l+/muZdHrPDYmAxMnxrlERywT+lnuCDan6uVozQ3sNi+JKfLPFfkl99M7OI+qSl/pJQBgYgCJPcWf3bW7P9sXE00pHDciMc59OGpyTRkVQ7m+W30IM6NAJXjIdRidzrVCeuz52TZMsuswzsKX8fn/M0biRFC0yK6WRnpRpeFOCaL2HW95gZv8ppcyPk/3PB9xby/0Y6AUhjC1GKztt+ZoT+yhkG4f14svSPaHWMuKaS5CEt0Lr30SZWf1Fk0DnhkWH8Y+k/q/Pa4iKhxsUheEngpOe4N3cld5reWl52BEHMAkN5BWptX4XjNhRHQzu7oO+xSeoKX+8ieA7W7HWMnqV9WPHhxwRfdgrJk2IO+XjrQCoi/DAgTbwRT0qHD/auyTYzYFn1ymcw8V0GlxIG33KzeDcqB1OrU7pOpyxqnRMRMM4FiKQL83GGQKTxSQ1Mn3EVDJpLAmLa4xp5kxbh+v7ydtZT9qzbwcjfRAiLbmA1MBYy8+LyCpHAMqsGLjMXolxint2a9I97sUUH5xVaS67wfoTfv,iv:NJmXY04ccxJ+KLfWT3r6nOpITraN1k2gMYbcyMX/gMw=,tag:w+ytNiN+eDOiWe8LfE10lQ==,type:str] +ssh_id_ed25519_pub: ENC[AES256_GCM,data:rwwK/75DFSW46WIVlt869GebYoxLDmiIIxIzDkM/rDdW6A+JXPfgZrl1T2UwJ+F4+c78cQ5Q4rWOzibP+SOFZn2dgAoXyZvX0fqYBn0K0emnFHxuOEV9MGX1qGZmToBA+w==,iv:9EA7Py4noOuyzG2A8YKlAA6z6ZGDoDQTX3ksEBegp1I=,tag:/eb/8oOFAW0s7fGmIXO+jA==,type:str] sops: age: - enc: | @@ -14,7 +17,7 @@ sops: NV86EcQtCT8AQqgtugSBUOjmZU6D45/rhEXAM98yP01b8Iw2HhEAuw== -----END AGE ENCRYPTED FILE----- recipient: age1pu5wcvqqh92xr6ces8zmj4xvs52v7yfm4jsfcxm3z82a32u9n97qesldfv - lastmodified: "2026-10-08T01:04:15Z" - mac: ENC[AES256_GCM,data:glJkL/drRDrChgo/69OXHe/nwQ99DCZXeWs92EDZn8EcqJbgKU+QoSEeU4THB6e0OYjRRbUvXtMM6vUbQ638UyT4ueDlxEqAsEpfN23/56GTdoqiqj/JiDRPwr5xFq2R09itmrnjjy1Tt3zodLL/nTmQQ9Sm6CONeeRwvoP9gnQ=,iv:+X8NyDUYY8NySWUaYfBGPTPFAa2YJHaz9gT/5pp6u8U=,tag:W4utRNHzEL4oXRjW0SowLw==,type:str] + lastmodified: "2026-10-08T02:44:18Z" + mac: ENC[AES256_GCM,data:9H5aSdEmvOaqNxx4Vg7alAC8qc4/RubTX5OHmFQwXGRK2FTAiakQT+uvEdBo7ooGv4bGafuRpiAORmb4ntYYiEvtTPsjw3tEPU5MDITNVtCDLS3U5kgRTCi8PGmb9xQqy3ZzQx0rCtnSssrMYdFcpF2hBN5eeS7eUEuDqlI00P0=,iv:PI3PHmR0oyiPKRLmSOXrFEvnVsCn8Z3Cekap3G9X1Xc=,tag:CytrngeW5P8vDp2/2u1YYw==,type:str] unencrypted_suffix: _unencrypted version: 3.13.3