# Вступление

Я купил себе windows-ноутбук, пользуюсь им неделю, настроил его для работы... И мне хорошо!

Вообще после 15 лет работы на маках, после отличного эйра на М1 купить виндоус-ноут это была настоооолько бредовая идея, что... она мне показалась даже хорошей! И я купил себе  windows-ноутбук. Ну а чо нет.

Это Huawei Matebook X Pro 2024 года на Intel(R) Core(TM) Ultra 7 155H c 32 гигами оперативки и терабайтным SSD.

О самом ноутбуке я сделаю отдельное видео, о том, почему выбрал именно его, о его производительности, об ощущениях работы с ним и так далее. Он классный, хотя и не без проблем. А здесь поговорим именно о настройке Windows и WSL для разработчика. Покажу весь процесс настройки - весь софт, все инструменты, все настройки.

Я сейчас веду свой авторский курс идёт курс хардкорная веб-разработка и там много людей с Windows, поэтому эта тема будет актуальна многим.

Сейчас при наличии ChatGPT и других LLM'ок процесс настройки и поиска аналогов каких-то Mac-решений или Linux-решений для Windows значительно упростился, но всё же мой переезд занял не один день, к тому же я пересобрал свой конфиг nvim, tmux, решил ряд неудобных для себя аспектов в Windows и всем этим сейчас поделюсь. Мне нравится результат и я уверен, что кому-то это будет полезно.

Видео как всегда будет побито по главам, есть таймкоды, а также статья со списком команд есть в описании к видео. Покажу мой инструментарий для разработки на Python, TypeScript, Go, Rust.

Здесь стоит сказать, что сейчас на Windows есть WSL, Windows Subsystem for Linux, и львиная доля настройки будет происходить там. По сути сейчас Mac OS это удобный Unix в консоли и нормальные стабильные приятные окошки в графическом интерфейсе. С приходом WSL Windows тоже стал таким -- в консоли полноценный Linux, а в графическом интерфейсе все необходимые графические программы.

Все консольные Unix-инструменты у меня практически без изменений работают и в винде с WSL, и в Mac OS, и в десктопном или серверном Linux. То есть я всем этим могу пользоваться где угодно как угодно. Браузер есть везде, монтажка Davinci Resolve есть везде. Не везде есть родной Microsoft Office, но оно мне не сильно и нужно -- открыть для прочтения документы можно много чем, и делать свои документы тоже можно много чем, экспортирую их потом в PDF и передаю в PDF, чтобы никакая вёрстка документа не поехала. Так что сейчас в целом на любой операционке мои конкретные задачи решаются нормально.

Не везде есть цифровая подпись для  электронного документооборота компании, если говорить про Linux, и не везде есть Photoshop, если говорить тоже про Linux. Но с этим можно что-то придумать, если мне понадобится полноценно переехать на Linux. А сейчас поговорим о том, как я настроил Windows.

>[!info] Ссылка на команды есть в описании видео!
# Обновление Windows, драйверов

В первую очередь обновляем на новом ноутбуке саму систему, драйвера. На ноутбуке Huawei есть приложение Huawei PC Manager, которое умеет поддерживать в актуальном состоянии все драйвера. Я тут уже переустанавливал Windows, установил чистую винду, чтобы показать вам с нуля её настройку. И вот как раз все драйвера докачал и привёл в актуальное состояние Huawei PC Manager, это очень удобно. На других ноутах приходилось искать и выкачивать с сайта драйвера самостоятельно.

# Выставление масштаба

Выставляем масштаб интерфейса. По умолчанию может быть слишком большой или маленький. Я ставлю 225% сейчас.

# Отключение всех системных звуков

Отключаю все системные звуки в системе, чтобы не мешали, раздражают.

# Настройка панели

Скрываю микро-приложения слева.

Размещение софта на панели. Первое место Alacritty, всегда в максимально быстром доступе линукс-консоль, которую я не закрываю. Можете поставить сюда Windows Terminal, если хотите, или другой терминал - Kitty, WezTerm и тд.

Доступ к терминалу всегда по Win+1. Очень удобно. К Obsidian -- по Win+2. Chrome -- Win+3. И так далее  для всего нужного софта. У меня пока только эти три программы. TG запускаю через Win и поиск.

Поиск на маке через spotlight был по CTRL+Пробел у меня настроен, тут просто по кнопке Win. И запуск софта, и поиск файлов (покажи поиск по слову Сценарий).

