¬ 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

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...
It takes effort to overcome friction. This year I have completely moved away from Google Search. First, thanks to ChatGPT. Then, thanks to Kagi. You may think this is a blog post gimmick to sound dramatic, but it is really not. Nowadays...
My current workflow to manage shell history is simple, I have this config in my ~/.zshrc.d/ shell Copy # fzf: fuzzy file finder if (( $+commands[fzf] )); then # alpine/arch, debian src_files...
I face this annoyance all the time: thiago.perrotta@thiagoperrotta-MacBook-Pro ~ % python zsh: command not found: python 127 thiago.perrotta@thiagoperrotta-MacBook-Pro ~ % python3 Python 3.14.0 (main, Oct 7 2025, 09:34:52) [Clang 17.0.0...
From ‘Technical Support’ tales of the trenches. Whenever CorelDRAW is installed on Windows, by default it will display ads upon startup, every single day. I call this malware. To disable this hostile behavior: Open Task Scheduler...
When using Chromium or derivatives, you can add a bookmark to your Bookmarks Bar with the following link: chrome://bookmarks It’s a quick shortcut to Settings > Bookmarks and Lists > Bookmark Manager.
Search Random