Configuration Reference
July 7, 2026 · View on GitHub
Warning
Due to implementation limitations, configuration options cannot use TOML standard snake_case and are all in camelCase.
This document provides a comprehensive guide to all configuration options available in Focust. Configuration is stored in TOML format and can be edited either through the settings UI or by manually editing the configuration file.
Table of Contents
- Configuration File Location
- Configuration Structure
- General Settings
- Break Schedule Settings
- Attention Settings
- Theme Settings
- Audio Settings
- Suggestion Settings
- Application Exclusion Settings
- Advanced Settings
- Examples
- Tips and Best Practices
Configuration File Location
Focust stores its configuration in a platform-specific location:
Production (Release) Builds:
- Windows:
%APPDATA%\com.fesmoph.focust\config.toml - macOS:
~/Library/Application Support/com.fesmoph.focust/config.toml - Linux:
~/.config/com.fesmoph.focust/config.toml
Development (Debug) Builds:
- Windows:
%APPDATA%\com.fesmoph.focust.dev\config.toml - macOS:
~/Library/Application Support/com.fesmoph.focust.dev/config.toml - Linux:
~/.config/com.fesmoph.focust.dev/config.toml
Note: Development builds use a
.devsuffix to separate development and production configurations. The.devsuffix is appended to the final path component returned by the platform — on Windows and Linux this causes the logs directory to be stored as.../com.fesmoph.focust/logs.dev, while on macOS the logs directory becomes~/Library/Logs/com.fesmoph.focust.dev/. This allows developers to test changes without affecting their production settings.
You can quickly open the configuration directory from the settings UI:
- Go to Advanced Options tab
- Click Open configuration directory
Configuration Structure
The configuration file is divided into several main sections:
# General application settings
autostart = false
monitorDnd = true
# ...
# Break schedules (array of tables)
[[schedules]]
name = "Work Hours"
enabled = true
# ...
# Timed reminders (array of tables)
[[attentions]]
name = "Water Reminder"
enabled = true
# ...
# Application exclusions (array of tables)
[[appExclusions]]
active = true
rule = "pause"
patterns = ["chrome.exe", "firefox"]
# ...
General Settings
autostart
- Type: Boolean
- Default:
false - Description: Automatically start the application when the system boots up
monitorDnd
- Type: Boolean
- Default:
true - Description: Pause all breaks when system Do Not Disturb mode is detected
inactiveS
- Type: Integer (seconds)
- Default:
300(5 minutes) - Description: Duration of inactivity before the scheduler automatically pauses. The scheduler resumes when activity is detected.
allScreens
- Type: Boolean
- Default:
false - Description: Show break windows on all monitors in a multi-monitor setup. When disabled, breaks only appear on the primary monitor.
showTrayIcon
- Type: Boolean
- Default:
true - Description: Display the application icon in the system tray. Requires application restart to take effect.
- Note: When hidden, you can reopen settings by launching the app again (uses single instance), or close the app via Task Manager (Windows) / Activity Monitor (macOS) / System Monitor (Linux).
language
- Type: String
- Default: Auto-detected from system locale
- Options:
"en-US","zh-CN" - Description: Interface language. Automatically detected on first run but can be changed manually.
themeMode
- Type: String
- Default:
"system" - Options:
"light","dark","system" - Description: Color theme for the settings UI.
"system"follows your operating system's theme preference.
postponeShortcut
- Type: String
- Default:
""(empty) - Format: Key combination like
"Ctrl+Shift+P"or"Alt+P" - Description: Global hotkey to postpone the next break. Leave empty to disable. Examples:
"Ctrl+Shift+P""Alt+B"
windowSize
- Type: Float
- Default:
0.8(80% of screen size) - Range:
0.5to1.0 - Description: Size of the break window as a fraction of the screen.
0.5= 50% (half screen)0.8= 80% (default)1.0= 100% (fullscreen)
Break Schedule Settings
Break Schedules define when and how often breaks occur. You can have multiple schedules with different time ranges and active days.
Basic Break Schedule Fields
id
- Type: Integer
- Description: Unique identifier for the schedule, used internally by the application. Should not be modified manually!
- Note: Omitted in this documentation for simplicity.
name
- Type: String
- Default:
"Default Schedule" - Description: Human-readable name for the schedule
enabled
- Type: Boolean
- Default:
true - Description: Whether this schedule is active
notificationBeforeS
- Type: Integer (seconds)
- Default:
10 - Description: Send a system notification X seconds before a break starts. Set to
0to disable notifications.
Time Range
timeRange
- Type: Table
- Description: Defines when this schedule is active during the day. Set both start and end times as "00:00" to represent a full-day schedule.
[schedules.timeRange]
start = "09:00" # 24-hour format
end = "17:00" # 24-hour format
# For full-day schedule
[schedules.timeRange]
start = "00:00"
end = "00:00"
# The app may save as hh:mm:ss internally
[schedules.timeRange]
start = "00:00:00"
end = "00:00:00"
daysOfWeek
- Type: Array of strings
- Default:
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] - Options:
"Mon","Tue","Wed","Thu","Fri","Sat","Sun" - Description: Days when this schedule is active
Mini Breaks
Mini breaks are short reminders (typically lasting 20 seconds) that occur frequently.
miniBreaks.enabled
- Type: Boolean
- Default:
true
miniBreaks.durationS
- Type: Integer (seconds)
- Default:
20 - Description: How long the mini break lasts
miniBreaks.postponedS
- Type: Integer (seconds)
- Default:
300(5 minutes) - Description: How long to postpone the break when using the postpone function
miniBreaks.maxPostponeCount
- Type: Integer
- Default:
2 - Description: Maximum number of times a mini break can be postponed
miniBreaks.strictMode
- Type: Boolean
- Default:
false - Description: When enabled, breaks cannot be skipped or postponed
miniBreaks.intervalS
- Type: Integer (seconds)
- Default:
1200(20 minutes) - Description: Time between mini breaks
Mini Break Theme
See Theme Settings section for theme configuration details.
[schedules.miniBreaks.theme]
background = { solid = "#1f2937" }
textColor = "#f8fafc"
blurRadius = 8
opacity = 0.9
fontSize = 24
fontFamily = "Arial"
Mini Break Audio
See Audio Settings section for audio configuration details.
[schedules.miniBreaks.audio]
current = "builtin"
name = "gentle-bell"
volume = 0.7
Mini Break Suggestions
See Suggestion Settings section for suggestion configuration details.
[schedules.miniBreaks.suggestions]
show = true
Long Breaks
Long breaks are extended rest periods (typically 5 minutes) that occur less frequently.
longBreaks.enabled
- Type: Boolean
- Default:
true
longBreaks.durationS
- Type: Integer (seconds)
- Default:
300(5 minutes)
longBreaks.postponedS
- Type: Integer (seconds)
- Default:
300(5 minutes)
longBreaks.maxPostponeCount
- Type: Integer
- Default:
2 - Description: Maximum number of times a long break can be postponed
longBreaks.strictMode
- Type: Boolean
- Default:
false
longBreaks.afterMiniBreaks
- Type: Integer
- Default:
4 - Description: Trigger a long break after this many mini breaks. For example, with default settings:
- Mini break at 20 min, 40 min, 60 min, 80 min
- Long break at 100 min (after 4 mini breaks)
- Cycle repeats
Long breaks also support theme, audio, and suggestion settings (same format as mini breaks).
Example Schedule:
[[schedules]]
name = "Work Hours"
enabled = true
notificationBeforeS = 5
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri"]
[schedules.timeRange]
start = "09:00"
end = "17:00"
[schedules.miniBreaks]
enabled = true
durationS = 20
postponedS = 300
maxPostponeCount = 2
strictMode = false
intervalS = 1200
[schedules.miniBreaks.theme]
background = { solid = "#1e293b" }
textColor = "#f1f5f9"
blurRadius = 8
opacity = 0.9
fontSize = 24
fontFamily = "Arial"
[schedules.miniBreaks.audio]
current = "builtin"
name = "gentle-bell"
volume = 0.7
[schedules.miniBreaks.suggestions]
show = true
[schedules.longBreaks]
enabled = true
durationS = 300
postponedS = 600
maxPostponeCount = 2
strictMode = false
afterMiniBreaks = 4
[schedules.longBreaks.theme]
background = { imagePath = "/path/to/background.jpg" }
textColor = "#ffffff"
blurRadius = 10
opacity = 0.85
fontSize = 28
fontFamily = "Helvetica"
[schedules.longBreaks.audio]
current = "filePath"
path = "/path/to/sound.mp3"
volume = 0.8
[schedules.longBreaks.suggestions]
show = true
Attention Settings
Attention reminders are time-based notifications that work like alarm clocks. Unlike breaks, they don't interrupt your work — just show a brief message at specific times, which can be dismissed immediately.
Basic Attention Fields
name
- Type: String
- Required: Yes
- Description: Name of the reminder (e.g., "Water Reminder", "Stand Up Alert")
enabled
- Type: Boolean
- Default:
true - Description: Whether this reminder is active
times
- Type: Array of strings (24-hour time format)
- Required: Yes
- Description: List of times when the reminder should trigger
daysOfWeek
- Type: Array of strings
- Default:
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] - Options:
"Mon","Tue","Wed","Thu","Fri","Sat","Sun"
title
- Type: String
- Default:
"Attention" - Description: Title shown in the popup window
message
- Type: String
- Required: Yes
- Description: The message content to display
durationS
- Type: Integer (seconds)
- Default:
10 - Description: How long to show the reminder popup
Attention reminders also support theme, audio, and suggestion settings.
Example Attentions:
# Water reminder
[[attentions]]
name = "Hydrate"
enabled = true
times = ["10:00", "14:00", "16:00"]
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri"]
title = "Time to Drink Water"
message = "Stay hydrated! Drink a glass of water."
durationS = 10
[attentions.theme]
background = { solid = "#0ea5e9" }
textColor = "#ffffff"
blurRadius = 5
opacity = 0.95
fontSize = 20
fontFamily = "Arial"
[attentions.audio]
current = "builtin"
name = "notification"
volume = 0.6
# Stand up reminder
[[attentions]]
name = "Stand Up"
enabled = true
times = ["11:00", "15:00"]
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
title = "Stand Up and Move"
message = "Take a moment to stand up and stretch your legs!"
durationS = 15
[attentions.theme]
background = { solid = "#10b981" }
textColor = "#ffffff"
blurRadius = 5
opacity = 0.95
fontSize = 20
fontFamily = "Arial"
[attentions.audio]
current = "none"
Theme Settings
Theme settings control the appearance of break windows.
background
- Type: Object
- Description: Background source for the break window
Structure:
[theme.background]
current = "solid" # Currently active background type
solid = "#1f2937" # Preserved even when switched to image
imagePath = "/path/to/image.jpg" # Preserved even when switched to folder
imageFolder = "/path/to/images/" # Preserved even when switched to solid
Background Type Options:
-
Solid Color (
current = "solid"):[theme.background] current = "solid" solid = "#1f2937" -
Single Image (
current = "imagePath"):[theme.background] current = "imagePath" imagePath = "/path/to/image.jpg"- Supported Formats: JPG, PNG, WebP, etc.
-
Random Image from Folder (
current = "imageFolder"):[theme.background] current = "imageFolder" imageFolder = "/path/to/images/"
textColor
- Type: String (hex color)
- Default:
"#f8fafc" - Format:
#RRGGBB - Description: Color of all text in the break window
blurRadius
- Type: Integer (0-255)
- Default:
8 - Description: Gaussian blur radius applied to the background image (in pixels)
opacity
- Type: Float (0.0-1.0)
- Default:
0.9 - Description: Opacity of the break window overlay
0.0= Completely transparent (content still visible)1.0= Completely opaque
fontSize
- Type: Integer (pixels)
- Default:
24 - Description: Base font size for text in the break window
fontFamily
- Type: String
- Default:
"Arial" - Description: Font family name. Use fonts installed on the system.
Theme Examples:
# Minimal dark theme
[theme.background]
current = "solid"
solid = "#0f172a"
[theme]
textColor = "#e2e8f0"
blurRadius = 0
opacity = 1.0
fontSize = 20
fontFamily = "Segoe UI"
# Nature theme with image
[theme.background]
current = "imagePath"
imagePath = "/path/to/forest.jpg"
[theme]
textColor = "#ffffff"
blurRadius = 12
opacity = 0.75
fontSize = 28
fontFamily = "Georgia"
# Vibrant theme with preserved settings
[theme.background]
current = "solid"
solid = "#7c3aed"
imagePath = "/path/to/sunset.jpg" # Preserved
imageFolder = "C:\\Wallpapers" # Preserved
[theme]
textColor = "#fef3c7"
blurRadius = 0
opacity = 0.95
fontSize = 26
fontFamily = "Tahoma"
Audio Settings
Audio settings control sound playback during breaks.
Note: The same audio plays when a break starts and when it naturally ends, helping you stay aware of both transitions.
Structure:
[audio]
current = "builtin" # Currently active audio type
builtinName = "gentle-bell" # Preserved even when switched to filePath
filePath = "/path/to/custom.mp3" # Preserved even when switched to builtin
volume = 0.6
current
- Type: String enum
- Default:
"none" - Options:
"none","builtin","filePath" - Description: Currently active audio type
builtinName
- Type: String (optional)
- Description: Name of the built-in sound effect
- Available sounds:
"gentle-bell"- Soft bell chime"soft-gong"- Gentle gong sound"notification"- Simple notification beep"bright-notification"- Upbeat notification
filePath
- Type: String (optional)
- Description: Absolute path to a custom audio file
- Supported formats: MP3, WAV, OGG, FLAC
volume
- Type: Float (0.0-1.0)
- Default:
0.6 - Description: Playback volume
0.0= Muted1.0= Maximum volume
Audio Examples:
# No sound
[audio]
current = "none"
volume = 0.6
# Built-in sound
[audio]
current = "builtin"
builtinName = "gentle-bell"
volume = 0.7
# Custom audio file
[audio]
current = "filePath"
filePath = "C:\\Users\\YourName\\Music\\zen-bell.mp3"
volume = 0.8
Suggestion Settings
Suggestion settings control whether motivational messages or tips are shown during breaks.
show
- Type: Boolean
- Default:
true - Description: Show a random suggestion during each break
Suggestion Configuration:
Suggestions themselves are stored in separate TOML files located in the same directory as the main config file:
suggestions.toml
Suggestion File Format:
[byLanguage.en-US]
suggestions = [] # Legacy compatibility placeholder; not used as a shared pool.
shortSuggestions = [
"Look away from your screen and focus on a distant object.",
"Roll your shoulders back and take a deep breath.",
"Blink slowly and relax your eyes.",
...
]
longSuggestions = [
"Drink a glass of water.",
"Stand up and stretch your legs.",
...
]
[byLanguage.zh-CN]
suggestions = [] # Legacy compatibility placeholder; not used as a shared pool.
shortSuggestions = [
"将目光从屏幕移开,专注于远处的物体。",
"向后转动肩膀,深呼吸。",
"慢慢眨眼,放松眼睛。",
...
]
longSuggestions = [
"喝一杯水。",
"站起来伸展腿部。",
...
]
You can add your own suggestions under the appropriate language section. Mini breaks use shortSuggestions; long breaks use longSuggestions.
suggestions is retained only so older Focust versions can still parse the file, and new saves keep it empty. This is parse-only compatibility: older versions that read only suggestions may show no suggestions after a newer version has saved the file. When loading an older file that only has suggestions, current Focust uses that legacy list as the fallback for any missing short or long pool. If shortSuggestions = [] or longSuggestions = [] is present explicitly, that pool is intentionally empty and does not fall back to suggestions.
Application Exclusions Settings
Application exclusions allow you to automatically pause or resume the scheduler based on which applications are running. This is useful for preventing break interruptions during presentations, video calls, or when using specific applications.
appExclusions
- Type: Array of objects
- Default:
[](empty array) - Description: List of exclusion rules
Exclusion Rule Structure
Each exclusion rule has the following structure:
[[appExclusions]]
active = true
rule = "pause" # or "resume"
patterns = ["chrome.exe", "firefox"]
active
- Type: Boolean
- Default:
true - Description: Whether this exclusion rule is active
rule
- Type: String enum
- Options:
"pause","resume" - Description: Action to take when a matching process is detected
"pause": Pause the scheduler when any of the patterns match"resume": Resume the scheduler when any of the patterns match (if previously paused by exclusions)
patterns
- Type: Array of strings
- Description: List of process name patterns to match. Matching is case-insensitive and uses substring matching.
- Can be process names (e.g.,
"chrome.exe","firefox") - Can be partial names (e.g.,
"chrome"matches"chrome.exe") - Can be full paths (e.g.,
"C:\\Program Files\\App\\app.exe")
- Can be process names (e.g.,
Example Configurations
Pause during presentations:
[[appExclusions]]
active = true
rule = "pause"
patterns = ["POWERPNT.EXE", "Keynote", "impress"] # PowerPoint, Keynote, LibreOffice Impress
Pause during video calls:
[[appExclusions]]
active = true
rule = "Pause"
patterns = ["zoom.exe", "Teams.exe", "Slack.exe", "Discord.exe"]
Resume when using IDEs (override previous pauses):
[[appExclusions]]
active = true
rule = "pause"
patterns = ["chrome.exe", "firefox.exe"] # Pause during browsing
[[appExclusions]]
active = true
rule = "resume"
patterns = ["code.exe", "idea64.exe", "pycharm64.exe"] # Resume when coding
Multi-platform example:
[[appExclusions]]
active = true
rule = "pause"
patterns = [
# Windows
"POWERPNT.EXE", "chrome.exe", "firefox.exe",
# macOS
"Keynote", "Google Chrome", "Firefox",
# Linux
"chrome", "firefox", "libreoffice"
]
Platform-Specific Notes
- Windows: Process names typically include
.exeextension (e.g.,"chrome.exe") - macOS: Application names match the
.appname without extension (e.g.,"Google Chrome") - Linux: Process names are typically lowercase without extensions (e.g.,
"chrome","firefox")
Example:
autostart = false
monitorDnd = true
inactiveS = 300
allScreens = false
language = "en-US"
themeMode = "system"
postponeShortcut = "Ctrl+Shift+P"
windowSize = 0.8
[[appExclusions]]
active = true
rule = "Pause"
patterns = ["POWERPNT.EXE", "zoom.exe", "Teams.exe"]
[[appExclusions]]
active = true
rule = "Resume"
patterns = ["code.exe", "idea64.exe"]
Example:
autostart = false
monitorDnd = true
inactiveS = 300
allScreens = false
language = "en-US"
themeMode = "system"
postponeShortcut = "Ctrl+Shift+P"
windowSize = 0.8
Advanced Settings
Advanced settings are intended for users who want to fine-tune the application's behavior beyond standard options. These settings are not exposed in the user interface and must be edited directly in the configuration file. All advanced settings are grouped under the [advanced] table.
Advanced settings have a weaker compatibility guarantee than normal settings. Future incompatible changes will be surfaced in the settings interface to notify you of an update, but these options remain intended for manual configuration rather than regular UI workflows.
logLevel
- Type: String enum
- Default:
"info" - Options:
"trace","debug","info","warn","error" - Description: Sets the verbosity of application logging. Higher levels provide more detailed logs, useful for troubleshooting.
Example:
[advanced]
logLevel = "debug" # Enable detailed debug logging
resetMiniBreakCounterOnPauseReasons
- Type: Array of pause reason strings
- Default:
[] - Options:
"userIdle","dnd","manual","timedManual","appExclusion" - Description: Resets the mini-break counter for long-break cadence when the scheduler pauses for any listed reason. For example, adding
"userIdle"prevents a long break from being triggered by mini breaks counted before you were away.
Example:
[advanced]
resetMiniBreakCounterOnPauseReasons = ["userIdle"]
trayPauseDurationsMinutes
- Type: Array of positive integers
- Default:
[15, 30, 60] - Description: Controls the timed pause durations shown in the system tray menu, in minutes. Selecting one pauses both break and attention reminders until the duration expires. Entries are sorted ascending and deduplicated, and non-positive values are ignored. Set this to an empty array (
[]) to hide the timed pause submenu. Requires application restart to update the tray menu after editing.
Example:
[advanced]
trayPauseDurationsMinutes = [15, 30, 60]
Examples
Example 1: Minimal Configuration
# General settings
autostart = false
monitorDnd = true
inactiveS = 300
allScreens = false
language = "zh-CN"
themeMode = "system"
postponeShortcut = ""
windowSize = 0.8
attentions = []
[[schedules]]
name = "Default Schedule"
enabled = true
daysOfWeek = [
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sun",
]
notificationBeforeS = 10
[schedules.timeRange]
start = "00:00:00"
end = "00:00:00"
[schedules.miniBreaks]
id = 0
enabled = true
durationS = 20
postponedS = 300
maxPostponeCount = 2
strictMode = false
intervalS = 1200
[schedules.miniBreaks.theme]
textColor = "#f8fafc"
blurRadius = 8
opacity = 0.9
fontSize = 24
fontFamily = "Arial"
[schedules.miniBreaks.theme.background]
solid = "#1f2937"
[schedules.miniBreaks.audio]
current = "none"
volume = 0.6
[schedules.miniBreaks.suggestions]
show = true
[schedules.longBreaks]
id = 1
enabled = true
durationS = 300
postponedS = 300
maxPostponeCount = 2
strictMode = false
afterMiniBreaks = 4
[schedules.longBreaks.theme]
textColor = "#f8fafc"
blurRadius = 8
opacity = 0.9
fontSize = 24
fontFamily = "Arial"
[schedules.longBreaks.theme.background]
solid = "#1f2937"
[schedules.longBreaks.audio]
current = "none"
volume = 0.6
[schedules.longBreaks.suggestions]
show = true
Example 2: Comprehensive Work Setup
monitorDnd = true
inactiveS = 300
allScreens = true
language = "en-US"
themeMode = "system"
postponeShortcut = "Ctrl+Shift+B"
windowSize = 0.85
# Work hours schedule
[[schedules]]
name = "Work Hours"
enabled = true
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri"]
notificationBeforeS = 10
[schedules.timeRange]
start = "09:00"
end = "17:30"
[schedules.miniBreaks]
enabled = true
durationS = 20
postponedS = 300
maxPostponeCount = 2
strictMode = false
intervalS = 1200 # 20 min
[schedules.miniBreaks.theme]
background = { imagePath = "/home/user/wallpapers/calm-lake.jpg" }
textColor = "#e0f2fe"
blurRadius = 10
opacity = 0.85
fontSize = 24
fontFamily = "Helvetica"
[schedules.miniBreaks.audio]
current = "builtin"
name = "gentle-bell"
volume = 0.6
[schedules.miniBreaks.suggestions]
show = true
[schedules.longBreaks]
enabled = true
durationS = 600 # 10 min
postponedS = 600
maxPostponeCount = 2
strictMode = true
afterMiniBreaks = 3
[schedules.longBreaks.theme]
background = { imagePath = "/home/user/wallpapers/mountain.jpg" }
textColor = "#ffffff"
blurRadius = 15
opacity = 0.8
fontSize = 28
fontFamily = "Georgia"
[schedules.longBreaks.audio]
current = "filePath"
path = "/home/user/sounds/meditation-bell.mp3"
volume = 0.7
[schedules.longBreaks.suggestions]
show = true
# Evening schedule (shorter breaks, less strict)
[[schedules]]
name = "Evening"
enabled = true
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
notificationBeforeS = 5
[schedules.timeRange]
start = "18:00"
end = "22:00"
[schedules.miniBreaks]
enabled = true
durationS = 15
postponedS = 600
maxPostponeCount = 2
strictMode = false
intervalS = 1800 # 30 min
[schedules.miniBreaks.theme]
background = { Solid = "#1e3a8a" }
textColor = "#dbeafe"
blurRadius = 5
opacity = 0.9
fontSize = 22
fontFamily = "Arial"
[schedules.miniBreaks.audio]
current = "builtin"
name = "soft-gong"
volume = 0.5
[schedules.miniBreaks.suggestions]
show = true
[schedules.longBreaks]
enabled = false
# Hydration reminder
[[attentions]]
name = "Drink Water"
enabled = true
times = ["10:00", "14:00", "16:00", "20:00"]
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
title = "Hydration Time"
message = "Remember to drink water! Stay hydrated throughout the day."
durationS = 10
[attentions.theme]
background = { solid = "#0ea5e9" }
textColor = "#ffffff"
blurRadius = 5
opacity = 0.95
fontSize = 20
fontFamily = "Arial"
[attentions.audio]
current = "builtin"
name = "notification"
volume = 0.5
# Eye exercise reminder
[[attentions]]
name = "Eye Exercise"
enabled = true
times = ["11:00", "15:00", "19:00"]
daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri"]
title = "Eye Care"
message = "Look at something 20 feet away for 20 seconds (20-20-20 rule)"
durationS = 25
[attentions.theme]
background = { solid = "#10b981" }
textColor = "#ffffff"
blurRadius = 5
opacity = 0.95
fontSize = 22
fontFamily = "Arial"
[attentions.audio]
current = "builtin"
name = "bright-notification"
volume = 0.6
Tips and Best Practices
- Start Simple: Begin with the default configuration and gradually customize
- Test Settings: Use the preview/test buttons in the settings UI before saving
- Backup Config: Keep a backup of your configuration file, especially before major changes
- Use Strict Mode Wisely: Only enable strict mode for breaks you absolutely need to take
- Image Paths: Use absolute paths for images to avoid issues
- Audio Volume: Start with lower volumes (0.5-0.7) and adjust as needed
- Multiple Schedules: Use different schedules for different times of day or days of the week
- Attention Timing: Space out attention reminders to avoid notification fatigue
For more information, see:
- README.md - Project overview and features
- ARCHITECTURE.md - Technical architecture
- CONTRIBUTING.md - Development guide