From 15bf7a5f995f6320214bfbca7851912a83476a52 Mon Sep 17 00:00:00 2001 From: Jakub Czajka Date: Tue, 7 Jul 2026 18:13:40 +0200 Subject: [PATCH] [home] Add paseo CLI package and services. The paseo daemon spawns Claude Code agents, so CLAUDE_CONFIG_DIR is set in the daemon environment to point to ~/.config/claude/, where the home claude service installs its configuration. This ensures spawned agents find their config without relying on shell init files. --- .gitignore | 2 ++ README | 9 ++++++ conf/home/paseo.scm | 68 +++++++++++++++++++++++++++++++++++++++ home.scm | 1 + scripts/generate-npm-hash | 3 ++ 5 files changed, 83 insertions(+) create mode 100644 conf/home/paseo.scm diff --git a/.gitignore b/.gitignore index 9fcd8f5..889ccf3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .dir-locals.el pi-built-*/ pi-tmp/ +paseo-built-*/ +paseo-tmp/ diff --git a/README b/README index de3ce28..a86d90e 100644 --- a/README +++ b/README @@ -44,6 +44,15 @@ You only need to run this script when bumping the npm package version -- ``guix home reconfigure`` uses the hash baked into the definition and never runs ``npm install`` itself. +Paseo +----- + +Paseo's daemon starts automatically via Shepherd and listens on +127.0.0.1:6767. + +- Pair: run ``paseo`` to get a pairing link (use --qr for a QR code), or + tail the log at ``~/.local/var/log/paseo-daemon.log``. + TODO ---- diff --git a/conf/home/paseo.scm b/conf/home/paseo.scm new file mode 100644 index 0000000..e2add79 --- /dev/null +++ b/conf/home/paseo.scm @@ -0,0 +1,68 @@ +;; Copyright (c) 2026 Jakub Czajka +;; License: GPL-3.0 or later. +;; +;; paseo.scm — package and home service for the Paseo CLI. +;; +;; The hash is produced by scripts/generate-npm-hash: +;; +;; scripts/generate-npm-hash paseo + +(define-module (conf home paseo) + #:use-module (guix packages) + #:use-module (guix gexp) + #:use-module (guix base32) + #:use-module (conf home program) + #:use-module (conf home npm) + #:use-module (gnu home services) + #:use-module (gnu home services shepherd) + #:use-module (gnu services) + #:export (paseo paseo-service paseo-daemon-service)) + +(define paseo + (package + (name "paseo") + (version "0.1.103") + (source + #f) + (build-system npm-install-build-system) + (arguments + (list + #:npm-package "@getpaseo/cli" + #:version "0.1.103" + #:entry "@getpaseo/cli/bin/paseo" + #:hash (nix-base32-string->bytevector + "0bf3ybl22y5p325plzvj053k9l9jbpky48nz0vp2zk71yx13wky6") + #:wrapper-name "paseo")) + (home-page "https://paseo.sh") + (synopsis "CLI for orchestrating AI coding agents") + (description + "Paseo provides a unified CLI interface for Claude Code, +Codex, Copilot, OpenCode, and Pi agents. It can manage multiple +coding agents from desktop and mobile.") + (license #f))) + +(define paseo-service + (service home-program-service-type + (home-program-configuration (packages (list paseo)) + (dotfiles '())))) + +(define paseo-daemon-start + #~(let* ((home (getenv "HOME")) + (prog #$(file-append paseo "/bin/paseo")) + (log (string-append home "/.local/var/log/paseo-daemon.log")) + (env (cons (string-append "CLAUDE_CONFIG_DIR=" home + "/.config/claude") + (default-environment-variables)))) + (make-forkexec-constructor (list prog "daemon" "start" "--foreground") + #:log-file log + #:environment-variables env))) + +(define paseo-daemon-shepherd-service + (shepherd-service (provision '(paseo-daemon)) + (start paseo-daemon-start) + (stop #~(make-kill-destructor)) + (documentation "Shepherd service for the Paseo daemon."))) + +(define paseo-daemon-service + (simple-service 'paseo-daemon-service home-shepherd-service-type + (list paseo-daemon-shepherd-service))) diff --git a/home.scm b/home.scm index 227bb2e..7e848c2 100644 --- a/home.scm +++ b/home.scm @@ -15,6 +15,7 @@ (conf home emacs) (conf home guix) (conf home notify) + (conf home paseo) (conf home pi) (conf home suckless) (gnu packages gnuzilla) diff --git a/scripts/generate-npm-hash b/scripts/generate-npm-hash index 61a0e4a..884f038 100755 --- a/scripts/generate-npm-hash +++ b/scripts/generate-npm-hash @@ -28,6 +28,9 @@ case $name in pi) npm_pkg="@earendil-works/pi-coding-agent" ;; + paseo) + npm_pkg="@getpaseo/cli" + ;; *) echo "Unknown package: $name" >&2 exit 1 -- 2.47.3