Dmitry DementievandClaude Opus 4.6 1963b6a117 refactor(windows): причёсан стиль chezmoi-скриптов и pwsh-профиля
- Зачем:
  - код Codex работал, но был тяжёл для чтения и сопровождения: 4 naming-конвенции, скрытая мутация $script:changed, 298 строк WT-скрипта почти без комментариев.
- Что:
  - profile.ps1: комментарии на русском перед каждой функцией, секционные разделители, wt-here → wt_here (единый snake_case), Get-PublicIp упрощён до Invoke-RestMethod, Chocolatey boilerplate обрезан.
  - WT-скрипт: Set/Remove-Prop возвращают bool вместо мутации $script:changed, naming выровнен в PascalCase, хелперы переименованы (Get-Prop, Set-Prop, Test-IsPS7, Test-IsStockPS7), комментарии к каждому блоку логики, вывод на русском.
  - Git-миграция: блок комментариев с описанием 4 сценариев, пояснение 3 вариантов ManagedStubs, naming выровнен, вывод на русском.
- Проверка:
  - pwsh -NoProfile -Command "[System.Management.Automation.Language.Parser]::ParseFile(...)" — синтаксис всех трёх файлов OK.
  - chezmoi -S "$HOME\dotfiles\chezmoi" apply --dry-run --verbose.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 17:59:59 +03:00
2026-02-28 00:20:30 +03:00
2026-02-28 00:20:30 +03:00

Dotfiles

Персональные конфигурации для Linux/WSL (stow) и Windows (chezmoi).

🚀 Quick start

Linux / WSL

git clone https://github.com/ddmitry/dotfiles ~/dotfiles
cd ~/dotfiles
./install.sh

install.sh применяет stow-пакеты, настраивает Claude/Opencode, подключает ~/.bash_custom в ~/.bashrc и в WSL предлагает настроить hproxy.local.

Windows

winget install --id Microsoft.PowerShell
winget install twpayne.chezmoi
chezmoi -S "$HOME\dotfiles\chezmoi" apply

Chezmoi использует отдельный source dir chezmoi/ внутри этого репозитория, не трогая stow/install.sh workflow.

🔧 Требования

Linux / WSL

  • Ubuntu / Debian
  • GNU stow
  • Bash 4.0+, Tmux 2.0+, Vim 8.0+

Windows

  • Windows 10/11 + Developer Mode (Settings → System → For developers)
  • PowerShell 7.x
  • chezmoi

Windows PowerShell 5.1 остаётся legacy-режимом совместимости — не форсируется в UTF-8 и не тюнится.

📦 Что включено

Linux / WSL (stow)

Пакет Что делает
bash Кастомный prompt, функции (proxy_on/off, myip), подгрузка секретов
tmux Два префикса (Ctrl+b, Ctrl+Space), vi-режим, split по | / -
vim Минимальный .vimrc без плагинов, 2 пробела, leader = Space
zed Конфигурация Zed редактора
vscode server-env-setup для VS Code Server в WSL: секреты + авто-прокси

install.sh дополнительно настраивает opencode (симлинки, MCP-конфиг), claude (копирует settings.json с chmod 444, создаёт settings.local.json) и подключает bash_custom.

