From 6ecd96edc3a84d5ad70959828971ce699a5b3961 Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Sat, 13 Jul 2024 14:22:02 +1000 Subject: [PATCH] Improve error messages for unfetchable packages Split out the check for "pin" (which already had a dedicated check, but it was mostly unreachable) from the check for "repo URL", and make both error messages more useful. Remove a TODO while I'm there, because it looks unachievable: we should only hit these checks when using our generated derivation, which should mean we're also generating `src`, which means we really do need a pin, as Nix will otherwise refuse to fetch in pure evalution mode. For #20 --- default.nix | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/default.nix b/default.nix index d199087..25689dd 100644 --- a/default.nix +++ b/default.nix @@ -177,25 +177,25 @@ let else customPackages.${name} or ( assert lib.assertMsg - (isElpa || (p ? recipe && pin != null) || extraUrls ? ${name}) - "${name}: not in epkgs, not elpa, no recipe or not pinned"; + (isElpa || (p ? recipe) || extraUrls ? ${name}) '' + nix-doom-emacs-unstraightened: ${name}: unable to derive repository URL: + - no recipe provided + - not an ELPA package + - not in Unstraightened's fetch-overrides.nix + + If this is a custom `package!` entry in packages.el, add a `:recipe`. + ''; # Assume we can safely ignore (pre-)build unless we're actually # building our own package. assert lib.assertMsg (!(p ? recipe.pre-build)) "${name}: pre-build not supported"; assert lib.assertMsg (!(p ? recipe.build)) "${name}: build not supported"; - # TODO: lift "pin" requirement, if that turns out to be - # necessary or at least desirable. Requires figuring out why - # melpa2nix requires `commit`. Not a priority because if it's - # not in epkgs we'd need a recipe passed in, and it's uncommon - # for Doom to pass in a recipe without pinning. - # - # Doom does currently have unpinned packages with an explicit - # recipe, but they're in epkgs (popon and flymake-popon) so it - # should be ok. Users might do this to pull in a custom package - # they don't care about pinning, though: we may want to support - # that. - assert lib.assertMsg (pin != null) - "${name}: not in epkgs and not pinned. This is not yet supported."; + assert lib.assertMsg (pin != null) '' + nix-doom-emacs-unstraightened: ${name}: not in nixpkgs or emacs-overlay, not pinned. + All packages must be pinned so they can be fetched deterministically. + + If this is a custom `package!` entry in your packages.el, add a `:pin`. + If it is a `package!` in Doom, add an entry to Unstraightened's fetch-overrides.nix. + ''; # epkgs.*Build helpers take an attrset, they do not support # mkDerivation's fixed-point evaluation (`finalAttrs`). # If they did, the buildInputs stuff should use finalAttrs.src.