- Create a self-hosted chat service with your own Matrix server
A speed-run introduction to Matrix via Dendrite.
- Deceptively simple search-and-replace across multiple files
How to interactively search-and-replace across many files with just two commands, thanks to Vim.
- Look mom, I'm a GitHub Action Hero
The GitHub blog interviews me for their GitHub Action Hero series.
- Command line tricks for managing your messy open source repository
A handy toolbox for the terminal to help open source maintainers make their projects sparkle.
- The surprisingly difficult task of printing newlines in a terminal
Your guide to string interpolation quirks that confound the best of us.
- Bash and shell expansions: lazy list-making
A tour of brace expansion, shell parameter expansions, and playing with substrings in Bash.
- A cron job that could save you from a ransomware attack
How a simple scheduled job can help you quickly recover from ransomware.
- A lightweight, tool-agnostic CI/CD flow with GitHub Actions
How to take advantage of a simple GitHub Actions workflow without sacrificing agnostic tooling.
- A portable Makefile for continuous delivery with Hugo and GitHub Pages
My Makefile for building this site, optimizing images, and running my CI/CD GitHub Actions flow.
- How to quickly batch resize, compress, and convert images with a Bash one-liner
A fast command line interface solution for batch image processing.
- How to do twice as much with half the keystrokes using `.bashrc`
An overview of time-saving aliases, functions, and creating a useful Bash prompt.
- How to set up a fresh Ubuntu desktop using only dotfiles and bash scripts
Configure settings, install programs, and customize your desktop environment with a single bash command.
- How to write Bash one-liners for cloning and managing GitHub and GitLab repositories
Using xargs and awk in Bash to automate managing remote-hosted repositories.
- A quick guide to changing your GitHub username
Some additional steps to consider after making a change to your username on GitHub.
- Git commit practices your future self will thank you for
Learn how to easily create a clean and readable Git commit history with git squash, message templates, git stash, and tags.
- An automatic interactive pre-commit checklist, in the style of infomercials
How to set up an interactive checklist using a Git pre-commit hook script.
- Batch renaming images, including image resolution, with awk
How to batch rename images with custom values using file, awk, and rename - in rainbow colors!
- How to replace a string with sed in current and recursive subdirectories
The power to update multiple files with a single command in your terminal.
- How I created custom desktop notifications using terminal and cron
How you can use tools your Linux system already has to create custom desktop notifications.