1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#:schema ./schemas/flow-config.schema.json
# Example application configuration for FlowWM.
#
# This file is a HAND-WRITTEN EXAMPLE. `flow config init` copies it verbatim
# into your config directory (~/.config/flow/flow.toml) as a fully-commented
# starting point.
#
# It is NOT read at runtime. The canonical default values live in code, in
# src/config/defaults.rs, and are applied by serde when fields are absent from
# your flow.toml. That means your flow.toml may be partial or even empty.
#
# Keep this file in sync with src/config/defaults.rs: the test
# `default_config_toml_matches_compiled_defaults` enforces that deserializing
# this file yields exactly FlowConfig::default().
#
# For field documentation, see the FlowConfig docstring in src/config/types.rs.
# Number of columns that fit side-by-side on one monitor screen.
# The actual pixel width of each column is computed at runtime from this value,
# the monitor resolution, and window_gap — so the layout always fills the screen.
#
# Power users can override the auto-computed width by setting column_width explicitly:
# column_width = 1280 # (optional) fixed pixel width, ignores columns_per_screen
= 4
# Minimum column width in pixels. Columns cannot be resized below this.
= 640
# Minimum row height in pixels — the floor for any single window's allocated
# height inside a column. Bounds the maximum number of rows that can stack
# inside one column, and the lower clamp for future drag / IPC continuous
# height adjustment of individual rows.
= 100
# Whether `flow start` checks GitHub for a newer release and, if one exists,
# prints a one-line notification prompting `flow update`. The check runs after
# the daemon is ready, is bounded by a short timeout, and never blocks or
# aborts startup. Explicit `flow update --check` is always available regardless
# of this flag. Set to false to silence the start-time notification.
= true
# Padding / spacing settings in pixels.
#
# - window_gap: uniform gap between all elements (windows and screen edges)
# - up: reserved space above the tiling area
# - down: reserved space below the tiling area (e.g., for taskbar clearance)
[]
= 16
= 0
= 0
# Animation settings for layout transitions.
[]
= true
= 240
= "ease-out-expo"
# Strategy for restoring minimized tiling windows.
# Options: original_slot, right_of_focused, append_right
[]
= "original_slot"
# Window border overlay settings.
#
# Each managed window gets a thin colored ring drawn as a separate layered
# overlay window that follows the target's HWND geometry. This produces sharp
# komorebi/Hyprland-style borders that the default Windows drop-shadow cannot.
#
# - enabled: master switch (false = no overlays created)
# - thickness: border ring width in pixels (applied on all four sides)
# - overlap: px the ring overlaps the window content (0 = full gap,
# thickness = content fills the slot); closes the DWM hairline
# - focused_color: border color for the focused/active window
# - unfocused_color: border color for tiled-but-not-focused windows
# - floating_color: border color for floating windows
#
# Colors are hex strings of the form "#RRGGBB".
[]
= true
= 3
= 1
= "#00AAFF"
= "#555555"
= "#AA00FF"
# Floating window configuration (both fields optional).
#
# When unset, the daemon falls back to a built-in policy: 60% × 80% of the
# monitor work area, capped at ~1536 × 1152 (QHD-derived) so ultrawide / 4K
# monitors don't produce absurdly large popups. An explicit pixel value below
# is always respected as-is — the cap applies only to the fallback path.
[]
# default_width = 1200 # (optional) explicit default float width in pixels
# default_height = 800 # (optional) explicit default float height in pixels
# Focus reconciliation settings.
#
# EVENT_SYSTEM_FOREGROUND is a best-effort stream: under rapid window churn
# (e.g. a browser closing multiple tabs), the OS can settle the foreground
# without emitting the final event, leaving flow's internal focus stuck on a
# stale window. The daemon closes that gap by periodically reconciling its
# tracked focus against the authoritative GetForegroundWindow() query.
#
# - foreground_sync_interval_ms: interval between reconciliation passes (ms).
# The common (in-sync) pass is a single microsecond-scale read that no-ops.
[]
= 250