diff --git a/modules/programs/texlive.nix b/modules/programs/texlive.nix index f52b987310d8..88751d91a311 100644 --- a/modules/programs/texlive.nix +++ b/modules/programs/texlive.nix @@ -8,10 +8,6 @@ let inherit (lib) mkOption types; cfg = config.programs.texlive; - - texlive = cfg.packageSet; - texlivePkgs = cfg.extraPackages texlive; - in { meta.maintainers = [ lib.maintainers.rycee ]; @@ -20,22 +16,22 @@ in programs.texlive = { enable = lib.mkEnableOption "TeX Live"; - packageSet = mkOption { - default = pkgs.texlive; - defaultText = lib.literalExpression "pkgs.texlive"; + package = mkOption { + type = types.package; + default = pkgs.texliveSmall; description = "TeX Live package set to use."; }; extraPackages = mkOption { - default = tpkgs: { inherit (tpkgs) collection-basic; }; - defaultText = "tpkgs: { inherit (tpkgs) collection-basic; }"; + default = _ps: [ ]; + defaultText = "_ps: [ ];"; example = lib.literalExpression '' - tpkgs: { inherit (tpkgs) collection-fontsrecommended algorithms; } + ps: with ps; [ collection-fontsrecommended algorithms ]; ''; description = "Extra packages available to TeX Live."; }; - package = mkOption { + finalPackage = mkOption { type = types.package; description = "Resulting customized TeX Live package."; readOnly = true; @@ -44,15 +40,8 @@ in }; config = lib.mkIf cfg.enable { - assertions = [ - { - assertion = texlivePkgs != { }; - message = "Must provide at least one extra package in" + " 'programs.texlive.extraPackages'."; - } - ]; - - home.packages = [ cfg.package ]; + home.packages = [ cfg.finalPackage ]; - programs.texlive.package = texlive.combine texlivePkgs; + programs.texlive.finalPackage = cfg.package.withPackages cfg.extraPackages; }; } diff --git a/tests/modules/programs/texlive/texlive-minimal.nix b/tests/modules/programs/texlive/texlive-minimal.nix index a33d57401c0f..7dd3e421b7fd 100644 --- a/tests/modules/programs/texlive/texlive-minimal.nix +++ b/tests/modules/programs/texlive/texlive-minimal.nix @@ -1,25 +1,34 @@ -{ lib, pkgs, ... }: { - config = { - programs.texlive.enable = true; + pkgs, + config, + ... +}: - # Set up a minimal mocked texlive package set. - nixpkgs.overlays = [ - (_self: _super: { - texlive = { - collection-basic = pkgs.writeTextDir "collection-basic" ""; - combine = - tpkgs: - pkgs.symlinkJoin { - name = "dummy-texlive-combine"; - paths = lib.attrValues tpkgs; - }; - }; - }) - ]; +let + inherit (config.lib.test) mkStubPackage; - nmt.script = '' - assertFileExists home-path/collection-basic - ''; + fakeTexliveSet = { + collection-basic = pkgs.writeTextDir "collection-basic" ""; }; +in +{ + programs.texlive = { + enable = true; + package = mkStubPackage { + name = "texlive"; + extraAttrs = { + withPackages = + tpkgs: + pkgs.symlinkJoin { + name = "dummy-texlive-combine"; + paths = tpkgs fakeTexliveSet; + }; + }; + }; + extraPackages = ps: with ps; [ collection-basic ]; + }; + + nmt.script = '' + assertFileExists home-path/collection-basic + ''; }