with import {} ; let inherit (builtins) stringLength readDir filter; devices = filter (n: n != "families") (lib.mapAttrsToList (n: t: n) (readDir ../devices)); texts = map (n: let d = import ../devices/${n}/default.nix; d' = { description = "${n}\n${substring 0 (stringLength n) "********************************"}\n"; } // d; installer = if d ? description && d ? installer then '' The default installation route for this device is :ref:`system-outputs-${d.installer}` '' else ""; in d'.description) devices; in writeText "hwdoc" '' Supported hardware ################## For development, the `GL.iNet GL-MT300A `_ is an attractive choice as it has a builtin "debrick" procedure in the boot monitor and is also comparatively simple to attach serial cables to (soldering not required), so it is lower-risk than some devices. For a more powerful device, something with an ath10k would be the safe bet, or the Linksys E8450 which seems popular in the openwrt community. ${lib.concatStringsSep "\n\n" texts} ''