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 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.
* **Virtual Workspaces**: Supports 9 independent workspaces with persistent state and layout configurations.
* **Integrated Desktop Components**:
* **Status Panel**: Built-in top and bottom panels with workspace indicators, taskbars, and system clocks.
* **System Tray**: XEmbed-compliant systray implementation.
* **Notification Daemon**: Integrated D-Bus notification server support.
* **AI Integration**: Native support for LLM-assisted window management and semantic command execution.
* **Command Palette**: Intelligent prompt-based interface for window and system management.
* **Auto-Organization**: Context-aware window placement and workspace optimization.
* **Smart Notifications**: Intelligent filtering and prioritization based on application context.
* **Semantic Search**: Deep integration with Exa for enhanced application launching and web search.
* **Extensible API**: A real-time WebSocket interface for remote control and introspection.
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.
## Core Features
### Layout Management
- **Tiling Mode**: Master-stack layout with configurable ratios
- **Floating Mode**: Traditional overlapping windows
- **Monocle Mode**: Single fullscreen window
- **Composable Snapping**: Quarter-screen, half-screen, and full-screen snapping via Super+Arrow keys
### Workspace System
- 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
### Prerequisites
### Dependencies
DWN requires the following development libraries:
* `libX11`, `libXext`, `libXinerama`, `libXrandr`, `libXft`
* `fontconfig`
* `libdbus-1`
* `libcurl` (for AI features)
Required packages (via pkg-config):
- X11, Xext, Xinerama, Xrandr, Xft
- fontconfig
- libdbus-1
- libcurl
- libm
### Building
### Build Process
```bash
# Clone the repository
git clone https://github.com/your-repo/dwn.git
cd dwn
# Install dependencies (automated for apt/dnf/pacman)
make deps
# Compile the project
make
make deps # Auto-install dependencies (apt/dnf/pacman)
make # Build release version with -O2 optimization
make install # Install to /usr/local/bin
```
### Running
To test DWN without affecting your current session, use the provided Xephyr-based runner:
### Testing
```bash
make run
make run # Launch in nested Xephyr window (safe testing)
```
To install system-wide:
### Build Targets
```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
* **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.
* **Workflow Optimization**: Proactive suggestions for layout changes based on your current activity (coding vs. browsing vs. communication).
* **Semantic App Launcher**: Find and launch applications based on intent rather than just binary names.
### General Settings
```ini
[general]
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
[ai]
enabled = true
model = anthropic/claude-3-sonnet
openrouter_key = YOUR_API_KEY
exa_key = YOUR_EXA_KEY
model = google/gemini-2.0-flash-exp:free
openrouter_api_key = sk-or-v1-your-key
exa_api_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
* **Default Port**: `8777`
* **Endpoint**: `ws://localhost:8777/ws`
* **Protocol**: JSON-RPC style messages
### Autostart
```ini
[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
[api]
enabled = true
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`
Retrieves the current state of the window manager.
* **Response**: Returns an object with version, current workspace ID, and total client count.
## Keyboard Shortcuts
#### 2. `get_workspaces`
Lists all workspaces and their current configuration.
* **Response**: An array of workspace objects (ID, Name, Layout, Client Count).
### Application Launchers
| Shortcut | Action |
|----------|--------|
| `Ctrl+Alt+T` | Terminal |
| `Super` / `Alt+F2` | Application launcher |
| `Super+E` | File manager |
| `Super+B` | Web browser |
| `Print` | Screenshot |
#### 3. `get_clients`
Lists all managed windows across all workspaces.
* **Response**: An array of client objects containing:
* `window`: X11 Window ID
* `title`: Window title
* `class`: Window class
* `workspace`: Workspace ID
* `geometry`: x, y, width, height
* `focused`: Boolean indicating focus state
### Window Management
| Shortcut | Action |
|----------|--------|
| `Alt+F4` | Close window |
| `Alt+Tab` | Next window |
| `Alt+Shift+Tab` | Previous window |
| `Alt+F9` | Toggle minimize |
| `Alt+F10` | Toggle maximize |
| `Alt+F11` | Toggle fullscreen |
| `Super+F9` | Toggle floating |
#### 4. `switch_workspace`
Changes the active workspace.
* **Parameters**: `{"command": "switch_workspace", "workspace": <int>}`
### Workspace Navigation
| Shortcut | Action |
|----------|--------|
| `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`
Executes an arbitrary shell command.
* **Parameters**: `{"command": "run_command", "exec": "<string>"}`
### Layout Control
| Shortcut | Action |
|----------|--------|
| `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`
Focuses a specific window and switches to its workspace if necessary.
* **Parameters**: `{"command": "focus_client", "window": <long>}`
### Window Snapping
| Shortcut | Action |
|----------|--------|
| `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
import websocket
@ -136,59 +316,76 @@ import json
ws = websocket.create_connection("ws://localhost:8777/ws")
# Switch to workspace 2
ws.send(json.dumps({
"command": "switch_workspace",
"workspace": 2
}))
ws.send(json.dumps({"command": "switch_workspace", "workspace": 3}))
# Get all clients
ws.send(json.dumps({"command": "get_clients"}))
result = ws.recv()
print(json.loads(result))
print(json.loads(ws.recv()))
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.
* **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.
* **Auto-Manager (`listen.py`)**: A background service that monitors workspace occupancy and proactively suggests moving windows if a workspace becomes too crowded.
| Module | Responsibility |
|--------|----------------|
| main.c | X11 initialization, event loop, signal handling |
| 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`.
Refer to `config/config.example` for a documented template of all available options, including color schemes, keybindings, and autostart commands.
- **Encapsulation**: Opaque pointer types hide internal structures
- **Error Handling**: Status codes with output parameters
- **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
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
* `src/main.c`: The core event loop and X11 event dispatcher.
* `src/client.c`: Window management logic (framing, focus, resizing).
* `src/layout.c`: Tiling and floating layout algorithms.
* `src/api.c`: WebSocket server and JSON command handler.
* `src/ai.c`: OpenRouter API integration and semantic logic.
- ANSI C (C89/C90) for maximum compatibility
- Snake_case for functions and variables
- CamelCase for types and structs
- No external dependencies beyond X11 and standard libraries
- Defensive programming: validate inputs, check malloc, null-terminate strings
### Coding Standards
* 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.
### Code Style
## Codebase Structure
```bash
make format # Apply clang-format
make check # Run cppcheck
```
* `src/`: Core implementation logic.
* `include/`: Header files and internal API definitions.
* `config/`: Configuration templates.
* `scripts/`: Deployment and utility scripts.
* `site/`: Technical documentation and architecture overviews.
### Project Structure
```
dwn/
├── src/ # Implementation
├── include/ # Headers
├── config/ # Configuration templates
├── scripts/ # Utilities and API examples
├── site/ # Documentation website
└── build/ # Build artifacts
```
## 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 \
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/dwn.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:

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 = 0
# Title bar height in pixels (default: 24)
title_height = 24
# Title bar height in pixels (default: 28)
title_height = 28
# Panel height in pixels (default: 28)
panel_height = 28
# Panel height in pixels (default: 32)
panel_height = 32
# Gap between windows in pixels (default: 0)
gap = 0

