50 lines
968 B
Nix
50 lines
968 B
Nix
|
{ lib
|
||
|
, writeText
|
||
|
, writeShellApplication
|
||
|
, substituteAll
|
||
|
, gum
|
||
|
, inputs
|
||
|
, hosts ? { }
|
||
|
, ...
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
inherit (lib) mapAttrsToList concatStringsSep;
|
||
|
inherit (lib.plusultra) override-meta;
|
||
|
|
||
|
substitute = args: builtins.readFile (substituteAll args);
|
||
|
|
||
|
formatted-hosts = mapAttrsToList
|
||
|
(name: host: "${name},${host.pkgs.system}")
|
||
|
hosts;
|
||
|
|
||
|
hosts-csv = writeText "hosts.csv" ''
|
||
|
Name,System
|
||
|
${concatStringsSep "\n" formatted-hosts}
|
||
|
'';
|
||
|
|
||
|
nixos-hosts = writeShellApplication {
|
||
|
name = "nixos-hosts";
|
||
|
|
||
|
text = substitute {
|
||
|
src = ./nixos-hosts.sh;
|
||
|
|
||
|
help = ./help;
|
||
|
hosts = if hosts == { } then "" else hosts-csv;
|
||
|
};
|
||
|
|
||
|
checkPhase = "";
|
||
|
|
||
|
runtimeInputs = [
|
||
|
gum
|
||
|
];
|
||
|
};
|
||
|
|
||
|
new-meta = with lib; {
|
||
|
description = "A helper to list all of the NixOS hosts available from your flake.";
|
||
|
license = licenses.asl20;
|
||
|
maintainers = with maintainers; [ jakehamilton ];
|
||
|
};
|
||
|
in
|
||
|
override-meta new-meta nixos-hosts
|