refactor: nix/host-modules + nix/agent-modules layout, update doc paths
This commit is contained in:
parent
cb755b677c
commit
4a48ce5024
52 changed files with 48 additions and 44 deletions
79
nix/host-modules/hive-c0re/theme.nix
Normal file
79
nix/host-modules/hive-c0re/theme.nix
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# Stylix theme integration (zero-op auto-detect). When the operator's
|
||||
# host config has stylix enabled, generate a base16 `colors.css` from
|
||||
# its palette and overlay it onto the bundled frontend dist so the
|
||||
# dashboard re-themes with no operator action and no npm/esbuild
|
||||
# rebuild (a pure file-copy over the prebuilt dist). `colors.css` is
|
||||
# the entire swap contract — `theme.css` derives every semantic var
|
||||
# from the 16 base16 slots (see docs/web-ui/css-vars.md). The guarded
|
||||
# access makes this a clean no-op when stylix isn't imported into the
|
||||
# host config. Exposed as the read-only `c0re.servedFrontend` option.
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.hyperhive.c0re;
|
||||
stylixThemeColors =
|
||||
if (config.stylix.enable or false) && ((config.lib.stylix or { }) ? colors) then
|
||||
config.lib.stylix.colors.withHashtag
|
||||
else
|
||||
null;
|
||||
themedColorsCss =
|
||||
c:
|
||||
pkgs.writeText "hyperhive-colors.css" ''
|
||||
:root {
|
||||
--base00: ${c.base00};
|
||||
--base01: ${c.base01};
|
||||
--base02: ${c.base02};
|
||||
--base03: ${c.base03};
|
||||
--base04: ${c.base04};
|
||||
--base05: ${c.base05};
|
||||
--base06: ${c.base06};
|
||||
--base07: ${c.base07};
|
||||
--base08: ${c.base08};
|
||||
--base09: ${c.base09};
|
||||
--base0A: ${c.base0A};
|
||||
--base0B: ${c.base0B};
|
||||
--base0C: ${c.base0C};
|
||||
--base0D: ${c.base0D};
|
||||
--base0E: ${c.base0E};
|
||||
--base0F: ${c.base0F};
|
||||
}
|
||||
'';
|
||||
# Overlay the generated colors.css onto both dist subtrees. Both the
|
||||
# dashboard (served by hive-c0re via HIVE_STATIC_DIR) and the agent UIs
|
||||
# (served by the gateway from HIVE_AGENT_FRONTEND_DIR — static files
|
||||
# straight from the store) read their colors.css from this host-side
|
||||
# tree, so swapping both re-themes both surfaces.
|
||||
#
|
||||
# Not covered here: an agent reached directly on its own harness web
|
||||
# server (no gateway) serves from its per-agent `mergedDist`, built in
|
||||
# the agent's own nixosSystem with no access to the host's stylix
|
||||
# colours — theming that path needs the base16 palette forwarded
|
||||
# host→agent, tracked separately.
|
||||
themedFrontend =
|
||||
c:
|
||||
pkgs.runCommand "hyperhive-frontend-themed" { } ''
|
||||
cp -r ${cfg.frontend} $out
|
||||
chmod -R u+w $out
|
||||
install -m644 ${themedColorsCss c} $out/dashboard/static/colors.css
|
||||
install -m644 ${themedColorsCss c} $out/agent/static/colors.css
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.services.hyperhive.c0re.servedFrontend = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
default = if stylixThemeColors != null then themedFrontend stylixThemeColors else cfg.frontend;
|
||||
defaultText = lib.literalExpression "<stylix-themed overlay of `frontend`>";
|
||||
description = ''
|
||||
Internal, read-only: `frontend` re-themed with the active stylix
|
||||
palette (or `frontend` verbatim when unthemed); has `dashboard/`
|
||||
and `agent/`. Exposed so the hive-gateway module can static-serve
|
||||
`dashboard/` as an nginx root instead of proxying to hive-c0re.
|
||||
'';
|
||||
};
|
||||
}
|
||||
Loading…
Reference in a new issue