nix-config/hosts/heather/paseo.nix

52 lines
2.5 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# heather — paseo daemon (self-hosted web UI для CLI-агентов: pi, codex и др.).
#
# https://github.com/getpaseo/paseo, npm-пакет @getpaseo/cli
# Daemon управляет агентами как дочерними процессами (provider = CLI на хосте,
# со своими кредами). Слушает 127.0.0.1:6767 → Caddy paseo.iscg.dev терминирует
# TLS. Этот hostname предназначен для desktop/mobile-клиентов: bundled web UI
# выключен, а Caddy Basic Auth намеренно не используется — мобильный клиент не
# умеет проходить дополнительный Basic Auth слой.
#
# Auth: встроенная парольная auth демона (bcrypt, Bearer header + WS subprotocol,
# без пароля — 401). Пароль: PASEO_PASSWORD из EnvironmentFile
# /var/lib/paseo-secrets/paseo.env (mikl:users 600), plaintext в
# pass iscg.dev/paseo/daemon.
#
# Конфиг демона: ~/.paseo/config.json (hostnames: paseo.iscg.dev — DNS rebinding
# protection, webUi disabled, relay off, dictation/voice off). Хост-allowlist
# проверен: чужой Host → 403.
#
# Установка @getpaseo/cli — ручная (npm global в ~/.npm-global, как pi-web):
# npm i -g @getpaseo/cli # node-pty собирается без тулчейна (prebuilds)
# Провайдеры: pi уже стоит (~/.local/bin/pi).
{ config, pkgs, lib, ... }:
{
systemd.services.paseo = {
description = "paseo daemon (self-hosted web UI for CLI coding agents)";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
# PATH: nodejs (node/npm) + ~/.npm-global/bin (paseo) + ~/.local/bin (pi).
# Для package/path NixOS добавляет /bin сам: каталоги должны быть
# уровнями выше фактических ~/.npm-global/bin и ~/.local/bin.
path = [ pkgs.nodejs pkgs.git "/home/mikl/.npm-global" "/home/mikl/.local" ];
environment = {
PASEO_HOME = "/home/mikl/.paseo";
HOME = "/home/mikl";
};
serviceConfig = {
Type = "simple";
User = "mikl";
Group = "users";
ExecStart = "/home/mikl/.npm-global/bin/paseo daemon start --foreground --no-web-ui --no-relay";
EnvironmentFile = "/var/lib/paseo-secrets/paseo.env";
WorkingDirectory = "/home/mikl";
Restart = "on-failure";
RestartSec = 5;
};
};
}