{ description = "NixOS system configuration"; inputs = { nixpkgs.url = "nixpkgs/nixos-23.11"; agenix.url = "github:ryantm/agenix"; deploy-rs.url = "github:serokell/deploy-rs"; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager/release-23.11"; inputs.nixpkgs.follows = "nixpkgs"; }; firefox-gnome-theme = { url = "github:rafaelmardojai/firefox-gnome-theme"; flake = false; }; nixos-hardware.url = "github:NixOS/nixos-hardware"; secrets = { url = "git+ssh://git@git.vimium.com/jordan/nix-secrets.git"; flake = false; }; thunderbird-gnome-theme = { url = "github:rafaelmardojai/thunderbird-gnome-theme"; flake = false; }; }; outputs = inputs @ { self, nixpkgs, agenix, deploy-rs, disko, home-manager, nixos-hardware, secrets, ... }: let nixpkgsForSystem = system: inputs.nixpkgs; overlays = [ agenix.overlays.default (import ./overlays/gnome.nix) ]; commonModules = [ agenix.nixosModules.age disko.nixosModules.disko home-manager.nixosModule ./modules ]; nixosSystem = { system, name, extraModules ? [] }: let nixpkgs = nixpkgsForSystem system; lib = (import nixpkgs { inherit overlays system; }).lib; in inputs.nixpkgs.lib.nixosSystem { inherit lib system; specialArgs = { modulesPath = toString (nixpkgs + "/nixos/modules"); inherit inputs; }; baseModules = import (nixpkgs + "/nixos/modules/module-list.nix"); modules = commonModules ++ [ ({ config, ... }: { nixpkgs.pkgs = import nixpkgs { inherit overlays system; config.allowUnfree = true; }; networking.hostName = name; nix = { extraOptions = "experimental-features = nix-command flakes"; }; }) ./hosts/${name} ] ++ extraModules; }; in { nixosConfigurations = { atlas = nixosSystem { system = "x86_64-linux"; name = "atlas"; }; eos = nixosSystem { system = "x86_64-linux"; name = "eos"; }; helios = nixosSystem { system = "x86_64-linux"; name = "helios"; }; hypnos = nixosSystem { system = "x86_64-linux"; name = "hypnos"; }; odyssey = nixosSystem { system = "x86_64-linux"; name = "odyssey"; }; pi = nixosSystem { system = "aarch64-linux"; name = "pi"; extraModules = [ nixos-hardware.nixosModules.raspberry-pi-4 ]; }; }; deploy.nodes.pi = { hostname = "10.0.1.191"; sshUser = "root"; profiles.system = { user = "root"; path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pi; }; }; # checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; }; }