10x Developer Workflow on Windows

This article is based off of my .dotfiles repo and makes references to files inside of it.

Overview

If you plan on being a software developer or similar job for a long time, chances are you will spend a lot of your life using a computer. So why not learn to use a computer as efficiently as possible and hopefully get more done in less time.

On most tasks, using a mouse is slower than if you were to use a keyboard shortcut. First, you have to move your hand off the keyboard onto your mouse and then move around and click the UI to complete your task.

By going mouseless, you subscribe to the idea that the effort of learning a bunch of shortcuts and configuring your system (which could take a lot of time depending on how deep you get into it) is worth it for the small amount of time you save every time you use a shortcut, and that this small amount of time turns into a significant amount in the span of years. In my non-scientific personal experience, I would say pressing a shortcut saves me about ~2 seconds on average.

Going mouseless also makes writing code more fun. At first, it makes coding feel like a puzzle game where you are trying to find the quickest way to write and edit your code and once the shortcuts are in your muscle memory, you'll be using your computer at speeds you could have never imagined, and you'll feel like a wizard. Which leads to the last reason and truly the end goal:

Makes you superior to others.
r/vim - WHAT GIVES PEOPLE FEELINGS OF POWER MONEY STATUS USING VIM|400

Why Windows?

If you go deeper into developer experience, you would know that the best place to be is Linux, so why do I stay over at Windows?

