commit c9baf38584f74eaa14f5584b78052e9007c4ac66 from: ale date: Thu Jul 16 16:55:05 2026 UTC got (Game of Trees): agrega paquete y documentación commit - 83ebc928af788d3849decde84b7b5eeda2b2a3b3 commit + c9baf38584f74eaa14f5584b78052e9007c4ac66 blob - 9d91968fb716eceff46b108fcd1dfa7ec5cf9994 blob + efb5e801247dbb1ee34a3223cdb93ff94e295d7b --- NOTES.md +++ NOTES.md @@ -1037,6 +1037,99 @@ cambio -- viene de algún módulo ya importado (`input default` es sospechoso, no confirmado con `nix eval` cuál exactamente). Documentado acá para no sorprenderse de nuevo si aparece en otro contexto. +## got (Game of Trees) (2026-07-16) + +A pedido del usuario: agregado `got` (`pkgs.got`, confirmado real contra +nixpkgs con `nix eval nixpkgs#got.pname/.version` antes de agregarlo -- +versión 0.126) a `environment.systemPackages` en `modules/desktop.nix`, como +alternativa opcional a `git` para el mismo repo. + +### Investigación previa a agregarlo (a pedido del usuario, antes de tocar código) + +Contra el manual real de `gameoftrees.org` (`got.1`, `got.conf.5`), no de +memoria: + +- **Compatibilidad de repo:** `got` opera sobre el mismo formato de repo + Git "bare" en disco -- no migra ni convierte nada, `git` y `got` pueden + coexistir sobre el mismo repo sin pisarse. +- **SSH:** `got clone`/`fetch`/`send` soportan `ssh://usuario@host` + invocando `ssh(1)` del sistema (con `ssh-agent`), igual que `git` -- la + autenticación SSH ya configurada vía `gpg-agent` + YubiKey + (`services.gpg-agent.enableSshSupport`, ver sección YubiKey/GPG) no + cambia en nada. +- **Firma:** `got commit` **no tiene ninguna opción de firma** (ni GPG ni + SSH) -- confirmado en el synopsis real (`[-CNnS]`, la `-S` ahí es para + symlinks fuera del árbol versionado, no para firmar). Solo `got tag -S` + firma, y únicamente con firma **SSH** (`ssh-keygen -Y sign`/`ssh-agent`), + nunca GPG. Como el repo ya tiene commits firmados con GPG vía la YubiKey + (verificados con `git log --show-signature`, ver sección YubiKey/GPG), + la conclusión fue: **no reemplazar `git commit -S` por `got commit`** -- + ambas herramientas conviven sobre el mismo repo, se puede seguir + commiteando y firmando con `git` y usar `got` para lo demás (log, status, + diff, fetch/send) si se prefiere su UX. + +### `got checkout` requiere un *work tree* propio y vacío -- no funciona "en el lugar" + +Verificado en vivo (no solo con el manual, que en un resumen automático +inicial sugería incorrectamente que existía una opción `-f` para forzar el +checkout dentro de un directorio no vacío -- **no existe tal opción en la +0.126 real**, confirmado con el `usage:` real del binario: +`checkout [-Eq] [-b branch] [-c commit] [-p path-prefix] repository-path +[work-tree-path]`, sin `-f`). Un *work tree* de `got` es una estructura +propia (metadata en `.got/`: `base-commit`, `file-index`, `head-ref`, +`repository`, `uuid`) completamente distinta del checkout que deja +`git clone` -- **no se puede simplemente empezar a correr `got status`/ +`got commit` adentro de `/nixdots`** (que ya tiene `.git/` + archivos de +`git clone`), porque `got checkout` exige que `work-tree-path` esté vacío. + +Probado en un repo descartable en el scratchpad antes de intentar nada +contra el repo real, justamente para no arriesgar los cambios sin +commitear que ya había en `/nixdots` (`home/ale/hyprland.lua`, un cambio +del usuario ajeno a esta tarea) -- confirmó el error `invalid option -- 'f'` +en vez de asumir el comportamiento de memoria/de un resumen de doc. + +### Flujo real para probar `got commit`/`got send` una vez sobre este repo + +Dado lo anterior, para commitear con `got` hace falta un *work tree* +separado (reutiliza los mismos objetos de `/nixdots/.git`, así que no +duplica historia ni diverge): + +```sh +got checkout -b main /nixdots/.git ~/nixdots-got # work-tree-path debe estar vacío/no existir +cp /nixdots/modules/desktop.nix ~/nixdots-got/modules/desktop.nix +cp /nixdots/README.md /nixdots/NOTES.md ~/nixdots-got/ +cd ~/nixdots-got +got status +got commit -m "..." +got send ssh://git@pcale.tail32b955.ts.net:2222/Ale/Nix-Dotfiles.git +``` + +Tras el `got send`, hace falta sincronizar `/nixdots` (el checkout de +`git` real que usa `nixos-rebuild --flake /nixdots#ale`) de vuelta, sin +tocar el cambio ajeno pendiente en `hyprland.lua`: + +```sh +cd /nixdots +git fetch origin +git checkout origin/main -- modules/desktop.nix README.md NOTES.md # objetivo, no toca hyprland.lua +git merge --ff-only origin/main +``` + +**Remoto real confirmado** (`git remote -v` en `/nixdots`): `origin` es +`ssh://git@pcale.tail32b955.ts.net:2222/Ale/Nix-Dotfiles.git` -- un +servidor Git propio expuesto por Tailscale (puerto 2222), **no +github.com directo** (a pesar de que la primera pregunta del usuario sobre +`got` hablaba de "push a GitHub"). No debería ser un problema real: el +esquema `ssh://` de `got` implementa el mismo protocolo de empaquetado de +Git (`git-upload-pack`/`git-receive-pack`) que usa cualquier cliente Git +por SSH, no algo exclusivo de GitHub -- cualquier servidor Git estándar +(Gitea/Forgejo/gitolite/etc.) debería aceptarlo igual. **No probado en +vivo contra este servidor todavía** (no se corrió `got send` de verdad, +sería la primera confirmación real); pasar el remoto como se dio arriba, +sin pasar por un nombre `origin` de `got.conf` (que no existe en este +repo, solo el `.git/config` de `git`, y no está confirmado que `got` lo +lea). + ## Referencias usadas - https://docs.noctalia.dev/v5/getting-started/nixos/ @@ -1097,3 +1190,9 @@ Documentado acá para no sorprenderse de nuevo si apar - `bluetoothctl info ` real en la máquina — confirmó que el MAC de los mensajes de reconexión en el log es el de los AirPods Pro del usuario, no un dispositivo desconocido. +- https://gameoftrees.org/got.1.html, https://gameoftrees.org/got.conf.5.html, + https://gameoftrees.org/got-worktree.5.html — manual real de `got` + (opciones de `checkout`/`commit`/`send`/`fetch`, formato de work tree, + firma SSH de tags). El `usage:` real del binario 0.126 instalado + (`got checkout -h`, etc.) se usó para corregir un resumen automático de + doc que asumía incorrectamente una opción `-f` inexistente. blob - e7ffcaf879e5803bc4fb34d6ccae1087fecd23e6 blob + 61351144ce1ca39035fa5f9d655cd5a35f2247db --- README.md +++ README.md @@ -22,6 +22,14 @@ Flake para migrar esta PC de FreeBSD a NixOS con Hyprl - **Carpetas XDG estándar** (`Desktop`, `Documents`, `Downloads`, `Music`, `Pictures`, `Public`, `Templates`, `Videos`) declaradas vía `xdg.userDirs` en `home/ale/home.nix`, en vez de creadas a mano. +- **got** (Game of Trees, `modules/desktop.nix`) — VCS alternativo opcional + para trabajar con este mismo repo, en paralelo a `git`. Mismo formato de + repo Git en disco, coexisten sin problema. **`got commit`/`got tag` no + soportan firma GPG** (`got tag -S` firma, pero solo con SSH) -- los + commits firmados con la YubiKey siguen haciéndose con `git commit -S`. + Ver sección "got (Game of Trees)" en `NOTES.md` (2026-07-16) para el + detalle de por qué no es un reemplazo 1:1 de `git` en este repo, y cómo + usarlo (requiere un *work tree* propio, separado del clone de `git`). - **Theming Qt** (Kleopatra, pinentry-qt) coherente con Noctalia vía `kdePackages.plasma-integration`/`breeze` + `QT_QPA_PLATFORMTHEME=kde`. - **Oh My Zsh + Powerlevel10k** (`home/ale/home.nix`, config generada con blob - 4aa6c8a617e15eebead780bc38a4d92a4d54396b blob + a12afb6e1cdcd7ae41da25dda05cac789a4c24ea --- modules/desktop.nix +++ modules/desktop.nix @@ -130,6 +130,11 @@ # cliente de música self-hosted (Navidrome), reemplaza a feishin -- # empaquetado vía su propio flake.nix (no está en nixpkgs). Hace # falta apuntarlo a un servidor la primera vez que se abre. + got # VCS alternativo a git, mismo formato de repo bare en disco -- + # coexiste con git en el mismo repo (clone/fetch/send por ssh://, + # reusa ssh-agent). "got commit" NO soporta firma GPG ni SSH (solo + # "got tag -S" firma, y solo con SSH) -- para mantener los commits + # firmados con la YubiKey seguir usando "git commit -S". ]; # Necesario para que QT_QPA_PLATFORMTHEME=kde (de abajo) resuelva al plugin