Files
cc-ci/nix/hosts/cc-ci/configuration.nix
T
autonomic-botandClaude Opus 4.8 d4eae4ee49 fix(2): set time.timeZone=UTC on cc-ci → create /etc/localtime (immich bind-mount)
immich's compose bind-mounts the host /etc/localtime into the app container; NixOS without a set
timezone leaves /etc/localtime absent → 'bind source path does not exist: /etc/localtime' → app
service rejected (never converges). time.timeZone=UTC creates /etc/localtime (UTC = deterministic CI
timestamps). Nix-declared, reversible; helps any recipe binding /etc/localtime.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 14:51:33 +01:00

63 lines
2.0 KiB
Nix

# cc-ci machine config. M0 = faithful reproduction of the baseline (docs/baseline.md)
# so the first flake rebuild is a no-op-then-base. Services (swarm/Traefik/Drone/
# bridge/dashboard) are layered in via ./modules/* in later milestones.
{ pkgs, ... }:
{
imports = [
./hardware.nix
../../modules/packages.nix
../../modules/secrets.nix
../../modules/swarm.nix
../../modules/docker-prune.nix
../../modules/abra.nix
../../modules/proxy.nix
../../modules/drone.nix
../../modules/drone-runner.nix
../../modules/bridge.nix
../../modules/dashboard.nix
../../modules/backupbot.nix
../../modules/harness.nix
../../modules/warm-keycloak.nix
../../modules/nightly-sweep.nix
];
# --- Timezone: create /etc/localtime. Some recipes bind-mount the host's /etc/localtime into
# their containers (e.g. immich); without a set timezone NixOS leaves /etc/localtime absent, so
# that bind fails ("bind source path does not exist: /etc/localtime") and the service is rejected.
# UTC is the right default for a CI host (deterministic timestamps). ---
time.timeZone = "UTC";
# --- Tailscale (ACCESS-CRITICAL: do not break, this is the only route in) ---
# Baseline read the hostname from /etc/ts-hostname at eval time; that is impure
# under flakes, so we pin the known hostname. The reusable auth-key file persists.
services.tailscale = {
enable = true;
authKeyFile = "/etc/ts-auth-key";
extraUpFlags = [ "--hostname=cc-nix-test" ];
};
# --- SSH (root login over tailscale) ---
services.openssh = {
enable = true;
settings.PermitRootLogin = "yes";
};
# --- Firewall: trust tailscale, allow SSH ---
networking.firewall = {
enable = true;
trustedInterfaces = [ "tailscale0" ];
allowedTCPPorts = [ 22 ];
};
environment.systemPackages = with pkgs; [
curl
git
jq
openssh
];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
system.stateVersion = "24.11";
}