add hardware.raspberrypi.config-generated option

outputs the generated config as text
This commit is contained in:
Travis Staton 2023-06-12 20:03:02 -04:00
parent 6e0da67830
commit 24f5b92db8

View file

@ -1,7 +1,8 @@
{ lib, config, pkgs, ... }:
let
cfg = config.hardware.raspberry-pi;
render-raspberrypi-config = let
render-raspberrypi-config =
let
render-options = opts:
lib.strings.concatStringsSep "\n" (render-dt-kvs opts);
render-dt-param = x: "dtparam=" + x;
@ -22,10 +23,12 @@ let
(render-dt-kvs params);
render-dt-overlays = overlays:
lib.strings.concatMapStringsSep "\n" render-dt-overlay
(lib.attrsets.mapAttrsToList (k: v: {
(lib.attrsets.mapAttrsToList
(k: v: {
overlay = k;
args = render-dt-kvs v.params;
}) (lib.filterAttrs (k: v: v.enable) overlays));
})
(lib.filterAttrs (k: v: v.enable) overlays));
render-config-section = k:
{ options, base-dt-params, dt-overlays }:
let
@ -34,17 +37,21 @@ let
(render-base-dt-params base-dt-params)
(render-dt-overlays dt-overlays)
]);
in ''
in
''
[${k}]
${all-config}
'';
in conf:
in
conf:
lib.strings.concatStringsSep "\n"
(lib.attrsets.mapAttrsToList render-config-section conf);
in {
in
{
options = {
hardware.raspberry-pi = {
config = let
config =
let
rpi-config-param = {
options = {
enable = lib.mkEnableOption "attr";
@ -108,19 +115,30 @@ in {
};
};
};
in lib.mkOption {
in
lib.mkOption {
type = with lib.types; attrsOf (submodule raspberry-pi-config-options);
};
config-generated = lib.mkOption {
type = lib.types.str;
description = "the config text generated by raspberrypi.hardware.config";
readOnly = true;
};
config-output = lib.mkOption {
type = lib.types.package;
default = pkgs.writeTextFile {
name = "config.txt";
text = ''
# This is a generated file. Do not edit!
${render-raspberrypi-config cfg.config}
${cfg.config-generated}
'';
};
};
};
};
config = {
hardware.raspberry-pi.config-generated = render-raspberrypi-config cfg.config;
};
}