{inputs}: let util = (import ./default.nix) {inherit inputs;}; outputs = inputs.self.outputs; lib = inputs.lib; nixpkgs = inputs.nixpkgs; home-manager = inputs.home-manager; nix-darwin = inputs.nix-darwin; sops-nix = inputs.sops-nix; nix-syncthing = inputs.nix-syncthing; disko = inputs.disko; impermanence = inputs.impermanence; # lix-module = inputs.lix-module; systems = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; forEachSystem = nixpkgs.lib.genAttrs systems; pkgsFor = system: nixpkgs.legacyPackages.${system}; common-modules = [ ../modules/common-modules ]; home-manager-modules = common-modules ++ [ sops-nix.homeManagerModules.sops impermanence.homeManagerModules.impermanence ../modules/home-manager-modules ]; home-manager-config = nixpkgs: { home-manager.useUserPackages = true; home-manager.backupFileExtension = "backup"; home-manager.extraSpecialArgs = { inherit inputs outputs util; }; home-manager.users = import ../configurations/home-manager (nixpkgs // { osConfig = nixpkgs.config; }); home-manager.sharedModules = home-manager-modules; }; system-modules = common-modules ++ [ home-manager-config ../modules/system-modules ]; in { forEachPkgs = lambda: forEachSystem (system: lambda (pkgsFor system)); mkUnless = condition: yes: (lib.mkIf (!condition) yes); mkIfElse = condition: yes: no: lib.mkMerge [ (lib.mkIf condition yes) (lib.mkUnless condition no) ]; mkNixosInstaller = host: userKeys: nixpkgs.lib.nixosSystem { modules = [ { # TODO: authorized keys for all users and hosts } ../configurations/nixos/${host} ]; }; mkNixosSystem = host: nixpkgs.lib.nixosSystem { specialArgs = {inherit inputs outputs util;}; modules = system-modules ++ [ sops-nix.nixosModules.sops nix-syncthing.nixosModules.syncthing impermanence.nixosModules.impermanence home-manager.nixosModules.home-manager disko.nixosModules.disko # lix-module.nixosModules.default ../modules/nixos-modules ../configurations/nixos/${host} ]; }; mkDarwinSystem = host: nix-darwin.lib.darwinSystem { specialArgs = {inherit inputs outputs util;}; modules = system-modules ++ [ sops-nix.darwinModules.sops home-manager.darwinModules.home-manager ../modules/darwin-modules ../configurations/darwin/${host} ]; }; mkHome = { user, host, system, osConfig, }: home-manager.lib.homeManagerConfiguration { pkgs = pkgsFor system; extraSpecialArgs = { inherit inputs util outputs osConfig; }; modules = home-manager-modules ++ [ ../configurations/home-manager/${user} ]; }; syncthingConfiguration = nix-syncthing.lib.syncthingConfiguration { modules = [ (import ../configurations/syncthing) ]; }; }