at master 1.5 kB view raw
1{ pkgs, ... }: 2{ 3 name = "all-terminfo"; 4 meta = with pkgs.lib.maintainers; { 5 maintainers = [ jkarlson ]; 6 }; 7 8 nodes.machine = 9 { 10 pkgs, 11 config, 12 lib, 13 ... 14 }: 15 let 16 # Use derivations instead of attr names to avoid listing missing packages 17 maskedTerminfos = with pkgs; [ 18 alacritty-graphics # would clobber alacritty terminfo 19 ]; 20 infoFilter = 21 name: drv: 22 let 23 o = builtins.tryEval drv; 24 in 25 o.success 26 && lib.isDerivation o.value 27 && o.value ? outputs 28 && builtins.elem "terminfo" o.value.outputs 29 && !o.value.meta.broken 30 && lib.meta.availableOn pkgs.stdenv.hostPlatform o.value 31 && !(builtins.elem o.value maskedTerminfos); 32 terminfos = lib.filterAttrs infoFilter pkgs; 33 excludedTerminfos = lib.filterAttrs ( 34 _: drv: !(builtins.elem drv.terminfo config.environment.systemPackages) 35 ) terminfos; 36 includedOuts = lib.filterAttrs ( 37 _: drv: builtins.elem drv.out config.environment.systemPackages 38 ) terminfos; 39 in 40 { 41 environment = { 42 enableAllTerminfo = true; 43 etc."terminfo-missing".text = builtins.concatStringsSep "\n" (builtins.attrNames excludedTerminfos); 44 etc."terminfo-extra-outs".text = builtins.concatStringsSep "\n" (builtins.attrNames includedOuts); 45 }; 46 }; 47 48 testScript = '' 49 machine.fail("grep . /etc/terminfo-missing >&2") 50 machine.fail("grep . /etc/terminfo-extra-outs >&2") 51 ''; 52}