chore: update d, example, html files

This commit is contained in:
retoor 2026-01-09 14:47:47 +01:00
parent f542a21d2d
commit 1a478dc38c
17 changed files with 460 additions and 141 deletions

431
README.md
View File

@ -1,134 +1,314 @@
# DWN - Desktop Window Manager # DWN - Desktop Window Manager
DWN is a high-performance, X11-compliant window manager written in ANSI C. It combines the efficiency of tiling layouts with the usability of a full desktop environment, featuring integrated status bars, system tray support, and a robust notification system. retoor <retoor@molodetz.nl>
## Project Vision A production-ready X11 window manager written in ANSI C. DWN implements EWMH and ICCCM protocols for cross-compatibility while providing tiling-first workflow management with integrated desktop components.
The Desktop Window Manager (DWN) is designed for users who seek a productive, tiling-first workflow without sacrificing modern desktop features. It adheres to EWMH and ICCCM standards, ensuring compatibility with contemporary applications while providing advanced automation capabilities through its built-in WebSocket API. ## Architecture
## Key Features DWN uses a modular architecture with specialized subsystems for window management, layout algorithms, panel rendering, system tray, notifications, and optional AI integration. All state is managed through a global singleton with strict encapsulation patterns.
* **Hybrid Layout Management**: Seamlessly switch between Tiling (Master-Stack), Monocle, and Floating modes on a per-workspace basis. The window manager operates with zero window borders and zero gaps between tiles, providing a seamless, professional appearance. Title bars remain at 28px height for window controls.
* **Virtual Workspaces**: Supports 9 independent workspaces with persistent state and layout configurations.
* **Integrated Desktop Components**: ## Core Features
* **Status Panel**: Built-in top and bottom panels with workspace indicators, taskbars, and system clocks.
* **System Tray**: XEmbed-compliant systray implementation. ### Layout Management
* **Notification Daemon**: Integrated D-Bus notification server support. - **Tiling Mode**: Master-stack layout with configurable ratios
* **AI Integration**: Native support for LLM-assisted window management and semantic command execution. - **Floating Mode**: Traditional overlapping windows
* **Command Palette**: Intelligent prompt-based interface for window and system management. - **Monocle Mode**: Single fullscreen window
* **Auto-Organization**: Context-aware window placement and workspace optimization. - **Composable Snapping**: Quarter-screen, half-screen, and full-screen snapping via Super+Arrow keys
* **Smart Notifications**: Intelligent filtering and prioritization based on application context.
* **Semantic Search**: Deep integration with Exa for enhanced application launching and web search. ### Workspace System
* **Extensible API**: A real-time WebSocket interface for remote control and introspection. - 9 independent virtual workspaces (F1-F9)
- Per-workspace layout persistence
- Workspace indicators in panel
- Fast workspace switching with Shift+F1-F9 to move windows
### Integrated Components
- **Top Panel**: Workspace indicators, taskbar, system tray, clock
- **Bottom Panel**: Additional status information
- **System Tray**: XEmbed protocol implementation supporting external applications
- **System Widgets**: Battery indicator, volume control, WiFi manager
- **Notification Daemon**: D-Bus org.freedesktop.Notifications implementation
### News Ticker
- Real-time news feed in panel
- Scrolling article titles
- Super+Return to open current article in browser
- Configurable news sources
### AI Integration
- **Command Palette** (Super+Shift+A): Natural language window management
- **Context Analysis** (Super+A): Workspace and task detection
- **Exa Semantic Search** (Super+Shift+E): Intelligent web search
- Powered by OpenRouter API (supports multiple LLM providers)
### Interactive Features
- **Tutorial System** (Super+T): Step-by-step keyboard shortcut training
- **Demo Mode** (Super+Shift+D): Automated feature showcase
- **Keyboard Shortcuts Help** (Super+S): Quick reference overlay
### Automation
- **XDG Autostart**: Automatic application launching from .desktop files
- **Service Manager**: Background process management
- **WebSocket API**: Remote control and state monitoring on port 8777
## Installation ## Installation
### Prerequisites ### Dependencies
DWN requires the following development libraries: Required packages (via pkg-config):
* `libX11`, `libXext`, `libXinerama`, `libXrandr`, `libXft` - X11, Xext, Xinerama, Xrandr, Xft
* `fontconfig` - fontconfig
* `libdbus-1` - libdbus-1
* `libcurl` (for AI features) - libcurl
- libm
### Building ### Build Process
```bash ```bash
# Clone the repository
git clone https://github.com/your-repo/dwn.git git clone https://github.com/your-repo/dwn.git
cd dwn cd dwn
# Install dependencies (automated for apt/dnf/pacman) make deps # Auto-install dependencies (apt/dnf/pacman)
make deps make # Build release version with -O2 optimization
make install # Install to /usr/local/bin
# Compile the project
make
``` ```
### Running ### Testing
To test DWN without affecting your current session, use the provided Xephyr-based runner:
```bash ```bash
make run make run # Launch in nested Xephyr window (safe testing)
``` ```
To install system-wide: ### Build Targets
```bash ```bash
sudo make install make # Release build with optimization
make debug # Debug build with -g -DDEBUG
make clean # Remove build artifacts
make format # Run clang-format
make check # Run cppcheck static analysis
``` ```
## AI-Assisted Management ## Configuration
DWN differentiates itself through deep integration with Large Language Models (LLMs) via the OpenRouter API. This allows for semantic understanding of your workflow and proactive window management. Configuration file: `~/.config/dwn/config`
### Features ### General Settings
* **Natural Language Commands**: Control your workspace using plain English (e.g., "move all browser windows to workspace 3", "arrange my coding environment").
* **Intelligent Context**: The AI is aware of your active windows, workspace layouts, and historical usage patterns. ```ini
* **Workflow Optimization**: Proactive suggestions for layout changes based on your current activity (coding vs. browsing vs. communication). [general]
* **Semantic App Launcher**: Find and launch applications based on intent rather than just binary names. terminal = xfce4-terminal
launcher = dmenu_run
file_manager = thunar
focus_mode = click # click or follow
focus_follow_delay = 100 # 0-1000ms
decorations = true
```
### Appearance
```ini
[appearance]
border_width = 0 # 0-50px (0 for seamless)
title_height = 28 # 0-100px
panel_height = 32 # 0-100px
gap = 0 # 0-100px (0 for seamless)
font = fixed
```
### Layout
```ini
[layout]
default = tiling # tiling, floating, monocle
master_ratio = 0.55 # 0.1-0.9
master_count = 1 # 1-10
```
### Panels
```ini
[panels]
top = true
bottom = true
```
### Colors
```ini
[colors]
panel_bg = #080808
panel_fg = #00ff00
workspace_active = #ff00ff
workspace_inactive = #222222
workspace_urgent = #ff0000
title_focused_bg = #00ffff
title_focused_fg = #000000
title_unfocused_bg = #111111
title_unfocused_fg = #444444
border_focused = #00ff00
border_unfocused = #000000
notification_bg = #111111
notification_fg = #00ffff
```
### AI Integration
To use AI features, configure your API keys in `config.ini`:
```ini ```ini
[ai] [ai]
enabled = true model = google/gemini-2.0-flash-exp:free
model = anthropic/claude-3-sonnet openrouter_api_key = sk-or-v1-your-key
openrouter_key = YOUR_API_KEY exa_api_key = your-exa-key
exa_key = YOUR_EXA_KEY
``` ```
## WebSocket API Environment variables:
```bash
export OPENROUTER_API_KEY=sk-or-v1-your-key
export EXA_API_KEY=your-exa-key
```
DWN exposes a powerful WebSocket API that allows external applications to monitor state and control the window manager programmatically. Get API keys:
- OpenRouter: https://openrouter.ai/keys
- Exa: https://dashboard.exa.ai/api-keys
### Connectivity ### Autostart
* **Default Port**: `8777`
* **Endpoint**: `ws://localhost:8777/ws` ```ini
* **Protocol**: JSON-RPC style messages [autostart]
enabled = true
xdg_autostart = true # Scan /etc/xdg/autostart and ~/.config/autostart
path = ~/.config/dwn/autostart.d
```
### WebSocket API
The API is disabled by default. It can be enabled in the configuration file:
```ini ```ini
[api] [api]
enabled = true enabled = true
port = 8777 port = 8777
``` ```
### API Commands ### Demo Mode
All commands are sent as JSON objects containing a `command` field. ```ini
[demo]
step_delay = 4000 # 1000-30000ms between steps
ai_timeout = 15000 # 5000-60000ms for AI responses
window_timeout = 5000 # 1000-30000ms for window spawns
```
#### 1. `get_status` ## Keyboard Shortcuts
Retrieves the current state of the window manager.
* **Response**: Returns an object with version, current workspace ID, and total client count.
#### 2. `get_workspaces` ### Application Launchers
Lists all workspaces and their current configuration. | Shortcut | Action |
* **Response**: An array of workspace objects (ID, Name, Layout, Client Count). |----------|--------|
| `Ctrl+Alt+T` | Terminal |
| `Super` / `Alt+F2` | Application launcher |
| `Super+E` | File manager |
| `Super+B` | Web browser |
| `Print` | Screenshot |
#### 3. `get_clients` ### Window Management
Lists all managed windows across all workspaces. | Shortcut | Action |
* **Response**: An array of client objects containing: |----------|--------|
* `window`: X11 Window ID | `Alt+F4` | Close window |
* `title`: Window title | `Alt+Tab` | Next window |
* `class`: Window class | `Alt+Shift+Tab` | Previous window |
* `workspace`: Workspace ID | `Alt+F9` | Toggle minimize |
* `geometry`: x, y, width, height | `Alt+F10` | Toggle maximize |
* `focused`: Boolean indicating focus state | `Alt+F11` | Toggle fullscreen |
| `Super+F9` | Toggle floating |
#### 4. `switch_workspace` ### Workspace Navigation
Changes the active workspace. | Shortcut | Action |
* **Parameters**: `{"command": "switch_workspace", "workspace": <int>}` |----------|--------|
| `F1` - `F9` | Switch to workspace 1-9 |
| `Shift+F1` - `Shift+F9` | Move window to workspace 1-9 |
| `Ctrl+Alt+Right` | Next workspace |
| `Ctrl+Alt+Left` | Previous workspace |
#### 5. `run_command` ### Layout Control
Executes an arbitrary shell command. | Shortcut | Action |
* **Parameters**: `{"command": "run_command", "exec": "<string>"}` |----------|--------|
| `Super+Space` | Cycle layout (tiling/floating/monocle) |
| `Super+H` | Shrink master area |
| `Super+L` | Expand master area |
| `Super+I` | Increase master count |
| `Super+D` | Decrease master count |
#### 6. `focus_client` ### Window Snapping
Focuses a specific window and switches to its workspace if necessary. | Shortcut | Action |
* **Parameters**: `{"command": "focus_client", "window": <long>}` |----------|--------|
| `Super+Left` | Snap left (50% or 100% width) |
| `Super+Right` | Snap right (50% or 100% width) |
| `Super+Up` | Snap top (50% or 100% height) |
| `Super+Down` | Snap bottom (50% or 100% height) |
### Example Usage (Python) Snapping is composable: Super+Left then Super+Up snaps to top-left quarter.
### AI Features
| Shortcut | Action |
|----------|--------|
| `Super+A` | Show AI context analysis |
| `Super+Shift+A` | AI command palette |
| `Super+Shift+E` | Exa semantic search |
### News & Help
| Shortcut | Action |
|----------|--------|
| `Super+Return` | Open current news article |
| `Super+S` | Show shortcuts help |
| `Super+T` | Interactive tutorial |
| `Super+Shift+D` | Toggle demo mode |
| `Super+Backspace` | Quit DWN |
## WebSocket API
Connect to `ws://localhost:8777/ws` for programmatic control.
### Commands
#### get_status
Returns window manager state.
```json
{"command": "get_status"}
```
#### get_workspaces
Returns array of workspace objects.
```json
{"command": "get_workspaces"}
```
#### get_clients
Returns array of all managed windows.
```json
{"command": "get_clients"}
```
Response includes window ID, title, class, workspace, geometry, focus state.
#### switch_workspace
Change active workspace.
```json
{"command": "switch_workspace", "workspace": 2}
```
#### run_command
Execute shell command.
```json
{"command": "run_command", "exec": "firefox"}
```
#### focus_client
Focus specific window by ID.
```json
{"command": "focus_client", "window": 12345678}
```
### Python Example
```python ```python
import websocket import websocket
@ -136,59 +316,76 @@ import json
ws = websocket.create_connection("ws://localhost:8777/ws") ws = websocket.create_connection("ws://localhost:8777/ws")
# Switch to workspace 2 ws.send(json.dumps({"command": "switch_workspace", "workspace": 3}))
ws.send(json.dumps({
"command": "switch_workspace",
"workspace": 2
}))
# Get all clients
ws.send(json.dumps({"command": "get_clients"})) ws.send(json.dumps({"command": "get_clients"}))
result = ws.recv() print(json.loads(ws.recv()))
print(json.loads(result))
ws.close() ws.close()
``` ```
### Advanced API Examples ## Module Architecture
The `scripts/api_examples/` directory contains several sophisticated applications leveraging the WebSocket API: ### Core Modules (src/)
* **Window Picker (`window_picker_fzf.py`)**: A terminal-based window switcher using `fzf`. It allows for fuzzy-searching through all open windows across all workspaces and jumping to the selected one. | Module | Responsibility |
* **Web Remote (`web_remote.html`)**: A standalone, mobile-friendly HTML5 dashboard. Control your window manager from a tablet or phone on the same network. |--------|----------------|
* **Session Manager (`session_manager.py`)**: Save and restore your window layouts. Snapshots current open applications and their workspace assignments for easy restoration. | main.c | X11 initialization, event loop, signal handling |
* **Auto-Manager (`listen.py`)**: A background service that monitors workspace occupancy and proactively suggests moving windows if a workspace becomes too crowded. | client.c | Window management, focus, frame creation |
| workspace.c | Virtual desktop management |
| layout.c | Tiling, floating, monocle algorithms |
| decorations.c | Title bars and borders |
| panel.c | Top and bottom panel rendering |
| systray.c | XEmbed system tray, battery/volume/WiFi widgets |
| notifications.c | D-Bus notification daemon |
| atoms.c | EWMH/ICCCM atom management |
| keys.c | Keyboard shortcut handling |
| config.c | INI configuration parser |
| ai.c | OpenRouter API, Exa search integration |
| news.c | News ticker with scrolling animation |
| autostart.c | XDG autostart implementation |
| services.c | Background service management |
| demo.c | Automated feature demonstration |
| api.c | WebSocket server and JSON handler |
| util.c | Logging, memory, string utilities |
## Configuration ### Design Patterns
DWN looks for a configuration file at `~/.config/dwn/config.ini`. If not found, it falls back to `/etc/dwn/config.ini`. - **Encapsulation**: Opaque pointer types hide internal structures
- **Error Handling**: Status codes with output parameters
Refer to `config/config.example` for a documented template of all available options, including color schemes, keybindings, and autostart commands. - **Resource Management**: Goto cleanup pattern for multi-resource functions
- **Modularity**: Single responsibility per source file
- **Naming**: Module prefix convention (e.g., `client_focus()`, `workspace_switch()`)
## Development ## Development
DWN is built with modularity in mind. Each major component is isolated in its own source file to facilitate easier debugging and feature additions. ### Standards
### Key Components - ANSI C (C89/C90) for maximum compatibility
* `src/main.c`: The core event loop and X11 event dispatcher. - Snake_case for functions and variables
* `src/client.c`: Window management logic (framing, focus, resizing). - CamelCase for types and structs
* `src/layout.c`: Tiling and floating layout algorithms. - No external dependencies beyond X11 and standard libraries
* `src/api.c`: WebSocket server and JSON command handler. - Defensive programming: validate inputs, check malloc, null-terminate strings
* `src/ai.c`: OpenRouter API integration and semantic logic.
### Coding Standards ### Code Style
* Strict adherence to ANSI C (C89/C90) for maximum compatibility.
* No external dependencies beyond standard X11 and networking libraries.
* Formatting is enforced via `clang-format`. Run `make format` before submitting patches.
## Codebase Structure ```bash
make format # Apply clang-format
make check # Run cppcheck
```
* `src/`: Core implementation logic. ### Project Structure
* `include/`: Header files and internal API definitions.
* `config/`: Configuration templates. ```
* `scripts/`: Deployment and utility scripts. dwn/
* `site/`: Technical documentation and architecture overviews. ├── src/ # Implementation
├── include/ # Headers
├── config/ # Configuration templates
├── scripts/ # Utilities and API examples
├── site/ # Documentation website
└── build/ # Build artifacts
```
## License ## License
This project is licensed under the MIT License - see the `LICENSE` file for details. MIT License - see LICENSE file for details.

BIN
bin/dwn

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,8 +1,47 @@
build/layout.o: src/layout.c include/layout.h include/dwn.h \ build/layout.o: src/layout.c include/layout.h include/dwn.h \
include/client.h include/workspace.h include/config.h include/util.h include/client.h include/workspace.h include/config.h include/util.h \
include/panel.h include/notifications.h \
/usr/include/dbus-1.0/dbus/dbus.h \
/usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h \
/usr/include/dbus-1.0/dbus/dbus-macros.h \
/usr/include/dbus-1.0/dbus/dbus-address.h \
/usr/include/dbus-1.0/dbus/dbus-types.h \
/usr/include/dbus-1.0/dbus/dbus-errors.h \
/usr/include/dbus-1.0/dbus/dbus-protocol.h \
/usr/include/dbus-1.0/dbus/dbus-bus.h \
/usr/include/dbus-1.0/dbus/dbus-connection.h \
/usr/include/dbus-1.0/dbus/dbus-memory.h \
/usr/include/dbus-1.0/dbus/dbus-message.h \
/usr/include/dbus-1.0/dbus/dbus-shared.h \
/usr/include/dbus-1.0/dbus/dbus-misc.h \
/usr/include/dbus-1.0/dbus/dbus-pending-call.h \
/usr/include/dbus-1.0/dbus/dbus-server.h \
/usr/include/dbus-1.0/dbus/dbus-signature.h \
/usr/include/dbus-1.0/dbus/dbus-syntax.h \
/usr/include/dbus-1.0/dbus/dbus-threads.h
include/layout.h: include/layout.h:
include/dwn.h: include/dwn.h:
include/client.h: include/client.h:
include/workspace.h: include/workspace.h:
include/config.h: include/config.h:
include/util.h: include/util.h:
include/panel.h:
include/notifications.h:
/usr/include/dbus-1.0/dbus/dbus.h:
/usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h:
/usr/include/dbus-1.0/dbus/dbus-macros.h:
/usr/include/dbus-1.0/dbus/dbus-address.h:
/usr/include/dbus-1.0/dbus/dbus-types.h:
/usr/include/dbus-1.0/dbus/dbus-errors.h:
/usr/include/dbus-1.0/dbus/dbus-protocol.h:
/usr/include/dbus-1.0/dbus/dbus-bus.h:
/usr/include/dbus-1.0/dbus/dbus-connection.h:
/usr/include/dbus-1.0/dbus/dbus-memory.h:
/usr/include/dbus-1.0/dbus/dbus-message.h:
/usr/include/dbus-1.0/dbus/dbus-shared.h:
/usr/include/dbus-1.0/dbus/dbus-misc.h:
/usr/include/dbus-1.0/dbus/dbus-pending-call.h:
/usr/include/dbus-1.0/dbus/dbus-server.h:
/usr/include/dbus-1.0/dbus/dbus-signature.h:
/usr/include/dbus-1.0/dbus/dbus-syntax.h:
/usr/include/dbus-1.0/dbus/dbus-threads.h:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -21,11 +21,11 @@ decorations = true
# Border width in pixels (default: 0) # Border width in pixels (default: 0)
border_width = 0 border_width = 0
# Title bar height in pixels (default: 24) # Title bar height in pixels (default: 28)
title_height = 24 title_height = 28
# Panel height in pixels (default: 28) # Panel height in pixels (default: 32)
panel_height = 28 panel_height = 32
# Gap between windows in pixels (default: 0) # Gap between windows in pixels (default: 0)
gap = 0 gap = 0

View File

@ -171,11 +171,31 @@
<td><code>ai.c</code></td> <td><code>ai.c</code></td>
<td>Async OpenRouter API integration, Exa semantic search</td> <td>Async OpenRouter API integration, Exa semantic search</td>
</tr> </tr>
<tr>
<td><strong>News</strong></td>
<td><code>news.c</code></td>
<td>News ticker with API integration, scrolling animation, article navigation</td>
</tr>
<tr> <tr>
<td><strong>Autostart</strong></td> <td><strong>Autostart</strong></td>
<td><code>autostart.c</code></td> <td><code>autostart.c</code></td>
<td>XDG Autostart support, .desktop file parsing, concurrent app launch</td> <td>XDG Autostart support, .desktop file parsing, concurrent app launch</td>
</tr> </tr>
<tr>
<td><strong>Services</strong></td>
<td><code>services.c</code></td>
<td>Background service management, process lifecycle control</td>
</tr>
<tr>
<td><strong>Demo</strong></td>
<td><code>demo.c</code></td>
<td>Automated feature demonstration mode, tutorial system</td>
</tr>
<tr>
<td><strong>API</strong></td>
<td><code>api.c</code></td>
<td>WebSocket server, JSON-RPC command handler, remote control interface</td>
</tr>
<tr> <tr>
<td><strong>Util</strong></td> <td><strong>Util</strong></td>
<td><code>util.c</code></td> <td><code>util.c</code></td>

View File

@ -134,27 +134,27 @@ decorations = true</code></pre>
<tbody> <tbody>
<tr> <tr>
<td><code>border_width</code></td> <td><code>border_width</code></td>
<td><code>2</code></td> <td><code>0</code></td>
<td>0-50</td> <td>0-50</td>
<td>Window border width in pixels</td> <td>Window border width in pixels (0 for seamless design)</td>
</tr> </tr>
<tr> <tr>
<td><code>title_height</code></td> <td><code>title_height</code></td>
<td><code>24</code></td> <td><code>28</code></td>
<td>0-100</td> <td>0-100</td>
<td>Title bar height in pixels</td> <td>Title bar height in pixels</td>
</tr> </tr>
<tr> <tr>
<td><code>panel_height</code></td> <td><code>panel_height</code></td>
<td><code>28</code></td> <td><code>32</code></td>
<td>0-100</td> <td>0-100</td>
<td>Top/bottom panel height</td> <td>Top/bottom panel height</td>
</tr> </tr>
<tr> <tr>
<td><code>gap</code></td> <td><code>gap</code></td>
<td><code>4</code></td> <td><code>0</code></td>
<td>0-100</td> <td>0-100</td>
<td>Gap between tiled windows</td> <td>Gap between tiled windows (0 for edge-to-edge tiling)</td>
</tr> </tr>
<tr> <tr>
<td><code>font</code></td> <td><code>font</code></td>
@ -170,11 +170,11 @@ decorations = true</code></pre>
<button class="copy-btn" onclick="copyCode(this)">Copy</button> <button class="copy-btn" onclick="copyCode(this)">Copy</button>
</div> </div>
<pre><code>[appearance] <pre><code>[appearance]
border_width = 2 border_width = 0
title_height = 28 title_height = 28
panel_height = 32 panel_height = 32
gap = 8 gap = 0
font = DejaVu Sans-10</code></pre> font = fixed</code></pre>
<h2 id="layout" style="margin-top: 3rem;">[layout] - Layout Behavior</h2> <h2 id="layout" style="margin-top: 3rem;">[layout] - Layout Behavior</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;"> <p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Configure the default layout mode and tiling parameters. Configure the default layout mode and tiling parameters.
@ -489,11 +489,11 @@ focus_mode = click
focus_follow_delay = 100 focus_follow_delay = 100
decorations = true decorations = true
[appearance] [appearance]
border_width = 2 border_width = 0
title_height = 24 title_height = 28
panel_height = 28 panel_height = 32
gap = 6 gap = 0
font = DejaVu Sans-10 font = fixed
[layout] [layout]
default = tiling default = tiling
master_ratio = 0.55 master_ratio = 0.55

View File

@ -131,12 +131,24 @@
</p> </p>
<h3>Window Decorations</h3> <h3>Window Decorations</h3>
<p> <p>
Each window has a title bar showing its name. The title bar color indicates focus: DWN features a professional borderless design for maximum screen utilization:
</p> </p>
<ul> <ul>
<li><strong>Blue title bar</strong> - Focused window</li> <li><strong>0px borders</strong> - No visible borders around windows</li>
<li><strong>Gray title bar</strong> - Unfocused window</li> <li><strong>0px gaps</strong> - Windows tile edge-to-edge without spacing</li>
<li><strong>28px title bars</strong> - Minimal height showing window name and controls</li>
</ul> </ul>
<p>
The title bar color indicates focus:
</p>
<ul>
<li><strong>Bright title bar</strong> - Focused window</li>
<li><strong>Dim title bar</strong> - Unfocused window</li>
</ul>
<p>
This seamless design creates a smooth, professional appearance where content takes
center stage. All settings can be customized in <code>~/.config/dwn/config</code>.
</p>
<h2 id="tutorial">Interactive Tutorial</h2> <h2 id="tutorial">Interactive Tutorial</h2>
<p> <p>
DWN includes a built-in interactive tutorial that teaches you essential shortcuts DWN includes a built-in interactive tutorial that teaches you essential shortcuts
@ -152,6 +164,23 @@
<h3>Start the Tutorial</h3> <h3>Start the Tutorial</h3>
<p>Press <kbd>Super</kbd> + <kbd>T</kbd> at any time to start or resume the tutorial.</p> <p>Press <kbd>Super</kbd> + <kbd>T</kbd> at any time to start or resume the tutorial.</p>
</div> </div>
<h2 id="demo">Demo Mode</h2>
<p>
DWN includes an automated demo mode that showcases all features without requiring
any interaction. The demo:
</p>
<ul>
<li>Automatically demonstrates window management operations</li>
<li>Shows workspace switching and layout changes</li>
<li>Highlights panel features and system tray widgets</li>
<li>Demonstrates AI integration capabilities (if configured)</li>
<li>Displays the complete keyboard shortcut reference</li>
</ul>
<div class="card">
<h3>Start Demo Mode</h3>
<p>Press <kbd>Super</kbd> + <kbd>Shift</kbd> + <kbd>D</kbd> to start the demo.
Press the same shortcut again to stop it at any time.</p>
</div>
<h2 id="windows">Managing Windows</h2> <h2 id="windows">Managing Windows</h2>
<h3>Window Operations</h3> <h3>Window Operations</h3>
<div class="table-wrapper"> <div class="table-wrapper">

View File

@ -63,7 +63,7 @@
<li>Adjustable master area ratio (0.1 - 0.9)</li> <li>Adjustable master area ratio (0.1 - 0.9)</li>
<li>Multiple windows in master area</li> <li>Multiple windows in master area</li>
<li>Smart stack arrangement</li> <li>Smart stack arrangement</li>
<li>Configurable gaps between windows</li> <li>Seamless borderless design (0px borders, 0px gaps)</li>
</ul> </ul>
</div> </div>
<div class="card"> <div class="card">
@ -94,6 +94,21 @@
<p style="margin: 0;">Switch layouts instantly with <kbd>Super</kbd> + <kbd>Space</kbd>. <p style="margin: 0;">Switch layouts instantly with <kbd>Super</kbd> + <kbd>Space</kbd>.
Your window arrangement is preserved when switching back.</p> Your window arrangement is preserved when switching back.</p>
</div> </div>
<h3 style="margin-top: 3rem; margin-bottom: 1.5rem;">Borderless Design</h3>
<div class="card">
<p>DWN employs a professional, seamless aesthetic with zero window borders and zero gaps:</p>
<ul style="margin-top: 1rem; padding-left: 1.25rem; color: var(--text-muted);">
<li><strong>0px borders</strong> - No visible borders around windows</li>
<li><strong>0px gaps</strong> - Windows tile edge-to-edge without spacing</li>
<li><strong>28px title bars</strong> - Minimal height for window controls</li>
<li><strong>Maximum screen utilization</strong> - Every pixel counts</li>
</ul>
<p style="margin-top: 1rem; color: var(--text-muted);">
This creates a smooth, professional appearance where content takes center stage. The focus
remains on your work, not on window decorations. All settings are configurable via
<code>~/.config/dwn/config</code> if you prefer different values.
</p>
</div>
</div> </div>
</section> </section>
<section class="section section-alt"> <section class="section section-alt">

View File

@ -45,7 +45,8 @@
<h1>Modern Window Management for X11</h1> <h1>Modern Window Management for X11</h1>
<p class="subtitle"> <p class="subtitle">
DWN is a production-ready window manager written in ANSI C with XFCE-like functionality, DWN is a production-ready window manager written in ANSI C with XFCE-like functionality,
powerful tiling layouts, and optional AI integration. Fast, flexible, and fully featured. powerful tiling layouts, and optional AI integration. Seamless borderless design, zero gaps,
and professional appearance. Fast, flexible, and fully featured.
</p> </p>
<div class="hero-buttons"> <div class="hero-buttons">
<a href="installation.html" class="btn btn-primary btn-lg">Get Started</a> <a href="installation.html" class="btn btn-primary btn-lg">Get Started</a>
@ -109,6 +110,24 @@
<p>Automatic startup of system services and tray applications following the <p>Automatic startup of system services and tray applications following the
XDG Autostart spec. Works with nm-applet, blueman, and more.</p> XDG Autostart spec. Works with nm-applet, blueman, and more.</p>
</div> </div>
<div class="feature-card">
<div class="feature-icon">&#128240;</div>
<h3>News Ticker</h3>
<p>Real-time news feed with scrolling article titles in the panel. Press
Super+Return to open the current article in your browser.</p>
</div>
<div class="feature-card">
<div class="feature-icon">&#127891;</div>
<h3>Interactive Learning</h3>
<p>Built-in tutorial system (Super+T) guides you through keyboard shortcuts.
Demo mode (Super+Shift+D) showcases all features automatically.</p>
</div>
<div class="feature-card">
<div class="feature-icon">&#128208;</div>
<h3>Borderless Design</h3>
<p>Zero window borders and zero gaps for a seamless, professional appearance.
Windows tile edge-to-edge for maximum screen utilization.</p>
</div>
</div> </div>
</div> </div>
</section> </section>