Files
homelab/hosts/mercury/configuration.nix
T
erik 22a3eee85b feat(mercury): pihole web password from sops via FTLCONF env override
pihole.toml is nix-managed read-only so 'pihole setpassword' fails. pihole-FTL
reads FTLCONF_* env vars (override the toml) — render an env file from the sops
secret pihole_webpassword and feed it via EnvironmentFile. Password stays out of
repo/store. VERIFIED in VM: FTLCONF_webserver_api_password -> API login works.
2026-07-13 22:40:12 +02:00

47 lines
2.2 KiB
Nix

{ config, pkgs, lib, ... }:
# mercury — Raspberry Pi 3B+ (aarch64). Network DNS + DHCP (+ adblock).
# Boots from an SD image (see flake: nixosConfigurations.mercury), so there is
# no disko / hardware-configuration here — the sd-image module provides them.
{
imports = [
../../common.nix # shared base: user / ssh / nix / firewall
./secrets.nix # sops-nix: darman password (age key on boot part.)
../../services/unbound.nix # local recursive resolver (127.0.0.1:5335)
../../services/pihole.nix # DNS adblock + DHCP (declarative static leases)
];
networking.hostName = "mercury";
# ---- Static networking ----
# A DNS/DHCP server must have a fixed address. Fill in the Pi's real values
# (from `ip -brief a` / `ip route` on the running Pi). eth0 = the Pi's NIC.
networking.useDHCP = false;
networking.usePredictableInterfaceNames = false; # keep it named eth0
networking.interfaces.eth0.ipv4.addresses = [
{ address = "10.0.0.10"; prefixLength = 24; } # the Pi's current IP
];
# VERIFY with `ip route` on the Pi — assuming the router is .1.
networking.defaultGateway = { address = "10.0.0.1"; interface = "eth0"; };
# Resolvers for the Pi's OWN lookups (not the LAN service). Kept public so the
# host resolves during boot without depending on its own pihole/unbound.
networking.nameservers = [ "1.1.1.1" "9.9.9.9" ];
# DNS adblock + DHCP (pihole) and the recursive resolver (unbound) come from
# the imported service modules. pihole forwards to unbound at 127.0.0.1:5335.
# ---- pihole web admin password (from sops) ----
# pihole.toml is nix-managed read-only, so `pihole setpassword` can't write it.
# Instead pihole-FTL reads FTLCONF_* env vars (they override the toml). Render
# an env file from the sops secret and feed it to the service — password stays
# out of the repo and the nix store.
sops.secrets.pihole_webpassword = { };
sops.templates."pihole-ftl.env".content =
"FTLCONF_webserver_api_password=${config.sops.placeholder.pihole_webpassword}";
systemd.services.pihole-ftl.serviceConfig.EnvironmentFile =
config.sops.templates."pihole-ftl.env".path;
# Do not modify after first flash.
system.stateVersion = "26.05";
}