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