Commit Diff


commit - 23b19e5166c6e463bb23b4256b486dd3f0aee086
commit + 1b710383efacffcdb1b2c5ef7781ca1690bde4ef
blob - 368aeefca8f1e486cf212056ff5f6c0ff02fa987
blob + 2808f8c3a8cb881793d0d1edab61e4ed400636a6
--- NOTES.md
+++ NOTES.md
@@ -1458,3 +1458,77 @@ Confirmado con `nix eval` contra el nixpkgs pineado re
 imperativa existente (`nix profile remove zola`) -- queda duplicada hasta que
 el usuario confirme el `nixos-rebuild switch` y decida si quiere limpiarla.
 **Pendiente manual:** `sudo nixos-rebuild switch --flake /nixdots#ale`.
+
+## Migración a got puro (2026-07-22)
+
+A pedido explícito del usuario: `/nixdots` dejó de ser un checkout de `git`
+y pasó a ser un *work tree* de `got` directamente -- ya no hace falta un
+work tree separado (`~/nixdots-got`) ni sincronizar de vuelta como en la
+sección "got (Game of Trees)" de arriba (2026-07-16). Aceptado
+explícitamente el trade-off: **los commits de este repo ya no llevan firma
+GPG** (`got commit` no soporta firma, ni GPG ni SSH -- solo `got tag -S`
+firma, y solo con SSH).
+
+### Validado antes de tocar el repo real
+
+Probado primero en un directorio descartable del scratchpad, para no
+arriesgar el checkout real:
+
+- `git clone --bare ssh://git@pcale.tail32b955.ts.net:2222/Ale/Nix-Dotfiles.git`
+  deja `remote.origin.url` ya configurado en el `config` del bare repo --
+  `got fetch -v origin` lo lee solo, sin necesitar `got.conf` a mano ni
+  tocar nada más. Confirmado con `strace` en la ronda anterior (2026-07-16)
+  que `got` ya sabía leer remotos de `.git/config`; esto confirma que un
+  bare clone fresco (sin working tree) también los trae listos.
+- **Preocupación real, descartada:** `nix flake` filtra por archivos
+  *trackeados por git* cuando el flake vive dentro de un repo git -- sin
+  `.git`, cae al fetcher `path:` (copia el directorio tal cual). Probado
+  `nix flake metadata`/`nix eval` sobre el work tree de prueba (sin `.git`,
+  solo `.got`) y salió limpio, exit 0, sin warnings. Incluso con un symlink
+  `result` de prueba presente (como el que deja `nixos-rebuild build` en
+  `/nixdots` real) -- Nix lo copia sin quejarse, y de paso `got status` ya
+  lo ignora solo (respeta `.gitignore`, que sigue en el repo con
+  `result`/`result-*`/`.direnv/`/`*.swp`).
+
+### Pasos reales sobre `/nixdots`
+
+1. `git clone --bare` del remoto real a `~/nixdots.git` -- repo bare
+   canónico, independiente del checkout viejo (paso aditivo, no tocó
+   `/nixdots` todavía).
+2. `mv /nixdots ~/nixdots-git-backup` -- el `mv` no pudo borrar el propio
+   directorio `/nixdots` de `/` (permiso denegado, `/` no es escribible por
+   `ale`), pero sí alcanzó a copiar y vaciar todo el contenido hacia el
+   backup antes de fallar en ese último paso. Resultado neto: `/nixdots`
+   quedó vacío (backup íntegro en `~/nixdots-git-backup`, confirmado con
+   `diff -rq` sin diferencias) -- justo lo que `got checkout` necesita.
+3. `got checkout ~/nixdots.git /nixdots` -- work tree nuevo, directo en el
+   path real. `diff -rq` contra el backup (excluyendo `.git`/`.got`/
+   `result`) salió vacío.
+4. Confirmado sin residuos: `/nixdots/.git` ya no existe.
+
+### Ajustes de código que dependían de `git`
+
+- **`home/ale/home.nix`, función `nixos-update`:** usaba
+  `git diff --quiet`/`git add`/`git commit` para el commit automático de
+  `flake.lock` tras cada actualización. Cambiado a
+  `got status flake.lock` (vacío si no hay cambios) +
+  `got commit -m "..." flake.lock` -- sin firma, a diferencia de antes.
+- **`modules/desktop.nix`, comentario de `got`:** ya no describe un
+  escenario de coexistencia con `git` en el mismo repo (ronda 2026-07-16,
+  ya obsoleta) -- ahora documenta que `/nixdots` es un work tree de `got`
+  sin `.git`, y que `programs.git` se mantiene a nivel de sistema solo por
+  otros repos y porque `got` resuelve el autor de los commits leyendo
+  `~/.gitconfig` (`programs.git.settings.user.*`) -- confirmado en vivo:
+  `got log` mostró `ale <ale_bnes@tuta.com>` sin declarar autor en ningún
+  `got.conf`.
+
+### Qué NO se tocó
+
+- El paquete `git` sigue en `environment.systemPackages`
+  (`hosts/ale/configuration.nix`) y `programs.git` en `home.nix` -- útiles
+  para otros repos ajenos a `/nixdots` y necesarios para que `got` resuelva
+  el autor de los commits (ver arriba). No se pidió sacar `git` del sistema,
+  solo del flujo de este repo.
+- `~/nixdots-git-backup` se dejó como red de seguridad (historia completa
+  de `git`, por si hace falta consultar algo que `got log` no muestre
+  igual) -- no se borró.
blob - b06140516ba47cd58d7b72741f919e20994fb4e2
blob + e0f6acf6157ae0a7447ad7eb335d564e39af2303
--- README.md
+++ README.md
@@ -4,6 +4,12 @@ Configuración NixOS de `ale` — laptop Intel+Nvidia 
 [Noctalia](https://docs.noctalia.dev/). Desplegada vía flake, sin
 gestión de secretos (la clave GPG vive en una YubiKey).
 
+Versionado con **[got](https://gameoftrees.org/)** (no `git`) — repo
+bare canónico en `~/nixdots.git`, `/nixdots` es su work tree. Los
+commits no llevan firma (`got commit` no soporta GPG/SSH); solo los
+tags pueden firmarse con SSH (`got tag -S`). Detalle de la migración en
+[`NOTES.md`](NOTES.md).
+
 ## Estructura
 
 ```
blob - 18e58616307f35cff14e356c11932514fa4d587e
blob + afc5eac93f88618cd805d72e9df1222336de9fbe
--- home/ale/home.nix
+++ home/ale/home.nix
@@ -214,6 +214,10 @@
       # 2026-07-22) porque no hay NIX_PATH nixos-config. El subshell con
       # `set -e` corta en el primer error (ej. build roto) sin aplicar
       # switch ni tocar el cwd de la terminal interactiva.
+      # /nixdots es un work tree de got (sin .git, ver "Migración a got
+      # puro" en NOTES.md 2026-07-22) -- got commit no soporta firma, así
+      # que este commit de flake.lock queda sin firmar (a diferencia de los
+      # commits manuales de antes con git commit -S).
       nixos-update() {
         (
           set -e
@@ -221,9 +225,8 @@
           sudo nix flake update
           sudo nixos-rebuild build --flake .#ale
           sudo nixos-rebuild switch --flake .#ale
-          if ! git diff --quiet -- flake.lock; then
-            git add flake.lock
-            git commit -m "Actualiza flake.lock"
+          if [ -n "$(got status flake.lock)" ]; then
+            got commit -m "Actualiza flake.lock" flake.lock
           fi
         )
       }
blob - 4687e367ef9d874c6b5665ac3d4bd6262c6110c1
blob + 90821214fdc6efcdfca67570b5c6ce8e83dfe219
--- modules/desktop.nix
+++ modules/desktop.nix
@@ -149,11 +149,14 @@
       # 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".
+    got  # VCS de este mismo repo (/nixdots ya es un work tree de got, sin
+         # .git -- ver "Migración a got puro" en NOTES.md, 2026-07-22).
+         # Reusa ssh-agent para clone/fetch/send por ssh://, igual que git.
+         # "got commit" NO soporta firma GPG ni SSH (solo "got tag -S" firma,
+         # y solo con SSH) -- los commits de este repo quedan sin firmar
+         # desde la migración; programs.git sigue instalado a nivel de
+         # sistema para otros repos y porque got lee autor/email de
+         # ~/.gitconfig (programs.git.settings.user.*, ver home.nix).
 
     mpv  # reproductor de video/audio. Verificado con `nix eval`/`nix build`
          # contra el nixpkgs real (no de memoria) que el `pkgs.mpv` de acá ya