summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorEric Seidel <gridaphobe@gmail.com>2015-03-05 13:22:45 -0800
committerEric Seidel <gridaphobe@gmail.com>2015-03-05 13:22:45 -0800
commit6b60f3dcad95e441c7860b27739600ef8ffdae02 (patch)
tree7b93f1a415f06f5bc1091c6d8830435cf3bb031d /pkgs
parentb6a3fd396e318d3f687b719a0e6994c115dcd9b5 (diff)
parent6e59fa4941f9067bdaaf7aa63658aefb56b7f575 (diff)
downloadnixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.tar
nixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.tar.gz
nixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.tar.bz2
nixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.tar.lz
nixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.tar.xz
nixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.tar.zst
nixlib-6b60f3dcad95e441c7860b27739600ef8ffdae02.zip
Merge pull request #6641 from oxij/emacs-ng
Somewhat more generic emacs packages' builder and a bunch of new emacs packages and metas
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/editors/emacs-modes/nyan-mode/default.nix31
-rw-r--r--pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch13
-rw-r--r--pkgs/build-support/emacs/generic.nix41
-rw-r--r--pkgs/build-support/emacs/melpa.nix67
-rw-r--r--pkgs/build-support/emacs/melpa2nix.el (renamed from pkgs/build-support/melpa/melpa2nix.el)0
-rw-r--r--pkgs/build-support/emacs/setup-hook.sh (renamed from pkgs/build-support/melpa/setup-hook.sh)0
-rw-r--r--pkgs/build-support/emacs/trivial.nix34
-rw-r--r--pkgs/build-support/melpa/default.nix104
-rw-r--r--pkgs/top-level/all-packages.nix34
-rw-r--r--pkgs/top-level/emacs-packages.nix (renamed from pkgs/top-level/emacs-melpa-packages.nix)244
10 files changed, 429 insertions, 139 deletions
diff --git a/pkgs/applications/editors/emacs-modes/nyan-mode/default.nix b/pkgs/applications/editors/emacs-modes/nyan-mode/default.nix
new file mode 100644
index 000000000000..ab94dbae9501
--- /dev/null
+++ b/pkgs/applications/editors/emacs-modes/nyan-mode/default.nix
@@ -0,0 +1,31 @@
+{trivialBuild, fetchFromGitHub}:
+
+trivialBuild rec {
+  pname    = "nyan-mode";
+  version  = "20150128";
+
+  src = fetchFromGitHub {
+    owner  = "TeMPOraL";
+    repo   = pname;
+    rev    = "41faa2c809da7b2cb3e6f8fadefae3f338ced3f2";
+    sha256 = "1idaac7sjc8hhbf5zif61ncg1pvg28c0qfihavdx61albww0ll7f";
+  };
+
+  patches = [ ./directory.patch ];
+
+  preBuild = ''
+    substituteInPlace nyan-mode.el \
+      --replace "@OUT@" "$out/"
+  '';
+
+  postInstall = ''
+    cp -r img $out
+    cp -r mus $out
+  '';
+
+  meta = {
+    description = "An analog indicator of the position in the buffer";
+    homepage = https://github.com/TeMPOraL/nyan-mode/;
+    license = "GPLv3+";
+  };
+}
diff --git a/pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch b/pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch
new file mode 100644
index 000000000000..b471531ec34c
--- /dev/null
+++ b/pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch
@@ -0,0 +1,13 @@
+diff --git a/nyan-mode.el b/nyan-mode.el
+index 939a25a..3d0b983 100644
+--- a/nyan-mode.el
++++ b/nyan-mode.el
+@@ -106,7 +106,7 @@ This can be t or nil."
+   :group 'nyan)

+ 

+ 

+-(defconst +nyan-directory+ (file-name-directory (or load-file-name buffer-file-name)))

++(defconst +nyan-directory+ "@OUT@")

+ 

+ (defconst +nyan-cat-size+ 3)

+ 

