commit a5a848b99ed0618744871f3c699f0f9b991acf61 from: ale date: Thu Jul 23 03:40:20 2026 UTC Documenta el flujo de tags firmados y agrega allowed_signers al bootstrap 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 -m "..." `** 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 + 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 " +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: