Compare commits

...

42 Commits

Author SHA1 Message Date
4bc5df11c4 feat(packages): add ds4 package with ROCm/Strix Halo backend
Some checks failed
CI / check (push) Has been cancelled
Add antirez/ds4 — DeepSeek V4 Flash/PRO local inference engine built
with the ROCm strix-halo target for AMD Radeon 8060S (gfx1151).
Wires up all 8 ROCm transitive dependencies (clr, hipblas, hipblas-common,
hipblaslt, hipcub, rocblas, rocprim, rocwmma) via explicit include/lib paths.
2026-06-19 23:06:42 +03:00
6afcc00165 feat(packages): add omniroute package
Some checks failed
CI / check (push) Has been cancelled
Add OmniRoute v3.8.28 - a unified AI router aggregating 160+ providers
with auto fallback, MCP/A2A support, and OpenAI-compatible APIs.

Uses a hybrid approach: GitHub source for dependency resolution via
fetchNpmDeps, combined with pre-built dist/ from the npm tarball to
avoid the complex Next.js build in the Nix sandbox.
2026-06-19 09:39:05 +03:00
744d2419e6 feat(packages): add relay-free-llm package
Add RelayFreeLLM, a RESTful API gateway that routes prompts to multiple
AI providers (Gemini, Cerebras, Groq, Mistral, etc.) with failover and
intent-based routing. Includes local cerebras-cloud-sdk build since it is
not yet in nixpkgs.
2026-06-19 08:49:29 +03:00
8d8f56664d fix(packages): correct pname typo, add missing category, add sed warning, fix indent
- graphify: fix pname typo graphifyy -> graphify
- container-use: add missing passthru.category
- radar: add brittleness warning on postPatch sed block
- freebuff: fix extractNpmPkg indentation
2026-06-17 14:11:20 +03:00
eae85ce989 chore: remove goose-cli package and cleanup configuration
Some checks failed
CI / check (push) Has been cancelled
2026-06-16 22:01:18 +03:00
4bf6faa2a7 chore: remove goose-cli package and cleanup configuration
- Delete packages/goose-cli/ (librusty_v8 pre-built binary dependency)
- Remove global nixpkgs.config.allowUnfree from flake.nix
  (goose-cli was the only package requiring unfree binaries)
- Add .claude/ to .gitignore
- Update README.md and AGENTS.md to remove all goose-cli references
2026-06-16 21:41:30 +03:00
bbd20d955d feat(loop): extract desktop file and icons from AppImage
Some checks failed
CI / check (push) Has been cancelled
- Use appimageTools.extractType2 to access embedded assets
- Install loop-desktop.desktop and rewrite Exec=AppRun → Exec=loop
- Copy hicolor icons (16–1024px) from AppImage tree
2026-06-09 13:17:16 +03:00
5ec513fe8c refactor(loop): switch from tar.gz to AppImage packaging
Some checks failed
CI / check (push) Has been cancelled
- Use appimageTools.wrapType2 instead of manual stdenv.mkDerivation
- Source: loop-desktop-6.0.3-linux-x86_64.AppImage
- Simplify dependencies via extraPkgs (gtk3, glib)
2026-06-09 11:16:33 +03:00
Hermes Agent
a0abf62d0d feat: add stakpak package (v0.3.86)
Some checks failed
CI / check (push) Has been cancelled
Stakpak is a DevOps AI agent that generates infrastructure code,
debugs Kubernetes, configures CI/CD, and automates deployments.

- Source: github.com/stakpak/agent v0.3.86
- Rust workspace (14 crates), default binary: stakpak
- Dependencies: openssl (transitive via native-tls), pkg-config
- License: Apache-2.0
2026-06-07 19:42:25 +00:00
37dd6d3295 fix(loop): Replace deprecated xorg dependencies with standalone packages
Some checks failed
CI / check (push) Has been cancelled
Replace deprecated xorg.* references with their standalone package
names to eliminate build warnings about renamed packages.
2026-05-30 19:50:29 +03:00
cb5ace4837 fix(loop): update homepage URL to loop.ru
Some checks failed
CI / check (push) Has been cancelled
2026-05-29 20:27:01 +03:00
cf676f951c fix(loop): keep only --ozone-platform=x11, remove --no-sandbox
Some checks failed
CI / check (push) Has been cancelled
User confirmed that --no-sandbox is unnecessary and that the app
crashes without --ozone-platform=x11. Keep the minimal working
wrapper flags.
2026-05-29 20:24:49 +03:00
bede48c22e fix(loop): remove forced X11, keep --no-sandbox
Some checks failed
CI / check (push) Has been cancelled
Revert the --ozone-platform=x11 flag since the user prefers native
Wayland. The flag was added to work around a zxdg_exporter_v1
Wayland protocol crash in Electron, but forcing X11 is not
acceptable for Wayland users. Keep --no-sandbox for NixOS store
compatibility.
2026-05-29 20:23:03 +03:00
3a86fe84f4 fix(loop): force X11 ozone platform and disable sandbox
Some checks failed
CI / check (push) Has been cancelled
- Add --ozone-platform=x11 to wrapper to fix Wayland crash
  (zxdg_exporter_v1 protocol error causing SIGTRAP on Wayland)
- Add --no-sandbox since chrome-sandbox lacks SUID on NixOS
2026-05-29 20:20:07 +03:00
d23dc7ab22 fix(loop): add runtime fixes for gsettings and GPU libraries
Some checks failed
CI / check (push) Has been cancelled
- Add LD_LIBRARY_PATH to wrapper so Electron GPU process finds bundled libEGL.so.1
- Add glib.bin to buildInputs and wrap gsettings into PATH
- Create versioned symlinks for bundled libEGL.so and libGLESv2.so
- Clean up formatting in package inputs
2026-05-29 20:04:32 +03:00
3b597af162 feat(loop): Add Loop corporate messenger package
Some checks failed
CI / check (push) Has been cancelled
Add Loop v6.0.3 - a corporate messenger distributed as a pre-built x86-64 binary.
Uses autoPatchelfHook and wrapGAppsHook3 for NixOS compatibility.
2026-05-29 19:51:21 +03:00
37af68cfd0 docs(AGENTS): add sequential-thinking MCP and caveman skill requirements
Some checks failed
CI / check (push) Has been cancelled
- Require sequentialthinking MCP for all planning/problem-solving
- Add caveman mode for compressed user-facing communication
- Clarify karpathy-guidelines usage for task execution quality
2026-05-27 22:06:38 +03:00
6f18e72272 docs(AGENTS): add mandatory beads workflow section before any work
Some checks failed
CI / check (push) Has been cancelled
Make bd usage explicit with a "Before Starting Any Work" section,
updated example workflow, and strengthened quick reference rules.
This prevents agents from using TodoWrite or other non-bd tracking.
2026-05-27 22:01:26 +03:00
bcf607c209 feat(hipengine): add ROCm-native LLM inference engine (v0.2.2)
Some checks failed
CI / check (push) Has been cancelled
2026-05-27 21:56:18 +03:00
7f0cec1a35 fix(aionui): Use production-only deps for runtime, hoist transitive deps
Some checks failed
CI / check (push) Has been cancelled
Replace full node_modules copy with production-only FOD (mirrors
the upstream Dockerfile pattern), reducing package output from
~6.9 GB to ~1.3 GB.

Hoist @sentry/node to top-level node_modules so Electron's
require() resolution can find it. Bun nests transitive deps
inside .bun/ but Electron resolves from the realpath, requiring
the dependency to be accessible from the walked-up directory
chain.
2026-05-27 14:35:57 +03:00
02947027ba feat(aionui): Add AionUi AI cowork desktop app (v2.1.4)
Some checks failed
CI / check (push) Has been cancelled
Build AionUi from source using bun for dependency fetching and
electron-vite for TypeScript compilation. Native addons
(better-sqlite3, sharp) are compiled against nixpkgs node-gyp.

The package uses a fixed-output derivation for bun install,
electron-vite for the build, and wraps the result with nixpkgs
electron for a fully self-contained runtime.

