Files
wayscriber/config.example.toml
2026-06-01 16:17:43 +02:00

1031 lines
38 KiB
TOML

# wayscriber configuration file
# Location: ~/.config/wayscriber/config.toml
#
# All settings are optional. If not specified, defaults will be used.
# Delete this file to reset to defaults.
# ═══════════════════════════════════════════════════════════════════════════════
# KEYBINDING SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[keybindings]
# Customize keyboard shortcuts for all actions
# Format: key names with modifiers separated by +
# Examples: "Escape", "Ctrl+Z", "Ctrl+Shift+T", "F10"
# Each action can have multiple keybindings (e.g., ["+", "="])
# Exit overlay (or cancel current action)
exit = ["Escape", "Ctrl+Q"]
# Enter text mode
enter_text_mode = ["T"]
# Enter sticky note mode
enter_sticky_note_mode = ["N"]
# Clear all annotations on current canvas
clear_canvas = ["E"]
# Undo last annotation
undo = ["Ctrl+Z"]
# Redo last undone annotation
redo = ["Ctrl+Shift+Z", "Ctrl+Y"]
# Duplicate currently selected annotations
duplicate_selection = ["Ctrl+D"]
# Copy/paste selected annotations
copy_selection = ["Ctrl+Alt+C"]
paste_selection = ["Ctrl+Alt+V"]
# Select all annotations
select_all = ["Ctrl+A"]
# Reorder selected annotations within the stack
move_selection_to_front = ["]"]
move_selection_to_back = ["["]
# Nudge selected annotations (hold Shift for a larger step)
nudge_selection_up = ["ArrowUp"]
nudge_selection_down = ["ArrowDown"]
nudge_selection_left = ["ArrowLeft", "Shift+PageUp"]
nudge_selection_right = ["ArrowRight", "Shift+PageDown"]
# Nudge selected annotations (large step)
nudge_selection_up_large = ["PageUp"]
nudge_selection_down_large = ["PageDown"]
# Move selection to horizontal edges (left/right)
move_selection_to_start = ["Home"]
move_selection_to_end = ["End"]
# Move selection to vertical edges
move_selection_to_top = ["Ctrl+Home"]
move_selection_to_bottom = ["Ctrl+End"]
# Delete selected annotations
delete_selection = ["Delete"]
# Adjust pen thickness
increase_thickness = ["+", "="]
decrease_thickness = ["-", "_"]
# Adjust marker opacity (when using the marker tool)
increase_marker_opacity = ["Ctrl+Alt+ArrowUp"]
decrease_marker_opacity = ["Ctrl+Alt+ArrowDown"]
# Tool selection shortcuts (optional; keep empty to rely on modifiers)
select_selection_tool = ["V"]
select_pen_tool = ["F"]
select_marker_tool = ["H"]
select_step_marker_tool = []
select_eraser_tool = ["D"]
# Toggle eraser behavior mode
toggle_eraser_mode = ["Ctrl+Shift+E"]
select_line_tool = []
select_rect_tool = []
select_ellipse_tool = []
select_triangle_tool = []
select_parallelogram_tool = []
select_rhombus_tool = []
select_regular_polygon_tool = []
select_freeform_polygon_tool = []
select_arrow_tool = []
select_blur_tool = []
select_highlight_tool = []
toggle_highlight_tool = ["Ctrl+Alt+H"]
# Reset label counters
reset_arrow_labels = ["Ctrl+Shift+R"]
reset_step_markers = []
# Adjust font size
increase_font_size = ["Ctrl+Shift++", "Ctrl+Shift+="]
decrease_font_size = ["Ctrl+Shift+-", "Ctrl+Shift+_"]
# Board mode toggles (only if board.enabled = true)
toggle_whiteboard = ["Ctrl+W"]
toggle_blackboard = ["Ctrl+B"]
return_to_transparent = ["Ctrl+Shift+T"]
# Cycle overlay focus across monitors (layer-shell + xdg fullscreen fallback)
focus_prev_output = ["Ctrl+Alt+Shift+ArrowLeft"]
focus_next_output = ["Ctrl+Alt+Shift+ArrowRight"]
# Page navigation
# Ubuntu/GNOME defaults avoid Ctrl+Alt workspace shortcuts (Ctrl+ArrowLeft/Right, Ctrl+PageUp/PageDown).
page_prev = ["Ctrl+Alt+ArrowLeft", "Ctrl+Alt+PageUp"]
page_next = ["Ctrl+Alt+ArrowRight", "Ctrl+Alt+PageDown"]
page_new = ["Ctrl+Alt+N"]
page_duplicate = ["Ctrl+Alt+D"]
page_delete = ["Ctrl+Alt+Delete"]
# Toggle help overlay
toggle_help = ["F10", "F1"]
# Toggle status bar
toggle_status_bar = ["F12", "F4"]
# Toggle toolbars
toggle_toolbar = ["F2", "F9"]
# Toggle click highlight
toggle_click_highlight = ["Ctrl+Shift+H"]
# Toggle presenter mode
toggle_presenter_mode = ["Ctrl+Shift+M"]
# Toggle light passthrough mode while the overlay has focus.
# Once passthrough is active, use compositor/global shortcuts that call
# `wayscriber --light-toggle` for reliable control.
toggle_light_mode = ["Ctrl+Shift+L"]
# Optional in-overlay toggle between light drawing and passthrough.
# In passthrough, use `wayscriber --light-draw-toggle`
# or `--light-draw-on` / `--light-draw-off` from a compositor shortcut.
toggle_light_mode_drawing = []
# Optional render color profile preview controls
render_profile_next = []
render_profile_previous = []
render_profile_off = []
# Toggle fill for fill-capable shapes
toggle_fill = []
# Optional keyboard binding to toggle radial menu at cursor
toggle_radial_menu = []
# Toggle selection properties panel
toggle_selection_properties = ["Ctrl+Alt+P"]
# Toggle context menu (keyboard alternative to right-click)
open_context_menu = ["Shift+F10", "Menu"]
# Launch the desktop configurator (requires wayscriber-configurator)
open_configurator = ["F11"]
# Color selection shortcuts
set_color_red = ["R"]
set_color_green = ["G"]
set_color_blue = ["B"]
set_color_yellow = ["Y"]
set_color_orange = ["O"]
set_color_pink = ["P"]
set_color_white = ["W"]
set_color_black = ["K"]
# Screenshot shortcuts
capture_full_screen = ["Ctrl+Shift+P"]
capture_active_window = ["Ctrl+Shift+O"]
capture_selection = ["Ctrl+Shift+I"]
# Clipboard/File capture variants
capture_clipboard_full = ["Ctrl+C"]
capture_file_full = ["Ctrl+S"]
capture_clipboard_selection = ["Ctrl+Shift+C"]
capture_file_selection = ["Ctrl+Shift+S"]
capture_clipboard_region = ["Ctrl+6"]
capture_file_region = ["Ctrl+Alt+6"]
export_canvas_file = []
export_canvas_clipboard = []
export_canvas_clipboard_and_file = []
export_board_pdf_file = []
export_all_boards_pdf_file = []
# Open the most recent capture folder
open_capture_folder = ["Ctrl+Alt+O"]
# Toggle frozen mode
toggle_frozen_mode = ["Ctrl+Shift+F"]
# Zoom controls
zoom_in = ["Ctrl+Alt++", "Ctrl+Alt+="]
zoom_out = ["Ctrl+Alt+-", "Ctrl+Alt+_"]
reset_zoom = ["Ctrl+Alt+0"]
toggle_zoom_lock = ["Ctrl+Alt+L"]
refresh_zoom_capture = ["Ctrl+Alt+R"]
# Preset slots (apply/save/clear).
apply_preset_1 = ["1"]
apply_preset_2 = ["2"]
apply_preset_3 = ["3"]
apply_preset_4 = ["4"]
apply_preset_5 = ["5"]
save_preset_1 = ["Shift+1"]
save_preset_2 = ["Shift+2"]
save_preset_3 = ["Shift+3"]
save_preset_4 = ["Shift+4"]
save_preset_5 = ["Shift+5"]
clear_preset_1 = []
clear_preset_2 = []
clear_preset_3 = []
clear_preset_4 = []
clear_preset_5 = []
# ───────────────────────────────────────────────────────────────────────────────
# Keybinding Examples
# ───────────────────────────────────────────────────────────────────────────────
# Vim-style keybindings:
# exit = ["Escape", "Q"]
# clear_canvas = ["D"]
# undo = ["U"]
# redo = ["R"]
# Emacs-style keybindings:
# exit = ["Ctrl+G"]
# undo = ["Ctrl+/"]
# redo = ["Ctrl+?"]
# clear_canvas = ["Ctrl+K"]
# Gaming-friendly (WASD area):
# exit = ["Q"]
# toggle_help = ["H"]
# undo = ["Z"]
# redo = ["X"]
# clear_canvas = ["C"]
# ═══════════════════════════════════════════════════════════════════════════════
# UI SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[ui]
# Show status bar with current color/thickness/tool
show_status_bar = true
# Show board label in the status bar
show_status_board_badge = true
# Show page counter in the status bar
show_status_page_badge = true
# Show the board/page badge even when the status bar is visible
show_page_badge_with_status_bar = false
# Show a "FROZEN" badge when frozen mode is active
show_frozen_badge = false
# Status bar position
# Options: "top-left", "top-right", "bottom-left", "bottom-right"
status_bar_position = "bottom-left"
# Filter help overlay sections based on enabled features
help_overlay_context_filter = true
# Show compositor capabilities warning toast each time the overlay starts
show_capabilities_warning = true
# Command palette action toast duration (ms)
command_palette_toast_duration_ms = 1500
# Preferred monitor for GNOME fallback (xdg-shell) overlay. Case-insensitive match
# against monitor identity; leave empty to use the current/first monitor.
#preferred_output = "eDP-1"
# Enable output-cycling shortcuts on layer-shell compositors.
multi_monitor_enabled = true
# Show active output label in the status bar.
active_output_badge = true
# Request fullscreen for the GNOME fallback overlay. Disable if fullscreen appears opaque.
#xdg_fullscreen = false
# Behavior when GNOME fallback (xdg-shell) loses keyboard focus.
# "stay" (default on Ubuntu/GNOME) keeps it open. "exit" closes the overlay.
#xdg_focus_loss_behavior = "exit"
# Mouse button that toggles radial menu
# Options: "middle", "right", "disabled"
radial_menu_mouse_binding = "middle"
# ───────────────────────────────────────────────────────────────────────────────
# Floating Toolbars (Press F2/F9 to toggle)
# ───────────────────────────────────────────────────────────────────────────────
[ui.toolbar]
# Toolbar layout preset (simple / full)
# Legacy values: regular / advanced
layout_mode = "full"
# Optional per-mode overrides for toolbar sections
# Use true/false to override a section; omit to use the mode default.
#
# [ui.toolbar.mode_overrides.simple]
# show_presets = false
# show_actions_section = true
# show_actions_advanced = false
# show_zoom_actions = true
# show_pages_section = true
# show_boards_section = true
# show_step_section = false
# show_text_controls = true
# show_settings_section = false
#
# [ui.toolbar.mode_overrides.regular] # Full mode overrides
# show_presets = true
# show_actions_section = true
# show_actions_advanced = false
# show_zoom_actions = true
# show_pages_section = true
# show_boards_section = true
# show_step_section = false
# show_text_controls = true
# show_settings_section = true
#
# [ui.toolbar.mode_overrides.advanced] # Legacy mode overrides
# show_presets = true
# show_actions_section = true
# show_actions_advanced = true
# show_zoom_actions = true
# show_pages_section = true
# show_boards_section = true
# show_step_section = true
# show_text_controls = true
# show_settings_section = true
# Show top toolbar on startup (pinned)
top_pinned = true
# Show side toolbar on startup (pinned)
side_pinned = true
# Use icons instead of text labels in toolbars
# Icons are more compact; text labels are more explicit
use_icons = true
# Scale factor for toolbar UI (icons + layout)
scale = 1.0
# Show extended color palette in top toolbar
# When enabled, displays additional color options beyond the basic 8
show_more_colors = false
# Show basic actions (undo/redo/clear) in side toolbar
show_actions_section = true
# Show advanced actions (undo all, delay, freeze, etc.)
show_actions_advanced = false
# Show zoom actions (zoom in/out/reset/lock)
show_zoom_actions = true
# Show page controls section (prev/next/new/dup/del)
show_pages_section = true
# Show board controls section (prev/next/new/del)
show_boards_section = true
# Show presets section in side toolbar
show_presets = true
# Show step undo/redo section
show_step_section = false
# Keep text controls visible even when text is inactive
show_text_controls = true
# Show settings section (config buttons and advanced toggles)
show_settings_section = true
# Show timing delay sliders in side toolbar
# Allows configuring delayed undo/redo all timing
show_delay_sliders = false
# Show marker opacity slider in side toolbar even when the marker tool isn't active
# Enable to keep marker transparency control visible at all times
show_marker_opacity_section = false
# Enable context-aware UI that shows/hides controls based on the active tool
# When enabled, only relevant controls appear (e.g., no color picker for eraser)
# Disable to always show all controls regardless of the active tool
context_aware_ui = true
# Show preset action toast notifications on apply/save/clear
show_preset_toasts = true
# Show cursor tool preview bubble near the pointer
show_tool_preview = false
# Initial toolbar offsets (layer-shell/inline)
# Horizontal offset for the top toolbar
top_offset = 0.0
# Vertical offset for the top toolbar (move top bar down/up)
top_offset_y = 0.0
# Vertical offset for the side toolbar
side_offset = 0.0
# Horizontal offset for the side toolbar (move side bar left/right)
side_offset_x = 0.0
# Force inline toolbars even when layer-shell is available
force_inline = false
# ───────────────────────────────────────────────────────────────────────────────
# Status Bar Styling
# ───────────────────────────────────────────────────────────────────────────────
[ui.status_bar_style]
# Font size for status bar text
font_size = 21.0
# Padding around status bar text
padding = 15.0
# Background color [R, G, B, A] (0.0-1.0 range)
# Default: semi-transparent black (85% opaque for visibility)
bg_color = [0.0, 0.0, 0.0, 0.85]
# Text color [R, G, B, A] (0.0-1.0 range)
# Default: white
text_color = [1.0, 1.0, 1.0, 1.0]
# Color indicator dot radius
dot_radius = 6.0
# ───────────────────────────────────────────────────────────────────────────────
# Click Highlight (visual feedback for mouse clicks)
# ───────────────────────────────────────────────────────────────────────────────
[ui.click_highlight]
# Start with the highlight effect enabled when the overlay launches
enabled = false
# Show a persistent ring while the highlight tool is active
show_on_highlight_tool = false
# Radius of the highlight circle in pixels (16 - 160)
radius = 24.0
# Outline thickness in pixels (1 - 12)
outline_thickness = 4.0
# Highlight lifetime in milliseconds (150 - 1500)
duration_ms = 750
# Fill color [R, G, B, A]
fill_color = [1.0, 0.8, 0.0, 0.35]
# Outline color [R, G, B, A]
outline_color = [1.0, 0.6, 0.0, 0.9]
# Use current pen color for highlight fill/outline (alpha still comes from above colors)
# Note: active highlights update immediately when the pen color changes
use_pen_color = true
# Force-enable click highlights when entering light mode.
# Set false to keep the current click highlight state on light mode entry.
force_in_light_mode = true
[ui.context_menu]
# Enable right-click / keyboard context menus
enabled = true
# ───────────────────────────────────────────────────────────────────────────────
# Presenter Mode
# ───────────────────────────────────────────────────────────────────────────────
[presenter_mode]
# Hide UI chrome while presenting
hide_status_bar = true
hide_toolbars = true
hide_tool_preview = true
# Close the help overlay when entering presenter mode
close_help_overlay = true
# Force click highlights on while presenting
enable_click_highlight = true
# Tool behavior while presenting:
# "keep" / "force-highlight" / "force-highlight-locked"
tool_behavior = "force-highlight"
# Show enter/exit toast notifications
show_toast = true
# Light passthrough mode requires layer-shell support:
# - toggle_light_mode enters a minimal click-through overlay while Wayscriber has focus.
# - wayscriber --light-toggle is the reliable compositor/global toggle once passthrough is active.
# - wayscriber --light-draw-toggle switches between drawing and passthrough.
# - wayscriber --light-draw-on / --light-draw-off support press/release shortcuts.
# ───────────────────────────────────────────────────────────────────────────────
# Help Overlay Styling (Press F10 to toggle)
# ───────────────────────────────────────────────────────────────────────────────
[ui.help_overlay_style]
# Font size for help overlay text
font_size = 14.0
# Font family for help overlay text (comma-separated fallback list)
font_family = "Noto Sans, DejaVu Sans, Liberation Sans, Sans"
# Line height for help text
line_height = 22.0
# Padding around help box
padding = 32.0
# Background color [R, G, B, A] (0.0-1.0 range)
# Default: deep slate (higher contrast than status bar)
bg_color = [0.09, 0.1, 0.13, 0.92]
# Border color [R, G, B, A] (0.0-1.0 range)
# Default: muted steel
border_color = [0.33, 0.39, 0.52, 0.88]
# Border line width
border_width = 2.0
# Text color [R, G, B, A] (0.0-1.0 range)
# Default: near-white
text_color = [0.95, 0.96, 0.98, 1.0]
# ═══════════════════════════════════════════════════════════════════════════════
# BOARD SETTINGS (Named Boards + Backgrounds)
# ═══════════════════════════════════════════════════════════════════════════════
[boards]
# Maximum number of boards allowed
max_count = 9
# Auto-create boards when switching to an empty slot
auto_create = true
# Show board name/slot in the status bar
show_board_badge = true
# Allow panning on solid-color boards with Space + left-drag
pan_enabled = true
# Show the pan hint in the status bar or as a floating badge
show_pan_badge = true
# Persist runtime edits (rename/background) back to config
persist_customizations = true
# Default board id on startup
default_board = "transparent"
[[boards.items]]
id = "transparent"
name = "Overlay"
background = "transparent"
persist = true
[[boards.items]]
id = "whiteboard"
name = "Whiteboard"
background = { rgb = [0.992, 0.992, 0.992] }
default_pen_color = { rgb = [0.0, 0.0, 0.0] }
auto_adjust_pen = true
[[boards.items]]
id = "blackboard"
name = "Blackboard"
background = { rgb = [0.067, 0.067, 0.067] }
default_pen_color = { rgb = [1.0, 1.0, 1.0] }
auto_adjust_pen = true
[[boards.items]]
id = "blueprint"
name = "Blueprint"
background = { rgb = [0.063, 0.125, 0.251] }
default_pen_color = { rgb = [0.902, 0.945, 1.0] }
auto_adjust_pen = true
[[boards.items]]
id = "corkboard"
name = "Corkboard"
background = { rgb = [0.420, 0.294, 0.165] }
default_pen_color = { rgb = [0.969, 0.890, 0.784] }
auto_adjust_pen = true
# ───────────────────────────────────────────────────────────────────────────────
# Color Theme Examples
# ───────────────────────────────────────────────────────────────────────────────
# Chalkboard Theme (green board):
# [[boards.items]]
# id = "chalkboard"
# name = "Chalkboard"
# background = { rgb = [0.11, 0.18, 0.13] }
# default_pen_color = { rgb = [0.95, 0.95, 0.8] }
# auto_adjust_pen = true
# Sepia Theme (vintage whiteboard):
# [[boards.items]]
# id = "sepia"
# name = "Sepia"
# background = { rgb = [0.96, 0.93, 0.86] }
# default_pen_color = { rgb = [0.29, 0.23, 0.18] }
# auto_adjust_pen = true
# ═══════════════════════════════════════════════════════════════════════════════
# RENDER COLOR PROFILES
# ═══════════════════════════════════════════════════════════════════════════════
[render_profiles]
# Optional profile id to preview on startup
# active = "print"
# Apply profiles to board backgrounds, annotations, and canvas-space previews
apply_to_canvas = true
# Apply profiles to screen-space UI chrome, toolbars, popups, and status text
apply_to_ui = true
# Accepted values: "off", "active", "profile".
# Explicit canvas PNG export applies this selector to persisted canvas content.
export = "off"
# Used only when export = "profile".
# export_profile = "print"
# Render profiles remap final rendered pixels by exact RGB match. Alpha is
# preserved, and colors not listed here are unchanged.
#
# [[render_profiles.profiles]]
# id = "print"
# name = "Print"
# mappings = [
# { from = "#000000", to = "#FFFFFF" },
# { from = "#FFFFFF", to = "#000000" },
# { from = "#FFFF00", to = "#8B4513" },
# { from = "#00FF00", to = "#006400" },
# ]
# ═══════════════════════════════════════════════════════════════════════════════
# SESSION PERSISTENCE
# ═══════════════════════════════════════════════════════════════════════════════
[session]
# Enable persistence per mode (default to true)
persist_transparent = true
persist_whiteboard = true
persist_blackboard = true
# Persist undo/redo history alongside shapes (set false to save only visible drawings)
persist_history = true
# Restore pen colour/thickness/font size (and arrow placement) between runs.
# When true, the last-used tool state overrides config defaults at startup.
# Set to false if you always want to use the values above (e.g., arrow head placement).
restore_tool_state = true
# Autosave session data while the overlay is running
autosave_enabled = true
# Save after this much idle time following a change (ms)
autosave_idle_ms = 5000
# Maximum interval between saves while dirty (ms)
autosave_interval_ms = 45000
# Backoff before retrying autosave after a failure (ms)
autosave_failure_backoff_ms = 5000
# Storage location: "auto" (XDG data dir), "config" (next to config), or "custom"
storage = "auto"
# Store separate sessions per monitor (set false to reuse one file per display)
per_output = true
# When storage = "custom", set the directory here (supports ~ expansion)
# custom_directory = "/path/to/persistent/sessions"
# Clamp runaway files by limiting shapes per frame
max_shapes_per_frame = 10000
# Optional cap for serialized undo history (defaults to runtime undo limit)
# max_persisted_undo_depth = 200
# Maximum session file size (in megabytes); image paste and autosave warn near this cap
max_file_size_mb = 50
# Compression mode: "auto", "on", or "off"
compress = "auto"
# For compress = "auto": minimum file size (KiB) before gzip is used
auto_compress_threshold_kb = 100
# Number of rotated backups to retain (0 disables backups)
backup_retention = 1
# ═══════════════════════════════════════════════════════════════════════════════
# DRAWING SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[drawing]
# Default pen color
# Options: "red", "green", "blue", "yellow", "orange", "pink", "white", "black"
# Or RGB array: [255, 0, 0]
default_color = "red"
# Default pen thickness in pixels (1.0 - 50.0)
default_thickness = 3.0
# Default eraser size in pixels (1.0 - 50.0)
default_eraser_size = 12.0
# Default eraser mode: "brush" (pixel erase) or "stroke" (erase whole stroke)
default_eraser_mode = "brush"
# Default marker opacity multiplier (0.05 - 0.90). Multiplies the current color alpha.
marker_opacity = 0.32
# Default fill state for fill-capable shapes
default_fill_enabled = false
# Default regular polygon side count (3 - 12)
polygon_sides = 5
# Default font size for text mode (8.0 - 72.0)
default_font_size = 32.0
# Hit-test tolerance in pixels (1.0 - 20.0)
hit_test_tolerance = 6.0
# Number of shapes processed linearly before spatial indexing kicks in
hit_test_linear_threshold = 400
# Undo history size (10 - 1000)
undo_stack_limit = 100
# Drag gesture tool mapping (defaults match existing behavior)
# Allowed values use kebab-case drag-bindable tool names, e.g. "pen",
# "arrow", "eraser", "triangle", "regular-polygon".
# Freeform polygon is selectable from the toolbar picker but is not drag-bindable.
drag_tool = "pen"
shift_drag_tool = "line"
ctrl_drag_tool = "rect"
ctrl_shift_drag_tool = "arrow"
tab_drag_tool = "ellipse"
# Optional per-mouse-button drag mapping. These override the flat drag_tool
# fields above when present. Right/middle default to their built-in behavior
# unless configured here. Use "default" for a button's built-in behavior.
# Colors are optional and can be names or RGB arrays.
#
# [drawing.drag_tools.left]
# drag_tool = "pen"
# shift_drag_tool = "pen"
# shift_drag_color = "red"
#
# [drawing.drag_tools.right]
# drag_tool = "pen"
# drag_color = "blue"
#
# [drawing.drag_tools.middle]
# drag_tool = "default"
# ───────────────────────────────────────────────────────────────────────────────
# Font Configuration (Pango-based text rendering)
# ───────────────────────────────────────────────────────────────────────────────
# Font family name for text rendering
# Install fonts system-wide and reference by family name
# Examples to try:
# font_family = "Sans" # Default sans-serif
# font_family = "Monospace" # Fixed-width font
# font_family = "Serif" # Serif font
# font_family = "JetBrains Mono" # If installed
# font_family = "Fira Code" # If installed
# font_family = "Maple Mono NF" # If installed
# font_family = "DejaVu Sans" # Common on Linux
# font_family = "Liberation Sans" # Common on Linux
# font_family = "Noto Sans" # Google Noto fonts
# Falls back to "Sans" if the specified font is not available
font_family = "Sans"
# Font weight: "normal", "bold", "light", "ultralight", "heavy", "ultrabold"
# Or numeric: 100-900 (400=normal, 700=bold)
# Try different weights:
# font_weight = "normal" # Regular weight
# font_weight = "bold" # Bold (default, best visibility)
# font_weight = "light" # Light weight
# font_weight = "600" # Semi-bold (numeric)
font_weight = "bold"
# Font style: "normal", "italic", "oblique"
# Try different styles:
# font_style = "normal" # Standard upright text
# font_style = "italic" # Italic/cursive
# font_style = "oblique" # Slanted text
font_style = "normal"
# Enable semi-transparent background box behind text for better contrast
# Set to true if you find text hard to read against complex backgrounds
# Default: false (no background, cleaner look with just stroke outline)
text_background_enabled = false
# ═══════════════════════════════════════════════════════════════════════════════
# PRESET SLOTS
# ═══════════════════════════════════════════════════════════════════════════════
[presets]
# Number of visible preset slots (3-5)
slot_count = 5
# Each preset requires tool + color + size (thickness or eraser size).
# Optional fields let you capture fill, marker opacity, font size, etc.
[presets.slot_1]
# Optional label shown in UI tooltips
name = "Red pen"
# Tool: "pen", "line", "rect", "ellipse", "triangle", "parallelogram",
# "rhombus", "regular-polygon", "freeform-polygon", "arrow", "marker",
# "highlight", "eraser", "select"
tool = "pen"
# Color: name or RGB array
color = "red"
# Size: pen thickness or eraser size
size = 3.0
# Optional overrides
marker_opacity = 0.32
fill_enabled = false
font_size = 32.0
text_background_enabled = false
arrow_length = 20.0
arrow_angle = 30.0
arrow_head_at_end = false
show_status_bar = true
# [presets.slot_2]
# name = "Blue marker"
# tool = "marker"
# color = "blue"
# size = 8.0
# marker_opacity = 0.32
# ═══════════════════════════════════════════════════════════════════════════════
# ARROW SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[arrow]
# Arrowhead length in pixels
length = 20.0
# Arrowhead angle in degrees (15-60)
# 30 degrees gives a nice balanced arrow
angle_degrees = 30.0
# Place the arrowhead at the end of the line instead of the start
head_at_end = false
# ═══════════════════════════════════════════════════════════════════════════════
# PERFORMANCE SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[performance]
# Number of buffers for rendering (2, 3, or 4)
# 2 = double buffering (low memory)
# 3 = triple buffering (recommended, smooth)
# 4 = quad buffering (ultra-smooth on high refresh displays)
buffer_count = 3
# Enable vsync frame synchronization
# Prevents tearing and limits rendering to display refresh rate
enable_vsync = true
# Max FPS when VSync is disabled (0 = unlimited)
# Prevents CPU spinning at very high FPS; set to match your monitor (60/120/144/240)
max_fps_no_vsync = 60
# UI animation frame rate (0 = unlimited)
# Higher values smooth UI effects at the cost of more redraws
ui_animation_fps = 30
# ═══════════════════════════════════════════════════════════════════════════════
# HISTORY / STEP UNDO SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[history]
# Delay in milliseconds between steps for undo-all (50 - 5000)
undo_all_delay_ms = 1000
# Delay in milliseconds between steps for redo-all (50 - 5000)
redo_all_delay_ms = 1000
# Show the custom step undo/redo section in the toolbar
custom_section_enabled = false
# Delay in milliseconds between steps for custom undo (50 - 5000)
custom_undo_delay_ms = 1000
# Delay in milliseconds between steps for custom redo (50 - 5000)
custom_redo_delay_ms = 1000
# Number of steps to run for custom undo/redo (1 - 500)
custom_undo_steps = 5
custom_redo_steps = 5
# ═══════════════════════════════════════════════════════════════════════════════
# TABLET / STYLUS INPUT (Wayland tablet-unstable-v2)
# Build with `--features tablet-input` to use
# ═══════════════════════════════════════════════════════════════════════════════
[tablet]
# Enable tablet/stylus input at runtime (set false to opt out)
enabled = true
# Map pressure to thickness
pressure_enabled = true
# Thickness range for pressure mapping
min_thickness = 1.0
max_thickness = 8.0
# Automatically switch to eraser when physical eraser is detected
auto_eraser_switch = true
# Threshold (in pixels) before saving a stroke as pressure-sensitive
pressure_variation_threshold = 0.1
# How thickness edits apply to pressure strokes: disabled, add, scale
pressure_thickness_edit_mode = "disabled"
# When to show thickness entry for pressure strokes: never, pressure_only, any_pressure
pressure_thickness_entry_mode = "pressure_only"
# Per-step scale factor when using scale mode (0.1 = +/-10%)
pressure_thickness_scale_step = 0.1
# Barrel button bindings.
#
# Each button can trigger a keybinding action on press (e.g. "toggle_radial_menu").
# Omit action to ignore the button.
# Eraser switching is handled automatically via the physical tool type
# (controlled by auto_eraser_switch above), not via barrel buttons.
# Primary barrel button (BTN_STYLUS / button 331): open tool wheel
[tablet.stylus_button]
action = "toggle_radial_menu"
# Secondary barrel button (BTN_STYLUS2 / button 332): unbound
[tablet.stylus_button2]
# action = "undo"
# ═══════════════════════════════════════════════════════════════════════════════
# CAPTURE SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[capture]
# Enable screenshot shortcuts (set to false to disable all capture actions)
enabled = true
# Directory where PNG files are saved (supports ~ expansion)
save_directory = "~/Pictures/Wayscriber"
# Filename template (strftime-like subset: %Y, %m, %d, %H, %M, %S)
filename_template = "screenshot_%Y-%m-%d_%H%M%S"
# Image format for saved screenshots
format = "png"
# Copy screenshots to clipboard by default
# Shortcut-specific actions may override this
copy_to_clipboard = true
# Exit overlay after any capture completes (forces exit for all capture types)
# When false, clipboard-only captures still auto-exit by default.
# Use --no-exit-after-capture to keep the overlay open for a run.
exit_after_capture = false
# ═══════════════════════════════════════════════════════════════════════════════
# EXPORT SETTINGS
# ═══════════════════════════════════════════════════════════════════════════════
[export.pdf]
# Optional PDF filename template. Leave unset or blank to reuse [capture].filename_template.
# filename_template = "board_%Y-%m-%d_%H%M%S"
# Optional all-board PDF filename template. Falls back to filename_template, then [capture].
# all_boards_filename_template = "boards_%Y-%m-%d_%H%M%S"
# page_size: "viewport", "a4", "letter", or "custom"
page_size = "viewport"
# orientation: "auto", "portrait", or "landscape"
orientation = "auto"
# fit: "viewport", "fit-viewport-to-page", or "fit-content-to-page"
fit = "viewport"
# transparent_background: "none" keeps transparent PDF pages blank; "desktop" captures
# the live desktop after hiding the overlay and places it behind transparent pages.
transparent_background = "none"
# Used only when page_size = "custom" (PDF points)
custom_width = 800.0
custom_height = 600.0
# Source-coordinate padding around content when fit = "fit-content-to-page"
content_source_padding = 24.0
[export.pdf.labels]
enabled = false
# position: "top-left", "top-right", "bottom-left", "bottom-right", or "bottom-center"
position = "bottom-center"
# content: "custom-template", "board-and-page", "document-page", "board-name", or "page-name"
content = "custom-template"
template = "{board_name} - {page_name} ({document_page}/{document_pages})"
font_family = "Sans"
font_size = 10.0
margin = 12.0
padding_x = 6.0
padding_y = 3.0
text_color = [0.1, 0.1, 0.1, 1.0]
background_enabled = true
background_color = [1.0, 1.0, 1.0, 0.85]