Skip to content

Commit 139f361

Browse files
author
dotfiles-bot
committed
update readme
1 parent d0e4a5e commit 139f361

File tree

1 file changed

+63
-99
lines changed

1 file changed

+63
-99
lines changed

README.md

Lines changed: 63 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,95 @@
1-
2-
# dotfiles — Inicio rápido
1+
# 🗄️ dotfiles — Windows 95/98 Retro Experience
32

4-
Este repositorio contiene configuraciones (dotfiles) organizadas en módulos (`modules/`) y administradas mediante un instalador mapeado (`./scripts/install.sh`).
3+
Este repositorio contiene una colección de configuraciones (dotfiles) algunas diseñadas para recrear la icónica estética **Windows 95/98 (Retro/Chicago95)** en entornos modernos de Linux y Windows. Todo el sistema está gestionado por un potente instalador multiplataforma escrito en **Python**.
54

6-
Guía rápida — pasos esenciales:
5+
---
76

8-
1) Clona el repo y prepara LFS/submódulos:
7+
## 🚀 Inicio Rápido
8+
9+
### 1) Preparación
10+
Clona el repositorio e inicializa los componentes pesados (imágenes y fuentes):
911

1012
```bash
1113
git clone --recurse-submodules https://github.com/JotaRandom/dotfiles.git ~/dotfiles
1214
cd ~/dotfiles
13-
git lfs install
14-
git lfs pull
15-
git submodule update --init --recursive
15+
git lfs install && git lfs pull
1616
```
1717

18-
2) Ejecuta el instalador (Linux / WSL):
18+
### 2) Instalación (Gestor Python)
19+
El instalador en Python es el motor principal que gestiona symlinks, backups automáticos y sanitización de archivos.
20+
21+
> [!TIP]
22+
> Si tu intérprete de Python por defecto ya es la versión 3, puedes usar `python` en lugar de `python3` en los siguientes comandos.
1923
24+
**Instalación completa (Recomendado):**
2025
```bash
21-
./scripts/install.py modules/editor/nvim modules/shell/zsh
26+
python3 scripts/install.py install
2227
```
2328

24-
3) En Windows (PowerShell):
29+
**Instalación de módulos específicos:**
30+
```bash
31+
python3 scripts/install.py install modules/desktop/gtk modules/shell/zsh
32+
```
2533

34+
**Uso en Windows (PowerShell):**
2635
```powershell
27-
./scripts/install.ps1 modules/editor/nvim modules/shell/zsh
36+
./scripts/install.ps1
2837
```
2938

30-
Estructura breve del repo:
31-
32-
- `modules/*`: Cada carpeta contiene un módulo con la estructura de archivos de destino (por ejemplo `modules/nvim/.config/nvim/init.vim`). Este instalador aplica symlinks directamente usando `install-mappings.yml` y sanea CRLFs y conflictos, lo que evita la creación accidental de archivos visibles en `$HOME`.
33-
- `install-mappings.yml`: Reglas declarativas (XDG/HOME) que el instalador usa para colocar archivos en las rutas correctas.
34-
35-
Cómo funciona `install.sh` (explicado de forma muy simple):
36-
37-
- Piensa en cada módulo como una caja con la estructura relativa de destino para los archivos. `./scripts/install.sh` lee `install-mappings.yml` y crea symlinks deterministas en `$TARGET` (por defecto `~`).
38-
- Si un archivo no tiene un mapeo explícito y no comienza con `.` en su nombre, `install.sh` aplica la acción `dotify` por defecto y lo instala como `~/.<nombre>` para evitar crear archivos visibles en el HOME.
39-
- `install.sh` además:
40-
- respeta mapeos XDG (`xdg:` / `xdg_data:` / `xdg_state:` / `xdg_cache:` / `home:`),
41-
- crea copias sanitizadas para archivos con CRLF en `$TARGET/.dotfiles_sanitized`,
42-
- realiza backups en `$HOME/.dotfiles_backup/<timestamp>` antes de sobrescribir archivos no enlazados,
43-
- incluye protecciones de seguridad para evitar eliminación accidental de directorios importantes.
44-
45-
Ejemplos concretos (muy simples):
46-
47-
-- Si en `modules/miapp/` existe un archivo `myapp` (en la raíz del módulo):
48-
49-
```bash
50-
./scripts/install.sh modules/miapp
51-
```
52-
53-
Resultado: se crea `$HOME/myapp` (sin punto). Aquí `miapp` es el nombre del módulo y `myapp` es el archivo que estaba en el módulo.
54-
55-
-- Si en `modules/miapp/` existe `.config/cargo/config`:
56-
57-
```bash
58-
./scripts/install.sh modules/miapp
59-
```
60-
61-
Resultado: se crea `~/.config/cargo/config`.
39+
---
6240

