From c61cd622b7abb2de838c41d99cc9a0b1e4506917 Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Sun, 16 Jun 2024 22:41:03 +1000 Subject: [PATCH] Add `extraBinPackages` for adding to `$PATH` and use it to make sure Doom's essential prerequisites are available. --- README.md | 3 +++ build-helpers/build-doom-emacs.sh | 10 ++++++++++ default.nix | 7 ++++++- home-manager.nix | 11 +++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 359de71..fdaa92a 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,9 @@ support use without flakes. - `doomSource`: Doom source tree. Defaults to a flake input: overriding that input is probably easier than passing this. +- `extraBinPackages`: packages to add to `$PATH`. Defaults to Git, ripgrep and + fd. + - `extraPackages`: Specify extra Emacs packages from nixpkgs to be available to Doom Emacs. Defaults to this function `epkgs: [ ]` (no extra packages). For example to include Emacs package `treesit-grammars.with-all-grammars`: diff --git a/build-helpers/build-doom-emacs.sh b/build-helpers/build-doom-emacs.sh index d2c3ad5..b4c799f 100644 --- a/build-helpers/build-doom-emacs.sh +++ b/build-helpers/build-doom-emacs.sh @@ -22,15 +22,25 @@ else --set DOOMPROFILE "$profileName" ) fi +common=() +if [[ -n "$binPath" ]]; then + common+=( + --suffix PATH : "$binPath" + ) +fi + makeWrapper $emacsWithPackages/bin/emacs $out/bin/doom-emacs \ "${profileArgs[@]}" \ + "${common[@]}" \ --set DOOMDIR $doomProfile/doomdir \ --set-default DOOMLOCALDIR "$doomLocalDir" \ --add-flags "--init-directory=$doomSource" makeWrapper $doomSource/bin/doomscript $out/bin/doomscript \ + "${common[@]}" \ --set EMACS $emacsWithPackages/bin/emacs \ --set-default DOOMLOCALDIR "$doomLocalDir" makeWrapper $doomSource/bin/doom $out/bin/doom \ + "${common[@]}" \ --set EMACS $emacsWithPackages/bin/emacs \ "${profileArgs[@]}" \ --set DOOMDIR $doomProfile/doomdir \ diff --git a/default.nix b/default.nix index ed5b655..305c688 100644 --- a/default.nix +++ b/default.nix @@ -40,10 +40,14 @@ experimentalFetchTree ? false, /* Extra emacs packages from nixpkgs */ extraPackages ? epkgs: [ ], + /* Extra packages to add to $PATH */ + extraBinPackages ? [ git fd ripgrep ], callPackage, callPackages, + fd, git, + ripgrep, emacsPackagesFor, lib, runCommandLocal, @@ -325,6 +329,7 @@ let }; # Step 6: write wrappers to start the whole thing. + binPath = lib.makeBinPath extraBinPackages; # makeBinaryWrapper pulls in a compiler, so don't force this one local. doomEmacs = stdenv.mkDerivation { @@ -332,7 +337,7 @@ let buildCommandPath = ./build-helpers/build-doom-emacs.sh; # emacsWithPackages also accessed externally (for pushing to Cachix). - inherit doomProfile doomLocalDir doomSource emacsWithPackages profileName; + inherit binPath doomProfile doomLocalDir doomSource emacsWithPackages profileName; nativeBuildInputs = [ makeBinaryWrapper ]; }; diff --git a/home-manager.nix b/home-manager.nix index 1bf360f..944f7b0 100644 --- a/home-manager.nix +++ b/home-manager.nix @@ -121,6 +121,17 @@ in { Doom cannot specify that package using the '(package! ...)' syntax. ''; }; + extraBinPackages = mkOption { + default = [ + config.programs.ripgrep.package + config.programs.git.package + config.programs.fd.package + ]; + type = types.listOf types.package; + defaultText = literalExpression + "[ programs.ripgrep.package programs.git.package programs.fd.package ]"; + description = "Extra packages to add to Doom's $PATH."; + }; }; };