{ self, nixpkgs, ... }@inputs: rec { defSystem = system: systemConfig: deployConfig: nixpkgs.lib.nixosSystem { system = "${system}"; modules = (systemModules system systemConfig) ++ (nixpkgs.lib.optional (deployConfig != null) { _module.args.nixinate = deployConfig; }); }; systemModules = system: systemConfig: builtins.attrValues self.nixosModules ++ [ { _module.args.inputs = inputs; } { _module.args.self-overlay = self.overlays.default; } { nix.nixPath = [ "nixpkgs=${nixpkgs}" ]; nixpkgs = { overlays = [ self.overlays.default inputs.attic.overlays.default inputs.emacs-overlay.overlay inputs.eww.overlays.default inputs.ha-now-playing.overlays.${system} inputs.nil.overlays.default inputs.pamedia.overlays.${system} inputs.rust-overlay.overlays.default inputs.atuin.overlays.default ] ++ nixpkgs.lib.optional (system == "aarch64-linux") ( _final: super: { makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; }); } ); config = { allowUnfree = true; firefox = { speechSynthesisSupport = true; ffmpegSupport = true; pipewireSupport = true; }; }; }; home-manager = { useUserPackages = true; useGlobalPkgs = true; }; system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev; nix.registry.nixpkgs.flake = nixpkgs; } systemConfig inputs.home-manager.nixosModules.home-manager inputs.sops.nixosModules.sops # inputs.sunshine.nixosModules.sunshine ]; }