summaryrefslogtreecommitdiff
path: root/parts
diff options
context:
space:
mode:
authorseth <[email protected]>2023-08-17 19:57:52 -0400
committerseth <[email protected]>2023-08-19 04:33:09 -0400
commitee7a8059e51773a312beeeee29f66ad65cd3af03 (patch)
tree165d55c8d6b6bbec9f49256c7252341b363abba4 /parts
parent97107c4e96611fe08623de9526896948280dc504 (diff)
!garnix -> hercules-ci
Diffstat (limited to 'parts')
-rw-r--r--parts/ci.nix86
-rw-r--r--parts/default.nix1
-rw-r--r--parts/lib/configs.nix68
3 files changed, 116 insertions, 39 deletions
diff --git a/parts/ci.nix b/parts/ci.nix
new file mode 100644
index 0000000..1f74d15
--- /dev/null
+++ b/parts/ci.nix
@@ -0,0 +1,86 @@
+{
+ config,
+ inputs,
+ self,
+ withSystem,
+ ...
+}: let
+ ciSystems = [
+ "x86_64-linux"
+ "aarch64-linux"
+ ];
+in {
+ imports = [
+ inputs.hercules-ci-effects.flakeModule
+ ];
+
+ herculesCI = {lib, ...} @ herculesCI: {
+ inherit ciSystems;
+
+ onPush.default = let
+ inherit (builtins) elem seq;
+ inherit (lib) filterAttrs mapAttrs mkForce;
+
+ findCompatible = filterAttrs (s: _: elem s ciSystems);
+ findCompatible' = filterAttrs (_: v: elem v.pkgs.system ciSystems);
+ findSystem = system: filterAttrs (s: _: s == system);
+ #buildCfgs = mapAttrs (_: v: v.config.system.build.toplevel);
+ evalCfgs = mapAttrs (_: v: seq v.config.system.build.toplevel v.pkgs.emptyFile);
+ in
+ mkForce {
+ outputs = {
+ checks = findCompatible self.checks;
+ devShells = findSystem "x86_64-linux" self.devShells;
+ homeConfigurations = findSystem "x86_64-linux" self.homeConfigurations;
+ nixosConfigurations = evalCfgs (findCompatible' self.nixosConfigurations);
+ };
+ };
+
+ onSchedule = let
+ inherit (lib) mkForce mapAttrs optionalAttrs;
+
+ mkUpdateEffect = inputs: pullRequestTitle: let
+ cfg = config.hercules-ci.flake-update;
+ in
+ withSystem cfg.effect.system ({hci-effects, ...}:
+ hci-effects.flakeUpdate {
+ gitRemote = herculesCI.config.repo.remoteHttpUrl;
+ user = "x-access-token";
+ autoMergeMethod = "rebase";
+ commitSummary = pullRequestTitle;
+ module = cfg.effect.settings;
+ inherit pullRequestTitle inputs;
+ inherit (cfg) updateBranch forgeType createPullRequest pullRequestBody;
+ });
+
+ mkUpdates = mapAttrs (n: {
+ inputs ? [],
+ dayOfMonth ? [],
+ msg ? "all",
+ }:
+ mkForce {
+ when =
+ {
+ hour = [0];
+ minute = 0;
+ }
+ // optionalAttrs (dayOfMonth != []) {inherit dayOfMonth;};
+
+ outputs = {
+ effects.${n} = mkUpdateEffect inputs "flake: update ${msg} inputs";
+ };
+ });
+ in
+ mkUpdates {
+ nixpkgs-update = {
+ inputs = ["nixpkgs" "nixpkgs-stable"];
+ msg = "nixpkgs";
+ };
+
+ flake-update = {
+ dayOfMonth = [1 8 15 22 29];
+ msg = "all";
+ };
+ };
+ };
+}
diff --git a/parts/default.nix b/parts/default.nix
index 3626f4a..c382e21 100644
--- a/parts/default.nix
+++ b/parts/default.nix
@@ -1,5 +1,6 @@
_: {
imports = [
+ ./ci.nix
./deploy.nix
./dev.nix
./lib
diff --git a/parts/lib/configs.nix b/parts/lib/configs.nix
index 9f7ac91..7b4e428 100644
--- a/parts/lib/configs.nix
+++ b/parts/lib/configs.nix
@@ -3,13 +3,9 @@
self,
...
}: let
- inherit (builtins) attrNames elemAt map;
- inherit (inputs.nixpkgs.lib) flatten genAttrs optional splitString;
-
- archs = ["x86_64" "aarch64"];
- os' = ["linux" "darwin"];
- mkSystems = systems: flatten (map (sys: map (arch: ["${arch}-${sys}" "${arch}-${sys}"]) archs) systems);
- systems = mkSystems os';
+ inherit (builtins) attrNames mapAttrs;
+ inherit (inputs) nixpkgs home-manager;
+ inherit (nixpkgs.lib) genAttrs optional;
mkSystemCfg = name: {
profile,
@@ -27,40 +23,34 @@
else modules ++ profile.modules
);
};
-in {
- inherit mkSystemCfg;
- mapSystems = builtins.mapAttrs mkSystemCfg;
- genHMCfgs = users: let
- names = flatten (map (user: map (system: "${user}@${system}") systems) (attrNames users));
- in
- genAttrs names (name: let
- getPart = elemAt (splitString "@" name);
- username = getPart 0;
- system = getPart 1;
- in
- inputs.home-manager.lib.homeManagerConfiguration rec {
- pkgs = import (users.${username}.nixpkgs or inputs.nixpkgs) (
- {inherit system;} // users.${username}.nixpkgsArgs or {}
- );
+ mkHMCfg = name: {
+ nixpkgs ? nixpkgs,
+ pkgs ? import nixpkgs {system = "x86_64-linux";},
+ extraSpecialArgs ? inputs,
+ modules ? [],
+ }:
+ home-manager.lib.homeManagerConfiguration {
+ inherit extraSpecialArgs pkgs;
- extraSpecialArgs = users.${username}.extraSpecialArgs or inputs;
+ modules =
+ [
+ self.homeManagerModules.${name}
+ ../../users/${name}/home.nix
- modules =
- [
- self.homeManagerModules.${username}
- {
- _module.args.osConfig = {};
- programs.home-manager.enable = true;
- }
- ../../users/${username}/home.nix
- ]
- ++ optional pkgs.stdenv.isDarwin ../../users/${username}/darwin.nix
- ++ users.${username}.modules or [];
- });
+ {
+ _module.args.osConfig = {};
+ programs.home-manager.enable = true;
+ }
+ ]
+ ++ optional pkgs.stdenv.isDarwin ../../users/${name}/darwin.nix
+ ++ modules;
+ };
+in {
+ inherit mkHMCfg mkSystemCfg;
+ mapHMUsers = mapAttrs mkHMCfg;
+ mapSystems = mapAttrs mkSystemCfg;
- genHMModules = users: let
- names = attrNames users;
- in
- genAttrs names (name: import ../../users/${name}/module.nix);
+ genHMModules = users:
+ genAttrs (attrNames users) (name: import ../../users/${name}/module.nix);
}