Skip to content

Instantly share code, notes, and snippets.

@mjarkk
Last active April 19, 2020 19:00
Show Gist options
  • Save mjarkk/d73f43f96e07d08702601f829512ff96 to your computer and use it in GitHub Desktop.
Save mjarkk/d73f43f96e07d08702601f829512ff96 to your computer and use it in GitHub Desktop.
How i use windows for development

screenshot
Background: crowned > need for speed, Fluent terminal with Bright Lights theme

My Windows dev setup / howto

Rambelings

Ya windows the worst os to program on or is it.
For a long time i've been fully againced windows and i still kinda agree if you use it without "cheating". Windows it just too unstable and too un-standardized to work with on it's own, it's like using mac os with it's forever taking updates but combined with non-standardized tooling and a lot of unexpected bahavior what just results in a lot of frustration.
For example why can i see ls taking time to display lines in powershell???, ya it's only ~50ms but still why does a simple command like ls has to take so long??
Or why sometimes do programs not stop running when i press ctrl+c and do i need to open task manager and scroll to the program because there is no search bar so i can find it quickly??
Well these are just a few things that make using windows not great and there are a lot more little things. Thankfully windows has evolved and now we can "cheat" around the biggest frustrations using the windows subsystem version 2, v1 still had a lot of windows problems but now with version 2 being in it's own vm it works amazing. I call it cheating because in the end it's comes down to really just a nice linux vm in windows that is integrated perfectly. I can now right click in a folder, click on open in fluent terminal and a linux like terminal pops up with a fully working linux shell with all the amazing linux tools. Thanks to docker and vscode their integration i can even open vscode from inside the linux terminal and use docker like i do on linux, This is great!!.
Furthermore there are a lot of tools to fix to other annoying windows things like. Use wox instaid of the windows search for obviouse reasons,
Use Shutup 10 and winaero tweaker to disable windows doing dumb garbage like installing shit without any reason.
With all that together will a lot of other small tweaks i can finally say that using windows is oke now, i can now enjoy the good sides of windows without there beeing to meany down sides. Just like any Linux distro or Mac OS. Everything in the end has there downsides and upsides but as long as there are more upside than down i'm oke with using it.

Get the latest build of windows

For some dumb reason windows always installes an old version so i use the insider program to get the latest windows version

  1. Settings > Updates & Security > Windows Insider Program > do your things here
  2. Settings > Updates & Security > Update Windows > Check for updates (This will take a shitload of time)

Programs i always install

Turn on hyper-v

some programs require this or work better so i usually turn this on
Control Panel > Programs > Turn Windows features on or off > hyper-v

Linux Subsystem

As administrator run: (to allow the windows subsystem)

Enable-WindowsOptionalFeature -Online -FeatureName $("VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux")
wsl --set-default-version 2

Install Ubuntu 18.04 LTS

After installing you might have to convert the subsystem to windows subsystem version 2 using:

wsl -l -v
wsl --set-version Ubuntu 2

To view localhost only exposed servers create .wslconfig in the user root dir with the following contents:

[wsl2]
localhostForwarding=true

To quickly access the subsystem's filesystem add the following network drive under "This PC" \\wsl$\Ubuntu note: this does not work on wsl1

Docker

Download Docker desktop
After install:

  1. go to Docker desktop settings
  2. Under command line enable: Enable experimental features
  3. Under general enable: Enable the experimental WSL 2 based engine
  4. Install docker in the ubuntu subsystem there is no need to start the docker service
  5. In the docker desktop settings > Resources > WSL intergration > Enable ubuntu or whatever you have

Fish, omf & nvm in the subsystem

I use fish as my main shell on linux so i also install it on my subsystem

# install fish v3
sudo add-apt-repository ppa:fish-shell/release-3
sudo apt install fish

# set fish as main shell
chsh -s `which fish`

# install oh my fish
curl -L https://get.oh-my.fish | fish

# install nvm (node version manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
omf install nvm
nvm install 13
nvm use 13
nvm alias default 13

# Get a nice fish theme if you want:
omf install nai

I usually edit the .config/omf/init.fish to add a few handy shotcuts:

