Dmitry Dementiev f9083af8b2 fix(windows): исправлены LF и совместимость chezmoi с PS 5.1
- Зачем:
  - нужно убрать 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`.
2026-03-22 17:12:59 +03:00
2026-02-28 00:20:30 +03:00
2026-02-28 00:20:30 +03:00

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, statusLine
    • settings.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

  • pwsh 7.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 -All
  • touch — создаёт файл или обновляет LastWriteTime
  • mkcd — создаёт директорию и сразу переходит в неё
  • open — открывает путь через Invoke-Item
  • croot — переходит в корень текущего Git-репозитория
  • proxy_on — включает HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY для hproxy.local:12334
  • proxy_off — очищает proxy-переменные текущей сессии
  • myip — быстро показывает текущий внешний IP
  • wt-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 = false
  • core.eol = lf
  • core.quotepath = false
  • core.longpaths = true
  • fetch.prune = true
  • pull.ff = only
  • init.defaultBranch = main
  • user.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.

Приватные переменные (секреты)

  1. Скопируйте шаблон:
cp bash/.env.secrets.example ~/.env.secrets
  1. Отредактируйте и добавьте 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 и делает две вещи:

  1. Загружает ~/.env.secrets — API ключи становятся доступны расширениям, задачам и терминалам VS Code. Если файл отсутствует или содержит ошибку, выводится warning в stderr, запуск не блокируется.

  2. Настраивает прокси — если hproxy.local резолвится (через /etc/hosts или DNS в режиме mirror), автоматически выставляются:

    • HTTP_PROXY / http_proxy → http://hproxy.local:12334
    • HTTPS_PROXY / https_proxy → http://hproxy.local:12334
    • ALL_PROXY / all_proxy → socks5://hproxy.local:12334
    • NO_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
S
Description
Личные dotfiles: Bash, Tmux, Vim, VS Code, ИИ-агенты и proxy-client
Readme
1.7 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 46.6%
Shell 22.1%
JavaScript 20%
PowerShell 11%
VBScript 0.2%