migrate: stow → chezmoi

- restructure repo to chezmoi conventions (dot_ prefix, private_dot_ssh/)
- add nvim config (was untracked)
- encrypt restic pass.txt with age
- remove stow artifacts (.stow-local-ignore, stow package dirs)
- update bootstrap.sh to use chezmoi apply
- remove runtime files from tracking (micro buffers, zed backup)
This commit is contained in:
Dmitry
2026-05-13 18:28:01 +03:00
parent 3c680e6f68
commit 7c8a4893de
56 changed files with 789 additions and 185 deletions
+95
View File
@@ -0,0 +1,95 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Репозиторий
Dotfiles под управлением **chezmoi**. Исходники в `~/dotfiles`, chezmoi разворачивает их в `$HOME`.
Файлы именуются по chezmoi-конвенции:
- `dot_` префикс → `.` в имени файла/папки (`dot_zshenv``~/.zshenv`)
- `private_` префикс → права 700 (`private_dot_ssh/``~/.ssh/`)
- `encrypted_` + суффикс `.age` → расшифровывается при apply (`encrypted_pass.txt.age``pass.txt`)
Каталог `configs/` — служебные конфиги вне chezmoi (danted, awg, telemt), не разворачиваются.
## Развёртывание
```bash
chezmoi apply # применить изменения
chezmoi diff # посмотреть что изменится
chezmoi status # краткий статус
chezmoi add ~/.some/file # начать отслеживать новый файл
chezmoi re-add # синхронизировать source после ручных правок в ~
```
На новой машине — `bootstrap.sh` (устанавливает зависимости + запускает `chezmoi apply`).
## Шифрование
age-ключ: `~/.config/chezmoi/key.txt` (вне репо, хранить в безопасном месте).
Конфиг chezmoi: `~/.config/chezmoi/chezmoi.toml`.
Зашифровать файл:
```bash
age -r age1a7wrnp3gw725pmhgffm6kurephmad9220g057mrwgvkrr5xcws7qg5z2xk \
-o dot_config/resticprofile/encrypted_pass.txt.age \
dot_config/resticprofile/pass.txt
```
## SSH-ключи
Ключи хранятся в self-hosted Bitwarden (`pass.ada-dev.ru`):
```bash
bw config server https://pass.ada-dev.ru
bw login
bw get item <название ключа> | jq -r '.sshKey.privateKey' > ~/.ssh/id_ed25519
```
## SSH-конфиг
`private_dot_ssh/config` + `config.d/` с числовым префиксом (чем меньше — тем выше приоритет):
- `00-globals.conf` — глобальные дефолты
- `10-local.conf` — локальная сеть
- `20-selfhost.conf` — self-hosted сервисы
- `30-corporate.conf` — рабочие хосты
- `40-proxy.conf` — proxy jump / socks
## Zsh-конфиг
`dot_config/zsh/dot_zshrc``~/.config/zsh/.zshrc`, загружает модули из `config/*.zsh`:
`env.zsh``options.zsh``plugins.zsh` (zinit) → `completion.zsh``aliases.zsh``functions.zsh``keybindings.zsh``prompt.zsh`
Промпт — Powerlevel10k, конфиг в `dot_config/zsh/dot_p10k.zsh`.
Машинно-специфичные настройки — `~/.config/zsh/config/local.zsh` (вне репо).
## Nvim
LazyVim на базе `lazy.nvim`. Кастомные плагины в `dot_config/nvim/lua/plugins/`:
- `colorscheme.lua` — тема Nord (`gbprod/nord.nvim`)
- `langmapper.lua` — дублирует маппинги для русской раскладки ЙЦУКЕН
## Kitty
Основной терминал. `dot_config/kitty/startup.conf` запускает fastfetch при старте. Nord, FiraCode Nerd Font 14pt, opacity 0.90.
## Restic-бэкапы
Профили в `dot_config/resticprofile/profiles.yaml`. Хранилище — Яндекс.Диск через rclone remote `yadisk`. Пароль репозитория — `encrypted_pass.txt.age` (расшифровывается chezmoi при apply).
| Профиль | Источник | Частота |
|---|---|---|
| `dotfiles` | `~/.dotfiles`, `~/.config`, `~/.ssh` | каждые 6 ч |
| `projects` | `~/Documents/Projects` | каждый час |
| `vaults` | `~/Documents/Vaults` | каждый час |
| `files` | `~/Documents/Files` | ежедневно 02:15 |
```bash
resticprofile -n dotfiles backup
resticprofile snapshots
resticprofile -n dotfiles restore latest /tmp/restore
```
## Коммиты
`backup: YYYY-MM-DD HH:MM` — для плановых бэкапов; обычные описательные сообщения — для изменений конфигов.