The reason for me is native support for productive software (mainly Ableton) and games (although I don't play as much nowadays). I know I could dual boot operating systems or run compatibility layers like wine. But I haven't gone through the trouble of researching how to set everything up, and I have a good enough computer to not care about all the resources Windows hogs up.

Setting up

First, clone my dotfiles repo. I recommend cloning it in ~/.dotfiles, but you can place it wherever.

Second, install all the packages and programming languages.
For this I use WingetUI, an amazing GUI for finding and managing packages from all sorts of windows package managers.
Edit WingetUI-Packages.json by deleting the packages you don't want, then import the file into WingetUI and install the packages.

Tip

Read why you should use a package managers here

Third, run the powershell_installs.ps1 script that installs a couple of PowerShell modules that enhance the experience of using the command line.

Finally, run the setup_configs.ps1 script that removes the configs found in the default config directories of all the tools and replaces them with a hyperlink to the configs found in this repo.

The idea is that you have all your configs in a centralized repo where you can edit them in one place. I shouldn't mention that you should back things up if you have configs of your own in those directories before running this. Make sure to read the script and see what it does.

That's it! Let's talk about all the tools and other files inside the repo.

Tools

PowerShell

Microsoft.PowerShell_profile.ps1 is the config file for PowerShell and does the following:

If you find PowerShell startup gets slower than you would like, I would recommend commenting out or uninstalling oh-my-posh and terminal icons.

The terminal emulator I use is Windows Terminal

Window Manager

If you aren't familiar with tiling window managers like i3 from the Linux world, they basically organize your screen into non-overlapping frames, instead of letting windows float and stack on top of each other like we have grown accustomed to.

With floating windows, when you have a lot of programs open things can get messy quickly and Alt+Tabbing through them gets tedious. Tiling window managers take all the inconvenience away. And of course, everything is controlled with keybindings. A tiling window manager is an essential part of the puzzle for getting rid of your mouse.

The two biggest tiling window manager projects for Windows are komorebi and GlazeWM. Komorebi is probably faster and more resource efficient since it is written in Rust, but I stick with Glaze for now since it has a cool status bar built in I like.

demo

Showcase from the GlazeWM docs

Running window manager at startup

These window managers don't have a setting you can turn on to run at startup, so to archive that I did the following:

Open task scheduler -> create task -> set settings -> press OK

For the settings, you'll want to set:

Browser

For the browser, install a vim keybindings extension like VimiumFF, Vimiumc, Tridactyl or SurfingKeys. They should all work fine. This is one of the easiest thing to add to your workflow out of everything in this article and the one you will feel the benefits of the fastest. See a demo

You can check out what other browser extensions I recommend for Firefox, most of them are available on Chrome as well.

Power Toys

This is a cool collection of software Microsoft has released for free. The features I use the most are:

The Spotlight feature in macOS is great; you can find any file and folder in your system, launch apps and the design is clean.

In contrast, ever tried searching for a file at the root of your C:/ drive in Windows File Explorer and had to wait 5 minutes for the results? yeah, me too... I found out there are ways to make the search much faster after some minor configuring, but still I find that the experience isn't the best. So I use Everything, which indexes your file system once, and then you can instantly find any file/directory in your system. It also has advanced searching features like filters and regex patterns. You might want to take a little time in setting a list of directories to ignore because it searches through your entire file system.

After you install Everything, you might find that having to launch the app every time you want to search for something quickly is a bit inconvenient. To get the same experience as Spotlight I use Flow Launcher which has Everything support built in and has a lot of community plugins that let you do things like launching steam games, searching and playing songs on Spotify, searching obsidian notes, asking ChatGPT something and many more.

One of my favorite features is when searching for a file/directory and pressing Shift+Enter very useful options show up. See the FlowLauncher homepage to see demos.
Pasted image 20231030182911.png

Power Toys also has a very similar launcher that has many features, but I stick with Flow because of the community plugins I mentioned before.

Neovim

nvim\ is my personal Neovim config folder.

Neovim has been the most important program for improving my productivity when writing code. My config is highly personalized, and going through all the features would require me to write a whole separate guide.

I would suggest to start getting into vim by first trying out popular vim keybinding plugins available on your favorite code editor and get used to those first. Then, if you want to dive deeper into the power of Neovim, kickstart.nvim is the best place to start. Alternatively you can try out popular preconfigured distributions like LazyVim, LunarVim, NvChad... However, configuring things on top of these distros can be a bit wonky since you have to learn how the people that made the distro decided to configure things, and doing this without even knowing the basics can be hard.

Taking Neovim from a mere text editor to a full-featured IDE with features like intellisense, debugging, testing, etc... on your own takes quite a lot of work and configuration. However, I don't regret having configured Neovim on my own. For one, all the keybindings (which there are MANY to learn) have stuck in my brain fairly quickly since I was the one setting each one of them. And second, it has given me a deep confidence and understanding of dev tooling.

Before taking on the task of having a Neovim config I am happy with, some features inside editors/IDEs (and even of tooling outside of that like linters, formatters, language servers and debuggers) felt mysterious to me, or I had no knowledge of. After, I am confident and feel like I know every nook and cranny inside a code editor and have gained massive knowledge about how dev tooling works.

Having said all this, for most people the tradeoff frankly isn't worth it and an editor like VS Code is more than good enough. If you take anything out of this section is at least learn and use vim keybindings, you won't regret it.

Note taking

Note taking has been a huge part of my productivity. I organize a big part of my life with notes: thoughts, projects, to-do lists, books I read, courses and tutorials I watch, information about people... pretty much anything I wouldn't want to forget.

For note-taking I use Obsidian with vim keybindings. Obsidian is great because it has so many features and plugins that extend its functionality to anything you can imagine.

Very importantly, your notes will stand the test of time since your notes are stored in simple Markdown format. You can store and host the files yourself or host in any cloud storage provider. You don't have to rely on a company to host your very important notes that are in a weird format that make it hard to migrate to other note-taking apps in the future. Also, I can access my notes on my phone by syncing them and using the Obsidian mobile app.

For more information on building a personal knowledge base that allows you to quickly find information, do research on "building a second brain" and "Zettlekasten" or similar note-taking methods.

Miscellaneous

change_background.bat is a script that changes the desktop background to a randomly chosen image from a specified directory.

Checkout my keybindings. You can copy them or use them as inspiration for your own keybindings.

See a list of more dev tools that can improve your workflow here


Comments