A fast, native Git GUI for the KDE Plasma desktop.
LazyDesktop is a lightweight alternative to GitHub Desktop built on the same technology stack KDE itself uses — Qt 6 and C++23. No Electron, no web runtime, no bloat: it fits straight into your desktop, respects your system theme, and gives you a clean, keyboard-friendly interface for everyday Git work.
Think GitHub Desktop, but native, fast, and built for the KDE ecosystem.
- Status list — Flat file list with colored status indicators (modified = yellow, added = green, deleted = red, renamed = purple, untracked = gray).
- Per-file checkboxes — Pick exactly which files to stage and commit. A master Select All checkbox lives in the header bar.
- Diff viewer — Clean diff view with line numbers and syntax highlighting. Images (png, jpg, webp, gif, …) render inline; video files show a placeholder.
- Commit — Summary and optional description, committed in one click.
- Skip pre-commit hooks — A lightning-bolt toggle adds
--no-verify. - Co-authors — Scan the checked files' git history for authors and append
Co-authored-by:trailers to the description. - Push / Fetch / Pull — One smart button that cycles through push, fetch, and pull based on repository state.
- Remote management — Manage remotes (add, edit, rename, remove, copy URL)
from the toolbar. Native and dependency-free: powered by the bundled
crates/vcs_coreRust crate, nogit remotesubprocess. - SSH keys — Generate Ed25519/RSA-4096 keypairs (optionally
passphrase-encrypted), list existing public keys, copy or delete them, and
test connections — all native, no
ssh-keygen/sshsubprocess. - Branch management — Switch, create, and delete branches from a dropdown.
- Commit history — Tabbed sidebar with a colored commit list. Click a commit to see its files; click a file to see its diff.
- Add project dropdown — Clone a repository (
git clone), create one (git init), or load an existing folder. - Recent projects — Persistent history in
projects.yaml, grouped by remote owner/org, with a yellow dot on repos that have uncommitted changes. - Scan folder — Bulk-import every Git repo inside a directory.
- Remove / Clear all — Remove one project or wipe the whole list, with confirmation dialogs.
- Cloud providers — Generate summary and description from the diffs of your checked files. Supports OpenRouter, OpenAI, Anthropic, and Google AI Studio. Requires an API key in Settings → AI.
- Local inference — Built-in GGUF model support with one-click downloads
from HuggingFace, GPU acceleration toggle, and full model management. Local
inference runs inside the bundled Rust crate (
crates/ai_core, powered byllama-cpp-2) and is exposed to the UI over a C FFI. - Right-click the AI button to switch providers; the model name is configurable in Settings → AI.
The repository ships Conventional Commits and branch-creation skills
so AI coding tools produce commit messages and branch names consistent with
the project's conventions. The two skills live in .opencode/skills/:
| Tool | Location | Skills |
|---|---|---|
| OpenCode | .opencode/skills/ |
commit, create-branch |
commitdetects Git vs Jujutsu, gathers the diff and recent history, and produces a Conventional Commits message (type(scope): subject), committing only after explicit approval.create-branchnames branches using thetype/scope?/short-descriptionconvention (for examplefeat/vcs/jj-support), for both Git and Jujutsu.
- Uses system palette colors throughout and respects your desktop theme.
- A built-in Dark theme and custom YAML themes apply Qt stylesheets at startup.
- System monospace font in the diff viewer; no custom painting for the file list.
Drop a .theme.yaml file into ~/.config/lazydesktop/themes/ to add a new
theme option in Appearance settings:
name: "Ocean Night"
colors:
background: "#0d1117"
foreground: "#c9d1d9"
widget_background: "#161b22"
input_background: "#21262d"
input_foreground: "#c9d1d9"
button_background: "#1f6feb"
button_foreground: "#ffffff"
tooltip_background: "#21262d"
tooltip_foreground: "#c9d1d9"
selection: "#1f6feb"The theme appears in Settings → Appearance after a restart or reopening the settings dialog. See themes.
A categorized settings dialog covers:
- Appearance — System Default, Dark, and any custom YAML themes.
- Git — Read and write global
user.name/user.emailviagit config --global. - SSH Keys — Generate keypairs, browse existing public keys (only public material is ever shown), copy them to the clipboard, and test connections.
- AI — Enable toggle, provider, API key, model name, system prompts, and local model downloads.
- Git bootstrapping — If Git is missing, LazyDesktop offers to install it
(
pkexec/sudoon Linux,xcode-selecton macOS,wingeton Windows). - Credential handling —
GIT_ASKPASSintegration with a credential dialog for remote authentication. - Auto-refresh — A
QFileSystemWatcherwatches.git/indexand.git/HEAD; changes trigger a debounced 2-second status refresh that preserves your selection and diff state. - Files menu — Open in Editor (kate), File Manager, Terminal (konsole), or View on GitHub.
- Right-click context menu — Discard changes on modified files or delete untracked files.
xmake f -m debug # configure (release: xmake f -m release)
xmake # builds C++ and the Rust ai_core crate
./build/linux/x86_64/debug/lazydesktopThe binary runs directly from the build directory — no make install
needed. The xmake build automatically runs cargo build for the bundled
Rust crates (ai_core, and vcs_core for SSH/remote operations) and links
them in. Your data survives rebuilds:
- Projects:
~/.config/lazydesktop/projects.yaml - Settings (API key, theme, model, system prompt):
~/.config/lazydesktop/lazydesktop.conf - Custom themes:
~/.config/lazydesktop/themes/*.theme.yaml - Local AI models:
~/.config/lazydesktop/models/
Note on Qt versions: if both Qt 5 and Qt 6 are installed, xmake may pick Qt 5 from your
PATH. Point it at Qt 6 before configuring, for examplePATH=/usr/lib/qt6/bin:$PATH xmake f -c -m debug.
See build from source for the
full guide, or use the included justfile recipes
(just setup, just build, just run, …).
The Docker image builds the C++ UI and the bundled Rust crates (ai_core,
vcs_core), then ships only the runtime (no toolchain). The Qt window either
connects to your host's X server or falls back to a browser-accessible VNC
session.
docker compose build # build the image
# Linux host with an X server -> native window
docker compose up -d
# Any OS (macOS/Windows) or headless -> open http://localhost:6080 in a browser
VNC_MODE=1 docker compose up -dBy default the container mounts:
/tmp/.X11-unix— host X socket for the native windowlazydesktop-config(named volume) — settings, projects, themes, models./repos→/workspace— bind-mount your Git repositories, e.g.REPO_DIR=~/code/myrepo docker compose up -d
Set PUID/PGID to your host UID/GID if the mounted config is owned by
root. Shortcuts: just docker-build, just docker-up, just docker-shell,
just docker-logs. Full details in
docker.
makepkg -sisudo dpkg -i lazydesktop_*.debGrab the latest lazydesktop-*-x86_64.AppImage from the
Releases page, make it
executable, and run it.
See build from source.
- Open Settings → AI.
- Toggle Enable AI.
- Choose a provider and paste an API key, or pick a local GGUF model and let LazyDesktop download it from HuggingFace.
- Click the AI button next to the commit panel to generate a message.
See the AI documentation for details.
- Qt 6 (Core, Gui, Widgets, Network) — Qt 6.7+ recommended
- xmake (build system)
- Rust stable toolchain (builds the bundled
ai_coreandvcs_corecrates automatically) - yaml-cpp
- Git
- A C++23 compiler (GCC 14+ or Clang 18+)
The full documentation lives in docs/:
| Area | Guide |
|---|---|
| Getting started | Installation · Build from source · Docker · Configuration |
| User guide | Git workflow · Branches & history · Projects · Themes |
| AI | Overview · Cloud providers · Local models · Editor skills |
| Development | Architecture · Source layout · ai_core · Build & test · Packaging |
Other resources: Roadmap · Implementation details · Contributing · FAQ · Release process
MIT — see the repository license file for details.