My Windows Dev Setup (WIP)

Intro

I’m a die-hard Windows guy. To begin with, I can’t live without OneNote — I’ve been a big fan of it for 10+ years (since its debut in Office 2003), including 5+ years on ThinkPad X201T with its Wacom-based digitizer stylus. But in the world of computer science, Windows is often a 2nd citizen to unix-ish platforms. Unwilling to give up the conveniences, I gradually came up with a setup that allows some unix-ness while staying “clean”.

File Organization

All below are placed under a single “root” folder. For me it’s usually a single NTFS partition, but it could be a folder in the system partition (e.g. my current lab PC). Of course you could always subst (read: mount or symlink) any folder to a partition and vice versa but I wouldn’t bother.

Whenever possible, I use BTSync v1.4 (version pinned because they’re steadily making the client ransomware) for synchronization across all my PCs. Dotfiles (currently only vim) are managed with Git instead.

Essential:

  • /app: Home of self-contained apps. Most of them do not depend on DLLs in system32, registry, or other Windows artifacts, which in turn means little/no need for “installer”.
    • anaconda, arduino, dosbox, git, lua, msys64, octave, texlive, vagrant
    • putty, winscp
    • kmplayer, inkscape, fritzing
    • vim
  • /appdata: Some apps (not limited to those in /app) manage large blobs of data. Instead of having them stored in system partition which often gets wiped, I’d rather redirect them here (symbolic link when necessary).
    • vagrant (because box images are stored here)
    • altium, eagle
    • evernote, onenote (I mostly leave onenote alone now, but if I don’t I put it here)
    • SteamLibrary
    • foobar2000 (kinda tricky — might be removed)
  • /bin: Different from /app, this is where I put various single-binary apps/utils and shell/batch scripts.
    • ctags, curl, wget
    • massren, jq
    • nssm, sscom32, streams, hxd, rapidee
  • /conf: Configurations. BTSync’d. The most common usages are:
    • symbolically linked to app’s own config files/folders
    • manually saved/loaded in app
  • /home: ~ but only for dotfiles. This can be done because some unix-ish tools (vim, ssh, bash, etc.) actually respect %HOME% env var.
    • .ssh
    • .vim, vimfiles
  • /lib: Not every programming language has npm. Plus even in the case of Javascript I sometimes have the need to work on libraries written by someone else.
    • goroot: for go-lang, which dumps everything here
    • MatLab: because you always seem to need to copy individual scripts/functions around (so uncivilized!)

My data:

  • /incoming: Downloads I’m too lazy to immediately categorize
  • /share: Large folders shared with others through BTSync
  • /music, /video: as advertised
  • /proj, /school: also as advertised
  • /res: Resources. BTSync’d. Usually PDFs that sum up to large sizes.
    • /book
    • /datasheet
    • /font
    • /ref: References (e.g. tutorials, white papers, manuals, etc.)
  • /sketch: Temporary workspaces. Some are mini-projects that never got to “complete” status but I still find useful.

Environment Variables

Hint: rapidee is a decent GUI-based env manager.

  • HOME: /home
  • GOROOT: /lib/goroot
  • VAGRANT_HOME: /appdata/vagrant
  • APATH: Installers often modify PATH, which can mix up with my own PATHs. This variable essentially “refactors out” these paths. Use: prepend %APATH%; to PATH.

Dependencies

Some Tricks

Startup Tasks

Win+R, shell:startup

Now you have access to the old good Startup folder where you can create shortcuts to existing stuff.

Disable Windows Defender

Source: http://slashgenie.com/permanently-disable-windows-defender-in-windows-10/

gpedit.msc (group policy):

Computer Configuration / Administrative Templates / Windows Components / Windows Defender / Turn off Windows Defender

EDIT: doesn’t seem to work…

CapsLock remap as IME switch

Using AHK:


CapsLock::#Space
+CapsLock::+#Space

view raw

caps-ime.ahk

hosted with ❤ by GitHub

I know that many programmers like to have Ctrl on the home row. For me the muscle memory is too hard to correct, but before I came across this, I haven’t come up with anything useful to map to the “waste key”…

Leave a comment