Skip to content
LevT2 edited this page May 22, 2022 · 8 revisions

Настройка окружения разработчика под актуальными версиями Windows 10 и 11.

И немного про интеграцию WSL2 вообще

Перед тем, как устанавливать внутрь WSL дистрибутивы из Microsoft Store или из другого пакетного менеджера, следует убедиться, что дефолтная версия окружения WSL2:

PS C:\> wsl --set-default-version 2

Поменять версию WSL окружения для ранее установленного дистрибутива тоже возможно, но нам ни к чему.

Ниже типичная картина винды с рабочей подсистемой WSL. Звёздочкой отмечен дистр по умолчанию (работать с остальными дистрибутивами следует по имени; дефолтный дистр отличается тем, что его имя указывать не обязательно):

PS C:\> wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop         Running         2
  Ubuntu_2004            Stopped         2
  docker-desktop-data    Running         2

Теперь, по виндовой командe wsl мы попадаем внутрь линя, pwd изначально говорит о том, что мы магически остались в виндовом хомяке (вид из линя) По cd ~ переходим в хомяк линуксового юзера.

PS C:\Users\WinUser> wsl
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64)

    ...........

This message is shown once once a day. To disable it please create the
/home/linuxuser/.hushlogin file.

linuxuser@WINHOST:/mnt/c/Users/WinUser$ cd ~
linuxuser@WINHOST:~$ pwd
/home/linuxuser

Ставим линуксовый ghcup по инструкции с оф. сайта, не забудьте согласиться на установку опциональных haskell-language-server и stack. По завершении установочного скрипта загляните в ghcup tui - стоит ознакомиться с доступными и по дефолту выбранными версиями компонентов тулчейна.

Клонируем внутри линя какую-нибудь репу с гитхаба, допустим получили /home/linuxuser/hid-examples. Переходим в эту директорию и запускаем code . - команда магически запустит виндовую среду разработки с открытым в ней "Remote-WSL" проектом в папке \\wsl$\Ubuntu-20.04\home\linuxuser\hid-exmples.

linuxuser@WINHOST:~$ cd hid-examples/
linuxuser@WINHOST:~/hid-examples$ code .
Updating VS Code Server to version f80445acd5a3dadef24aa209168452a3d97cc326
Removing previous installation...
Installing VS Code Server for x64 (f80445acd5a3dadef24aa209168452a3d97cc326)
Downloading: 100%
Unpacking: 100%
Unpacked 2158 files and folders to /home/linuxuser/.vscode-server/bin/f80445acd5a3dadef24aa209168452a3d97cc326.

Остальная настройка это настройка VSCode на винде: сode самостоятельно ставит в WSL2 линь необходимые ей агенты в тех версиях, которые ей нужны.

Следует добавить расширения Remote-WSL и Haskell, после этого не забыть "Install in WSL" для Haskell. Самый прямой путь это иметь предварительно установленный Remote-WSL, тогда Haskell вам будет предложено сразу же установить внутрь WSL, без лишних перезапусков VSCode. В комплекте с Haskell автоматически устанавливается Haskell Syntax Highlighting.

Здесь плагин (или студия) выставит модальное окно с вопросом, как им найти HLS и релевантный тулчейн - "автоматически через GHCup" или "вручную через PATH". Ответ впоследствии можно будет исправить в конфиге расширения.

Траблшутинг:

  • HLS немного тормозит, особенно на холодную. Полностью он включается где-то через минуту, в течение этого времени приметы его работы могут отрисовываться в исходнике .hs инкрементально. Поначалу виден только раскрашенный код, и беспокоиться следует не сразу.

  • Если в винде присутствует виндовый тулчейн, или в VSCode был предустановлен плагин Haskell - вероятно, понадобятся лишние телодвижения. Важно понимать, что заработать должен именно не виндовый, а линуксовый тулчейн через расширение Haskell, установленное именно под WSL2 (Как убедиться? в гармошке между установленными и рекомендованными расширениями должен появиться раздел для расширений, установленных в конкретный дистрибутив WSL2).

  • Путь к ghcup можно указать в конфиге расширения принудительно, и это должен быть путь к линуксовому ghcup. Пощите его в ~/.ghcup; в виндовом проводнике это папка открывается через cmd /k explorer \\wsl$\Ubuntu-20.04\home\linuxuser\.ghcup. Если приглядеться, в графических настройках VSCode теперь тоже три вкладки (горизонтальные), и одна из них касается проектов внутри конкретного дистрибутива Remote-WSL. В конечном виде в settings.json эта опция может выглядеть так "haskell.ghcupExecutablePath": "\\\\wsl$\\Ubuntu-20.04\\home\\op\\.ghcup\\bin"

  • Файлы проекта теоретически могут лежать в виндовой ФС (внутри /mnt/c , /mnt/d и т.д. если глядеть из линуксового дистрибутива, но так не надо делать, хотя бы из-за тормозов: кладите проекты внутрь WSL2.

  • Графические Run/Debug сейчас не работают.

  • Виндузятники, внимание! Многие невнятные ошибки cabal build проходят сами после того, как вы вспомните об apt update и его прогоните.