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}