summary refs log tree commit diff
path: root/pkgs/applications/editors/emacs-modes
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/editors/emacs-modes')
-rw-r--r--pkgs/applications/editors/emacs-modes/elpa-packages.nix2
-rw-r--r--pkgs/applications/editors/emacs-modes/emacs-libvterm/default.nix57
-rw-r--r--pkgs/applications/editors/emacs-modes/manual-packages.nix145
-rw-r--r--pkgs/applications/editors/emacs-modes/melpa-packages.nix585
-rw-r--r--pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix235
-rw-r--r--pkgs/applications/editors/emacs-modes/nyan-mode/default.nix30
-rw-r--r--pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch13
-rw-r--r--pkgs/applications/editors/emacs-modes/org-packages.nix2
-rw-r--r--pkgs/applications/editors/emacs-modes/redshank/default.nix23
-rw-r--r--pkgs/applications/editors/emacs-modes/stgit/default.nix25
-rwxr-xr-xpkgs/applications/editors/emacs-modes/update-melpa8
-rw-r--r--pkgs/applications/editors/emacs-modes/updater-emacs.nix65
12 files changed, 561 insertions, 629 deletions
diff --git a/pkgs/applications/editors/emacs-modes/elpa-packages.nix b/pkgs/applications/editors/emacs-modes/elpa-packages.nix
index 9c08e91af41..e7ed5a32b65 100644
--- a/pkgs/applications/editors/emacs-modes/elpa-packages.nix
+++ b/pkgs/applications/editors/emacs-modes/elpa-packages.nix
@@ -50,4 +50,4 @@ self:
 
     elpaPackages = super // overrides;
 