View File

@ -171,11 +171,31 @@
<td><code>ai.c</code></td>
<td>Async OpenRouter API integration, Exa semantic search</td>
</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>
<td><strong>Autostart</strong></td>
<td><code>autostart.c</code></td>
<td>XDG Autostart support, .desktop file parsing, concurrent app launch</td>
</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>
<td><strong>Util</strong></td>
<td><code>util.c</code></td>

View File

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

View File

@ -131,12 +131,24 @@
</p>
<h3>Window Decorations</h3>
<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>
<ul>
<li><strong>Blue title bar</strong> - Focused window</li>
<li><strong>Gray title bar</strong> - Unfocused window</li>
<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 showing window name and controls</li>
</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>
<p>
DWN includes a built-in interactive tutorial that teaches you essential shortcuts
@ -152,6 +164,23 @@
<h3>Start the Tutorial</h3>
<p>Press <kbd>Super</kbd> + <kbd>T</kbd> at any time to start or resume the tutorial.</p>
</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>
<h3>Window Operations</h3>
<div class="table-wrapper">

View File

@ -63,7 +63,7 @@
<li>Adjustable master area ratio (0.1 - 0.9)</li>
<li>Multiple windows in master area</li>
<li>Smart stack arrangement</li>
<li>Configurable gaps between windows</li>
<li>Seamless borderless design (0px borders, 0px gaps)</li>
</ul>
</div>
<div class="card">
@ -94,6 +94,21 @@
<p style="margin: 0;">Switch layouts instantly with <kbd>Super</kbd> + <kbd>Space</kbd>.
Your window arrangement is preserved when switching back.</p>
</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>
</section>
<section class="section section-alt">

View File

@ -45,7 +45,8 @@
<h1>Modern Window Management for X11</h1>
<p class="subtitle">
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>
<div class="hero-buttons">
<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
XDG Autostart spec. Works with nm-applet, blueman, and more.</p>
</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>
</section>