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 infoFilter =
17 name: drv:
18 let
19 o = builtins.tryEval drv;
20 in
21 o.success
22 && lib.isDerivation o.value
23 && o.value ? outputs
24 && builtins.elem "terminfo" o.value.outputs
25 && !o.value.meta.broken;
26 terminfos = lib.filterAttrs infoFilter pkgs;
27 excludedTerminfos = lib.filterAttrs (
28 _: drv: !(builtins.elem drv.terminfo config.environment.systemPackages)
29 ) terminfos;
30 includedOuts = lib.filterAttrs (
31 _: drv: builtins.elem drv.out config.environment.systemPackages
32 ) terminfos;
33 in
34 {
35 environment = {
36 enableAllTerminfo = true;
37 etc."terminfo-missing".text = builtins.concatStringsSep "\n" (builtins.attrNames excludedTerminfos);
38 etc."terminfo-extra-outs".text = builtins.concatStringsSep "\n" (builtins.attrNames includedOuts);
39 };
40 };
41
42 testScript = ''
43 machine.fail("grep . /etc/terminfo-missing >&2")
44 machine.fail("grep . /etc/terminfo-extra-outs >&2")
45 '';
46}