-  in elpaPackages // { inherit elpaBuild elpaPackages; }
+  in elpaPackages // { inherit elpaBuild; }
diff --git a/pkgs/applications/editors/emacs-modes/emacs-libvterm/default.nix b/pkgs/applications/editors/emacs-modes/emacs-libvterm/default.nix
deleted file mode 100644
index ba54b9404a0..00000000000
--- a/pkgs/applications/editors/emacs-modes/emacs-libvterm/default.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-{ stdenv, fetchFromGitHub, cmake, emacs, libvterm-neovim }:
-
-let
-  emacsSources = stdenv.mkDerivation {
-    name = emacs.name + "-sources";
-    src = emacs.src;
-
-    dontConfigure = true;
-    dontBuild = true;
-    doCheck = false;
-    fixupPhase = ":";
-
-    installPhase = ''
-      mkdir -p $out
-      cp -a * $out
-    '';
-
-  };
-
-  libvterm = libvterm-neovim.overrideAttrs(old: rec {
-    pname = "libvterm-neovim";
-    version = "2019-04-27";
-    name = pname + "-" + version;
-    src = fetchFromGitHub {
-      owner = "neovim";
-      repo = "libvterm";
-      rev = "89675ffdda615ffc3f29d1c47a933f4f44183364";
-      sha256 = "0l9ixbj516vl41v78fi302ws655xawl7s94gmx1kb3fmfgamqisy";
-    };
-  });
-
-
-in stdenv.mkDerivation rec {
-  name = "emacs-libvterm-${version}";
-  version = "unstable-2019-07-22";
-
-  src = fetchFromGitHub {
-    owner = "akermu";
-    repo = "emacs-libvterm";
-    rev = "301fe9fdfd5fb2496c8428a11e0812fd8a4c0820";
-    sha256 = "0i1hn5gcxayqcbjrnpgczvbicq2vsyn59646ary3crs0mz9wlbpr";
-  };
-
-  nativeBuildInputs = [ cmake ];
-  buildInputs = [ emacs libvterm ];
-
-  cmakeFlags = [
-    "-DEMACS_SOURCE=${emacsSources}"
-    "-DUSE_SYSTEM_LIBVTERM=True"
-  ];
-
-  installPhase = ''
-    install -d $out/share/emacs/site-lisp
-    install ../*.el $out/share/emacs/site-lisp
-    install ../*.so $out/share/emacs/site-lisp
-  '';
-}
diff --git a/pkgs/applications/editors/emacs-modes/manual-packages.nix b/pkgs/applications/editors/emacs-modes/manual-packages.nix
new file mode 100644
index 00000000000..7f75de74ed6
--- /dev/null
+++ b/pkgs/applications/editors/emacs-modes/manual-packages.nix
@@ -0,0 +1,145 @@
+{ lib, external, pkgs }: self: with self; with lib.licenses; {
+
+  elisp-ffi = melpaBuild rec {
+    pname = "elisp-ffi";
+    version = "1.0.0";
+    src = pkgs.fetchFromGitHub {
+      owner = "skeeto";
+      repo = "elisp-ffi";
+      rev = "${version}";
+      sha256 = "0z2n3h5l5fj8wl8i1ilfzv11l3zba14sgph6gz7dx7q12cnp9j22";
+    };
+    buildInputs = [ external.libffi ];
+    preBuild = "make";
+    recipe = pkgs.writeText "recipe" ''
+      (elisp-ffi
+      :repo "skeeto/elisp-ffi"
+      :fetcher github
+      :files ("ffi-glue" "ffi.el"))
+    '';
+    meta = {
+      description = "Emacs Lisp Foreign Function Interface";
+      longDescription = ''
+        This library provides an FFI for Emacs Lisp so that Emacs
+        programs can invoke functions in native libraries. It works by
+        driving a subprocess to do the heavy lifting, passing result
+        values on to Emacs.
+      '';
+      license = publicDomain;
+    };
+  };
+
+  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;
+    };
+  };
+
+  ess-R-object-popup =
+    callPackage ./ess-R-object-popup { };
+
+  filesets-plus = callPackage ./filesets-plus { };
+
+  font-lock-plus = callPackage ./font-lock-plus { };
+
+  ghc-mod = melpaBuild rec {
+    pname = "ghc";
+    version = external.ghc-mod.version;
+    src = external.ghc-mod.src;
+    packageRequires = [ haskell-mode ];
+    propagatedUserEnvPkgs = [ external.ghc-mod ];
+    recipe = pkgs.writeText "recipe" ''
+      (ghc-mod :repo "DanielG/ghc-mod" :fetcher github :files ("elisp/*.el"))
+    '';
+    fileSpecs = [ "elisp/*.el" ];
+    meta = {
+      description = "An extension of haskell-mode that provides completion of symbols and documentation browsing";
+      license = bsd3;
+    };
+  };
+
+  haskell-unicode-input-method = melpaBuild rec {
+    pname = "emacs-haskell-unicode-input-method";
+    version = "20110905.2307";
+    src = pkgs.fetchFromGitHub {
+      owner = "roelvandijk";
+      repo = "emacs-haskell-unicode-input-method";
+      rev = "d8d168148c187ed19350bb7a1a190217c2915a63";
+      sha256 = "09b7bg2s9aa4s8f2kdqs4xps3jxkq5wsvbi87ih8b6id38blhf78";
+    };
+    recipe = pkgs.writeText "recipe" ''
+      (haskell-unicode-input-method
+       :repo "roelvandijk/emacs-haskell-unicode-input-method"
+       :fetcher github)
+    '';
+    packageRequires = [];
+    meta = {
+      homepage = "https://melpa.org/#haskell-unicode-input-method/";
+      license = lib.licenses.free;
+    };
+  };
+
+  hexrgb = callPackage ./hexrgb { };
+
+  header2 = callPackage ./header2 { };
+
+  helm-words = callPackage ./helm-words { };
+
+  icicles = callPackage ./icicles { };
+
+  rtags = melpaBuild rec {
+    inherit (external.rtags) version src meta;
+
+    pname = "rtags";
+
+    dontConfigure = true;
+
+    propagatedUserEnvPkgs = [ external.rtags ];
+    recipe = pkgs.writeText "recipe" ''
+      (rtags
+       :repo "andersbakken/rtags" :fetcher github
+       :files ("src/*.el"))
+    '';
+  };
+
+  lib-requires =
+    callPackage ./lib-requires { };
+
+  org-mac-link =
+    callPackage ./org-mac-link { };
+
+  perl-completion =
+    callPackage ./perl-completion { };
+
+  railgun = callPackage ./railgun { };
+
+  gn = callPackage ./gn { };
+
+  structured-haskell-mode = self.shm;
+
+  thingatpt-plus = callPackage ./thingatpt-plus { };
+
+  tramp = callPackage ./tramp { };
+
+  yaoddmuse = callPackage ./yaoddmuse { };
+
+  zeitgeist = callPackage ./zeitgeist { };
+
+}
diff --git a/pkgs/applications/editors/emacs-modes/melpa-packages.nix b/pkgs/applications/editors/emacs-modes/melpa-packages.nix
index 527a82aa469..24e541f2695 100644
--- a/pkgs/applications/editors/emacs-modes/melpa-packages.nix
+++ b/pkgs/applications/editors/emacs-modes/melpa-packages.nix
@@ -12,289 +12,450 @@ env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../ -A emacsPac
 
 */
 
-{ lib, external }:
+{ lib, external, pkgs }: variant: self: let
 
-self:
-
-  let
-    inherit (import ./libgenerated.nix lib self) melpaDerivation;
-    imported = lib.listToAttrs (map (melpaDerivation "unstable")
-                                    (lib.importJSON ./recipes-archive-melpa.json));
-    super = builtins.removeAttrs imported [
-      "swbuff-x" # required dependency swbuff is missing
-    ];
-
-    dontConfigure = pkg: pkg.override (args: {
-      melpaBuild = drv: args.melpaBuild (drv // {
-        configureScript = "true";
-      });
+  dontConfigure = pkg: if pkg != null then pkg.override (args: {
+    melpaBuild = drv: args.melpaBuild (drv // {
+      configureScript = "true";
     });
+  }) else null;
 
-    markBroken = pkg: pkg.override (args: {
-      melpaBuild = drv: args.melpaBuild (drv // {
-        meta = (drv.meta or {}) // { broken = true; };
-      });
+  markBroken = pkg: if pkg != null then pkg.override (args: {
+    melpaBuild = drv: args.melpaBuild (drv // {
+      meta = (drv.meta or {}) // { broken = true; };
     });
+  }) else null;
 
-    overrides = {
-      # Expects bash to be at /bin/bash
-      ac-rtags = markBroken super.ac-rtags;
+  generateMelpa = lib.makeOverridable ({
+    archiveJson ? ./recipes-archive-melpa.json
+  }: let
 
-      # upstream issue: mismatched filename
-      ack-menu = markBroken super.ack-menu;
+    inherit (import ./libgenerated.nix lib self) melpaDerivation;
+    super = lib.listToAttrs (map (melpaDerivation variant) (lib.importJSON archiveJson));
 
-      airline-themes = super.airline-themes.override {
-        inherit (self.melpaPackages) powerline;
-      };
+    generic = import ./melpa-generic.nix;
 
-      # upstream issue: missing file header
-      bufshow = markBroken super.bufshow;
+    overrides = rec {
+      shared = {
+        # Expects bash to be at /bin/bash
+        ac-rtags = markBroken super.ac-rtags;
 
-      # part of a larger package
-      caml = dontConfigure super.caml;
+        airline-themes = super.airline-themes.override {
+          inherit (self.melpaPackages) powerline;
+        };
 
-      # Expects bash to be at /bin/bash
-      company-rtags = markBroken super.company-rtags;
+        # upstream issue: missing file header
+        bufshow = markBroken super.bufshow;
 
-      easy-kill-extras = super.easy-kill-extras.override {
-        inherit (self.melpaPackages) easy-kill;
-      };
+        # part of a larger package
+        caml = dontConfigure super.caml;
 
-      editorconfig = super.editorconfig.overrideAttrs (attrs: {
-        propagatedUserEnvPkgs = [ external.editorconfig-core-c ];
-      });
+        # Expects bash to be at /bin/bash
+        company-rtags = markBroken super.company-rtags;
 
-      egg = super.egg.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        easy-kill-extras = super.easy-kill-extras.override {
+          inherit (self.melpaPackages) easy-kill;
+        };
 
-      # upstream issue: missing file header
-      elmine = markBroken super.elmine;
+        # upstream issue: missing file header
+        elmine = markBroken super.elmine;
 
-      ess-R-data-view = super.ess-R-data-view.override {
-        inherit (self.melpaPackages) ess ctable popup;
-      };
+        elpy = super.elpy.overrideAttrs(old: {
+          propagatedUserEnvPkgs = old.propagatedUserEnvPkgs ++ [ external.elpy ];
+        });
 
-      evil-magit = super.evil-magit.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        evil-magit = super.evil-magit.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      # missing dependencies
-      evil-search-highlight-persist = super.evil-search-highlight-persist.overrideAttrs (attrs: {
-        packageRequires = with self; [ evil highlight ];
-      });
+        ess-R-data-view = super.ess-R-data-view.override {
+          inherit (self.melpaPackages) ess ctable popup;
+        };
+
+        # Expects bash to be at /bin/bash
+        flycheck-rtags = markBroken super.flycheck-rtags;
+
+        # build timeout
+        graphene = markBroken super.graphene;
+
+        pdf-tools = super.pdf-tools.overrideAttrs(old: {
+          nativeBuildInputs = [ external.pkgconfig ];
+          buildInputs = with external; old.buildInputs ++ [ autoconf automake libpng zlib poppler ];
+          preBuild = "make server/epdfinfo";
+          recipe = pkgs.writeText "recipe" ''
+            (pdf-tools
+            :repo "politza/pdf-tools" :fetcher github
+            :files ("lisp/pdf-*.el" "server/epdfinfo"))
+          '';
+        });
 
-      # Expects bash to be at /bin/bash
-      flycheck-rtags = markBroken super.flycheck-rtags;
+        # Build same version as Haskell package
+        hindent = super.hindent.overrideAttrs (attrs: {
+          version = external.hindent.version;
+          src = external.hindent.src;
+          packageRequires = [ self.haskell-mode ];
+          propagatedUserEnvPkgs = [ external.hindent ];
+        });
 
-      forge = super.forge.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        # upstream issue: missing file header
+        ido-complete-space-or-hyphen = markBroken super.ido-complete-space-or-hyphen;
+
+        # upstream issue: missing file header
+        initsplit = markBroken super.initsplit;
+
+        irony = super.irony.overrideAttrs(old: {
+          preConfigure = ''
+            cd server
+          '';
+          preBuild = ''
+            make
+          '';
+          postInstall = ''
+            mkdir -p $out
+            mv $out/share/emacs/site-lisp/elpa/*/server/bin $out
+            rm -rf $out/share/emacs/site-lisp/elpa/*/server
+          '';
+          preCheck = ''
+            cd source/server
+          '';
+          dontUseCmakeBuildDir = true;
+          doCheck = true;
+          packageRequires = [ self.emacs ];
+          nativeBuildInputs = [ external.cmake external.llvmPackages.llvm external.llvmPackages.clang ];
+        });
 
-      # build timeout
-      graphene = markBroken super.graphene;
+        # tries to write a log file to $HOME
+        insert-shebang = super.insert-shebang.overrideAttrs (attrs: {
+          HOME = "/tmp";
+        });
 
-      # upstream issue: mismatched filename
-      helm-lobsters = markBroken super.helm-lobsters;
+        # Expects bash to be at /bin/bash
+        ivy-rtags = markBroken super.ivy-rtags;
 
-      # Expects bash to be at /bin/bash
-      helm-rtags = markBroken super.helm-rtags;
+        # upstream issue: missing file header
+        jsfmt = markBroken super.jsfmt;
 
-      # Build same version as Haskell package
-      hindent = super.hindent.overrideAttrs (attrs: {
-        version = external.hindent.version;
-        src = external.hindent.src;
-        packageRequires = [ self.haskell-mode ];
-        propagatedUserEnvPkgs = [ external.hindent ];
-      });
+        # upstream issue: missing file header
+        maxframe = markBroken super.maxframe;
 
-      # upstream issue: missing file header
-      ido-complete-space-or-hyphen = markBroken super.ido-complete-space-or-hyphen;
+        magit = super.magit.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      # upstream issue: missing file header
-      initsplit = super.initsplit;
+        magit-annex = super.magit-annex.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      # tries to write a log file to $HOME
-      insert-shebang = super.insert-shebang.overrideAttrs (attrs: {
-        HOME = "/tmp";
-      });
+        magit-todos = super.magit-todos.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      # Expects bash to be at /bin/bash
-      ivy-rtags = markBroken super.ivy-rtags;
+        magit-filenotify = super.magit-filenotify.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      # upstream issue: missing file header
-      jsfmt = markBroken super.jsfmt;
+        magit-gitflow = super.magit-gitflow.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      # upstream issue: missing file header
-      maxframe = markBroken super.maxframe;
+        magithub = super.magithub.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
 
-      magit =
-        super.magit.overrideAttrs (attrs: {
+        magit-svn = super.magit-svn.overrideAttrs (attrs: {
           # searches for Git at build time
           nativeBuildInputs =
             (attrs.nativeBuildInputs or []) ++ [ external.git ];
         });
 
-      magit-annex = super.magit-annex.overrideAttrs (attrs: {
+      kubernetes = super.kubernetes.overrideAttrs (attrs: {
         # searches for Git at build time
         nativeBuildInputs =
           (attrs.nativeBuildInputs or []) ++ [ external.git ];
       });
 
-      magit-gitflow = super.magit-gitflow.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+      # upstream issue: missing file header
+        mhc = super.mhc.override {
+          inherit (self.melpaPackages) calfw;
+        };
 
-      magithub = super.magithub.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        # missing .NET
+        nemerle = markBroken super.nemerle;
 
-      magit-svn = super.magit-svn.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        # part of a larger package
+        notmuch = dontConfigure super.notmuch;
 
-      magit-todos = super.magit-todos.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        # missing OCaml
+        ocp-indent = markBroken super.ocp-indent;
 
-      magit-filenotify = super.magit-filenotify.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        # upstream issue: missing file header
+        qiita = markBroken super.qiita;
 
-      mhc = super.mhc.override {
-        inherit (self.melpaPackages) calfw;
-      };
+        # upstream issue: missing file header
+        speech-tagger = markBroken super.speech-tagger;
 
-      # missing .NET
-      nemerle = markBroken super.nemerle;
+        shm = super.shm.overrideAttrs (attrs: {
+          propagatedUserEnvPkgs = [ external.structured-haskell-mode ];
+        });
 
-      # part of a larger package
-      notmuch = dontConfigure super.notmuch;
+        # upstream issue: missing file header
+        tawny-mode = markBroken super.tawny-mode;
 
-      # missing OCaml
-      ocp-indent = markBroken super.ocp-indent;
+        # upstream issue: missing file header
+        textmate = markBroken super.textmate;
 
-      orgit =
-        (super.orgit.overrideAttrs (attrs: {
-          # searches for Git at build time
+        # missing OCaml
+        utop = markBroken super.utop;
+
+        vdiff-magit = super.vdiff-magit.overrideAttrs (attrs: {
           nativeBuildInputs =
             (attrs.nativeBuildInputs or []) ++ [ external.git ];
-         }));
+        });
 
-      # tries to write to $HOME
-      php-auto-yasnippets = super.php-auto-yasnippets.overrideAttrs (attrs: {
-        HOME = "/tmp";
-      });
+        # upstream issue: missing file header
+        voca-builder = markBroken super.voca-builder;
 
-      # upstream issue: mismatched filename
-      processing-snippets = markBroken super.processing-snippets;
+        # upstream issue: missing file header
+        window-numbering = markBroken super.window-numbering;
 
-      # upstream issue: missing file header
-      qiita = markBroken super.qiita;
+        vterm = let
+          emacsSources = pkgs.stdenv.mkDerivation {
+            name = self.emacs.name + "-sources";
+            src = self.emacs.src;
 
-      racer = super.racer.overrideAttrs (attrs: {
-        postPatch = attrs.postPatch or "" + ''
-          substituteInPlace racer.el \
-            --replace /usr/local/src/rust/src ${external.rustPlatform.rustcSrc}
-        '';
-      });
+            dontConfigure = true;
+            dontBuild = true;
+            doCheck = false;
+            fixupPhase = ":";
 
-      # upstream issue: missing file footer
-      seoul256-theme = markBroken super.seoul256-theme;
+            installPhase = ''
+              mkdir -p $out
+              cp -a * $out
+            '';
+
+          };
+
+          libvterm = pkgs.libvterm-neovim.overrideAttrs(old: rec {
+            pname = "libvterm-neovim";
+            version = "2019-04-27";
+            name = pname + "-" + version;
+            src = pkgs.fetchFromGitHub {
+              owner = "neovim";
+              repo = "libvterm";
+              rev = "89675ffdda615ffc3f29d1c47a933f4f44183364";
+              sha256 = "0l9ixbj516vl41v78fi302ws655xawl7s94gmx1kb3fmfgamqisy";
+            };
+          });
+
+        in pkgs.stdenv.mkDerivation rec {
+          inherit (super.vterm) name version src;
+
+          nativeBuildInputs = [ pkgs.cmake ];
+          buildInputs = [ self.emacs libvterm ];
+
+          cmakeFlags = [
+            "-DEMACS_SOURCE=${emacsSources}"
+            "-DUSE_SYSTEM_LIBVTERM=True"
+          ];
+
+          installPhase = ''
+            install -d $out/share/emacs/site-lisp
+            install ../*.el $out/share/emacs/site-lisp
+            install ../*.so $out/share/emacs/site-lisp
+          '';
+        };
+        # Legacy alias
+        emacs-libvterm = shared.vterm;
+
+        zmq = super.zmq.overrideAttrs(old: {
+          stripDebugList = [ "share" ];
+          preBuild = ''
+            make
+          '';
+          nativeBuildInputs = [
+            external.autoconf external.automake external.pkgconfig external.libtool
+            (external.zeromq.override { enableDrafts = true; })
+          ];
+          postInstall = ''
+            mv $out/share/emacs/site-lisp/elpa/zmq-*/src/.libs/emacs-zmq.so $out/share/emacs/site-lisp/elpa/zmq-*
+            rm -r $out/share/emacs/site-lisp/elpa/zmq-*/src
+            rm $out/share/emacs/site-lisp/elpa/zmq-*/Makefile
+          '';
+        });
 
-      spaceline = super.spaceline.override {
-        inherit (self.melpaPackages) powerline;
+        # Map legacy renames from emacs2nix since code generation was ported to emacs lisp
+        _0blayout = super."0blayout";
+        _0xc = super."0xc";
+        _2048-game = super."2048-game";
+        _4clojure = super."4clojure";
+        at = super."@";
+        desktop-plus = super."desktop+";
+        ghub-plus = super."ghub+";
+        git-gutter-plus = super."git-gutter+";
+        git-gutter-fringe-plus = super."git-gutter-fringe+";
+        ido-completing-read-plus = super."ido-completing-read+";
+        image-plus = super."image+";
+        image-dired-plus = super."image-dired+";
+        markdown-mode-plus = super."markdown-mode+";
+        package-plus = super."package+";
+        rect-plus = super."rect+";
+        term-plus = super."term+";
+        term-plus-key-intercept = super."term+key-intercept";
+        term-plus-mux = super."term+mux";
+        xml-plus = super."xml+";
       };
 
-      # upstream issue: missing file header
-      speech-tagger = markBroken super.speech-tagger;
+      stable = shared // {
+        # part of a larger package
+        # upstream issue: missing package version
+        cmake-mode = markBroken (dontConfigure super.cmake-mode);
 
-      # upstream issue: missing file header
-      stgit = markBroken super.stgit;
+        # upstream issue: missing file header
+        connection = markBroken super.connection;
 
-      # upstream issue: missing file header
-      tawny-mode = markBroken super.tawny-mode;
+        # upstream issue: missing file header
+        dictionary = markBroken super.dictionary;
 
-      # upstream issue: missing file header
-      textmate = markBroken super.textmate;
+        # missing git
+        egg = markBroken super.egg;
 
-      treemacs-magit = super.treemacs-magit.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
+        # upstream issue: missing dependency redshank
+        emr = markBroken super.emr;
+
+        # upstream issue: doesn't build
+        eterm-256color = markBroken super.eterm-256color;
+
+        # upstream issue: missing dependency highlight
+        evil-search-highlight-persist = markBroken super.evil-search-highlight-persist;
+
+        # upstream issue: missing dependency highlight
+        floobits  = markBroken super.floobits;
+
+        # missing OCaml
+        flycheck-ocaml = markBroken super.flycheck-ocaml;
+
+        # upstream issue: missing dependency
+        fold-dwim-org = markBroken super.fold-dwim-org;
+
+        # build timeout
+        graphene = markBroken super.graphene;
+
+        # Expects bash to be at /bin/bash
+        helm-rtags = markBroken super.helm-rtags;
 
-      # missing OCaml
-      utop = markBroken super.utop;
+        # upstream issue: missing file header
+        link = markBroken super.link;
 
-      vdiff-magit =
-        (super.vdiff-magit.overrideAttrs (attrs: {
+        # missing OCaml
+        merlin = markBroken super.merlin;
+
+        # upstream issue: missing file header
+        po-mode = markBroken super.po-mode;
+
+        # upstream issue: truncated file
+        powershell = markBroken super.powershell;
+      };
+
+      unstable = shared // {
+        # upstream issue: mismatched filename
+        ack-menu = markBroken super.ack-menu;
+
+        editorconfig = super.editorconfig.overrideAttrs (attrs: {
+          propagatedUserEnvPkgs = [ external.editorconfig-core-c ];
+        });
+
+        egg = super.egg.overrideAttrs (attrs: {
+          # searches for Git at build time
           nativeBuildInputs =
             (attrs.nativeBuildInputs or []) ++ [ external.git ];
-        }));
+        });
 
-      # upstream issue: missing file header
-      voca-builder = markBroken super.voca-builder;
+        # missing dependencies
+        evil-search-highlight-persist = super.evil-search-highlight-persist.overrideAttrs (attrs: {
+          packageRequires = with self; [ evil highlight ];
+        });
 
-      # upstream issue: missing file header
-      window-numbering = markBroken super.window-numbering;
-
-      w3m = super.w3m.override (args: {
-        melpaBuild = drv: args.melpaBuild (drv // {
-          prePatch =
-            let w3m = "${lib.getBin external.w3m}/bin/w3m"; in ''
-              substituteInPlace w3m.el \
-                --replace 'defcustom w3m-command nil' \
-                          'defcustom w3m-command "${w3m}"'
-            '';
+        forge = super.forge.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
         });
-      });
 
-      # Map legacy renames from emacs2nix since code generation was ported to emacs lisp
-      _0blayout = super."0blayout";
-      _0xc = super."0xc";
-      _2048-game = super."2048-game";
-      _4clojure = super."4clojure";
-      at = super."@";
-      desktop-plus = super."desktop+";
-      # filesets-plus = super."filesets+";
-      ghub-plus = super."ghub+";
-      git-gutter-plus = super."git-gutter+";
-      git-gutter-fringe-plus = super."git-gutter-fringe+";
-      ido-completing-read-plus = super."ido-completing-read+";
-      image-plus = super."image+";
-      image-dired-plus = super."image-dired+";
-      markdown-mode-plus = super."markdown-mode+";
-      package-plus = super."package+";
-      rect-plus = super."rect+";
-      term-plus = super."term+";
-      term-plus-key-intercept = super."term+key-intercept";
-      term-plus-mux = super."term+mux";
-      xml-plus = super."xml+";
+        # upstream issue: mismatched filename
+        helm-lobsters = markBroken super.helm-lobsters;
+
+        # Expects bash to be at /bin/bash
+        helm-rtags = markBroken super.helm-rtags;
 
+        # Fails with "package does not untar cleanly into ..."
+        irony = shared.irony.overrideAttrs(old: {
+          meta = old.meta // {
+            broken = true;
+          };
+        });
+
+        orgit =
+          (super.orgit.overrideAttrs (attrs: {
+            # searches for Git at build time
+            nativeBuildInputs =
+              (attrs.nativeBuildInputs or []) ++ [ external.git ];
+           }));
+
+        # tries to write to $HOME
+        php-auto-yasnippets = super.php-auto-yasnippets.overrideAttrs (attrs: {
+          HOME = "/tmp";
+        });
+
+        # upstream issue: mismatched filename
+        processing-snippets = markBroken super.processing-snippets;
+
+        racer = super.racer.overrideAttrs (attrs: {
+          postPatch = attrs.postPatch or "" + ''
+            substituteInPlace racer.el \
+              --replace /usr/local/src/rust/src ${external.rustPlatform.rustcSrc}
+          '';
+        });
+
+        # upstream issue: missing file footer
+        seoul256-theme = markBroken super.seoul256-theme;
+
+        spaceline = super.spaceline.override {
+          inherit (self.melpaPackages) powerline;
+        };
+
+        treemacs-magit = super.treemacs-magit.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or []) ++ [ external.git ];
+        });
+
+        w3m = super.w3m.override (args: {
+          melpaBuild = drv: args.melpaBuild (drv // {
+            prePatch =
+              let w3m = "${lib.getBin external.w3m}/bin/w3m"; in ''
+                substituteInPlace w3m.el \
+                  --replace 'defcustom w3m-command nil' \
+                            'defcustom w3m-command "${w3m}"'
+              '';
+          });
+        });
+      };
     };
 