63-
-- Si en `modules/miapp/` existe `cargo/config` (sin punto al inicio):
41+
## 🛠️ Comandos del Instalador
6442

65-
```bash
66-
./scripts/install.sh modules/miapp
67-
```
43+
| Comando | Descripción |
44+
| :--- | :--- |
45+
| `install` | Crea symlinks según `install-mappings.yml`. |
46+
| `backup-list` | Lista los backups disponibles en `~/.dotfiles_backup/`. |
47+
| `backup-restore` | Restaura archivos (usa `--latest` o `--timestamp <ID>`). |
48+
| `backup-clean <N>` | Mantiene solo los `N` backups más recientes. |
49+
| `check-fonts` | Verifica e instala las fuentes retro requeridas. |
50+
| `check-gitlfs` | Asegura que los assets binarios se descargaron correctamente. |
51+
| `update-submodules` | Actualiza submódulos de paquetes (PKGBUILD) o del repo (`--repo`). |
52+
| `inspect-mappings` | Genera un reporte detallado del estado de los mapeos. |
53+
| `setup-githooks` | Configura hooks de Git y normaliza permisos de ejecución. |
6854

69-
Resultado: se crea `$HOME/cargo/config`.
55+
### Opciones avanzadas de `install`
56+
Personaliza tu instalación con estas flags:
57+
- `--dry-run`: Previsualiza los cambios sin afectar al sistema.
58+
- `--fix-attributes`: Configura automáticamente bits de ejecución en scripts.
59+
- `--fix-eol`: Convierte finales de línea CRLF a LF (útil si editas en Windows).
60+
- `--no-backup`: Salta la creación de copias de seguridad (usar con precaución).
7061

71-
Diferencia clave con enfoques históricos:
62+
---
7263

73-
- Algunas aproximaciones tradicionales respetaban exactamente la estructura que hubiera en el módulo y no aplicaban reglas ni transformaciones por defecto. En contraste, `./scripts/install.sh` usa `install-mappings.yml` para aplicar reglas declarativas (ej.: mover `cargo/config` a `~/.config/cargo/config`, o marcar un archivo como `ignore`).
64+
## 🎨 Enfoque Estético: Windows 95/98 (En curso)
65+
Este repo incluye módulos específicos diseñados para recrear un sistema de diseño retro coherente:
7466

