# package.el-based emacs packages ## FOR USERS # # Recommended: simply use `emacsWithPackages` with the packages you want. # # Alternative: use `emacs`, install everything to a system or user profile # and then add this at the start your `early-init.el`: /* ;; optional. use this if you install emacs packages to the system profile (add-to-list 'package-directory-list "/run/current-system/sw/share/emacs/site-lisp/elpa") ;; optional. use this if you install emacs packages to user profiles (with nix-env) (add-to-list 'package-directory-list "~/.nix-profile/share/emacs/site-lisp/elpa") */ { pkgs' , emacs' , makeScope , makeOverridable , dontRecurseIntoAttrs }: let mkElpaDevelPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/elpa-devel-packages.nix { inherit (pkgs) pkgs buildPackages; inherit lib; }; mkElpaPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/elpa-packages.nix { inherit (pkgs) pkgs buildPackages; inherit lib; }; mkNongnuDevelPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/nongnu-devel-packages.nix { inherit (pkgs) pkgs buildPackages; inherit lib; }; mkNongnuPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/nongnu-packages.nix { inherit (pkgs) pkgs buildPackages; inherit lib; }; # Contains both melpa stable & unstable melpaGeneric = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/melpa-packages.nix { inherit lib pkgs; }; mkManualPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/manual-packages.nix { inherit lib pkgs; }; emacsWithPackages = { pkgs, lib }: pkgs.callPackage ../applications/editors/emacs/build-support/wrapper.nix { inherit (pkgs.xorg) lndir; inherit lib; }; in makeScope pkgs'.newScope (self: makeOverridable ({ pkgs ? pkgs' , lib ? pkgs.lib , elpaDevelPackages ? mkElpaDevelPackages { inherit pkgs lib; } self , elpaPackages ? mkElpaPackages { inherit pkgs lib; } self , nongnuDevelPackages ? mkNongnuDevelPackages { inherit pkgs lib; } self , nongnuPackages ? mkNongnuPackages { inherit pkgs lib; } self , melpaStablePackages ? melpaGeneric { inherit pkgs lib; } "stable" self , melpaPackages ? melpaGeneric { inherit pkgs lib; } "unstable" self , manualPackages ? mkManualPackages { inherit pkgs lib; } self }: ({} // elpaDevelPackages // { inherit elpaDevelPackages; } // elpaPackages // { inherit elpaPackages; } // nongnuDevelPackages // { inherit nongnuDevelPackages; } // nongnuPackages // { inherit nongnuPackages; } // melpaStablePackages // { inherit melpaStablePackages; } // melpaPackages // { inherit melpaPackages; } // manualPackages // { inherit manualPackages; } // { # Propagate overridden scope emacs = emacs'.overrideAttrs(old: { passthru = (old.passthru or {}) // { pkgs = dontRecurseIntoAttrs self; }; }); trivialBuild = pkgs.callPackage ../applications/editors/emacs/build-support/trivial.nix { inherit (self) emacs; }; elpaBuild = pkgs.callPackage ../applications/editors/emacs/build-support/elpa.nix { inherit (self) emacs; }; melpaBuild = pkgs.callPackage ../applications/editors/emacs/build-support/melpa.nix { inherit (self) emacs; }; emacsWithPackages = emacsWithPackages { inherit pkgs lib; } self; withPackages = emacsWithPackages { inherit pkgs lib; } self; } // { # Package specific priority overrides goes here # EXWM is not tagged very often, prefer it from elpa devel. inherit (elpaDevelPackages) exwm; # Telega uploads packages incompatible with stable tdlib to melpa # Prefer the one from melpa stable inherit (melpaStablePackages) telega; }) ) {})