-    melpaPackages =
-      removeAttrs (super // overrides)
-      [
-        "show-marks"  # missing dependency: fm
-        "lenlen-theme"  # missing dependency: color-theme-solarized
-      ];
-  in
-    melpaPackages // { inherit melpaPackages; }
+  in super // overrides."${variant}");
+
+in generateMelpa { }
diff --git a/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix b/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix
deleted file mode 100644
index 8f52f2d3489..00000000000
--- a/pkgs/applications/editors/emacs-modes/melpa-stable-packages.nix
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-
-# Updating
-
-To update the list of packages from MELPA,
-
-
-1. Run ./update-melpa
-2. Check for evaluation errors:
-env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../ -A emacsPackagesNg.melpaStablePackages
-env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../ -A emacsPackagesNg.melpaPackages
-3. `git commit -m "melpa-packages: $(date -Idate)" recipes-archive-melpa.json`
-
-*/
-
-{ lib, external }:
-
-self:
-
-  let
-    inherit (import ./libgenerated.nix lib self) melpaDerivation;
-    imported = lib.listToAttrs (map (melpaDerivation "stable")
-                                    (lib.importJSON ./recipes-archive-melpa.json));
-    super = imported;
-
-    dontConfigure = pkg: pkg.override (args: {
-      melpaBuild = drv: args.melpaBuild (drv // {
-        configureScript = "true";
-      });
-    });
-
-    markBroken = pkg: if pkg != null then pkg.override (args: {
-      melpaBuild = drv: args.melpaBuild (drv // {
-        meta = (drv.meta or {}) // { broken = true; };
-      });
-    }) else null;
-
-    overrides = {
-      # Expects bash to be at /bin/bash
-      ac-rtags = markBroken super.ac-rtags;
-
-      airline-themes = super.airline-themes.override {
-        inherit (self.melpaPackages) powerline;
-      };
-
-      # upstream issue: missing file header
-      bufshow = markBroken super.bufshow;
-
-      # part of a larger package
-      caml = dontConfigure super.caml;
-
-      # part of a larger package
-      # upstream issue: missing package version
-      cmake-mode = markBroken (dontConfigure super.cmake-mode);
-
-      # Expects bash to be at /bin/bash
-      company-rtags = markBroken super.company-rtags;
-
-      # upstream issue: missing file header
-      connection = markBroken super.connection;
-
-      # upstream issue: missing file header
-      dictionary = markBroken super.dictionary;
-
-      easy-kill-extras = super.easy-kill-extras.override {
-        inherit (self.melpaPackages) easy-kill;
-      };
-
-      # missing git
-      egg = markBroken super.egg;
-
-      # upstream issue: missing file header
-      elmine = markBroken super.elmine;
-
-      # upstream issue: missing dependency redshank
-      emr = markBroken super.emr;
-
-      ess-R-data-view = super.ess-R-data-view.override {
-        inherit (self.melpaPackages) ess ctable popup;
-      };
-
-      # upstream issue: doesn't build
-      eterm-256color = markBroken super.eterm-256color;
-
-      # upstream issue: missing dependency highlight
-      evil-search-highlight-persist = markBroken super.evil-search-highlight-persist;
-
-      # upstream issue: missing dependency highlight
-      floobits  = markBroken super.floobits;
-
-      # missing OCaml
-      flycheck-ocaml = markBroken super.flycheck-ocaml;
-
-      # Expects bash to be at /bin/bash
-      flycheck-rtags = markBroken super.flycheck-rtags;
-
-      # upstream issue: missing dependency
-      fold-dwim-org = markBroken super.fold-dwim-org;
-
-      # build timeout
-      graphene = markBroken super.graphene;
-
-      # Expects bash to be at /bin/bash
-      helm-rtags = markBroken super.helm-rtags;
-
-      # Build same version as Haskell package
-      hindent = super.hindent.overrideAttrs (attrs: {
-        version = external.hindent.version;
-        src = external.hindent.src;
-        packageRequires = [ self.haskell-mode ];
-        propagatedUserEnvPkgs = [ external.hindent ];
-      });
-
-      # upstream issue: missing file header
-      ido-complete-space-or-hyphen = markBroken super.ido-complete-space-or-hyphen;
-
-      # upstream issue: missing file header
-      initsplit = markBroken super.initsplit;
-
-      # upstream issue: recipe fails
-      insert-shebang = markBroken super.insert-shebang;
-
-      # Expects bash to be at /bin/bash
-      ivy-rtags = markBroken super.ivy-rtags;
-
-      # upstream issue: missing file header
-      jsfmt = markBroken super.jsfmt;
-
-      # upstream issue: missing file header
-      link = markBroken super.link;
-
-      # upstream issue: missing file header
-      maxframe = markBroken super.maxframe;
-
-      magit =
-        (super.magit.override {
-          # version of magit-popup needs to match magit
-          # https://github.com/magit/magit/issues/3286
-          inherit (self.melpaStablePackages) magit-popup;
-        }).overrideAttrs (attrs: {
-          # searches for Git at build time
-          nativeBuildInputs =
-            (attrs.nativeBuildInputs or []) ++ [ external.git ];
-        });
-
-      magit-todos = super.magit-todos.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
-
-      magit-filenotify = super.magit-filenotify.overrideAttrs (attrs: {
-        # searches for Git at build time
-        nativeBuildInputs =
-          (attrs.nativeBuildInputs or []) ++ [ external.git ];
-      });
-
-      # missing OCaml
-      merlin = markBroken super.merlin;
-
-      mhc = super.mhc.override {
-        inherit (self.melpaPackages) calfw;
-      };
-
-      # missing .NET
-      nemerle = markBroken super.nemerle;
-
-      # part of a larger package
-      notmuch = dontConfigure super.notmuch;
-
-      # missing OCaml
-      ocp-indent = markBroken super.ocp-indent;
-
-      # upstream issue: missing file header
-      po-mode = markBroken super.po-mode;
-
-      # upstream issue: truncated file
-      powershell = markBroken super.powershell;
-
-      # upstream issue: missing file header
-      qiita = markBroken super.qiita;
-
-      # upstream issue: missing file header
-      speech-tagger = markBroken super.speech-tagger;
-
-      # upstream issue: missing file header
-      stgit = markBroken super.stgit;
-
-      # upstream issue: missing file header
-      tawny-mode = markBroken super.tawny-mode;
-
-      # upstream issue: missing file header
-      textmate = markBroken super.textmate;
-
-      # missing OCaml
-      utop = markBroken super.utop;
-
-      vdiff-magit =
-        (super.vdiff-magit.overrideAttrs (attrs: {
-          nativeBuildInputs =
-            (attrs.nativeBuildInputs or []) ++ [ external.git ];
-        }));
-
-      # upstream issue: missing file header
-      voca-builder = markBroken super.voca-builder;
-
-      # upstream issue: missing file header
-      window-numbering = markBroken super.window-numbering;
-
-      # Map legacy renames from emacs2nix since code generation was ported to emacs lisp
-      _0blayout = super."0blayout";
-      _0xc = super."0xc";
-      _2048-game = super."2048-game";
-      _4clojure = super."4clojure";
-      at = super."@";
-      desktop-plus = super."desktop+";
-      ghub-plus = super."ghub+";
-      git-gutter-plus = super."git-gutter+";
-      git-gutter-fringe-plus = super."git-gutter-fringe+";
-      ido-completing-read-plus = super."ido-completing-read+";
-      image-plus = super."image+";
-      image-dired-plus = super."image-dired+";
-      markdown-mode-plus = super."markdown-mode+";
-      package-plus = super."package+";
-      rect-plus = super."rect+";
-      term-plus = super."term+";
-      term-plus-key-intercept = super."term+key-intercept";
-      term-plus-mux = super."term+mux";
-      xml-plus = super."xml+";
-
-    };
-
-    melpaStablePackages = super // overrides;
-  in
-    melpaStablePackages // { inherit melpaStablePackages; }
diff --git a/pkgs/applications/editors/emacs-modes/nyan-mode/default.nix b/pkgs/applications/editors/emacs-modes/nyan-mode/default.nix
deleted file mode 100644
index e0057fd30ce..00000000000
--- a/pkgs/applications/editors/emacs-modes/nyan-mode/default.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{lib, 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";
-    license = lib.licenses.gpl3Plus;
-  };
-}
diff --git a/pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch b/pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch
deleted file mode 100644
index b471531ec34..00000000000
--- a/pkgs/applications/editors/emacs-modes/nyan-mode/directory.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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/applications/editors/emacs-modes/org-packages.nix b/pkgs/applications/editors/emacs-modes/org-packages.nix
index 46b90a52a09..d3ad7fa4093 100644
--- a/pkgs/applications/editors/emacs-modes/org-packages.nix
+++ b/pkgs/applications/editors/emacs-modes/org-packages.nix
@@ -28,4 +28,4 @@ self:
 
     orgPackages = super // overrides;
 
