aboutsummaryrefslogtreecommitdiff
path: root/nix/flake/hosts.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/flake/hosts.nix')
-rw-r--r--nix/flake/hosts.nix184
1 files changed, 184 insertions, 0 deletions
diff --git a/nix/flake/hosts.nix b/nix/flake/hosts.nix
new file mode 100644
index 0000000..3ce8c6b
--- /dev/null
+++ b/nix/flake/hosts.nix
@@ -0,0 +1,184 @@
+{
+ inputs,
+ self,
+ withSystem,
+ ...
+}:
+let
+ inherit (inputs.nixpkgs.lib // builtins)
+ filterAttrs
+ foldl'
+ makeOverridable
+ mapAttrs'
+ mapAttrsToList
+ mkForce
+ mkIf
+ nixosSystem
+ readDir
+ replaceStrings
+ substring
+ ;
+
+ inherit (inputs.darwin.lib) darwinSystem;
+
+ nixSettings = {
+ nix.registry.nixpkgs = {
+ flake = inputs.nixpkgs;
+ };
+ };
+
+ mapSystems =
+ dir: mapAttrsToList (name: _: name) (filterAttrs (_: type: type == "directory") (readDir dir));
+
+ mapHosts = foldl' (
+ hosts: system:
+ hosts
+ // (mapAttrs' (
+ filename: _:
+ let
+ name = replaceStrings [ ".nix" ] [ "" ] filename;
+ in
+ {
+ inherit name;
+ value = {
+ inherit system;
+ hostconf = ../machines/nixos + "/${system}/${filename}";
+ };
+ }
+ ) (builtins.readDir ../machines/nixos/${system}))
+ ) { };
+
+ mapMacs = foldl' (
+ hosts: system:
+ hosts
+ // (mapAttrs' (
+ filename: _:
+ let
+ name = replaceStrings [ ".nix" ] [ "" ] filename;
+ in
+ {
+ inherit name;
+ value = {
+ inherit system;
+ hostconf = ../machines/darwin + "/${system}/${filename}";
+ };
+ }
+ ) (builtins.readDir ../machines/darwin/${system}))
+ ) { };
+
+ defaultModules = [
+ nixSettings
+ inputs.agenix.nixosModules.age
+ inputs.disko.nixosModules.disko
+ inputs.home-manager.nixosModules.home-manager
+ ../modules/default.nix
+ ];
+
+ darwinDefaultModules = [
+ nixSettings
+ inputs.agenix.darwinModules.age
+ inputs.home-manager.darwinModules.home-manager
+ ../modules/default-darwin.nix
+ ];
+
+ darwinConfigurations = mapAttrs' (
+ name: conf:
+ let
+ inherit (conf) system hostconf;
+ adminUser = {
+ name = "fcuny";
+ userinfo = {
+ email = "franck@fcuny.net";
+ fullName = "Franck Cuny";
+ };
+ };
+ in
+ {
+ inherit name;
+ value = withSystem system (
+ { pkgs, ... }:
+ makeOverridable darwinSystem {
+ inherit system;
+ specialArgs = {
+ hostName = name;
+ inherit adminUser;
+ inherit self;
+ inherit inputs;
+ };
+ modules =
+ [
+ { inherit adminUser; }
+ {
+ nixpkgs.pkgs = pkgs;
+ nixpkgs.hostPlatform = system;
+ system.stateVersion = 5;
+ environment.systemPackages = [
+ pkgs.git
+ ];
+ }
+ ]
+ ++ darwinDefaultModules
+ ++ [
+ hostconf
+ ];
+ }
+ );
+ }
+ ) (mapMacs (mapSystems ../machines/darwin));
+
+ nixosConfigurations = mapAttrs' (
+ name: conf:
+ let
+ inherit (conf) system hostconf;
+ adminUser = {
+ name = "fcuny";
+ userinfo = {
+ email = "franck@fcuny.net";
+ fullName = "Franck Cuny";
+ };
+ };
+ in
+ {
+ inherit name;
+ value = withSystem system (
+ { pkgs, ... }:
+ makeOverridable nixosSystem {
+ inherit system;
+ specialArgs = {
+ hostName = name;
+ inherit adminUser;
+ inherit self;
+ hostConfigurations = mapAttrs' (name: conf: {
+ inherit name;
+ value = conf.config;
+ }) nixosConfigurations;
+ inherit inputs;
+ };
+ modules =
+ [
+ {
+ inherit adminUser;
+ }
+ {
+ system.configurationRevision = mkIf (self ? rev) self.rev;
+ system.nixos.versionSuffix = mkForce "git.${substring 0 11 inputs.nixpkgs.rev}";
+ nixpkgs.pkgs = pkgs;
+ environment.systemPackages = [
+ pkgs.git
+ ];
+ }
+ ]
+ ++ defaultModules
+ ++ [
+ hostconf
+ ];
+ }
+ );
+ }
+ ) (mapHosts (mapSystems ../machines/nixos));
+in
+{
+ flake = {
+ inherit nixosConfigurations darwinConfigurations;
+ };
+}