commit 1b710383efacffcdb1b2c5ef7781ca1690bde4ef from: ale date: Thu Jul 23 02:26:31 2026 UTC Migra /nixdots de git a got puro (work tree directo, sin sync) 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 ` 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