Files
STP/.claude/commands/addEntry.md
T
msaldain bd78fd9fbe Configuracion inicial completa del entorno personal
Modulos de restauracion:
- bootstrap: instala yq, age y dependencias base (curl, wget, git, nano, gpg)
- ssh: descifra e instala claves SSH desde secrets/sshKeys.tar.gz.age
- registry: aplica paquetes apt/snap/flatpak, dotfiles, servicios y configs Docker
- thunderbird: instala Thunderbird snap y restaura perfil desde ZIP
- claudeCode: configura repositorio apt de Anthropic e instala claude-code
- easyEffects: restaura configuracion y presets desde ZIP
- wireplumber: restaura dispositivo Bluetooth por defecto y perfiles de audio
- cups: restaura impresoras y drivers PPD desde ZIP

Scripts de captura (correr antes de push):
- scripts/encryptSsh.sh: cifra ~/.ssh con age
- scripts/thunderbird/capture.sh: captura perfil de Thunderbird snap
- scripts/easyEffects/capture.sh: captura config de EasyEffects flatpak
- scripts/wireplumber/capture.sh: captura estado de WirePlumber
- scripts/cups/capture.sh: captura impresoras CUPS y PPDs (requiere sudo)

Registro de aplicaciones (config/registry.yaml):
- 9 paquetes apt, 1 snap (dbeaver-ce), 22 flatpaks incluyendo VSCodium,
  Bitwarden, Inkscape, LibreOffice, OBS Studio, Nextcloud Desktop, entre otros

Secretos incluidos:
- secrets/sshKeys.tar.gz.age: claves SSH cifradas con age
- secrets/thunderbirdProfile.zip: perfil de Thunderbird sin emails ni cache
- secrets/easyEffectsConfig.zip: ajustes y presets de salida de audio
- secrets/wireplumberState.zip: estado de audio incluyendo auriculares Bluetooth
- secrets/cupsConfig.zip: 5 impresoras configuradas con sus drivers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 18:16:40 -03:00

206 lines
6.0 KiB
Markdown

