Commit Diff


commit - 8853bc49abe9711f8b8d4ae139c131f7681a19bf
commit + a5a848b99ed0618744871f3c699f0f9b991acf61
blob - 83ce305dd1378ec46d8f22a941d345bfee3cf676
blob + ee48acb66abc4780f4fd4f3f0d9805870cbc7f29
--- NOTES.md
+++ NOTES.md
@@ -1651,3 +1651,41 @@ falla en `got`. Hay que sobreescribir `got.conf` con e
 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
@@ -59,10 +59,14 @@ nix-shell -p git
 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
@@ -74,10 +78,32 @@ EOF
 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: