summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/applications/editors/emacs-24/packages/melpa.nix104
-rw-r--r--pkgs/build-support/melpa/default.nix104
-rw-r--r--pkgs/build-support/melpa/melpa2nix.el (renamed from pkgs/applications/editors/emacs-24/packages/melpa2nix.el)0
-rw-r--r--pkgs/build-support/melpa/setup-hook.sh (renamed from pkgs/applications/editors/emacs-24/packages/setup-hook.sh)0
-rw-r--r--pkgs/top-level/all-packages.nix2
-rw-r--r--pkgs/top-level/emacs-melpa-packages.nix (renamed from pkgs/applications/editors/emacs-24/packages/default.nix)416
6 files changed, 341 insertions, 285 deletions
diff --git a/pkgs/applications/editors/emacs-24/packages/melpa.nix b/pkgs/applications/editors/emacs-24/packages/melpa.nix
deleted file mode 100644
index 23db8f1c5a3..00000000000
--- a/pkgs/applications/editors/emacs-24/packages/melpa.nix
+++ /dev/null
@@ -1,104 +0,0 @@
-# generic builder for Emacs packages
-
-{ stdenv, fetchurl, emacs, texinfo
-, extension ? (self : super : {})
-}:
-
-let
-  enableFeature         = stdenv.lib.enableFeature;
-  versionOlder          = stdenv.lib.versionOlder;
-  optional              = stdenv.lib.optional;
-  optionals             = stdenv.lib.optionals;
-  optionalString        = stdenv.lib.optionalString;
-  filter                = stdenv.lib.filter;
-  
-  packageBuild          = fetchurl {
-    url = https://raw.githubusercontent.com/milkypostman/melpa/12a862e5c5c62ce627dab83d7cf2cca6e8b56c47/package-build.el;
-    sha256 = "1nviyyprypz7nmam9rwli4yv3kxh170glfbznryrp4czxkrjjdhk";
-  };
-
-in
-
-{
-  mkDerivation =
-    args : # arguments for the individual package, can modify the defaults
-    let # Stuff happening after the user preferences have been processed. We remove
-        # internal attributes and strip null elements from the dependency lists, all
-        # in the interest of keeping hashes stable.
-        postprocess =
-          x : x // {
-                buildInputs           = filter (y : ! (y == null)) x.buildInputs;
-                propagatedBuildInputs = filter (y : ! (y == null)) x.propagatedBuildInputs;
-                propagatedUserEnvPkgs = filter (y : ! (y == null)) x.propagatedUserEnvPkgs;
-                doCheck               = x.doCheck;
-              };
-
-        defaults =
-          self : { # self is the final version of the attribute set
-
-            # pname should be defined by the client to be the package basename
-            # version should be defined by the client to be the package version
-
-            # fname is the internal full name of the package
-            fname = "${self.pname}-${self.version}";
-
-            # name is the external full name of the package; usually we prefix
-            # all packages with emacs- to avoid name clashes for libraries;
-            # if that is not desired (for applications), name can be set to
-            # fname.
-            name = "emacs-${self.pname}-${self.version}";
-
-
-            buildInputs = [emacs texinfo] ++ self.packageRequires;
-
-            propagatedBuildInputs = self.packageRequires;
-
-            propagatedUserEnvPkgs = self.packageRequires;
-
-            packageRequires = [];
-
-            doCheck = false;
-
-            files = [];
-
-            setupHook = ./setup-hook.sh;
-
-            fileSpecs = [ "*.el" "*.el.in" "dir"
-                          "*.info" "*.texi" "*.texinfo"
-                          "doc/dir" "doc/*.info" "doc/*.texi" "doc/*.texinfo"
-                        ];
-
-            targets = stdenv.lib.concatStringsSep " " 
-                        (if self.files == []
-                         then self.fileSpecs
-                         else self.files);
-
-            buildPhase = ''
-              eval "$preBuild"
-
-              emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \
-                -f melpa2nix-build-package \
-                ${self.pname} ${self.version} ${self.targets}
-
-              eval "$postBuild"
-            '';
-
-            installPhase = ''
-              eval "$preInstall"
-
-              emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \
-                -f melpa2nix-install-package \
-                ${self.fname}.* $out/share/emacs/site-lisp/elpa
-
-              eval "$postInstall"
-            '';
-
-            # We inherit stdenv and emacs so that they can be used
-            # in melpa derivations.
-            inherit stdenv emacs texinfo packageBuild;
-          };
-    in
-    stdenv.mkDerivation (postprocess (let super = defaults self // args self;
-                                          self  = super // extension self super;
-                                      in self));
-}
diff --git a/pkgs/build-support/melpa/default.nix b/pkgs/build-support/melpa/default.nix
new file mode 100644
index 00000000000..11cb14f93db
--- /dev/null
+++ b/pkgs/build-support/melpa/default.nix
@@ -0,0 +1,104 @@
+# generic builder for Emacs packages
+
+{ stdenv, fetchurl, emacs, texinfo
+, extension ? (self : super : {})
+}:
+
+{ pname
+, version
+, src
+, packageRequires ? []
+, extraBuildInputs ? []
+
+, files ? null
+, fileSpecs ? [ "*.el" "*.el.in" "dir"
+                "*.info" "*.texi" "*.texinfo"
+                "doc/dir" "doc/*.info" "doc/*.texi" "doc/*.texinfo"
+              ]
+
+, meta ? {}
+
+, preUnpack ? "", postUnpack ? ""
+, patches ? [], patchPhase ? "", prePatch ? "", postPatch ? ""
+, configureFlags ? [], preConfigure ? "", postConfigure ? ""
+, buildPhase ? "", preBuild ? "", postBuild ? ""
+, preInstall ? "", postInstall ? ""
+, doCheck ? false, checkPhase ? "", preCheck ? "", postCheck ? ""
+, preFixup ? "", postFixup ? ""
+}:
+
+let
+  inherit (stdenv.lib) concatStringsSep optionalAttrs;
+
+  packageBuild          = fetchurl {
+    url = https://raw.githubusercontent.com/milkypostman/melpa/12a862e5c5c62ce627dab83d7cf2cca6e8b56c47/package-build.el;
+    sha256 = "1nviyyprypz7nmam9rwli4yv3kxh170glfbznryrp4czxkrjjdhk";
+  };
+
+  fname = "${pname}-${version}";
+
+  targets = concatStringsSep " " (if files == null then fileSpecs else files);
+
+  defaultMeta = {
+    broken = false;
+    homepage = "http://melpa.org/#/${pname}";
+    platforms = emacs.meta.platforms;
+  };
+
+in
+
+stdenv.mkDerivation ({
+  name = "emacs-${fname}";
+
+  inherit src packageBuild;
+
+  buildInputs = [emacs texinfo] ++ packageRequires ++ extraBuildInputs;
+  propagatedBuildInputs = packageRequires;
+  propagatedUserEnvPkgs = packageRequires;
+
+  setupHook = ./setup-hook.sh;
+
+  buildPhase = ''
+    runHook preBuild
+
+    emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \
+      -f melpa2nix-build-package \
+      ${pname} ${version} ${targets}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    emacs --batch -Q -l $packageBuild -l ${./melpa2nix.el} \
+      -f melpa2nix-install-package \
+      ${fname}.* $out/share/emacs/site-lisp/elpa
+
+    runHook postInstall
+  '';
+
+  meta = defaultMeta // meta;
+}
+
+// optionalAttrs (preUnpack != "")      { inherit preUnpack; }
+// optionalAttrs (postUnpack != "")     { inherit postUnpack; }
+// optionalAttrs (configureFlags != []) { inherit configureFlags; }
+// optionalAttrs (patches != [])        { inherit patches; }
+// optionalAttrs (patchPhase != "")     { inherit patchPhase; }
+// optionalAttrs (prePatch != "")       { inherit prePatch; }
+// optionalAttrs (postPatch != "")      { inherit postPatch; }
+// optionalAttrs (preConfigure != "")   { inherit preConfigure; }
+// optionalAttrs (postConfigure != "")  { inherit postConfigure; }
+// optionalAttrs (buildPhase != "")     { inherit buildPhase; }
+// optionalAttrs (preBuild != "")       { inherit preBuild; }
+// optionalAttrs (postBuild != "")      { inherit postBuild; }
+// optionalAttrs (doCheck)              { inherit doCheck; }
+// optionalAttrs (checkPhase != "")     { inherit checkPhase; }
+// optionalAttrs (preCheck != "")       { inherit preCheck; }
+// optionalAttrs (postCheck != "")      { inherit postCheck; }
+// optionalAttrs (preInstall != "")     { inherit preInstall; }
+// optionalAttrs (postInstall != "")    { inherit postInstall; }
+// optionalAttrs (preFixup != "")       { inherit preFixup; }
+// optionalAttrs (postFixup != "")      { inherit postFixup; }
+)
diff --git a/pkgs/applications/editors/emacs-24/packages/melpa2nix.el b/pkgs/build-support/melpa/melpa2nix.el
index d54e9d21e25..d54e9d21e25 100644
--- a/pkgs/applications/editors/emacs-24/packages/melpa2nix.el
+++ b/pkgs/build-support/melpa/melpa2nix.el
diff --git a/pkgs/applications/editors/emacs-24/packages/setup-hook.sh b/pkgs/build-support/melpa/setup-hook.sh
index defef45b55f..defef45b55f 100644
--- a/pkgs/applications/editors/emacs-24/packages/setup-hook.sh
+++ b/pkgs/build-support/melpa/setup-hook.sh
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6d3c8729956..4af8f9143c8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -9908,7 +9908,7 @@ let
   });
   emacs24Macport = self.emacs24Macport_24_4;
 
