---
# System prepended metadata

title: Improve the git diff experience

---

> [!Note]
> I built a tree-like navigation tool for viewing diff in kakoune

![画面収録 2026-01-04 朝9.52.01](https://hackmd.io/_uploads/B17VY7_Vbe.gif)

## Why?

- I need to quickly review pull request, we a glance of file tree, and quickly jump between them
- But I don't want to use GitHub Web UI: it was pretty slow
    - thought it has improved a lot these days, I still prefer terminal tools over web UI
- [lazygit](https://github.com/jesseduffield/lazygit) is not enough
- [lumen](https://github.com/jnsahaj/lumen) wasn't there yet


## How my *diff* experience evolves over the years

- The start: [SourceTree](https://www.sourcetreeapp.com/) app (before the Atlassin aquired lol)
- VSCode Source control view, [Gitlens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) and [GitGraph](https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph) plugin
- [Fork.app](https://git-fork.com/)
- Start using more command line: inline diff pager
    - from [delta](https://github.com/dandavison/delta), [difftastic](https://github.com/Wilfred/difftastic) to [git-split-diffs](https://github.com/banga/git-split-diffs/)
    - good but it's still hard to jump between files
- [After coming to kakoune:](https://yukai.dev/blog/2024/06/15/kakoune-helix-modern-editor-experiences)
    - Everything is composable
    - Heavily use with tmux & fzf that integrates well with kakoune


## How a about building a command palette, and even a file tree, with just fzf tmux and kakoune?


- [Source code (GitHub)](https://github.com/Yukaii/dotfiles/blob/082ee6911a14632028b60c9ad60518ee3d26b3a1/bin/.bin/kks-git-diff-files)

![スクリーンショット 2026-01-04 朝10.02.19](https://hackmd.io/_uploads/ryHBjm_VZg.png)


### The flow:

- Parse diff format, get location and file name
- Render the file list with fzf
- Bind fzf actions to send "scroll to" command to kakoune (using a [forked version kks](https://github.com/Yukaii/kks/tree/chore/improve-tmp-file-with-poll), becuase `kks cat` gets unstable results)
- Of course built with AI

## And we have a even better tool today!

![スクリーンショット 2026-01-04 朝10.02.55](https://hackmd.io/_uploads/rkZPoX_V-e.png)

It's called [lumen](https://github.com/jnsahaj/lumen)! Written in Rust, with built‑in AI integration and lazygit‑inspired ergonomics. Thank you Sahaj for building this.

And I just vibe coded two more scripts that wraps around lumen:

- [lmpr](https://github.com/Yukaii/dotfiles/blob/082ee6911a14632028b60c9ad60518ee3d26b3a1/bin/.bin/lmpr)
- [ghlmpr](https://github.com/Yukaii/dotfiles/blob/082ee6911a14632028b60c9ad60518ee3d26b3a1/bin/.bin/ghlmpr)