-  in orgPackages // { inherit orgPackages; }
+  in orgPackages
diff --git a/pkgs/applications/editors/emacs-modes/redshank/default.nix b/pkgs/applications/editors/emacs-modes/redshank/default.nix
deleted file mode 100644
index e03d2fdc90f..00000000000
--- a/pkgs/applications/editors/emacs-modes/redshank/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ stdenv, fetchgit }:
-
-stdenv.mkDerivation rec {
-  pname = "redshank";
-  name = "${pname}-20120510";
-
-  src = fetchgit {
-    url = "http://www.foldr.org/~michaelw/projects/redshank.git";
-    rev = "f98e68f532e622bcd464292ca4a9cf5fbea14ebb";
-    sha256 = "1jdkgvd5xy9hl5q611jwah2n05abjp7qcy9sj4k1z11x0ii62b6p";
-  };
-
-  installPhase = ''
-    mkdir -p $out/share/emacs/site-lisp
-    cp *.el *.elc $out/share/emacs/site-lisp/
-  '';
-
-  meta = {
-    description = "Common Lisp Editing Extensions (for Emacs)";
-    homepage = http://www.foldr.org/~michaelw/emacs/redshank/;
-    platforms = stdenv.lib.platforms.all;
-  };
-}
diff --git a/pkgs/applications/editors/emacs-modes/stgit/default.nix b/pkgs/applications/editors/emacs-modes/stgit/default.nix
deleted file mode 100644
index b615accd721..00000000000
--- a/pkgs/applications/editors/emacs-modes/stgit/default.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ stdenv, fetchurl }:
-
-stdenv.mkDerivation rec {
-  pname = "stgit";
-  name = "${pname}-2009-10-28";
-
-  dontUnpack = true;
-
-  src = fetchurl {
-    url = "https://raw.githubusercontent.com/miracle2k/stgit/master/contrib/stgit.el";
-    sha256 = "0pl8q480633vdkylr85s7cbd4653xpzwklnxrwm8xhsnvw9d501q";
-    name = "stgit.el";
-  };
-
-  installPhase = ''
-    mkdir -p $out/share/emacs/site-lisp
-    cp $src $out/share/emacs/site-lisp/stgit.el
-  '';
-
-  meta = {
-    description = "An emacs mode for Stgit";
-    homepage = http://procode.org/stgit/;
-    platforms = stdenv.lib.platforms.all;
-  };
-}
diff --git a/pkgs/applications/editors/emacs-modes/update-melpa b/pkgs/applications/editors/emacs-modes/update-melpa
index 2b2af5cb2bb..5c636416a5e 100755
--- a/pkgs/applications/editors/emacs-modes/update-melpa
+++ b/pkgs/applications/editors/emacs-modes/update-melpa
@@ -1,8 +1,6 @@
 #! /usr/bin/env nix-shell