diff --git a/pkgs/build-support/emacs/generic.nix b/pkgs/build-support/emacs/generic.nix
new file mode 100644
index 000000000000..be81e93e32ae
--- /dev/null
+++ b/pkgs/build-support/emacs/generic.nix
@@ -0,0 +1,41 @@
+# generic builder for Emacs packages
+
+{ lib, stdenv, emacs, texinfo }:
+
+with lib;
+
+{ pname
+, version ? null
+
+, buildInputs ? []
+, packageRequires ? []
+
+, meta ? {}
+
+, ...
+}@args:
+
+let
+  defaultMeta = {
+    broken = false;
+    platforms = emacs.meta.platforms;
+  };
+in
+
+stdenv.mkDerivation ({
+  name = "emacs-${pname}${optionalString (version != null) "-${version}"}";
+
+  buildInputs = [emacs texinfo] ++ packageRequires ++ buildInputs;
+  propagatedBuildInputs = packageRequires;
+  propagatedUserEnvPkgs = packageRequires;
+
+  setupHook = ./setup-hook.sh;
+
+  doCheck = false;
+
+  meta = defaultMeta // meta;
+}
+
+// removeAttrs args [ "buildInputs" "packageRequires"
+                      "meta"
+                    ])
diff --git a/pkgs/build-support/emacs/melpa.nix b/pkgs/build-support/emacs/melpa.nix
new file mode 100644
index 000000000000..607a1b4a5ef6
--- /dev/null
+++ b/pkgs/build-support/emacs/melpa.nix
@@ -0,0 +1,67 @@
+# builder for Emacs packages built for packages.el
+# using MELPA package-build.el
+
+{ lib, stdenv, fetchurl, emacs, texinfo }:
+
+with lib;
+
+{ pname
+, version
+
+, files ? null
+, fileSpecs ? [ "*.el" "*.el.in" "dir"
+                "*.info" "*.texi" "*.texinfo"
+                "doc/dir" "doc/*.info" "doc/*.texi" "doc/*.texinfo"
+              ]
+
+, meta ? {}
+
+, ...
+}@args:
+
+let
+
+  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 = {
+    homepage = "http://melpa.org/#/${pname}";
+  };
+
+in
+
+import ./generic.nix { inherit lib stdenv emacs texinfo; } ({
+  inherit packageBuild;
+
+  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;
+}
+
+// removeAttrs args [ "files" "fileSpecs"
+                      "meta"
+                    ])
diff --git a/pkgs/build-support/melpa/melpa2nix.el b/pkgs/build-support/emacs/melpa2nix.el
index d54e9d21e25e..d54e9d21e25e 100644
--- a/pkgs/build-support/melpa/melpa2nix.el
+++ b/pkgs/build-support/emacs/melpa2nix.el
diff --git a/pkgs/build-support/melpa/setup-hook.sh b/pkgs/build-support/emacs/setup-hook.sh
index defef45b55f5..defef45b55f5 100644
--- a/pkgs/build-support/melpa/setup-hook.sh
+++ b/pkgs/build-support/emacs/setup-hook.sh
diff --git a/pkgs/build-support/emacs/trivial.nix b/pkgs/build-support/emacs/trivial.nix
new file mode 100644
index 000000000000..9c97e8bf9514
--- /dev/null
+++ b/pkgs/build-support/emacs/trivial.nix
@@ -0,0 +1,34 @@
+# trivial builder for Emacs packages
+
+{ lib, ... }@envargs:
+
+with lib;
+
+args:
+
+import ./generic.nix envargs ({
+  #preConfigure = ''
+  #  export LISPDIR=$out/share/emacs/site-lisp
+  #  export VERSION_SPECIFIC_LISPDIR=$out/share/emacs/site-lisp
+  #'';
+
+  buildPhase = ''
+    eval "$preBuild"
+
+    emacs -L . --batch -f batch-byte-compile *.el
+
+    eval "$postBuild"
+  '';
+
+  installPhase = ''
+    eval "$preInstall"
+
+    LISPDIR=$out/share/emacs/site-lisp
+    install -d $LISPDIR
+    install *.el *.elc $LISPDIR
+
+    eval "$postInstall"
+  '';
+}
+
+// args)
diff --git a/pkgs/build-support/melpa/default.nix b/pkgs/build-support/melpa/default.nix
deleted file mode 100644
index 11cb14f93db4..000000000000
--- a/pkgs/build-support/melpa/default.nix
+++ /dev/null
@@ -1,104 +0,0 @@
-# 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/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index aa91dbd48c05..975a4d4cf8f7 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -9995,6 +9995,9 @@ let
   elvis = callPackage ../applications/editors/elvis { };
 
   emacs = emacs24;
+  emacsPackages = emacs24Packages;
+  emacsPackagesNg = emacs24PackagesNg;
+  emacsMelpa = emacs24PackagesNg; # for backward compatibility
 
   emacs24 = callPackage ../applications/editors/emacs-24 {
     # use override to enable additional features
@@ -10017,14 +10020,7 @@ let
   });
   emacs24Macport = self.emacs24Macport_24_4;
 
