diff --git a/nix/packages/hyperhive-the-movie-milestones.txt b/nix/packages/hyperhive-the-movie-milestones.txt new file mode 100644 index 000000000..fb656befb --- /dev/null +++ b/nix/packages/hyperhive-the-movie-milestones.txt @@ -0,0 +1,70 @@ +# Milestones shown as captions in `nix run .#hyperhive-the-movie`, one per line: +# YYYY-MM-DD|caption +# Lines starting with # and blank lines are ignored. Git tags are shown too +# (tag name, at the tagged commit's date), so `git tag ` marks a +# milestone without editing this file. Dates are where a component first +# appears in the history; edit freely. Growth markers: commit counts doubling +# from 512, every 50k lines overall, issue or PR ids doubling from 256, and +# the first issue on the in-hive forge. +2026-05-14|first commit +2026-05-14|per-container web UI and dashboard +2026-05-16|private forge in a container +2026-05-20|first issue on the in-hive forge +2026-05-20|512 commits +2026-05-22|issue or PR 256 +2026-05-22|agents work through the forge +2026-05-25|the hive-forge CLI +2026-05-27|issue or PR 512 +2026-05-29|matrix chat +2026-05-29|50k lines +2026-05-30|hive-gateway in front of everything +2026-05-31|1024 commits +2026-05-31|CI runner on the forge +2026-06-01|issue or PR 1024 +2026-06-02|hive-c0re drops root +2026-06-03|hive-wide knowledge repo and matrix space +2026-06-03|WireGuard mesh between hives +2026-06-05|PRs without forks (agit) +2026-06-13|audit trail of privileged actions +2026-06-15|agents with accounts on other matrix homeservers +2026-06-22|2048 commits +2026-06-22|internal forge mandatory, federation between hives +2026-06-27|issue or PR 2048 +2026-07-04|100k lines +2026-07-06|job DAG queue +2026-07-11|GitHub accounts for agents +2026-07-14|accounts on external forges +2026-07-20|GUI agents (screen MCP) +2026-07-26|forge notifications +2026-07-31|GitHub notifications for agents +2026-08-05|swarm controller +2026-08-05|Authelia, the swarm's identity provider +2026-08-11|swarm UI +2026-08-14|NATS messaging in the swarm +2026-08-16|150k lines +2026-08-16|swarm metrics in Grafana +2026-08-16|VictoriaMetrics metrics store +2026-08-18|OpenTelemetry collector for the swarm +2026-08-24|swarm-wide log store +2026-08-30|the swarm's secret store +2026-08-31|4096 commits +2026-09-08|issue or PR 4096 +2026-09-09|subagent daemon +2026-09-11|OIDC client secrets published to the secret store +2026-09-13|200k lines +2026-09-20|swarm matrix starts replacing our own broker +2026-09-29|ACP backends +2026-10-11|250k lines +2026-10-12|swarm builder and review classifier +2026-10-14|claude login from the swarm UI +2026-10-16|CI run metrics on a Grafana board +2026-10-17|archetypes +2026-10-17|300k lines +2026-10-22|notification router +2026-10-27|Attic binary cache as a swarm service +2026-10-27|Squid egress proxy on every hive host +2026-10-28|350k lines +2026-10-29|egress allow list per agent +2026-11-06|operator handbook +2026-11-08|400k lines +2026-11-10|restic backups of every agent's state diff --git a/nix/packages/hyperhive-the-movie.nix b/nix/packages/hyperhive-the-movie.nix index 8faf153ea..54378c16d 100644 --- a/nix/packages/hyperhive-the-movie.nix +++ b/nix/packages/hyperhive-the-movie.nix @@ -1,6 +1,9 @@ # `nix run .#hyperhive-the-movie` — gource visualisation of the git # history of the repo it is run from. `-- --record` renders -# gource-hyperhive.mp4 in the cwd instead of opening a window. +# gource-hyperhive.webm in the cwd instead of opening a window: AV1 in WebM, +# which plays in current Firefox and Chrome and compresses this flat, +# dark picture far better than H.264. Milestones show as captions, from the git +# tags of the repo and from `hyperhive-the-movie-milestones.txt`. { lib, writeShellApplication, @@ -27,8 +30,39 @@ writeShellApplication { gnugrep ]; text = '' + usage() { + cat <<'USAGE' + hyperhive-the-movie - gource visualisation of this repo's git history + + Usage: nix run .#hyperhive-the-movie -- [--record | --help] + + (no flag) open a gource window and play the history + --record render gource-hyperhive.webm in the current directory + instead (1280x720, 30 fps, AV1 in WebM; plays in recent + Firefox and Chrome). Needs no display. + -h, --help show this text + + Run it from inside the repo. Captions come from two places: the git tags + (shown at the tagged commit's date) and the milestones file, + nix/packages/hyperhive-the-movie-milestones.txt, one "YYYY-MM-DD|caption" + per line. Edit that file, or tag a commit with `git tag NAME COMMIT`. + USAGE + } + record=false - [[ "''${1:-}" == "--record" ]] && record=true + case "''${1:-}" in + "") ;; + --record) record=true ;; + -h | --help) + usage + exit 0 + ;; + *) + echo "hyperhive-the-movie: unknown argument '$1'" >&2 + usage >&2 + exit 2 + ;; + esac cd "$(git rev-parse --show-toplevel)" @@ -50,13 +84,28 @@ writeShellApplication { fi done < <(git log --format='%an' | sort -u) + # Milestone captions, `unix time|text`, sorted by time: the tracked + # milestones file (`YYYY-MM-DD|text`) and the repo's git tags. + captions="$(mktemp)" + trap 'rm -f "$captions"' EXIT + { + while IFS='|' read -r day text; do + [[ -z "$day" || "$day" == \#* ]] && continue + echo "$(date -d "$day" +%s)|$text" + done < ${./hyperhive-the-movie-milestones.txt} + git for-each-ref --format='%(creatordate:unix)|%(refname:short)' refs/tags + } | sort -n > "$captions" + # Catppuccin Mocha, as in frontend/packages/shared/src/colors.css. args=( -s 1 -1280x720 --auto-skip-seconds 1 --multi-sampling --stop-at-end + --date-format "%Y-%m-%d" + --caption-file "$captions" --caption-size 28 --caption-duration 4 + --caption-colour f9e2af --background-colour 1e1e2e --font-colour cdd6f4 --highlight-colour f9e2af --highlight-users --highlight-dirs --filename-colour 585b70 --dir-colour 89b4fa - --bloom-multiplier 1.5 --bloom-intensity 0.75 --elasticity 0.3 + --bloom-multiplier 1.5 --bloom-intensity 0.75 --elasticity 0.1 --title hyperhive --logo ${logo} --logo-offset 20x20 --user-image-dir "$avatar_dir" @@ -68,8 +117,8 @@ writeShellApplication { gource "''${args[@]}" --output-ppm-stream - --output-framerate 30 \ | ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - \ -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" \ - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 \ - gource-hyperhive.mp4 + -c:v libsvtav1 -preset 6 -crf 34 -g 300 -pix_fmt yuv420p \ + gource-hyperhive.webm else gource "''${args[@]}" fi