{ # self, pkgs ? import { }, wrapper-manager, # system, }: let recursiveMerge = with pkgs.lib; attrList: let f = attrPath: zipAttrsWith ( n: values: if tail values == [ ] then head values else if all isList values then unique (concatLists values) else if all isAttrs values then f (attrPath ++ [ n ]) values else last values ); in f [ ] attrList; callPackage = pkgs.lib.callPackageWith (recursiveMerge [ pkgs packages ]); packages = { python3Packages = { ascii = callPackage ./pkgs/python3Packages/ascii.nix { }; pyease-grpc = callPackage ./pkgs/python3Packages/pyease-grpc.nix { }; pyexecjs = callPackage ./pkgs/python3Packages/pyexecjs.nix { }; }; sorremacs = callPackage ./pkgs/sorremacs { }; lightnovel-crawler = callPackage ./pkgs/lightnovel-crawler.nix { }; firefox = callPackage ./pkgs/firefox.nix { }; } // wrappers; wm-eval = wrapper-manager.lib { inherit pkgs; modules = [ ./wrappers/gallery-dl ./wrappers/jujutsu ./wrappers/helix ./wrappers/signal.nix ]; }; wrappers = wm-eval.config.build.packages; # archpkgs = import ./archpkgs.nix { # inherit # self # pkgs # wrappers # system # ; # }; in { lib = import ./lib { inherit pkgs; }; modules = import ./modules; overlays = import ./overlays; } // packages