alias h='cd ~'
# ...

Theming & Custom settings

Fish & vscode

See my dotfiles

Wox

  1. Download: https://github.com/dracula/wox
  2. Place Dracula.xaml in %LOCALAPPDATA%\Wox\app-X.X.XXX\Themes, in wox type restart wox > settings > Theme > Dracula

Fluent terminal

Download the z-Bright-Lights.itermcolors theme underhere and import it into the fluent terminal
For more themes: https://iterm2colorschemes.com (dowanlod the zip and extract the schemes folder)

Add Fluent terminal to context menu: install.bat

In the WSL profile set this as working directory: \\wsl$\Ubuntu\home\mark

Steam

  1. download Steam customizer tool
  2. download the dracula skin

Winaero

Tweaked settings:

  • Disable timeline context menu
  • Take ownership context menu
  • Screen snip context menu
  • Screen snip shortcuts > place the shotcut in %appdata%\Microsoft\Windows\Start Menu\Programs
  • Disable cortana windows apps
  • Ads and unwanted software behavior
  • Compressed overlay icon file explorer
  • Shortcut arrow shortcuts > No

AMD Radeon settings

The radeon software has a list of hotkeys that are also in use by some programs so i unbind them usually,
Settings arrow right top > Hotkeys > unbind the keys you find annoying for me that's almost everything :)

Windows UI

I do most things via the wox so i don't need the taskbar anymore, it's just a waste of space screenshot

Problems

  • This setup eats noticable more memory than working on my linux machine, around 3-5gb more ram usage.
  • Sometimes after login the localhost forwarding in wsl doesn't work and the only solution to fix it seems to be restarting my pc
  • Restarting wsl (wsl --shutdown > open a terminal) breaks the docker access from within wsl, the docker command still work but starting a webserver and trying access it doesn't work. Usually i restart my pc if i still need to use docker after this, but i suspect you can also figgle around with the docker desktop settings to get it working again.
  • Sometimes the subsystem or the fish shell seems to crach but kinda still works???, it's supper wired but in the end i always restart my pc to solve it (note: Always when this happends there is also an update that can be installed when rebooting).