75-
Por eso:
76-
- Si quieres que algo siempre termine en `~/.config/…`, lo puedes colocar en el módulo en esa carpeta (`.config/...`) o declarar un mapeo en `install-mappings.yml` si el repo tiene una estructura distinta.
77-
-- Nota: el instalador `install.sh` usa por defecto la acción `dotify`. Si algo no tiene mapeo y no empieza por un `.` en su nombre, `install.sh` aplicará un prefijo `.` y terminará en `~/.<nombre>`. Los enfoques previos no implicaban esta transformación por defecto.
78-
- Implementación actual: cuando ejecutas `./scripts/install.sh`, los elementos en la raíz de cada módulo que no tienen un mapeo y no empiezan con `.` se instalarán como `~/.<nombre>` automáticamente (dotify). Esto evita que el instalador cree archivos no ocultos en `$HOME` por defecto cuando no hay un mapeo explícito.
79-
-- Para evitar dotify (por ejemplo si prefieres que el archivo termine en `~/miapp`), añade un `.` al nombre en el módulo (`.miapp`) o añade una entrada en `install-mappings.yml` para ese archivo/directorio con la ruta deseada.
80-
-- Si quieres ver qué hará `install.sh` sin aplicarlo, ejecuta en un `TARGET` temporal (simulando `HOME`) y revisa los enlaces creados:
67+
- **Chicago95/Classic 98**: Temado profundo para **GTK 2, 3 y 4**.
68+
- **Paleta de Colores**: Basada en el esquema original: Gris Cálido (`#D4D0C8`) y Azul Marino (`#0A246A`).
69+
- **Efectos 3D**: Bordes biselados, widgets y scrollbars clásicos mediante CSS modular.
70+
- **Componentes de Escritorio**:
71+
- **Wayland**: [Labwc](https://github.com/labwc/labwc) (WM), [Waybar](https://github.com/Alexays/Waybar) (Taskbar), [Wofi](https://hg.sr.ht/~scoopta/wofi) (Start Menu).
72+
- **X11**: Openbox, XFWM4, Metacity.
8173

82-
```bash
83-
TMP=$(mktemp -d)
84-
TARGET="$TMP" ./scripts/install.sh modules/miapp
85-
find "$TMP" -maxdepth 3 -ls
86-
```
87-
esto te permitirá revisar los symlinks resultantes sin afectar a tu verdadero HOME.
88-
89-
Agregar un módulo — ejemplo práctico:
90-
91-
1. Crea un nuevo módulo: `modules/miapp/`.
92-
2. Añade la estructura de destino dentro del módulo. Ejemplo: `modules/miapp/.config/miapp/config.yml`.
93-
3. Prueba el módulo con `install.sh` (destino temporal para revisión):
94-
95-
```bash
96-
cd modules
97-
TMP=$HOME/tmp_install_test
98-
mkdir -p "$TMP"
99-
TARGET="$TMP" ../scripts/install.sh miapp
100-
ls -l "$TMP" # verifica lo que el instalador aplicaría
101-
```
74+
---
10275

103-
4. Para aplicar el módulo a tu HOME con el instalador:
104-
105-
```bash
106-
../scripts/install.sh modules/miapp
107-
```
108-
109-
5. Para revertir/desinstalar el módulo (quitar enlaces creados por el instalador):
110-
111-
```bash
112-
# Revertir manualmente: eliminar symlink y restaurar backup si existen
113-
rm -f "$HOME/.miapp"
114-
# o elimina los symlinks devueltos por el instalador de forma manual
115-
```
76+
## 📂 Estructura y Mapeo
11677

117-
6. Si necesitas una ruta XDG específica o marcar un archivo para `ignore`, actualiza `install-mappings.yml` con la entrada adecuada (p. ej. `myfile: xdg:myapp/config.yml` o `secret.file: ignore`).
78+
El "cerebro" del sistema es `install-mappings.yml`. El instalador lo utiliza para aplicar reglas declarativas:
11879

119-
Seguridad — secretos y plantillas (resumen):
80+
- `xdg:` → Enlaza a `~/.config/...`
81+
- `home:` → Enlaza directamente a la raíz del `$HOME`.
82+
- `ignore` → Ignora archivos de mantenimiento o temporales.
83+
- **Acción "Dotify" (Por defecto)**: Si un archivo no tiene regla explícita, el instalador le añade un punto `.` y lo enlaza en el HOME (ej: `bashrc``~/.bashrc`) para mantener el orden.
12084

121-
- Nunca subas credenciales o claves privadas. Mantén `*.example` como plantillas (p. ej. `.git-credentials.example`).
122-
- El instalador respeta `install-mappings.yml`. El pipeline de CI analiza `modules/` y falla si detecta archivos que parezcan contener secretos; se permiten archivos de plantilla o archivos que solo contienen comentarios.
85+
---
12386

124-
Contribuciones y pruebas:
87+
## 🤝 Contribuciones y Seguridad
12588

126-
- Añade un módulo pequeño con su README y pruebas básicas. El CI ejecuta pruebas para comprobar que `./scripts/install.sh` aplica correctamente los symlinks y que `install-mappings.yml` cubre los archivos raíz de cada módulo.
127-
- Si agregas un módulo que incluye archivos sensibles, proporciona primero un `*.example` y marca la ruta real como `ignore` en `install-mappings.yml`.
89+
- **Backups**: Ante cualquier conflicto, el instalador protege tus archivos originales en `~/.dotfiles_backup/` con un timestamp.
90+
- **Sanitización**: Normalización automática de archivos para asegurar que funcionen en Linux incluso si fueron descargados en Windows.
91+
- **Seguridad**: Evita subir secretos. El CI escanea proactivamente en busca de credenciales antes de aceptar cambios.
12892

129-
Si quieres más ejemplos o que agregue un módulo por defecto al instalador, dime cuáles y lo hago.
93+
---
13094

131-
--------------------------------------------------------------
95+
*“Everything is a link, until it's a backup.”*

0 commit comments

Comments
 (0)