# Copyright 2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit systemd unpacker MY_PN="${PN/-bin/}" DESCRIPTION="Native Linux backend for Claude Desktop Cowork (unofficial)" HOMEPAGE="https://github.com/patrickjaja/claude-cowork-service" SRC_URI="https://github.com/patrickjaja/claude-cowork-service/releases/download/v${PV}/${MY_PN}_${PV}_amd64.deb" S="${WORKDIR}" LICENSE="MIT" SLOT="0" KEYWORDS="-* ~amd64" RESTRICT="mirror strip bindist" RDEPEND=" sys-apps/systemd app-shells/bash " # NOTE: Runtime also requires the Claude Code CLI (>= 2.1.86) on $PATH. # Not packaged in Portage. Install via: npm i -g @anthropic-ai/claude-code # Optional: net-misc/socat (used as health-check fallback) QA_PREBUILT="*" src_install() { # Binary: upstream .deb installs to /usr/bin/cowork-svc-linux if [[ -f "${S}/usr/bin/cowork-svc-linux" ]]; then dobin "${S}/usr/bin/cowork-svc-linux" else die "cowork-svc-linux binary not found in unpacked .deb (path changed upstream?)" fi # systemd user service unit (.deb may place in /lib or /usr/lib) local unit_src="" local candidate for candidate in \ "${S}/usr/lib/systemd/user/claude-cowork.service" \ "${S}/lib/systemd/user/claude-cowork.service" \ ; do if [[ -f "${candidate}" ]]; then unit_src="${candidate}" break fi done if [[ -n "${unit_src}" ]]; then systemd_douserunit "${unit_src}" else die "claude-cowork.service unit file not found in unpacked .deb" fi # Docs if shipped local doc_dir="${S}/usr/share/doc/${MY_PN}" if [[ -d "${doc_dir}" ]]; then dodoc -r "${doc_dir}/." fi } pkg_postinst() { elog "claude-cowork-service installed." elog "" elog "Enable and start the user service:" elog " systemctl --user daemon-reload" elog " systemctl --user enable --now claude-cowork" elog "" elog "REQUIRED runtime dependency (NOT in Portage):" elog " Claude Code CLI >= 2.1.86 must be on \$PATH" elog " Install via: npm i -g @anthropic-ai/claude-code" elog " Without it, the daemon starts but spawn() RPCs fail." elog "" elog "Verify the installed user-unit contains an ExecStartPre line that" elog "imports WAYLAND_DISPLAY/DISPLAY/DBUS_SESSION_BUS_ADDRESS — without it" elog "spawned 'claude' processes lose access to the desktop session." elog "" elog "After service is active, restart Claude Desktop fully so the Cowork" elog "VM boot succeeds (check ~/.config/Claude/logs/cowork_vm_node.log)." elog "" elog "This is an unofficial community service. Required because Anthropic's" elog "official Cowork bundle does not support this platform (yukonSilver)." elog "Upstream: https://github.com/patrickjaja/claude-cowork-service" }