# 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. ## Project Vision 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. ## Key Features * **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. ## Installation ### Prerequisites DWN requires the following development libraries: * `libX11`, `libXext`, `libXinerama`, `libXrandr`, `libXft` * `fontconfig` * `libdbus-1` * `libcurl` (for AI features) ### Building ```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 ``` ### Running To test DWN without affecting your current session, use the provided Xephyr-based runner: ```bash make run ``` To install system-wide: ```bash sudo make install ``` ## AI-Assisted Management 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. ### 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. 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 ``` ## WebSocket API DWN exposes a powerful WebSocket API that allows external applications to monitor state and control the window manager programmatically. ### Connectivity * **Default Port**: `8777` * **Endpoint**: `ws://localhost:8777/ws` * **Protocol**: JSON-RPC style messages The API is disabled by default. It can be enabled in the configuration file: ```ini [api] enabled = true port = 8777 ``` ### API Commands All commands are sent as JSON objects containing a `command` field. #### 1. `get_status` Retrieves the current state of the window manager. * **Response**: Returns an object with version, current workspace ID, and total client count. #### 2. `get_workspaces` Lists all workspaces and their current configuration. * **Response**: An array of workspace objects (ID, Name, Layout, Client Count). #### 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 #### 4. `switch_workspace` Changes the active workspace. * **Parameters**: `{"command": "switch_workspace", "workspace": }` #### 5. `run_command` Executes an arbitrary shell command. * **Parameters**: `{"command": "run_command", "exec": ""}` #### 6. `focus_client` Focuses a specific window and switches to its workspace if necessary. * **Parameters**: `{"command": "focus_client", "window": }` ### Example Usage (Python) ```python import websocket import json ws = websocket.create_connection("ws://localhost:8777/ws") # Switch to workspace 2 ws.send(json.dumps({ "command": "switch_workspace", "workspace": 2 })) # Get all clients ws.send(json.dumps({"command": "get_clients"})) result = ws.recv() print(json.loads(result)) ws.close() ``` ### Advanced API Examples The `scripts/api_examples/` directory contains several sophisticated applications leveraging the WebSocket API: * **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. ## Configuration 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. ## 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. ### 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. ### 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. ## Codebase Structure * `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. ## License This project is licensed under the MIT License - see the `LICENSE` file for details.