diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/editors/emacs-modes/melpa-packages.nix | 532 |
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 { } |