Unverified Commit fc89970a authored by Robert Hensing's avatar Robert Hensing Committed by GitHub
Browse files

Merge pull request #232808 from ncfavier/mkPackageOption-nullable

lib/options: nullable mkPackageOption
parents d5413b97 ac9915b1
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -155,6 +155,8 @@ rec {
      # Name for the package, shown in option description
      name:
      {
        # Whether the package can be null, for example to disable installing a package altogether.
        nullable ? false,
        # The attribute path where the default package is located (may be omitted)
        default ? name,
        # A string or an attribute path to use as an example (may be omitted)
@@ -164,19 +166,24 @@ rec {
      }:
      let
        name' = if isList name then last name else name;
      in mkOption ({
        type = with lib.types; (if nullable then nullOr else lib.id) package;
        description = "The ${name'} package to use."
          + (if extraDescription == "" then "" else " ") + extraDescription;
      } // (if default != null then let
        default' = if isList default then default else [ default ];
        defaultPath = concatStringsSep "." default';
        defaultValue = attrByPath default'
          (throw "${defaultPath} cannot be found in pkgs") pkgs;
      in mkOption {
      in {
        default = defaultValue;
        defaultText = literalExpression ("pkgs." + defaultPath);
        type = lib.types.package;
        description = "The ${name'} package to use."
          + (if extraDescription == "" then "" else " ") + extraDescription;
        ${if default != null then "default" else null} = defaultValue;
        ${if example != null then "example" else null} = literalExpression
      } else if nullable then {
        default = null;
      } else { }) // lib.optionalAttrs (example != null) {
        example = literalExpression
          (if isList example then "pkgs." + concatStringsSep "." example else example);
      };
      });

  /* Like mkPackageOption, but emit an mdDoc description instead of DocBook. */
  mkPackageOptionMD = pkgs: name: extra:
+5 −0
Original line number Diff line number Diff line
@@ -182,6 +182,11 @@ checkConfigOutput '^true$' config.enableAlias ./alias-with-priority.nix
checkConfigOutput '^false$' config.enable ./alias-with-priority-can-override.nix
checkConfigOutput '^false$' config.enableAlias ./alias-with-priority-can-override.nix

# Check mkPackageOption
checkConfigOutput '^"hello"$' config.package.pname ./declare-mkPackageOption.nix
checkConfigError 'The option .undefinedPackage. is used but not defined' config.undefinedPackage ./declare-mkPackageOption.nix
checkConfigOutput '^null$' config.nullablePackage ./declare-mkPackageOption.nix

# submoduleWith

## specialArgs should work
+19 −0
Original line number Diff line number Diff line
{ lib, ... }: let
  pkgs.hello = {
    type = "derivation";
    pname = "hello";
  };
in {
  options = {
    package = lib.mkPackageOption pkgs "hello" { };

    undefinedPackage = lib.mkPackageOption pkgs "hello" {
      default = null;
    };

    nullablePackage = lib.mkPackageOption pkgs "hello" {
      nullable = true;
      default = null;
    };
  };
}