Home

About me


Hello!

My name is Nathan, and I’m a software developer based in Toronto, Canada.

“expitau”?

You’ll probably see my handle “expitau” on my website, email, and github. It’s inspired by Euler’s formula!

eix=cos⁡(x)+isin⁡(x)e^{ix} = \cos(x) + i\sin(x)

When we evaluate this expression at τ\tau (where τ=2π\tau = 2\pi), this formula simplifies to exp(iτ)=1\text{exp}(i \tau) = 1 (read “exp i tau equals 1”). Euler’s formula is a beautiful, elegant solution to a complex mathematical problem. It seamlessly bridges the seemingly unrelated worlds of calculus, trigonometry, and complex numbers. I believe that complex challenges often have an underlying simplicity, and code should look to unearth this simplicity to be readable, maintainable, and efficient.

Software

OS | NixOS

NixOS is the worst operating system from 50 years in the future. Over the past couple years, I’ve progressively made all of my tooling more and more deterministic. Even when I still used Windows years ago, I had setup scripts and would frequently factory reset my computer to a “clean” state. I’ve created my own Arch-based immutable distribution, but it just can’t compete with the speed and reliability of the /nix store.

IDE | VSCode

VSCode is an amazing editor, and while I’ve found it to be a bit slow (for a text editor haha), I love the seamless remote development integration, which is a dealbreaker for me in any other editor.

Subsystem | Incus

When I initially switched from Windows to Linux, I actually missed WSL2. The ability to have a work environment where I could install programs freely without worrying about breaking my system was great. Fortunately, I was able to recreate this (and more!) with pure containers. They integrate seamlessly with VSCode and allowed me to develop with Ubuntu for work (so people couldn’t blame me for using a different environment when things broke) and Arch for my personal projects (so I get the most up-to-date software without resorting to manually adding repos). Plus, in contrast to virtual machines, they can start up nearly instantly, are deterministic, and don’t use any memory while idle.

Shell prompt | Custom bashrc

I wanted to like starship.rs, I wanted to like powerlevel10k, but the config and installation was too annoying to maintain across different environments. I used trueline.sh for a bit, but even it became too cumbersome. Sometimes the simplest solution is best, so I just wrote my own.


bind '"\t":menu-complete'

alias ls='ls --color=auto'
alias grep='grep --color=auto'

prompt_command() {
    local STATUS=$?;
    local BRANCH=$(git branch --show-current 2>/dev/null);
    
    PS1="\n╭─ \w";
    [ -n "$BRANCH" ] && PS1+=" \[\e[38;5;248m\]$BRANCH\[\e[0m\]";
    [ "$STATUS" -ne 0 ] && PS1+=" \[\e[38;5;203m\]$STATUS\[\e[0m\]";
    
    PS1+="\n╰ ";
    
    # Custom coloured prompt symbol based on environment
    if [[ "$(uname -n)" == *dev* ]]; then
        PS1+="\[\e[38;5;75;1m\]λ\[\e[0m\] ";
    elif [[ "$(uname -n)" == *work* ]]; then
        PS1+="\[\e[38;5;208m\]λ\[\e[0m\] ";
    elif [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
        PS1+="\[\e[38;5;71;1m\]λ\[\e[0m\] ";
    elif [ "$(whoami)" = "root" ]; then
        PS1+="\[\e[38;5;203;1m\]λ\[\e[0m\] ";
    else
        PS1+="\[\e[38;5;141;1m\]λ\[\e[0m\] ";
    fi
}

PROMPT_COMMAND='prompt_command'

Gnome extensions

  • Blur my shell

    Very pretty and has a lot of options now! This is a must-have for me.

  • Caffeine

    I use it more than I thought I would

  • Color Picker

    Great, works identical to the Powertoy on Windows

  • GSConnect

    It works, but isn’t super useful

Hardware

Laptop | Dell XPS 17 9720

This is my current daily driver. Its performance has been more than sufficient for my use, and I’ve encountered none of the heating issues that I had with my previous (Lenovo T490) laptop. It looks amazing, and the keyboard and trackpad feel great. However, the webcam leaves some to be desired, and I miss my ethernet / HDMI / USB-A ports. When docked at home, I connect it to two external displays with a Dell USB hub (unfortunately, Dell’s got me locked in to a 130W hub), which works great but definitely isn’t worth the price.

Displays | Asus VA24E

I have two of these monitors, and they’re great. They’re cheap, and the colours are good enough for my use. I’ve set them up with a dual-monitor arm from Amazon, and they can comfortably sit in any position. I wish they had DisplayPort, but I got the two of them for about $200 so I can’t complain.

Mouse | MX Master 4s

This is the best mouse. It’s expensive, but its quality is incredible and I am thoroughly addicted to hyperscroll.

Phone | Pixel 6 Pro w/ GrapheneOS

I’ve installed GrapheneOs on this and it’s been a pretty great experience. While I do miss tap-to-pay and call screening a bit, the privacy (and battery life) improvements are fantastic.

Tech Stack

I’ve used a lot of technologies, so it’s very challenging to make a comprehensive list. Here are a few I’ve worked with:

Programming Languages (click to expand)
Web Programming Languages

Javascript Badge Typescript Badge PHP Badge CSS3 Badge SASS Badge HTML5 Badge

Application Programming Languages

C# Badge Java Badge

Scripting Programming Languages

Python Badge Node Badge GNU Badge R Badge Powershell Badge AutoHotkey Badge

Foundational Programming Languages

Rust Badge C Badge C++ Badge

Markdown & Configuration Languages

Markdown Badge YAML Badge JSON Badge TOML Badge XML Badge INI Badge CSV Badge

Libraries and Frameworks (click to expand)
Web Frameworks

Vue Badge React Badge Svelte Badge Astro Badge Electron Badge

Web Libraries

Tailwind Badge Bootstrap Badge

Ops & Deployment (click to expand)
Databases

MongoDB Badge MySQL Badge PostgreSQL Badge

Development Tools, Operating Systems, IDEs

VSCode Badge Visual Studio Badge Git Badge Github Badge Linux Badge Windows Badge Unity Badge

Infrastructure

Docker Badge Kubernetes Badge Amazon Badge Portainer Badge Watchtower Badge CircleCI Badge Terraform Badge