Files
dotfiles/AGENTS.md
T

116 lines
5.4 KiB
Markdown

# AGENTS.md
Инструкции для Codex при работе с этим репозиторием.
## Репозиторий
Dotfiles под управлением **chezmoi**. Исходники лежат в `~/dotfiles`, `chezmoi apply` разворачивает их в `$HOME`.
Файлы именуются по chezmoi-конвенции:
- `dot_` -> точка в имени файла или каталога: `dot_zshenv` -> `~/.zshenv`
- `private_` -> приватные права: `private_dot_ssh/` -> `~/.ssh/`
- `encrypted_*.age` -> зашифрованные секреты, расшифровываются при `chezmoi apply`
Корневые служебные файлы, не разворачиваемые в `$HOME`, описаны в `.chezmoiignore`: `README.md`, `CLAUDE.md`, `AGENTS.md`, `bootstrap.sh`, `.gitignore`, `.claude/`, `configs/`.
## Развёртывание
```bash
chezmoi apply # применить изменения
chezmoi diff # посмотреть будущие изменения
chezmoi status # краткий статус
chezmoi add ~/.some/file # начать отслеживать новый файл
chezmoi re-add # синхронизировать source после ручных правок в ~
```
На новой машине используется `bootstrap.sh`: устанавливает зависимости, создаёт `~/.ssh/sockets`, запускает `chezmoi apply --source "$DOTFILES_DIR"` и предлагает сменить shell на zsh.
## Шифрование
Age-ключ хранится вне репозитория: `~/.config/chezmoi/key.txt`.
Шаблон конфига chezmoi: `.chezmoi.toml.tmpl`.
Секреты в репозитории хранятся как `encrypted_*.age`, например:
- `dot_config/resticprofile/encrypted_pass.txt.age`
- `private_dot_ssh/encrypted_private_id_ed25519*.age`
Не расшифровывать и не коммитить plaintext-секреты.
## Структура
| Путь | Что настраивает |
|---|---|
| `dot_config/zsh/` | Zsh: модульный `.zshrc`, Powerlevel10k, конфиги в `config/*.zsh` |
| `dot_config/nvim/` | LazyVim на `lazy.nvim`, кастомные плагины в `lua/plugins/` |
| `dot_config/kitty/` | Основной терминал: Nord, FiraCode Nerd Font, opacity, startup fastfetch |
| `dot_config/alacritty/` | Запасной терминал |
| `dot_config/resticprofile/` | Профили restic/resticprofile |
| `dot_config/zed/` | Настройки Zed |
| `dot_config/micro/` | Настройки micro |
| `dot_config/fastfetch/` | Fastfetch |
| `dot_local/bin/` | Пользовательские скрипты |
| `private_dot_ssh/` | SSH-конфиг, публичные ключи, зашифрованные приватные ключи |
| `dot_codex/` | Глобальный конфиг Codex, разворачивается в `~/.codex` |
| `dot_claude/` | Глобальный конфиг Claude, разворачивается в `~/.claude` |
| `dot_gitconfig` | `~/.gitconfig` |
| `dot_gitignore_global` | `~/.gitignore_global` |
| `dot_tmux.conf`, `dot_tmux.conf.local` | tmux / oh-my-tmux |
| `dot_vimrc` | Vim |
## SSH
Основной файл: `private_dot_ssh/config`.
Дополнительные секции лежат в `private_dot_ssh/config.d/` с числовым префиксом:
- `00-globals.conf` — глобальные дефолты
- `10-local.conf` — локальная сеть
- `20-selfhost.conf` — self-hosted сервисы
- `30-corporate.conf` — рабочие хосты
- `40-proxy.conf` — proxy jump / socks
Приватные ключи зашифрованы через age. Если нужен ручной импорт, источник — self-hosted Bitwarden `pass.ada-dev.ru`.
## Zsh
`dot_zshenv` задаёт `ZDOTDIR=~/.config/zsh`.
`dot_config/zsh/dot_zshrc` загружает модули:
1. `env.zsh`
2. `options.zsh`
3. `plugins.zsh`
4. `completion.zsh`
5. `aliases.zsh`
6. `functions.zsh`
7. `keybindings.zsh`
8. `prompt.zsh`
Промпт — Powerlevel10k, конфиг: `dot_config/zsh/dot_p10k.zsh`.
Машинно-специфичные настройки: `~/.config/zsh/config/local.zsh`, вне репозитория.
## Nvim
LazyVim. Кастомные плагины:
- `dot_config/nvim/lua/plugins/colorscheme.lua` — Nord
- `dot_config/nvim/lua/plugins/langmapper.lua` — маппинги для русской раскладки ЙЦУКЕН
## Restic
Профили: `dot_config/resticprofile/profiles.yaml`.
Хранилище — Яндекс.Диск через rclone remote `yadisk`, зеркало — `cloud-pc`.
Пароль репозитория — `encrypted_pass.txt.age`, расшифровывается chezmoi.
```bash
backup-menu # интерактивное меню, алиас bm
resticprofile -n dotfiles backup
resticprofile -n dotfiles snapshots
resticprofile -n dotfiles restore latest /tmp/restore
```
На новой машине нужно один раз настроить rclone remotes `yadisk` и `cloud-pc`.
## Коммиты
`backup: YYYY-MM-DD HH:MM` — для плановых бэкапов.
Для изменений конфигов — обычные описательные сообщения.
Не добавлять Codex в co-authors без прямого запроса.