ChalKak
Preview-first screenshot tool for Wayland + Hyprland with a lightweight built-in annotation editor.
Install / Use
/learn @BitYoungjae/ChalKakREADME
ChalKak
<p align="center"> <img src="./assets/banner.jpeg" alt="ChalKak banner" width="100%" /> </p>English | 한국어
A Hyprland-focused screenshot utility for Wayland with a preview-first workflow and a lightweight annotation editor.
Demo Video
https://github.com/user-attachments/assets/2d2ed794-f86e-4216-b5f1-7dcb513791d4
User Guides
Name Origin
ChalKak is inspired by the Korean onomatopoeia 찰칵!, the camera shutter click sound.
Highlights
- Capture modes: fullscreen, region, and window.
- Preview stage before final action (save, copy, edit, delete).
- Built-in editor tools: select, pan, blur, pen, arrow, rectangle, crop, text, OCR.
- Keyboard-centric workflow across preview and editor.
- Configurable theme and editor navigation keybindings.
- Startup cleanup for stale temporary captures.
Requirements
Runtime dependencies:
hyprctl(from Hyprland)grimslurpwl-copy(fromwl-clipboard)- GTK4 runtime libraries
Environment assumptions:
- Wayland + Hyprland session
HOMEis setXDG_RUNTIME_DIRis recommended (fallback:/tmp/chalkak)
Install
Pre-built binary (GitHub Releases)
Download the latest x86_64 Linux binary from GitHub Releases:
# Download and extract
curl -LO https://github.com/BitYoungjae/ChalKak/releases/latest/download/chalkak-x86_64-unknown-linux-gnu.tar.gz
tar xzf chalkak-x86_64-unknown-linux-gnu.tar.gz
sudo install -Dm755 chalkak /usr/local/bin/chalkak
AUR
Source build package:
yay -S chalkak
Pre-built binary package (faster install, no build dependencies needed):
yay -S chalkak-bin
For OCR text recognition support, also install the model files:
yay -S chalkak-ocr-models
If the published AUR package is behind the current crate release, use the source build path below.
Build from source
Prerequisites:
- Rust toolchain (
rustuprecommended) - Build dependencies:
pkgconf,gtk4,cmake - Runtime dependencies:
grim,slurp,wl-clipboard,hyprland
On Arch Linux, install all dependencies at once:
sudo pacman -S rust pkgconf gtk4 cmake grim slurp wl-clipboard
Build and install:
git clone https://github.com/BitYoungjae/ChalKak.git chalkak
cd chalkak
cargo install --path .
The chalkak binary will be installed to ~/.cargo/bin/. Make sure this directory is in your PATH.
Usage
Launchpad UI:
chalkak --launchpad
Running chalkak with no flags starts and exits immediately. Use --help to see all available options.
Startup flags:
--fullor--capture-full--regionor--capture-region--windowor--capture-window--launchpad--version/-V— print version (e.g.ChalKak 0.5.0 (abc1234))--help/-h— print usage summary
Typical flow:
- Capture (
full,region,window). - Preview the capture.
- Save/copy/delete, or open editor.
- Annotate in editor, then save/copy.
Keybindings
Preview:
s: savec: copy imagee: open editoro: OCR (extract text from entire image)Delete: delete captureEsc: close preview
Editor:
Ctrl+S: saveCtrl+C: copy imageCtrl+Z: undoCtrl+Shift+Z: redoDelete/Backspace: delete selectionTab: toggle tool options panelEsc: select tool, or close editor when already in select mode
Tool shortcuts:
vselecthpanbblurppenaarrowrrectangleccropttextoOCR
Text editing:
Enter: line breakCtrl+Enter: commit textCtrl+C: copy selected textEsc: exit text focus
Default editor navigation:
- Pan hold key:
Space - Zoom in:
Ctrl++,Ctrl+=,Ctrl+KP_Add - Zoom out:
Ctrl+-,Ctrl+_,Ctrl+KP_Subtract - Actual size:
Ctrl+0,Ctrl+KP_0 - Fit:
Shift+1
Configuration
Config directory:
$XDG_CONFIG_HOME/chalkak/- fallback:
$HOME/.config/chalkak/
Files:
theme.jsonkeybindings.jsonconfig.json
theme.json (summary):
mode:system,light,darkconfig.json: application settings (e.g.ocr_language)colors: supports shared + per-mode overridescolors.common+colors.dark+colors.lighteditor: supports shared + per-mode overrideseditor.common+editor.dark+editor.light- all objects can be partial; missing fields fall back to built-in defaults
- merge order:
built-in defaults -> common -> current modesystemfollows runtime desktop preference and falls back to dark when unavailable- legacy schema is still supported:
- shared flat
editor+editor_modes.dark/light - if both legacy and new keys are present, precedence is:
editor(flat) -> editor.common -> editor_modes.<mode> -> editor.<mode>- editor preset constraints:
stroke_width_presets:1..=64text_size_presets:8..=160- each preset list: up to 6 unique items
For full examples and field-by-field details, see:
docs/USER_GUIDE.mddocs/USER_GUIDE.ko.md
Temporary captures:
$XDG_RUNTIME_DIR/- fallback:
/tmp/chalkak/
Saved screenshots:
$HOME/Pictures/
Development
Common commands:
cargo check
cargo test
cargo fmt --check
cargo clippy --all-targets --all-features -D warnings
Current module layout:
src/app: runtime orchestration and GTK lifecyclesrc/capture: Hyprland/grim/slurp capture backendssrc/preview: preview window behaviorsrc/editor: editor model and tool behaviorsrc/input: shortcut and navigation handlingsrc/storage: temp/save lifecycle and cleanupsrc/theme,src/ui: theme/config + shared style tokenssrc/state: app state machinesrc/clipboard: clipboard integration (wl-copy)src/ocr: OCR text recognition (PaddleOCR v5 / MNN)src/config: config/keybinding/theme path helperssrc/error: application-level error/result typessrc/logging: tracing subscriber setup
AUR Packaging Notes (for maintainers)
PKGBUILD and .SRCINFO are committed in this repository.
When releasing a new version:
- Match
PKGBUILDpkgvertoCargo.tomlversion. - Reset
pkgrel=1whenpkgverchanges. - Update
sourceto.../archive/refs/tags/vX.Y.Z.tar.gz. - Refresh checksums with
updpkgsums. - Regenerate
.SRCINFOwithmakepkg --printsrcinfo > .SRCINFO.
Dependency baseline:
depends=('gtk4' 'hyprland' 'grim' 'slurp' 'wl-clipboard')makedepends=('rust' 'cargo' 'pkgconf' 'gtk4' 'cmake')optdepends=('chalkak-ocr-models: OCR text recognition support')
Package name target: chalkak.
A separate AUR package chalkak-ocr-models provides PaddleOCR v5 model files for OCR. Its packaging metadata lives in aur/chalkak-ocr-models/.
Maintainer
- Name:
BitYoungjae - Email:
bityoungjae@gmail.com
License
chalkak is dual-licensed under:
- MIT
- Apache-2.0
SPDX expression: MIT OR Apache-2.0
This matches the dependency landscape (mostly MIT and Apache-2.0-family permissive licenses) and keeps AUR/distribution reuse straightforward.
