about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix')
-rw-r--r--nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix532
1 files changed, 532 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix b/nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix
new file mode 100644
index 000000000000..e5e2bac964f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix
@@ -0,0 +1,532 @@
+/*
+
+# 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 emacs.pkgs..melpaStablePackages
+env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../ -A emacs.pkgs..melpaPackages
+3. `git commit -m "melpa-packages: $(date -Idate)" recipes-archive-melpa.json`
+
+## Update from overlay
+
+Alternatively, run the following command:
+
+./update-from-overlay
+
+It will update both melpa and elpa packages using
+https://github.com/nix-community/emacs-overlay. It's almost
+instantenous and formats commits for you.
+
+*/
+
+{ lib, pkgs }: variant: self:
+let
+  dontConfigure = pkg:
+    if pkg != null then pkg.override (args: {
+      melpaBuild = drv: args.melpaBuild (drv // {
+        dontConfigure = true;
+      });
+    }) else null;
+
+  markBroken = pkg:
+    if pkg != null then pkg.override (args: {
+      melpaBuild = drv: args.melpaBuild (drv // {
+        meta = (drv.meta or { }) // { broken = true; };
+      });
+    }) else null;
+
+  externalSrc = pkg: epkg:
+    if pkg != null then pkg.override (args: {
+      melpaBuild = drv: args.melpaBuild (drv // {
+        inherit (epkg) src version;
+
+        propagatedUserEnvPkgs = [ epkg ];
+      });
+    }) else null;
+
+  buildWithGit = pkg: pkg.overrideAttrs (attrs: {
+    nativeBuildInputs =
+      (attrs.nativeBuildInputs or [ ]) ++ [ pkgs.git ];
+  });
+
+  fix-rtags = pkg:
+    if pkg != null then dontConfigure (externalSrc pkg pkgs.rtags)
+    else null;
+
+  generateMelpa = lib.makeOverridable ({ archiveJson ? ./recipes-archive-melpa.json
+                                       }:
+    let
+      inherit (import ./libgenerated.nix lib self) melpaDerivation;
+      super = (
+        lib.listToAttrs (builtins.filter
+          (s: s != null)
+          (map
+            (melpaDerivation variant)
+            (lib.importJSON archiveJson)
+          )
+        )
+      );
+
+      overrides = {
+        # Expects bash to be at /bin/bash
+        ac-rtags = fix-rtags super.ac-rtags;
+
+        airline-themes = super.airline-themes.override {
+          inherit (self.melpaPackages) powerline;
+        };
+
+        auto-complete-clang-async = super.auto-complete-clang-async.overrideAttrs (old: {
+          buildInputs = old.buildInputs ++ [ pkgs.llvmPackages.llvm ];
+          CFLAGS = "-I${pkgs.llvmPackages.clang}/include";
+          LDFLAGS = "-L${pkgs.llvmPackages.clang}/lib";
+        });
+
+        # part of a larger package
+        caml = dontConfigure super.caml;
+
+        # part of a larger package
+        # upstream issue: missing package version
+        cmake-mode = dontConfigure super.cmake-mode;
+
+        company-rtags = fix-rtags super.company-rtags;
+
+        easy-kill-extras = super.easy-kill-extras.override {
+          inherit (self.melpaPackages) easy-kill;
+        };
+
+        dune = dontConfigure super.dune;
+
+        emacsql-sqlite = super.emacsql-sqlite.overrideAttrs (old: {
+          buildInputs = old.buildInputs ++ [ pkgs.sqlite ];
+
+          postBuild = ''
+            cd source/sqlite
+            make
+            cd -
+          '';
+
+          postInstall = ''
+            install -m=755 -D source/sqlite/emacsql-sqlite \
+              $out/share/emacs/site-lisp/elpa/emacsql-sqlite-${old.version}/sqlite/emacsql-sqlite
+          '';
+
+          stripDebugList = [ "share" ];
+        });
+
+        # https://github.com/syl20bnr/evil-escape/pull/86
+        evil-escape = super.evil-escape.overrideAttrs (attrs: {
+          postPatch = ''
+            substituteInPlace evil-escape.el \
+              --replace ' ;;; evil' ';;; evil'
+          '';
+          packageRequires = with self; [ evil ];
+        });
+
+        ess-R-data-view = super.ess-R-data-view.override {
+          inherit (self.melpaPackages) ess ctable popup;
+        };
+
+        flycheck-rtags = fix-rtags super.flycheck-rtags;
+
+        pdf-tools = super.pdf-tools.overrideAttrs (old: {
+          nativeBuildInputs = [
+            pkgs.autoconf
+            pkgs.automake
+            pkgs.pkg-config
+            pkgs.removeReferencesTo
+          ];
+          buildInputs = old.buildInputs ++ [ pkgs.libpng pkgs.zlib pkgs.poppler ];
+          preBuild = ''
+            make server/epdfinfo
+            remove-references-to ${lib.concatStringsSep " " (
+              map (output: "-t " + output) (
+                [
+                  pkgs.glib.dev
+                  pkgs.libpng.dev
+                  pkgs.poppler.dev
+                  pkgs.zlib.dev
+                  pkgs.cairo.dev
+                ]
+                ++ lib.optional pkgs.stdenv.isLinux pkgs.stdenv.cc.libc.dev
+              )
+            )} server/epdfinfo
+          '';
+          recipe = pkgs.writeText "recipe" ''
+            (pdf-tools
+            :repo "politza/pdf-tools" :fetcher github
+            :files ("lisp/pdf-*.el" "server/epdfinfo"))
+          '';
+        });
+
+        # Build same version as Haskell package
+        hindent = (externalSrc super.hindent pkgs.haskellPackages.hindent).overrideAttrs (attrs: {
+          packageRequires = [ self.haskell-mode ];
+        });
+
+        irony = super.irony.overrideAttrs (old: {
+          cmakeFlags = old.cmakeFlags or [ ] ++ [ "-DCMAKE_INSTALL_BINDIR=bin" ];
+          NIX_CFLAGS_COMPILE = "-UCLANG_RESOURCE_DIR";
+          preConfigure = ''
+            cd server
+          '';
+          preBuild = ''
+            make
+            install -D bin/irony-server $out/bin/irony-server
+            cd ..
+          '';
+          checkPhase = ''
+            cd source/server
+            make check
+            cd ../..
+          '';
+          preFixup = ''
+            rm -rf $out/share/emacs/site-lisp/elpa/*/server
+          '';
+          dontUseCmakeBuildDir = true;
+          doCheck = true;
+          packageRequires = [ self.emacs ];
+          nativeBuildInputs = [ pkgs.cmake pkgs.llvmPackages.llvm pkgs.llvmPackages.clang ];
+        });
+
+        # tries to write a log file to $HOME
+        insert-shebang = super.insert-shebang.overrideAttrs (attrs: {
+          HOME = "/tmp";
+        });
+
+        ivy-rtags = fix-rtags super.ivy-rtags;
+
+        libgit = super.libgit.overrideAttrs(attrs: {
+          nativeBuildInputs = (attrs.nativeBuildInputs or []) ++ [ pkgs.cmake ];
+          buildInputs = attrs.buildInputs ++ [ pkgs.libgit2 ];
+          dontUseCmakeBuildDir = true;
+          postPatch = ''
+            sed -i s/'add_subdirectory(libgit2)'// CMakeLists.txt
+          '';
+          postBuild = ''
+            pushd working/libgit
+            make
+            popd
+          '';
+          postInstall = ''
+            outd=$(echo $out/share/emacs/site-lisp/elpa/libgit-**)
+            mkdir $outd/build
+            install -m444 -t $outd/build ./source/src/libegit2.so
+            rm -r $outd/src $outd/Makefile $outd/CMakeLists.txt
+          '';
+        });
+
+        evil-magit = buildWithGit super.evil-magit;
+
+        eopengrok = buildWithGit super.eopengrok;
+
+        forge = buildWithGit super.forge;
+
+        magit = buildWithGit super.magit;
+
+        magit-find-file = buildWithGit super.magit-find-file;
+
+        magit-gh-pulls = buildWithGit super.magit-gh-pulls;
+
+        magit-imerge = buildWithGit super.magit-imerge;
+
+        magit-lfs = buildWithGit super.magit-lfs;
+
+        magit-org-todos = buildWithGit super.magit-org-todos;
+
+        magit-tbdiff = buildWithGit super.magit-tbdiff;
+
+        magit-topgit = buildWithGit super.magit-topgit;
+
+        magit-vcsh = buildWithGit super.magit-vcsh;
+
+        magit-gerrit = buildWithGit super.magit-gerrit;
+
+        magit-annex = buildWithGit super.magit-annex;
+
+        magit-todos = buildWithGit super.magit-todos;
+
+        magit-filenotify = buildWithGit super.magit-filenotify;
+
+        magit-gitflow = buildWithGit super.magit-gitflow;
+
+        magithub = buildWithGit super.magithub;
+
+        magit-svn = buildWithGit super.magit-svn;
+
+        kubernetes = buildWithGit super.kubernetes;
+
+        kubernetes-evil = buildWithGit super.kubernetes-evil;
+
+        egg = buildWithGit super.egg;
+
+        kapacitor = buildWithGit super.kapacitor;
+
+        gerrit = buildWithGit super.gerrit;
+
+        gerrit-download = buildWithGit super.gerrit-download;
+
+        github-pullrequest = buildWithGit super.github-pullrequest;
+
+        jist = buildWithGit super.jist;
+
+        mandoku = buildWithGit super.mandoku;
+
+        mandoku-tls = buildWithGit super.mandoku-tls;
+
+        magit-p4 = buildWithGit super.magit-p4;
+
+        magit-rbr = buildWithGit super.magit-rbr;
+
+        magit-diff-flycheck = buildWithGit super.magit-diff-flycheck;
+
+        magit-reviewboard = buildWithGit super.magit-reviewboard;
+
+        magit-patch-changelog = buildWithGit super.magit-patch-changelog;
+
+        magit-circleci = buildWithGit super.magit-circleci;
+
+        magit-delta = buildWithGit super.magit-delta;
+
+        orgit = buildWithGit super.orgit;
+
+        orgit-forge = buildWithGit super.orgit-forge;
+
+        # upstream issue: missing file header
+        mhc = super.mhc.override {
+          inherit (self.melpaPackages) calfw;
+        };
+
+        # missing .NET
+        nemerle = markBroken super.nemerle;
+
+        # part of a larger package
+        notmuch = dontConfigure super.notmuch;
+
+        rtags = dontConfigure (externalSrc super.rtags pkgs.rtags);
+
+        rtags-xref = dontConfigure super.rtags;
+
+        shm = super.shm.overrideAttrs (attrs: {
+          propagatedUserEnvPkgs = [ pkgs.haskellPackages.structured-haskell-mode ];
+        });
+
+        # Telega has a server portion for it's network protocol
+        telega = super.telega.overrideAttrs (old: {
+          buildInputs = old.buildInputs ++ [ pkgs.tdlib ];
+          nativeBuildInputs = [ pkgs.pkg-config ];
+
+          patches = [
+            (pkgs.fetchpatch {
+              name = "telega-server-bin-store-prefer.patch";
+              url = "https://github.com/zevlg/telega.el/commit/72550f984ca869309d197203ef7de99182d71729.patch";
+              sha256 = "18xvz53bygksak6h5f8cz79y83p2va15i8qz7n4s3g9gsklmkj2p";
+            })
+          ];
+
+          postPatch = ''
+            substituteInPlace telega-customize.el \
+              --replace 'defcustom telega-server-command "telega-server"' \
+                        "defcustom telega-server-command \"$out/bin/telega-server\""
+
+            substituteInPlace telega-sticker.el --replace '"dwebp"' '"${pkgs.libwebp}/bin/dwebp"'
+
+            substituteInPlace telega-vvnote.el --replace '"ffmpeg' '"${pkgs.ffmpeg}/bin/ffmpeg'
+          '';
+
+          postBuild = ''
+            cd source/server
+            make
+            cd -
+          '';
+
+          postInstall = ''
+            mkdir -p $out/bin
+            install -m755 -Dt $out/bin ./source/server/telega-server
+          '';
+        });
+
+        treemacs-magit = super.treemacs-magit.overrideAttrs (attrs: {
+          # searches for Git at build time
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or [ ]) ++ [ pkgs.git ];
+        });
+
+        vdiff-magit = super.vdiff-magit.overrideAttrs (attrs: {
+          nativeBuildInputs =
+            (attrs.nativeBuildInputs or [ ]) ++ [ pkgs.git ];
+        });
+
+        zmq = super.zmq.overrideAttrs (old: {
+          stripDebugList = [ "share" ];
+          preBuild = ''
+            make
+          '';
+          nativeBuildInputs = [
+            pkgs.autoconf
+            pkgs.automake
+            pkgs.pkg-config
+            pkgs.libtool
+            (pkgs.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
+          '';
+        });
+
+        # Map legacy renames from emacs2nix since code generation was ported to emacs lisp
+        _0blayout = super."0blayout";
+        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+";
+
+        # upstream issue: missing file header
+        bufshow = markBroken super.bufshow;
+
+        # upstream issue: missing file header
+        connection = markBroken super.connection;
+
+        # upstream issue: missing file header
+        dictionary = markBroken super.dictionary;
+
+        # upstream issue: missing file header
+        elmine = markBroken super.elmine;
+
+        # 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: missing file header
+        instapaper = markBroken super.instapaper;
+
+        # upstream issue: missing file header
+        jsfmt = markBroken super.jsfmt;
+
+        # upstream issue: missing file header
+        maxframe = markBroken super.maxframe;
+
+        # upstream issue: doesn't build
+        magit-stgit = markBroken super.magit-stgit;
+
+        # upstream issue: missing file header
+        melancholy-theme = markBroken super.melancholy-theme;
+
+        # upstream issue: doesn't build
+        eterm-256color = markBroken super.eterm-256color;
+
+        # upstream issue: doesn't build
+        per-buffer-theme = markBroken super.per-buffer-theme;
+
+        # 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
+        sql-presto = markBroken super.sql-presto;
+
+        # upstream issue: missing file header
+        textmate = markBroken super.textmate;
+
+        # upstream issue: missing file header
+        link = markBroken super.link;
+
+        # upstream issue: missing file header
+        voca-builder = markBroken super.voca-builder;
+
+        # upstream issue: missing file header
+        window-numbering = markBroken super.window-numbering;
+
+        editorconfig = super.editorconfig.overrideAttrs (attrs: {
+          propagatedUserEnvPkgs = [ pkgs.editorconfig-core-c ];
+        });
+
+        # missing dependencies
+        evil-search-highlight-persist = super.evil-search-highlight-persist.overrideAttrs (attrs: {
+          packageRequires = with self; [ evil highlight ];
+        });
+
+        helm-rtags = fix-rtags super.helm-rtags;
+
+        # tries to write to $HOME
+        php-auto-yasnippets = super.php-auto-yasnippets.overrideAttrs (attrs: {
+          HOME = "/tmp";
+        });
+
+        racer = super.racer.overrideAttrs (attrs: {
+          postPatch = attrs.postPatch or "" + ''
+            substituteInPlace racer.el \
+              --replace /usr/local/src/rust/src ${pkgs.rustPlatform.rustcSrc}
+          '';
+        });
+
+        spaceline = super.spaceline.override {
+          inherit (self.melpaPackages) powerline;
+        };
+
+        vterm = super.vterm.overrideAttrs (old: {
+          nativeBuildInputs = [ pkgs.cmake ];
+          buildInputs = old.buildInputs ++ [ self.emacs pkgs.libvterm-neovim ];
+          cmakeFlags = [
+            "-DEMACS_SOURCE=${self.emacs.src}"
+            "-DUSE_SYSTEM_LIBVTERM=ON"
+          ];
+          # we need the proper out directory to exist, so we do this in the
+          # postInstall instead of postBuild
+          postInstall = ''
+            pushd source/build >/dev/null
+            make
+            install -m444 -t $out/share/emacs/site-lisp/elpa/vterm-** ../*.so
+            popd > /dev/null
+            rm -rf $out/share/emacs/site-lisp/elpa/vterm-**/{CMake*,build,*.c,*.h}
+          '';
+        });
+
+        w3m = super.w3m.override (args: {
+          melpaBuild = drv: args.melpaBuild (drv // {
+            prePatch =
+              let w3m = "${lib.getBin pkgs.w3m}/bin/w3m"; in
+              ''
+                substituteInPlace w3m.el \
+                --replace 'defcustom w3m-command nil' \
+                'defcustom w3m-command "${w3m}"'
+              '';
+          });
+        });
+      };
+
+      # Deprecated legacy aliases for backwards compat
+      aliases = lib.listToAttrs (lib.attrValues (lib.mapAttrs (n: v: { name = v; value = builtins.trace "Melpa attribute '${v}' is a legacy alias that will be removed in 21.05, use '${n}' instead" melpaPackages.${n}; }) (lib.filterAttrs (n: v: lib.hasAttr n melpaPackages) {
+        "auto-complete-clang-async" = "emacsClangCompleteAsync";
+        "vterm" = "emacs-libvterm";
+        "0xc" = "_0xc";
+        "2048-game" = "_2048-game";
+        "4clojure" = "_4clojure";
+        "@" = "at";
+        "term+" = "term-plus";
+        "term+key-intercept" = "term-plus-key-intercept";
+        "term+mux" = "term-plus-mux";
+        "xml+" = "xml-plus";
+      })));
+
+      melpaPackages = lib.mapAttrs (n: v: if lib.hasAttr n overrides then overrides.${n} else v) super;
+
+    in
+    melpaPackages // aliases);
+
+in
+generateMelpa { }