diff --git a/flake.nix b/flake.nix index e59ec2f..d76df3b 100644 --- a/flake.nix +++ b/flake.nix @@ -35,88 +35,22 @@ sysLinuxAarch = "aarch64-linux"; forAllSystems = nixpkgs.lib.genAttrs [ sysLinuxX64 sysLinuxAarch sysDarwin ]; - wrapPkgsSystem = { system, cudaSupport ? false }: - let - config = { - inherit cudaSupport; - - allowUnfree = true; - }; - - cachixOverlay = final: prev: { - nixosModules = (prev.nixosModules or { }) // { - cachixConfig = import ./cachix.nix; - }; - }; - - - extOverlays = [ - (nvidia-patch.overlays.default) - cachixOverlay - ]; - - importNixpkgs = { flake }: - import flake { - inherit system config; - - overlays = extOverlays; - }; - - unstablePkgs = importNixpkgs { flake = nixos-unstable; }; - masterPkgs = importNixpkgs { flake = nixpkgs-master; }; - localPkgs = importNixpkgs { flake = local-unstable; }; - agenixPkgs = importNixpkgs { flake = agenix-flake; }; - pepePkgs = pepeflake.packages.${system} // pepeflake.legacyPackages.${system} or { }; - langtoolPkgs = langtool-ngrams.packages.${system} // 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; }) - ]; - in - import nixpkgs { - inherit system config; - overlays = additionalOverlays ++ extOverlays ++ [ - (final: prev: { - ctranslate2 = prev.ctranslate2.override { - withCUDA = true; - withCuDNN = true; - }; - }) - ]; + mkSystem = (import ./lib/systems.nix { + inherit nixpkgs; + inputs = { + inherit nixos-unstable nixpkgs-master local-unstable + agenix-flake pepeflake langtool-ngrams + nvidia-patch home-manager; }; + }).mkSystem; - wrapUtils = { pkgs }: - let - inherit (pkgs.lib) makeScope; - inherit (pkgs) newScope; - in - makeScope newScope (self: rec { - inherit nixpkgs home-manager nixos-unstable; - inherit (self.callPackage ./lib/utils.nix { }) mkSysRole mkHomeRole; - inherit (user) mkUser; - - user = self.callPackage ./lib/user.nix { }; - host = self.callPackage ./lib/host.nix { }; - }); - - - pkgsLinuxX64Cuda = wrapPkgsSystem { system = sysLinuxX64; cudaSupport = true; }; - utilsLinuxX64Cuda = wrapUtils { pkgs = pkgsLinuxX64Cuda; }; - - pkgsLinuxAarch = wrapPkgsSystem { system = sysLinuxAarch; }; - utilsLinuxAarch = wrapUtils { pkgs = pkgsLinuxAarch; }; - - pkgsDarwin = wrapPkgsSystem { system = sysDarwin; }; - utilsDarwin = wrapUtils { pkgs = pkgsDarwin; }; + linuxX64Cuda = mkSystem { system = sysLinuxX64; cudaSupport = true; }; + linuxAarch = mkSystem { system = sysLinuxAarch; }; + darwin = mkSystem { system = sysDarwin; }; in { nixosConfigurations = { - architect = utilsLinuxX64Cuda.host.mkHost { + architect = linuxX64Cuda.utils.host.mkHost { name = "architect"; users = [{ user = "giulio"; @@ -129,27 +63,27 @@ }; homeConfigurations = { - giulioMac = utilsDarwin.user.mkHMUser { + giulioMac = darwin.utils.user.mkHMUser { name = "giulio"; roles = [ "ssh" ]; }; - gdepasqualeMac = utilsDarwin.user.mkHMUser { + gdepasqualeMac = darwin.utils.user.mkHMUser { name = "gdepasquale"; roles = [ "ssh" ]; }; - giulioAarch = utilsLinuxAarch.user.mkHMUser { + giulioAarch = linuxAarch.utils.user.mkHMUser { name = "giulio"; roles = [ "ssh" ]; }; - giulioX64 = utilsLinuxX64Cuda.user.mkHMUser { + giulioX64 = linuxX64Cuda.utils.user.mkHMUser { name = "giulio"; roles = [ "ssh" "go" ]; }; - giulioX64NoSSH = utilsLinuxX64Cuda.user.mkHMUser { + giulioX64NoSSH = linuxX64Cuda.utils.user.mkHMUser { name = "giulio"; roles = [ "go" ]; }; - gdepasqualeX64 = utilsLinuxX64Cuda.user.mkHMUser { + gdepasqualeX64 = linuxX64Cuda.utils.user.mkHMUser { name = "gdepasquale"; roles = [ "ssh" "go" ]; }; diff --git a/lib/systems.nix b/lib/systems.nix new file mode 100644 index 0000000..7ce16f0 --- /dev/null +++ b/lib/systems.nix @@ -0,0 +1,72 @@ +{ 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; } \ No newline at end of file