between rebuilds 002

Mostly Xeet this time. Some tork, some darwin config, a links page, two movies, and one thing I gave up on.

Atuin says 254 rebuilds. That is twenty since 001, which for me counts as restraint.

A million keys in a month. 189 km of scrolling, which I refuse to think about.

Xeet

Xeet is an X client for the terminal.

I built the first version last September with the official API, because that is what you use. OAuth 1.0a, four credentials, a developer account, an app you have to name for some reason. So before typing 200 characters in a terminal you had to go be an X developer for twenty minutes.

I used it a couple of times and never opened it again.

It sat there until I was talking to blitz about something else, and somewhere in that conversation the obvious thing landed. The website posts fine. It has never once asked me for an API key. I log in and it works, so the browser is already an authenticated client, and I had just decided the developer API was the only door because it is the one with a sign on it.

Months. Over that.

So, DevTools. Post something, watch the network tab. It is a GraphQL call named CreateTweet and the auth is just my session, auth_token and ct0, with ct0 repeated in a header. I replayed it outside the browser and deleted fields until it broke.

That flipped the whole design. Instead of asking you for credentials, xeet auth finds the session already sitting in your browser, checks it, and keeps its own copy in the keychain.

Then Linux happened. I built all of this on a Mac and had quietly assumed a browser is a browser, which is wrong, Firefox and Zen keep their cookies somewhere else entirely. I also had no way to check any of it. So I started sending binaries to vaeseth to run on their machine, and that back and forth is how it actually started working. hehe.

The other half of the work is keeping an unsupported endpoint alive. The query IDs in the URL rotate, so Xeet reads the current ones out of the JS bundles the web app already ships. GraphQL will hand you a 200 with the error in the body. A create request that times out might have gone through, so retrying can post twice, which is why mutations here do a read-only check instead of retrying.

Finding the endpoint was not clever. Anyone who opens DevTools can see it. Sitting on it for months was the actual event.

tork

tork is at v0.3.2.

Best change: the same torrent listed across five indexes now folds into one row and grabs it with every tracker those indexes knew between them. Better swarm, and I stop scrolling past six copies of the same release. Filters, verified downloads, and Y to yank a magnet from anywhere came along too.

brew install tork, yay -S tork, nix run github:melqtx/tork. The nixpkgs PR is still sitting there.

dots

I have been on Helix for ages, that is not the news. What changed is how much of the Mac nix-darwin owns now. System settings live in the config instead of in a pane I have to go find. It is a nice feeling, having the machine written down.

Hammerspoon keeps earning its place. Right command is F18, held it becomes a hyper layer, hyper + h j k l moves focus. Same motion in Zellij, in Helix, and between windows.

nh darwin switch

The site

There is a /links page now, a live feed of things I read.

addlink https://example.com/thing paper

The title gets fetched from the page, and a Discord /link command hits the same worker.

Site is still Hakyll, markdown in, static HTML out, one flake, pushed to Pages. Everything on it that moves is a Cloudflare Worker: logs, links, the hit counter. My photos just live in the repo, so GitHub is my cloud storage now.

Workers are overpowered and I love them. One worker.js, a wrangler.toml, wrangler deploy, live in seconds, D1 right next to it, all in the free tier. Nothing to renew, nothing to SSH into. It is the only piece of my setup that has never broken on me.

Elsewhere

Watched The Odyssey and it was so good. I will defend Nolan in most rooms and this did not make that job harder.

The part that got me was Argos. Twenty years, everyone else needs proof, and the dog just knows immediately, and he has been waiting the whole time for exactly that one moment and then he is done. Sat there for a second after that one.

Also watched Spider-Man Brand New Day, which ruled. Bro fumbled MJ though, and I have not really recovered from it. I am choosing to believe that gets fixed.

meteorsmp is closed now.

I miss it more than I expected to. It was genuinely fun, and I do not think I appreciated at the time that it was a specific set of people at a specific moment and not really a server at all.

Growing up, apparently

I have a bad habit of not finishing things. I pick something up, move really fast with it, get addicted for a few weeks, then drop it like it never existed. There is no plan behind any of it. Whatever has my attention that week gets all of me, and when the high wears off I move on and leave the last thing at seventy percent.

Case in point, I started messing with inference stuff this month. Got somewhere, hit the part where I actually did not understand what I was doing, decided I was too dumb for it, and have not opened it in three weeks. Which is the same shape as Xeet sitting dead from September to now, except Xeet got lucky and had a conversation happen to it.

I do not have a fix. I just noticed the pattern clearly enough this month that I cannot pretend it is not there anymore.

cool people & cool stuff