Windows (chezmoi)

  • PowerShell 7 profile — live-stub в ~/Documents/PowerShell/ загружает managed profile из ~/.config/powershell/profile.ps1
  • Git baseline — ~/.gitconfig с managed настройками, ~/.gitconfig.local для персональных overrides
  • Windows Terminal — идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт
  • UTF-8 — chcp 65001 + Console.InputEncoding/OutputEncoding только для pwsh 7, не для PS 5.1
  • Extension points — ~/.config/powershell/profile.extra.ps1 и profile.d/*.ps1 для локальных добавок

AI-инструменты (кросс-платформа)

Общие скиллы живут в agents/.agents/skills/ и расшариваются через симлинки.

Инструмент Что настраивается
Agents Каноничное хранилище скиллов: ~/.agents/skills/<name>/SKILL.md
Claude ~/.claude/skills → симлинк на agents; settings.json (read-only) + settings.local.json (локальный)
Opencode MCP-серверы (context7, web-reader, playwright и др.), ~/.config/opencode/skills → симлинк на agents
Codex ~/.codex/skills/ → симлинки на agents
Gemini Политики для CLI: pre-approved readonly команды

⚙️ Настройка

Секреты (.env.secrets)

cp bash/.env.secrets.example ~/.env.secrets

Содержимое — API-ключи для AI-инструментов:

export CONTEXT7_API_KEY="..."    # https://context7.com
export ZAI_API_KEY="..."         # https://z.ai

Файл подгружается при старте bash и VS Code Server. Не трекается в git.

Прокси (hproxy.local)

Имя hproxy.local — алиас хоста с прокси. Все инструменты (bash, pwsh, VS Code Server) используют его для proxy_on/off, не завязываясь на конкретный IP.

Порты: HTTP/HTTPS — hproxy.local:12334, SOCKS5 — socks5://hproxy.local:12334.

WSL NAT mode (IP шлюза меняется при каждом запуске):

# Через install.sh (интерактивно, ответить "y" на вопрос про wsl.conf)
./install.sh

# Или вручную:
sudo tee -a /etc/wsl.conf <<'EOF'

[boot]
command = "/path/to/dotfiles/scripts/setup-hproxy.sh"
EOF

После изменения wsl.conf — wsl --shutdown. Обновить без перезапуска: sudo scripts/setup-hproxy.sh или update_hproxy.

WSL Mirror mode (networkingMode=mirrored) — IP не меняется, достаточно одной записи:

# C:\Windows\System32\drivers\etc\hosts
192.168.1.100  hproxy.local

VS Code Server — vscode/.vscode-server/server-env-setup автоматически подхватывает hproxy.local и выставляет все proxy-переменные (HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY и lowercase-варианты). Если hproxy.local не резолвится — прокси не включается, запуск не блокируется.

Windows pwsh — proxy_on / proxy_off / myip работают аналогично bash-версиям.

Git baseline

На всех платформах фиксируются настройки для предсказуемого поведения:

Ключ Значение Зачем
core.autocrlf false Не переписывать line endings
core.eol lf Дефолт ближе к Linux/macOS
core.quotepath false Кириллица в путях читаема
core.longpaths true Длинные пути на Windows
fetch.prune true Убирать удалённые ветки
pull.ff only Защита от случайных merge commit
init.defaultBranch main —

Персональные настройки (user.name, user.email, core.editor, core.sshCommand) живут в ~/.gitconfig.local.

На Windows chezmoi при первом apply мигрирует существующий ~/.gitconfig в ~/.gitconfig.local и подставляет managed baseline. На Linux baseline задаётся вручную или через скрипты.

Проверка: git config --global --includes --list --show-origin.

Для кроссплатформенных репозиториев рекомендуется .gitattributes:

* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf

📖 Справочник

Bash-функции (~/.bash_functions)

Функция Описание
proxy_on Включает HTTP/HTTPS/SOCKS5 прокси через hproxy.local:12334
proxy_off Очищает proxy-переменные
myip Показывает текущий внешний IP
update_hproxy Обновляет hproxy.local в /etc/hosts (WSL NAT mode)

PowerShell-функции (~/.config/powershell/profile.ps1)

Функция Описание
proxy_on Включает HTTP/HTTPS/SOCKS5 прокси через hproxy.local:12334
proxy_off Очищает proxy-переменные
myip Показывает текущий внешний IP
Reload-Profile Перечитывает профиль без перезапуска сессии
which Get-Command -All по имени
touch Создаёт файл или обновляет LastWriteTime
mkcd Создаёт директорию и переходит в неё
open Invoke-Item — открывает путь
croot Переходит в корень текущего Git-репозитория
wt-here Новое окно Windows Terminal в текущей директории
wt-tab-here Новая вкладка в текущей директории
wt-split-here Split-pane в текущей директории

Точки расширения

Файл Назначение
~/.env.secrets API-ключи, подгружается bash и VS Code Server
~/.bash_aliases Персональные алиасы bash
~/.gitconfig.local Персональные Git-настройки (user.name, core.editor и т.д.)
~/.config/powershell/profile.extra.ps1 Локальные дополнения к pwsh-профилю
~/.config/powershell/profile.d/*.ps1 Фрагменты, загружаемые по алфавиту
~/.claude/settings.local.json Машинно-специфичные настройки Claude Code (model, effortLevel)

💡 Дизайн-решения

Почему stow на Linux + chezmoi на Windows? stow проще и покрывает весь Linux/WSL workflow. chezmoi нужен на Windows, где stow недоступен и нужны run-скрипты (миграция .gitconfig, настройка Windows Terminal). Два инструмента живут рядом и не мешают друг другу: chezmoi использует отдельный source dir chezmoi/, а .chezmoiignore исключает Linux-файлы на Windows.

Почему Windows PowerShell 5.1 не трогается? Форсирование UTF-8 и изменение профиля PS 5.1 может сломать старые скрипты, .bat/.cmd и консольные утилиты. PS 7 — основной shell, PS 5.1 — режим совместимости.

Почему Claude settings.json копируется, а не симлинкается? Claude Code перезаписывает settings.json при любом изменении настроек. Если файл — симлинк на tracked файл в git, это создаёт нежелательные diff-ы. Копия с chmod 444 защищает от перезаписи; машинно-специфичные настройки уходят в settings.local.json.

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%