-#! nix-shell --show-trace -i sh -p git nix nix-prefetch-git nix-prefetch-hg "import ./updater-emacs.nix"
+#! nix-shell --show-trace ./updater-emacs.nix -i bash
 
-# "with import ../../../.. {}; emacsWithPackages (epkgs: with epkgs.melpaPackages; [ promise semaphore ])"
+SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P )"
 
-exec emacs --fg-daemon=updater --quick -l update-melpa.el -f run-updater "$@"
-
-# exec emacs update-melpa.el "$@"
+exec emacs --fg-daemon=updater --quick -l $SCRIPT_DIR/update-melpa.el -f run-updater "$@"
diff --git a/pkgs/applications/editors/emacs-modes/updater-emacs.nix b/pkgs/applications/editors/emacs-modes/updater-emacs.nix
index b64a410e7b4..c7e858078e6 100644
--- a/pkgs/applications/editors/emacs-modes/updater-emacs.nix
+++ b/pkgs/applications/editors/emacs-modes/updater-emacs.nix
@@ -1,29 +1,40 @@
-with import ../../../.. {};
-(emacsPackagesNgFor emacs26).
-emacsWithPackages (epkgs: let
-  promise = epkgs.trivialBuild {
-    pname = "promise";
-    version = "1";
-    src = fetchFromGitHub {
-      owner = "bendlas";
-      repo = "emacs-promise";
-      rev = "4da97087c5babbd8429b5ce62a8323b9b03c6022";
-      sha256 = "0yin7kj69g4zxs30pvk47cnfygxlaw7jc7chr3b36lz51yqczjsy";
-      
+let
+  pkgs = import ../../../.. {};
+
+  emacsEnv = (pkgs.emacsPackagesNgFor pkgs.emacs26).emacsWithPackages (epkgs: let
+
+    promise = epkgs.trivialBuild {
+      pname = "promise";
+      version = "1";
+      src = pkgs.fetchFromGitHub {
+        owner = "bendlas";
+        repo = "emacs-promise";
+        rev = "4da97087c5babbd8429b5ce62a8323b9b03c6022";
+        sha256 = "0yin7kj69g4zxs30pvk47cnfygxlaw7jc7chr3b36lz51yqczjsy";
+      };
     };
-  };
-  semaphore = epkgs.trivialBuild {
-    pname = "semaphore";
-    version = "1";
-    packageRequires = [ promise ];
-    src = fetchFromGitHub {
-      owner = "webnf";
-      repo = "semaphore.el";
-      rev = "93802cb093073bc6a6ccd797328dafffcef248e0";
-      sha256 = "09pfyp27m35sv340xarhld7xx2vv5fs5xj4418709iw6l6hpk853";
-      
+
+    semaphore = epkgs.trivialBuild {
+      pname = "semaphore";
+      version = "1";
+      packageRequires = [ promise ];
+      src = pkgs.fetchFromGitHub {
+        owner = "webnf";
+        repo = "semaphore.el";
+        rev = "93802cb093073bc6a6ccd797328dafffcef248e0";
+        sha256 = "09pfyp27m35sv340xarhld7xx2vv5fs5xj4418709iw6l6hpk853";
+      };
     };
-  };
-  in [ promise semaphore ]
-     #  ++ (with epkgs.melpaPackages; [ smex rainbow-delimiters paredit ])
-)
+
+  in [ promise semaphore ]);
+
+in pkgs.mkShell {
+  buildInputs = [
+    pkgs.git
+    pkgs.nix
+    pkgs.bash
+    pkgs.nix-prefetch-git
+    pkgs.nix-prefetch-hg
+    emacsEnv
+  ];
+}