-
Notifications
You must be signed in to change notification settings - Fork 48
Windows10 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
и его прогоните.