feat(a1d1): init
Co-Authored-By: Samuel Shuert <coded@clicks.codes>
Change-Id: Iaf1499b8cde6d3f6bdb024374f6830d582006aeb
Reviewed-on: https://git.clicks.codes/c/Infra/NixFiles/+/720
Tested-by: Samuel Shuert <coded@clicks.codes>
Reviewed-by: Samuel Shuert <coded@clicks.codes>
diff --git a/modules/nixos/clicks/nix/default.nix b/modules/nixos/clicks/nix/default.nix
new file mode 100644
index 0000000..742980d
--- /dev/null
+++ b/modules/nixos/clicks/nix/default.nix
@@ -0,0 +1,103 @@
+# SPDX-FileCopyrightText: 2024 Auxolotl Infrastructure Contributors
+# SPDX-FileCopyrightText: 2024 Clicks Codes
+#
+# SPDX-License-Identifier: GPL-3.0-only
+
+{
+ options,
+ config,
+ pkgs,
+ lib,
+ inputs,
+ ...
+}:
+let
+ cfg = config.clicks.nix;
+
+ substituters-submodule = lib.types.submodule (
+ { name, ... }:
+ {
+ options = {
+ key = lib.mkOption {
+ type = lib.types.nullOr lib.types.str;
+ default = null;
+ description = "The trusted public key for this substituter.";
+ };
+ };
+ }
+ );
+in
+{
+ options.clicks.nix = {
+ enable = lib.mkEnableOption "Nix configuration";
+ package = lib.mkOption {
+ type = lib.types.package;
+ default = pkgs.nix;
+ defaultText = "pkgs.nix";
+ description = "Which Nix package to use.";
+ };
+
+ default-substituter = {
+ url = lib.mkOption {
+ type = lib.types.str;
+ default = "https://cache.nixos.org";
+ description = "The url for the substituter.";
+ };
+ key = lib.mkOption {
+ type = lib.types.str;
+ default = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=";
+ description = "The trusted public key for the substituter.";
+ };
+ };
+
+ extra-substituters = lib.mkOption {
+ type = lib.types.attrsOf substituters-submodule;
+ default = { };
+ description = "Extra substituters to configure.";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ assertions = lib.mapAttrsToList (name: value: {
+ assertion = value.key != null;
+ message = "auxolotl.nix.extra-substituters.${name}.key must be set";
+ }) cfg.extra-substituters;
+
+ nix =
+ let
+ users = [ "root" ];
+ in
+ {
+ package = cfg.package;
+
+ settings = {
+ experimental-features = "nix-command flakes";
+ http-connections = 50;
+ log-lines = 50;
+ auto-optimise-store = true;
+
+ trusted-users = users;
+ allowed-users = users;
+
+ substituters = [
+ cfg.default-substituter.url
+ ] ++ (lib.mapAttrsToList (name: value: name) cfg.extra-substituters);
+
+ trusted-public-keys = [
+ cfg.default-substituter.key
+ ] ++ (lib.mapAttrsToList (name: value: value.key) cfg.extra-substituters);
+ };
+
+ gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 30d";
+ };
+
+ # flake-utils-plus
+ generateRegistryFromInputs = true;
+ generateNixPathFromInputs = true;
+ linkInputs = true;
+ };
+ };
+}