From 6962de7e076ab68e1ead87770982a7d2e676fc02 Mon Sep 17 00:00:00 2001
From: m3tam3re
Date: Sat, 8 Aug 2026 17:46:02 +0200
Subject: [PATCH] feat: buzz, basecamp-cli
---
CHANGELOG.md | 15 +++++++++
docs/packages/README.md | 2 ++
flake.lock | 73 ++++++++++++++++++++++++++++++++++++++---
flake.nix | 13 ++++----
pkgs/default.nix | 26 +++++++++++----
5 files changed, 111 insertions(+), 18 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5d23fd8..d494967 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,24 +6,30 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
## [Unreleased]
### Added
+
+- `buzz` / `buzz-desktop` package — Block's "hive mind" desktop app, consumed as a pass-through from the `mulatta/buzz.nix` flake input. The upstream AppImage lacks the sidecars (`buzz-agent`, `buzz-acp`, `buzz-dev-mcp`, `git-credential-nostr`) and the Tauri-specific GStreamer integration needed to actually run, so we consume mulatta's from-source Tauri build instead. Builds entirely from source — no third-party binary cache (deliberate: don't want to trust mulatta's prebuilt artifacts). First build is slow.
- `opencode-desktop` re-added as a pure pass-through from the `anomalyco/opencode` flake input (Electron app, tracked on `dev`); the input intentionally does not follow nixpkgs so upstream's `node_modules` FOD hashes stay valid
### Fixed
+
- `openwork` 0.17.30: upstream renamed desktop/icon assets from `@openworkdesktop.{desktop,png}` to `openwork.{desktop,png}` and dropped the `Icon=`/`--no-sandbox` substitutions that are no longer needed
### Changed
+
- Remove duplicate opencode-rules.nix (backward-compat alias preserved)
- Tool-agnostic naming in coding-rules lib internals
- Remove redundant overlay entries for non-existent flake inputs
- Remove redundant 'additions' overlay (identical to 'default')
### Removed
+
- Dead overlay entries for non-existent flake inputs
- Legacy `mkOpencodeRules` alias and `lib.opencode-rules` backward-compat entry (use `mkCodingRules` / `lib.coding-rules`)
## [0.4.0] - 2026-04-15
### Added
+
- Pi-agent wrapper with systemd sandbox and per-host-user policy
- Containerized Pi agent
- `lib.agents.nix` with loadCanonical, renderers (OpenCode, Claude Code, Pi), and shellHook
@@ -39,6 +45,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
- Opencode dev shell with mkCodingRules demo
### Changed
+
- OpenCode flake input updated through v1.1.65 to v1.3.6
- Switched from local opencode package to upstream flake input
- Removed opencode-desktop (awaiting upstream fix), later re-enabled
@@ -46,6 +53,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
- Flake inputs updated throughout
### Fixed
+
- Pi settings sync
- Remove openwork sidecars in preFixup to prevent .opencode-wrapped conflict
- Remove sidecar binaries from openwork $out/bin to fix buildEnv conflict
@@ -56,6 +64,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
## [0.3.0] - 2026-02-20
### Added
+
- `notesmd-cli` package with flake checks
- `sidecar` and `td` packages
- `opencode-desktop` package with Wayland support
@@ -63,12 +72,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
- `kestracli` / `kestractl` package (1.0.0 to 1.2.2)
### Changed
+
- Nix-update CI workflow optimized with caching and parallel processing
- Restructured n8n version handling for nix-update compatibility
- Switched formatter from nixpkgs-fmt to alejandra
- Replace local opencode with upstream flake input v1.1.27
### Fixed
+
- n8n build error
- n8n pnpm hash
- n8n update script
@@ -85,6 +96,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
## [0.2.0] - 2026-01-13
### Added
+
- Gitea Actions workflow for automated package updates with nix-update
- `n8n`, `beads`, and `opencode` packages
- `stt-ptt` package with auto-language detection
@@ -95,17 +107,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
- Port helper library (`lib/ports.nix`)
### Changed
+
- Beads updated through v0.49.1
- N8n updated through v2.8.1
- Opencode updated through v1.1.18
- Documentation expanded with comprehensive patterns and HM module docs
### Fixed
+
- Python env version fix for marimo
## [0.1.0] - 2025-10-04
### Added
+
- Initial flake setup with packages, overlays, modules, and shells
- NixOS and Home Manager module infrastructure
- `lib/` shared utilities
diff --git a/docs/packages/README.md b/docs/packages/README.md
index ddf95a7..72f1dd8 100644
--- a/docs/packages/README.md
+++ b/docs/packages/README.md
@@ -20,6 +20,7 @@ These packages are built from source in `pkgs//`:
| `launch-webapp` | Launch web applications | Shell | `pkgs/launch-webapp/` |
| `mem0` | AI memory assistant with vector storage | Python | `pkgs/mem0/` |
| `msty-studio` | Msty Studio application | Python | `pkgs/msty-studio/` |
+| `buzz` | Hive mind communication platform (desktop app) | Pass-through | `pkgs/default.nix` |
| `openshell` | AI shell assistant | Go | `pkgs/openshell/` |
| `openwork` | Open-source Claude Cowork alternative powered by opencode | AppImage | `pkgs/openwork/` |
| `pomodoro-timer` | Pomodoro timer utility | Shell | `pkgs/pomodoro-timer/` |
@@ -44,6 +45,7 @@ These packages are imported directly from flake inputs with minor modifications:
| Package | Source | Modification | Location |
|---------|--------|-------------|----------|
| `opencode-desktop` | `inputs.opencode` | Electron desktop app (pure pass-through) | `pkgs/default.nix` |
+| `buzz` / `buzz-desktop` | `inputs.buzz` (mulatta/buzz.nix) | From-source Tauri build with sidecars; the upstream AppImage lacks the sidecars + Tauri GStreamer integration. Builds from source without any third-party binary cache — first build is slow (Rust + sherpa-onnx), subsequent builds cached locally | `pkgs/default.nix` |
## Adding Package Documentation
diff --git a/flake.lock b/flake.lock
index ffa9cb6..c7b417b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -23,20 +23,42 @@
]
},
"locked": {
- "lastModified": 1785348116,
- "narHash": "sha256-AVycTcomtfvQJ/AHvMg5xu7lVoOzDXxjN+pV7mqUIQ4=",
+ "lastModified": 1785979955,
+ "narHash": "sha256-OP96Ak4OBydR98keoNYKdGY8j+wrIys0LafSZgwS20g=",
"owner": "basecamp",
"repo": "basecamp-cli",
- "rev": "e1059fb123a03295ce6176272e4bbaf43d7971c6",
+ "rev": "61a5591de1da9bc99c56b8072a4d6bad2c9b9e47",
"type": "github"
},
"original": {
"owner": "basecamp",
- "ref": "v0.8.0-rc.1",
+ "ref": "v0.9.0",
"repo": "basecamp-cli",
"type": "github"
}
},
+ "buzz": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "rust-overlay": "rust-overlay",
+ "treefmt-nix": "treefmt-nix"
+ },
+ "locked": {
+ "lastModified": 1785934673,
+ "narHash": "sha256-U/hMY9kkcdxt497yfGuT7+ytrRmE+E15KF6Sc6VrbZo=",
+ "owner": "mulatta",
+ "repo": "buzz.nix",
+ "rev": "f4bb77a87f1ec10e5ad51cfe6d0c4fca481c0534",
+ "type": "github"
+ },
+ "original": {
+ "owner": "mulatta",
+ "repo": "buzz.nix",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
"lastModified": 1785318670,
@@ -128,11 +150,54 @@
"inputs": {
"agents": "agents",
"basecamp": "basecamp",
+ "buzz": "buzz",
"nixpkgs": "nixpkgs",
"nixpkgs-master": "nixpkgs-master",
"opencode": "opencode",
"openspec": "openspec"
}
+ },
+ "rust-overlay": {
+ "inputs": {
+ "nixpkgs": [
+ "buzz",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1785820796,
+ "narHash": "sha256-sZXy8mzUMi2cOGulhoW4HWAZB6JhXOAx1x8J4auZFWk=",
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "rev": "b6916ba032e02122d6ed3064f40cabe937363d43",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oxalica",
+ "repo": "rust-overlay",
+ "type": "github"
+ }
+ },
+ "treefmt-nix": {
+ "inputs": {
+ "nixpkgs": [
+ "buzz",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1785360170,
+ "narHash": "sha256-XE1lKgQ3eIO3E7zWryqcRsax+mYXod/5RHBn4YaR9YE=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "d1187f8bc71fb8aab02395869ec3f5c1920f75c0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index e9cae72..fe9a3a2 100644
--- a/flake.nix
+++ b/flake.nix
@@ -6,23 +6,22 @@
nixpkgs-master.url = "github:NixOS/nixpkgs/master";
basecamp = {
- url = "github:basecamp/basecamp-cli/v0.8.0-rc.1";
+ url = "github:basecamp/basecamp-cli/v0.9.0";
inputs.nixpkgs.follows = "nixpkgs";
};
- # openspec - spec-driven development for AI coding assistants
openspec = {
url = "github:Fission-AI/OpenSpec";
inputs.nixpkgs.follows = "nixpkgs";
};
- # opencode - open-source coding agent; provides the opencode-desktop
- # Electron app. NOTE: intentionally does NOT follow nixpkgs. Upstream
- # pins a node_modules fixed-output derivation hash in nix/hashes.json
- # against its own nixpkgs snapshot; following would risk FOD hash
- # mismatches. Tracking the `dev` default branch (flake.lock pins the rev).
opencode.url = "github:anomalyco/opencode/dev";
+ buzz = {
+ url = "github:mulatta/buzz.nix";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
# Agent definitions and coding rules
agents = {
url = "git+https://code.m3ta.dev/m3tam3re/AGENTS";
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 5c5c939..aa7493f 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -44,13 +44,25 @@ in {
# We override both here so the input builds and reports the rc.1 version.
# When upstream fixes package.nix (expected for the 0.8.0 final), drop this
# override back to the plain pass-through.
- basecamp = inputs.basecamp.packages.${system}.default.overrideAttrs (_: {
- version = "0.8.0-rc.1";
- vendorHash = "sha256-m1UF/Ga9C9GJF0JtZMXFOX88chb+f279/aoAaiwfxvg=";
- # src stays the flake input (lib.cleanSource ./.. pinned by flake.lock to
- # rc.1) — only the version label that upstream forgot to bump is corrected.
- __intentionallyOverridingVersion = true;
- });
+ # basecamp = inputs.basecamp.packages.${system}.default.overrideAttrs (_: {
+ # version = "0.8.0-rc.1";
+ # vendorHash = "sha256-m1UF/Ga9C9GJF0JtZMXFOX88chb+f279/aoAaiwfxvg=";
+ # # src stays the flake input (lib.cleanSource ./.. pinned by flake.lock to
+ # # rc.1) — only the version label that upstream forgot to bump is corrected.
+ # __intentionallyOverridingVersion = true;
+ # });
+ basecamp = inputs.basecamp.packages.${system}.default;
openspec = inputs.openspec.packages.${system}.default;
opencode-desktop = inputs.opencode.packages.${system}.opencode-desktop;
+
+ # buzz: Block's "hive mind" desktop app. Consumed from mulatta/buzz.nix
+ # because the upstream AppImage lacks the sidecars + Tauri GStreamer
+ # integration needed to actually run. Exposed under both `buzz-desktop`
+ # (mulatta's name) and `buzz` (the short alias). Builds entirely from
+ # source — no third-party binary cache. First build is slow (Rust + Tauri
+ # + sherpa-onnx); subsequent builds are cached in the local nix store.
+ # Note: mulatta only publishes packages for x86_64-linux, aarch64-linux,
+ # aarch64-darwin — x86_64-darwin will throw at build time.
+ buzz-desktop = inputs.buzz.packages.${system}.buzz-desktop;
+ buzz = inputs.buzz.packages.${system}.buzz-desktop;
}