Merge pull request #114246 from adisbladis/emacs-override-pkgs-lib

emacs-packages: Make pkgs & lib overrideable

authored by adisbladis and committed by GitHub 4370433b c3178c39

+75 -99
+16 -16
pkgs/applications/editors/emacs-modes/manual-packages.nix
··· 1 - { lib, external, pkgs }: self: with self; with lib.licenses; { 2 3 elisp-ffi = melpaBuild rec { 4 pname = "elisp-ffi"; ··· 9 rev = version; 10 sha256 = "0z2n3h5l5fj8wl8i1ilfzv11l3zba14sgph6gz7dx7q12cnp9j22"; 11 }; 12 - buildInputs = [ external.libffi ]; 13 preBuild = "make"; 14 recipe = pkgs.writeText "recipe" '' 15 (elisp-ffi ··· 29 }; 30 }; 31 32 - agda2-mode = with external; trivialBuild { 33 pname = "agda-mode"; 34 - version = Agda.version; 35 36 phases = [ "buildPhase" "installPhase" ]; 37 38 # already byte-compiled by Agda builder 39 buildPhase = '' 40 - agda=`${Agda}/bin/agda-mode locate` 41 cp `dirname $agda`/*.el* . 42 ''; 43 ··· 47 Wrapper packages that liberates init.el from `agda-mode locate` magic. 48 Simply add this to user profile or systemPackages and do `(require 'agda2)` in init.el. 49 ''; 50 - homepage = Agda.meta.homepage; 51 - license = Agda.meta.license; 52 }; 53 }; 54 55 agda-input = self.trivialBuild { 56 pname = "agda-input"; 57 58 - inherit (external.Agda) src version; 59 60 postUnpack = "mv $sourceRoot/src/data/emacs-mode/agda-input.el $sourceRoot"; 61 62 meta = { 63 description = "Standalone package providing the agda-input method without building Agda."; 64 - inherit (external.Agda.meta) homepage license; 65 }; 66 }; 67 ··· 74 75 ghc-mod = melpaBuild { 76 pname = "ghc"; 77 - version = external.ghc-mod.version; 78 - src = external.ghc-mod.src; 79 packageRequires = [ haskell-mode ]; 80 - propagatedUserEnvPkgs = [ external.ghc-mod ]; 81 recipe = pkgs.writeText "recipe" '' 82 (ghc-mod :repo "DanielG/ghc-mod" :fetcher github :files ("elisp/*.el")) 83 ''; ··· 115 116 llvm-mode = trivialBuild { 117 pname = "llvm-mode"; 118 - inherit (external.llvmPackages.llvm) src version; 119 120 dontConfigure = true; 121 buildPhase = '' ··· 123 ''; 124 125 meta = { 126 - inherit (external.llvmPackages.llvm.meta) homepage license; 127 description = "Major mode for the LLVM assembler language."; 128 }; 129 }; ··· 134 ott-mode = self.trivialBuild { 135 pname = "ott-mod"; 136 137 - inherit (external.ott) src version; 138 139 postUnpack = "mv $sourceRoot/emacs/ott-mode.el $sourceRoot"; 140 141 meta = { 142 description = "Standalone package providing ott-mode without building ott and with compiled bytecode."; 143 - inherit (external.Agda.meta) homepage license; 144 }; 145 }; 146
··· 1 + { lib, pkgs }: self: with self; with lib.licenses; { 2 3 elisp-ffi = melpaBuild rec { 4 pname = "elisp-ffi"; ··· 9 rev = version; 10 sha256 = "0z2n3h5l5fj8wl8i1ilfzv11l3zba14sgph6gz7dx7q12cnp9j22"; 11 }; 12 + buildInputs = [ pkgs.libffi ]; 13 preBuild = "make"; 14 recipe = pkgs.writeText "recipe" '' 15 (elisp-ffi ··· 29 }; 30 }; 31 32 + agda2-mode = trivialBuild { 33 pname = "agda-mode"; 34 + version = pkgs.haskellPackages.Agda.version; 35 36 phases = [ "buildPhase" "installPhase" ]; 37 38 # already byte-compiled by Agda builder 39 buildPhase = '' 40 + agda=`${pkgs.haskellPackages.Agda}/bin/agda-mode locate` 41 cp `dirname $agda`/*.el* . 42 ''; 43 ··· 47 Wrapper packages that liberates init.el from `agda-mode locate` magic. 48 Simply add this to user profile or systemPackages and do `(require 'agda2)` in init.el. 49 ''; 50 + homepage = pkgs.haskellPackages.Agda.meta.homepage; 51 + license = pkgs.haskellPackages.Agda.meta.license; 52 }; 53 }; 54 55 agda-input = self.trivialBuild { 56 pname = "agda-input"; 57 58 + inherit (pkgs.haskellPackages.Agda) src version; 59 60 postUnpack = "mv $sourceRoot/src/data/emacs-mode/agda-input.el $sourceRoot"; 61 62 meta = { 63 description = "Standalone package providing the agda-input method without building Agda."; 64 + inherit (pkgs.haskellPackages.Agda.meta) homepage license; 65 }; 66 }; 67 ··· 74 75 ghc-mod = melpaBuild { 76 pname = "ghc"; 77 + version = pkgs.haskellPackages.ghc-mod.version; 78 + src = pkgs.haskellPackages.ghc-mod.src; 79 packageRequires = [ haskell-mode ]; 80 + propagatedUserEnvPkgs = [ pkgs.haskellPackages.ghc-mod ]; 81 recipe = pkgs.writeText "recipe" '' 82 (ghc-mod :repo "DanielG/ghc-mod" :fetcher github :files ("elisp/*.el")) 83 ''; ··· 115 116 llvm-mode = trivialBuild { 117 pname = "llvm-mode"; 118 + inherit (pkgs.llvmPackages.llvm) src version; 119 120 dontConfigure = true; 121 buildPhase = '' ··· 123 ''; 124 125 meta = { 126 + inherit (pkgs.llvmPackages.llvm.meta) homepage license; 127 description = "Major mode for the LLVM assembler language."; 128 }; 129 }; ··· 134 ott-mode = self.trivialBuild { 135 pname = "ott-mod"; 136 137 + inherit (pkgs.ott) src version; 138 139 postUnpack = "mv $sourceRoot/emacs/ott-mode.el $sourceRoot"; 140 141 meta = { 142 description = "Standalone package providing ott-mode without building ott and with compiled bytecode."; 143 + inherit (pkgs.haskellPackages.Agda.meta) homepage license; 144 }; 145 }; 146
+22 -22
pkgs/applications/editors/emacs-modes/melpa-packages.nix
··· 22 23 */ 24 25 - { lib, external, pkgs }: variant: self: 26 let 27 dontConfigure = pkg: 28 if pkg != null then pkg.override (args: { ··· 53 }); 54 55 fix-rtags = pkg: 56 - if pkg != null then dontConfigure (externalSrc pkg external.rtags) 57 else null; 58 59 generateMelpa = lib.makeOverridable ({ archiveJson ? ./recipes-archive-melpa.json ··· 79 }; 80 81 auto-complete-clang-async = super.auto-complete-clang-async.overrideAttrs (old: { 82 - buildInputs = old.buildInputs ++ [ external.llvmPackages.llvm ]; 83 - CFLAGS = "-I${external.llvmPackages.clang}/include"; 84 - LDFLAGS = "-L${external.llvmPackages.clang}/lib"; 85 }); 86 87 # part of a larger package ··· 132 flycheck-rtags = fix-rtags super.flycheck-rtags; 133 134 pdf-tools = super.pdf-tools.overrideAttrs (old: { 135 - nativeBuildInputs = [ external.pkg-config ]; 136 - buildInputs = with external; old.buildInputs ++ [ autoconf automake libpng zlib poppler ]; 137 preBuild = "make server/epdfinfo"; 138 recipe = pkgs.writeText "recipe" '' 139 (pdf-tools ··· 143 }); 144 145 # Build same version as Haskell package 146 - hindent = (externalSrc super.hindent external.hindent).overrideAttrs (attrs: { 147 packageRequires = [ self.haskell-mode ]; 148 }); 149 ··· 169 dontUseCmakeBuildDir = true; 170 doCheck = true; 171 packageRequires = [ self.emacs ]; 172 - nativeBuildInputs = [ external.cmake external.llvmPackages.llvm external.llvmPackages.clang ]; 173 }); 174 175 # tries to write a log file to $HOME ··· 286 # part of a larger package 287 notmuch = dontConfigure super.notmuch; 288 289 - rtags = dontConfigure (externalSrc super.rtags external.rtags); 290 291 rtags-xref = dontConfigure super.rtags; 292 293 shm = super.shm.overrideAttrs (attrs: { 294 - propagatedUserEnvPkgs = [ external.structured-haskell-mode ]; 295 }); 296 297 # Telega has a server portion for it's network protocol 298 telega = super.telega.overrideAttrs (old: { 299 buildInputs = old.buildInputs ++ [ pkgs.tdlib ]; 300 - nativeBuildInputs = [ external.pkg-config ]; 301 302 postBuild = '' 303 cd source/server ··· 314 treemacs-magit = super.treemacs-magit.overrideAttrs (attrs: { 315 # searches for Git at build time 316 nativeBuildInputs = 317 - (attrs.nativeBuildInputs or [ ]) ++ [ external.git ]; 318 }); 319 320 vdiff-magit = super.vdiff-magit.overrideAttrs (attrs: { 321 nativeBuildInputs = 322 - (attrs.nativeBuildInputs or [ ]) ++ [ external.git ]; 323 }); 324 325 zmq = super.zmq.overrideAttrs (old: { ··· 328 make 329 ''; 330 nativeBuildInputs = [ 331 - external.autoconf 332 - external.automake 333 - external.pkg-config 334 - external.libtool 335 - (external.zeromq.override { enableDrafts = true; }) 336 ]; 337 postInstall = '' 338 mv $out/share/emacs/site-lisp/elpa/zmq-*/src/.libs/emacs-zmq.so $out/share/emacs/site-lisp/elpa/zmq-* ··· 415 window-numbering = markBroken super.window-numbering; 416 417 editorconfig = super.editorconfig.overrideAttrs (attrs: { 418 - propagatedUserEnvPkgs = [ external.editorconfig-core-c ]; 419 }); 420 421 # missing dependencies ··· 433 racer = super.racer.overrideAttrs (attrs: { 434 postPatch = attrs.postPatch or "" + '' 435 substituteInPlace racer.el \ 436 - --replace /usr/local/src/rust/src ${external.rustPlatform.rustcSrc} 437 ''; 438 }); 439 ··· 462 w3m = super.w3m.override (args: { 463 melpaBuild = drv: args.melpaBuild (drv // { 464 prePatch = 465 - let w3m = "${lib.getBin external.w3m}/bin/w3m"; in 466 '' 467 substituteInPlace w3m.el \ 468 --replace 'defcustom w3m-command nil' \
··· 22 23 */ 24 25 + { lib, pkgs }: variant: self: 26 let 27 dontConfigure = pkg: 28 if pkg != null then pkg.override (args: { ··· 53 }); 54 55 fix-rtags = pkg: 56 + if pkg != null then dontConfigure (externalSrc pkg pkgs.rtags) 57 else null; 58 59 generateMelpa = lib.makeOverridable ({ archiveJson ? ./recipes-archive-melpa.json ··· 79 }; 80 81 auto-complete-clang-async = super.auto-complete-clang-async.overrideAttrs (old: { 82 + buildInputs = old.buildInputs ++ [ pkgs.llvmPackages.llvm ]; 83 + CFLAGS = "-I${pkgs.llvmPackages.clang}/include"; 84 + LDFLAGS = "-L${pkgs.llvmPackages.clang}/lib"; 85 }); 86 87 # part of a larger package ··· 132 flycheck-rtags = fix-rtags super.flycheck-rtags; 133 134 pdf-tools = super.pdf-tools.overrideAttrs (old: { 135 + nativeBuildInputs = [ pkgs.pkg-config ]; 136 + buildInputs = with pkgs; old.buildInputs ++ [ autoconf automake libpng zlib poppler ]; 137 preBuild = "make server/epdfinfo"; 138 recipe = pkgs.writeText "recipe" '' 139 (pdf-tools ··· 143 }); 144 145 # Build same version as Haskell package 146 + hindent = (externalSrc super.hindent pkgs.haskellPackages.hindent).overrideAttrs (attrs: { 147 packageRequires = [ self.haskell-mode ]; 148 }); 149 ··· 169 dontUseCmakeBuildDir = true; 170 doCheck = true; 171 packageRequires = [ self.emacs ]; 172 + nativeBuildInputs = [ pkgs.cmake pkgs.llvmPackages.llvm pkgs.llvmPackages.clang ]; 173 }); 174 175 # tries to write a log file to $HOME ··· 286 # part of a larger package 287 notmuch = dontConfigure super.notmuch; 288 289 + rtags = dontConfigure (externalSrc super.rtags pkgs.rtags); 290 291 rtags-xref = dontConfigure super.rtags; 292 293 shm = super.shm.overrideAttrs (attrs: { 294 + propagatedUserEnvPkgs = [ pkgs.haskellPackages.structured-haskell-mode ]; 295 }); 296 297 # Telega has a server portion for it's network protocol 298 telega = super.telega.overrideAttrs (old: { 299 buildInputs = old.buildInputs ++ [ pkgs.tdlib ]; 300 + nativeBuildInputs = [ pkgs.pkg-config ]; 301 302 postBuild = '' 303 cd source/server ··· 314 treemacs-magit = super.treemacs-magit.overrideAttrs (attrs: { 315 # searches for Git at build time 316 nativeBuildInputs = 317 + (attrs.nativeBuildInputs or [ ]) ++ [ pkgs.git ]; 318 }); 319 320 vdiff-magit = super.vdiff-magit.overrideAttrs (attrs: { 321 nativeBuildInputs = 322 + (attrs.nativeBuildInputs or [ ]) ++ [ pkgs.git ]; 323 }); 324 325 zmq = super.zmq.overrideAttrs (old: { ··· 328 make 329 ''; 330 nativeBuildInputs = [ 331 + pkgs.autoconf 332 + pkgs.automake 333 + pkgs.pkg-config 334 + pkgs.libtool 335 + (pkgs.zeromq.override { enableDrafts = true; }) 336 ]; 337 postInstall = '' 338 mv $out/share/emacs/site-lisp/elpa/zmq-*/src/.libs/emacs-zmq.so $out/share/emacs/site-lisp/elpa/zmq-* ··· 415 window-numbering = markBroken super.window-numbering; 416 417 editorconfig = super.editorconfig.overrideAttrs (attrs: { 418 + propagatedUserEnvPkgs = [ pkgs.editorconfig-core-c ]; 419 }); 420 421 # missing dependencies ··· 433 racer = super.racer.overrideAttrs (attrs: { 434 postPatch = attrs.postPatch or "" + '' 435 substituteInPlace racer.el \ 436 + --replace /usr/local/src/rust/src ${pkgs.rustPlatform.rustcSrc} 437 ''; 438 }); 439 ··· 462 w3m = super.w3m.override (args: { 463 melpaBuild = drv: args.melpaBuild (drv // { 464 prePatch = 465 + let w3m = "${lib.getBin pkgs.w3m}/bin/w3m"; in 466 '' 467 substituteInPlace w3m.el \ 468 --replace 'defcustom w3m-command nil' \
+3 -21
pkgs/top-level/all-packages.nix
··· 21948 }; 21949 21950 emacsPackagesFor = emacs: import ./emacs-packages.nix { 21951 - inherit lib newScope stdenv pkgs; 21952 - inherit fetchFromGitHub fetchurl; 21953 - inherit emacs texinfo makeWrapper runCommand writeText; 21954 - inherit (xorg) lndir; 21955 - 21956 - trivialBuild = callPackage ../build-support/emacs/trivial.nix { 21957 - inherit emacs; 21958 - }; 21959 - 21960 - melpaBuild = callPackage ../build-support/emacs/melpa.nix { 21961 - inherit emacs; 21962 - }; 21963 - 21964 - external = { 21965 - inherit (haskellPackages) 21966 - ghc-mod structured-haskell-mode Agda hindent; 21967 - inherit 21968 - autoconf automake editorconfig-core-c git libffi libpng pkg-config 21969 - poppler rtags w3m zlib substituteAll rustPlatform cmake llvmPackages 21970 - libtool zeromq openssl ott; 21971 - }; 21972 }; 21973 21974 inherit (gnome3) empathy;
··· 21948 }; 21949 21950 emacsPackagesFor = emacs: import ./emacs-packages.nix { 21951 + inherit (lib) makeScope makeOverridable; 21952 + inherit emacs; 21953 + pkgs' = pkgs; # default pkgs used for bootstrapping the emacs package set 21954 }; 21955 21956 inherit (gnome3) empathy;
+34 -40
pkgs/top-level/emacs-packages.nix
··· 21 (package-initialize) 22 */ 23 24 - ## FOR CONTRIBUTORS 25 - # 26 - # When adding a new package here please note that 27 - # * please use `elpaBuild` for pre-built package.el packages and 28 - # `melpaBuild` or `trivialBuild` if the package must actually 29 - # be built from the source. 30 - # * lib.licenses are `with`ed on top of the file here 31 - # * both trivialBuild and melpaBuild will automatically derive a 32 - # `meta` with `platforms` and `homepage` set to something you are 33 - # unlikely to want to override for most packages 34 - 35 - { lib, newScope, stdenv, fetchurl, fetchFromGitHub, runCommand, writeText 36 - 37 - , emacs, texinfo, lndir, makeWrapper 38 - , trivialBuild 39 - , melpaBuild 40 - 41 - , external 42 - , pkgs 43 - }: 44 45 let 46 47 - mkElpaPackages = import ../applications/editors/emacs-modes/elpa-packages.nix { 48 - inherit lib stdenv texinfo writeText; 49 }; 50 51 # Contains both melpa stable & unstable 52 - melpaGeneric = import ../applications/editors/emacs-modes/melpa-packages.nix { 53 - inherit external lib pkgs; 54 }; 55 - mkMelpaStablePackages = melpaGeneric "stable"; 56 - mkMelpaPackages = melpaGeneric "unstable"; 57 58 - mkOrgPackages = import ../applications/editors/emacs-modes/org-packages.nix { 59 inherit lib; 60 }; 61 62 - emacsWithPackages = import ../build-support/emacs/wrapper.nix { 63 - inherit lib lndir makeWrapper runCommand; 64 }; 65 66 - mkManualPackages = import ../applications/editors/emacs-modes/manual-packages.nix { 67 - inherit external lib pkgs; 68 }; 69 70 - in lib.makeScope newScope (self: lib.makeOverridable ({ 71 - elpaPackages ? mkElpaPackages self 72 - , melpaStablePackages ? mkMelpaStablePackages self 73 - , melpaPackages ? mkMelpaPackages self 74 - , orgPackages ? mkOrgPackages self 75 - , manualPackages ? mkManualPackages self 76 }: ({} 77 // elpaPackages // { inherit elpaPackages; } 78 // melpaStablePackages // { inherit melpaStablePackages; } ··· 80 // orgPackages // { inherit orgPackages; } 81 // manualPackages // { inherit manualPackages; } 82 // { 83 - inherit emacs melpaBuild trivialBuild; 84 - emacsWithPackages = emacsWithPackages self; 85 - withPackages = emacsWithPackages self; 86 }) 87 ) {})
··· 21 (package-initialize) 22 */ 23 24 + { pkgs', makeScope, makeOverridable, emacs }: 25 26 let 27 28 + mkElpaPackages = { pkgs, lib }: import ../applications/editors/emacs-modes/elpa-packages.nix { 29 + inherit (pkgs) stdenv texinfo writeText; 30 + inherit lib; 31 }; 32 33 # Contains both melpa stable & unstable 34 + melpaGeneric = { pkgs, lib }: import ../applications/editors/emacs-modes/melpa-packages.nix { 35 + inherit lib pkgs; 36 }; 37 38 + mkOrgPackages = { lib }: import ../applications/editors/emacs-modes/org-packages.nix { 39 inherit lib; 40 }; 41 42 + mkManualPackages = { pkgs, lib }: import ../applications/editors/emacs-modes/manual-packages.nix { 43 + inherit lib pkgs; 44 }; 45 46 + emacsWithPackages = { pkgs, lib }: import ../build-support/emacs/wrapper.nix { 47 + inherit (pkgs) makeWrapper runCommand; 48 + inherit (pkgs.xorg) lndir; 49 + inherit lib; 50 }; 51 52 + in makeScope pkgs'.newScope (self: makeOverridable ({ 53 + pkgs ? pkgs' 54 + , lib ? pkgs.lib 55 + , elpaPackages ? mkElpaPackages { inherit pkgs lib; } self 56 + , melpaStablePackages ? melpaGeneric { inherit pkgs lib; } "stable" self 57 + , melpaPackages ? melpaGeneric { inherit pkgs lib; } "unstable" self 58 + , orgPackages ? mkOrgPackages { inherit lib; } self 59 + , manualPackages ? mkManualPackages { inherit pkgs lib; } self 60 }: ({} 61 // elpaPackages // { inherit elpaPackages; } 62 // melpaStablePackages // { inherit melpaStablePackages; } ··· 64 // orgPackages // { inherit orgPackages; } 65 // manualPackages // { inherit manualPackages; } 66 // { 67 + 68 + inherit emacs; 69 + 70 + trivialBuild = pkgs.callPackage ../build-support/emacs/trivial.nix { 71 + inherit (self) emacs; 72 + }; 73 + 74 + melpaBuild = pkgs.callPackage ../build-support/emacs/melpa.nix { 75 + inherit (self) emacs; 76 + }; 77 + 78 + emacsWithPackages = emacsWithPackages { inherit pkgs lib; } self; 79 + withPackages = emacsWithPackages { inherit pkgs lib; } self; 80 }) 81 ) {})