diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f6a525d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf +*.bat text eol=crlf +*.cmd text eol=crlf diff --git a/README.md b/README.md index f59b14e..2d5c9d7 100644 --- a/README.md +++ b/README.md @@ -1,119 +1,119 @@ -# 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` - - `w` — сохранить - - `h` — убрать подсветку поиска - - `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//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 команды - -## 🚀 Установка - -### Автоматическая (рекомендуется) - -```bash -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 вручную - -```bash -sudo apt install stow -cd /path/to/dotfiles -stow bash tmux vim zed vscode agents opencode codex claude gemini -``` - -После stow добавьте в `~/.bashrc` (если не используете `install.sh`): -```bash -[ -f ~/.bash_custom ] && source ~/.bash_custom -``` - -Создайте локальные настройки Claude: -```bash -cat > ~/.claude/settings.local.json <<'EOF' -{ - "model": "opus", - "effortLevel": "high" -} -EOF -``` - +# 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` + - `w` — сохранить + - `h` — убрать подсветку поиска + - `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//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 команды + +## 🚀 Установка + +### Автоматическая (рекомендуется) + +```bash +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 вручную + +```bash +sudo apt install stow +cd /path/to/dotfiles +stow bash tmux vim zed vscode agents opencode codex claude gemini +``` + +После stow добавьте в `~/.bashrc` (если не используете `install.sh`): +```bash +[ -f ~/.bash_custom ] && source ~/.bash_custom +``` + +Создайте локальные настройки Claude: +```bash +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. @@ -129,6 +129,7 @@ EOF **Быстрое применение из уже существующего `~/dotfiles`:** ```powershell +winget install --id Microsoft.PowerShell winget install twpayne.chezmoi # Применить только Windows-layer из репозитория @@ -176,102 +177,102 @@ Windows-слой в этом репозитории настраивает со - Проверять итоговые значения удобнее через `git config --global --includes --list --show-origin` ## 🔧 Требования - -### Linux/WSL -- Linux (протестировано на Ubuntu) -- Bash 4.0+ -- Tmux 2.0+ -- Vim 8.0+ - + +### Linux/WSL +- Linux (протестировано на Ubuntu) +- Bash 4.0+ +- Tmux 2.0+ +- Vim 8.0+ + ### Windows - Windows 10/11 с Developer Mode - PowerShell 7.x - [chezmoi](https://www.chezmoi.io/) - -## 📝 Дополнительные файлы - -Для полной настройки создайте: -- `~/.bash_aliases` — персональные алиасы -- `~/.env.secrets` — приватные переменные окружения (API ключи) - -## 🔑 Переменные окружения - -### Кастомные функции bash - -Файл `bash/.bash_functions` содержит пользовательские функции (proxy_on/off, myip и др.). -При использовании `stow bash` он будет доступен как `~/.bash_functions`. - -### Приватные переменные (секреты) - -1. Скопируйте шаблон: -```bash -cp bash/.env.secrets.example ~/.env.secrets -``` - -2. Отредактируйте и добавьте API ключи: -```bash -# 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-скрипт: - -```bash -# Вариант 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: -```bash -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 повторно: -```bash -mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S) -stow -vt ~ vscode -``` + +## 📝 Дополнительные файлы + +Для полной настройки создайте: +- `~/.bash_aliases` — персональные алиасы +- `~/.env.secrets` — приватные переменные окружения (API ключи) + +## 🔑 Переменные окружения + +### Кастомные функции bash + +Файл `bash/.bash_functions` содержит пользовательские функции (proxy_on/off, myip и др.). +При использовании `stow bash` он будет доступен как `~/.bash_functions`. + +### Приватные переменные (секреты) + +1. Скопируйте шаблон: +```bash +cp bash/.env.secrets.example ~/.env.secrets +``` + +2. Отредактируйте и добавьте API ключи: +```bash +# 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-скрипт: + +```bash +# Вариант 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: +```bash +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 повторно: +```bash +mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S) +stow -vt ~ vscode +``` diff --git a/chezmoi/.chezmoiscripts/run_20-configure-windows-terminal.ps1 b/chezmoi/.chezmoiscripts/run_20-configure-windows-terminal.ps1 index 46a8c46..f717e11 100644 --- a/chezmoi/.chezmoiscripts/run_20-configure-windows-terminal.ps1 +++ b/chezmoi/.chezmoiscripts/run_20-configure-windows-terminal.ps1 @@ -1,4 +1,4 @@ -if (-not $IsWindows) { +if (-not ($IsWindows -or $PSVersionTable.PSEdition -eq 'Desktop')) { return } @@ -262,6 +262,6 @@ if (-not $changed) { $backupPath = '{0}.bak-{1}' -f $settingsPath, (Get-Date -Format 'yyyyMMdd-HHmmss') Copy-Item -LiteralPath $settingsPath -Destination $backupPath -Force -$settings | ConvertTo-Json -Depth 100 | Set-Content -LiteralPath $settingsPath -Encoding utf8 +$settings | ConvertTo-Json -Depth 100 | Set-Content -LiteralPath $settingsPath -Encoding utf8BOM Write-Host "Updated Windows Terminal settings: $settingsPath" Write-Host "Backup saved to: $backupPath" diff --git a/chezmoi/.chezmoiscripts/run_before_10-migrate-gitconfig.ps1 b/chezmoi/.chezmoiscripts/run_before_10-migrate-gitconfig.ps1 index f2b99ee..c89a2f8 100644 --- a/chezmoi/.chezmoiscripts/run_before_10-migrate-gitconfig.ps1 +++ b/chezmoi/.chezmoiscripts/run_before_10-migrate-gitconfig.ps1 @@ -1,4 +1,4 @@ -if (-not $IsWindows) { +if (-not ($IsWindows -or $PSVersionTable.PSEdition -eq 'Desktop')) { return }