GitHub - anthrofract/majjit: A TUI to manipulate the Jujutsu DAG.

2 min read Original article ↗

A Rust TUI to manipulate the Jujutsu DAG.

Inspired by the great UX of Magit.

Once you run the program you can press ? to show the help info. Most of the commands you can see by running jj help in the terminal are implemented.

Screenshots

Help menu

Command output

Fuzzy matching

Features

  • Browse the jj log tree with dynamic folding/unfolding of commits and file diffs.
  • Multi-key command sequences with transient-menu style help popups. For example type gpa to run jj git push --all, or gpt to run jj git push --tracked, or ss to squash the selected revision into its parent.
  • Output from jj commands is displayed in the bottom panel.
  • Fuzzy matching for various features like selecting changes or bookmarks.
  • Mouse support: left click to select, right click to toggle folding, and scroll wheel to scroll.

Supported jj commands

  • jj abandon
  • jj absorb
  • jj bookmark advance
  • jj bookmark create
  • jj bookmark delete
  • jj bookmark forget
  • jj bookmark list
  • jj bookmark move
  • jj bookmark rename
  • jj bookmark set
  • jj bookmark track
  • jj bookmark untrack
  • jj commit
  • jj describe
  • jj diff
  • jj duplicate
  • jj edit
  • jj evolog
  • jj file list
  • jj file show
  • jj file track
  • jj file untrack
  • jj git fetch
  • jj git push
  • jj git remote list
  • jj interdiff
  • jj metaedit
  • jj new
  • jj next
  • jj parallelize
  • jj prev
  • jj rebase
  • jj redo
  • jj resolve
  • jj restore
  • jj revert
  • jj show
  • jj sign
  • jj simplify-parents
  • jj split
  • jj squash
  • jj status
  • jj undo
  • jj unsign
  • jj workspace add
  • jj workspace forget
  • jj workspace list
  • jj workspace rename
  • jj workspace update-stale

Plus a custom command (C) to run arbitrary jj commands.

Installation

With cargo:

cargo install --git https://github.com/anthrofract/majjit

Or run the nix flake:

nix run github:anthrofract/majjit

Or install with the nix flake:

inputs.majjit.url = "github:anthrofract/majjit";

...

nixpkgs.overlays = [ majjit.overlays.default ];
environment.systemPackages = [ pkgs.majjit ];