====== Windows Subsystem for Linux (WSL) ====== I'll grudgingly admit that Windows Subsytem for Linux isn't bad like I thought it would be. That said, there are several things you might want to do to make it more livable. ===== Enabling WSL ===== First, to enable WSL at all ([[https://docs.microsoft.com/en-us/windows/wsl/install-win10|from here]]), in adminstrator powershell: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Then, it still being Windows, you have to restart. ===== Installing distro ===== Windows Store is a garbage zone. Here's the spell for skipping that part ([[https://docs.microsoft.com/en-us/windows/wsl/install-manual|from here]]). Just download this URL and double click what you get: https://aka.ms/wsl-ubuntu-1804 https://aka.ms/wslubuntu2004 https://aka.ms/wslubuntu2204 Other URLs exist for other distros; you're on your own for that. ===== Making it Launchy-launchable ===== The distro will be installed as an "app", which is Windows 10 speak for "dumbed down program that's treated in special ways that break normal workflows". If you have classic Start and Launchy, to make it work with Launchy: * Make a shortcut of the "app", then put the shortcut into the classic start menu programs list. ===== Update plus basic packages ===== The default package set is actually not bad. But this will update and install what's missing: sudo apt update sudo apt dist-upgrade sudo apt install lynx links binutils zip unzip gdb build-essential dos2unix ===== Symlinks ===== To get to places easily: ln -s /mnt/c/Users/$USER ~ ===== "Open Linux Shell Here" context menu ===== It turns out there already is one by default, but it only shows if you //shift// right click. To make it always visible ([[https://winaero.com/blog/make-open-linux-shell-always-visible/|per here]]): * Download and run "[[https://winaero.com/blog/execti-run-programs-trustedinstaller/|ExecTI]]" to allow you to run regedit as TrustedInstaller (more privileges than admin) * Run regedit using the tool * In ''HKEY_CLASSES_ROOT\Directory\shell\WSL'', delete the key ''Extended'' ===== Run explorer from this directory in bash ===== I'm used to saying ''start .'' to open an explorer in this directory. Using [[https://stackoverflow.com/questions/44245721/launching-explorer-from-wsl|this recipe]], you can add the following to ~/.bashrc to restore this functionality: alias start="powershell.exe /c start" ===== Keyboard scrolling ===== By default, there's no keyboard shortcut to scroll the Windows terminal. Per [[https://superuser.com/questions/1408859/windows-subsystem-linux-terminal-scrolling-using-keyboard|here]], a quick duct tape solution is to use the following script in [[https://www.autohotkey.com/|AutoHotKey]]: #IfWinActive ahk_class ConsoleWindowClass +PgUp:: Send {WheelUp} Return +PgDn:: Send {WheelDown} Return #IfWinActive ===== Script to mount *all* drives ===== By default, WSL just mounts physical drives around at boot. This script mounts all drives Windows knows about to directories under /mnt: for DRV in `wmic.exe logicaldisk get name | grep : | awk '{print tolower($1)}'` ; do MNT=/mnt/${DRV::1} if mount | grep -q $MNT ; then echo $MNT already mounted else sudo mkdir -p $MNT sudo mount -t drvfs $DRV $MNT fi done