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`.
This commit is contained in:
1 parent
9b66fc70fc
commit
f9083af8b2
4 files changed
+218
-214
No files matched your search
@@ -0,0 +1,3 @@
|
|||||||
|
* text=auto eol=lf
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
@@ -1,119 +1,119 @@
|
|||||||
# Dotfiles
|
# Dotfiles
|
||||||
|
|
||||||
Персональные конфигурационные файлы для настройки рабочего окружения.
|
Персональные конфигурационные файлы для настройки рабочего окружения.
|
||||||
|
|
||||||
## 📦 Содержимое
|
## 📦 Содержимое
|
||||||
|
|
||||||
### Bash
|
### Bash
|
||||||
- **Файлы:** `bash/.bash_custom`, `bash/.bash_functions`, `bash/.bash_prompt`
|
- **Файлы:** `bash/.bash_custom`, `bash/.bash_functions`, `bash/.bash_prompt`
|
||||||
- Подключение кастомных bash-файлов (функции, prompt, секреты) поверх стандартного `~/.bashrc`
|
- Подключение кастомных bash-файлов (функции, prompt, секреты) поверх стандартного `~/.bashrc`
|
||||||
- Кастомный двухстрочный prompt (подключается из `~/.bash_prompt`)
|
- Кастомный двухстрочный prompt (подключается из `~/.bash_prompt`)
|
||||||
- Поддержка цветного вывода и автодополнения
|
- Поддержка цветного вывода и автодополнения
|
||||||
|
|
||||||
### Tmux
|
### Tmux
|
||||||
- **Файл:** `tmux/.tmux.conf`
|
- **Файл:** `tmux/.tmux.conf`
|
||||||
- Два префикса: `Ctrl+b` (стандартный) и `Ctrl+Space` (удобный)
|
- Два префикса: `Ctrl+b` (стандартный) и `Ctrl+Space` (удобный)
|
||||||
- Визуальный стиль с синей цветовой схемой
|
- Визуальный стиль с синей цветовой схемой
|
||||||
- Vi-режим для копирования
|
- Vi-режим для копирования
|
||||||
- Горячие клавиши:
|
- Горячие клавиши:
|
||||||
- `|` / `-` — разделение панелей
|
- `|` / `-` — разделение панелей
|
||||||
- `Alt+стрелки` — изменение размера панелей и переключение окон
|
- `Alt+стрелки` — изменение размера панелей и переключение окон
|
||||||
- `r` — перезагрузка конфига
|
- `r` — перезагрузка конфига
|
||||||
|
|
||||||
### Vim
|
### Vim
|
||||||
- **Файл:** `vim/.vimrc`
|
- **Файл:** `vim/.vimrc`
|
||||||
- Минималистичная конфигурация без плагинов
|
- Минималистичная конфигурация без плагинов
|
||||||
- 2 пробела вместо табов (оптимально для YAML/XML)
|
- 2 пробела вместо табов (оптимально для YAML/XML)
|
||||||
- Поддержка мыши и подсветка поиска
|
- Поддержка мыши и подсветка поиска
|
||||||
- Leader key: `Space`
|
- Leader key: `Space`
|
||||||
- `<Space>w` — сохранить
|
- `<Space>w` — сохранить
|
||||||
- `<Space>h` — убрать подсветку поиска
|
- `<Space>h` — убрать подсветку поиска
|
||||||
- `<Space>p` — вставка без форматирования
|
- `<Space>p` — вставка без форматирования
|
||||||
|
|
||||||
### Zed
|
### Zed
|
||||||
- **Директория:** `zed/.config/zed/`
|
- **Директория:** `zed/.config/zed/`
|
||||||
- Структура для конфигурации Zed редактора
|
- Структура для конфигурации Zed редактора
|
||||||
|
|
||||||
### VS Code (WSL)
|
### VS Code (WSL)
|
||||||
- **Файл:** `vscode/.vscode-server/server-env-setup`
|
- **Файл:** `vscode/.vscode-server/server-env-setup`
|
||||||
- Поддержка `~/.vscode-server/server-env-setup` для VS Code Server в WSL
|
- Поддержка `~/.vscode-server/server-env-setup` для VS Code Server в WSL
|
||||||
- Подгрузка `~/.env.secrets` для расширений, задач/debug и терминалов VS Code
|
- Подгрузка `~/.env.secrets` для расширений, задач/debug и терминалов VS Code
|
||||||
- Автоматическая настройка прокси: если `hproxy.local` резолвится, выставляются `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` (socks5), `NO_PROXY` и их lowercase-варианты
|
- Автоматическая настройка прокси: если `hproxy.local` резолвится, выставляются `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` (socks5), `NO_PROXY` и их lowercase-варианты
|
||||||
- Режим `fail-open`: если `~/.env.secrets` отсутствует или не загружается — warning в stderr, VS Code продолжает запуск
|
- Режим `fail-open`: если `~/.env.secrets` отсутствует или не загружается — warning в stderr, VS Code продолжает запуск
|
||||||
|
|
||||||
### Opencode
|
### Opencode
|
||||||
- **Директория:** `opencode/.config/opencode/`
|
- **Директория:** `opencode/.config/opencode/`
|
||||||
- Конфигурация AI-ассистента opencode с MCP-серверами:
|
- Конфигурация AI-ассистента opencode с MCP-серверами:
|
||||||
- **context7** — документация библиотек
|
- **context7** — документация библиотек
|
||||||
- **web-reader** — чтение веб-страниц
|
- **web-reader** — чтение веб-страниц
|
||||||
- **web-search-prime** — поиск в интернете
|
- **web-search-prime** — поиск в интернете
|
||||||
- **zread** — чтение GitHub репозиториев
|
- **zread** — чтение GitHub репозиториев
|
||||||
- **playwright** — браузерная автоматизация
|
- **playwright** — браузерная автоматизация
|
||||||
- Требует переменных окружения (см. `.env.example`)
|
- Требует переменных окружения (см. `.env.example`)
|
||||||
- Скиллы берутся из общего пакета `agents/.agents/skills/` через симлинк `~/.config/opencode/skills`
|
- Скиллы берутся из общего пакета `agents/.agents/skills/` через симлинк `~/.config/opencode/skills`
|
||||||
|
|
||||||
### Agents (shared skills)
|
### Agents (shared skills)
|
||||||
- **Директория:** `agents/.agents/skills/`
|
- **Директория:** `agents/.agents/skills/`
|
||||||
- Каноничное место для общих скиллов в формате `~/.agents/skills/<name>/SKILL.md`
|
- Каноничное место для общих скиллов в формате `~/.agents/skills/<name>/SKILL.md`
|
||||||
|
|
||||||
### Codex
|
### Codex
|
||||||
- **Директория:** `codex/.codex/skills/`
|
- **Директория:** `codex/.codex/skills/`
|
||||||
- Тонкие симлинки в `~/.codex/skills/` на общие skills из `~/.agents/skills/`
|
- Тонкие симлинки в `~/.codex/skills/` на общие skills из `~/.agents/skills/`
|
||||||
|
|
||||||
### Claude
|
### Claude
|
||||||
- **Директория:** `claude/.claude/`
|
- **Директория:** `claude/.claude/`
|
||||||
- Тонкий симлинк `~/.claude/skills` на общие skills из `~/.agents/skills/`
|
- Тонкий симлинк `~/.claude/skills` на общие skills из `~/.agents/skills/`
|
||||||
- **Двухуровневые настройки:**
|
- **Двухуровневые настройки:**
|
||||||
- `settings.json` (в dotfiles, read-only) — стабильная база: permissions, statusLine
|
- `settings.json` (в dotfiles, read-only) — стабильная база: permissions, statusLine
|
||||||
- `settings.local.json` (локальный, не в git) — машинно-специфичное: model, effortLevel
|
- `settings.local.json` (локальный, не в git) — машинно-специфичное: model, effortLevel
|
||||||
- Claude Code мержит оба файла, `settings.local.json` имеет приоритет
|
- Claude Code мержит оба файла, `settings.local.json` имеет приоритет
|
||||||
- `settings.json` защищён `chmod 444`, чтобы Claude Code не перезаписывал tracked файл
|
- `settings.json` защищён `chmod 444`, чтобы Claude Code не перезаписывал tracked файл
|
||||||
|
|
||||||
### Gemini
|
### Gemini
|
||||||
- **Директория:** `gemini/.gemini/`
|
- **Директория:** `gemini/.gemini/`
|
||||||
- Политики для Gemini CLI: pre-approved readonly команды
|
- Политики для Gemini CLI: pre-approved readonly команды
|
||||||
|
|
||||||
## 🚀 Установка
|
## 🚀 Установка
|
||||||
|
|
||||||
### Автоматическая (рекомендуется)
|
### Автоматическая (рекомендуется)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install stow
|
sudo apt install stow
|
||||||
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
|
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
|
||||||
cd ~/dotfiles
|
cd ~/dotfiles
|
||||||
./install.sh
|
./install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Скрипт `install.sh`:
|
Скрипт `install.sh`:
|
||||||
- Применяет все stow пакеты
|
- Применяет все stow пакеты
|
||||||
- Создаёт `~/.claude/settings.local.json` с дефолтными model/effortLevel
|
- Создаёт `~/.claude/settings.local.json` с дефолтными model/effortLevel
|
||||||
- Защищает `settings.json` от перезаписи (`chmod 444`)
|
- Защищает `settings.json` от перезаписи (`chmod 444`)
|
||||||
- Автоматически добавляет подключение bash_custom в `~/.bashrc`
|
- Автоматически добавляет подключение bash_custom в `~/.bashrc`
|
||||||
- В WSL предлагает настроить автоматический резолв `hproxy.local` (см. ниже)
|
- В WSL предлагает настроить автоматический резолв `hproxy.local` (см. ниже)
|
||||||
|
|
||||||
### Stow вручную
|
### Stow вручную
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install stow
|
sudo apt install stow
|
||||||
cd /path/to/dotfiles
|
cd /path/to/dotfiles
|
||||||
stow bash tmux vim zed vscode agents opencode codex claude gemini
|
stow bash tmux vim zed vscode agents opencode codex claude gemini
|
||||||
```
|
```
|
||||||
|
|
||||||
После stow добавьте в `~/.bashrc` (если не используете `install.sh`):
|
После stow добавьте в `~/.bashrc` (если не используете `install.sh`):
|
||||||
```bash
|
```bash
|
||||||
[ -f ~/.bash_custom ] && source ~/.bash_custom
|
[ -f ~/.bash_custom ] && source ~/.bash_custom
|
||||||
```
|
```
|
||||||
|
|
||||||
Создайте локальные настройки Claude:
|
Создайте локальные настройки Claude:
|
||||||
```bash
|
```bash
|
||||||
cat > ~/.claude/settings.local.json <<'EOF'
|
cat > ~/.claude/settings.local.json <<'EOF'
|
||||||
{
|
{
|
||||||
"model": "opus",
|
"model": "opus",
|
||||||
"effortLevel": "high"
|
"effortLevel": "high"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
### Windows (chezmoi)
|
### Windows (chezmoi)
|
||||||
|
|
||||||
Для Windows предпочтителен отдельный source dir `chezmoi/` внутри этого репозитория. Это позволяет держать Windows-слой рядом с остальными dotfiles, не ломая существующий `stow`/`install.sh` workflow для Linux/WSL.
|
Для Windows предпочтителен отдельный source dir `chezmoi/` внутри этого репозитория. Это позволяет держать Windows-слой рядом с остальными dotfiles, не ломая существующий `stow`/`install.sh` workflow для Linux/WSL.
|
||||||
@@ -129,6 +129,7 @@ EOF
|
|||||||
**Быстрое применение из уже существующего `~/dotfiles`:**
|
**Быстрое применение из уже существующего `~/dotfiles`:**
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
|
winget install --id Microsoft.PowerShell
|
||||||
winget install twpayne.chezmoi
|
winget install twpayne.chezmoi
|
||||||
|
|
||||||
# Применить только Windows-layer из репозитория
|
# Применить только Windows-layer из репозитория
|
||||||
@@ -176,102 +177,102 @@ Windows-слой в этом репозитории настраивает со
|
|||||||
- Проверять итоговые значения удобнее через `git config --global --includes --list --show-origin`
|
- Проверять итоговые значения удобнее через `git config --global --includes --list --show-origin`
|
||||||
|
|
||||||
## 🔧 Требования
|
## 🔧 Требования
|
||||||
|
|
||||||
### Linux/WSL
|
### Linux/WSL
|
||||||
- Linux (протестировано на Ubuntu)
|
- Linux (протестировано на Ubuntu)
|
||||||
- Bash 4.0+
|
- Bash 4.0+
|
||||||
- Tmux 2.0+
|
- Tmux 2.0+
|
||||||
- Vim 8.0+
|
- Vim 8.0+
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
- Windows 10/11 с Developer Mode
|
- Windows 10/11 с Developer Mode
|
||||||
- PowerShell 7.x
|
- PowerShell 7.x
|
||||||
- [chezmoi](https://www.chezmoi.io/)
|
- [chezmoi](https://www.chezmoi.io/)
|
||||||
|
|
||||||
## 📝 Дополнительные файлы
|
## 📝 Дополнительные файлы
|
||||||
|
|
||||||
Для полной настройки создайте:
|
Для полной настройки создайте:
|
||||||
- `~/.bash_aliases` — персональные алиасы
|
- `~/.bash_aliases` — персональные алиасы
|
||||||
- `~/.env.secrets` — приватные переменные окружения (API ключи)
|
- `~/.env.secrets` — приватные переменные окружения (API ключи)
|
||||||
|
|
||||||
## 🔑 Переменные окружения
|
## 🔑 Переменные окружения
|
||||||
|
|
||||||
### Кастомные функции bash
|
### Кастомные функции bash
|
||||||
|
|
||||||
Файл `bash/.bash_functions` содержит пользовательские функции (proxy_on/off, myip и др.).
|
Файл `bash/.bash_functions` содержит пользовательские функции (proxy_on/off, myip и др.).
|
||||||
При использовании `stow bash` он будет доступен как `~/.bash_functions`.
|
При использовании `stow bash` он будет доступен как `~/.bash_functions`.
|
||||||
|
|
||||||
### Приватные переменные (секреты)
|
### Приватные переменные (секреты)
|
||||||
|
|
||||||
1. Скопируйте шаблон:
|
1. Скопируйте шаблон:
|
||||||
```bash
|
```bash
|
||||||
cp bash/.env.secrets.example ~/.env.secrets
|
cp bash/.env.secrets.example ~/.env.secrets
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Отредактируйте и добавьте API ключи:
|
2. Отредактируйте и добавьте API ключи:
|
||||||
```bash
|
```bash
|
||||||
# Context7 API (https://context7.com)
|
# Context7 API (https://context7.com)
|
||||||
export CONTEXT7_API_KEY="your_context7_api_key_here"
|
export CONTEXT7_API_KEY="your_context7_api_key_here"
|
||||||
|
|
||||||
# Z.AI API для LLM, поиска и чтения (https://z.ai)
|
# Z.AI API для LLM, поиска и чтения (https://z.ai)
|
||||||
export ZAI_API_KEY="your_zai_api_key_here"
|
export ZAI_API_KEY="your_zai_api_key_here"
|
||||||
```
|
```
|
||||||
|
|
||||||
Файл `~/.env.secrets` автоматически подгружается при старте shell.
|
Файл `~/.env.secrets` автоматически подгружается при старте shell.
|
||||||
|
|
||||||
### WSL: настройка hproxy.local
|
### WSL: настройка hproxy.local
|
||||||
|
|
||||||
Имя `hproxy.local` используется как алиас для хоста, на котором работает прокси-сервер. Это позволяет функциям `proxy_on`/`proxy_off` и VS Code Server не зависеть от конкретного IP-адреса.
|
Имя `hproxy.local` используется как алиас для хоста, на котором работает прокси-сервер. Это позволяет функциям `proxy_on`/`proxy_off` и VS Code Server не зависеть от конкретного IP-адреса.
|
||||||
|
|
||||||
**NAT mode** (по умолчанию в WSL2) — IP шлюза меняется при каждом запуске, поэтому нужен автоматический boot-скрипт:
|
**NAT mode** (по умолчанию в WSL2) — IP шлюза меняется при каждом запуске, поэтому нужен автоматический boot-скрипт:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Вариант 1: через install.sh (интерактивно)
|
# Вариант 1: через install.sh (интерактивно)
|
||||||
./install.sh # ответьте "y" на вопрос про wsl.conf
|
./install.sh # ответьте "y" на вопрос про wsl.conf
|
||||||
|
|
||||||
# Вариант 2: вручную
|
# Вариант 2: вручную
|
||||||
sudo tee -a /etc/wsl.conf <<'EOF'
|
sudo tee -a /etc/wsl.conf <<'EOF'
|
||||||
|
|
||||||
[boot]
|
[boot]
|
||||||
command = "/path/to/dotfiles/scripts/setup-hproxy.sh"
|
command = "/path/to/dotfiles/scripts/setup-hproxy.sh"
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
После изменения `wsl.conf` перезапустите WSL: `wsl --shutdown`.
|
После изменения `wsl.conf` перезапустите WSL: `wsl --shutdown`.
|
||||||
|
|
||||||
Обновить `hproxy.local` без перезапуска WSL:
|
Обновить `hproxy.local` без перезапуска WSL:
|
||||||
```bash
|
```bash
|
||||||
sudo scripts/setup-hproxy.sh
|
sudo scripts/setup-hproxy.sh
|
||||||
# или
|
# или
|
||||||
update_hproxy # интерактивная функция из .bash_functions
|
update_hproxy # интерактивная функция из .bash_functions
|
||||||
```
|
```
|
||||||
|
|
||||||
**Mirror mode** (`networkingMode=mirrored` в `.wslconfig`) — WSL разделяет сетевой стек с хостом, IP не меняется. Достаточно один раз прописать запись в Windows hosts:
|
**Mirror mode** (`networkingMode=mirrored` в `.wslconfig`) — WSL разделяет сетевой стек с хостом, IP не меняется. Достаточно один раз прописать запись в Windows hosts:
|
||||||
|
|
||||||
```
|
```
|
||||||
# C:\Windows\System32\drivers\etc\hosts
|
# C:\Windows\System32\drivers\etc\hosts
|
||||||
192.168.1.100 hproxy.local
|
192.168.1.100 hproxy.local
|
||||||
```
|
```
|
||||||
|
|
||||||
### VS Code Server в WSL
|
### VS Code Server в WSL
|
||||||
|
|
||||||
Файл `vscode/.vscode-server/server-env-setup` выполняется при каждом старте VS Code Server в WSL и делает две вещи:
|
Файл `vscode/.vscode-server/server-env-setup` выполняется при каждом старте VS Code Server в WSL и делает две вещи:
|
||||||
|
|
||||||
1. **Загружает `~/.env.secrets`** — API ключи становятся доступны расширениям, задачам и терминалам VS Code. Если файл отсутствует или содержит ошибку, выводится warning в stderr, запуск не блокируется.
|
1. **Загружает `~/.env.secrets`** — API ключи становятся доступны расширениям, задачам и терминалам VS Code. Если файл отсутствует или содержит ошибку, выводится warning в stderr, запуск не блокируется.
|
||||||
|
|
||||||
2. **Настраивает прокси** — если `hproxy.local` резолвится (через `/etc/hosts` или DNS в режиме mirror), автоматически выставляются:
|
2. **Настраивает прокси** — если `hproxy.local` резолвится (через `/etc/hosts` или DNS в режиме mirror), автоматически выставляются:
|
||||||
- `HTTP_PROXY` / `http_proxy` → `http://hproxy.local:12334`
|
- `HTTP_PROXY` / `http_proxy` → `http://hproxy.local:12334`
|
||||||
- `HTTPS_PROXY` / `https_proxy` → `http://hproxy.local:12334`
|
- `HTTPS_PROXY` / `https_proxy` → `http://hproxy.local:12334`
|
||||||
- `ALL_PROXY` / `all_proxy` → `socks5://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`
|
- `NO_PROXY` / `no_proxy` → `hproxy.local,localhost,127.0.0.1,.concept-software.ru`
|
||||||
|
|
||||||
После установки/обновления файла сделайте одно из действий:
|
После установки/обновления файла сделайте одно из действий:
|
||||||
- `Developer: Reload Window` в VS Code
|
- `Developer: Reload Window` в VS Code
|
||||||
- или `Remote-WSL: Reconnect to WSL`
|
- или `Remote-WSL: Reconnect to WSL`
|
||||||
|
|
||||||
Если у вас уже есть локальный `~/.vscode-server/server-env-setup`, stow может сообщить конфликт.
|
Если у вас уже есть локальный `~/.vscode-server/server-env-setup`, stow может сообщить конфликт.
|
||||||
Тогда сохраните старую версию и примените stow повторно:
|
Тогда сохраните старую версию и примените stow повторно:
|
||||||
```bash
|
```bash
|
||||||
mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S)
|
mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S)
|
||||||
stow -vt ~ vscode
|
stow -vt ~ vscode
|
||||||
```
|
```
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
if (-not $IsWindows) {
|
if (-not ($IsWindows -or $PSVersionTable.PSEdition -eq 'Desktop')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,6 +262,6 @@ if (-not $changed) {
|
|||||||
|
|
||||||
$backupPath = '{0}.bak-{1}' -f $settingsPath, (Get-Date -Format 'yyyyMMdd-HHmmss')
|
$backupPath = '{0}.bak-{1}' -f $settingsPath, (Get-Date -Format 'yyyyMMdd-HHmmss')
|
||||||
Copy-Item -LiteralPath $settingsPath -Destination $backupPath -Force
|
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 "Updated Windows Terminal settings: $settingsPath"
|
||||||
Write-Host "Backup saved to: $backupPath"
|
Write-Host "Backup saved to: $backupPath"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
if (-not $IsWindows) {
|
if (-not ($IsWindows -or $PSVersionTable.PSEdition -eq 'Desktop')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user