summaryrefslogtreecommitdiff
path: root/README.md
blob: dbc0e12b20443a8153f7ab9f5fc4581bbd29554d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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).