winget install --id=Cretezy.lazyjj -e
TUI for Jujutsu/jj. Built in Rust with Ratatui. Interacts with jj CLI.
lazyjj is a terminal-based interface designed to interact with jj CLI for managing Jujutsu repositories, offering an intuitive and efficient way to navigate and manipulate changes.
Key Features:
Audience & Benefit: Ideal for developers utilizing Jujutsu who seek a streamlined approach to repository management. lazyjj simplifies complex operations through an interactive and user-friendly design, reducing reliance on intricate CLI commands.
Installation options include using cargo for Rust installations or accessing pre-built binaries for convenience.
TUI for Jujutsu/jj. Built in Rust with Ratatui. Interacts with jj
CLI.
https://github.com/Cretezy/lazyjj/assets/2672503/b5e6b4f1-ebdb-448f-af9e-361e86f0c148
n
e
/E
d
a
p
r
b
f
/p
s
/S
Enter
w
x
a
c
, rename with r
, delete with d
, forget with f
t
, untrack bookmarks with T
n
, edit change with e
/E
:
?
Make sure you have jj
installed first.
cargo binstall
: cargo binstall lazyjj
cargo install
cargo install lazyjj --locked
pacman -S lazyjj
To build and install a pre-release version: cargo install --git https://github.com/Cretezy/lazyjj.git --locked
You can optionally configure the following options through your jj config:
lazyjj.highlight-color
: Changes the highlight color. Can use named colors. Defaults to #323264
lazyjj.diff-format
: Change the default diff format. Can be color-words
or git
. Defaults to color_words
lazyjj.diff-format
is not set but ui.diff.format
is, the latter will be usedlazyjj.diff-tool
: Specify which diff tool to use by default
lazyjj.diff-tool
is not set but ui.diff.tool
is, the latter will be usedlazyjj.bookmark-prefix
: Change the bookmark name prefix for generated bookmark names. Defaults to push-
lazyjj.bookmark-prefix
is not set but git.push-bookmark-prefix
is, the latter will be usedlazyjj.layout
: Changes the layout of the main and details panel. Can be horizontal
(default) or vertical
lazyjj.layout-percent
: Changes the layout split of the main page. Should be number between 0 and 100. Defaults to 50
Example: jj config set --user lazyjj.diff-format "color-words"
(for storing in user config file, repo config is also supported)
To start lazyjj for the repository in the current directory: lazyjj
To use a different repository: lazyjj --path ~/path/to/repo
To start with a different default revset: lazyjj -r '::@'
See all key mappings for the current tab with ?
.
q
1
/2
/3
or with h
/l
j
/k
or down/up arrowJ
/K
or down/up arrowCtrl+e
/Ctrl+y
Ctrl+d
/Ctrl+u
Ctrl+f
/Ctrl+b
:
(jj prefix not required, e.g. write new main
instead of jj new main
)@
Enter
r
(jj log -r
)w
W
n
(jj new
)
N
(jj new -m
)e
(jj edit
)
E
(jj edit --ignore-immutable
)a
(jj abandon
)d
(jj describe
)
Ctrl+s
Esc
b
(jj bookmark set
)
j
/k
c
g
s
(jj squash
)
S
(jj squash --ignore-immutable
)f
(jj git fetch
)
F
(jj git fetch --all-remotes
)p
(jj git push
)
P
(jj git push --all
)Ctrl+p
or Ctrl+P
to include pushing new bookmarks (--allow-new
)@
w
W
a
(jj bookmark list --all
)c
(jj bookmark create
)r
(jj bookmark rename
)d
(jj bookmark delete
)f
(jj bookmark forget
)t
(only works for bookmarks with remotes) (jj bookmark track
)T
(only works for bookmarks with remotes) (jj bookmark untrack
)w
W
n
(jj new
)
N
(jj new -m
)e
(jj edit
)
E
(jj edit --ignore-immutable
)@
W
Keys can be configured
[lazyjj.keybinds.log_tab]
save = "ctrl+s"
See more in keybindings.md
cargo run
cargo build --release
(output in target/release
)--path
: cargo run -- --path ~/other-repo
lazyjj has 2 debugging tools:
LAZYJJ_LOG=1
when running. Produces a lazyjj.log
log fileLAZYJJ_TRACE=1
when running. Produces trace-*.json
Chrome trace file, for chrome://tracing
or ui.perfetto.dev