Merge pull request 'fix(homepage): merge service groups by name to stop manual entries being dropped' (#14) from fix/homepage-duplicate-service-groups into main
Reviewed-on: #14
This commit was merged in pull request #14.
This commit is contained in:
@@ -12,21 +12,15 @@ let
|
|||||||
manualServices = import ./manual-services.nix;
|
manualServices = import ./manual-services.nix;
|
||||||
manualWidgets = import ./manual-widgets.nix;
|
manualWidgets = import ./manual-widgets.nix;
|
||||||
|
|
||||||
groupedServices =
|
groupedServices = lib.foldl' (
|
||||||
lib.foldl'
|
|
||||||
(
|
|
||||||
acc: entry:
|
acc: entry:
|
||||||
acc
|
acc
|
||||||
// {
|
// {
|
||||||
${entry.group} = (acc.${entry.group} or [ ]) ++ [ entry ];
|
${entry.group} = (acc.${entry.group} or [ ]) ++ [ entry ];
|
||||||
}
|
}
|
||||||
)
|
) { } config.my.homepage.services;
|
||||||
{ }
|
|
||||||
config.my.homepage.services;
|
|
||||||
|
|
||||||
homepageServices = lib.mapAttrsToList (
|
homepageServices = lib.mapAttrsToList (group: entries: {
|
||||||
group: entries:
|
|
||||||
{
|
|
||||||
${group} = map (
|
${group} = map (
|
||||||
entry:
|
entry:
|
||||||
let
|
let
|
||||||
@@ -39,12 +33,30 @@ let
|
|||||||
${entry.name} = lib.filterAttrs (_: value: value != null) service;
|
${entry.name} = lib.filterAttrs (_: value: value != null) service;
|
||||||
}
|
}
|
||||||
) entries;
|
) entries;
|
||||||
}
|
}) groupedServices;
|
||||||
) groupedServices;
|
|
||||||
|
# homepage-dashboard keeps only the first services.yaml list entry with a
|
||||||
|
# given group name (first match wins), so module-contributed and manual
|
||||||
|
# groups sharing a name (e.g. "Services") must be merged here rather than
|
||||||
|
# simply concatenated, or the later ones are silently dropped.
|
||||||
|
mergeGroups =
|
||||||
|
lists:
|
||||||
|
let
|
||||||
|
merged = lib.foldl' (
|
||||||
|
acc: groupAttrs:
|
||||||
|
let
|
||||||
|
groupName = builtins.head (builtins.attrNames groupAttrs);
|
||||||
|
in
|
||||||
|
acc // { ${groupName} = (acc.${groupName} or [ ]) ++ groupAttrs.${groupName}; }
|
||||||
|
) { } lists;
|
||||||
|
in
|
||||||
|
lib.mapAttrsToList (name: entries: { ${name} = entries; }) merged;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
options.my.homepage.services = with lib; mkOption {
|
options.my.homepage.services =
|
||||||
|
with lib;
|
||||||
|
mkOption {
|
||||||
type = types.listOf (
|
type = types.listOf (
|
||||||
types.submodule {
|
types.submodule {
|
||||||
options = {
|
options = {
|
||||||
@@ -80,7 +92,9 @@ in
|
|||||||
description = "Merged homepage service metadata contributed by repo modules.";
|
description = "Merged homepage service metadata contributed by repo modules.";
|
||||||
};
|
};
|
||||||
|
|
||||||
options.my.homepage.widgets = with lib; mkOption {
|
options.my.homepage.widgets =
|
||||||
|
with lib;
|
||||||
|
mkOption {
|
||||||
type = types.listOf types.attrs;
|
type = types.listOf types.attrs;
|
||||||
default = [ ];
|
default = [ ];
|
||||||
description = "Widget definitions passed directly to services.homepage-dashboard.widgets. Each entry is an attrset like { resources = { cpu = true; memory = true; }; }.";
|
description = "Widget definitions passed directly to services.homepage-dashboard.widgets. Each entry is an attrset like { resources = { cpu = true; memory = true; }; }.";
|
||||||
@@ -98,7 +112,7 @@ in
|
|||||||
listenPort = dashboardPort;
|
listenPort = dashboardPort;
|
||||||
allowedHosts = "${dashboardHost}:${toString dashboardPort},192.168.178.65:${toString dashboardPort},localhost:${toString dashboardPort},127.0.0.1:${toString dashboardPort},jupiter:${toString dashboardPort},jupiter.solar.internal:${toString dashboardPort}";
|
allowedHosts = "${dashboardHost}:${toString dashboardPort},192.168.178.65:${toString dashboardPort},localhost:${toString dashboardPort},127.0.0.1:${toString dashboardPort},jupiter:${toString dashboardPort},jupiter.solar.internal:${toString dashboardPort}";
|
||||||
bookmarks = import ./bookmarks.nix;
|
bookmarks = import ./bookmarks.nix;
|
||||||
services = homepageServices ++ manualServices;
|
services = mergeGroups (homepageServices ++ manualServices);
|
||||||
widgets = config.my.homepage.widgets ++ manualWidgets;
|
widgets = config.my.homepage.widgets ++ manualWidgets;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user