{ inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; inputs.homeManager.url = "github:nix-community/home-manager"; inputs.homeManager.inputs.nixpkgs.follows = "nixpkgs"; inputs.emacs.url = "github:nix-community/emacs-overlay"; inputs.sops.url = "github:Mic92/sops-nix"; inputs.deploy.url = "github:serokell/deploy-rs"; inputs.home.url = "sourcehut:~afontaine/home"; inputs.steamFetcher.url = "github:nix-community/steam-fetcher"; inputs.steamFetcher.inputs.nixpkgs.follows = "nixpkgs"; inputs.peonPing.url = "github:PeonPing/peon-ping"; inputs.peonPing.inputs.nixpkgs.follows = "nixpkgs"; inputs.stylix.url = "github:nix-community/stylix"; inputs.stylix.inputs.nixpkgs.follows = "nixpkgs"; inputs.tangled.url = "git+https://tangled.sh/@tangled.sh/core"; inputs.tangled.inputs.nixpkgs.follows = "nixpkgs"; inputs.nix-index-database.url = "github:nix-community/nix-index-database"; inputs.nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; outputs = { self, nixpkgs, homeManager, emacs, sops, deploy, home, steamFetcher, tangled, peonPing, stylix, nix-index-database, }: let systems = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" "aarch64-linux" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system); in { overlays = { emacs = emacs.overlay; }; nixosModules = { nixConfig = { pkgs, ... }: { nix = { registry.nixpkgs.to = { type = "path"; path = pkgs.path; }; package = pkgs.lixPackageSets.stable.lix; extraOptions = '' experimental-features = nix-command flakes ''; settings.trusted-users = [ "root" "@wheel" ]; gc = { automatic = true; options = "--delete-older-than 10d"; }; settings.auto-optimise-store = true; nixPath = [ "nixpkgs=${nixpkgs}" ]; }; nixpkgs.config.permittedInsecurePackages = [ "aspnetcore-runtime-6.0.36" "aspnetcore-runtime-wrapped-6.0.36" "dotnet-sdk-6.0.428" "dotnet-sdk-wrapped-6.0.428" ]; }; emacsOverlay = { nixpkgs = { overlays = [ emacs.overlay ]; config = { allowUnfree = true; }; }; home-manager.useGlobalPkgs = true; }; steamOverlay = { nixpkgs = { overlays = [ steamFetcher.overlay ]; config = { allowUnfree = true; }; }; home-manager.useGlobalPkgs = true; }; laptops = import ./shared/laptops; nixbuild = import ./shared/nixbuild; }; nixosConfigurations = { duchess = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ nixpkgs.nixosModules.notDetected homeManager.nixosModules.home-manager stylix.nixosModules.stylix self.nixosModules.emacsOverlay self.nixosModules.nixbuild self.nixosModules.nixConfig sops.nixosModules.sops ./duchess ./stylix ./andrew ./cachix.nix ]; }; slightly-darker-black = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ nixpkgs.nixosModules.notDetected homeManager.nixosModules.home-manager stylix.nixosModules.stylix self.nixosModules.emacsOverlay self.nixosModules.laptops self.nixosModules.nixbuild self.nixosModules.nixConfig sops.nixosModules.sops ./stylix ./slightly-darker-black ./andrew ./cachix.nix ]; }; # pam-poovy = nixpkgs.lib.nixosSystem { # system = "x86_64-linux"; # modules = [ # nixpkgs.nixosModules.notDetected # homeManager.nixosModules.home-manager # self.nixosModules.emacsOverlay # self.nixosModules.laptops # self.nixosModules.nixConfig # sops.nixosModules.sops # ./pam-poovy # ./andrew # ./cachix.nix # ]; # }; woodhouse = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ nixpkgs.nixosModules.notDetected homeManager.nixosModules.home-manager tangled.nixosModules.spindle self.nixosModules.emacsOverlay self.nixosModules.nixbuild self.nixosModules.nixConfig self.nixosModules.steamOverlay ./woodhouse ./andrew/server.nix sops.nixosModules.sops ./cachix.nix ]; }; cheryl = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ sops.nixosModules.sops homeManager.nixosModules.home-manager home.nixosModules.home tangled.nixosModules.knot self.nixosModules.emacsOverlay self.nixosModules.nixConfig ./cheryl ./andrew/server.nix ./cachix.nix ]; }; cyril-figgis = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ sops.nixosModules.sops homeManager.nixosModules.home-manager home.nixosModules.home self.nixosModules.emacsOverlay self.nixosModules.nixConfig ./cyril-figgis ./andrew/server.nix ./cachix.nix ]; }; ray-gillette = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ sops.nixosModules.sops homeManager.nixosModules.home-manager home.nixosModules.home self.nixosModules.emacsOverlay self.nixosModules.nixConfig ./ray-gillette ./andrew/server.nix ./cachix.nix ]; }; }; deploy.nodes = { cheryl = { hostname = "cheryl"; profiles.system = { user = "root"; path = deploy.lib.x86_64-linux.activate.nixos self.nixosConfigurations.cheryl; }; }; cyril-figgis = { hostname = "cyril-figgis"; profiles.system = { user = "root"; path = deploy.lib.x86_64-linux.activate.nixos self.nixosConfigurations.cyril-figgis; }; }; ray-gillette = { hostname = "ray-gillette"; profiles.system = { user = "root"; path = deploy.lib.x86_64-linux.activate.nixos self.nixosConfigurations.ray-gillette; }; }; duchess = { hostname = "duchess"; sudo = "doas -u"; profiles.system = { user = "root"; path = deploy.lib.x86_64-linux.activate.nixos self.nixosConfigurations.duchess; }; }; woodhouse = { hostname = "woodhouse"; profiles.system = { user = "root"; path = deploy.lib.x86_64-linux.activate.nixos self.nixosConfigurations.woodhouse; }; }; }; homeConfigurations = { andrew = homeManager.lib.homeManagerConfiguration { modules = [ sops.homeManagerModules.sops stylix.homeModules.stylix peonPing.homeManagerModules.default nix-index-database.homeModules.default ( { pkgs, lib, ... }: { imports = [ ./andrew/home.nix ]; nixpkgs = { overlays = [ emacs.overlay (_final: _prev: { peon-ping = peonPing.packages.x86_64-linux.default; }) ]; config = { allowUnfree = true; }; }; home.homeDirectory = "/home/andrew"; home.username = "andrew"; } ) ]; pkgs = nixpkgs.legacyPackages.x86_64-linux; }; }; checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy.lib; packages = ( forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; in { # digitalOceanImage = # self.nixosConfigurations.krieger.config.system.build.digitalOceanImage; iosevka-mono = pkgs.callPackage ./stylix/fonts/iosevka-mono.nix { }; iosevka-prop = pkgs.callPackage ./stylix/fonts/iosevka-prop.nix { }; iosekva-nerd = pkgs.callPackage ./stylix/fonts/iosevka-nerd.nix { iosevka = self.packages.${system}.iosevka-mono; }; } ) ); devShells = ( forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; sopsPkgs = sops.packages.${system}; in { default = pkgs.mkShell { sopsPGPKeyDirs = [ "./keys/hosts" "./keys/users" ]; nativeBuildInputs = [ sopsPkgs.sops-import-keys-hook ]; buildInputs = [ sopsPkgs.ssh-to-pgp deploy.packages.${system}.default pkgs.nix-prefetch pkgs.nix-output-monitor homeManager.packages.${system}.default ]; }; } ) ); }; }