DEV Community

Cover image for Dunk is my new diff pager
Waylon Walker
Waylon Walker

Posted on • Originally published at waylonwalker.com

Dunk is my new diff pager

Dunk is a beautiful git diff tool built on top of rich.

Browsing through twitter the other day I discovered it through this tweet by _darrenburns.

Dunk is beta

Before I dive in deep, I do want to mention that Dunk is super new and beta at this point. I am making it my default pager, because I know what I am doing and can quickly shift back if I need to, no sweat. If you are a little less comfortable with the command line, terminal, or reading any issues that might come up, it might be best if you just pipe into Dunk when you want to use it.

The author really cautions the use of it as your default pager this early, I'm just showing that it's possible, and I'm trying it.

He notes that it might have some issues especially with partially staged files.

try it

You can try it with pipx.

git diff | pipx run dunk
Enter fullscreen mode Exit fullscreen mode

install it

If you like it, you can install it with pip or pipx, I prefer pipx for cli applications like this.

pipx install dunk
Enter fullscreen mode Exit fullscreen mode

set it as your default pager

You can configure dunk as your default pager with the command line, or
by editing your .gitconfig file.

git config --global pager.diff "dunk | less -R`
Enter fullscreen mode Exit fullscreen mode
[pager]
    diff = dunk | less -R
Enter fullscreen mode Exit fullscreen mode

As pointed out by _darrenburns dunk is not a pager and you can gain back all of the benefits of using a pager by piping into less with the -R flag.

reset it if you don't like it

You can --unset your pager configuration from the command line or edit your .gitconfig file by hand to remove the lines shown above.

git config --global --unset pager.diff
Enter fullscreen mode Exit fullscreen mode

Comparison

I have some edits to a game my son and I are working on unstaged so I ran git diff on that project with and without dunk to compare the differences.

default diff

Dunk just looks so good.

dunk diff

Always install

If you follow along here often you know that I am a big fan of installing all my tools in an ansible playbook so that I don't suffer configuring a new machine for months after getting it and wondering why its not exactly like the last.

# Dunk - prettier git diffs
# https://github.com/darrenburns/dunk
- name: check is dunk installed
  shell: command -v dunk
  register: dunk_exists
  ignore_errors: yes

- name: install dunk
  when: dunk_exists is failed
  shell: pipx install dunk
Enter fullscreen mode Exit fullscreen mode


article cover for <br>
 Installing packages with ansible only if they do not exist<br>


Installing packages with ansible only if they do not exist


More on conditionally installing tools with ansible in this post.

Discussion (2)

Collapse
moopet profile image
Ben Sinclair

This is really nice. I've been using delta for this but dunk looks nicer :)

Bug: your ansible example at the bottom still references black in one part.

Collapse
waylonwalker profile image
Waylon Walker Author

Thanks for pointing out the bug

Delta looks very nce! Probably more ready for prime time use as well. dunk is pretty new