All Articles

Hyper-powered Windows

I like to tinker. I have a wide array of electronics (e.g. camera lenses, microphones, electrical components) that honestly should get a lot more use than they do. And as a software developer, there is an increasingly large set of things that I would like to tinker with (and definitely do not have time to dig into).

When I switched from Arch Linux to Windows, tinkering became harder.

The switch had some great upsides, for example, no longer being a sysadmin. On the other hand, even basic development tasks were a bit hampered by the lack of a decent, or at least, familiar command line (and related tools).

And while solutions exist to that problem, like running a virtual machine or virtualized operating system… I’m not having any of that. That ain’t me 😤

Fortunately, Windows developers have learned that a lot of folks are in a similar situation and have made it very easy to run Linux in Windows via Windows Subsystem for Linux (WSL).

To be honest, that change alone got me 90% of the way there to having a much better developer experience 🥳

However, I work in different environments; at work I have a Mac, and at home, Windows, and I like having tools that are similar-ish across different environments.

At some point in time, I discovered Hyper: Hyper is a terminal, like iTerm2 on Mac, but a big difference is that it’s an Electron app. Electron allows folks to write cross-platform applications with HTML, CSS, and Javascript, which (often) also means being able to write plugins or extensions for them.1

Getting Hyper installed was easy, but by default, it runs the Windows command prompt. To get it to run WSL, I need to make a change to the .hyper file (it’s configuration file, also found via Edit > Preferences)

// the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
// if left empty, your system's login shell will be used by default
// Windows
// - Make sure to use a full path if the binary name doesn't work
// - Remove `--login` in shellArgs
// Bash on Windows
// - Example: `C:\\Windows\\System32\\bash.exe`
// PowerShell on Windows
// - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
shell: 'C:\\Windows\\System32\\bash.exe',

Since I also run the fish shell, I needed to make some changes to support that. Fortunately, I found a tip in this blog and added the following changes to the end of my ~/.bashrc

# Launch Fish
if [ -t 1 ]; then
  exec fish

…And that’s it! Or it would have been, if I wasn’t done tinkering.

I’ve tried mucking around with terminal colours previously, and one of the nice things about using Hyper is avoiding that completely. By adding a new Hyper plugin, hyper-solarized-dark, I was able to add one of my favourite colour schemes easily.

// In .hyper
plugins: [  

…And the terminal reloads almost instantly after seeing the change, and installing the new plugin!

I didn’t feel the need to add more plugins but the fact is that there are lots available and you can develop your own! Plus, they’re not all for work; some make you feel powerful or even surprise you 😏

It may not seem like much, but these small changes make a big impact for my work: WSL lets me use great *nix tools in Windows, fish makes for an easier time in the command line, and Hyper powers it all and allows me to customize things easily.

The combination of these tools has helped me to create my own Hyper-powered Windows… what might you combine to become a better tinkerer?

P.S. If you’re looking for some other great tools to try out, I’d recommend oh-my-fish (if you’re already using fish)2 and diff-so-fancy (much better diff tool for git users)3. I use the plain theme which looks like this:

Screenshot of the Hyper terminal with `oh-my-fish` running the `plain` theme

  1. I’ve never written an extension before so I don’t know why this is so appealing to me as a feature. I just really like the idea of it 💭
  2. Unsurprisingly, I used to use zsh and was a huge fan of oh-my-zsh. In particular, the bureau and blinks themes, which are sadly not available in oh-my-fish
  3. If you use the --patch flag in git, you may need to make some additional changes. See this thread