# Скрыть иконку с рабочего стола

Надо в реестре в разделе `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel` добавить запись с именем `{2cc5ca98-6485-489a-920e-b3e88a6ccce3}` и значением `1`.

# WSL

Ставим WSL (команды выполняем в Powershell или командной строке Windows):

```bash
wsl --install -d Debian
wsl --set-default-version 2
```

# Настройка Git в WSL

```bash
sudo apt update
sudo apt install -y git

# Set up git in WSL
git config --global alias.st status
git config --global user.name "Alexey Goloburdin"
git config --global user.email "sterx@rl6.ru"
# чтобы кириллические имена файлов нормально выводились
git config --global core.quotepath
```

# dot-files

```bash
git clone https://github.com/alexey-goloburdin/dotfiles

# Copy Alacritty config into Windows
cp $HOME/.config/alacritty/alacritty.toml \
    /mnt/c/Users/sterx/AppData/Roaming/alacritty

# We use Alacritty's default Linux config directory as our storage location here.
mkdir -p ~/.config/alacritty/themes
git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/themes
# Покажи прикольные темы отобранные мной сверху в конфиге Alacritty
```

# Windows-софт

- Audacity
- [SumatraPDF](https://www.sumatrapdfreader.org/free-pdf-reader). Интерфейс не перегружен (его почти нет) и запускается быстро. Даже полосу прокрутки можно скрыть. Возможна навигация через jk
- Obsidian
- Davinci Resolve
- VLC as player

# Начальные настройки

В проводнике от бокового меню открепить  Музыка, Видео. Оставить только Рабочий Стол, Загрузки, Документы, Изображения. Можcd ..но добавить сюда директории, с которыми часто будете работать, я со временем сделаю это.

# Git для Windows для Obsidian

Install [Git for Windows](https://git-scm.com/downloads/win) for Obsidian. Set up it in Git bash (`git config ...`).

# Синхронизация заметок Obsidian через git

Git в Windows настроен. Плагин git в Obsidian и хоткей на CTRL+P для push.

# Основные Linux-инструменты

```bash
sudo apt install -y \
    zsh git gpg pass zip unzip \
    curl wget tmux gcc bsdmainutils htop fzf bat ripgrep build-essential

sudo ln -s $(which batcat) /usr/local/bin/bat

# GPG and SSH keys (change your username)
mkdir /mnt/c/Users/sterx/AppData/Roaming/alacritty/
```

Config Linux:

```bash
# Install oh-my-zsh
# https://ohmyz.sh/

echo "source \$HOME/.config/zsh/env.zsh" >> ~/.zshrc
echo "source \$HOME/.config/zsh/aliases.zsh" >> ~/.zshrc

# Download nvim into ~/.soft
# https://github.com/neovim/neovim/releases
wget https://github.com/neovim/neovim/releases/download/v0.10.2/nvim-linux64.tar.gz
tar -xzvf nvim-linux64.tar.gz
mv nvim-linux64 .soft/nvim
sudo ln -s $HOME/.soft/nvim/bin/nvim /usr/local/bin/nvim
nvim

echo "alias n=nvim" >> ~/.zshrc && . ~/.zshrc
echo "export EDITOR=vim" >> ~/.zshrc && . ~/.zshrc
```

# Установка Python 3.13, Golang, TypeScript, Rust

```bash
# Build Python from sources
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz
tar -xzfv Python-3.13.1.tgz
cd Python-3.13.1
./configure --enable-optimizations --prefix=$HOME/.python3.13
make -j22
sudo make altinstall

# Install nvm, node, TS
# https://nodejs.org/en/download/package-manager
# choose linux and nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
nvm install 23
node -v
npm -v

sudo chmod u+s /bin/ping

npm i -g npm
npm install -g typescript

# Install Go
# https://go.dev/dl/
mv /mnt/c/Users/sterx/Downloads/go1.23.4.linux-amd64.tar.gz .
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> ~/.zshrc && source ~/.zshrc

# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

# Настройка nvim для работы с этими языками

```bash
# INSTALL LSP SERVERS AND OTHER TOOLS

# Download rust-analyzer into ~/.soft
# https://github.com/rust-lang/rust-analyzer/releases
cd ~/.soft
gunzip rust-analyzer-x86_64-unknown-linux-gnu.gz
sudo ln -s $HOME/.soft/rust-analyzer /usr/local/bin

# Install pyright
npm i -g pyright

# Install TypeScript LSP server
npm install -g typescript-language-server

# Install gopls
go install golang.org/x/tools/gopls@latest

# Packer for nvim
mkdir -p ~/.local/share/nvim/site/pack/packer/start/

git clone --depth 1 https://github.com/wbthomason/packer.nvim \
    ~/.local/share/nvim/site/pack/packer/start/packer.nvim

# Build telescope
cd ~/.local/share/nvim/site/pack/packer/start/telescope-fzf-native.nvim
make

cd
```

Проверим работу nvim с LSP-сервером для Python, TS, Go, Rust (везде должна показаться ошибка при передаче числа вместо строки):

```python
# main.py
def say_hello (name: str) -> None:
    print(f"hello, {name}!")

say_hello(123)
```

```ts
# main.ts
const sayHello = (name: string) => {
    console.log(`hello, ${name}!`)
}

sayHello(123)
```

```go
# main.go
package main

import (
	"fmt"
)

func sayHello(name string) {
	fmt.Printf("hello, %s!\n", name)
}

func main() {
	sayHello(123)
}
```

```bash
cargo new my_project
cd my_project
nvim src/main.rs
```

```rust
# main.rs
fn say_hello(name: &str) {
    println!("hello, {}!", name);
}

fn main() {
    say_hello(123);
}
```

# Tmux
 
tmux prefix это `CTRL`+`A` или `CTRL`+`B`, а CTRL это Caps lock. Покажи создание панелей в tmux.

Чтобы перебиндить клавишу Caps Lock на Ctrl в Windows создадим файл, который автоматически переназначит эти клавиши через реестр Windows, файл `reg.reg`:

```text
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00
```

Запустить файл, согласиться на применение настроек, перезагрузиться.

# Копирование из WSL в буфер Windows

Копировать текст из WSL можно очень удобно с `clip.exe`. На маке есть `pbcopy`, а тут вот `clip.exe`:

```bash
ls -la /mnt/c/Users/
history | tail -1 | clip.exe
```

Правда, кириллица копируется криво. Поэтому будем использовать [win32yank](https://github.com/equalsraf/win32yank/releases), скачаем и положим исполнимый файл `win32yank.exe` в директорию, которая есть и в виндовой переменной окружения `PATH`, и в линуксовой, в `C:\Windows\System32`.

```bash
# не работает
echo "привет" | clip.exe

# работает!
echo "привет" | win32yank.exe -i

echo 'alias pbcopy="win32yank.exe -i"' >> ~/.zshrc && . ~/.zshrc
```

Можно использовать для копирования паролей из `pass`, например. Можно перебиндить на pbcopy при желании:

```bash
echo "alias pbcopy=clip.exe" >> ~/.zshrc && . ~/.zshrc
```

Открытие проводника в текущей директории (удобно, использовал `open .` на маке):

```bash
echo "alias open=explorer.exe" >> ~/.zshrc && . ~/.zshrc
```

# Настройки ввода

Уменьшим задержку при вводе повторных символов. **Win + R**, команда `control keyboard`, **Enter**. Откроется окно "Свойства клавиатуры". В разделе **Задержка перед началом повторения** (Repeat delay) установите ползунок ближе к значению **Короткая** (Short).

# Горячие клавиши в системе

[PowerToys](https://github.com/microsoft/PowerToys/releases/tag/v0.86.0). Есть еще программа AutoHotKey, провел кучу времени в попытках ее настроить и удалил к едрене фене. На всякий случай конфиг ее был таким (лежал в директории автозагрузки):

```text
; Заменяем CapsLock на Ctrl
CapsLock::Ctrl

; Переключение на вкладки в Google Chrome с помощью Alt + [номер]
!1::Send("^1")  ; Alt + 1 переключается на первую вкладку
!2::Send("^2")  ; Alt + 2 переключается на вторую вкладку
!3::Send("^3")  ; Alt + 3 переключается на третью вкладку
!4::Send("^4")  ; Alt + 4 переключается на четвёртую вкладку
!5::Send("^5")  ; Alt + 5 переключается на пятую вкладку
!6::Send("^6")  ; Alt + 6 переключается на шестую вкладку
!7::Send("^7")  ; Alt + 7 переключается на седьмую вкладку
!8::Send("^8")  ; Alt + 8 переключается на восьмую вкладку
!9::Send("^9")  ; Alt + 9 переключается на последнюю вкладку

; Переключение языка по Alt + Space - вместо Alt + Space шлётся Win + Space
!Space::
{
    Send("# ")
}

; Для хрома Alt + t открывает вкладку (отправляет Ctrl + t)
!t::
{
    Send("^t") ; Отправляет Ctrl+T
}

; Для хрома Alt + w закрывает вкладку (отправляет Ctrl + w)
!w::
{
    Send("^w") ; Отправляет Ctrl+T
}
>!✓:: {
    Send("^w") ; Отправляет Ctrl+W
}


; ALT+F = CTRL+F
!f::
{
    Send("^f") ; Отправляет Ctrl+F
}
```

Открываем редактор горячих клавиш, перебиваем Caps Lock на Ctrl.

И комбинации:
- ALT+1 на CTRL+1
- ALT+2 на CTRL+2
- …
- ALT+9 на CTRL+9
- ALT+T на CTRL+T
- ALT+W на CTRL+W
- ALT+F на CTRL+F
- ALT+Q на CTRL+F4
- ALT+C на CTRL+C
- ALT+V на CTRL+V
- ALT+R на CTRL+R

Интересные комбинации:
- Win+Shift+C — Color picker для любого приложения.
- CTRL+Space предпросмотр документа, работает в тч с PDF. Как на маке, но там просто Space, тут просто Space поставить нельзя, но пофик.
- Alt+Space — аналог Spotlight для винды. Калькулятор, поиск файлов.
- Эти клавиши работают судя по всему без power toys, но тоже показались мне интересными:
- Win+V — вставка с историей буфера. Иногда это очень удобно!
- Win+A — показать Action Center, тут есть wifi и bluetooth подключения и тд.

# Раскладка Ильи Бирмана

- Как ставить тире? Чтобы вот не убогий дефис, а православное правильное тире?
- Кавычки ёлочкой?
- Неразрывный пробел, чтобы строка не начиналась с тире?
- А как поставить знак галочки, рубля или знак умножить?

Всё это легко делается, если установить раскладку Ильи Бирмана. Мне долго её советовали в комментариях, когда где-то речь всплывала о Windows, и вот я наконец-то её поставил. Это супер-кайф! ==Покажи картинку==.

Я настолько вдохновился, что просто не смог не задонатить Илье за такую кайфовейшую штуку:) Рекомендую тоже установить и тоже задонатить. За такие продукты **надо** платить, друзья, вот просто надо.

# Не показал в видео, но настроил у себя

В видео забыл показать:

- установку `pass` как менеджера паролей — [видео на канале](https://www.youtube.com/watch?v=I2mwqC6HGGE)
- [установку PostgreSQL 17](https://www.postgresql.org/download/linux/debian/) (актуальная на сегодня) в WSL
- установка DBeaver на Windows для GUI работы с PostgreSQL
- для нижней панели Windows поставил черную тему, темная панелька симпатичнее:
	- `Win`+`I` → Персонализация → Цвета →  Выберите режим → Настраиваемый, там же Выберите режим Windows по умолчанию -> Тёмный (для тёмной панельки), и Выберите режим приложения по умолчанию → Светлый (для светлых окон, если хотите)
- в PowerToys назначил:
	- `Alt`+`J` на отправку `Ctrl`+`J` для просмотра загрузок в Chrome по `Alt`+`J`
	- `Alt`+`N` на отправку `Ctrl`+`N` для открытия нового окна в Chrome
	- `Alt`+`O` на `Ctrl`+`O`, удобно в Obsidian
	- `Alt`+`X` на `Ctrl`+`X` — вырезание
	- `Alt`+`C` на `Ctrl`+`C` — копирование
	- `Alt`+`V` на `Ctrl`+`V` — вставка
	- `Alt`+`A` на `Ctrl`+`A` — выделение всего
	- `Alt`+`Space` на `Win`+`Space` — для смены языка
	- `Alt`+`Z` на `Ctrl`+`Z` — undo
	- `Alt`+`Shift`+`Z` на `Ctrl`+`Shift`+`Z` — redo
- установить [ShareX](https://getsharex.com/) как удобный инструмент для скриншотов и выгрузки на imgur