Clicking will open your email client to send a reply
I wanted to always have up to date hash of contents of the directory after any change to use as a cache key. Started to list files, hashing them only to realize jj is already constantly doing that π¬
$ jj log --limit 1 -r "ancestors(@)" -T "self.commit_id()" --no-graph src/
# git hash
$ jj log --limit 1 -r "ancestors(@)" -T "self.commit_id().short()" --no-graph src/
# short hash
ThinkPad X13 Gen 4 with AMD 7840U
My X390 bricked a few years ago after I lost power during a BIOS update, without warranty, and I needed some kind of usable on-the-go backup laptop.
In December, Lenovo DE had 30-40% discounts on some of the models, and the X13 Gen 4 AMD looked VERY interesting! Given uncertainty about RAM, SSD, and what else prices, I decided to get it. Compared to Framework 13" which is more expensive now.
After getting it, I had mixed feelings: 100% worse screen than my work MBP, okayish keyboard but itβs small and light! So my criteria would be to keep it as long as it wouldnβt run SIGNIFICANTLY slower than my PC that needs ~160W idling. I didnβt have any ready to go Elixir project to stress the CPU/MEM so I used βjjβ. I compile it every 1st Wednesday of the month when the new release drops! Oh, and apparently, run all tests too, because itβs installed via Nix flake.
The setup:
All in “power” mode, with connected power cable.
A simple benchmark, with empty “target” directory in “jj” repository
| MBP M1 | ThinkPad X13 Gen 4 7840U | PC 5950X | |
|---|---|---|---|
| cargo build | 51s | 48s | 35s |
| cargo test | 360s | 193s | 124s |
Iβm sure the M4 10 Core in MacBook Air would be faster than any of them, and no active cooling too, but then for 32GB RAM, 1 SSD and 3y warranty it wouldnβt cost 1000β¬, but 2100β¬.
One of my most used commands gets better and better - jj prpr.
When using “jj”, I’m on the squash/changes as TODO workflow:
jj sq, or better: jj absorbThis handles the local part, what about the PRs? I don’t want to repeat my commits
in GitHub PR description. It’s already in my commits! This was how prpr was born.
jj prprfirst change on top of trunk()?
Confirm/skip AI code review for quick sanity check
Push bookmarks in the stack
No PR? Create PR via gh CLI
PR exists?
Link to draft PR is now in clipboard. PR description is created out of commit messages.
There’s a lot of asterisks here and little QoL fixes like handling multiple changes,
stacking PRs and more. I freaking love it. At some point hopefully jj sync
will be there and it will get even better.
I asked Claude to describe the full flow in ASCII:
desc - description of the PR
βββββββββββββββββββββββββββββββββββββββββββ
β jj prpr β
ββββββββββββββββββ¬βββββββββββββββββββββββββ
β
ββββββββββ΄βββββββββ
βΌ βΌ
βββββββββββ βββββββββββ
β desc β β prpr β
β command β β command β
ββββββ¬βββββ ββββββ¬βββββ
β β
βΌ βΌ
Show title & ββββββββββββββββ
description β Get Title β
β β (1st line) β
βΌ ββββββββ¬ββββββββ
EXIT β
βΌ
ββββββββββββββββββ
β Title exists? β
βββββββββ¬βββββββββ
NO β YES
ββββββββββββ΄βββββββββββ
βΌ β
βββββββββββββββββββ β
β Working changes β β
β exist? β β
ββββββββββ¬βββββββββ β
YES β NO β
ββββββββ΄βββββββ β
βΌ βΌ β
βββββββββββ βββββββββββ β
β Commit β β EXIT β β
ββββββ¬βββββ βββββββββββ β
β β
ββββββββββββββββββββββββββββββ€
βΌ
ββββββββββββββββββββ
β Bookmark exists? β
ββββββββββ¬ββββββββββ
NO β YES
ββββββββββ΄βββββββββ
βΌ β
βββββββββββββββββββ β
β Create bookmark β β
β + git push β β
ββββββββββ¬βββββββββ β
β β
βΌ β
βββββββββββββββββββ β
β AI Code review? β β
β (optional) β β
ββββββββββ¬βββββββββ β
ββββββββββ¬βββββββββ
βΌ
ββββββββββββββββββββ
β Find PR for β
β bookmark β
ββββββββββ¬ββββββββββ
NO β YES
ββββββββββ΄βββββββββ
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β CREATE PR β β Compare local β
β (draft/ready) β β vs remote desc β
β β ββββββββββ¬βββββββββ
β gh pr create β β
β β βββββββ΄ββββββ
ββββββββββ¬βββββββββ βΌ βΌ
β ββββββββββββ ββββββββββββ
β β Checksumsβ β Checksumsβ
β β DIFFER β β MATCH β
β ββββββ¬ββββββ ββββββ¬ββββββ
β βΌ β
β βββββββββββββββ β
β β Show diff β β
β ββββββββ¬βββββββ β
β βΌ β
β βββββββββββββββ β
β β Overwrite? β β
β ββββββββ¬βββββββ β
β YES β NO β
β ββββββββ΄βββββββ β
β βΌ βΌ β
β Update Skip & β
β PR desc EXIT β
β β β
ββββββ΄βββββββββββ¬βββββββββββ
βΌ
ββββββββββββββββββββ
β Update PR desc β
β (if changed) β
ββββββββββ¬ββββββββββ
βΌ
ββββββββββββββββββββ
β jj git push β
β -b bookmark β
ββββββββββ¬ββββββββββ
βΌ
ββββββββββββββββββββ
β Save checksum β
β to local state β
ββββββββββ¬ββββββββββ
βΌ
ββββββββββββββββββββ
β Copy new PR URL β
β to clipboard β
ββββββββββββββββββββ
Just sharing it out there, little QoL commands that are fun and easy. I had the initial version working in bash in ~2024 but in 2025 I let Claude rewrite it in fish-shell, and add all the little improvements that really made it enjoyable.