From 47e9bb99b077236ec596e3b2285881b0efd4a21e Mon Sep 17 00:00:00 2001 From: naturallaw77 Date: Thu, 20 Aug 2026 17:00:23 -0500 Subject: [PATCH] fix(public-ip): move system.activationScripts under the config attribute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The module mixed the `options` keyword attribute with a bare top-level `system.*` setting. Once a module declares `options` (or `config`), every other top-level attribute must be a reserved module keyword — the nixpkgs unifyModuleSyntax check rejects anything else, so every nixos-rebuild aborted at evaluation time with: error: Module '.../modules/core/public-ip.nix' has an unsupported attribute `system'. ... move all of them (namely: system) into the `config' attribute. Prefix the activation script with `config.` (equivalent to wrapping it in `config = { ... };`) so the module evaluates again. The detector script itself is unchanged. Fixes: ac6c4986158c (-feat(public-ip): unify public-IP detection into one privacy-first script-) --- modules/core/public-ip.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/core/public-ip.nix b/modules/core/public-ip.nix index 5061bc7..18c521b 100644 --- a/modules/core/public-ip.nix +++ b/modules/core/public-ip.nix @@ -93,7 +93,11 @@ in }; # ── Install the unified detector ────────────────────────────────────────── - system.activationScripts.sovranPublicIpInstall = lib.stringAfter [ "users" ] '' + # This module declares `options` above, so ALL configuration must go under + # the `config` attribute: NixOS forbids mixing bare top-level settings + # (like `system.*`) with the `options`/`config` keyword attributes in the + # same module. (Fixes: "Module ... has an unsupported attribute `system'".) + config.system.activationScripts.sovranPublicIpInstall = lib.stringAfter [ "users" ] '' install -d -m 0755 /var/lib/sovran cat > /var/lib/sovran/public-ip.py <<'PYEOF' #!/usr/bin/env python3