Honorable mentions

  • alt tab terminator: seems like a nice pice of software but i don't think it's wourth the $20
  • fast window switcher: i have the taskbar automaticly hidden and beacause of that i can't really use this software sadly, made an issue but seems like it's unmaintained
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Ansi 0 Color</key>
<dict>
<key>Blue Component</key>
<real>0.098039215686274508</real>
<key>Green Component</key>
<real>0.098039215686274508</real>
<key>Red Component</key>
<real>0.098039215686274508</real>
</dict>
<key>Ansi 1 Color</key>
<dict>
<key>Blue Component</key>
<real>0.35686274509803922</real>
<key>Green Component</key>
<real>0.20784313725490197</real>
<key>Red Component</key>
<real>1</real>
</dict>
<key>Ansi 10 Color</key>
<dict>
<key>Blue Component</key>
<real>0.46274509803921571</real>
<key>Green Component</key>
<real>0.90980392156862744</real>
<key>Red Component</key>
<real>0.71764705882352942</real>
</dict>
<key>Ansi 11 Color</key>
<dict>
<key>Blue Component</key>
<real>0.31764705882352939</real>
<key>Green Component</key>
<real>0.76078431372549016</real>
<key>Red Component</key>
<real>1</real>
</dict>
<key>Ansi 12 Color</key>
<dict>
<key>Blue Component</key>
<real>1</real>
<key>Green Component</key>
<real>0.83529411764705885</real>
<key>Red Component</key>
<real>0.46274509803921571</real>
</dict>
<key>Ansi 13 Color</key>
<dict>
<key>Blue Component</key>
<real>0.90588235294117647</real>
<key>Green Component</key>
<real>0.46274509803921571</real>
<key>Red Component</key>
<real>0.72941176470588232</real>
</dict>
<key>Ansi 14 Color</key>
<dict>
<key>Blue Component</key>
<real>0.70980392156862748</real>
<key>Green Component</key>
<real>0.74901960784313726</real>
<key>Red Component</key>
<real>0.42352941176470588</real>
</dict>
<key>Ansi 15 Color</key>
<dict>
<key>Blue Component</key>
<real>0.84313725490196079</real>
<key>Green Component</key>
<real>0.78431372549019607</real>
<key>Red Component</key>
<real>0.76078431372549016</real>
</dict>
<key>Ansi 2 Color</key>
<dict>
<key>Blue Component</key>
<real>0.46274509803921571</real>
<key>Green Component</key>
<real>0.90980392156862744</real>
<key>Red Component</key>
<real>0.71764705882352942</real>
</dict>
<key>Ansi 3 Color</key>
<dict>
<key>Blue Component</key>
<real>0.31764705882352939</real>
<key>Green Component</key>
<real>0.76078431372549016</real>
<key>Red Component</key>
<real>1</real>
</dict>
<key>Ansi 4 Color</key>
<dict>
<key>Blue Component</key>
<real>1</real>
<key>Green Component</key>
<real>0.83137254901960789</real>
<key>Red Component</key>
<real>0.46274509803921571</real>
</dict>
<key>Ansi 5 Color</key>
<dict>
<key>Blue Component</key>
<real>0.90588235294117647</real>
<key>Green Component</key>
<real>0.46274509803921571</real>
<key>Red Component</key>
<real>0.72941176470588232</real>
</dict>
<key>Ansi 6 Color</key>
<dict>
<key>Blue Component</key>
<real>0.70980392156862748</real>
<key>Green Component</key>
<real>0.74901960784313726</real>
<key>Red Component</key>
<real>0.42352941176470588</real>
</dict>
<key>Ansi 7 Color</key>
<dict>
<key>Blue Component</key>
<real>0.84313725490196079</real>
<key>Green Component</key>
<real>0.78431372549019607</real>
<key>Red Component</key>
<real>0.76078431372549016</real>
</dict>
<key>Ansi 8 Color</key>
<dict>
<key>Blue Component</key>
<real>0.098039215686274508</real>
<key>Green Component</key>
<real>0.098039215686274508</real>
<key>Red Component</key>
<real>0.098039215686274508</real>
</dict>
<key>Ansi 9 Color</key>
<dict>
<key>Blue Component</key>
<real>0.35686274509803922</real>
<key>Green Component</key>
<real>0.20784313725490197</real>
<key>Red Component</key>
<real>1</real>
</dict>
<key>Background Color</key>
<dict>
<key>Blue Component</key>
<real>0.098039215686274508</real>
<key>Green Component</key>
<real>0.098039215686274508</real>
<key>Red Component</key>
<real>0.098039215686274508</real>
</dict>
<key>Bold Color</key>
<dict>
<key>Blue Component</key>
<real>0.75576734293193715</real>
<key>Green Component</key>
<real>0.70378700769969904</real>
<key>Red Component</key>
<real>0.62377825081598537</real>
</dict>
<key>Cursor Color</key>
<dict>
<key>Blue Component</key>
<real>0.0</real>
<key>Green Component</key>
<real>0.29334646463394165</real>
<key>Red Component</key>
<real>0.95475113391876221</real>
</dict>
<key>Cursor Text Color</key>
<dict>
<key>Blue Component</key>
<real>0.19370138645172119</real>
<key>Green Component</key>
<real>0.15575926005840302</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Foreground Color</key>
<dict>
<key>Blue Component</key>
<real>0.84313725490196079</real>
<key>Green Component</key>
<real>0.78823529411764703</real>
<key>Red Component</key>
<real>0.70196078431372544</real>
</dict>
<key>Selected Text Color</key>
<dict>
<key>Blue Component</key>
<real>0.098039215686274508</real>
<key>Green Component</key>
<real>0.098039215686274508</real>
<key>Red Component</key>
<real>0.098039215686274508</real>
</dict>
<key>Selection Color</key>
<dict>
<key>Blue Component</key>
<real>0.84313725490196079</real>
<key>Green Component</key>
<real>0.78823529411764703</real>
<key>Red Component</key>
<real>0.70196078431372544</real>
</dict>
</dict>
</plist>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment