self: super: let mkExDrv = emacsPackages: name: args: let repoMeta = super.lib.importJSON (../repos/exwm/. + "/${name}.json"); in emacsPackages.melpaBuild ( args // { pname = name; ename = name; version = repoMeta.version; commit = repoMeta.rev; recipe = builtins.toFile "recipe" '' (${name} :fetcher github :repo "ch11ng/${name}") ''; src = super.fetchFromGitHub { owner = "ch11ng"; repo = name; inherit (repoMeta) rev sha256; }; } ); in { emacsPackagesFor = emacs: ( (super.emacsPackagesFor emacs).overrideScope' ( eself: esuper: let melpaStablePackages = esuper.melpaStablePackages.override { archiveJson = ../repos/melpa/recipes-archive-melpa.json; }; melpaPackages = esuper.melpaPackages.override { archiveJson = ../repos/melpa/recipes-archive-melpa.json; }; elpaPackages = esuper.elpaPackages.override { generated = ../repos/elpa/elpa-generated.nix; }; nongnuPackages = esuper.nongnuPackages.override { generated = ../repos/nongnu/nongnu-generated.nix; }; epkgs = esuper.override { inherit melpaStablePackages melpaPackages elpaPackages nongnuPackages; }; in epkgs // { xelb = mkExDrv eself "xelb" { packageRequires = [ eself.cl-generic eself.emacs ]; }; exwm = mkExDrv eself "exwm" { packageRequires = [ eself.xelb ]; }; } ) ); }