feat(#2228): add XDG icon set and .desktop entries for hyperhive processes
Adds hive-xdg-icons package (nix/packages/hive-xdg-icons.nix) that rasterizes the branding SVG to all standard hicolor sizes (16–256px) and installs /usr/share/pixmaps/hyperhive.png as a flat fallback. Ships .desktop entries for hive-c0re and hive-ag3nt with NoDisplay=true so desktop environments can match running processes to their icon without cluttering the application launcher. Narrow drv input: only ./branding/hyperhive.svg, so unrelated source changes don't bust the cache. Wired into environment.systemPackages in hive-c0re.nix (host side) so the icons are present wherever hive-c0re is deployed. Closes #2228
This commit is contained in:
parent
fa944d1213
commit
64eddfd0b6
3 changed files with 96 additions and 0 deletions
|
|
@ -236,6 +236,12 @@
|
|||
# nix/reference-docs.nix. (`docs` above is the auto-generated
|
||||
# nix-options reference, a different artifact.)
|
||||
reference-docs = pkgs.callPackage ./nix/reference-docs.nix { };
|
||||
# XDG icon set + .desktop entries for hyperhive processes.
|
||||
# Narrow input: only the branding SVG, so unrelated source changes
|
||||
# don't bust this derivation's cache.
|
||||
xdg-icons = pkgs.callPackage ./nix/packages/hive-xdg-icons.nix {
|
||||
hyperhiveSvg = ./branding/hyperhive.svg;
|
||||
};
|
||||
# Pre-built per-container system closures. Exposed as packages
|
||||
# so operators can `nix build .#agent-base-toplevel` (or wire
|
||||
# them into their host system closure via the
|
||||
|
|
@ -298,6 +304,7 @@
|
|||
hyperhivePackage = system: self.packages.${system}.default;
|
||||
hyperhiveFrontend = system: self.packages.${system}.frontend;
|
||||
hyperhiveAssets = system: self.packages.${system}.assets;
|
||||
hyperhiveXdgIcons = system: self.packages.${system}.xdg-icons;
|
||||
hyperhiveFlake = "${hyperhiveFlakeSource}";
|
||||
# Narrow docs/ source, threaded as its own meta-flake input so
|
||||
# doc edits don't re-hash the whole flake source.
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
hyperhiveAssets,
|
||||
hyperhiveFlake,
|
||||
hyperhiveDocs,
|
||||
hyperhiveXdgIcons,
|
||||
agentBaseToplevel,
|
||||
managerToplevel,
|
||||
}:
|
||||
|
|
@ -794,6 +795,9 @@ in
|
|||
environment.systemPackages = [
|
||||
cfg.package
|
||||
pkgs.git
|
||||
# XDG icons + .desktop entries so desktop environments can match
|
||||
# hyperhive processes to their icon (task managers, CPU monitors, etc.).
|
||||
(hyperhiveXdgIcons pkgs.stdenv.hostPlatform.system)
|
||||
];
|
||||
|
||||
# Serve config at a stable /etc path so hive-c0re's ExecStart
|
||||
|
|
|
|||
85
nix/packages/hive-xdg-icons.nix
Normal file
85
nix/packages/hive-xdg-icons.nix
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
{
|
||||
stdenv,
|
||||
librsvg,
|
||||
# Absolute path to the hyperhive.svg source so this derivation's input
|
||||
# hash is narrow: a change to any other source file does NOT bust it.
|
||||
hyperhiveSvg,
|
||||
}:
|
||||
|
||||
# XDG icon set + .desktop entries for hyperhive processes so desktop
|
||||
# environments can match running processes to icons (task managers, CPU
|
||||
# monitors, etc.).
|
||||
#
|
||||
# Output layout:
|
||||
# $out/share/icons/hicolor/<N>x<N>/apps/hyperhive.png (N = 16,32,48,64,128,256)
|
||||
# $out/share/pixmaps/hyperhive.png (48px fallback)
|
||||
# $out/share/applications/hive-c0re.desktop
|
||||
# $out/share/applications/hive-ag3nt.desktop
|
||||
stdenv.mkDerivation {
|
||||
pname = "hive-xdg-icons";
|
||||
version = "0.1.0";
|
||||
|
||||
# No source tree — everything is built from the single SVG path.
|
||||
dontUnpack = true;
|
||||
|
||||
nativeBuildInputs = [ librsvg ];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
mkdir -p icons
|
||||
for size in 16 32 48 64 128 256; do
|
||||
rsvg-convert --width "$size" --height "$size" \
|
||||
-o "icons/hyperhive-''${size}.png" \
|
||||
${hyperhiveSvg}
|
||||
done
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
# Per-size hicolor tree
|
||||
for size in 16 32 48 64 128 256; do
|
||||
mkdir -p "$out/share/icons/hicolor/''${size}x''${size}/apps"
|
||||
cp "icons/hyperhive-''${size}.png" \
|
||||
"$out/share/icons/hicolor/''${size}x''${size}/apps/hyperhive.png"
|
||||
done
|
||||
# Flat pixmaps fallback (48px)
|
||||
mkdir -p "$out/share/pixmaps"
|
||||
cp icons/hyperhive-48.png "$out/share/pixmaps/hyperhive.png"
|
||||
|
||||
# .desktop entries — NoDisplay so they don't show up in app launchers
|
||||
# but are still discovered by process-to-icon matchers (GNOME, etc.).
|
||||
mkdir -p "$out/share/applications"
|
||||
cat > "$out/share/applications/hive-c0re.desktop" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=hyperhive core
|
||||
GenericName=hive-c0re
|
||||
Comment=hyperhive host daemon — container lifecycle, broker, operator dashboard
|
||||
Exec=hive-c0re serve
|
||||
Icon=hyperhive
|
||||
Categories=System;
|
||||
NoDisplay=true
|
||||
StartupNotify=false
|
||||
EOF
|
||||
cat > "$out/share/applications/hive-ag3nt.desktop" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=hyperhive agent
|
||||
GenericName=hive-ag3nt
|
||||
Comment=hyperhive per-agent harness (claude turn loop + MCP server)
|
||||
Exec=hive serve
|
||||
Icon=hyperhive
|
||||
Categories=System;
|
||||
NoDisplay=true
|
||||
StartupNotify=false
|
||||
EOF
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontFixup = true;
|
||||
|
||||
meta = {
|
||||
description = "XDG icon set and .desktop entries for hyperhive processes";
|
||||
};
|
||||
}
|
||||
Loading…
Reference in a new issue