81 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   description = "Scuggo Pkgs";
 | |
| 
 | |
|   inputs = {
 | |
|     nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
 | |
|     flake-utils.url = "github:numtide/flake-utils";
 | |
|   };
 | |
| 
 | |
|   outputs =
 | |
|     {
 | |
|       self,
 | |
|       nixpkgs,
 | |
|       flake-utils,
 | |
|     }@inputs:
 | |
| 
 | |
|     {
 | |
|       overlays.default =
 | |
|         final: prev: ((import "${nixpkgs}/pkgs/top-level/by-name-overlay.nix" ./pkgs/by-name) final prev);
 | |
|     }
 | |
|     //
 | |
|       flake-utils.lib.eachSystem
 | |
|         [
 | |
|           "x86_64-linux"
 | |
|           "aarch64-linux"
 | |
|         ]
 | |
|         (
 | |
|           system:
 | |
|           let
 | |
|             pkgs = import nixpkgs {
 | |
|               inherit system;
 | |
|             };
 | |
|             inherit (pkgs) lib;
 | |
|             scope = lib.makeScope pkgs.newScope (final: self.overlays.default (pkgs // final) pkgs);
 | |
|             recursePackage =
 | |
|               name: pkg:
 | |
|               let
 | |
|                 isDrv = lib.isDerivation pkg;
 | |
|                 isAttrs = lib.isAttrs pkg;
 | |
|                 isSameSystem = lib.meta.availableOn pkgs.stdenv.hostPlatform pkg;
 | |
|               in
 | |
|               if !isSameSystem then
 | |
|                 [ ]
 | |
|               else if isDrv then
 | |
|                 [
 | |
|                   (lib.nameValuePair name pkg)
 | |
|                 ]
 | |
|               else if isAttrs then
 | |
|                 lib.mapAttrsToList (nameNew: subPkg: recursePackage "${name}-${nameNew}" subPkg) pkg
 | |
|               else
 | |
|                 [ ];
 | |
|             flatPackages = builtins.listToAttrs (
 | |
|               lib.lists.flatten (lib.mapAttrsToList (name: pkg: recursePackage name pkg) scope)
 | |
|             );
 | |
|             workingPackages = lib.filterAttrs (_: pkg: !pkg.meta.broken) flatPackages;
 | |
|             # Disable for now
 | |
|             # recursePackageSets =
 | |
|             #   pkg:
 | |
|             #   let
 | |
|             #     isDrv = lib.isDerivation pkg;
 | |
|             #     isAttrs = lib.isAttrs pkg;
 | |
|             #     isSameSystem = lib.meta.availableOn pkgs.stdenv.hostPlatform pkg;
 | |
|             #   in
 | |
|             #   if isDrv && isSameSystem then
 | |
|             #     pkg
 | |
|             #   else if isAttrs then
 | |
|             #     lib.mapAttrs (_: subPkg: recursePackageSets subPkg) pkg
 | |
|             #   else
 | |
|             #     null;
 | |
|             #
 | |
|             # # Recursively filter out nulls and remove overrides (probably a btter way to do this but it works for now)
 | |
|             # packageSets = lib.filterAttrsRecursive (k: v: v != null && k != "override") (
 | |
|             #   lib.mapAttrs (name: pkg: recursePackageSets pkg) scope
 | |
|             # );
 | |
|           in
 | |
|           {
 | |
|             packages = flatPackages;
 | |
|             checks = lib.mapAttrs' (n: lib.nameValuePair "package-${n}") workingPackages;
 | |
|           }
 | |
|         );
 | |
| }
 |