¬ just serendipity 🍀

¬ just serendipity 🍀

Thiago Perrotta

Welcome to my digital garden – a space dedicated to exploring technology and sharing what I’ve been learning. This site reflects my passion for continuous learning and open-source software, wherein I document my journey, offer insights, and dive into miscellaneous topics that reflect my interest. My goal is to maintain a corner of the Web for self-expression focused on valuable, distraction-free content. I believe in the power of the Open Web as a platform for sharing knowledge.

Latest Posts

Claude code now officially supports showing context window information like percentage of usage in status line (via Ashik Nesin): > /statusline Add a progress bar showing the percentage of context currently used ⏺...
NetNewsWire is a great RSS client reader for macOS and iOS. I already use miniflux though. It’s too bad NetNewsWire does not support miniflux as a server back-end: Syncing via iCloud, Feedbin, Feedly, BazQux, Inoreader, NewsBlur, The Old...
Going on vacation? Have an iPhone? There’s no need to delete Slack, or your favorite on-call app. Simply offload noisy apps. Why is this better than uninstalling them? Because it’s much easier to restore them once you are back. You do so...
Reordering mobile editing icons in logseq by Colin Bate: I found a way to avoid needing to constantly scroll sideways to access the icons I need. This is why I love the indie web. I was looking for how to do exactly the same operation,...
This is one little productivity boost to make you a 10x Engineer! None of the popular AI blogs talk about this!!1! Problem statement: Make Claude Code emit a chime whenever it needs attention. diff Copy commit...
This will never get old. Previously. It’s likely that person will never try and contribute to your project again.
I released a new tool: friendly_ping, a shell script to list all your open GitHub pull requests (still) waiting for review. Problem When contributing to multiple repositories on GitHub, it’s easy to lose track of which PRs are waiting...
I am reasonably confident to end up (fully) adopting jj in 2026. Baby steps though. Can I attempt to start to use jj to manage this blog? First, the usual: shell Copy brew install jj Second, a basic config file. git requires one too:...
Inspired by tobi/try (via), I created my own try in pancake: Interactive ephemeral workspace manager. Create and navigate to temporary project directories with fuzzy finding, automatic date-prefixing, and recency scoring. Automatically...
Humans are terrible at remembering complex command lines. This issue compounds whenever there is a myriad of commands to remember. I’ve been thinking for ages on how to address this gap efficiently. I finally got a decent workflow....
Deleting, scrubbing, redacting old shell history entries is now easier than ever, thanks to atuin. shell Copy % atuin search '^aws_login_headless' --delete deleting 019ad59e973b7c139c4a1d67fe2155be deleting...
A new year, a new advent of code. My Pythonista self is always happy. AoC 2025 Day 1: Secret Entrance: Part One python Copy #!/usr/bin/env python3 import sys def main(): with open(sys.argv[1]) as input: lines = input.read().splitlines()...
Canary Tokens, introduction: What are Canarytokens Canarytokens are like motion sensors for your networks, computers and clouds. You can put them in folders, on network devices and on your phones. Place them where nobody should be poking...
LLM: Unlike bin.install in Homebrew (which moves files by default if not given a hash), install (the Unix command) copies files. It does not consume the source file. Why would you design bin.install like this??! You’ll see stuff like...
Ghostty supports shaders. This repo hosts a collection of custom shaders readily available. I integrated them with my .dotfiles via a submodule: Ghostty config: custom-shader = shaders/cursor_tail.glsl The cursor_tail.glsl file was added...
Search Random