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
# GIMP overlay. Carries every binding where GIMP's choice differs from
# at least one other reference editor, plus Darkly fallbacks for actions
# where GIMP has no opinion but some other editor does. Unanimous
# bindings live in defaults.yaml; see the rule in defaults.yaml.
name: GIMP
description: GIMP-style keybindings
hotkeys:
# Edit / clipboard (non-unanimous slice).
# GIMP binds Redo to <primary>Y; <primary><shift>Z is "Strong Undo".
# See gimp/app/actions/edit-actions.c.
redo: $mod+KeyY
# GIMP's edit-paste-in-place is <primary><alt>V (NOT <shift>V).
# See gimp/app/actions/edit-actions.c.
pasteInPlace: $mod+Alt+KeyV
# GIMP has no native Preferences hotkey. Fall through to Darkly's pick.
openSettings: $mod+Comma
# GIMP binds File > Export As… to <primary><shift>E (see
# gimp/app/actions/file-actions.c — `file-export-as`).
exportImage: $mod+Shift+KeyE
# mirrorViewH: intentionally unbound. GIMP has no native mirror-view
# hotkey, and Krita's M would set no established GIMP-user expectation
# — leave it for explicit user binding rather than invent a default.
# Tools.
brushTool: KeyP
fillTool: Shift+KeyB
gradientTool: KeyG
colorPickerTool: KeyO
rectSelectTool: KeyR
ellipseSelectTool: KeyE
magicWandTool: KeyU
transformTool: KeyT
toggleEraseMode: Shift+KeyE
# GIMP's "Free Select" tool is the closest analog to Lasso — it handles
# both free-form and polygonal segments via mode within one tool.
# Registered with `F` in gimp/app/tools/gimpfreeselecttool.c
# (`gimp_free_select_tool_register`). polygonSelectTool is left unbound
# because GIMP has no separate polygonal tool.
lassoSelectTool: KeyF
# Layers.
isolateLayer: KeyI
# GIMP's layers-delete action has no global accelerator (its accel slot is
# { NULL } in layers-actions.c); `Delete` deletes the active layer only when
# the Layers panel has focus.
deleteLayer: layerPanel:Delete
# GIMP binds Layer > Duplicate Layer(s) to Ctrl+Shift+D.
duplicateLayer: $mod+Shift+KeyD
# GIMP's "New Layer…" is bound to Ctrl+Shift+N (layers-actions.c).
newLayer: $mod+Shift+KeyN
# GIMP's `layers-new-group` has no global accelerator (layers-actions.c
# accel slot is { NULL }). Fall through to PS+Krita's Ctrl+G; this
# doesn't collide with any GIMP-side binding.
newGroup: $mod+KeyG
# GIMP's `layers-merge-down` has no global accelerator either; GIMP's
# only layer-merge default is Ctrl+M for "Merge Visible Layers" — a
# different op. Fall through to PS+Krita's Ctrl+E.
mergeDown: $mod+KeyE
# Selection.
clearSelection: $mod+Shift+KeyA
# GIMP binds Select > Invert to Ctrl+I. This is why `adjustInvert` (Colors >
# Invert) is intentionally left unbound for GIMP: Colors > Invert ships no
# default key, and Ctrl+I is taken here. Krita/PS put invert-colors on Ctrl+I;
# GIMP keeps Ctrl+I for invert-selection.
invertSelection: $mod+KeyI
mouse_clicks:
# GIMP's "Sample colour into the foreground swatch" (temporary Color Picker)
# is Ctrl+click on paint tools — Cmd+click on macOS, via GTK's `<primary>`
# modifier role. Darkly uses drag (continuous sample while held) instead of
# click; `$mod` carries the platform swap.
sampleColor: canvas@paint:$mod+drag
# isolateLayer mouse_click: GIMP has no thumbnail-modifier equivalent,
# so intentionally unbound here. The hotkey form (KeyI above) is the
# GIMP-native path.
settings:
tools.colorPickerSampleSource: merged