{ nixpkgs, inputs }: let mkSystem = { system, cudaSupport ? false }: let config = { inherit cudaSupport; allowUnfree = true; }; cachixOverlay = final: prev: { nixosModules = (prev.nixosModules or { }) // { cachixConfig = import ../cachix.nix; }; }; extOverlays = [ (inputs.nvidia-patch.overlays.default) cachixOverlay ]; importNixpkgs = { flake }: import flake { inherit system config; overlays = extOverlays; }; unstablePkgs = importNixpkgs { flake = inputs.nixos-unstable; }; masterPkgs = importNixpkgs { flake = inputs.nixpkgs-master; }; localPkgs = importNixpkgs { flake = inputs.local-unstable; }; agenixPkgs = importNixpkgs { flake = inputs.agenix-flake; }; pepePkgs = inputs.pepeflake.packages.${system} // inputs.pepeflake.legacyPackages.${system} or { }; langtoolPkgs = inputs.langtool-ngrams.packages.${system} // inputs.langtool-ngrams.legacyPackages.${system} or { }; additionalOverlays = [ (final: prev: { inherit unstablePkgs; }) (final: prev: { inherit localPkgs; }) (final: prev: { inherit agenixPkgs; }) (final: prev: { inherit masterPkgs; }) (final: prev: { inherit pepePkgs; }) (final: prev: { inherit langtoolPkgs; }) ]; pkgs = import nixpkgs { inherit system config; overlays = additionalOverlays ++ extOverlays ++ [ (final: prev: { ctranslate2 = prev.ctranslate2.override { withCUDA = cudaSupport; withCuDNN = cudaSupport; }; }) ]; }; utils = let inherit (pkgs.lib) makeScope; inherit (pkgs) newScope; in makeScope newScope (self: rec { inherit nixpkgs inputs; inherit (self.callPackage ../lib/utils.nix { }) mkSysRole mkHomeRole; inherit (user) mkUser; user = self.callPackage ../lib/user.nix { home-manager = inputs.home-manager; }; host = self.callPackage ../lib/host.nix { home-manager = inputs.home-manager; }; }); in { inherit pkgs utils; }; in { inherit mkSystem; }