commit - 8853bc49abe9711f8b8d4ae139c131f7681a19bf
commit + a5a848b99ed0618744871f3c699f0f9b991acf61
blob - 83ce305dd1378ec46d8f22a941d345bfee3cf676
blob + ee48acb66abc4780f4fd4f3f0d9805870cbc7f29
--- NOTES.md
+++ NOTES.md
fetch`/`got send`, o quedaría sirviendo solo para lectura vía checkout
inicial. Procedimiento completo documentado en el README, sección
"Bootstrap en una PC nueva".
+
+## Primer release firmado, `v2026.07.22` (2026-07-22)
+
+A pedido del usuario: creado el primer tag firmado del repo, versionado
+con **CalVer** (`vAAAA.MM.DD`) -- elegido sobre SemVer porque un repo de
+dotfiles no tiene una "API" que romper, y CalVer evita tener que juzgar
+subjetivamente si un cambio es "mayor" o "menor" cada vez que se etiqueta.
+
+- **`got tag -S <archivo> -m "..." <nombre>`** firma con SSH -- el
+ argumento de `-S` es un *archivo*, no un identificador de agente: hace
+ falta volcar la clave pública de la YubiKey a un archivo primero
+ (`ssh-add -L > ~/.ssh/yubikey.pub`), aunque la privada viva en la card
+ y nunca toque disco. Probado real: `got tag` + `got send -t <tag>
+ origin` funcionaron a la primera.
+- **BUG/gap real encontrado en la verificación:** `got tag -V` falló con
+ `SSH signature verification requires setting allowed_signers in
+ got.conf(5)` -- a diferencia de la firma (que solo necesita el archivo
+ de `-S`), la *verificación* exige declarar explícitamente qué
+ identidades son confiables, vía un archivo en formato "allowed
+ signers" de `ssh-keygen(1)` (`principal tipo-de-clave clave-base64`,
+ mismo formato que usa `git`'s `gpg.ssh.allowedSignersFile`). Resuelto:
+ ```
+ echo "ale_bnes@tuta.com $(cat ~/.ssh/yubikey.pub)" > ~/.ssh/allowed_signers
+ ```
+ y declarado en `got.conf` con `allowed_signers "/home/ale/.ssh/allowed_signers"`.
+ Confirmado con un segundo `got tag -V`: `Good "git" signature for
+ ale_bnes@tuta.com with RSA key SHA256:xzYTNmH+...`.
+- **Ni `~/.ssh/allowed_signers` ni `~/nixdots.git/got.conf` están
+ versionados** (viven fuera del work tree, y `got.conf` además tiene el
+ remote real que no tendría sentido publicar como plantilla genérica) --
+ agregado el paso completo (guardar la pub key + `allowed_signers` +
+ la línea en `got.conf`) a la sección "Bootstrap en una PC nueva" del
+ README, para no tener que redescubrir esto en la próxima instalación.
+- Mensaje del tag: resumen del stack completo (Hyprland+Noctalia/Gruvbox,
+ gráficos duales PRIME sync, YubiKey, Tailscale+Mullvad, LibrePods) más
+ una nota de que el repo se versiona con `got` sin firma de commits --
+ pensado para que el tag sirva como snapshot legible por sí solo, sin
+ tener que ir a leer `NOTES.md` para saber qué es esta versión.
blob - 73e5dfac8f254765209fefc3ed87108b945f07fa
blob + 8a21930778e658850142c2e267c4e315db891a3f
--- README.md
+++ README.md
git clone --bare https://github.com/Richard7987/Nix-Dotfiles.git ~/nixdots.git
# 2. got toma el relevo -- autor + remote real (SSH al Forgejo, no el
-# espejo de GitHub, que got no puede fetch/send igual)
+# espejo de GitHub, que got no puede fetch/send igual) + allowed_signers
+# para poder verificar tags firmados (got tag -V, ver más abajo)
nix-shell -p got
+ssh-add -L > ~/.ssh/yubikey.pub
+echo "ale_bnes@tuta.com $(cat ~/.ssh/yubikey.pub)" > ~/.ssh/allowed_signers
cat > ~/nixdots.git/got.conf <<'EOF'
author "ale <ale_bnes@tuta.com>"
+allowed_signers "/home/ale/.ssh/allowed_signers"
remote "origin" {
server git@pcale.tail32b955.ts.net
protocol ssh
got checkout ~/nixdots.git /nixdots
```
+`~/.ssh/allowed_signers` y `~/nixdots.git/got.conf` viven fuera del work
+tree (no versionados) -- este paso hay que repetirlo en cada PC nueva,
+no es algo que el `checkout` traiga solo.
+
Después: ajustar los placeholders de hardware (`hosts/ale/hardware-configuration.nix`,
bus IDs en `modules/graphics.nix`, nombre de monitor en `home/ale/hyprland.lua`)
y recién ahí el primer despliegue.
+## Firmar un release (tag)
+
+Los commits de este repo no llevan firma (`got commit` no la soporta).
+Para marcar una versión de forma verificable, se usa un tag firmado con
+SSH vía la YubiKey (requiere `allowed_signers` ya configurado, ver
+bootstrap arriba):
+
+```sh
+cd /nixdots
+got tag -S ~/.ssh/yubikey.pub -m "mensaje describiendo esta versión" v2026.07.22
+got send -t v2026.07.22 origin
+got tag -V v2026.07.22 # verifica la firma
+```
+
+Esquema de versión: **CalVer** (`vAAAA.MM.DD`) -- cada tag es una foto
+fechada del sistema, sin tener que decidir qué cuenta como cambio
+"mayor" o "menor" (no hay una API que romper en un repo de dotfiles).
+
## Uso
Primer despliegue: