summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-12 17:20:15 +0300
committerPaul Buetow <paul@buetow.org>2026-07-12 17:20:15 +0300
commit1770b12d5d95476310c27ccf39a91b5ba4a3f119 (patch)
treec81bf1d97b5f71140acc73e970abf406f9f64fe7 /README.md
parentf2b8ed6d2ea0744cfd1a36a6fbd1763926b873bb (diff)
bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0)
Phase 0 (task et0): lays the build/test/CI/convention groundwork before any feature code. - meson.build: project ggaze C11 -Wall -Wextra; deps gtk4/glib/gio/libadwaita; feature options gegl/jxl/avif/heif (auto); generated ggaze-config.h with app id, version, GGAZE_HAVE_* feature flags. - tests: GLib g_test harness with separate unit/integration suites (--suite unit / --suite integration); test_bootstrap sanity test proves the harness compiles and the config header is reachable; -Db_coverage=true coverage target wired. - CI: .woodpecker/ci.yml three lanes (minimal, gegl, asan) with xvfb for the integration track and a coverage lane that warns until M10. - conventions: .clang-format (3-space, 80-col, K&R, *-on-var, return type on its own line) + .editorconfig matching docs/coding-conventions.md; CI clang-format --dry-run -Werror gate. - top-level README.md (humans) and AGENTS.md (agents) pointing into docs/. - LICENSE (GPL-3.0-or-later), .gitignore, dir placeholders. Acceptance: meson setup build && ninja -C build && meson test -C build green; clang-format --dry-run --Werror clean.
Diffstat (limited to 'README.md')
-rw-r--r--README.md105
1 files changed, 105 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..dbc0e12
--- /dev/null
+++ b/README.md
@@ -0,0 +1,105 @@
+# ggaze — GNOME Gaze
+
+A small, fast, native image viewer for Fedora Linux, written in C with GTK4.
+Its job: **quickly preview a folder of pictures downloaded from a camera,
+cull the rejects, move on.** Think `feh` / `nsxiv` / `qiv`, but GNOME-native
+and KISS — no library, no database, no sidecars. The layout nods to gthumb
+(header bar, thumbnail grid, full-window viewer) without the weight.
+
+> **Status:** planning → skeleton. The design is complete in `docs/`; the
+> implementation is just starting. Not usable yet.
+
+## Quick start
+
+```
+ggaze ~/Downloads/Camera/IMG_0001.jpg
+```
+
+Opens the folder as a thumbnail grid, `Enter` drops into the large view, and
+you flip through the shoot:
+
+| Key | Action |
+|-----|--------|
+| `h` / `l`, `←`/`→` | previous / next image |
+| `Enter` / `Esc` | grid ↔ large view (`t` toggles) |
+| `+` / `-` | zoom in / out (large) · grow / shrink thumbnails (grid) |
+| `0` | zoom fit ↔ 100% (large) · reset thumbnail size (grid) |
+| `i` | info overlay (EXIF) |
+| `v` / `V` / `Ctrl+a` | mark / range-mark / mark all |
+| `d` / `D` | trash to `./Trash` (undoable) / delete permanently |
+| `u` | undo last `d` or `m` |
+| `m` | move marks → destination popup (`1`, `2`, …) |
+| `e` | open in external program popup |
+| `!` | run a shell script popup |
+| `a` | quick GEGL enhance popup (optional) |
+| `c` / `R` / `[` / `]` | crop / straighten / rotate 90° (GEGL, optional) |
+| `s` | save an enhanced/edited copy (original is never modified) |
+| `Space` (hold) | compare original vs modified |
+| `f` / `S` | fullscreen / slideshow |
+| `o` | open file/folder dialog |
+| `,` | preferences |
+| `?` | shortcuts overlay |
+| `q` | quit |
+
+Full keybindings and mouse/touch gestures: `docs/ui-and-interactions.md`.
+
+## Build
+
+```sh
+meson setup build
+ninja -C build
+meson test -C build # all tests
+meson test -C build --suite unit
+meson test -C build --suite integration
+```
+
+A minimal build (GdkPixbuf-only, no GEGL) is valid and fast:
+
+```sh
+meson setup build -Dgegl=disabled -Djxl=disabled -Davif=disabled -Dheif=disabled
+```
+
+Enable optional backends with the matching feature option (`auto` by default):
+
+```sh
+meson setup build -Dgegl=enabled
+```
+
+Coverage (plain-C modules, ≥80% target):
+
+```sh
+meson setup -Db_coverage=true build-cov
+ninja -C build-cov
+meson test -C build-cov
+ninja -C build-cov coverage # needs lcov + genhtml
+```
+
+## Dependencies (Fedora)
+
+```
+meson ninja-build gcc pkgconf-pkg-config
+gtk4-devel glib2-devel libadwaita-devel
+# optional:
+gegl-devel babl-devel libjxl-devel libavif-devel libheif-devel
+```
+
+## Documentation
+
+The full design lives in `docs/`:
+
+- [`docs/PLAN.md`](docs/PLAN.md) — living tracker + decisions log
+- [`docs/IMPLEMENTATION.md`](docs/IMPLEMENTATION.md) — execution plan (this repo's roadmap in practice)
+- [`docs/goals-and-scope.md`](docs/goals-and-scope.md) — what ggaze is and is not
+- [`docs/architecture.md`](docs/architecture.md) — modules + data flow
+- [`docs/ui-and-interactions.md`](docs/ui-and-interactions.md) — views, keybindings, gestures
+- [`docs/tech-stack.md`](docs/tech-stack.md) — libraries, decode backends, settings keys
+- [`docs/coding-conventions.md`](docs/coding-conventions.md) — C style
+- [`docs/gegl.md`](docs/gegl.md) — optional GEGL enhance plan
+- [`docs/roadmap.md`](docs/roadmap.md) — milestones
+- [`docs/open-questions.md`](docs/open-questions.md) — undecided items
+
+Contributing and agent workflow: see `AGENTS.md`.
+
+## License
+
+GPL-3.0-or-later. See [`LICENSE`](LICENSE). \ No newline at end of file