about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix')
-rw-r--r--nixpkgs/pkgs/applications/editors/emacs-modes/libgenerated.nix95
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;
+
+}