diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix b/nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix new file mode 100644 index 000000000000..2ddafc4796c0 --- /dev/null +++ b/nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix @@ -0,0 +1,95 @@ +lib: self: + +let + + fetcherGenerators = { repo ? null + , url ? null + , ... }: + { sha256 + , commit + , ...}: { + github = self.callPackage ({ fetchFromGitHub }: + fetchFromGitHub { + owner = lib.head (lib.splitString "/" repo); + repo = lib.head (lib.tail (lib.splitString "/" repo)); + rev = commit; + inherit sha256; + } + ) {}; + gitlab = self.callPackage ({ fetchFromGitLab }: + fetchFromGitLab { + owner = lib.head (lib.splitString "/" repo); + repo = lib.head (lib.tail (lib.splitString "/" repo)); + rev = commit; + inherit sha256; + } + ) {}; + git = self.callPackage ({ fetchgit }: + (fetchgit { + rev = commit; + inherit sha256 url; + }).overrideAttrs(_: { + GIT_SSL_NO_VERIFY = true; + }) + ) {}; + bitbucket = self.callPackage ({ fetchhg }: + fetchhg { + rev = commit; + url = "https://bitbucket.com/${repo}"; + inherit sha256; + } + ) {}; + hg = self.callPackage ({ fetchhg }: + fetchhg { + rev = commit; + inherit sha256 url; + } + ) {}; + }; + +in { + + melpaDerivation = variant: + { ename, fetcher + , commit ? null + , sha256 ? null + , ... }@args: + let + sourceArgs = args.${variant}; + version = sourceArgs.version or null; + deps = sourceArgs.deps or null; + error = sourceArgs.error or args.error or null; + hasSource = lib.hasAttr variant args; + pname = builtins.replaceStrings [ "@" ] [ "at" ] ename; + broken = ! isNull error; + in + if hasSource then + lib.nameValuePair ename ( + self.callPackage ({ melpaBuild, fetchurl, ... }@pkgargs: + melpaBuild { + inherit pname; + ename = ename; + version = if isNull version then "" else + lib.concatStringsSep "." (map toString version); + # TODO: Broken should not result in src being null (hack to avoid eval errors) + src = if (isNull sha256 || broken) then null else + lib.getAttr fetcher (fetcherGenerators args sourceArgs); + recipe = if isNull commit then null else + fetchurl { + name = pname + "-recipe"; + url = "https://raw.githubusercontent.com/melpa/melpa/${commit}/recipes/${ename}"; + inherit sha256; + }; + packageRequires = lib.optionals (! isNull deps) + (map (dep: pkgargs.${dep} or self.${dep} or null) + deps); + meta = (sourceArgs.meta or {}) // { + inherit broken; + }; + } + ) {} + ) + else + null; + +} |