-  emacsMelpa = import ../applications/editors/emacs-24/packages {
+  emacsMelpa = import ./emacs-melpa-packages.nix {
     inherit stdenv pkgs fetchurl fetchgit fetchFromGitHub emacs texinfo;
     external = {
       inherit (haskellngPackages) ghc-mod structured-haskell-mode;
diff --git a/pkgs/applications/editors/emacs-24/packages/default.nix b/pkgs/top-level/emacs-melpa-packages.nix
index 8b757621238..e8f965a784a 100644
--- a/pkgs/applications/editors/emacs-24/packages/default.nix
+++ b/pkgs/top-level/emacs-melpa-packages.nix
@@ -13,91 +13,98 @@
 #       package-user-dir "~/.nix-profile/share/emacs/site-lisp/elpa")
 # (package-initialize)
 
+with stdenv.lib.licences;
 
 let
-  melpa = import ./melpa.nix { 
+  melpaBuild = import ../build-support/melpa {
     inherit stdenv fetchurl emacs texinfo;
   };
 in
 
 rec {
-  ac-haskell-process = melpa.mkDerivation (self: {
+  ac-haskell-process = melpaBuild rec {
     pname   = "ac-haskell-process";
     version = "0.5";
     src = fetchFromGitHub {
       owner  = "purcell";
-      repo   = self.pname;
-      rev    = self.version;
+      repo   = pname;
+      rev    = version;
       sha256 = "0dlrhc1dmzgrjvcnlqvm6clyv0r6zray6qqliqngy14880grghbm";
     };
     packageRequires = [ auto-complete haskell-mode ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  ace-jump-mode = melpa.mkDerivation (self: {
+  ace-jump-mode = melpaBuild rec {
     pname   = "ace-jump-mode";
     version = "20140616";
     src = fetchFromGitHub {
       owner  = "winterTTr";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac";
       sha256 = "17axrgd99glnl6ma4ls3k01ysdqmiqr581wnrbsn3s4gp53mm2x6";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  ag = melpa.mkDerivation (self: {
+  ag = melpaBuild rec {
     pname   = "ag";
     version = "0.44";
     src = fetchFromGitHub {
       owner  = "Wilfred";
-      repo   = "${self.pname}.el";
-      rev    = self.version;
+      repo   = "${pname}.el";
+      rev    = version;
       sha256 = "19y5w9m2flp4as54q8yfngrkri3kd7fdha9pf2xjgx6ryflqx61k";
     };
     packageRequires = [ dash s ];
-  });
-  
-  async = melpa.mkDerivation (self: {
+    meta = { licence = gpl3Plus; };
+  };
+
+  async = melpaBuild rec {
     pname   = "async";
     version = "1.2";
     src = fetchFromGitHub {
       owner  = "jwiegley";
       repo   = "emacs-async";
-      rev    = "v${self.version}";
+      rev    = "v${version}";
       sha256 = "1j6mbvvbnm2m1gpsy9ipxiv76b684nn57yssbqdyiwyy499cma6q";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  auctex = melpa.mkDerivation (self: {
+  auctex = melpaBuild rec {
     pname   = "auctex";
     version = "11.87.7";
     src = fetchurl {
-      url    = "http://elpa.gnu.org/packages/${self.fname}.tar";
+      url    = "http://elpa.gnu.org/packages/${pname}-${version}.tar";
       sha256 = "07bhw8zc3d1f2basjy80njmxpsp4f70kg3ynkch9ghlai3mm2b7n";
     };
     buildPhase = ''
-      cp $src ${self.fname}.tar
+      cp $src ${pname}-${version}.tar
     '';
-  });
-  
-  auto-complete = melpa.mkDerivation (self: {
+    meta = { licence = gpl3Plus; };
+  };
+
+  auto-complete = melpaBuild rec {
     pname = "auto-complete";
     version = "1.4.0";
     src = fetchFromGitHub {
-      owner = self.pname;
-      repo  = self.pname;
-      rev   = "v${self.version}";
+      owner = pname;
+      repo  = pname;
+      rev   = "v${version}";
       sha256 = "050lb8qjq7ra35mqp6j6qkwbvq5zj3yhz73aym5kf1vjd42rmjcw";
     };
     packageRequires = [ popup ];
+
     meta = {
       description = "Auto-complete extension for Emacs";
       homepage = http://cx4a.org/software/auto-complete/;
-      license = stdenv.lib.licenses.gpl3Plus;
+      license = gpl3Plus;
       platforms = stdenv.lib.platforms.all;
     };
-  });
+  };
 
-  bind-key = melpa.mkDerivation (self: {
+  bind-key = melpaBuild {
     pname   = "bind-key";
     version = "20141013";
     src = fetchFromGitHub {
@@ -107,102 +114,111 @@ rec {
       sha256 = "1m4v5h52brg2g9rpbqfq9m3m8fv520vg5mjwppnbw6099d17msqd";
     };
     files = [ "bind-key.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  change-inner = melpa.mkDerivation (self: {
+  change-inner = melpaBuild rec {
     pname   = "change-inner";
     version = "20130208";
     src = fetchFromGitHub {
       owner  = "magnars";
-      repo   = "${self.pname}.el";
+      repo   = "${pname}.el";
       rev    = "6374b745ee1fd0302ad8596cdb7aca1bef33a730";
       sha256 = "1fv8630bqbmfr56zai08f1q4dywksmghhm70084bz4vbs6rzdsbq";
     };
     packageRequires = [ expand-region ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  circe = melpa.mkDerivation (self: {
+  circe = melpaBuild rec {
     pname   = "circe";
     version = "1.5";
     src = fetchFromGitHub {
       owner  = "jorgenschaefer";
       repo   = "circe";
-      rev    = "v${self.version}";
+      rev    = "v${version}";
       sha256 = "08dsv1dzgb9jx076ia7xbpyjpaxn1w87h6rzlb349spaydq7ih24";
     };
     packageRequires = [ lcs lui ];
     fileSpecs = [ "lisp/circe*.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  company-mode = melpa.mkDerivation (self: {
-    pname   = "company-mode";
+  company = melpaBuild rec {
+    pname   = "company";
     version = "0.8.6";
     src = fetchFromGitHub {
       owner  = "company-mode";
       repo   = "company-mode";
-      rev    = self.version;
+      rev    = version;
       sha256 = "1xwxyqg5dan8m1qkdxyzm066ryf24h07karpdlm3s09izfdny33f";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  dash = melpa.mkDerivation (self: {
+  dash = melpaBuild rec {
     pname   = "dash";
     version = "2.9.0";
     src = fetchFromGitHub {
       owner  = "magnars";
-      repo   = "${self.pname}.el";
-      rev    = self.version;
+      repo   = "${pname}.el";
+      rev    = version;
       sha256 = "1lg31s8y6ljsz6ps765ia5px39wim626xy8fbc4jpk8fym1jh7ay";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  diminish = melpa.mkDerivation (self: {
+  diminish = melpaBuild rec {
     pname   = "diminish";
     version = "0.44";
     src = fetchFromGitHub {
       owner  = "emacsmirror";
-      repo   = self.pname;
-      rev    = self.version;
+      repo   = pname;
+      rev    = version;
       sha256 = "0hshw7z5f8pqxvgxw74kbj6nvprsgfvy45fl854xarnkvqcara09";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  epl = melpa.mkDerivation (self: {
+  epl = melpaBuild rec {
     pname   = "epl";
     version = "20140823";
     src = fetchFromGitHub {
       owner  = "cask";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "63c78c08e345455f3d4daa844fdc551a2c18024e";
       sha256 = "04a2aq8dj2cmy77vw142wcmnjvqdbdsp6z0psrzz2qw0b0am03li";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  evil-god-state = melpa.mkDerivation (self: {
+  evil-god-state = melpaBuild rec {
     pname   = "evil-god-state";
     version = "20140830";
     src = fetchFromGitHub {
       owner  = "gridaphobe";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "234a9b6f500ece89c3dfb5c1df5baef6963e4566";
       sha256 = "16v6dpw1hibrkf9hga88gv5axvp1pajd67brnh5h4wpdy9qvwgyy";
     };
     packageRequires = [ evil god-mode ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  evil-surround = melpa.mkDerivation (self: {
+  evil-surround = melpaBuild rec {
     pname   = "evil-surround";
     version = "20140616";
     src = fetchFromGitHub {
       owner  = "timcharper";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "71f380b6b6ed38f739c0a4740b3d6de0c52f915a";
       sha256 = "0wrmlmgr4mwxlmmh8blplddri2lpk4g8k3l1vpb5c6a975420qvn";
     };
     packageRequires = [ evil ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  evil = melpa.mkDerivation (self: {
+  evil = melpaBuild {
     pname   = "evil";
     version = "20141020";
     src = fetchgit {
@@ -211,122 +227,133 @@ rec {
       sha256 = "0yiqpzsm5sr7xdkixdvfg312dk9vsdcmj69gizk744d334yn8rsz";
     };
     packageRequires = [ goto-chg undo-tree ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  exec-path-from-shell = melpa.mkDerivation (self: {
+  exec-path-from-shell = melpaBuild rec {
     pname   = "exec-path-from-shell";
     version = "20141022";
     src = fetchFromGitHub {
       owner  = "purcell";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "e4af0e9b44738e7474c89ed895200b42e6541515";
       sha256 = "0lxikiqf1jik88lf889q4f4f8kdgg3npciz298x605nhbfd5snbd";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  expand-region = melpa.mkDerivation (self: {
+  expand-region = melpaBuild rec {
     pname   = "expand-region";
     version = "20141012";
     src = fetchFromGitHub {
       owner  = "magnars";
-      repo   = "${self.pname}.el";
+      repo   = "${pname}.el";
       rev    = "fa413e07c97997d950c92d6012f5442b5c3cee78";
       sha256 = "04k0518wfy72wpzsswmncnhd372fxa0r8nbfhmbyfmns8n7sr045";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  flycheck-pos-tip = melpa.mkDerivation (self: {
+  flycheck-pos-tip = melpaBuild rec {
     pname   = "flycheck-pos-tip";
     version = "20140813";
     src = fetchFromGitHub {
       owner  = "flycheck";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "5b3a203bbdb03e4f48d1654efecd71f44376e199";
       sha256 = "0b4x24aq0jh4j4bjv0fqyaz6hzh3gqf57k9763jj9rl32cc3dpnp";
     };
     packageRequires = [ flycheck popup ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  flycheck = melpa.mkDerivation (self: {
+  flycheck = melpaBuild rec {
     pname   = "flycheck";
     version = "0.20";
     src = fetchFromGitHub {
-      owner  = self.pname;
-      repo   = self.pname;
-      rev    = self.version;
+      owner  = pname;
+      repo   = pname;
+      rev    = version;
       sha256 = "0cq7y7ssm6phvx5pfv2yqq4j0yqmm0lhjav7v4a8ql7094cd790a";
     };
     packageRequires = [ dash pkg-info ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  ghc-mod = melpa.mkDerivation (self: {
+  ghc-mod = melpaBuild rec {
     pname = "ghc";
     version = external.ghc-mod.version;
     src = external.ghc-mod.src;
     fileSpecs = [ "elisp/*.el" ];
-  });
+    meta = { licence = bsd3; };
+  };
 
-  git-commit-mode = melpa.mkDerivation (self: {
+  git-commit-mode = melpaBuild rec {
     pname = "git-commit-mode";
     version = "0.15.0";
     src = fetchFromGitHub {
       owner  = "magit";
       repo   = "git-modes";
-      rev    = self.version;
+      rev    = version;
       sha256 = "1x03276yq63cddc89n8i47k1f6p26b7a5la4hz66fdf15gmr8496";
     };
     files = [ "git-commit-mode.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  git-rebase-mode = melpa.mkDerivation (self: {
+  git-rebase-mode = melpaBuild rec {
     pname = "git-rebase-mode";
     version = "0.15.0";
     src = fetchFromGitHub {
       owner  = "magit";
       repo   = "git-modes";
-      rev    = self.version;
+      rev    = version;
       sha256 = "1x03276yq63cddc89n8i47k1f6p26b7a5la4hz66fdf15gmr8496";
     };
     files = [ "git-rebase-mode.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  gitattributes-mode = melpa.mkDerivation (self: {
+  gitattributes-mode = melpaBuild rec {
     pname = "gitattributes-mode";
     version = "0.15.0";
     src = fetchFromGitHub {
       owner  = "magit";
       repo   = "git-modes";
-      rev    = self.version;
+      rev    = version;
       sha256 = "1x03276yq63cddc89n8i47k1f6p26b7a5la4hz66fdf15gmr8496";
     };
     files = [ "gitattributes-mode.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  gitconfig-mode = melpa.mkDerivation (self: {
+  gitconfig-mode = melpaBuild rec {
     pname = "gitconfig-mode";
     version = "0.15.0";
     src = fetchFromGitHub {
       owner  = "magit";
       repo   = "git-modes";
-      rev    = self.version;
+      rev    = version;
       sha256 = "1x03276yq63cddc89n8i47k1f6p26b7a5la4hz66fdf15gmr8496";
     };
     files = [ "gitconfig-mode.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  gitignore-mode = melpa.mkDerivation (self: {
+  gitignore-mode = melpaBuild rec {
     pname = "gitignore-mode";
     version = "0.15.0";
     src = fetchFromGitHub {
       owner  = "magit";
       repo   = "git-modes";
-      rev    = self.version;
+      rev    = version;
       sha256 = "1x03276yq63cddc89n8i47k1f6p26b7a5la4hz66fdf15gmr8496";
     };
     files = [ "gitignore-mode.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  gnus = melpa.mkDerivation (self: {
+  gnus = melpaBuild rec {
     pname   = "gnus";
     version = "20140501";
     src = fetchgit {
@@ -338,20 +365,22 @@ rec {
     preBuild = ''
       (cd lisp && make gnus-load.el)
     '';
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  god-mode = melpa.mkDerivation (self: {
+  god-mode = melpaBuild rec {
     pname   = "god-mode";
     version = "20140811";
     src = fetchFromGitHub {
       owner  = "chrisdone";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "6b7ae259a58ca1d7776aa4eca9f1092e4c0033e6";
       sha256 = "1amr98nq82g2d3f3f5wlqm9g38j64avygnsi9rrlbfqz4f71vq7x";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  goto-chg = melpa.mkDerivation (self: {
+  goto-chg = melpaBuild rec {
     pname   = "goto-chg";
     version = "1.6";
     src = fetchgit {
@@ -360,92 +389,100 @@ rec {
       sha256 = "0yiqpzsm5sr7xdkixdvfg312dk9vsdcmj69gizk744d334yn8rsz";
     };
     files = [ "lib/goto-chg.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  haskell-mode = melpa.mkDerivation (self: {
+  haskell-mode = melpaBuild rec {
     pname   = "haskell-mode";
     version = "20150101";
     src = fetchFromGitHub {
       owner  = "haskell";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "0db5efaaeb3b22e5a3fdafa600729e14c1716ee2";
       sha256 = "0d63cgzj579cr8zbrnl0inyy35b26sxinqxr7bgrjsngpmhm52an";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  helm-swoop = melpa.mkDerivation (self: {
+  helm-swoop = melpaBuild rec {
     pname   = "helm-swoop";
     version = "20141224";
     src = fetchFromGitHub {
       owner  = "ShingoFukuyama";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "06a251f7d7fce2a5719e0862e5855972cd8ab1ae";
       sha256 = "0nq33ldhbvfbm6jnsxqdf3vwaqrsr2gprkzll081gcyl2s1x0l2m";
     };
     packageRequires = [ helm ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  helm = melpa.mkDerivation (self: {
+  helm = melpaBuild rec {
     pname   = "helm";
     version = "20150105";
     src = fetchFromGitHub {
       owner  = "emacs-helm";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "e5608ad86e7ca72446a4b1aa0faf604200ffe895";
       sha256 = "0n2kr6pyzcsi8pq6faxz2y8kicz1gmvj98fzzlq3a107dqqp25ay";
     };
     packageRequires = [ async ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  hi2 = melpa.mkDerivation (self: {
+  hi2 = melpaBuild rec {
     pname   = "hi2";
     version = "1.0";
     src = fetchFromGitHub {
       owner  = "nilcons";
-      repo   = self.pname;
-      rev    = self.version;
+      repo   = pname;
+      rev    = version;
       sha256 = "1s08sgbh5v59lqskd0s1dscs6dy7z5mkqqkabs3gd35agbfvbmlf";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  idris-mode = melpa.mkDerivation (self: {
+  idris-mode = melpaBuild rec {
     pname   = "idris-mode";
     version = "0.9.15";
     src = fetchFromGitHub {
       owner  = "idris-hackers";
       repo   = "idris-mode";
-      rev    = self.version;
+      rev    = version;
       sha256 = "00pkgk1zxan89i8alsa2dpa9ls7imqk5zb1kbjwzrlbr0gk4smdb";
     };
     packageRequires = [ flycheck ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  lcs = melpa.mkDerivation (self: {
+  lcs = melpaBuild rec {
     pname   = "lcs";
     version = "1.5";
     src = fetchFromGitHub {
       owner  = "jorgenschaefer";
       repo   = "circe";
-      rev    = "v${self.version}";
+      rev    = "v${version}";
       sha256 = "08dsv1dzgb9jx076ia7xbpyjpaxn1w87h6rzlb349spaydq7ih24";
     };
     fileSpecs = [ "lisp/lcs*.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  lui = melpa.mkDerivation (self: {
+  lui = melpaBuild rec {
     pname   = "lui";
     version = "1.5";
     src = fetchFromGitHub {
       owner  = "jorgenschaefer";
       repo   = "circe";
-      rev    = "v${self.version}";
+      rev    = "v${version}";
       sha256 = "08dsv1dzgb9jx076ia7xbpyjpaxn1w87h6rzlb349spaydq7ih24";
     };
     packageRequires = [ tracking ];
     fileSpecs = [ "lisp/lui*.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  magit = melpa.mkDerivation (self: {
+  magit = melpaBuild rec {
     pname   = "magit";
     version = "20141025";
     src = fetchFromGitHub {
@@ -455,203 +492,220 @@ rec {
       sha256 = "0mzyx72pidzvla1x2qszn3c60n2j0n8i5k875c4difvd1n4p0vsk";
     };
     packageRequires = [ git-commit-mode git-rebase-mode ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  markdown-mode = melpa.mkDerivation (self: {
+  markdown-mode = melpaBuild rec {
     pname   = "markdown-mode";
     version = "2.0";
     src = fetchFromGitHub {
       owner  = "defunkt";
-      repo   = self.pname;
-      rev    = "v${self.version}";
+      repo   = pname;
+      rev    = "v${version}";
       sha256 = "1l2w0j9xl8pipz61426s79jq2yns42vjvysc6yjc29kbsnhalj29";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  org-plus-contrib = melpa.mkDerivation (self: {
+  org-plus-contrib = melpaBuild rec {
     pname   = "org-plus-contrib";
     version = "20141020";
     src = fetchurl {
-      url    = "http://orgmode.org/elpa/${self.fname}.tar";
+      url    = "http://orgmode.org/elpa/${pname}-${version}.tar";
       sha256 = "02njxmdbmias2f5psvwqc115dyakcwm2g381gfdv8qz4sqav0r77";
     };
     buildPhase = ''
-      cp $src ${self.fname}.tar
+      cp $src ${pname}-${version}.tar
     '';
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  pkg-info = melpa.mkDerivation (self: {
+  pkg-info = melpaBuild rec {
     pname   = "pkg-info";
     version = "20140610";
     src = fetchFromGitHub {
       owner  = "lunaryorn";
-      repo   = "${self.pname}.el";
+      repo   = "${pname}.el";
       rev    = "475cdeb0b8d44f9854e506c429eeb445787014ec";
       sha256 = "0x4nz54f2shgcw3gx66d265vxwdpdirn64gzii8dpxhsi7v86n0p";
     };
     packageRequires = [ epl ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  popup = melpa.mkDerivation (self: {
+  popup = melpaBuild rec {
     pname   = "popup";
     version = "0.5.0";
     src = fetchFromGitHub {
       owner  = "auto-complete";
-      repo   = "${self.pname}-el";
-      rev    = "v${self.version}";
+      repo   = "${pname}-el";
+      rev    = "v${version}";
       sha256 = "0836ayyz1syvd9ry97ya06l8mpr88c6xbgb4d98szj6iwbypcj7b";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  projectile = melpa.mkDerivation (self: {
+  projectile = melpaBuild rec {
     pname   = "projectile";
     version = "20141020";
     src = fetchFromGitHub {
       owner  = "bbatsov";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "13580d83374e0c17c55b3a680b816dfae407657e";
       sha256 = "10c28h2g53sg68lwamhak0shdhh26h5xaipipz3n4281sr1fwg58";
     };
     packageRequires = [ dash helm s pkg-info epl ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  rich-minority = melpa.mkDerivation (self: {
+  rich-minority = melpaBuild rec {
     pname   = "rich-minority";
     version = "0.1.1";
     src = fetchFromGitHub {
       owner  = "Bruce-Connor";
-      repo   = self.pname;
-      rev    = self.version;
+      repo   = pname;
+      rev    = version;
       sha256 = "0kvhy4mgs9llihwsb1a9n5a85xzjiyiyawxnz0axy2bvwcxnp20k";
     };
     packageRequires = [ dash ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  s = melpa.mkDerivation (self: {
+  s = melpaBuild rec {
     pname   = "s";
     version = "20140910";
     src = fetchFromGitHub {
       owner  = "magnars";
-      repo   = "${self.pname}.el";
+      repo   = "${pname}.el";
       rev    = "1f85b5112f3f68169ddaa2911fcfa030f979eb4d";
       sha256 = "9d871ea84f98c51099528a03eddf47218cf70f1431d4c35c19c977d9e73d421f";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  shorten = melpa.mkDerivation (self: {
+  shorten = melpaBuild rec {
     pname   = "shorten";
     version = "1.5";
     src = fetchFromGitHub {
       owner  = "jorgenschaefer";
       repo   = "circe";
-      rev    = "v${self.version}";
+      rev    = "v${version}";
       sha256 = "08dsv1dzgb9jx076ia7xbpyjpaxn1w87h6rzlb349spaydq7ih24";
     };
     fileSpecs = [ "lisp/shorten*.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  smart-mode-line = melpa.mkDerivation (self: {
+  smart-mode-line = melpaBuild rec {
     pname   = "smart-mode-line";
     version = "2.6";
     src = fetchFromGitHub {
       owner  = "Bruce-Connor";
-      repo   = self.pname;
-      rev    = self.version;
+      repo   = pname;
+      rev    = version;
       sha256 = "17nav2jbvbd13xzgp29x396mc617n2dh6whjk4wnyvsyv7r0s9f6";
     };
     packageRequires = [ dash rich-minority ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  smartparens = melpa.mkDerivation (self: {
+  smartparens = melpaBuild rec {
     pname   = "smartparens";
     version = "1.6.2";
     src = fetchFromGitHub {
       owner  = "Fuco1";
-      repo   = self.pname;
-      rev    = self.version;
+      repo   = pname;
+      rev    = version;
       sha256 = "16pzd740vd1r3qfmxia2ibiarinm6xpja0mjv3nni5dis5s4r9gc";
     };
     packageRequires = [ dash ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  structured-haskell-mode = melpa.mkDerivation (self: {
+  structured-haskell-mode = melpaBuild rec {
     pname = "shm";
     version = external.structured-haskell-mode.version;
     src = external.structured-haskell-mode.src;
     packageRequires = [ haskell-mode ];
     fileSpecs = [ "elisp/*.el" ];
+
     meta = {
       homepage = "https://github.com/chrisdone/structured-haskell-mode";
       description = "Structured editing Emacs mode for Haskell";
-      license = self.stdenv.lib.licenses.bsd3;
-      platforms = self.ghc.meta.platforms;
+      license = bsd3;
+      platforms = external.structured-haskell-mode.meta.platforms;
     };
-  });
+  };
 
-  switch-window = melpa.mkDerivation (self: {
+  switch-window = melpaBuild rec {
     pname   = "switch-window";
     version = "20140919";
     src = fetchFromGitHub {
       owner  = "dimitri";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "3ffbe68e584f811e891f96afa1de15e0d9c1ebb5";
       sha256 = "09221128a0f55a575ed9addb3a435cfe01ab6bdd0cca5d589ccd37de61ceccbd";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  tracking = melpa.mkDerivation (self: {
+  tracking = melpaBuild rec {
     pname   = "tracking";
     version = "1.5";
     src = fetchFromGitHub {
       owner  = "jorgenschaefer";
       repo   = "circe";
-      rev    = "v${self.version}";
+      rev    = "v${version}";
       sha256 = "08dsv1dzgb9jx076ia7xbpyjpaxn1w87h6rzlb349spaydq7ih24";
     };
     packageRequires = [ shorten ];
     fileSpecs = [ "lisp/tracking*.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  undo-tree = melpa.mkDerivation (self: {
+  undo-tree = melpaBuild rec {
     pname   = "undo-tree";
     version = "0.6.4";
     src = fetchgit {
-      url    = "http://www.dr-qubit.org/git/${self.pname}.git";
+      url    = "http://www.dr-qubit.org/git/${pname}.git";
       rev    = "a3e81b682053a81e082139300ef0a913a7a610a2";
       sha256 = "1qla7njkb7gx5aj87i8x6ni8jfk1k78ivwfiiws3gpbnyiydpx8y";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  use-package = melpa.mkDerivation (self: {
+  use-package = melpaBuild rec {
     pname   = "use-package";
     version = "20141013";
     src = fetchFromGitHub {
       owner  = "jwiegley";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "d43af5e0769a92f77e01dea229e376d9006722ef";
       sha256 = "1m4v5h52brg2g9rpbqfq9m3m8fv520vg5mjwppnbw6099d17msqd";
     };
     packageRequires = [ bind-key diminish ];
     files = [ "use-package.el" ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  volatile-highlights = melpa.mkDerivation (self: {
+  volatile-highlights = melpaBuild rec {
     pname   = "volatile-highlights";
     version = "1.11";
     src = fetchFromGitHub {
       owner  = "k-talo";
-      repo   = "${self.pname}.el";
+      repo   = "${pname}.el";
       rev    = "fb2abc2d4d4051a9a6b7c8de2fe7564161f01f24";
       sha256 = "1v0chqj5jir4685jd8ahw86g9zdmi6xd05wmzhyw20rbk924fcqf";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  weechat = melpa.mkDerivation (self: {
+  weechat = melpaBuild rec {
     pname   = "weechat.el";
     version = "20141016";
     src = fetchFromGitHub {
       owner  = "the-kenny";
-      repo   = self.pname;
+      repo   = pname;
       rev    = "4cb2ced1eda5167ce774e04657d2cd077b63c706";
       sha256 = "003sihp7irm0qqba778dx0gf8xhkxd1xk7ig5kgkryvl2jyirk28";
     };
@@ -659,9 +713,10 @@ rec {
       rm weechat-sauron.el weechat-secrets.el
     '';
     packageRequires = [ s ];
-  });
+    meta = { licence = gpl3Plus; };
+  };
 
-  wgrep = melpa.mkDerivation (self: {
+  wgrep = melpaBuild rec {
     pname   = "wgrep";
     version = "20141017";
     src = fetchFromGitHub {
@@ -670,5 +725,6 @@ rec {
       rev    = "7ef26c51feaef8a5ec0929737130ab8ba326983c";
       sha256 = "075z0glain0dp56d0cp468y5y88wn82ab26aapsrdzq8hmlshwn4";
     };
-  });
+    meta = { licence = gpl3Plus; };
+  };
 }