Archived
Check NixOS configurations / eval-hosts (pull_request) Successful in 10m40s
Documentation fixes:
- README/AGENTS: rename tailscale-exit-node → tailscale-router, add ha-server
build type and proxmox-ha-server-{1,2} host table rows, add baremetal to
platform list, remove references to non-existent flake-target-refactor-spec.md
and remove-sensetive-info-refactor.md
- docs/auto-installer.md: fix lxc-tailscale-exit-node → lxc-tailscale-router,
add pxe-minimal to the flake outputs list
- variables.nix: fix domainControllerIp comment — IPA is the authoritative DNS
at .253 (Pi-hole is gone), not a forwarding intermediary
Code deduplication:
- Extract duplicate SSH host-key preservation activation scripts from
modules/platforms/lxc.nix and modules/platforms/proxmox.nix into a shared
modules/common/preserve-ssh-host-key.nix; both platforms now import it
- Replace 8-line hand-enumerated NFS export lists in server.nix and ha-server.nix
with a mkNfsExports helper that generates exports from vars.nfsShares — adding
a share to variables.nix now propagates to both exporters automatically
Dead code removal:
- modules/common/configuration.nix: remove leftover NixOS skeleton comments
(hardware-configuration import, grub lines) that were never used
- modules/docker/enable-service.nix: remove commented-out listenOptions and
daemon.settings blocks
- hosts/server/host.nix, hosts/nix-cache/host.nix: remove #DOCKER_HOST comments
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
143 lines
4.2 KiB
Nix
143 lines
4.2 KiB
Nix
{ config, lib, pkgs, vars, ... }:
|
||
|
||
let
|
||
switchCmd = ''
|
||
sudo nixos-rebuild switch \
|
||
--no-write-lock-file \
|
||
--refresh \
|
||
--flake git+https://${vars.lanDomain}/beatzaplenty/nixos.git#$(cat /etc/flake-target)
|
||
'';
|
||
testCmd = ''
|
||
sudo nixos-rebuild test \
|
||
--no-write-lock-file \
|
||
--refresh \
|
||
--flake git+https://${vars.lanDomain}/beatzaplenty/nixos.git#$(cat /etc/flake-target)
|
||
'';
|
||
buildImageFn = ''
|
||
buildImage() {
|
||
if [ -z "$1" ]; then
|
||
echo "usage: buildImage <flake-target> (e.g. lxc-docker)" >&2
|
||
return 1
|
||
fi
|
||
NIXOS_HOST_KEYS_DIR="$(pwd)/host-keys" nix build --impure \
|
||
".#nixosConfigurations.$1.config.system.build.tarball"
|
||
}
|
||
'';
|
||
in
|
||
{
|
||
imports = [
|
||
./set-locale.nix
|
||
../ipa/client.nix
|
||
];
|
||
|
||
# System-wide shell config so all users (including IPA accounts) get the
|
||
# same management aliases as the local nixos user's Home Manager provides.
|
||
programs.bash = {
|
||
shellAliases = {
|
||
"Switch-nix" = switchCmd;
|
||
"Test-nix" = testCmd;
|
||
};
|
||
interactiveShellInit = buildImageFn;
|
||
};
|
||
networking.networkmanager.enable = true;
|
||
|
||
# Recommended over the true default (bypasses ZFS's own import safeguards)
|
||
# per the option's own docs; matches hosts/docker/host.nix and
|
||
# modules/services/zfs/enable-service.nix, which already set this
|
||
# explicitly. Harmless no-op on hosts that don't use ZFS at all.
|
||
boot.zfs.forceImportRoot = false;
|
||
|
||
# Set your time zone.
|
||
time.timeZone = vars.timeZone;
|
||
|
||
# Enable QEMU agent
|
||
services.qemuGuest.enable = true;
|
||
|
||
# Enable docker-compose
|
||
environment.systemPackages = with pkgs; [
|
||
vim
|
||
btop
|
||
git
|
||
gcr
|
||
jq
|
||
];
|
||
|
||
# Secrets shared by every host, decrypted at activation via each host's
|
||
# existing SSH host key (sops-nix derives the age key from
|
||
# /etc/ssh/ssh_host_ed25519_key automatically — see modules/common/README
|
||
# or docs/ for the sops workflow). hashedPassword/hashedPasswordFile need
|
||
# neededForUsers so they're available before the normal secret-activation
|
||
# step, since user creation happens very early in boot.
|
||
sops = {
|
||
defaultSopsFile = ../../secrets/common.yaml;
|
||
|
||
secrets = {
|
||
"root-hashedPassword".neededForUsers = true;
|
||
"nixos-hashedPassword".neededForUsers = true;
|
||
"nix-github-token" = { };
|
||
};
|
||
|
||
# nix.conf doesn't support a *File-style option for access-tokens, so the
|
||
# token is rendered into a runtime-only file (never touches the Nix store)
|
||
# and pulled in via nix.conf's native !include directive.
|
||
templates."nix-github-token.conf".content = ''
|
||
access-tokens = github.com=${config.sops.placeholder."nix-github-token"}
|
||
'';
|
||
};
|
||
|
||
nix.extraOptions = ''
|
||
!include ${config.sops.templates."nix-github-token.conf".path}
|
||
'';
|
||
|
||
users = {
|
||
# With mutableUsers = false, update-users-groups.pl enforces hashedPasswordFile
|
||
# on every activation regardless of whether the account already exists in
|
||
# /etc/shadow. The default (true) only applies hashedPasswordFile to newly-
|
||
# created accounts — which means a freshly-built proxmox disk image (where
|
||
# activation runs without a usable sops key, so both accounts land in shadow
|
||
# with ‘!’) will never have its passwords fixed by subsequent boots.
|
||
mutableUsers = false;
|
||
|
||
users.root = {
|
||
hashedPasswordFile = config.sops.secrets."root-hashedPassword".path;
|
||
};
|
||
|
||
users.${vars.primaryUser} = {
|
||
isNormalUser = true;
|
||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||
packages = with pkgs; [
|
||
tree
|
||
];
|
||
hashedPasswordFile = config.sops.secrets."nixos-hashedPassword".path;
|
||
openssh.authorizedKeys.keys = [
|
||
vars.adminSshKey
|
||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMJhrfFayLBG+gWtO6oAvgambw5nWWgztiTFEaaaVRH debian@surface"
|
||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGygkCljN6uKpdJbHTOQtn8ZnH+wKXDLAwrDFbLrE/65 nixos@nixos"
|
||
];
|
||
};
|
||
};
|
||
|
||
|
||
# Enable the OpenSSH daemon.
|
||
services.openssh.enable = true;
|
||
|
||
#Enable flakes
|
||
|
||
nix.settings = {
|
||
experimental-features = [ "nix-command" "flakes" ];
|
||
auto-optimise-store = true;
|
||
};
|
||
|
||
|
||
programs.git = {
|
||
enable = true;
|
||
package = pkgs.git;
|
||
config = {
|
||
credential.helper = "store";
|
||
};
|
||
};
|
||
|
||
|
||
|
||
}
|