{ description = "Fxnet system configurations"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-master.url = "github:NixOS/nixpkgs/master"; home-manager = { url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; photocatalog = { url = "github:derfenix/photocatalog"; inputs.nixpkgs.follows = "nixpkgs"; }; disko = { url = "github:nix-community/disko/latest"; inputs.nixpkgs.follows = "nixpkgs"; }; raspberry-pi-nix = { url = "github:nix-community/raspberry-pi-nix/master"; inputs.nixpkgs.follows = "nixpkgs"; }; nixos-hardware = { url = "github:NixOS/nixos-hardware/master"; }; nix-flatpak = { url = "github:gmodena/nix-flatpak"; }; }; outputs = { self, nixpkgs, nixpkgs-unstable, nixpkgs-master, ... }@inputs: let lib = nixpkgs.lib; timeZone = "Europe/Moscow"; stateVersion = "25.05"; hmModules = builtins.map (name: ./modules/hm + "/${name}") ( builtins.attrNames (builtins.readDir ./modules/hm) ); sysModules = builtins.map (name: ./modules/sys + "/${name}") ( builtins.attrNames (builtins.readDir ./modules/sys) ); pkgsSettings = ( system: import nixpkgs { inherit system; config.allowUnfree = true; } ); pkgsUnstableSettings = system: import nixpkgs-unstable { inherit system; config.allowUnfree = true; }; pkgsMasterSettings = system: import nixpkgs-master { inherit system; config.allowUnfree = true; }; hosts = import ./hosts.nix; hostNames = builtins.attrNames hosts; commonModules = [ ( { lib, pkgs, ... }: { system.stateVersion = stateVersion; time.timeZone = lib.mkDefault timeZone; home-manager = { backupFileExtension = ".bak"; useGlobalPkgs = true; useUserPackages = true; sharedModules = hmModules ++ [ ( { osConfig, ... }: { home.stateVersion = osConfig.system.stateVersion; } ) inputs.nix-flatpak.homeManagerModules.nix-flatpak ]; extraSpecialArgs = { inherit inputs; pkgsUnstable = pkgsUnstableSettings pkgs.system; pkgsMaster = pkgsMasterSettings pkgs.system; hosts = hosts; }; }; } ) inputs.nix-flatpak.nixosModules.nix-flatpak inputs.home-manager.nixosModules.home-manager inputs.photocatalog.nixosModules.photocatalog inputs.disko.nixosModules.disko ./options.nix ./nix.nix ] ++ sysModules; in { nixosConfigurations = lib.genAttrs hostNames ( name: let host = hosts.${name}; in if host ? system then inputs.nixpkgs.lib.nixosSystem { system = host.system; specialArgs = { inherit inputs; pkgsUnstable = pkgsUnstableSettings host.system; pkgsMaster = pkgsMasterSettings host.system; hosts = hosts; quirks = (quirks: (import ./quirks { inherit quirks; })); }; pkgs = pkgsSettings host.system; modules = commonModules ++ [ ./hosts/${name} ./hosts/${name}/hardware-configuration.nix ./roles/${host.role}.nix ]; } else { } ); }; }