- Зачем: - нужно убрать line-ending noise в репозитории и сделать Windows-слой безопаснее для запуска без установленного pwsh. - Что: - добавлена `.gitattributes` с LF-базой для текста и CRLF-исключениями для `.bat` и `.cmd`. - `README.md` нормализован в LF и quick start дополнен явной установкой PowerShell 7. - `chezmoi`-скрипты переведены на guard, совместимый с PowerShell 5.1, а запись `settings.json` переведена на `utf8BOM`. - Проверка: - `git diff --check`. - `powershell.exe -NoProfile -ExecutionPolicy Bypass -File chezmoi\\.chezmoiscripts\\run_before_10-migrate-gitconfig.ps1`. - `powershell.exe -NoProfile -ExecutionPolicy Bypass -File chezmoi\\.chezmoiscripts\\run_20-configure-windows-terminal.ps1`. - `chezmoi -S C:\\Users\\dmitry\\dotfiles\\chezmoi apply --dry-run --verbose`.
14 KiB
Dotfiles
Персональные конфигурационные файлы для настройки рабочего окружения.
📦 Содержимое
Bash
- Файлы:
bash/.bash_custom,bash/.bash_functions,bash/.bash_prompt - Подключение кастомных bash-файлов (функции, prompt, секреты) поверх стандартного
~/.bashrc - Кастомный двухстрочный prompt (подключается из
~/.bash_prompt) - Поддержка цветного вывода и автодополнения
Tmux
- Файл:
tmux/.tmux.conf - Два префикса:
Ctrl+b(стандартный) иCtrl+Space(удобный) - Визуальный стиль с синей цветовой схемой
- Vi-режим для копирования
- Горячие клавиши:
|/-— разделение панелейAlt+стрелки— изменение размера панелей и переключение оконr— перезагрузка конфига
Vim
- Файл:
vim/.vimrc - Минималистичная конфигурация без плагинов
- 2 пробела вместо табов (оптимально для YAML/XML)
- Поддержка мыши и подсветка поиска
- Leader key:
Space<Space>w— сохранить<Space>h— убрать подсветку поиска<Space>p— вставка без форматирования
Zed
- Директория:
zed/.config/zed/ - Структура для конфигурации Zed редактора
VS Code (WSL)
- Файл:
vscode/.vscode-server/server-env-setup - Поддержка
~/.vscode-server/server-env-setupдля VS Code Server в WSL - Подгрузка
~/.env.secretsдля расширений, задач/debug и терминалов VS Code - Автоматическая настройка прокси: если
hproxy.localрезолвится, выставляютсяHTTP_PROXY,HTTPS_PROXY,ALL_PROXY(socks5),NO_PROXYи их lowercase-варианты - Режим
fail-open: если~/.env.secretsотсутствует или не загружается — warning в stderr, VS Code продолжает запуск
Opencode
- Директория:
opencode/.config/opencode/ - Конфигурация AI-ассистента opencode с MCP-серверами:
- context7 — документация библиотек
- web-reader — чтение веб-страниц
- web-search-prime — поиск в интернете
- zread — чтение GitHub репозиториев
- playwright — браузерная автоматизация
- Требует переменных окружения (см.
.env.example) - Скиллы берутся из общего пакета
agents/.agents/skills/через симлинк~/.config/opencode/skills
Agents (shared skills)
- Директория:
agents/.agents/skills/ - Каноничное место для общих скиллов в формате
~/.agents/skills/<name>/SKILL.md
Codex
- Директория:
codex/.codex/skills/ - Тонкие симлинки в
~/.codex/skills/на общие skills из~/.agents/skills/
Claude
- Директория:
claude/.claude/ - Тонкий симлинк
~/.claude/skillsна общие skills из~/.agents/skills/ - Двухуровневые настройки:
settings.json(в dotfiles, read-only) — стабильная база: permissions, statusLinesettings.local.json(локальный, не в git) — машинно-специфичное: model, effortLevel
- Claude Code мержит оба файла,
settings.local.jsonимеет приоритет settings.jsonзащищёнchmod 444, чтобы Claude Code не перезаписывал tracked файл
Gemini
- Директория:
gemini/.gemini/ - Политики для Gemini CLI: pre-approved readonly команды
🚀 Установка
Автоматическая (рекомендуется)
sudo apt install stow
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
cd ~/dotfiles
./install.sh
Скрипт install.sh:
- Применяет все stow пакеты
- Создаёт
~/.claude/settings.local.jsonс дефолтными model/effortLevel - Защищает
settings.jsonот перезаписи (chmod 444) - Автоматически добавляет подключение bash_custom в
~/.bashrc - В WSL предлагает настроить автоматический резолв
hproxy.local(см. ниже)
Stow вручную
sudo apt install stow
cd /path/to/dotfiles
stow bash tmux vim zed vscode agents opencode codex claude gemini
После stow добавьте в ~/.bashrc (если не используете install.sh):
[ -f ~/.bash_custom ] && source ~/.bash_custom
Создайте локальные настройки Claude:
cat > ~/.claude/settings.local.json <<'EOF'
{
"model": "opus",
"effortLevel": "high"
}
EOF
Windows (chezmoi)
Для Windows предпочтителен отдельный source dir chezmoi/ внутри этого репозитория. Это позволяет держать Windows-слой рядом с остальными dotfiles, не ломая существующий stow/install.sh workflow для Linux/WSL.
💡 Примечание: chezmoi также работает на Linux/WSL, но stow предпочтительнее для полной функциональности.
⚠️ Требования:
- Developer Mode должен быть включён (для создания симлинков)
Settings → System → For developers → Developer Mode → On
pwsh7.x для повседневной работыWindows PowerShell 5.1остаётся legacy-режимом и не тюнится агрессивно
Быстрое применение из уже существующего ~/dotfiles:
winget install --id Microsoft.PowerShell
winget install twpayne.chezmoi
# Применить только Windows-layer из репозитория
chezmoi -S "$HOME\dotfiles\chezmoi" apply
Этот режим не требует менять глобальный source chezmoi: достаточно запускать chezmoi -S "$HOME\dotfiles\chezmoi" apply из уже существующего репозитория.
Windows-слой в этом репозитории настраивает современный PowerShell 7 как основной рабочий shell. Windows PowerShell 5.1 сознательно остаётся legacy-режимом совместимости и не получает новые helper-функции, форсированный UTF-8 или другие агрессивные изменения без отдельного явного запроса.
Что делает текущий Windows-layer:
- ✅ ставит маленький live-stub в
~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1 - ✅ хранит основную логику
pwshв~/.config/powershell/profile.ps1 - ✅ хранит Git baseline в
~/.gitconfig, а локальные overrides в~/.gitconfig.local - ✅ оставляет hook'и для локальных добавок:
~/.config/powershell/profile.extra.ps1и~/.config/powershell/profile.d/*.ps1 - ✅ идемпотентно приводит
Windows Terminalк базовому состоянию без полной перезаписи всегоsettings.json
Какие helper-функции есть в pwsh:
Reload-Profile— перечитывает текущий профиль без перезапуска сессииwhich— показывает все найденные команды по имени черезGet-Command -Alltouch— создаёт файл или обновляетLastWriteTimemkcd— создаёт директорию и сразу переходит в неёopen— открывает путь черезInvoke-Itemcroot— переходит в корень текущего Git-репозиторияproxy_on— включаетHTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXYдляhproxy.local:12334proxy_off— очищает proxy-переменные текущей сессииmyip— быстро показывает текущий внешний IPwt-here— открывает новое окно Windows Terminal в текущей директорииwt-tab-here— открывает новую вкладку Windows Terminal в текущей директорииwt-split-here— открывает split-pane Windows Terminal в текущей директории
Что сознательно не делается:
- ❌
Windows PowerShell 5.1не форсируется в UTF-8 и не меняется без явного запроса - ❌ Linux/WSL-поток не переносится в chezmoi и продолжает жить через
stow/install.sh
Что фиксирует Git baseline для Windows:
core.autocrlf = falsecore.eol = lfcore.quotepath = falsecore.longpaths = truefetch.prune = truepull.ff = onlyinit.defaultBranch = mainuser.name,user.email,core.editorиcore.sshCommandв baseline не входят и должны жить в~/.gitconfig.local- Проверять итоговые значения удобнее через
git config --global --includes --list --show-origin
🔧 Требования
Linux/WSL
- Linux (протестировано на Ubuntu)
- Bash 4.0+
- Tmux 2.0+
- Vim 8.0+
Windows
- Windows 10/11 с Developer Mode
- PowerShell 7.x
- chezmoi
📝 Дополнительные файлы
Для полной настройки создайте:
~/.bash_aliases— персональные алиасы~/.env.secrets— приватные переменные окружения (API ключи)
🔑 Переменные окружения
Кастомные функции bash
Файл bash/.bash_functions содержит пользовательские функции (proxy_on/off, myip и др.).
При использовании stow bash он будет доступен как ~/.bash_functions.
Приватные переменные (секреты)
- Скопируйте шаблон:
cp bash/.env.secrets.example ~/.env.secrets
- Отредактируйте и добавьте API ключи:
# Context7 API (https://context7.com)
export CONTEXT7_API_KEY="your_context7_api_key_here"
# Z.AI API для LLM, поиска и чтения (https://z.ai)
export ZAI_API_KEY="your_zai_api_key_here"
Файл ~/.env.secrets автоматически подгружается при старте shell.
WSL: настройка hproxy.local
Имя hproxy.local используется как алиас для хоста, на котором работает прокси-сервер. Это позволяет функциям proxy_on/proxy_off и VS Code Server не зависеть от конкретного IP-адреса.
NAT mode (по умолчанию в WSL2) — IP шлюза меняется при каждом запуске, поэтому нужен автоматический boot-скрипт:
# Вариант 1: через install.sh (интерактивно)
./install.sh # ответьте "y" на вопрос про wsl.conf
# Вариант 2: вручную
sudo tee -a /etc/wsl.conf <<'EOF'
[boot]
command = "/path/to/dotfiles/scripts/setup-hproxy.sh"
EOF
После изменения wsl.conf перезапустите WSL: wsl --shutdown.
Обновить hproxy.local без перезапуска WSL:
sudo scripts/setup-hproxy.sh
# или
update_hproxy # интерактивная функция из .bash_functions
Mirror mode (networkingMode=mirrored в .wslconfig) — WSL разделяет сетевой стек с хостом, IP не меняется. Достаточно один раз прописать запись в Windows hosts:
# C:\Windows\System32\drivers\etc\hosts
192.168.1.100 hproxy.local
VS Code Server в WSL
Файл vscode/.vscode-server/server-env-setup выполняется при каждом старте VS Code Server в WSL и делает две вещи:
-
Загружает
~/.env.secrets— API ключи становятся доступны расширениям, задачам и терминалам VS Code. Если файл отсутствует или содержит ошибку, выводится warning в stderr, запуск не блокируется. -
Настраивает прокси — если
hproxy.localрезолвится (через/etc/hostsили DNS в режиме mirror), автоматически выставляются:HTTP_PROXY/http_proxy→http://hproxy.local:12334HTTPS_PROXY/https_proxy→http://hproxy.local:12334ALL_PROXY/all_proxy→socks5://hproxy.local:12334NO_PROXY/no_proxy→hproxy.local,localhost,127.0.0.1,.concept-software.ru
После установки/обновления файла сделайте одно из действий:
Developer: Reload Windowв VS Code- или
Remote-WSL: Reconnect to WSL
Если у вас уже есть локальный ~/.vscode-server/server-env-setup, stow может сообщить конфликт.
Тогда сохраните старую версию и примените stow повторно:
mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S)
stow -vt ~ vscode