{ description = "NixOS system configuration"; inputs = { nixpkgs.url = "nixpkgs/nixos-23.11"; agenix.url = "github:ryantm/agenix"; 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; }; thunderbird-gnome-theme = { url = "github:rafaelmardojai/thunderbird-gnome-theme"; flake = false; }; wallpapers = { url = "git+ssh://git@git.vimium.com/jordan/wallpapers.git?shallow=1"; flake = false; }; }; outputs = inputs @ { self, nixpkgs, agenix, home-manager, ... }: let nixpkgsForSystem = system: inputs.nixpkgs; overlays = [ agenix.overlays.default (import ./overlays/gnome.nix) ]; commonModules = [ agenix.nixosModules.age home-manager.nixosModule ./modules ]; nixosSystem = system: name: 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} ]; }; nixosConfigurations = { atlas = nixosSystem "x86_64-linux" "atlas"; eos = nixosSystem "x86_64-linux" "eos"; helios = nixosSystem "x86_64-linux" "helios"; odyssey = nixosSystem "x86_64-linux" "odyssey"; }; in { inherit nixosConfigurations; }; }