-  emacsMelpa = import ./emacs-melpa-packages.nix {
-    inherit stdenv pkgs fetchurl fetchgit fetchFromGitHub emacs texinfo;
-    external = {
-      inherit (haskellngPackages) ghc-mod structured-haskell-mode;
-    };
-  };
-
-  emacsPackages = emacs: self: let callPackage = newScope self; in rec {
+  emacsPackagesGen = emacs: self: let callPackage = newScope self; in rec {
     inherit emacs;
 
     autoComplete = callPackage ../applications/editors/emacs-modes/auto-complete { };
@@ -10179,7 +10175,27 @@ let
     cask = callPackage ../applications/editors/emacs-modes/cask { };
   };
 
-  emacs24Packages = recurseIntoAttrs (emacsPackages emacs24 pkgs.emacs24Packages);
+  emacs24Packages = recurseIntoAttrs (emacsPackagesGen emacs24 pkgs.emacs24Packages);
+
+  emacsPackagesNgGen = emacs: import ./emacs-packages.nix {
+    overrides = (config.emacsPackageOverrides or (p: {})) pkgs;
+
+    inherit lib stdenv fetchurl fetchgit fetchFromGitHub emacs;
+
+    trivialBuild = import ../build-support/emacs/trivial.nix {
+      inherit lib stdenv emacs texinfo;
+    };
+
+    melpaBuild = import ../build-support/emacs/melpa.nix {
+      inherit lib stdenv fetchurl emacs texinfo;
+    };
+
+    external = {
+      inherit (haskellngPackages) ghc-mod structured-haskell-mode Agda;
+    };
+  };
+
+  emacs24PackagesNg = emacsPackagesNgGen emacs24;
 
   inherit (gnome3) empathy;
 
diff --git a/pkgs/top-level/emacs-melpa-packages.nix b/pkgs/top-level/emacs-packages.nix
index e8f965a784a4..680ec72ed5c4 100644
--- a/pkgs/top-level/emacs-melpa-packages.nix
+++ b/pkgs/top-level/emacs-packages.nix
@@ -1,27 +1,37 @@
-{ pkgs, stdenv, fetchurl, fetchFromGitHub, fetchgit
-, emacs, texinfo
-
-# non-emacs packages
-, external
-}:
-
 # package.el-based emacs packages
-
-## init.el
+#
+## add this at the start your init.el:
 # (require 'package)
-# (setq package-archives nil
-#       package-user-dir "~/.nix-profile/share/emacs/site-lisp/elpa")
+#
+# ;; optional. makes unpure packages archives unavailable
+# (setq package-archives nil)
+#
+# (add-to-list 'package-directory-list "/run/current-system/sw/share/emacs/site-lisp/elpa")
+#
+# ;; optional. use this if you install emacs packages to user profiles (with nix-env)
+# (add-to-list 'package-directory-list "~/.nix-profile/share/emacs/site-lisp/elpa")
+#
 # (package-initialize)
 
-with stdenv.lib.licences;
+{ overrides
 
-let
-  melpaBuild = import ../build-support/melpa {
-    inherit stdenv fetchurl emacs texinfo;
-  };
-in
+, lib, stdenv, fetchurl, fetchgit, fetchFromGitHub
+
+, emacs
+, trivialBuild
+, melpaBuild
+
+, external
+}@args:
+
+with lib.licences;
+
+let self = _self // overrides;
+    callPackage = lib.callPackageWith (self // removeAttrs args ["overrides" "external"]);
+    _self = with self; {
+
+  ## START HERE
 
-rec {
   ac-haskell-process = melpaBuild rec {
     pname   = "ac-haskell-process";
     version = "0.5";
@@ -44,7 +54,10 @@ rec {
       rev    = "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac";
       sha256 = "17axrgd99glnl6ma4ls3k01ysdqmiqr581wnrbsn3s4gp53mm2x6";
     };
-    meta = { licence = gpl3Plus; };
+    meta = {
+      description = "Advanced cursor movements mode for Emacs";
+      licence = gpl3Plus;
+    };
   };
 
   ag = melpaBuild rec {
@@ -60,6 +73,73 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  agda2-mode = with external; trivialBuild {
+    pname = "agda-mode";
+    version = Agda.version;
+
+    phases = [ "buildPhase" "installPhase" ];
+
+    # already byte-compiled by Agda builder
+    buildPhase = ''
+      agda=`${Agda}/bin/agda-mode locate`
+      cp `dirname $agda`/*.el* .
+    '';
+
+    meta = {
+      description = "Agda2-mode for Emacs extracted from Agda package";
+      longDescription = ''
+        Wrapper packages that liberates init.el from `agda-mode locate` magic.
+        Simply add this to user profile or systemPackages and do `(require 'agda2)` in init.el.
+      '';
+      homepage = Agda.meta.homepage;
+      license = Agda.meta.license;
+    };
+  };
+
+  anzu = melpaBuild rec {
+    pname = "anzu";
+    version = "0.52";
+    src = fetchFromGitHub {
+      owner = "syohex";
+      repo  = "emacs-anzu";
+      rev = "f41db6225d8fb983324765aa42c94d3ee379a49f";
+      sha256 = "1mn20swasrl8kr557r1850vr1q0gcnwlxxafnc6lq5g01kjfcdxd";
+    };
+    meta = {
+      description = "Show number of matches in Emacs mode-line while searching";
+      longDescription = ''
+        anzu.el is an Emacs port of anzu.vim. anzu.el provides a minor
+        mode which displays current match and total matches information
+        in the mode-line in various search mode.
+      '';
+      homepage = https://github.com/syohex/emacs-anzu/;
+      license = gpl3Plus;
+    };
+  };
+
+  apel = melpaBuild rec {
+    pname = "apel";
+    version = "10.8";
+    src = fetchFromGitHub {
+      owner  = "wanderlust";
+      repo   = pname;
+      rev    = "8402e59eadb580f59969114557b331b4d9364f95";
+      sha256 = "0sdxnf4b8rqs1cbjxh23wvxmj7ll3zddv8yfdgif6zmgyy8xhc9m";
+    };
+    files = [
+      "alist.el" "apel-ver.el" "broken.el" "calist.el"
+      "emu.el" "filename.el" "install.el" "inv-23.el" "invisible.el"
+      "mcharset.el" "mcs-20.el" "mcs-e20.el" "mule-caesar.el"
+      "path-util.el" "pccl-20.el" "pccl.el" "pces-20.el" "pces-e20.el"
+      "pces.el" "pcustom.el" "poe.el" "poem-e20.el" "poem-e20_3.el"
+      "poem.el" "product.el" "pym.el" "richtext.el" "static.el"
+    ];
+    meta = {
+      description = "A Portable Emacs Library";
+      license = gpl3Plus; # probably
+    };
+  };
+
   async = melpaBuild rec {
     pname   = "async";
     version = "1.2";
@@ -95,12 +175,11 @@ rec {
       sha256 = "050lb8qjq7ra35mqp6j6qkwbvq5zj3yhz73aym5kf1vjd42rmjcw";
     };
     packageRequires = [ popup ];
-
     meta = {
       description = "Auto-complete extension for Emacs";
       homepage = http://cx4a.org/software/auto-complete/;
       license = gpl3Plus;
-      platforms = stdenv.lib.platforms.all;
+      platforms = lib.platforms.all;
     };
   };
 
@@ -117,6 +196,22 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  browse-kill-ring = melpaBuild rec {
+    pname   = "browse-kill-ring";
+    version = "20140104";
+    src = fetchFromGitHub {
+      owner  = pname;
+      repo   = pname;
+      rev    = "f81ca5f14479fa9e938f89bf8f6baa3c4bdfb755";
+      sha256 = "149g4qs5dqy6yzdj5smb39id5f72bz64qfv5bjf3ssvhwl2rfba8";
+    };
+    meta = {
+      description = "Interactively insert items from Emacs kill-ring";
+      homepage = https://github.com/browse-kill-ring/browse-kill-ring/;
+      license = gpl2Plus;
+    };
+  };
+
   change-inner = melpaBuild rec {
     pname   = "change-inner";
     version = "20130208";
@@ -215,7 +310,10 @@ rec {
       sha256 = "0wrmlmgr4mwxlmmh8blplddri2lpk4g8k3l1vpb5c6a975420qvn";
     };
     packageRequires = [ evil ];
-    meta = { licence = gpl3Plus; };
+    meta = {
+      description = "surround.vim emulation for Emacs evil mode";
+      licence = gpl3Plus;
+    };
   };
 
   evil = melpaBuild {
@@ -227,7 +325,10 @@ rec {
       sha256 = "0yiqpzsm5sr7xdkixdvfg312dk9vsdcmj69gizk744d334yn8rsz";
     };
     packageRequires = [ goto-chg undo-tree ];
-    meta = { licence = gpl3Plus; };
+    meta = {
+      description = "Extensible vi layer for Emacs";
+      licence = gpl3Plus;
+    };
   };
 
   exec-path-from-shell = melpaBuild rec {
@@ -251,7 +352,26 @@ rec {
       rev    = "fa413e07c97997d950c92d6012f5442b5c3cee78";
       sha256 = "04k0518wfy72wpzsswmncnhd372fxa0r8nbfhmbyfmns8n7sr045";
     };
-    meta = { licence = gpl3Plus; };
+    meta = {
+      description = "Increases the selected region by semantic units in Emacs";
+      licence = gpl3Plus;
+    };
+  };
+
+  flim = melpaBuild rec {
+    pname = "flim";
+    version = "1.14.9"; # 20141216
+    src = fetchFromGitHub {
+      owner  = "wanderlust";
+      repo   = pname;
+      rev    = "488a4d70fb4ae57bdd30dc75c2d75579894e28a2";
+      sha256 = "178fhpbyffksr4v3m8jmx4rx2vqyz23qhbyvic5afabxi6lahjfs";
+    };
+    packageRequires = [ apel ];
+    meta = {
+      description = "Email message encoding library for Emacs";
+      license = gpl3Plus; # probably
+    };
   };
 
   flycheck-pos-tip = melpaBuild rec {
@@ -442,6 +562,22 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  ido-ubiquitous = melpaBuild rec {
+    pname   = "ido-ubiquitous";
+    version = "2.17";
+    src = fetchFromGitHub {
+      owner  = "DarwinAwardWinner";
+      repo   = pname;
+      rev    = "323e4cddc05d5a4546c1b64132b2b1e9f8896452";
+      sha256 = "0wdjz3cqzrxhrk68g5gyvc9j2rb6f4yw00xbjgw9ldwlhmkwy5ja";
+    };
+    meta = {
+      description = "Does what you expected ido-everywhere to do in Emacs";
+      homepage = https://github.com/DarwinAwardWinner/ido-ubiquitous/;
+      license = gpl3Plus;
+    };
+  };
+
   idris-mode = melpaBuild rec {
     pname   = "idris-mode";
     version = "0.9.15";
@@ -507,6 +643,8 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  nyan-mode = callPackage ../applications/editors/emacs-modes/nyan-mode {};
+
   org-plus-contrib = melpaBuild rec {
     pname   = "org-plus-contrib";
     version = "20141020";
@@ -583,6 +721,22 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  semi = melpaBuild rec {
+    pname = "semi";
+    version = "1.14.7"; # 20150203
+    src = fetchFromGitHub {
+      owner  = "wanderlust";
+      repo   = pname;
+      rev    = "9976269556c5bcc021e4edf1b0e1accd39929528";
+      sha256 = "1g1xg57pz4msd3f998af5gq28qhmvi410faygzspra6y6ygaka68";
+    };
+    packageRequires = [ apel flim ];
+    meta = {
+      description = "MIME library for Emacs";
+      license = gpl3Plus; # probably
+    };
+  };
+
   shorten = melpaBuild rec {
     pname   = "shorten";
     version = "1.5";
@@ -622,6 +776,22 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  smex = melpaBuild rec {
+    pname = "smex";
+    version = "20141210";
+    src = fetchFromGitHub {
+      owner  = "nonsequitur";
+      repo   = pname;
+      rev    = "aff8d4485139ac28f1c7e62912c0d0d480995831";
+      sha256 = "0017f1ji7rxad2n49dhn5g0pmw6lmw80cqk6dynszizj46xpbqfp";
+    };
+    meta = {
+      description = "M-x enhancement for Emacs build on top of Ido";
+      homepage = https://github.com/nonsequitur/smex/;
+      license = emacs.meta.license; # should be "same as Emacs"
+    };
+  };
+
   structured-haskell-mode = melpaBuild rec {
     pname = "shm";
     version = external.structured-haskell-mode.version;
@@ -700,6 +870,27 @@ rec {
     meta = { licence = gpl3Plus; };
   };
 
+  wanderlust = melpaBuild rec {
+    pname = "wanderlust";
+    version = "2.15.9"; # 20150301
+    src = fetchFromGitHub {
+      owner  = pname;
+      repo   = pname;
+      rev    = "13fb4f6519490d4ac7138f3bcf76707654348071";
+      sha256 = "1l48xfcwkm205prspa1rns6lqfizik5gpdwmlfgyb5mabm9x53zn";
+    };
+    packageRequires = [ apel flim semi ];
+    fileSpecs = [
+      "doc/wl.texi" "doc/wl-ja.texi"
+      "elmo/*.el" "wl/*.el"
+      "etc/icons"
+    ];
+    meta = {
+      description = "E-Mail client for Emacs";
+      license = gpl3Plus; # probably
+    };
+  };
+
   weechat = melpaBuild rec {
     pname   = "weechat.el";
     version = "20141016";
@@ -709,7 +900,7 @@ rec {
       rev    = "4cb2ced1eda5167ce774e04657d2cd077b63c706";
       sha256 = "003sihp7irm0qqba778dx0gf8xhkxd1xk7ig5kgkryvl2jyirk28";
     };
-    postPatch = stdenv.lib.optionalString (!stdenv.isLinux) ''
+    postPatch = lib.optionalString (!stdenv.isLinux) ''
       rm weechat-sauron.el weechat-secrets.el
     '';
     packageRequires = [ s ];
@@ -727,4 +918,5 @@ rec {
     };
     meta = { licence = gpl3Plus; };
   };
-}
+
+}; in self