Herramientas CLI de escritorio (pop-os / minibook)
Set base de herramientas de línea de comandos que se instalan en cada computadora personal nueva con Pop!_OS, todas vía repo apt oficial del proveedor (no snap, no instaladores curl-pipe-bash salvo donde no hay alternativa) para que apt upgrade las mantenga sin fricción.
| Herramienta | Repo | Login |
|---|---|---|
| gcloud CLI | packages.cloud.google.com/apt | gcloud auth login (browser) |
GitHub CLI (gh) | cli.github.com/packages | gh auth login --web (device code) |
| cloudflared | pkg.cloudflare.com | cloudflared tunnel login (browser) |
Bitwarden CLI (bw) | npm global, sobre Node 20 | bw login <email> (master password) |
gcloud
gcloud config set project project-vm-personal
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1gcloud config set para compute/zone y compute/region falla con «You do not currently have an active account selected» si se corre antes de gcloud auth login — a diferencia de core/project, que sí se puede fijar sin cuenta activa. Hay que loguearse primero.
Bitwarden CLI — requiere Node 20
Node 18 (el que trae Ubuntu/Pop!_OS por default) da error Web Crypto API is unavailable al correr bw. Se instala Node 20 vía NodeSource solo para esto:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g @bitwarden/cli
bw config server https://vault.estebanalcocer.cloudBug conocido de la extensión de navegador (no del CLI): la extensión 2026.7.0 no muestra items contra el Vaultwarden self-hosted — error en consola invalid type: JsValue(...), expected a string, issue abierto en el repo oficial. El Web Vault y el CLI funcionan bien contra el mismo servidor; el bug es específico de la extensión. Solución temporal: downgrade de la extensión a 2026.6.1.
Sudo sin contraseña
sudo tee /etc/sudoers.d/esteban-nopasswd > /dev/null << 'EOF'
esteban ALL=(ALL) NOPASSWD: ALL
EOF
sudo visudo -c -f /etc/sudoers.d/esteban-nopasswd
sudo chmod 440 /etc/sudoers.d/esteban-nopasswdA diferencia de vm-personal, que también corre sin contraseña para funcionar como jump host, acá no hay una razón de automatización detrás — es simplemente comodidad en una máquina de uso personal exclusivo. Queda documentado como decisión consciente, no como default: quita la barrera de reconfirmación en cualquier comando con sudo, y no se activó autologin del sistema operativo en paralelo (se evaluó y se descartó por riesgo de dejar el boot atorado).
Claude Code + tmux
Claude Code se instala con el instalador nativo (curl https://claude.ai/install.sh | bash), sin depender de Node.js. Se corre normalmente dentro de una sesión de tmux nombrada, para poder desconectarse sin matar el proceso:
tmux new-session -d -s claude-general 'claude'
tmux attach -t claude-generalEn pop-os (t640-pop) esto está además automatizado, solo por cron: ~/.local/bin/tmux-claude-watchdog.sh (crontab de usuario, cada minuto) crea la sesión t640-pop si no existe y la relanza si se cierra o truena durante el día — mismo script que el watchdog de ctunlinux, instalado ahí primero y replicado acá el 2026-09-02.
Al principio se instaló también tmux-t640-pop.service (systemd --user, Type=oneshot) para replicar exactamente el patrón de ctunlinux, pero se eliminó el mismo día — el watchdog de cron ya cubre por sí solo tanto la creación inicial (dispara igual en el primer tick tras un reboot) como la vigilancia en caliente, y Restart= de systemd no sirve para esto de todas formas (tmux new-session -d desacopla el proceso del árbol que systemd rastrea, así que nunca se entera si claude truena adentro). Mantener las dos unidades era redundancia sin ganancia — veredicto completo.