Я купил себе 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 (команды выполняем в Powershell или командной строке Windows):
wsl --install -d Debian
wsl --set-default-version 2
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
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
В проводнике от бокового меню открепить Музыка, Видео. Оставить только Рабочий Стол, Загрузки, Документы, Изображения. Можcd ..но добавить сюда директории, с которыми часто будете работать, я со временем сделаю это.
Install Git for Windows for Obsidian. Set up it in Git bash (git config ...
).
Git в Windows настроен. Плагин git в Obsidian и хоткей на CTRL+P для push.
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:
# 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
# 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
# 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 (везде должна показаться ошибка при передаче числа вместо строки):
# main.py
def say_hello (name: str) -> None:
print(f"hello, {name}!")
say_hello(123)
# main.ts
const sayHello = (name: string) => {
console.log(`hello, ${name}!`)
}
sayHello(123)
# main.go
package main
import (
"fmt"
)
func sayHello(name string) {
fmt.Printf("hello, %s!\n", name)
}
func main() {
sayHello(123)
}
cargo new my_project
cd my_project
nvim src/main.rs
# main.rs
fn say_hello(name: &str) {
println!("hello, {}!", name);
}
fn main() {
say_hello(123);
}
tmux prefix это CTRL
+A
или CTRL
+B
, а CTRL это Caps lock. Покажи создание панелей в tmux.
Чтобы перебиндить клавишу Caps Lock на Ctrl в Windows создадим файл, который автоматически переназначит эти клавиши через реестр Windows, файл reg.reg
:
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 можно очень удобно с clip.exe
. На маке есть pbcopy
, а тут вот clip.exe
:
ls -la /mnt/c/Users/
history | tail -1 | clip.exe
Правда, кириллица копируется криво. Поэтому будем использовать win32yank, скачаем и положим исполнимый файл win32yank.exe
в директорию, которая есть и в виндовой переменной окружения PATH
, и в линуксовой, в C:\Windows\System32
.
# не работает
echo "привет" | clip.exe
# работает!
echo "привет" | win32yank.exe -i
echo 'alias pbcopy="win32yank.exe -i"' >> ~/.zshrc && . ~/.zshrc
Можно использовать для копирования паролей из pass
, например. Можно перебиндить на pbcopy при желании:
echo "alias pbcopy=clip.exe" >> ~/.zshrc && . ~/.zshrc
Открытие проводника в текущей директории (удобно, использовал open .
на маке):
echo "alias open=explorer.exe" >> ~/.zshrc && . ~/.zshrc
Уменьшим задержку при вводе повторных символов. Win + R, команда control keyboard
, Enter. Откроется окно "Свойства клавиатуры". В разделе Задержка перед началом повторения (Repeat delay) установите ползунок ближе к значению Короткая (Short).
PowerToys. Есть еще программа AutoHotKey, провел кучу времени в попытках ее настроить и удалил к едрене фене. На всякий случай конфиг ее был таким (лежал в директории автозагрузки):
; Заменяем 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.
И комбинации:
Интересные комбинации:
Всё это легко делается, если установить раскладку Ильи Бирмана. Мне долго её советовали в комментариях, когда где-то речь всплывала о Windows, и вот я наконец-то её поставил. Это супер-кайф! ==Покажи картинку==.
Я настолько вдохновился, что просто не смог не задонатить Илье за такую кайфовейшую штуку:) Рекомендую тоже установить и тоже задонатить. За такие продукты надо платить, друзья, вот просто надо.
В видео забыл показать:
pass
как менеджера паролей — видео на каналеWin
+I
→ Персонализация → Цвета → Выберите режим → Настраиваемый, там же Выберите режим Windows по умолчанию -> Тёмный (для тёмной панельки), и Выберите режим приложения по умолчанию → Светлый (для светлых окон, если хотите)Alt
+J
на отправку Ctrl
+J
для просмотра загрузок в Chrome по Alt
+J
Alt
+N
на отправку Ctrl
+N
для открытия нового окна в ChromeAlt
+O
на Ctrl
+O
, удобно в ObsidianAlt
+X
на Ctrl
+X
— вырезаниеAlt
+C
на Ctrl
+C
— копированиеAlt
+V
на Ctrl
+V
— вставкаAlt
+A
на Ctrl
+A
— выделение всегоAlt
+Space
на Win
+Space
— для смены языкаAlt
+Z
на Ctrl
+Z
— undoAlt
+Shift
+Z
на Ctrl
+Shift
+Z
— redo