Stow vs Home Manager: Managing Dotfiles on NixOS (and Beyond)

I’ve used GNU Stow to manage dotfiles for a while. It’s simple, elegant, and gets out of your way. You organise configs into directories, run stow */, and symlinks appear in $HOME. Done. But once I committed to NixOS as my daily driver, Stow started feeling like the wrong tool for the job — an imperative shim bolted onto a system designed to never need one. This post covers what changed, why Home Manager replaced Stow in my workflow, and when Stow is still the better choice. ...

April 6, 2026

The Start of Home Manager Journey

One of the things I love most about NixOS is that once you get something working, it is reproducible everywhere. This post covers how I wired up Alacritty, tmux, and Zsh with Oh My Zsh into a single shared home-manager module that applies across all my machines. The setup All my machines share a home/modules/base.nix file that is imported into each host’s home-manager configuration. The goal was a terminal experience that: ...

April 4, 2026 · SarCoptU

Secure Synology With Tailscale

Securing Nextcloud on a Synology NAS with Tailscale Running Nextcloud at home is great — until you realise your login page is visible to the entire internet. Even with two-factor authentication, you’re relying on Nextcloud’s code being bulletproof, and it’s had its fair share of CVEs over the years. The fix? Put it behind Tailscale and make it completely invisible to the outside world. Here’s how I set it up on a Synology NAS running Nextcloud in Docker, accessible from GrapheneOS and NixOS machines — with HTTPS and zero port forwarding. ...

March 20, 2026

Migrating from WordPress to Hugo: A Complete Guide

After years of running my blog on WordPress, I finally made the switch to Hugo and GitHub Pages. The result? A blazingly fast, version-controlled blog that costs nothing to host. Here’s how I did it and what I learned along the way. Why I Made the Switch WordPress is powerful, but over time I found myself frustrated with: Performance issues: Even with caching plugins, my site felt sluggish Security concerns: Constant updates and vulnerability patches Hosting costs: Paying monthly for shared hosting Database complexity: Backing up and managing MySQL databases Plugin bloat: Each feature required another plugin Hugo offered a compelling alternative: static site generation, Git-based workflow, and free hosting on GitHub Pages. ...

February 9, 2026 · SarCoptU

Hugo Cheatsheet

Hugo Cheatsheet A quick reference for the most useful Hugo commands, flags, and tips. Core Commands Command Description hugo new site <directory> Create a new Hugo site in the specified directory. hugo new <section>/<filename>.md Add a new content file (e.g., hugo new posts/my-first-post.md). hugo server Run a local development server with live reload (defaults to http://localhost:1313). hugo server -D Include drafts (draft: true) when serving locally. hugo Build the site for production (outputs to public/). hugo -d <output-dir> Specify a custom output directory for the generated site. hugo --minify Minify HTML/CSS/JS during the build for smaller payloads. hugo --gc Run garbage collection to remove unused files from the cache. hugo version Show the installed Hugo version. hugo env Display environment variables (useful for debugging). Useful Flags & Options Flag Purpose -s, --source <path> Set the working directory (useful when running from outside the site root). -b, --baseURL <url> Override the site’s base URL (good for staging environments). -t, --theme <name> Force a specific theme (overrides the one set in config.toml). --cleanDestinationDir Delete everything inside the destination folder before building. --ignoreCache Skip the cache and reprocess all files (helps when you suspect stale data). --verbose Show detailed processing information (great for troubleshooting). --logLevel <level> Control log output (debug, info, warn, error). Content Management Tips Front Matter ...

January 16, 2026

Import an OVA into QEMU/KVM

A reliable, step-by-step guide to bring a VirtualBox/VMware .ova into QEMU/KVM, with both GUI and CLI paths—and fixes for the most common pitfalls.Contents Prerequisites 1) Extract the OVA 2) Convert VMDK → QCOW2 3) Create the VM in virt-manager (GUI) 4) Alternative: virt-install (CLI) 5) Common gotchas & fixes Quick troubleshooting checklist Prerequisites QEMU/KVM, libvirt, and virt-manager installed on the host. User is allowed to manage libvirt (typically being in the libvirt/libvirtd and kvm groups). Enough disk space to hold the converted image (QCOW2). 1) Extract the OVA An OVA is a tar archive containing an .ovf (metadata) and one or more .vmdk disks. ...

September 2, 2025 · SarCoptU

Syncing Virtual Machines Over The Network with a NAS (SMB)

A simple, repeatable workflow for one VM image (Kali.qcow2), root-owned files, and an SMB share. Overview I run a Kali Linux virtual machine under QEMU/KVM and wanted to use the same VM across three different machines, while keeping a central backup on my NAS. The approach below keeps one master copy on the NAS and uses rsync to push updates from whichever host I used last and pull them on the next host. ...

September 2, 2025 · SarCoptU

Taming the Virtual Hydra: Troubleshooting VirtualBox on NixOS

What started as a quick VirtualBox install turned into a multi‑headed boss fight: USB errors, a sulking kernel driver, a turf war with KVM, and even a Nix syntax bite. Here’s the complete journey and the fixes that finally made my VM boot. Head #1 — USB devices wouldn’t enumerate Can't enumerate USB devices Could not load the Host USB Proxy service: VERR_NOT_FOUND Root cause: Host USB support + Extension Pack missing, and the user not in vboxusers. ...

August 24, 2025 · SarCoptU

NixOS Cheatsheet

If you’ve ever felt overwhelmed by NixOS commands, flakes, or the dreaded garbage collection panic, this guide is for you. It’s not just a cheatsheet—it’s a practical survival kit for running NixOS with flakes, keeping your system clean, and always having a rollback strategy when things go sideways. 🖥️ NixOS Essentials Task Command Show version nixos-version Edit config (classic) sudo nano /etc/nixos/configuration.nix Rebuild + switch sudo nixos-rebuild switch Build only (no switch) sudo nixos-rebuild build Roll back last rebuild sudo nixos-rebuild switch --rollback List generations sudo nix-env --list-generations --profile /nix/var/nix/profiles/system ⚡ Flakes Basics Task Command Init flake nix flake init -t templates#nixos Show flake outputs nix flake show Update all inputs nix flake update --commit-lock-file Update one input nix flake lock --update-input nixpkgs --commit-lock-file Build system sudo nixos-rebuild build --flake .#<hostname> Switch system sudo nixos-rebuild switch --flake .#<hostname> Boot (safe) sudo nixos-rebuild boot --flake .#<hostname> 🔄 Safe Updates & Rollbacks Keeping your system updated is great… until it doesn’t boot. Here’s how to avoid disasters. ...

August 24, 2025 · SarCoptU

Dual‑Boot: Windows 11 + NixOS (with Flakes)

For ages I wanted a clean dual‑boot between Windows 11 (for the few things that require it) and NixOS (for everything I actually enjoy). This is the full journey: GParted wizardry, fixing MBR/GPT issues, laying out a big EFI (because NixOS loves EFI space), and finishing with flakes. Step 1 — Disk Layout in GParted I booted a live USB with GParted and created the following: EFI System Partition (ESP): 1030 MB, FAT32, flags boot, esp Windows: 200 GB, NTFS Linux swap: 8 GB Linux root: rest of the disk (later Btrfs) Why a big ESP? NixOS + systemd‑boot keeps multiple generations of kernels/initrds. A tiny 100 MB ESP fills up fast. ...

August 23, 2025 · SarCoptU