Workstation 2025
It’s been almost 2 years since my last workstation setup post. At a high level, it hasn’t changed much, but it’s been a while, so I figured it’s a good time to share some updates.
Host - MacOS
Not much has changed on my Macbook setup.
- pass - password management tool. I also use a private git repo to sync with my iPhone. One of the best tool I’ve used and would highly recommend over any password manager SaaS.
- Maccy - open source clipboard manager that supports fuzzy search. I also have a wrapper to ignore any password being copied. To be honest, I don’t know if I can ever live without it.
- lemonade - to sync system clipboards between the host and the virtual machine.
- Hammerspoon - for keyboard shortcuts & window tiling
qutebrowserZen - a lightweight Firefox based browser, something I tried recently and quite like it. However, I will use Chrome for work because of the Google Meets experience.kittyGhostty - a new terminal emulator written in Zig- and last but not least UTM. It’s super easy and effortless to create a new NixOS VM
Before jumping in to the NixOS VM, I want to point out a very important thing, that is I use Nix (with Home manager on top) as the package manager for both MacOS and NixOS. This allows me to have a consistent user environment across both systems. Tools like
git,zsh,gpg, and many other cli tools I can set up once and use everywhere.
Virtual machine - NixOS
I have tried a few different setups, like using VirtualBox or VMware Fusion with NixOS + i3. Maybe I did something wrong, or didn’t spend enough time to work out the spice-vdagent issue, or the HiDPI config on NixOS, so I always end up going back to UTM + NixOS (via SSH) setup. This setup has worked really well for me last 2 years, so maybe there is less motivation for me to try something new.
Clone this repo if you want to try it yourselve.
Step 1-3 is simply install a minimal NixOS (no desktop environment) in which root user has password as root. The result of these steps is this NixOS UTM template that I’ve created and used myself. You can download and use it directly, or follow the steps below to create your own.
-
Use UTM to create a new VM with the following settings:
- Custom: Virtualize
- Preconfigured: Linux
- Boot ISO Image: download minimal ISO image from NixOS
- Memory:
10240(on 16GB host) - CPU:
8(on 10-core host) - Disk:
100GB - Name:
NixOS - Network:
Emulated VLANwith Port Forwarding on port 22
-
Start the VM and set root password as
root
$ sudo -i
$ passwd
- From this repo root directory, run command to install NixOS
$ make install
Once finish installing, shutdown the VM, remove bootable ISO, then start the VM again.
Before continuing step 4, make sure to check out the
Makefileand./vm/bootstrap.nixand make necessary changes to your custom details. This step will create new OS user, copy secrets (GPG keys), config Tailscale, install home-manager, neovim, etc. Most of them are optional, so you can remove what you don’t need.
- Run command to bootstrap the VM
$ make bootstrap
That’s it. It’s all good to go. You can now SSH into the VM and start using it.