| 1 | include = ["~/.cache/matugen/remage.toml"] |
| 2 | |
| 3 | [general] |
| 4 | open_siblings = true # a single file argument opens its whole directory |
| 5 | recursive = false # descend into directory arguments |
| 6 | sort = "natural" # natural | name | mtime | size | random |
| 7 | reverse = false |
| 8 | start_mode = "image" # image | grid |
| 9 | wrap = true # next on the last image goes to the first |
| 10 | watch_dir = true # add and drop files that appear or vanish on disk |
| 11 | |
| 12 | [window] |
| 13 | decorations = false |
| 14 | title = "{name} — remage" # placeholders as in ui.statusbar_left |
| 15 | class = "remage" # Wayland app_id / X11 class |
| 16 | fullscreen = false |
| 17 | |
| 18 | [image] |
| 19 | fit = "down" # down (fit, never enlarge) | fit | fill | width | height | original |
| 20 | zoom_step = 1.25 |
| 21 | filter = "auto" # auto (nearest above 300%) | linear | nearest |
| 22 | alpha_background = "dots" # dots | checker | solid |
| 23 | auto_orient = true # apply EXIF orientation |
| 24 | color_management = true # convert ICC / CICP colour to sRGB |
| 25 | preload = 2 # images decoded and uploaded on each side |
| 26 | cache_mb = 512 # decoded-image cache budget |
| 27 | slideshow_delay = 5.0 # seconds |
| 28 | |
| 29 | [grid] |
| 30 | sizes = [96, 128, 160, 224, 320] |
| 31 | size = 160 |
| 32 | gap = 16 |
| 33 | thumbnail_cache = true # read and write the shared freedesktop thumbnail cache |
| 34 | names = false # filenames under thumbnails |
| 35 | |
| 36 | [ui] |
| 37 | statusbar = true |
| 38 | which_key_delay_ms = 300 # pending keys wait this long before which-key shows |
| 39 | scale = 1.0 # UI size multiplier on top of the display scale |
| 40 | # Status bar templates. Placeholders: {name} {path} {dir} {stem} {ext} {format} {width} |
| 41 | # {height} {zoom} {index} {count} {marked} {frame} {mode} {filter} {info}. Two or more spaces |
| 42 | # separate segments; a segment whose placeholder is empty right now (no image in the grid, |
| 43 | # say) drops out. |
| 44 | statusbar_left = "{name}" |
| 45 | statusbar_right = "{format} {width}×{height} {zoom}% {index}/{count}" |
| 46 | # Run for each image shown, like nsxiv's image-info: `<command> FILE WIDTH HEIGHT` through |
| 47 | # sh. Its last stdout line fills {info}, or replaces the left side if no template has {info}. |
| 48 | info_command = "" |
| 49 | font_ui = "Space Grotesk" |
| 50 | font_mono = "Space Mono" |
| 51 | font_display = "Doto" |
| 52 | |
| 53 | [animation] |
| 54 | enabled = true |
| 55 | duration_ms = 180 |
| 56 | transition = "fade" # fade | none |
| 57 | |
| 58 | [theme] |
| 59 | preset = "nothing-dark" # nothing-dark | nothing-light |
| 60 | # Read colours from pywal: special.background / special.foreground / colors.color1. |
| 61 | # pywal = "~/.cache/wal/colors.json" |
| 62 | # |
| 63 | # background, foreground and accent are enough; every other token is derived from them. |
| 64 | # Any token can be set explicitly as "#RRGGBB" or "#RRGGBBAA": |
| 65 | # background = "#000000" |
| 66 | # foreground = "#FFFFFF" |
| 67 | # accent = "#D71921" |
| 68 | # surface surface_raised border border_visible text_disabled text_secondary |
| 69 | # text_primary text_display success warning image_background |
| 70 | |
| 71 | # Key bindings. Values are an action, an array of actions run in order, or "none" to remove |
| 72 | # a default. Mode tables override [keys.global]; visual mode also inherits [keys.grid]. |
| 73 | # Notation is vim's: n G <C-x> <S-Tab> <Space>w <CR> <BS> <Esc> <F5> <lt> <Bar>, plus |
| 74 | # <LeftMouse> <RightMouse> <MiddleMouse> <ScrollUp> <ScrollDown> with modifiers (<C-ScrollUp>). |
| 75 | # A count typed first applies to the action: 5n, 12G, 3+. |
| 76 | |
| 77 | [keys.global] |
| 78 | "q" = "quit" |
| 79 | "<CR>" = "mode toggle" |
| 80 | "n" = "next" |
| 81 | "p" = "prev" |
| 82 | "<BS>" = "prev" |
| 83 | "]" = "next 10" |
| 84 | "[" = "prev 10" |
| 85 | "gg" = "first" |
| 86 | "G" = "last" |
| 87 | "<Home>" = "first" |
| 88 | "<End>" = "last" |
| 89 | "m" = "mark" |
| 90 | "M" = "invert-marks" |
| 91 | "u" = "unmark-all" |
| 92 | "N" = "next-mark" |
| 93 | "P" = "prev-mark" |
| 94 | "f" = "fullscreen" |
| 95 | "b" = "bar" |
| 96 | "i" = "info" |
| 97 | "r" = "reload" |
| 98 | "D" = "remove" |
| 99 | "s" = "slideshow" |
| 100 | ":" = "palette" |
| 101 | "/" = "search" |
| 102 | "?" = "help" |
| 103 | "<Esc>" = "cancel" |
| 104 | |
| 105 | [keys.image] |
| 106 | "h" = "pan left" |
| 107 | "j" = "pan down" |
| 108 | "k" = "pan up" |
| 109 | "l" = "pan right" |
| 110 | "<Left>" = "pan left" |
| 111 | "<Down>" = "pan down" |
| 112 | "<Up>" = "pan up" |
| 113 | "<Right>" = "pan right" |
| 114 | "H" = "pan-edge left" |
| 115 | "J" = "pan-edge down" |
| 116 | "K" = "pan-edge up" |
| 117 | "L" = "pan-edge right" |
| 118 | "z" = "center" |
| 119 | "+" = "zoom in" |
| 120 | "-" = "zoom out" |
| 121 | "=" = "zoom 100%" |
| 122 | "w" = "fit fit" |
| 123 | "W" = "fit fill" |
| 124 | "e" = "fit width" |
| 125 | "E" = "fit height" |
| 126 | "<lt>" = "rotate ccw" |
| 127 | ">" = "rotate cw" |
| 128 | "|" = "flip h" |
| 129 | "_" = "flip v" |
| 130 | "a" = "filter toggle" |
| 131 | "A" = "alpha-bg cycle" |
| 132 | "{" = "gamma -" |
| 133 | "}" = "gamma +" |
| 134 | "<C-Space>" = "play" |
| 135 | "<C-n>" = "next-frame" |
| 136 | "<C-p>" = "prev-frame" |
| 137 | "<ScrollUp>" = "zoom in" |
| 138 | "<ScrollDown>" = "zoom out" |
| 139 | |
| 140 | # In the grid a click selects a thumbnail and a double-click opens it; dragging scrolls. |
| 141 | [keys.grid] |
| 142 | "h" = "move left" |
| 143 | "j" = "move down" |
| 144 | "k" = "move up" |
| 145 | "l" = "move right" |
| 146 | "<Left>" = "move left" |
| 147 | "<Down>" = "move down" |
| 148 | "<Up>" = "move up" |
| 149 | "<Right>" = "move right" |
| 150 | "<C-d>" = "page half-down" |
| 151 | "<C-u>" = "page half-up" |
| 152 | "<C-f>" = "page down" |
| 153 | "<C-b>" = "page up" |
| 154 | "<PageDown>" = "page down" |
| 155 | "<PageUp>" = "page up" |
| 156 | "0" = "row-start" |
| 157 | "^" = "row-start" |
| 158 | "$" = "row-end" |
| 159 | "+" = "grid-size +" |
| 160 | "-" = "grid-size -" |
| 161 | "v" = "visual" |
| 162 | "<ScrollUp>" = "scroll up" |
| 163 | "<ScrollDown>" = "scroll down" |
| 164 | |
| 165 | [keys.visual] |
| 166 | "m" = "mark on" |
| 167 | "v" = "mode grid" |
| 168 | "<Esc>" = "mode grid" |
| 169 | |
| 170 | # User commands: bind them as "run <name>"; unbound ones still show in the : palette. |
| 171 | |
| 172 | [commands.wallpaper] |
| 173 | desc = "Set as wallpaper" |
| 174 | run = ["setwall", "-p", "{file}"] # array: exec directly, {files} expands to N args |
| 175 | |
| 176 | [commands.copy] |
| 177 | desc = "Copy image" |
| 178 | run = "wl-copy --type image/png < {file}" # string: sh -c, placeholders shell-quoted for you |
| 179 | |
| 180 | [commands.delete] |
| 181 | desc = "Delete files" |
| 182 | run = ["rm", "--", "{files}"] |
| 183 | confirm = "Delete {count} file(s)?" # asks inline; y runs it, any other key cancels |
| 184 | |
| 185 | |
| 186 | # External decoders for anything else; they write PNG, PPM or TIFF to stdout. |
| 187 | # [[decoders]] |
| 188 | # match = ["*.psd"] |
| 189 | # run = ["magick", "{file}[0]", "png:-"] |