mirror of
https://github.com/devmobasa/wayscriber.git
synced 2026-06-03 03:54:42 +02:00
1031 lines
38 KiB
TOML
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]
|