{ description = "Wyatt's nix configuration"; inputs = { nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-24.05-darwin"; home-manager = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs-darwin"; }; darwin = { url = "github:lnl7/nix-darwin"; inputs.nixpkgs.follows = "nixpkgs-darwin"; }; }; # The `outputs` function will return all the build results of the flake. # A flake can have many use cases and different types of outputs, # parameters in `outputs` are defined in `inputs` and can be referenced by their names. # However, `self` is an exception, this special parameter points to the `outputs` itself (self-reference) # The `@` syntax here is used to alias the attribute set of the inputs's parameter, making it convenient to use inside the function. outputs = inputs @ { self, nixpkgs, darwin, home-manager, ... }: let username = "wyatt"; useremail = "wyatt@wyattjmiller.com"; system = "aarch64-darwin"; # aarch64-darwin or x86_64-darwin hostname = "sephiroth"; specialArgs = inputs // { inherit username useremail hostname; }; in { darwinConfigurations."${hostname}" = darwin.lib.darwinSystem { inherit system specialArgs; modules = [ ./modules/nix-core.nix ./modules/system.nix ./modules/apps.nix ./modules/host-users.nix # home manager home-manager.darwinModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = specialArgs; home-manager.users.${username} = import ./home; } ]; }; # nix code formatter formatter.${system} = nixpkgs.legacyPackages.${system}.alejandra; }; }