Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 15 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ Works on layer-shell compositors (wlroots, Smithay-based like Niri/Cosmic, Plasm
### Drawing & Editing
Freehand pen, translucent highlighter, eraser (circle/rect), straight lines, rectangles/ellipses with fill toggle, arrows, multiline text + sticky notes with smoothing; selection editing + properties panel; undo/redo; quick size/color changes via hotkeys or scroll; color picker + palettes.

### Board Modes
Whiteboard, blackboard, and transparent overlays with isolated frames and auto pen contrast. Snap back to transparent with <kbd>Ctrl+Shift+T</kbd>. Use board pages (prev/next/new/duplicate/delete) for multi-step walkthroughs.
### Boards
Named boards (transparent overlay + custom backgrounds) with isolated pages per board and auto-contrast pens. Jump slots with <kbd>Ctrl+Shift+1..9</kbd>, toggle whiteboard/blackboard, or open the board picker with <kbd>Ctrl+Shift+B</kbd>.

### Capture & Screenshots
Full-screen saves, active-window grabs, and region capture to file or clipboard using `grim`, `slurp`, and `wl-clipboard`. Falls back to xdg-desktop-portal if missing.
Expand All @@ -92,7 +92,7 @@ Full-screen saves, active-window grabs, and region capture to file or clipboard
Opt-in per board/monitor storage that restores your canvas plus pen color & thickness. One-off overrides via `--resume-session` / `--no-resume-session`; the tray checkmark flips the config on disk.

### Toolbars & UI
Floating toolbars (pin/unpin with <kbd>F2</kbd>/<kbd>F9</kbd>), preset slots, icon or text modes, color picker, extended palettes, status bar, page controls, and in-app help overlay (<kbd>F1</kbd>/<kbd>F10</kbd>).
Floating toolbars (pin/unpin with <kbd>F2</kbd>/<kbd>F9</kbd>), preset slots, icon or text modes, color picker, extended palettes, status bar, board/page controls, and in-app help overlay (<kbd>F1</kbd>/<kbd>F10</kbd>).

### Presets
Save tool + color + size (plus optional fill/opacity/text settings) into 3-5 slots for fast recall. Apply with <kbd>1</kbd>-<kbd>5</kbd>, save with <kbd>Shift+1</kbd>-<kbd>Shift+5</kbd>.
Expand Down Expand Up @@ -280,7 +280,7 @@ Launch wayscriber when you need it, exit when done:
```bash
wayscriber --active
wayscriber --active --mode whiteboard
wayscriber --active --mode blackboard
wayscriber --active --mode blueprint
wayscriber --freeze # start with screen frozen
```

Expand Down Expand Up @@ -344,7 +344,7 @@ journalctl --user -u wayscriber.service -f
| <kbd>Ctrl+Shift+C</kbd> | Select region → clipboard |
| <kbd>Ctrl+Shift+S</kbd> | Select region → save PNG |
| <kbd>Ctrl+6</kbd> | Region → clipboard (explicit) |
| <kbd>Ctrl+Shift+6</kbd> | Region → save PNG (explicit) |
| <kbd>Ctrl+Alt+6</kbd> | Region → save PNG (explicit) |
| <kbd>Ctrl+Alt+O</kbd> | Open last capture folder |

Requires `wl-clipboard`, `grim`, `slurp`. Falls back to xdg-desktop-portal if missing.
Expand All @@ -369,13 +369,18 @@ Press <kbd>F1</kbd> or <kbd>F10</kbd> at any time for the in-app cheat sheet.
| Text mode | <kbd>T</kbd>, <kbd>Click</kbd> to position, type, <kbd>Enter</kbd> to finish |
| Sticky note | <kbd>N</kbd>, <kbd>Click</kbd> to place, type, <kbd>Enter</kbd> to finish |

### Board Modes
### Boards

| Action | Key |
|--------|-----|
| Toggle Whiteboard | <kbd>Ctrl+W</kbd> |
| Toggle Blackboard | <kbd>Ctrl+B</kbd> |
| Return to Transparent | <kbd>Ctrl+Shift+T</kbd> |
| Switch board slot | <kbd>Ctrl+Shift+1..9</kbd> |
| Previous/next board | <kbd>Ctrl+Shift</kbd> + <kbd>←</kbd>/<kbd>→</kbd> |
| New board | <kbd>Ctrl+Shift+N</kbd> |
| Delete board | <kbd>Ctrl+Shift+Delete</kbd> |
| Board picker | <kbd>Ctrl+Shift+B</kbd> |

### Colors

Expand Down Expand Up @@ -495,8 +500,8 @@ ui_animation_fps = 30
[ui]
# status bar visibility and position

[board]
# whiteboard/blackboard presets
[boards]
# named boards + backgrounds
```

### Session Persistence
Expand Down Expand Up @@ -613,7 +618,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, project structure,
| Feature | ZoomIt (Windows) | wayscriber |
|---------|------------------|------------|
| Drawing tools | ✅ | ✅ |
| Whiteboard/Blackboard | ✅ | ✅ |
| Boards/Backgrounds | ✅ | ✅ |
| Multi-line text | ❌ | ✅ |
| Custom fonts | ❌ | ✅ |
| Config file | ❌ | ✅ |
Expand All @@ -625,7 +630,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, project structure,

- [x] Native Wayland layer-shell
- [x] Daemon mode with system tray
- [x] Whiteboard/blackboard modes
- [x] Boards/backgrounds
- [x] Session persistence (with CLI override + tray config toggle)
- [x] Highlighter & eraser tools
- [x] Additional shapes (filled shapes)
Expand Down
103 changes: 72 additions & 31 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,15 @@ custom_redo_steps = 5
# 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

Expand Down Expand Up @@ -299,6 +308,7 @@ layout_mode = "full"
# 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
Expand All @@ -309,6 +319,7 @@ layout_mode = "full"
# 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
Expand All @@ -319,6 +330,7 @@ layout_mode = "full"
# 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
Expand Down Expand Up @@ -349,6 +361,9 @@ 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

Expand Down Expand Up @@ -421,52 +436,78 @@ border_width = 2.0
text_color = [0.95, 0.96, 0.98, 1.0]

# ═══════════════════════════════════════════════════════════════════════════════
# BOARD MODE SETTINGS (Whiteboard/Blackboard)
# BOARD SETTINGS (Named Boards + Backgrounds)
# ═══════════════════════════════════════════════════════════════════════════════

[board]
# Enable board mode features
enabled = true
[boards]
# Maximum number of boards allowed
max_count = 9

# Auto-create boards when switching to an empty slot
auto_create = true

# Default mode on startup
# Options: "transparent" (default overlay), "whiteboard" (light), "blackboard" (dark)
default_mode = "transparent"
# Show board name/slot in the status bar
show_board_badge = true

# Whiteboard background color [R, G, B] (0.0-1.0 range)
# Default: off-white (253, 253, 253) for softer appearance
whiteboard_color = [0.992, 0.992, 0.992]
# Persist runtime edits (rename/background) back to config
persist_customizations = true

# Blackboard background color [R, G, B] (0.0-1.0 range)
# Default: near-black (17, 17, 17) for softer appearance
blackboard_color = [0.067, 0.067, 0.067]
# Default board id on startup
default_board = "transparent"

# Default pen color for whiteboard mode [R, G, B] (0.0-1.0 range)
# Default: black for contrast on light background
whiteboard_pen_color = [0.0, 0.0, 0.0]
[[boards.items]]
id = "transparent"
name = "Overlay"
background = "transparent"
persist = true

# Default pen color for blackboard mode [R, G, B] (0.0-1.0 range)
# Default: white for contrast on dark background
blackboard_pen_color = [1.0, 1.0, 1.0]
[[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

# Automatically adjust pen color when entering board modes
# Set to false if you want to keep your current color when switching modes
[[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
# ───────────────────────────────────────────────────────────────────────────────

# High Contrast Theme (pure white/black):
# whiteboard_color = [1.0, 1.0, 1.0]
# blackboard_color = [0.0, 0.0, 0.0]

# Chalkboard Theme (green board):
# blackboard_color = [0.11, 0.18, 0.13]
# blackboard_pen_color = [0.95, 0.95, 0.8]

# Sepia Theme (vintage):
# whiteboard_color = [0.96, 0.93, 0.86]
# whiteboard_pen_color = [0.29, 0.23, 0.18]
# [[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

# ═══════════════════════════════════════════════════════════════════════════════
# TABLET / STYLUS INPUT (Wayland tablet-unstable-v2)
Expand Down
18 changes: 18 additions & 0 deletions configurator/src/app/view/ui/status_bar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,24 @@ impl ConfiguratorApp {
self.defaults.ui_show_status_bar,
ToggleField::UiShowStatusBar,
),
toggle_row(
"Show board label",
self.draft.ui_show_status_board_badge,
self.defaults.ui_show_status_board_badge,
ToggleField::UiShowStatusBoardBadge,
),
toggle_row(
"Show page counter",
self.draft.ui_show_status_page_badge,
self.defaults.ui_show_status_page_badge,
ToggleField::UiShowStatusPageBadge,
),
toggle_row(
"Show overlay badge with status bar",
self.draft.ui_show_page_badge_with_status_bar,
self.defaults.ui_show_page_badge_with_status_bar,
ToggleField::UiShowPageBadgeWithStatusBar,
),
toggle_row(
"Show frozen badge",
self.draft.ui_show_frozen_badge,
Expand Down
10 changes: 10 additions & 0 deletions configurator/src/app/view/ui/toolbar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ impl ConfiguratorApp {
self.defaults.ui_toolbar_show_pages_section,
ToggleField::UiToolbarShowPagesSection,
),
toggle_row(
"Show boards section",
self.draft.ui_toolbar_show_boards_section,
self.defaults.ui_toolbar_show_boards_section,
ToggleField::UiToolbarShowBoardsSection,
),
toggle_row(
"Show Step Undo/Redo",
self.draft.ui_toolbar_show_step_section,
Expand Down Expand Up @@ -156,6 +162,10 @@ impl ConfiguratorApp {
ToolbarOverrideField::ShowPagesSection,
overrides.show_pages_section,
),
override_row(
ToolbarOverrideField::ShowBoardsSection,
overrides.show_boards_section,
),
override_row(
ToolbarOverrideField::ShowStepSection,
overrides.show_step_section
Expand Down
4 changes: 4 additions & 0 deletions configurator/src/models/config/draft/from_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ impl ConfigDraft {
performance_ui_animation_fps: config.performance.ui_animation_fps.to_string(),

ui_show_status_bar: config.ui.show_status_bar,
ui_show_status_board_badge: config.ui.show_status_board_badge,
ui_show_status_page_badge: config.ui.show_status_page_badge,
ui_show_page_badge_with_status_bar: config.ui.show_floating_badge_always,
ui_show_frozen_badge: config.ui.show_frozen_badge,
ui_context_menu_enabled: config.ui.context_menu.enabled,
ui_preferred_output: config.ui.preferred_output.clone().unwrap_or_default(),
Expand All @@ -71,6 +74,7 @@ impl ConfigDraft {
ui_toolbar_show_actions_advanced: config.ui.toolbar.show_actions_advanced,
ui_toolbar_show_zoom_actions: config.ui.toolbar.show_zoom_actions,
ui_toolbar_show_pages_section: config.ui.toolbar.show_pages_section,
ui_toolbar_show_boards_section: config.ui.toolbar.show_boards_section,
ui_toolbar_show_step_section: config.ui.toolbar.show_step_section,
ui_toolbar_show_text_controls: config.ui.toolbar.show_text_controls,
ui_toolbar_show_settings_section: config.ui.toolbar.show_settings_section,
Expand Down
4 changes: 4 additions & 0 deletions configurator/src/models/config/draft/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ pub struct ConfigDraft {
pub performance_ui_animation_fps: String,

pub ui_show_status_bar: bool,
pub ui_show_status_board_badge: bool,
pub ui_show_status_page_badge: bool,
pub ui_show_page_badge_with_status_bar: bool,
pub ui_show_frozen_badge: bool,
pub ui_context_menu_enabled: bool,
pub ui_preferred_output: String,
Expand All @@ -62,6 +65,7 @@ pub struct ConfigDraft {
pub ui_toolbar_show_actions_advanced: bool,
pub ui_toolbar_show_zoom_actions: bool,
pub ui_toolbar_show_pages_section: bool,
pub ui_toolbar_show_boards_section: bool,
pub ui_toolbar_show_step_section: bool,
pub ui_toolbar_show_text_controls: bool,
pub ui_toolbar_show_settings_section: bool,
Expand Down
9 changes: 9 additions & 0 deletions configurator/src/models/config/setters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ impl ConfigDraft {
self.ui_toolbar_show_actions_advanced = defaults.show_actions_advanced;
self.ui_toolbar_show_zoom_actions = defaults.show_zoom_actions;
self.ui_toolbar_show_pages_section = defaults.show_pages_section;
self.ui_toolbar_show_boards_section = defaults.show_boards_section;
self.ui_toolbar_show_presets = defaults.show_presets;
self.ui_toolbar_show_step_section = defaults.show_step_section;
self.ui_toolbar_show_text_controls = defaults.show_text_controls;
Expand Down Expand Up @@ -40,6 +41,11 @@ impl ConfigDraft {
ToggleField::PerformanceVsync => self.performance_enable_vsync = value,
ToggleField::UiShowStatusBar => self.ui_show_status_bar = value,
ToggleField::UiShowFrozenBadge => self.ui_show_frozen_badge = value,
ToggleField::UiShowStatusBoardBadge => self.ui_show_status_board_badge = value,
ToggleField::UiShowStatusPageBadge => self.ui_show_status_page_badge = value,
ToggleField::UiShowPageBadgeWithStatusBar => {
self.ui_show_page_badge_with_status_bar = value;
}
ToggleField::UiHelpOverlayContextFilter => self.help_context_filter = value,
ToggleField::UiContextMenuEnabled => self.ui_context_menu_enabled = value,
ToggleField::UiXdgFullscreen => self.ui_xdg_fullscreen = value,
Expand All @@ -61,6 +67,9 @@ impl ConfigDraft {
ToggleField::UiToolbarShowPagesSection => {
self.ui_toolbar_show_pages_section = value;
}
ToggleField::UiToolbarShowBoardsSection => {
self.ui_toolbar_show_boards_section = value;
}
ToggleField::UiToolbarShowStepSection => self.ui_toolbar_show_step_section = value,
ToggleField::UiToolbarShowTextControls => self.ui_toolbar_show_text_controls = value,
ToggleField::UiToolbarShowSettingsSection => {
Expand Down
4 changes: 4 additions & 0 deletions configurator/src/models/config/to_config/ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ use wayscriber::config::Config;
impl ConfigDraft {
pub(super) fn apply_ui(&self, config: &mut Config, errors: &mut Vec<FormError>) {
config.ui.show_status_bar = self.ui_show_status_bar;
config.ui.show_status_board_badge = self.ui_show_status_board_badge;
config.ui.show_status_page_badge = self.ui_show_status_page_badge;
config.ui.show_floating_badge_always = self.ui_show_page_badge_with_status_bar;
config.ui.show_frozen_badge = self.ui_show_frozen_badge;
config.ui.context_menu.enabled = self.ui_context_menu_enabled;
let preferred_output = self.ui_preferred_output.trim();
Expand All @@ -27,6 +30,7 @@ impl ConfigDraft {
config.ui.toolbar.show_actions_advanced = self.ui_toolbar_show_actions_advanced;
config.ui.toolbar.show_zoom_actions = self.ui_toolbar_show_zoom_actions;
config.ui.toolbar.show_pages_section = self.ui_toolbar_show_pages_section;
config.ui.toolbar.show_boards_section = self.ui_toolbar_show_boards_section;
config.ui.toolbar.show_step_section = self.ui_toolbar_show_step_section;
config.ui.toolbar.show_text_controls = self.ui_toolbar_show_text_controls;
config.ui.toolbar.show_settings_section = self.ui_toolbar_show_settings_section;
Expand Down
Loading