Also includes desktop entry and icon generation.
2026-05-27 13:48:18 +03:00
efc1ad85e2 chore(beads): update issues
Some checks failed
CI / check (push) Has been cancelled
2026-05-17 16:03:47 +03:00
c805ff1d69 chore(radar): update to v1.6.1 2026-05-17 16:03:33 +03:00
e3adb2e906 docs(AGENTS): add required skills section for nix, nix-flakes, karpathy-guidelines
Some checks failed
CI / check (push) Has been cancelled
2026-05-17 15:55:36 +03:00
bb3c53b40b refactor(freebuff): run engine directly from nix-store
Some checks failed
CI / check (push) Has been cancelled
Remove unnecessary copy to ~/.config/manicode/. The patched ELF
binary and tree-sitter.wasm stay in the nix store alongside a minimal
JS launcher that spawns the engine with terminal cleanup handling.
2026-05-12 11:48:46 +03:00
6c5fdd7331 fix(freebuff): patch pre-built binary with patchelf for NixOS compatibility
- Download and extract the engine binary from codebuff.com releases
- Use patchelf to set correct glibc interpreter path
- Create wrapper launcher that copies patched binary to user config
- Pre-fetch all npm dependencies (no network needed in sandbox)
- Set dontStrip/dontPatchelf to prevent fixupPhase corruption
2026-05-12 09:31:40 +03:00
c7029a0d34 docs(README): add missing packages to project structure section 2026-05-11 20:55:16 +03:00
a7ddc90e17 feat: add freebuff package (Codebuff AI coding agent)
Some checks failed
CI / check (push) Has been cancelled
Add freebuff v0.0.85 from npm registry — a pure JS CLI tool for
AI-assisted coding. Pre-fetches all transitive npm dependencies to
work within the Nix sandbox (no network access during build).
2026-05-11 20:04:22 +03:00
52971ae66b Merge pull request 'refactor/radar-native-build' (#1) from refactor/radar-native-build into main
Some checks failed
CI / check (push) Has been cancelled
Reviewed-on: #1
2026-05-11 18:55:51 +03:00
cbaa6b6bca fix(radar): inject correct build version via ldflags
Some checks failed
CI / check (pull_request) Has been cancelled
Version was showing as "dev" instead of "v1.5.14" because ldflags
targeted the wrong variable. Changed from internal/version.Current
to main.version which is the variable actually used by cmd/explorer.
2026-05-11 18:49:47 +03:00
3b0bc435c4 refactor(radar): build from source instead of prebuilt binary
Replace fetchurl + prebuilt binary with buildGoModule + buildNpmPackage
to compile radar natively from source. Frontend (React/Vite) is built
as a separate derivation, then embedded into the Go binary via go:embed.

Also patches the npm lockfile to add missing resolved URLs for
workspace packages that lacked them, enabling proper dependency fetching.

Closes nix-overlay-qlc
2026-05-11 18:09:02 +03:00
0d6b74045e Update package.nix
Some checks failed
CI / check (push) Has been cancelled
2026-05-11 11:31:25 +03:00
ca9a8050df chore(beads): update issue status for nix-overlay-2lr
Some checks failed
CI / check (push) Has been cancelled
2026-05-11 11:30:02 +03:00
d065d8cdde feat(radar): add radar Kubernetes UI package v1.5.10
Some checks failed
CI / check (push) Has been cancelled
Add radar v1.5.10 — a modern Kubernetes visibility tool providing
topology, event timeline, service traffic, resource browsing, Helm
management, and GitOps support.

Uses pre-built binary from GitHub releases.

Closes: nix-overlay-2lr
2026-05-11 00:29:28 +03:00
7581781b3b bd init: initialize beads issue tracking 2026-05-10 22:28:02 +03:00
c35e6bff5d docs(agents): note that blueprint package discovery requires git staging
Some checks failed
CI / check (push) Has been cancelled
Blueprint reads packages from the git index, not the working directory.
New packages must be staged with 'git add' before they appear in flake
outputs. Add this to both the Blueprint Framework section and the
'Adding a New Package' workflow.
2026-05-10 16:59:24 +03:00
c9e6af2956 feat(packages): add desloppify v0.9.15
Add desloppify, a multi-language codebase health scanner and technical
debt tracker for AI agents. Includes all [full] optional dependencies
(tree-sitter, bandit, pillow, pyyaml, defusedxml) for complete
functionality out of the box.
2026-05-10 16:53:40 +03:00
d8f7f602ed feat(packages): add graphify v0.7.10
Some checks failed
CI / check (push) Has been cancelled
Add graphify, a tool that turns any folder of code, docs, papers, images,
or videos into a queryable knowledge graph for AI coding assistants.

Includes tree-sitter grammar filtering to use only grammars available in
nixpkgs, with missing grammars falling back to runtime downloads.
2026-05-08 21:18:08 +03:00
4a06f35ec2 fix(goose-cli): resolve bindgen and test failures in Nix sandbox
Some checks failed
CI / check (push) Has been cancelled
- Added stdenv and BINDGEN_EXTRA_CLANG_ARGS to fix libclang header
  resolution for llama-cpp-sys-2 bindgen (stdio.h not found)
- Added cmake to nativeBuildInputs (required by llama-cpp-sys-2 build)
- Added cacert and SSL_CERT_FILE to fix reqwest CA certificate errors
  in tests (No CA certificates were loaded from the system)
- All 191 tests now pass in the sandbox
2026-05-08 20:13:34 +03:00
492ffc200a Remove kubernetes-mcp-server task file
Also add .tasks/ to .gitignore
2026-05-08 19:47:11 +03:00
67b8add3d1 feat(packages): add kubernetes-mcp-server v0.0.62
Model Context Protocol (MCP) server for Kubernetes and OpenShift.
Native Go implementation that interacts directly with the Kubernetes
API server without external dependencies like kubectl or helm.

- Added package.nix using buildGoModule (CGO_ENABLED=0, static build)
- Added default.nix wrapper for blueprint auto-discovery
- Updated README.md with the new package entry
- Added task requirements document in tasks/kubernetes-mcp-server.md
2026-05-08 19:43:55 +03:00
0fd5c71709 fix: resolve code quality issues, add CI, and improve maintainability
- Remove useless nixConfig block (cache.nixos.org is default)
- Remove manual container-use override; let blueprint auto-discover it
- Add nixosModules.default so README example works
- Fix default launcher: use correct parameterized flake URL
- Replace deprecated sha256 with hash in goose-cli fetchers
- Fix LIBCLANG_PATH to include /lib subdirectory for libclang.so
- Drop --release from goose-cli tests (faster, more debug info)
- Use builtins.toFile in flake-inputs to avoid ARG_MAX risk
- Add lib.warn when overlay has no packages for a system
- Add passthru.updateScript to goose-cli, container-use, skillsmcp
- Fix skillsmcp version to 0.2.0+unstable (pinned to commit, not tag)
- Replace with lib; with explicit references in all meta blocks
- Add update.py script for goose-cli (referenced in AGENTS.md)
- Expand .gitignore with result-* and .direnv/
- Add GitHub Actions CI workflow (nix flake check + build)
2026-05-08 06:02:12 +03:00
51 changed files with 1843 additions and 174 deletions

73
.beads/.gitignore vendored Normal file
View File

@@ -0,0 +1,73 @@
# Dolt database (managed by Dolt, not git)
dolt/
embeddeddolt/
# Runtime files
bd.sock
bd.sock.startlock
sync-state.json
last-touched
.exclusive-lock
# Daemon runtime (lock, log, pid)
daemon.*
# Interactions log (runtime, not versioned)
interactions.jsonl
# Push state (runtime, per-machine)
push-state.json
# Lock files (various runtime locks)
*.lock
# Credential key (encryption key for federation peer auth — never commit)
.beads-credential-key
# Local version tracking (prevents upgrade notification spam after git ops)
.local_version
# Worktree redirect file (contains relative path to main repo's .beads/)
# Must not be committed as paths would be wrong in other clones
redirect
# Sync state (local-only, per-machine)
# These files are machine-specific and should not be shared across clones
.sync.lock
export-state/
export-state.json
# Ephemeral store (SQLite - wisps/molecules, intentionally not versioned)
ephemeral.sqlite3
ephemeral.sqlite3-journal
ephemeral.sqlite3-wal
ephemeral.sqlite3-shm
# Dolt server management (auto-started by bd)
dolt-server.pid
dolt-server.log
dolt-server.lock
dolt-server.port
dolt-server.activity
# Corrupt backup directories (created by bd doctor --fix recovery)
*.corrupt.backup/
# Backup data (auto-exported JSONL, local-only)
backup/
# Per-project environment file (Dolt connection config, GH#2520)
.env
# Legacy files (from pre-Dolt versions)
*.db
*.db?*
*.db-journal
*.db-wal
*.db-shm
db.sqlite
bd.db
# NOTE: Do NOT add negation patterns here.
# They would override fork protection in .git/info/exclude.
# Config files (metadata.json, config.yaml) are tracked by git by default
# since no pattern above ignores them.

81
.beads/README.md Normal file
View File

@@ -0,0 +1,81 @@
# Beads - AI-Native Issue Tracking
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
## What is Beads?
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
## Quick Start
### Essential Commands
```bash
# Create new issues
bd create "Add user authentication"
# View all issues
bd list
# View issue details
bd show <issue-id>
# Update issue status
bd update <issue-id> --claim
bd update <issue-id> --status done
# Sync with Dolt remote
bd dolt push
```
### Working with Issues
Issues in Beads are:
- **Git-native**: Stored in Dolt database with version control and branching
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
- **Branch-aware**: Issues can follow your branch workflow
- **Always in sync**: Auto-syncs with your commits
## Why Beads?
**AI-Native Design**
- Built specifically for AI-assisted development workflows
- CLI-first interface works seamlessly with AI coding agents
- No context switching to web UIs
🚀 **Developer Focused**
- Issues live in your repo, right next to your code
- Works offline, syncs when you push
- Fast, lightweight, and stays out of your way
🔧 **Git Integration**
- Automatic sync with git commits
- Branch-aware issue tracking
- Dolt-native three-way merge resolution
## Get Started with Beads
Try Beads in your own projects:
```bash
# Install Beads
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
# Initialize in your repo
bd init
# Create your first issue
bd create "Try out Beads"
```
## Learn More
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
- **Quick Start Guide**: Run `bd quickstart`
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
---
*Beads: Issue tracking that moves at the speed of thought*

54
.beads/config.yaml Normal file
View File

@@ -0,0 +1,54 @@
# Beads Configuration File
# This file configures default behavior for all bd commands in this repository
# All settings can also be set via environment variables (BD_* prefix)
# or overridden with command-line flags
# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""
# Use no-db mode: JSONL-only, no Dolt database
# When true, bd will use .beads/issues.jsonl as the source of truth
# no-db: false
# Enable JSON output by default
# json: false
# Feedback title formatting for mutating commands (create/update/close/dep/edit)
# 0 = hide titles, N > 0 = truncate to N characters
# output:
# title-length: 255
# Default actor for audit trails (overridden by BEADS_ACTOR or --actor)
# actor: ""
# Export events (audit trail) to .beads/events.jsonl on each flush/sync
# When enabled, new events are appended incrementally using a high-water mark.
# Use 'bd export --events' to trigger manually regardless of this setting.
# events-export: false
# Multi-repo configuration (experimental - bd-307)
# Allows hydrating from multiple repositories and routing writes to the correct database
# repos:
# primary: "." # Primary repo (where this database lives)
# additional: # Additional repos to hydrate from (read-only)
# - ~/beads-planning # Personal planning repo
# - ~/work-planning # Work planning repo
# JSONL backup (periodic export for off-machine recovery)
# Auto-enabled when a git remote exists. Override explicitly:
# backup:
# enabled: false # Disable auto-backup entirely
# interval: 15m # Minimum time between auto-exports
# git-push: false # Disable git push (export locally only)
# git-repo: "" # Separate git repo for backups (default: project repo)
# Integration settings (access with 'bd config get/set')
# These are stored in the database, not in this file:
# - jira.url
# - jira.project
# - linear.url
# - linear.api-key
# - github.org
# - github.repo

24
.beads/hooks/post-checkout Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.3 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
_bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
if command -v timeout >/dev/null 2>&1; then
timeout "$_bd_timeout" bd hooks run post-checkout "$@"
_bd_exit=$?
if [ $_bd_exit -eq 124 ]; then
echo >&2 "beads: hook 'post-checkout' timed out after ${_bd_timeout}s — continuing without beads"
_bd_exit=0
fi
else
bd hooks run post-checkout "$@"
_bd_exit=$?
fi
if [ $_bd_exit -eq 3 ]; then
echo >&2 "beads: database not initialized — skipping hook 'post-checkout'"
_bd_exit=0
fi
if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.3 ---

24
.beads/hooks/post-merge Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.3 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
_bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
if command -v timeout >/dev/null 2>&1; then
timeout "$_bd_timeout" bd hooks run post-merge "$@"
_bd_exit=$?
if [ $_bd_exit -eq 124 ]; then
echo >&2 "beads: hook 'post-merge' timed out after ${_bd_timeout}s — continuing without beads"
_bd_exit=0
fi
else
bd hooks run post-merge "$@"
_bd_exit=$?
fi
if [ $_bd_exit -eq 3 ]; then
echo >&2 "beads: database not initialized — skipping hook 'post-merge'"
_bd_exit=0
fi
if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.3 ---

24
.beads/hooks/pre-commit Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.3 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
_bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
if command -v timeout >/dev/null 2>&1; then
timeout "$_bd_timeout" bd hooks run pre-commit "$@"
_bd_exit=$?
if [ $_bd_exit -eq 124 ]; then
echo >&2 "beads: hook 'pre-commit' timed out after ${_bd_timeout}s — continuing without beads"
_bd_exit=0
fi
else
bd hooks run pre-commit "$@"
_bd_exit=$?
fi
if [ $_bd_exit -eq 3 ]; then
echo >&2 "beads: database not initialized — skipping hook 'pre-commit'"
_bd_exit=0
fi
if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.3 ---

24
.beads/hooks/pre-push Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.3 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
_bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
if command -v timeout >/dev/null 2>&1; then
timeout "$_bd_timeout" bd hooks run pre-push "$@"
_bd_exit=$?
if [ $_bd_exit -eq 124 ]; then
echo >&2 "beads: hook 'pre-push' timed out after ${_bd_timeout}s — continuing without beads"
_bd_exit=0
fi
else
bd hooks run pre-push "$@"
_bd_exit=$?
fi
if [ $_bd_exit -eq 3 ]; then
echo >&2 "beads: database not initialized — skipping hook 'pre-push'"
_bd_exit=0
fi
if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.3 ---

24
.beads/hooks/prepare-commit-msg Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env sh
# --- BEGIN BEADS INTEGRATION v1.0.3 ---
# This section is managed by beads. Do not remove these markers.
if command -v bd >/dev/null 2>&1; then
export BD_GIT_HOOK=1
_bd_timeout=${BEADS_HOOK_TIMEOUT:-300}
if command -v timeout >/dev/null 2>&1; then
timeout "$_bd_timeout" bd hooks run prepare-commit-msg "$@"
_bd_exit=$?
if [ $_bd_exit -eq 124 ]; then
echo >&2 "beads: hook 'prepare-commit-msg' timed out after ${_bd_timeout}s — continuing without beads"
_bd_exit=0
fi
else
bd hooks run prepare-commit-msg "$@"
_bd_exit=$?
fi
if [ $_bd_exit -eq 3 ]; then
echo >&2 "beads: database not initialized — skipping hook 'prepare-commit-msg'"
_bd_exit=0
fi
if [ $_bd_exit -ne 0 ]; then exit $_bd_exit; fi
fi
# --- END BEADS INTEGRATION v1.0.3 ---

13
.beads/issues.jsonl Normal file
View File

@@ -0,0 +1,13 @@
{"_type":"issue","id":"nix-overlay-6y6","title":"Add Loop corporate messenger package","description":"Add Loop - Corporate messenger for your team. Distributed as x86-64 binary from https://artifacts.wilix.dev/repository/loop-files/loop-6.0.3/loop-desktop-6.0.3-linux-x64.tar.gz","status":"closed","priority":2,"issue_type":"feature","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-29T16:41:37Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-29T16:51:32Z","started_at":"2026-05-29T16:42:02Z","closed_at":"2026-05-29T16:51:32Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-cdt","title":"radar-1.6.1","description":"update package radar to v1.6.1","status":"closed","priority":2,"issue_type":"task","owner":"alex@millerson.name","created_at":"2026-05-17T12:41:54Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-17T13:03:38Z","closed_at":"2026-05-17T13:03:38Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-27z","title":"freebuff","description":"В данный nixos overlay репозиторй необходимо добавить новый пакет https://www.npmjs.com/package/freebuff .\nИспользуй mcp: nixos, karpathy-guidelines и Sequential Thinking для планирования шаг за шагом задачи. Управление тасками используй beads. Разбей задачу на подзадачи, используя beads с указанием parent task.\n\nRequired Skills\ncaveman,karpathy-guidelines,nix,nix-flakes","status":"closed","priority":2,"issue_type":"feature","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-11T16:11:44Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T17:03:53Z","started_at":"2026-05-11T16:17:34Z","closed_at":"2026-05-11T17:03:53Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-qlc.5","title":"Update package metadata and updateScript","description":"Remove binaryNativeCode sourceProvenance, update meta, adjust updateScript for source build","status":"closed","priority":2,"issue_type":"task","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-11T13:51:22Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T15:01:06Z","started_at":"2026-05-11T14:59:33Z","closed_at":"2026-05-11T15:01:06Z","close_reason":"Closed","dependencies":[{"issue_id":"nix-overlay-qlc.5","depends_on_id":"nix-overlay-qlc","type":"parent-child","created_at":"2026-05-11T16:51:21Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-qlc.4","title":"Test build and verify functionality","description":"Build radar from source and verify it runs correctly","status":"closed","priority":2,"issue_type":"task","owner":"alex@millerson.name","created_at":"2026-05-11T13:51:11Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T14:59:55Z","closed_at":"2026-05-11T14:59:55Z","close_reason":"Closed","dependencies":[{"issue_id":"nix-overlay-qlc.4","depends_on_id":"nix-overlay-qlc","type":"parent-child","created_at":"2026-05-11T16:51:10Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-qlc.3","title":"Handle go:embed frontend assets","description":"Ensure frontend assets are copied to internal/static/dist before Go build so go:embed works correctly","status":"closed","priority":2,"issue_type":"task","owner":"alex@millerson.name","created_at":"2026-05-11T13:51:02Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T14:59:55Z","closed_at":"2026-05-11T14:59:55Z","close_reason":"Closed","dependencies":[{"issue_id":"nix-overlay-qlc.3","depends_on_id":"nix-overlay-qlc","type":"parent-child","created_at":"2026-05-11T16:51:02Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-qlc.2","title":"Configure npm dependencies for frontend build","description":"Set up npmDependencies hash for the Vite/React frontend build within buildGoModule","status":"closed","priority":2,"issue_type":"task","owner":"alex@millerson.name","created_at":"2026-05-11T13:50:53Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T14:59:55Z","closed_at":"2026-05-11T14:59:55Z","close_reason":"Closed","dependencies":[{"issue_id":"nix-overlay-qlc.2","depends_on_id":"nix-overlay-qlc","type":"parent-child","created_at":"2026-05-11T16:50:52Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-qlc.1","title":"Update radar default.nix to use buildGoModule","description":"Change package.nix from stdenv.mkDerivation with fetchurl to buildGoModule pattern","status":"closed","priority":2,"issue_type":"task","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-11T13:50:42Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T14:59:55Z","started_at":"2026-05-11T13:51:49Z","closed_at":"2026-05-11T14:59:55Z","close_reason":"Closed","dependencies":[{"issue_id":"nix-overlay-qlc.1","depends_on_id":"nix-overlay-qlc","type":"parent-child","created_at":"2026-05-11T16:50:41Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-qlc","title":"Rebuild radar package from source instead of prebuilt binary","description":"Current radar package uses prebuilt binary from GitHub releases. Need to rebuild from source using nix native tooling (buildGoModule + npm for frontend). Build pipeline: 1) npm run build for frontend, 2) copy assets to internal/static/dist, 3) CGO_ENABLED=0 go build with embedded assets.","status":"closed","priority":2,"issue_type":"task","owner":"alex@millerson.name","created_at":"2026-05-11T13:50:27Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T15:01:06Z","closed_at":"2026-05-11T15:01:06Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-y8r","title":"nix-overlay-2lr-3 · Approach 3: ручной npm cache + buildGoModule [parent:nix-overlay-2lr]","notes":"BLOCKED: fetchNpmDeps v2 не загружает workspace-scoped пакеты (@vitejs/plugin-react ENOTCACHED) даже с makeCacheWritable=true. Все 3 подхода заблокированы одним ограничением — fetchNpmDeps v2 не поддерживает npm workspaces корректно, вопреки release notes.","status":"closed","priority":2,"issue_type":"task","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-11T09:38:34Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T11:14:40Z","started_at":"2026-05-11T10:23:41Z","closed_at":"2026-05-11T11:14:40Z","dependencies":[{"issue_id":"nix-overlay-y8r","depends_on_id":"nix-overlay-2lr","type":"parent-child","created_at":"2026-05-11T12:42:18Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-dcx","title":"nix-overlay-2lr-2 · Approach 2: bun2nix генерация пакетов [parent:nix-overlay-2lr]","notes":"Skipping bun2nix — требует staging branch, неочевидная поддержка npm lockfiles. Проще перейти к Approach 3 (ручной stdenv.mkDerivation с nodejs/npm).","status":"closed","priority":2,"issue_type":"task","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-11T09:38:06Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T10:23:18Z","started_at":"2026-05-11T10:21:04Z","closed_at":"2026-05-11T10:23:18Z","dependencies":[{"issue_id":"nix-overlay-dcx","depends_on_id":"nix-overlay-2lr","type":"parent-child","created_at":"2026-05-11T12:42:12Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-3ik","title":"nix-overlay-2lr-1 · Approach 1: buildNpmPackage + buildGoModule с npmDepsFetcherVersion=2 [parent:nix-overlay-2lr]","notes":"fetchNpmDeps v2 не resolves workspace-scoped packages (@vitejs/plugin-react ENOTCACHED). Approach blocked — same issue as previous attempt. Moving to Approach 2 (bun2nix).","status":"closed","priority":2,"issue_type":"task","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-11T09:37:43Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T10:20:38Z","started_at":"2026-05-11T09:39:05Z","closed_at":"2026-05-11T10:20:38Z","dependencies":[{"issue_id":"nix-overlay-3ik","depends_on_id":"nix-overlay-2lr","type":"parent-child","created_at":"2026-05-11T12:41:54Z","created_by":"Alexander Miroshnichenko","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nix-overlay-2lr","title":"radar","description":"Используй karpathy-guidelines и Sequential Thinking для планирования шаг за шагом добавления нового пакета https://github.com/skyhook-io/radar.git в данный NIXOS overlay-репозиторий. Разбей задачу на подзадачи, используя beads. В написании кода используй mcp: nixos, refContext и context7.\n\n\n\n## Required Skills\ncaveman,karpathy-guidelines,nix,nix-flakes","notes":"Все 3 подхода провалены. fetchNpmDeps v2 НЕ работает с npm workspaces вопреки release notes - ENOTCACHED для workspace-scoped пакетов (@vitejs/plugin-react). Ручной сбор node_modules без npm ci слишком сложен (требует reimplement fetchNpmDeps). Текущее решение: pre-built binary из GitHub Releases. Нужно дождаться исправления fetchNpmDeps v2 в nixpkgs или upstream поддержки standalone lockfile для web/.","status":"closed","priority":2,"issue_type":"feature","assignee":"Alexander Miroshnichenko","owner":"alex@millerson.name","created_at":"2026-05-10T19:28:56Z","created_by":"Alexander Miroshnichenko","updated_at":"2026-05-11T11:24:40Z","started_at":"2026-05-10T19:30:31Z","closed_at":"2026-05-11T11:24:40Z","dependency_count":0,"dependent_count":0,"comment_count":0}

7
.beads/metadata.json Normal file
View File

@@ -0,0 +1,7 @@
{
"database": "dolt",
"backend": "dolt",
"dolt_mode": "embedded",
"dolt_database": "nix_overlay",
"project_id": "bf9206b6-9430-479c-bc02-786cff5dbffc"
}

26
.claude/settings.json Normal file
View File

@@ -0,0 +1,26 @@
{
"hooks": {
"PreCompact": [
{
"hooks": [
{
"command": "bd prime",
"type": "command"
}
],
"matcher": ""
}
],
"SessionStart": [
{
"hooks": [
{
"command": "bd prime",
"type": "command"
}
],
"matcher": ""
}
]
}
}

20
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: Flake check (formatting + evaluation)
run: nix flake check
- name: Build all packages (best-effort, may time out)
run: nix build .#packages || true

9
.gitignore vendored
View File

@@ -1,3 +1,12 @@
.qoder
.qwen
.claude/
result
result-*
.direnv/
.tasks/
# Beads / Dolt files (added by bd init)
.dolt/
*.db
.beads-credential-key

117
AGENTS.md
View File

@@ -15,6 +15,45 @@ This is a **Nix flake overlay** repository that provides additional packages for
3. Touch only what you must. Clean up only your own mess.
4. Define success criteria. Loop until verified.
## Before Starting Any Work
**MANDATORY** — Before writing code, running builds, or making any changes:
1. **Run `bd prime`** — Get full workflow context and available commands
2. **Check for existing issues** — Run `bd ready` to find available work
3. **Claim the task** — Use `bd update <id> --claim` before starting
4. **Track via `bd` ONLY** — NEVER use TodoWrite, TaskCreate, or markdown TODO lists. All task tracking goes through `bd`.
Violating this rule means the agent is working outside the project's workflow. Stop and re-claim via `bd` first.
### Required Skills
Always use these skills when working with this repository:
- **nix** - For nixpkgs package lookups, option searches, and NixOS/Home Manager queries
- **nix-flakes** - For reproducible builds, flake management, and devShell operations
- **karpathy-guidelines** - For high-quality task execution best practices
### Required MCP Server
- **sequentialthinking** — MUST be used for ANY planning, problem-solving, or decision-making.
Invoke `sequentialthinking` MCP before:
- Designing implementation approaches
- Debugging non-obvious issues
- Evaluating trade-offs between approaches
- Breaking down complex tasks
- When you're uncertain about the best path forward
Do NOT skip deliberative thinking. Surface reasoning through sequentialthinking before acting.
### Communication: Caveman Mode
Use **caveman** skill for all user-facing communication. Responses should be:
- Ultra-compressed — cut token waste, keep technical substance
- Direct — no filler, no hedging, no "I'd recommend"
- Action-oriented — state what was done and what's next
Trigger: `skill: "caveman"` before responding to the user.
### Blueprint Framework
This project uses `numtide/blueprint` which:
@@ -23,6 +62,8 @@ This project uses `numtide/blueprint` which:
- Handles formatting, checking, and devShell generation
- Exposes `mkPackagesFor` function to build packages against any nixpkgs instance
**Important**: Blueprint's package discovery reads from the git index, not the working directory. New package directories must be staged with `git add` before they appear in flake outputs. Unstaged files are invisible to `nix build`, `nix flake show`, and `nix run`.
### Two Overlay Strategies
1. **`overlays.default`** - Binary-cache-friendly
@@ -46,13 +87,7 @@ nix-overlay/
├── packages/
│ ├── default/ # Meta-package listing all visible packages
│ │ ├── default.nix
│ │ └── package.nix
│ ├── goose-cli/ # Example package: Goose AI agent CLI
│ │ ├── default.nix
│ │ ├── package.nix # Main package definition
│ │ ├── fetchers.nix # Custom fetchers (if needed)
│ │ ├── librusty_v8.nix # V8 library pre-built binary
│ │ └── update.py # Update script for version bumps
│ │ └── package.nix
│ └── flake-inputs/ # Utility to cache all flake inputs
│ └── default.nix
├── README.md # User-facing documentation
@@ -159,6 +194,10 @@ When adding a new package:
pkgs.callPackage ./package.nix { }
```
3.5. **Stage the package**: `git add packages/<package-name>/`
Blueprint discovers packages from the git index, not the working directory.
Without this step, the package won't appear in flake outputs.
4. **Test the package**:
```bash
nix build .#<package-name>
@@ -187,7 +226,7 @@ When adding a new package:
```bash
# Build specific package
nix build .#goose-cli
nix build .#mcp-gateway
# Build all packages for current system
nix build .#packages
@@ -274,7 +313,6 @@ nix build .#<package-name>
### Package-Specific Notes
- **goose-cli**: Also updates `librusty_v8` hashes automatically via the custom fetcher
- **mcp-gateway**: Standard Rust package, `nix-update` handles version + cargoHash
- **skillsmcp**: Pinned to a commit hash; use `--version=branch=main` or specify the target commit with `--commit`
@@ -303,6 +341,11 @@ This skill provides:
## Example Workflow: Adding a New Package
```bash
# 0. Claim the task via beads (MANDATORY before any work)
bd ready # Find available work
bd show <id> # Review task details
bd update <id> --claim # Claim the task
# 1. Create package directory
mkdir -p packages/my-tool
@@ -314,6 +357,9 @@ cat > packages/my-tool/default.nix << 'EOF'
pkgs.callPackage ./package.nix { }
EOF
# 3.5. Stage for Blueprint discovery
git add packages/my-tool/
# 4. Test build
nix build .#my-tool
@@ -324,4 +370,57 @@ nix build .#my-tool
# 7. Commit changes using conventional-commit skill
git add packages/my-tool README.md
# Then invoke: skill: "conventional-commit"
# 8. Close the task via beads
bd close <id> # Mark task as complete
```
<!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:ca08a54f -->
## Beads Issue Tracker
This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands.
### Quick Reference
```bash
bd prime # ALWAYS run first — get full context and command reference
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --claim # Claim work (do this BEFORE starting any task)
bd close <id> # Complete work (do this AFTER pushing changes)
bd remember # Save persistent knowledge (use instead of MEMORY.md files)
```
### Rules
- **Use `bd` for ALL task tracking** — do NOT use TodoWrite, TaskCreate, or markdown TODO lists
- **Run `bd prime` BEFORE starting any work** — this provides session context and close protocol
- **Run `bd remember` for persistent knowledge** — do NOT use MEMORY.md files
- **If you forgot to claim** — stop working and claim via `bd` immediately
## Session Completion
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
**MANDATORY WORKFLOW:**
1. **File issues for remaining work** - Create issues for anything that needs follow-up
2. **Run quality gates** (if code changed) - Tests, linters, builds
3. **Update issue status** - Close finished work, update in-progress items
4. **PUSH TO REMOTE** - This is MANDATORY:
```bash
git pull --rebase
bd dolt push
git push
git status # MUST show "up to date with origin"
```
5. **Clean up** - Clear stashes, prune remote branches
6. **Verify** - All changes committed AND pushed
7. **Hand off** - Provide context for next session
**CRITICAL RULES:**
- Work is NOT complete until `git push` succeeds
- NEVER stop before pushing - that leaves work stranded locally
- NEVER say "ready to push when you are" - YOU must push
- If push fails, resolve and retry until it succeeds
<!-- END BEADS INTEGRATION -->

69
CLAUDE.md Normal file
View File

@@ -0,0 +1,69 @@
# Project Instructions for AI Agents
This file provides instructions and context for AI coding agents working on this project.
<!-- BEGIN BEADS INTEGRATION v:1 profile:minimal hash:ca08a54f -->
## Beads Issue Tracker
This project uses **bd (beads)** for issue tracking. Run `bd prime` to see full workflow context and commands.
### Quick Reference
```bash
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --claim # Claim work
bd close <id> # Complete work
```
### Rules
- Use `bd` for ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists
- Run `bd prime` for detailed command reference and session close protocol
- Use `bd remember` for persistent knowledge — do NOT use MEMORY.md files
## Session Completion
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
**MANDATORY WORKFLOW:**
1. **File issues for remaining work** - Create issues for anything that needs follow-up
2. **Run quality gates** (if code changed) - Tests, linters, builds
3. **Update issue status** - Close finished work, update in-progress items
4. **PUSH TO REMOTE** - This is MANDATORY:
```bash
git pull --rebase
bd dolt push
git push
git status # MUST show "up to date with origin"
```
5. **Clean up** - Clear stashes, prune remote branches
6. **Verify** - All changes committed AND pushed
7. **Hand off** - Provide context for next session
**CRITICAL RULES:**
- Work is NOT complete until `git push` succeeds
- NEVER stop before pushing - that leaves work stranded locally
- NEVER say "ready to push when you are" - YOU must push
- If push fails, resolve and retry until it succeeds
<!-- END BEADS INTEGRATION -->
## Build & Test
_Add your build and test commands here_
```bash
# Example:
# npm install
# npm test
```
## Architecture Overview
_Add a brief overview of your project architecture_
## Conventions & Patterns
_Add your project-specific conventions here_

View File

@@ -12,10 +12,21 @@ A custom Nix overlay and flake providing additional packages not found in upstre
| Package | Description | Category |
|---------|-------------|----------|
| `aionui` | Free, open-source, Cowork app with AI Agents | AI Coding Agents |
| `container-use` | Containerized environments for coding agents | AI Coding Agents |
| `goose-cli` | CLI for Goose - a local, extensible, open source AI agent that automates engineering tasks | AI Coding Agents |
| `desloppify` | Multi-language codebase health scanner and technical debt tracker for AI agents | AI Coding Agents |
| `ds4` | DeepSeek 4 Flash and PRO local inference engine for ROCm (Strix Halo) | AI Inference |
| `freebuff` | The world's strongest free coding agent | AI Coding Agents |
| `graphify` | Turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph | AI Coding Agents |
| `hipengine` | ROCm-native local LLM inference engine with torch-free runtime for AMD RDNA GPUs | AI Inference |
| `mcp-gateway` | Universal Model Context Protocol gateway that sits between AI client and MCP tools/servers | MCP Servers |
| `skillsmcp` | MCP server that exposes Agent Skills to AI agents via the Model Context Protocol | MCP Servers |
| `kubernetes-mcp-server` | Model Context Protocol (MCP) server for Kubernetes and OpenShift | MCP Servers |
| `loop` | Corporate messenger for your team | Communication |
| `radar` | Modern Kubernetes visibility — topology, event timeline, service traffic, resource browsing, Helm management, and GitOps support | Kubernetes |
| `omniroute` | Unified AI router with 160+ providers, auto fallback, MCP/A2A, OpenAI-compatible APIs | AI LLM Gateway |
| `relay-free-llm` | RESTful API to route user prompts to various AI model providers with automatic failover and intent-based routing | AI LLM Gateway |
| `stakpak` | DevOps AI agent that generates infrastructure code, debugs Kubernetes, configures CI/CD, and automates deployments | AI Agents |
## Usage
@@ -65,10 +76,10 @@ With flakes enabled:
```bash
# Try a package
nix run git+https://git.millerson.name/alex/millerson-overlay.nix.git#goose-cli
nix run git+https://git.millerson.name/alex/millerson-overlay.nix.git#mcp-gateway
# Install permanently
nix profile install git+https://git.millerson.name/alex/millerson-overlay.nix.git#goose-cli
nix profile install git+https://git.millerson.name/alex/millerson-overlay.nix.git#mcp-gateway
```
## Development
@@ -85,7 +96,7 @@ nix profile install git+https://git.millerson.name/alex/millerson-overlay.nix.gi
nix build .#packages
# Build specific package
nix build .#goose-cli
nix build .#mcp-gateway
# Enter development shell
nix develop
@@ -101,11 +112,23 @@ nix-overlay/
│ ├── default.nix # Binary-cache-friendly overlay
│ └── shared-nixpkgs.nix # Dependency-sharing overlay
├── packages/ # Package definitions
│ ├── aionui/ # AionUi - AI Cowork desktop app
│ ├── container-use/ # Containerized environments for coding agents
│ ├── default/ # Meta-package listing all packages
│ ├── desloppify/ # Codebase health scanner for AI agents
│ ├── ds4/ # DeepSeek V4 Flash/PRO inference engine (ROCm)
│ ├── flake-inputs/ # Utility for caching flake inputs
│ ├── goose-cli/ # Goose AI agent CLI
│ ├── freebuff/ # Free coding agent (Codebuff)
│ ├── graphify/ # Knowledge graph generator for code folders
│ ├── hipengine/ # ROCm-native LLM inference engine for AMD GPUs
│ ├── kubernetes-mcp-server/ # MCP server for Kubernetes and OpenShift
│ ├── loop/ # Corporate messenger for your team
│ ├── mcp-gateway/ # MCP protocol gateway
── skillsmcp/ # MCP server for Agent Skills
── omniroute/ # Unified AI router with 160+ providers
│ ├── radar/ # Kubernetes UI (topology, timeline, Helm, GitOps)
│ ├── relay-free-llm/ # AI model provider routing gateway
│ ├── skillsmcp/ # MCP server for Agent Skills
│ └── stakpak/ # DevOps AI agent for infrastructure automation
└── README.md
```

View File

@@ -1,10 +1,6 @@
{
description = "Various packages for Nix";
nixConfig = {
extra-substituters = [ "https://cache.nixos.org" ];
};
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
systems.url = "github:nix-systems/default";
@@ -33,28 +29,14 @@
};
outputs =
inputs:
{ self, ... }@inputs:
let
blueprintOutputs = inputs.blueprint {
inherit inputs;
nixpkgs.config.allowUnfree = true;
};
extraPackages = inputs.nixpkgs.lib.genAttrs (builtins.attrNames blueprintOutputs.packages) (
system:
let
pkgs = inputs.nixpkgs.legacyPackages.${system};
in
{
container-use = pkgs.callPackage ./packages/container-use/package.nix { };
}
);
in
blueprintOutputs
// {
packages = inputs.nixpkgs.lib.recursiveUpdate blueprintOutputs.packages extraPackages;
overlays = {
default = import ./overlays {
inherit (blueprintOutputs) packages;
@@ -63,5 +45,9 @@
inherit (blueprintOutputs) mkPackagesFor;
};
};
nixosModules.default = {
nixpkgs.overlays = [ self.overlays.default ];
};
};
}

View File

@@ -2,5 +2,9 @@
packages,
}:
final: _prev: {
millerson-nix-overlay = packages.${final.stdenv.hostPlatform.system} or { };
millerson-nix-overlay =
packages.${final.stdenv.hostPlatform.system}
or (final.lib.warn "millerson-overlay: no packages for system ${final.stdenv.hostPlatform.system}"
{ }
);
}

View File

@@ -0,0 +1,5 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix { }

230
packages/aionui/package.nix Normal file
View File

@@ -0,0 +1,230 @@
{
lib,
stdenv,
fetchFromGitHub,
bun,
nodejs,
node-gyp,
electron,
autoPatchelfHook,
makeWrapper,
copyDesktopItems,
imagemagick,
python3,
cacert,
}:
let
version = "2.1.4";
src = fetchFromGitHub {
owner = "iOfficeAI";
repo = "AionUi";
rev = "v${version}";
hash = "sha256-A7dKGEuo5n+M7D9fJR3TN95q1P7En/ulsTO+ev6SAUY=";
};
# FOD 1: All dependencies (dev + prod) for the build phase.
bunBuildDeps = stdenv.mkDerivation {
name = "aionui-build-deps-${version}";
inherit src;
nativeBuildInputs = [
bun
cacert
];
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-Fuj55vxDgpx5A4iwnU/5IZKPfaYMH3DeZ1yauuZHn8g=";
dontPatchShebangs = true;
dontFixup = true;
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
buildPhase = ''
export HOME=$TMPDIR
bun install --frozen-lockfile --ignore-scripts
'';
installPhase = ''
mkdir -p $out
cp -r node_modules $out/
cp -r packages $out/
cp tsconfig.json $out/
'';
};
# FOD 2: Production-only dependencies for the runtime output.
# Mirrors the Dockerfile's `bun install --production --ignore-scripts`.
bunProdDeps = stdenv.mkDerivation {
name = "aionui-prod-deps-${version}";
inherit src;
nativeBuildInputs = [
bun
cacert
];
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-eCQ9ObhttZ10CehRRvl4IaOKkdK9m1TQJuhLmhiMkBY=";
dontPatchShebangs = true;
dontFixup = true;
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
buildPhase = ''
export HOME=$TMPDIR
bun install --frozen-lockfile --production --ignore-scripts
'';
installPhase = ''
mkdir -p $out
cp -r node_modules $out/
'';
};
in
stdenv.mkDerivation rec {
pname = "aionui";
inherit version src;
nativeBuildInputs = [
bun
nodejs
node-gyp
autoPatchelfHook
makeWrapper
copyDesktopItems
imagemagick
python3
];
buildInputs = [
stdenv.cc.cc.lib
];
buildPhase = ''
runHook preBuild
export HOME=$TMPDIR
# Use the full dependency set for the build
ln -sf ${bunBuildDeps}/node_modules .
# Build better-sqlite3 native addon
echo "Building better-sqlite3 from source..."
BT3_SRC=$TMPDIR/bts3-src
BT3_OUT=$TMPDIR/bts3-out
mkdir -p "$BT3_SRC" "$BT3_OUT"
cp -rL node_modules/better-sqlite3/* "$BT3_SRC/"
chmod -R u+w "$BT3_SRC"
(
cd "$BT3_SRC"
export npm_config_nodedir=${nodejs}
node-gyp rebuild
mkdir -p "$BT3_OUT/build/Release"
cp build/Release/better_sqlite3.node "$BT3_OUT/build/Release/" 2>/dev/null || true
)
# electron-vite build
echo "Running electron-vite build..."
${nodejs}/bin/node node_modules/.bin/electron-vite build \
--config packages/desktop/electron.vite.config.ts
# Bundle MCP servers
echo "Building MCP servers..."
${nodejs}/bin/node scripts/build-mcp-servers.js
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,lib/aionui}
# Built output
cp -r out $out/lib/aionui/
cp -r public $out/lib/aionui/
cp package.json $out/lib/aionui/
# Production-only node_modules (mirrors Dockerfile)
cp -a ${bunProdDeps}/node_modules $out/lib/aionui/node_modules
chmod -R u+w $out/lib/aionui/node_modules
# Remove workspace symlink @aionui/web-host is bundled by
# electron-vite (excluded from externalizeDepsPlugin), so the
# symlink to packages/web-host is not needed at runtime.
rm -f $out/lib/aionui/node_modules/@aionui/web-host
# @sentry/electron requires @sentry/node at runtime, but bun
# nests it inside .bun/ rather than hoisting to top-level.
# Electron's require() walks up from the resolved realpath
# and needs it accessible either at top-level or via the
# symlink target's node_modules. We ensure top-level access.
if [ ! -e $out/lib/aionui/node_modules/@sentry/node ]; then
SRC=$(echo $out/lib/aionui/node_modules/.bun/@sentry+node@*/node_modules/@sentry/node)
if [ -d "$SRC" ]; then
ln -sf "$(realpath --relative-to=$out/lib/aionui/node_modules/@sentry "$SRC")" \
$out/lib/aionui/node_modules/@sentry/node
fi
fi
# Inject compiled better-sqlite3 .node into the runtime tree
if [ -f "$TMPDIR/bts3-out/build/Release/better_sqlite3.node" ]; then
rm -rf $out/lib/aionui/node_modules/better-sqlite3
cp -rL ${bunProdDeps}/node_modules/better-sqlite3 $out/lib/aionui/node_modules/better-sqlite3 2>/dev/null || true
chmod -R u+w $out/lib/aionui/node_modules/better-sqlite3
mkdir -p $out/lib/aionui/node_modules/better-sqlite3/build/Release
cp "$TMPDIR/bts3-out/build/Release/better_sqlite3.node" \
$out/lib/aionui/node_modules/better-sqlite3/build/Release/
fi
# Desktop entry
mkdir -p $out/share/applications
cat > $out/share/applications/aionui.desktop << EOF
[Desktop Entry]
Name=AionUi
Comment=Free, open-source Cowork app with AI Agents
Exec=$out/bin/aionui
Icon=aionui
Terminal=false
Type=Application
Categories=Office;Utility;
EOF
mkdir -p $out/share/icons/hicolor/256x256/apps
if [ -f resources/app.png ]; then
convert resources/app.png -resize 256x256 \
$out/share/icons/hicolor/256x256/apps/aionui.png
fi
# Launcher
makeWrapper ${electron}/bin/electron $out/bin/aionui \
--add-flags "$out/lib/aionui"
runHook postInstall
'';
dontStrip = true;
autoPatchelfIgnoreMissingDeps = true;
desktopItems = [ "aionui.desktop" ];
doCheck = false;
passthru = {
category = "AI Coding Agents";
updateScript = [
"nix-update"
"--flake"
".#aionui"
];
};
meta = with lib; {
description = "Free, open-source, Cowork app with AI Agents";
homepage = "https://github.com/iOfficeAI/AionUi";
changelog = "https://github.com/iOfficeAI/AionUi/releases/tag/v${version}";
license = licenses.asl20;
sourceProvenance = with sourceTypes; [ fromSource ];
mainProgram = "aionui";
platforms = platforms.linux;
};
}

View File

@@ -21,6 +21,8 @@ buildGoModule rec {
subPackages = [ "cmd/container-use" ];
# Tests require network access to container registries and a running
# Docker engine, neither of which are available in the Nix sandbox
doCheck = false;
postInstall = ''
@@ -31,12 +33,21 @@ buildGoModule rec {
"-s -w -X main.version=v${version}"
];
meta = with lib; {
passthru = {
category = "AI Coding Agents";
updateScript = [
"nix-update"
"--flake"
".#container-use"
];
};
meta = {
description = "Containerized environments for coding agents";
homepage = "https://github.com/dagger/container-use";
changelog = "https://github.com/dagger/container-use/releases/tag/v${version}";
license = licenses.asl20;
license = lib.licenses.asl20;
mainProgram = "container-use";
platforms = platforms.linux ++ platforms.darwin;
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}

View File

@@ -15,5 +15,7 @@ let
packageLines = map (name: "${name}\t${allPackages.${name}.meta.description or ""}") visibleNames;
packageList = builtins.concatStringsSep "\n" packageLines;
flakeUrl = "git+https://git.millerson.name/alex/millerson-overlay.nix.git";
in
pkgs.callPackage ./package.nix { inherit packageList; }
pkgs.callPackage ./package.nix { inherit packageList flakeUrl; }

View File

@@ -5,6 +5,7 @@
nix,
util-linux,
packageList,
flakeUrl,
}:
let
@@ -43,15 +44,15 @@ writeShellApplication {
exit 0
fi
echo " Running: nix run git.millerson.name/alex/nix-overlay.git#$pkg_name"
exec nix run "git.millerson.name/alex/nix-overlay.git#$pkg_name"
echo " Running: nix run ${flakeUrl}#$pkg_name"
exec nix run "${flakeUrl}#$pkg_name"
'';
meta = with lib; {
meta = {
description = "Interactive fzf launcher for millerson-overlay.nix packages";
license = licenses.mit;
license = lib.licenses.mit;
mainProgram = "millerson-overlay-launcher";
platforms = platforms.all;
platforms = lib.platforms.all;
};
passthru = {

View File

@@ -0,0 +1 @@
{ pkgs, ... }: pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,54 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "desloppify";
version = "0.9.15";
pyproject = true;
src = fetchFromGitHub {
owner = "peteromallet";
repo = "desloppify";
rev = "v${version}";
hash = "sha256-KVCt9loGSzsOaYSLNzpyUCi/TpCDQ4b6BxEydQTRNcA=";
};
build-system = with python3Packages; [
setuptools
];
# Include all [full] optional dependencies for complete functionality.
# Upstream has no base dependencies - all features are behind optional extras.
dependencies = with python3Packages; [
tree-sitter
tree-sitter-language-pack
defusedxml
bandit
pillow
pyyaml
];
doCheck = false;
pythonImportsCheck = [ "desloppify" ];
passthru = {
category = "AI Coding Agents";
updateScript = [
"nix-update"
"--flake"
".#desloppify"
];
};
meta = {
description = "Multi-language codebase health scanner and technical debt tracker for AI agents";
homepage = "https://github.com/peteromallet/desloppify";
changelog = "https://github.com/peteromallet/desloppify/releases/tag/v${version}";
license = lib.licenses.unfreeRedistributable;
mainProgram = "desloppify";
platforms = lib.platforms.all;
};
}

2
packages/ds4/default.nix Normal file
View File

@@ -0,0 +1,2 @@
{ pkgs, ... }:
pkgs.callPackage ./package.nix { }

102
packages/ds4/package.nix Normal file
View File

@@ -0,0 +1,102 @@
{
lib,
stdenv,
fetchFromGitHub,
gnumake,
rocmPackages,
autoPatchelfHook,
}:
stdenv.mkDerivation {
pname = "ds4";
version = "0-unstable-2026-06-17";
src = fetchFromGitHub {
owner = "antirez";
repo = "ds4";
rev = "80ebbc396aee40eedc1d829222f3362d10fa4c6c";
hash = "sha256-Ieuc72GHZs20ModQfnvI5Me31n4Pj+WFYtsuqaKJceo=";
};
nativeBuildInputs = [
gnumake
rocmPackages.hipcc
autoPatchelfHook
];
buildInputs = [
rocmPackages.clr
rocmPackages.hipblas
rocmPackages.hipblas-common
rocmPackages.hipblaslt
rocmPackages.hipcub
rocmPackages.rocblas
rocmPackages.rocprim
rocmPackages.rocwmma
];
# STRIXHALO.md: rocwmma/internal/ headers may be missing in distro packages.
# nixpkgs builds rocwmma from source so all headers (including internal/) are present.
# ROCM_ARCH defaults to gfx1151 (Strix Halo / Radeon 8060S) in the upstream Makefile.
buildPhase = ''
runHook preBuild
make strix-halo -j"$NIX_BUILD_CORES" \
HIPCC="${rocmPackages.hipcc}/bin/hipcc" \
ROCM_CFLAGS="-O3 -ffast-math -g -fno-finite-math-only -pthread -D__HIP_PLATFORM_AMD__ -Wno-unused-command-line-argument --offload-arch=gfx1151 \
-I${rocmPackages.clr}/include \
-I${rocmPackages.hipblas}/include \
-I${rocmPackages.hipblas-common}/include \
-I${rocmPackages.hipblaslt}/include \
-I${rocmPackages.hipcub}/include \
-I${rocmPackages.rocblas}/include \
-I${rocmPackages.rocprim}/include \
-I${rocmPackages.rocwmma}/include" \
ROCM_LDLIBS="-lm -pthread \
-L${rocmPackages.hipblas}/lib -lhipblas \
-L${rocmPackages.hipblaslt}/lib -lhipblaslt \
-L${rocmPackages.rocblas}/lib -lrocblas \
-L${rocmPackages.clr}/lib -lamdhip64"
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp ds4 ds4-server ds4-bench ds4-eval ds4-agent $out/bin/
runHook postInstall
'';
passthru = {
category = "AI Inference";
updateScript = [
"nix-update"
"--flake"
"--version=branch=main"
".#ds4"
];
};
meta = {
description = "DeepSeek 4 Flash and PRO local inference engine for ROCm (Strix Halo)";
longDescription = ''
DS4 is a self-contained local inference engine specifically built for
DeepSeek V4 Flash and PRO. It bundles a CLI, HTTP server, and native
coding agent. This package is built with the ROCm backend for AMD
Strix Halo GPUs (gfx1151, Radeon 8060S).
Runtime requirements (from STRIXHALO.md):
- User must be in 'render' and 'video' groups for /dev/kfd and DRM access
- GPU-visible memory must be increased via kernel parameters:
amd_iommu=off amdgpu.gttsize=126976 ttm.pages_limit=32505856 ttm.page_pool_size=32505856
'';
homepage = "https://github.com/antirez/ds4";
changelog = "https://github.com/antirez/ds4/commits/main";
license = lib.licenses.mit;
platforms = [ "x86_64-linux" ];
mainProgram = "ds4";
};
}

View File

@@ -4,8 +4,11 @@
...
}:
# A derivation that references all flake inputs to ensure they get cached
let
inputsList = pkgs.lib.concatMapStringsSep " " (name: inputs.${name}) (builtins.attrNames inputs);
in
pkgs.runCommand "flake-inputs" { } ''
echo ${pkgs.lib.concatMapStringsSep " " (name: inputs.${name}) (builtins.attrNames inputs)} > $out
cat ${builtins.toFile "flake-inputs-list" inputsList} > $out
''
// {
passthru.hideFromDocs = true;

View File

@@ -0,0 +1 @@
{ pkgs, ... }: pkgs.callPackage ./package.nix { glibc = pkgs.stdenv.cc.libc; }

View File

@@ -0,0 +1,153 @@
{
lib,
stdenv,
fetchurl,
nodejs,
makeWrapper,
patchelf,
glibc,
}:
let
version = "0.0.85";
freebuffSrc = fetchurl {
url = "https://registry.npmjs.org/freebuff/-/freebuff-${version}.tgz";
hash = "sha256-1x593yLMkoFIO5O+k5NKeEpi729VhINQlW1xFbYGnXM=";
};
pkgTar = fetchurl {
url = "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz";
hash = "sha256-hl60jJtM1W2THQyGZj8G72GEG8QvVrHvNnr7EU1liBw=";
};
pkgFsMinipass = fetchurl {
url = "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz";
hash = "sha256-esKG48zMHqiYDnniA53va7l9MYLheVHNkJTwQA7ZgjY=";
};
pkgChownr = fetchurl {
url = "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz";
hash = "sha256-TCT12qYwFCJS2oneZV998JDqR5RQqIJYl3UdeDIbE2A=";
};
pkgMinipass = fetchurl {
url = "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz";
hash = "sha256-UqxhvnQ3VeP9yY5WAIbQ1KHix/02Qzh3kts44yLSfRI=";
};
pkgMinizlib = fetchurl {
url = "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz";
hash = "sha256-mb8uKWGBct1x8GVHN0kMaPcbx+I3nUc+OPn+8tvs4uM=";
};
pkgYallist = fetchurl {
url = "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz";
hash = "sha256-fJ1D26t8qzsxM7Dmpa8UAUSCKFMWs57J9QjvrdnrzpU=";
};
binarySrc = fetchurl {
url = "https://codebuff.com/api/releases/download/${version}/freebuff-linux-x64.tar.gz";
hash = "sha256-WRTEXqKDww4ZPAnDLAAkAd0jxl+z6+dRbcQORmN7QfM=";
};
in
stdenv.mkDerivation rec {
pname = "freebuff";
version = "0.0.85";
src = freebuffSrc;
nativeBuildInputs = [
makeWrapper
patchelf
];
dontStrip = true;
dontPatchelf = true;
installPhase = ''
runHook preInstall
# Extract and patch the pre-built binary for NixOS compatibility
mkdir -p "$out/bin" /tmp/fb-engine
tar xzf "${binarySrc}" -C /tmp/fb-engine --strip-components=0
cp /tmp/fb-engine/freebuff "$out/bin/freebuff-engine"
chmod 755 "$out/bin/freebuff-engine"
patchelf \
--set-interpreter "${glibc}/lib/ld-linux-x86-64.so.2" \
--set-rpath "${glibc}/lib:" \
"$out/bin/freebuff-engine"
if [ -f /tmp/fb-engine/tree-sitter.wasm ]; then
cp /tmp/fb-engine/tree-sitter.wasm "$out/bin/"
fi
rm -rf /tmp/fb-engine
# Extract npm dependencies from pre-fetched tarballs
extractNpmPkg() {
local src="$1" target="$2"
mkdir -p "$target"
tar xzf "$src" -C "$target" --strip-components=1
}
mkdir -p "$out/lib/node_modules/tar"
mkdir -p "$out/lib/node_modules/chownr"
mkdir -p "$out/lib/node_modules/minipass"
mkdir -p "$out/lib/node_modules/minizlib"
mkdir -p "$out/lib/node_modules/yallist"
mkdir -p "$out/lib/node_modules/@isaacs/fs-minipass"
extractNpmPkg "${pkgTar}" "$out/lib/node_modules/tar"
extractNpmPkg "${pkgChownr}" "$out/lib/node_modules/chownr"
extractNpmPkg "${pkgMinipass}" "$out/lib/node_modules/minipass"
extractNpmPkg "${pkgMinizlib}" "$out/lib/node_modules/minizlib"
extractNpmPkg "${pkgYallist}" "$out/lib/node_modules/yallist"
extractNpmPkg "${pkgFsMinipass}" "$out/lib/node_modules/@isaacs/fs-minipass"
# Launcher: run the patched engine directly from nix-store
cat > "$out/bin/launcher.js" << LAUNCHER_EOF
#!/usr/bin/env node
const { spawn } = require('child_process');
const TERMINAL_RESET = '\x1b[?1049l\x1b[?1000l\x1b[?1002l\x1b[?1003l\x1b[?1006l\x1b[?2004l\x1b[?25h';
const engine = '${placeholder "out"}/bin/freebuff-engine';
function reset() {
try { if (process.stdin.isTTY && process.stdin.setRawMode) process.stdin.setRawMode(false); } catch(e){}
try { if (process.stdout.isTTY) process.stdout.write(TERMINAL_RESET); } catch(e){}
}
const child = spawn(engine, process.argv.slice(2), { stdio: 'inherit' });
child.on('exit', (code, signal) => { reset(); process.exit(signal ? 1 : code || 0); });
child.on('error', (e) => { console.error('Failed to start freebuff:', e.message); process.exit(1); });
LAUNCHER_EOF
makeWrapper "${nodejs}/bin/node" "$out/bin/freebuff" \
--set NODE_PATH "$out/lib/node_modules" \
--add-flags "$out/bin/launcher.js"
runHook postInstall
'';
doCheck = false;
passthru = {
category = "AI Coding Agents";
updateScript = [
"nix-update"
"--flake"
".#freebuff"
];
};
meta = with lib; {
description = "The world's strongest free coding agent";
homepage = "https://codebuff.com";
license = licenses.mit;
mainProgram = "freebuff";
platforms = platforms.linux;
};
}

View File

@@ -1,9 +0,0 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix {
librusty_v8 = pkgs.callPackage ./librusty_v8.nix {
inherit (pkgs.callPackage ./fetchers.nix { }) fetchLibrustyV8;
};
}

View File

@@ -1,21 +0,0 @@
# Fetchers for goose-cli pre-built dependencies
# Based on deno's approach for handling rusty_v8
{
lib,
stdenv,
fetchurl,
}:
{
fetchLibrustyV8 =
args:
fetchurl {
name = "librusty_v8-${args.version}";
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a.gz";
sha256 = args.shas.${stdenv.hostPlatform.system};
meta = {
inherit (args) version;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
};
}

View File

@@ -1,13 +0,0 @@
# Pre-built librusty_v8 library for goose-cli
# This file specifies the rusty_v8 version and hashes for all supported platforms
{ fetchLibrustyV8 }:
fetchLibrustyV8 {
version = "145.0.0";
shas = {
x86_64-linux = "sha256-chV1PAx40UH3Ute5k3lLrgfhih39Rm3KqE+mTna6ysE=";
aarch64-linux = "sha256-4IivYskhUSsMLZY97+g23UtUYh4p5jk7CzhMbMyqXyY=";
x86_64-darwin = "sha256-1jUuC+z7saQfPYILNyRJanD4+zOOhXU2ac/LFoytwho=";
aarch64-darwin = "sha256-yHa1eydVCrfYGgrZANbzgmmf25p7ui1VMas2A7BhG6k=";
};
}

View File

@@ -1,79 +0,0 @@
{
lib,
fetchFromGitHub,
rustPlatform,
pkg-config,
openssl,
libxcb,
dbus,
versionCheckHook,
librusty_v8,
llvmPackages,
}:
rustPlatform.buildRustPackage rec {
pname = "goose-cli";
version = "1.33.1";
src = fetchFromGitHub {
owner = "block";
repo = "goose";
rev = "v${version}";
hash = "sha256-FBICGOfVs2jbOdLWSInqfTYBdnCcbcGWHwqY/b6v8eg=";
};
cargoHash = "sha256-fN0FKDYFkZrQQPWdUlemOaGzIAZhqFyskz9TEmG+X4o=";
nativeBuildInputs = [
pkg-config
llvmPackages.libclang
];
buildInputs = [
openssl
libxcb
dbus
];
# The v8 package will try to download a `librusty_v8.a` release at build time to our read-only filesystem
# To avoid this we pre-download the file and export it via RUSTY_V8_ARCHIVE
env.RUSTY_V8_ARCHIVE = librusty_v8;
# bindgen (used by llama-cpp-sys-2) needs libclang
env.LIBCLANG_PATH = llvmPackages.libclang.lib;
# Build only the CLI package
cargoBuildFlags = [
"--package"
"goose-cli"
];
# Enable tests with proper environment
doCheck = true;
checkPhase = ''
export HOME=$(mktemp -d)
export XDG_CONFIG_HOME=$HOME/.config
export XDG_DATA_HOME=$HOME/.local/share
export XDG_STATE_HOME=$HOME/.local/state
export XDG_CACHE_HOME=$HOME/.cache
mkdir -p $XDG_CONFIG_HOME $XDG_DATA_HOME $XDG_STATE_HOME $XDG_CACHE_HOME
# Run tests for goose-cli package only
cargo test --package goose-cli --release
'';
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
passthru.category = "AI Coding Agents";
meta = with lib; {
description = "CLI for Goose - a local, extensible, open source AI agent that automates engineering tasks";
homepage = "https://github.com/block/goose";
changelog = "https://github.com/block/goose/releases/tag/v${version}";
license = licenses.asl20;
sourceProvenance = with sourceTypes; [ fromSource ];
mainProgram = "goose";
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,5 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,83 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "graphify";
version = "0.7.10";
pyproject = true;
src = fetchFromGitHub {
owner = "safishamsi";
repo = "graphify";
rev = "v${version}";
hash = "sha256-sSlmYPDwY43ro+kd5uQyvE9cEPNAMXUd5TIEPcaoioc=";
};
build-system = with python3Packages; [
setuptools
];
# Only tree-sitter grammars available in nixpkgs are included.
# Missing grammars will be downloaded by tree-sitter at runtime on demand.
dependencies = with python3Packages; [
networkx
datasketch
rapidfuzz
tree-sitter
tree-sitter-python
tree-sitter-javascript
tree-sitter-rust
tree-sitter-c-sharp
tree-sitter-sql
];
# Remove unavailable tree-sitter grammars from pyproject.toml
postPatch = ''
sed -i \
-e '/"tree-sitter-typescript"/d' \
-e '/"tree-sitter-go"/d' \
-e '/"tree-sitter-java"/d' \
-e '/"tree-sitter-groovy"/d' \
-e '/"tree-sitter-c"/d' \
-e '/"tree-sitter-cpp"/d' \
-e '/"tree-sitter-ruby"/d' \
-e '/"tree-sitter-kotlin"/d' \
-e '/"tree-sitter-scala"/d' \
-e '/"tree-sitter-php"/d' \
-e '/"tree-sitter-swift"/d' \
-e '/"tree-sitter-lua"/d' \
-e '/"tree-sitter-zig"/d' \
-e '/"tree-sitter-powershell"/d' \
-e '/"tree-sitter-elixir"/d' \
-e '/"tree-sitter-objc"/d' \
-e '/"tree-sitter-julia"/d' \
-e '/"tree-sitter-verilog"/d' \
-e '/"tree-sitter-fortran"/d' \
pyproject.toml
'';
doCheck = false;
pythonImportsCheck = [ "graphify" ];
passthru = {
category = "AI Coding Agents";
updateScript = [
"nix-update"
"--flake"
".#graphify"
"--version=branch=main"
];
};
meta = {
description = "AI coding assistant skill - turn any folder of code, docs, papers, images, or videos into a queryable knowledge graph";
homepage = "https://github.com/safishamsi/graphify";
changelog = "https://github.com/safishamsi/graphify/releases/tag/v${version}";
license = lib.licenses.mit;
mainProgram = "graphify";
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,2 @@
{ pkgs, ... }:
pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,52 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
pname = "hipengine";
version = "0.2.2";
pyproject = true;
src = fetchFromGitHub {
owner = "shisa-ai";
repo = "hipEngine";
rev = "v${version}";
hash = "sha256-ljgXDQfUTx64i1+yAKFE13GkcE9AE+1YICfSScQ9nuA=";
};
build-system = with python3Packages; [
hatchling
];
dependencies = with python3Packages; [
fastapi
jinja2
numpy
safetensors
tokenizers
uvicorn
];
doCheck = false;
pythonImportsCheck = [ "hipengine" ];
passthru = {
category = "AI Inference";
updateScript = [
"nix-update"
"--flake"
".#hipengine"
];
};
meta = {
description = "ROCm-native local LLM inference engine with a torch-free runtime hot path for AMD RDNA GPUs";
homepage = "https://github.com/shisa-ai/hipEngine";
changelog = "https://github.com/shisa-ai/hipEngine/releases/tag/v${version}";
license = lib.licenses.agpl3Plus;
platforms = lib.platforms.linux;
mainProgram = "hipengine-server";
};
}

View File

@@ -0,0 +1 @@
{ pkgs, ... }: pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,50 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "kubernetes-mcp-server";
version = "0.0.62";
src = fetchFromGitHub {
owner = "containers";
repo = "kubernetes-mcp-server";
rev = "v${version}";
hash = "sha256-m4oM8KMcDmXwIGaFw+VdnW22kLjt2SaD7qZV4kgTiu8=";
};
vendorHash = "sha256-JNeYn/IfzQ2VLDbHgrkserh3wrXYOWXBczBn2DUO6NM=";
env.CGO_ENABLED = 0;
subPackages = [ "cmd/kubernetes-mcp-server" ];
# Tests require access to a live Kubernetes cluster
doCheck = false;
ldflags = [
"-s"
"-w"
];
passthru = {
category = "MCP Servers";
updateScript = [
"nix-update"
"--flake"
".#kubernetes-mcp-server"
];
};
meta = with lib; {
description = "Model Context Protocol (MCP) server for Kubernetes and OpenShift";
homepage = "https://github.com/containers/kubernetes-mcp-server";
changelog = "https://github.com/containers/kubernetes-mcp-server/releases/tag/v${version}";
license = licenses.asl20;
sourceProvenance = with sourceTypes; [ fromSource ];
mainProgram = "kubernetes-mcp-server";
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,2 @@
{ pkgs, ... }:
pkgs.callPackage ./package.nix { }

56
packages/loop/package.nix Normal file
View File

@@ -0,0 +1,56 @@
{
lib,
appimageTools,
fetchurl,
}:
let
version = "6.0.3";
src = fetchurl {
url = "https://artifacts.wilix.dev/repository/loop-files/loop-${version}/loop-desktop-${version}-linux-x86_64.AppImage";
hash = "sha256-zGWKlY6XwuL0e2mDpB/1t0UnW73bhCPcg6XkBJBCEFY=";
};
appimageContents = appimageTools.extractType2 {
pname = "loop";
inherit version src;
};
in
appimageTools.wrapType2 {
pname = "loop";
inherit version src;
extraPkgs = pkgsWith: [
pkgsWith.gtk3
pkgsWith.glib
];
extraInstallCommands = ''
mkdir -p $out/share/applications
install -m 444 ${appimageContents}/loop-desktop.desktop $out/share/applications/loop.desktop
substituteInPlace $out/share/applications/loop.desktop \
--replace-fail 'Exec=AppRun %U' 'Exec=loop %U'
mkdir -p $out/share/icons/hicolor
cp -r ${appimageContents}/usr/share/icons/hicolor/* $out/share/icons/hicolor/
'';
passthru = {
category = "Communication";
updateScript = [
"nix-update"
"--flake"
".#loop"
];
};
meta = {
description = "Corporate messenger for your team";
homepage = "https://loop.ru";
license = lib.licenses.unfree;
maintainers = [ ];
platforms = [ "x86_64-linux" ];
mainProgram = "loop";
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
};
}

View File

@@ -0,0 +1,5 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,88 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
fetchurl,
nodejs_22,
makeBinaryWrapper,
}:
let
version = "3.8.28";
npmTarball = fetchurl {
url = "https://registry.npmjs.org/omniroute/-/omniroute-${version}.tgz";
hash = "sha256-/le4p5DSX5T7/srNuxVBLepzUPw8BgIVio+h0JnbfyY=";
};
in
buildNpmPackage (finalAttrs: {
pname = "omniroute";
inherit version;
src = fetchFromGitHub {
owner = "diegosouzapw";
repo = "OmniRoute";
rev = "v${finalAttrs.version}";
hash = "sha256-BRvpbhhLTYj2rKw+nZloaXkpu3ySs5sWZo9425xvAPs=";
};
nodejs = nodejs_22;
npmDepsHash = "sha256-Q1KLR3NkeFBB+tQzBazy+XWyIfpG8Magv+rdeqISNxw=";
# Skip Next.js build (requires network for Google Fonts).
# Pre-built dist/ is copied from the npm tarball in preConfigure.
dontNpmBuild = true;
nativeBuildInputs = [
makeBinaryWrapper
];
npmInstallFlags = [ "--ignore-scripts" ];
npmRebuildFlags = [ "--ignore-scripts" ];
env = {
HOME = "$TMPDIR";
};
preConfigure = ''
mkdir -p _npm_tmp
tar xzf ${npmTarball} -C _npm_tmp
cp -r _npm_tmp/package/dist .
rm -rf _npm_tmp
'';
installPhase = ''
runHook preInstall
mkdir -p $out/lib/node_modules/omniroute
cp -r . $out/lib/node_modules/omniroute/
mkdir -p $out/bin
makeWrapper "${nodejs_22}/bin/node" "$out/bin/omniroute" \
--add-flags "$out/lib/node_modules/omniroute/bin/omniroute.mjs"
makeWrapper "${nodejs_22}/bin/node" "$out/bin/omniroute-reset-password" \
--add-flags "$out/lib/node_modules/omniroute/bin/reset-password.mjs"
runHook postInstall
'';
passthru = {
category = "AI LLM Gateway";
updateScript = [
"nix-update"
"--flake"
".#omniroute"
];
};
meta = {
description = "Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, OpenAI-compatible APIs";
homepage = "https://github.com/diegosouzapw/OmniRoute";
changelog = "https://github.com/diegosouzapw/OmniRoute/releases/tag/v${finalAttrs.version}";
license = lib.licenses.mit;
mainProgram = "omniroute";
platforms = lib.platforms.all;
};
})

View File

@@ -0,0 +1,5 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix { }

123
packages/radar/package.nix Normal file
View File

@@ -0,0 +1,123 @@
{
lib,
buildGoModule,
buildNpmPackage,
fetchFromGitHub,
}:
let
version = "1.6.1";
src = fetchFromGitHub {
owner = "skyhook-io";
repo = "radar";
rev = "v${version}";
hash = "sha256-vctvMD7sca7HgEM1ufnUClhc04ucnvl3Zx4jTfaAzyE=";
};
# Build the frontend as a separate derivation.
# The lockfile has some workspace packages without resolved URLs,
# so we patch them in postPatch before fetching dependencies.
frontend = buildNpmPackage {
pname = "radar-frontend";
inherit version src;
sourceRoot = "source";
postPatch = ''
# Fix missing resolved URLs for packages under web/node_modules/
# WARNING: This sed is version-specific if upstream bumps a
# transitive dep version, the patterns silently fail and the
# build breaks. Update resolved/integrity values when bumping radar.
# that are actually external npm packages (not workspace links).
# Insert "resolved" and "integrity" after the "version" field
# for each affected package using sed.
sed -i \
-e '/"web\/node_modules\/@vitejs\/plugin-react"/,/^[[:space:]]*}/{
/"version"/a\
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz",\
"integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==",
}' \
-e '/"web\/node_modules\/@rolldown\/pluginutils"/,/^[[:space:]]*}/{
/"version"/a\
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz",\
"integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==",
}' \
-e '/"web\/node_modules\/@types\/diff"/,/^[[:space:]]*}/{
/"version"/a\
"resolved": "https://registry.npmjs.org/@types/diff/-/diff-8.0.0.tgz",\
"integrity": "sha512-o7jqJM04gfaYrdCecCVMbZhNdG6T1MHg/oQoRFdERLV+4d+V7FijhiEAbFu0Usww84Yijk9yH58U4Jk4HbtzZw==",
}' \
package-lock.json
'';
npmDepsHash = "sha256-6t0Q3Xzrk1w8zC00H721o/OzHxNhAfCH7EdRXrKQsAg=";
npmDepsFetcherVersion = 2;
makeCacheWritable = true;
doCheck = false;
# Build the web workspace and install its output
buildPhase = ''
runHook preBuild
cd web
HOME=$TMPDIR ../node_modules/.bin/vite build
cd ..
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r web/dist/* $out/
runHook postInstall
'';
};
in
buildGoModule {
pname = "radar";
inherit version src;
vendorHash = "sha256-vhp0dNPKTOg2NUVD5QoLuTnCumdwzDypvh/rUEhGbL4=";
# Copy pre-built frontend assets before Go compilation for go:embed
preBuild = ''
mkdir -p internal/static/dist
cp -r ${frontend}/* internal/static/dist/
'';
env.CGO_ENABLED = 0;
ldflags = [
"-s"
"-w"
"-X main.version=v${version}"
];
subPackages = [ "cmd/explorer" ];
doCheck = false;
postInstall = ''
ln -s $out/bin/explorer $out/bin/radar
'';
passthru = {
category = "Kubernetes";
inherit frontend;
updateScript = [
"nix-update"
"--flake"
".#radar"
];
};
meta = with lib; {
description = "Modern Kubernetes visibility topology, event timeline, service traffic, resource browsing, Helm management, and GitOps support";
homepage = "https://github.com/skyhook-io/radar";
changelog = "https://github.com/skyhook-io/radar/releases/tag/v${version}";
license = licenses.asl20;
mainProgram = "radar";
platforms = platforms.linux;
};
}

View File

@@ -0,0 +1,5 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,107 @@
{
lib,
python3Packages,
fetchFromGitHub,
fetchurl,
makeWrapper,
}:
let
cerebras-cloud-sdk = python3Packages.buildPythonPackage rec {
pname = "cerebras-cloud-sdk";
version = "1.67.0";
pyproject = true;
src = fetchurl {
url = "https://files.pythonhosted.org/packages/92/12/c201f07582068141e88f9a523ab02fdc97de58f2f7c0df775c6c52b9d8dd/cerebras_cloud_sdk-1.67.0.tar.gz";
hash = "sha256-Ou1vhsbHqD7p1M+wiirOoInOvyr1uK7RFu95mVpPSBM=";
};
build-system = with python3Packages; [
hatchling
hatch-fancy-pypi-readme
];
postPatch = ''
sed -i 's/hatchling==[0-9.]*/hatchling/' pyproject.toml
'';
dependencies = with python3Packages; [
anyio
distro
httpx
pydantic
sniffio
typing-extensions
];
doCheck = false;
meta = {
description = "Python SDK for Cerebras AI platform";
homepage = "https://github.com/CerebrasAI/cerebras-cloud-sdk-python";
license = lib.licenses.asl20;
};
};
pyDeps = with python3Packages; [
fastapi
uvicorn
google-genai
cerebras-cloud-sdk
groq
mistralai
requests
python-dotenv
pydantic
httpx
];
in
python3Packages.buildPythonApplication {
pname = "relay-free-llm";
version = "0.1.0+unstable";
format = "other";
src = fetchFromGitHub {
owner = "msmarkgu";
repo = "RelayFreeLLM";
rev = "fea9e1642dbbc5c0980885f41b21aa04a30090a2";
hash = "sha256-ZLAVhJFrVFjqAz0f4qOi2REBDccIc8g2H9b7dcqcYRU=";
};
nativeBuildInputs = [ makeWrapper ];
propagatedBuildInputs = pyDeps;
installPhase = ''
runHook preInstall
mkdir -p $out/lib/relay-free-llm
cp -r src $out/lib/relay-free-llm/
runHook postInstall
'';
postInstall = ''
makeWrapper ${python3Packages.python.interpreter} $out/bin/relay-free-llm \
--add-flags "-m src.server" \
--prefix PYTHONPATH : "$out/lib/relay-free-llm:$PYTHONPATH"
'';
doCheck = false;
passthru = {
category = "AI LLM Gateway";
updateScript = [
"nix-update"
"--flake"
".#relay-free-llm"
"--version=branch=main"
];
};
meta = {
description = "RESTful API to route user prompts to various AI model providers";
homepage = "https://github.com/msmarkgu/RelayFreeLLM";
license = lib.licenses.mit;
mainProgram = "relay-free-llm";
platforms = lib.platforms.all;
};
}

View File

@@ -4,9 +4,11 @@
fetchFromGitHub,
}:
python3Packages.buildPythonApplication rec {
python3Packages.buildPythonApplication {
pname = "skillsmcp";
version = "0.2.0";
# Pinned to a commit rather than a release tag because upstream
# has not yet published a tagged release containing all features.
version = "0.2.0+unstable";
pyproject = true;
src = fetchFromGitHub {
@@ -25,17 +27,27 @@ python3Packages.buildPythonApplication rec {
python3Packages.pyyaml
];
# Disable all checks to avoid version issues
# Tests fail due to version-string expectations baked into the upstream
# source (pinned to a commit rather than a release tag). The import
# check below still verifies the module loads correctly.
doCheck = false;
pythonImportsCheck = [ "skillsmcp" ];
passthru.category = "MCP Servers";
passthru = {
category = "MCP Servers";
updateScript = [
"nix-update"
"--flake"
".#skillsmcp"
"--version=branch=main"
];
};
meta = with lib; {
meta = {
description = "MCP server that exposes Agent Skills to AI agents via the Model Context Protocol";
homepage = "https://github.com/aviddiviner/skillsmcp";
license = licenses.mit;
license = lib.licenses.mit;
mainProgram = "skillsmcp";
platforms = platforms.all;
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,5 @@
{
pkgs,
...
}:
pkgs.callPackage ./package.nix { }

View File

@@ -0,0 +1,41 @@
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
openssl,
}:
rustPlatform.buildRustPackage rec {
pname = "stakpak";
version = "0.3.86";
src = fetchFromGitHub {
owner = "stakpak";
repo = "agent";
rev = "v${version}";
hash = "sha256-k8fOgwn1Sh3Yg62ROzfKJym8AGewpZ3/2e3tHNRL7/0=";
};
cargoHash = "sha256-aa1YjyShoSNv9sC18gIx/kuAbxrNAsCE+2if8Rm2uiw=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [
openssl
];
doCheck = false;
passthru.category = "AI Agents";
meta = with lib; {
description = "DevOps AI agent that generates infrastructure code, debugs Kubernetes, configures CI/CD, and automates deployments";
homepage = "https://stakpak.io";
changelog = "https://github.com/stakpak/agent/releases/tag/v${version}";
license = licenses.asl20;
sourceProvenance = with sourceTypes; [ fromSource ];
mainProgram = "stakpak";
platforms = platforms.all;
};
}