# Agregar entrada al registro STP
Agregá una nueva entrada al registro STP para: $ARGUMENTS
---
## Procedimiento
1. Leé `config/registry.yaml` para verificar que no exista ya una entrada con el mismo `id`.
2. Identificá el tipo correcto según la descripción (ver sección **Tipos** más abajo).
3. Insertá la nueva entrada en `config/registry.yaml`, dentro de la lista `registry:`, respetando el orden:
- Los `ppa` deben aparecer **antes** de cualquier `apt` que los requiera.
- Dentro de cada grupo, el orden es cosmético; seguí el orden existente.
4. Confirmá el resultado mostrando la entrada agregada.
**Archivo a editar:** `config/registry.yaml`
---
## Tipos
### `apt` — paquete del gestor de paquetes
```yaml
- id: nombrePaquete
type: apt
# package: nombre-real # solo si el nombre real difiere del id
# minVersion: "1.2.3" # versión mínima aceptable (opcional)
# maxVersion: "1.2.3" # versión máxima aceptable (opcional)
```
Campos:
- `id` — requerido, camelCase
- `package` — opcional; omitir si el id coincide con el nombre real del paquete apt
- `minVersion` — opcional; versión mínima aceptable (cadena de versión Debian, ej. `"2.38.1"`)
- `maxVersion` — opcional; versión máxima a instalar
**Comportamiento de instalación según los campos presentes:**
| `minVersion` | `maxVersion` | Qué instala |
|---|---|---|
| — | — | última versión disponible |
| `1.0` | — | última disponible (best-effort ≥ 1.0) |
| — | `2.0` | `package=2.0` |
| `1.0` | `2.0` | `package=2.0` (techo del rango aceptable) |
| `1.5` | `1.5` | `package=1.5` (versión exacta) |
Cuando `maxVersion` está presente, el módulo siempre instala esa versión exacta con `--allow-downgrades`, lo que garantiza que la máquina no quede con una versión superior al límite aunque ya tuviera el paquete instalado. Si la versión instalada ya satisface el rango `[minVersion, maxVersion]`, el paso se omite sin reinstalar.
### `ppa` — repositorio PPA de Ubuntu
```yaml
- id: nombrePpa
type: ppa
address: ppa:usuario/repositorio
```
Campos:
- `id` — requerido, camelCase
- `address` — requerido, formato `ppa:usuario/repositorio`
> Debe aparecer en el archivo **antes** del `apt` que instala paquetes de ese PPA.
### `snap` — aplicación snap
```yaml
- id: nombreApp
type: snap
# package: nombre-snap # solo si el nombre real difiere del id
# classic: true # solo si el snap requiere confinamiento clásico
```
Campos:
- `id` — requerido, camelCase
- `package` — opcional
- `classic` — opcional; omitir si es `false`
### `flatpak` — aplicación Flatpak
```yaml
- id: nombreApp
type: flatpak
appId: com.ejemplo.App
# remote: flathub # opcional; flathub por defecto
```
Campos:
- `id` — requerido, camelCase
- `appId` — requerido, ID completo de la aplicación (ej. `org.gimp.GIMP`)
- `remote` — opcional; omitir si es flathub
### `dotfile` — configuración enlazada a `$HOME`
```yaml
- id: nombreApp
type: dotfile
```
Campos:
- `id` — requerido, camelCase; debe coincidir con una carpeta dentro de `dotfiles/`
Los archivos en `dotfiles/nombreApp/` se enlazan simbólicamente a su ruta equivalente en `$HOME`.
Ejemplo: `dotfiles/bash/.bashrc``~/.bashrc`
Si la carpeta `dotfiles/nombreApp/` no existe, crearla y colocar los archivos adentro antes de agregar la entrada.
### `service` — servicio systemd
```yaml
- id: nombreServicio
type: service
# name: nombre-servicio # solo si el nombre real difiere del id
scope: system # system | user
state: enable # enable | disable | mask
```
Campos:
- `id` — requerido, camelCase
- `name` — opcional
- `scope` — requerido: `system` o `user`
- `state` — requerido: `enable`, `disable` o `mask`
### `pipewire` — configuración completa de PipeWire
```yaml
- id: pipewire
type: pipewire
replacePulseaudio: true
packages:
- pipewire
- pipewire-audio
- pipewire-pulse
- wireplumber
- libspa-0.2-bluetooth
userServices:
- pipewire
- pipewire-pulse
- wireplumber
```
Campos:
- `replacePulseaudio``true` para deshabilitar y enmascarar PulseAudio
- `packages` — lista de paquetes apt a instalar
- `userServices` — lista de servicios systemd de usuario a habilitar
### `video` — drivers de GPU (detección automática con `lspci`)
```yaml
- id: gpuDrivers
type: video
drivers:
nvidia:
packages:
- nvidia-driver-535
- nvidia-settings
amd:
packages:
- mesa-vulkan-drivers
- radeontop
- vainfo
intel:
packages:
- intel-media-va-driver
- vainfo
```
Solo se instalan los paquetes del vendor detectado. Podés incluir uno, dos o los tres vendors.
---
### `docker` — configuración Docker (Compose o Dockerfile)
```yaml
- id: nombreServicio
type: docker
# destination: ~/docker/nombreServicio # destino en el sistema (opcional, ese es el valor por defecto)
# autostart: true # ejecutar docker compose up -d tras el deploy (opcional, false por defecto)
```
Campos:
- `id` — requerido, camelCase
- `destination` — opcional; directorio de destino donde se enlazan los archivos. Soporta `~`. Por defecto: `~/docker/<id>`
- `autostart` — opcional; si `true`, ejecuta `docker compose up -d` después de enlazar los archivos. Requiere un archivo compose en el destino
Los archivos del servicio deben estar en `docker/<id>/` dentro del repo. Se enlazan simbólicamente a `destination/`, respetando la estructura de subdirectorios.
Ejemplo de estructura:
```
docker/
miServicio/
compose.yaml
.env.example
config/
nginx.conf
```
Si Docker no está instalado en la máquina, el paso se saltea con un aviso sin interrumpir el resto del STP.
---
## Convenciones
- `id` siempre en **camelCase**, sin guiones ni guiones bajos
- Omitir campos opcionales cuando no aplican — no usar `null` ni strings vacíos
- El campo `name`, `package` o `appId` solo es necesario cuando difiere del `id`