{"id":18910120,"url":"https://github.com/cretezy/lazyjj","last_synced_at":"2025-05-15T04:07:18.463Z","repository":{"id":240993705,"uuid":"804019707","full_name":"Cretezy/lazyjj","owner":"Cretezy","description":"TUI for Jujutsu/jj","archived":false,"fork":false,"pushed_at":"2025-04-21T17:07:00.000Z","size":295,"stargazers_count":368,"open_issues_count":25,"forks_count":23,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-08T05:34:43.413Z","etag":null,"topics":["jj","jujutsu","tui","vsc"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Cretezy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-21T19:55:32.000Z","updated_at":"2025-05-07T11:04:59.000Z","dependencies_parsed_at":"2025-01-01T02:00:38.512Z","dependency_job_id":"69712fc5-b644-474c-afa2-a0a1d3819209","html_url":"https://github.com/Cretezy/lazyjj","commit_stats":null,"previous_names":["cretezy/lazyjj"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cretezy%2Flazyjj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cretezy%2Flazyjj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cretezy%2Flazyjj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cretezy%2Flazyjj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cretezy","download_url":"https://codeload.github.com/Cretezy/lazyjj/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270646,"owners_count":22042859,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jj","jujutsu","tui","vsc"],"created_at":"2024-11-08T09:41:13.613Z","updated_at":"2025-05-15T04:07:13.451Z","avatar_url":"https://github.com/Cretezy.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lazyjj\n\nTUI for [Jujutsu/jj](https://github.com/martinvonz/jj). Built in Rust with Ratatui. Interacts with `jj` CLI.\n\nhttps://github.com/Cretezy/lazyjj/assets/2672503/b5e6b4f1-ebdb-448f-af9e-361e86f0c148\n\n## Features\n\n- Log\n  - Scroll through the jj log and view change details in side panel\n  - Create new changes from selected change with `n`\n  - Edit changes with `e`/`E`\n  - Desribe changes with `d`\n  - Abandon changes with `a`\n  - Toggle between color words and git diff with `p`\n  - See different revset with `r`\n  - Set a bookmark to selected change with `b`\n  - Fetch/push with `f`/`p`\n  - Squash current changes to selected change with `s`/`S`\n- Files\n  - View files in current change and diff in side panel\n  - See a change's files from the log tab with `Enter`\n  - View conflicts list in current change\n  - Toggle between color words and git diff with `w`\n- Bookmarks\n  - View list of bookmarks, including from all remotes with `a`\n  - Create with `c`, rename with `r`, delete with `d`, forget with `f`\n  - Track bookmarks with `t`, untrack bookmarks with `T`\n  - Create new change with `n`, edit change with `e`/`E`\n- Command log: View every command lazyjj executes\n- Config: Configure lazyjj with your jj config\n- Command box: Run jj commands directly in lazyjj with `:`\n- Help: See all key mappings with `?`\n\n## Setup\n\nMake sure you have [`jj`](https://martinvonz.github.io/jj/latest/install-and-setup) installed first.\n\n- With [`cargo binstall`](https://github.com/cargo-bins/cargo-binstall): `cargo binstall lazyjj`\n- With `cargo install`: `cargo install lazyjj` (may take a few moments to compile)\n- With pre-built binaries: [View releases](https://github.com/Cretezy/lazyjj/releases)\n- For Arch Linux: `pacman -S lazyjj`\n\nTo build and install a pre-release version: `cargo install --git https://github.com/Cretezy/lazyjj.git --locked`\n\n## Configuration\n\nYou can optionally configure the following options through your jj config:\n\n- `lazyjj.highlight-color`: Changes the highlight color. Can use named colors. Defaults to `#323264`\n- `lazyjj.diff-format`: Change the default diff format. Can be `color-words` or `git`. Defaults to `color_words`\n  - If `lazyjj.diff-format` is not set but `ui.diff.format` is, the latter will be used\n- `lazyjj.diff-tool`: Specify which diff tool to use by default\n  - If `lazyjj.diff-tool` is not set but `ui.diff.tool` is, the latter will be used\n- `lazyjj.bookmark-prefix`: Change the bookmark name prefix for generated bookmark names. Defaults to `push-`\n  - If `lazyjj.bookmark-prefix` is not set but `git.push-bookmark-prefix` is, the latter will be used\n- `lazyjj.layout`: Changes the layout of the main and details panel. Can be `horizontal` (default) or `vertical`\n- `lazyjj.layout-percent`: Changes the layout split of the main page. Should be number between 0 and 100. Defaults to `50`\n\nExample: `jj config set --user lazyjj.diff-format \"color-words\"` (for storing in [user config file](https://martinvonz.github.io/jj/latest/config/#user-config-file), repo config is also supported)\n\n## Usage\n\nTo start lazyjj for the repository in the current directory: `lazyjj`\n\nTo use a different repository: `lazyjj --path ~/path/to/repo`\n\nTo start with a different default revset: `lazyjj -r '::@'`\n\n## Key mappings\n\nSee all key mappings for the current tab with `?`.\n\n### Basic navigation\n\n- Quit with `q`\n- Change tab with `1`/`2`/`3` or with `h`/`l`\n- Scrolling in main panel\n  - Scroll down/up by one line with `j`/`k` or down/up arrow\n  - Scroll down/up by half page with `J`/`K` or down/up arrow\n- Scrolling in details panel\n  - Scroll down/up by one line with `Ctrl+e`/`Ctrl+y`\n  - Scroll down/up by a half page with `Ctrl+d`/`Ctrl+u`\n  - Scroll down/up by a full page with `Ctrl+f`/`Ctrl+b`\n- Open a command popup to run jj commands using `:` (jj prefix not required, e.g. write `new main` instead of `jj new main`)\n\n### Log tab\n\n- Select current change with `@`\n- View change files in files tab with `Enter`\n- Display different revset with `r` (`jj log -r`)\n- Change details panel diff format between color words (default) and Git (and diff tool if set) with `w`\n- Toggle details panel wrapping with `W`\n- Create new change after highlighted change with `n` (`jj new`)\n  - Create new change and describe with `N` (`jj new -m`)\n- Edit highlighted change with `e` (`jj edit`)\n  - Edit highlighted change ignoring immutability with `E` (`jj edit --ignore-immutable`)\n- Abandon a change with `a` (`jj abandon`)\n- Describe the highlighted change with `d` (`jj describe`)\n  - Save with `Ctrl+s`\n  - Cancel with `Esc`\n- Set a bookmark to the highlighted change with `b` (`jj bookmark set`)\n  - Scroll in bookmark list with `j`/`k`\n  - Create a new bookmark with `c`\n  - Use auto-generated name with `g`\n- Squash current changes (in @) to the selected change with `s` (`jj squash`)\n  - Squash current changes to the selected change ignoring immutability with `S` (`jj squash --ignore-immutable`)\n- Git fetch with `f` (`jj git fetch`)\n  - Git fetch all remotes with `F` (`jj git fetch --all-remotes`)\n- Git push with `p` (`jj git push`)\n  - Git push all bookmarks with `P` (`jj git push --all`)\n  - Use `Ctrl+p` or `Ctrl+P` to include pushing new bookmarks (`--allow-new`)\n\n### Files tab\n\n- Select current change with `@`\n- Change details panel diff format between color words (default) and Git (and diff tool if set) with `w`\n- Toggle details panel wrapping with `W`\n\n### Bookmarks tab\n\n- Show bookmarks with all remotes with `a` (`jj bookmark list --all`)\n- Create a bookmark with `c` (`jj bookmark create`)\n- Rename a bookmark with `r` (`jj bookmark rename`)\n- Delete a bookmark with `d` (`jj bookmark delete`)\n- Forget a bookmark with `f` (`jj bookmark forget`)\n- Track a bookmark with `t` (only works for bookmarks with remotes) (`jj bookmark track`)\n- Untrack a bookmark with `T` (only works for bookmarks with remotes) (`jj bookmark untrack`)\n- Change details panel diff format between color words (default) and Git (and diff tool if set) with `w`\n- Toggle details panel wrapping with `W`\n- Create a new change after the highlighted bookmark's change with `n` (`jj new`)\n  - Create a new change and describe with `N` (`jj new -m`)\n- Edit the highlighted bookmark's change with `e` (`jj edit`)\n  - Edit the highlighted bookmark's change ignoring immutability with `E` (`jj edit --ignore-immutable`)\n\n### Command log tab\n\n- Select latest command with `@`\n- Toggle details panel wrapping with `W`\n\n### Configuring\n\nKeys can be configured\n\n```toml\n[lazyjj.keybinds.log_tab]\nsave = \"ctrl+s\"\n```\n\nSee more in [keybindings.md](docs/keybindings.md)\n\n## Development\n\n### Setup\n\n1. Install Rust and\n2. Clone repository\n3. Run with `cargo run`\n4. Build with `cargo build --release` (output in `target/release`)\n5. You can point it to another jj repo with `--path`: `cargo run -- --path ~/other-repo`\n\n### Logging/Tracing\n\nlazyjj has 2 debugging tools:\n\n1. Logging: Enabled by setting `LAZYJJ_LOG=1` when running. Produces a `lazyjj.log` log file\n2. Tracing: Enabled by setting `LAZYJJ_TRACE=1` when running. Produces `trace-*.json` Chrome trace file, for `chrome://tracing` or [ui.perfetto.dev](https://ui.perfetto.dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcretezy%2Flazyjj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcretezy%2Flazyjj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcretezy%2Flazyjj/lists"}