style: remove comments from header files

This commit is contained in:
2025-12-28 05:01:46 +01:00
parent a6b9fa3469
commit c76a620012
38 changed files with 167 additions and 1481 deletions
-38
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<main>
<section class="hero" style="padding: 8rem 0 4rem;">
<div class="container hero-content">
@@ -47,7 +46,6 @@
</p>
</div>
</section>
<section class="section">
<div class="container">
<div class="alert alert-info" style="margin-bottom: 2rem;">
@@ -55,7 +53,6 @@
<p style="margin: 0;">AI features are completely optional and require external API keys.
DWN works perfectly without them.</p>
</div>
<h2>Overview</h2>
<p>
DWN integrates with two AI services to provide intelligent desktop assistance:
@@ -64,7 +61,6 @@
<li><strong>OpenRouter API</strong> - Powers the AI command palette and context analysis</li>
<li><strong>Exa API</strong> - Provides semantic web search capabilities</li>
</ul>
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">&#129302;</div>
@@ -88,14 +84,11 @@
<p style="margin-top: 1rem;"><kbd>Super</kbd> + <kbd>Shift</kbd> + <kbd>E</kbd></p>
</div>
</div>
<!-- Setup OpenRouter -->
<h2 id="openrouter" style="margin-top: 4rem;">Setting Up OpenRouter</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
OpenRouter provides access to multiple AI models through a single API.
You can use free models or paid ones depending on your needs.
</p>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
@@ -105,7 +98,6 @@
and create a free account to get your API key.</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-content">
@@ -118,7 +110,6 @@
<pre><code>export OPENROUTER_API_KEY="sk-or-v1-your-key-here"</code></pre>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-content">
@@ -136,7 +127,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</div>
</div>
</div>
<div class="card" style="margin-top: 2rem;">
<h3>Recommended Free Models</h3>
<div class="table-wrapper">
@@ -168,14 +158,11 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</table>
</div>
</div>
<!-- AI Command Palette -->
<h2 id="command-palette" style="margin-top: 4rem;">AI Command Palette</h2>
<p>
Press <kbd>Super</kbd> + <kbd>Shift</kbd> + <kbd>A</kbd> to open the command palette.
Type natural language commands and press Enter.
</p>
<h3>Supported Commands</h3>
<div class="table-wrapper">
<table>
@@ -215,19 +202,15 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</tbody>
</table>
</div>
<div class="alert alert-success" style="margin-top: 1.5rem;">
<strong class="alert-title">Pro Tip</strong>
<p style="margin: 0;">The AI understands context. You can say "open browser" instead of
remembering the exact application name - it will figure out what you mean.</p>
</div>
<!-- Context Analysis -->
<h2 id="context" style="margin-top: 4rem;">Context Analysis</h2>
<p>
Press <kbd>Super</kbd> + <kbd>A</kbd> to see AI-powered analysis of your current workspace.
</p>
<div class="card">
<h3>What It Shows</h3>
<ul style="padding-left: 1.25rem;">
@@ -237,13 +220,10 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
<li><strong>Workspace Summary</strong> - Overview of open applications</li>
</ul>
</div>
<!-- Setup Exa -->
<h2 id="exa" style="margin-top: 4rem;">Setting Up Exa Search</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Exa provides semantic search - finding content based on meaning rather than exact keywords.
</p>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
@@ -253,7 +233,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
and create an account to get your API key.</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-content">
@@ -265,7 +244,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
<pre><code>export EXA_API_KEY="your-exa-key-here"</code></pre>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-content">
@@ -274,13 +252,10 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</div>
</div>
</div>
<!-- Semantic Search -->
<h2 id="search" style="margin-top: 4rem;">Using Semantic Search</h2>
<p>
Unlike traditional search, Exa understands the meaning of your query.
</p>
<div class="comparison" style="grid-template-columns: repeat(2, 1fr);">
<div class="comparison-card">
<h3>Traditional Search</h3>
@@ -307,7 +282,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</p>
</div>
</div>
<h3 style="margin-top: 2rem;">Search Tips</h3>
<ul>
<li>Use natural, conversational queries</li>
@@ -315,14 +289,11 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
<li>Results appear in a dmenu/rofi list - select to open in browser</li>
<li>Search includes articles, documentation, tutorials, and more</li>
</ul>
<!-- Privacy -->
<h2 id="privacy" style="margin-top: 4rem;">Privacy Considerations</h2>
<div class="alert alert-warning">
<strong class="alert-title">Data Sent to External Services</strong>
<p style="margin: 0;">When using AI features, the following data is sent to external APIs:</p>
</div>
<div class="table-wrapper" style="margin-top: 1rem;">
<table>
<thead>
@@ -351,7 +322,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</tbody>
</table>
</div>
<p style="margin-top: 1rem; color: var(--text-muted);">
If you're concerned about privacy, you can:
</p>
@@ -360,10 +330,7 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
<li>Use OpenRouter with privacy-focused models</li>
<li>Only use AI features when needed</li>
</ul>
<!-- Troubleshooting -->
<h2 id="troubleshooting" style="margin-top: 4rem;">Troubleshooting</h2>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
AI commands don't work - "API key not configured"
@@ -380,7 +347,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
Slow responses from AI
@@ -392,7 +358,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
Exa search returns no results
@@ -404,11 +369,9 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -452,7 +415,6 @@ model = google/gemini-2.0-flash-exp:free</code></pre>
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
-44
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<main>
<section class="hero" style="padding: 8rem 0 4rem;">
<div class="container hero-content">
@@ -47,7 +46,6 @@
</p>
</div>
</section>
<section class="section">
<div class="container">
<h2>Overview</h2>
@@ -56,7 +54,6 @@
A global <code>DWNState</code> singleton manages all state, and the main event loop
dispatches X11 events to specialized modules.
</p>
<div class="card" style="margin: 2rem 0;">
<h3>Project Statistics</h3>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; text-align: center;">
@@ -78,8 +75,6 @@
</div>
</div>
</div>
<!-- Directory Structure -->
<h2 id="structure" style="margin-top: 3rem;">Directory Structure</h2>
<div class="code-header">
<span>Project Layout</span>
@@ -104,8 +99,6 @@
├── Makefile # Build system
├── CLAUDE.md # AI assistant context
└── README.md # Project readme</code></pre>
<!-- Core Modules -->
<h2 id="modules" style="margin-top: 3rem;">Core Modules</h2>
<div class="table-wrapper">
<table>
@@ -185,8 +178,6 @@
</tbody>
</table>
</div>
<!-- Module Dependencies -->
<h2 id="dependencies" style="margin-top: 3rem;">Module Dependencies</h2>
<div class="card">
<pre style="margin: 0; background: transparent; border: none; padding: 0;"><code>main.c (orchestrator)
@@ -208,14 +199,11 @@
└── keys.c
└── config.c</code></pre>
</div>
<!-- Global State -->
<h2 id="state" style="margin-top: 3rem;">Global State (DWNState)</h2>
<p>
All window manager state is centralized in a single <code>DWNState</code> structure.
This simplifies state management and makes the codebase easier to understand.
</p>
<div class="code-header">
<span>include/dwn.h (simplified)</span>
</div>
@@ -223,32 +211,23 @@
Display *display; // X11 connection
Window root; // Root window
int screen; // Default screen
Client *clients[MAX_CLIENTS]; // All managed windows
int client_count;
Workspace workspaces[MAX_WORKSPACES]; // Virtual desktops
int current_workspace;
Panel top_panel;
Panel bottom_panel;
Config config; // User configuration
KeyBinding keys[MAX_KEYBINDINGS];
// EWMH atoms
Atom atoms[ATOM_COUNT];
} DWNState;
extern DWNState *dwn; // Global singleton</code></pre>
<!-- Event Loop -->
<h2 id="events" style="margin-top: 3rem;">Event Loop</h2>
<p>
DWN uses a traditional X11 event loop with XNextEvent. Events are dispatched
to appropriate handlers based on type.
</p>
<div class="code-header">
<span>main.c (simplified)</span>
</div>
@@ -256,11 +235,9 @@ extern DWNState *dwn; // Global singleton</code></pre>
dwn_init(); // Initialize X11, atoms, config
setup_keybindings(); // Register keyboard shortcuts
setup_panels(); // Create panel windows
XEvent event;
while (running) {
XNextEvent(dwn->display, &event);
switch (event.type) {
case MapRequest:
handle_map_request(&event.xmaprequest);
@@ -280,12 +257,9 @@ extern DWNState *dwn; // Global singleton</code></pre>
// ... more event types
}
}
dwn_cleanup();
return 0;
}</code></pre>
<!-- Key Constants -->
<h2 id="constants" style="margin-top: 3rem;">Key Constants</h2>
<div class="table-wrapper">
<table>
@@ -325,8 +299,6 @@ extern DWNState *dwn; // Global singleton</code></pre>
</tbody>
</table>
</div>
<!-- Coding Conventions -->
<h2 id="conventions" style="margin-top: 3rem;">Coding Conventions</h2>
<div class="features-grid" style="grid-template-columns: repeat(2, 1fr);">
<div class="card">
@@ -348,33 +320,26 @@ extern DWNState *dwn; // Global singleton</code></pre>
</ul>
</div>
</div>
<div class="code-header" style="margin-top: 1.5rem;">
<span>Example Function</span>
</div>
<pre><code>void client_focus(Client *c) {
if (!c) return;
// Unfocus previous
if (dwn->focused && dwn->focused != c) {
client_unfocus(dwn->focused);
}
dwn->focused = c;
XSetInputFocus(dwn->display, c->window, RevertToPointerRoot, CurrentTime);
XRaiseWindow(dwn->display, c->frame);
decorations_update(c);
atoms_set_active_window(c->window);
}</code></pre>
<!-- EWMH/ICCCM -->
<h2 id="protocols" style="margin-top: 3rem;">EWMH/ICCCM Support</h2>
<p>
DWN implements key Extended Window Manager Hints and ICCCM protocols
for compatibility with modern applications.
</p>
<div class="features-grid" style="grid-template-columns: repeat(2, 1fr);">
<div class="card">
<h3>EWMH Atoms</h3>
@@ -407,13 +372,10 @@ extern DWNState *dwn; // Global singleton</code></pre>
</ul>
</div>
</div>
<!-- Build System -->
<h2 id="build" style="margin-top: 3rem;">Build System</h2>
<p>
DWN uses a simple Makefile-based build system with pkg-config for dependency detection.
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -467,13 +429,10 @@ extern DWNState *dwn; // Global singleton</code></pre>
</tbody>
</table>
</div>
<!-- Contributing -->
<h2 id="contributing" style="margin-top: 3rem;">Contributing</h2>
<p>
Contributions are welcome! Here's how to get started:
</p>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
@@ -511,11 +470,9 @@ extern DWNState *dwn; // Global singleton</code></pre>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -559,7 +516,6 @@ extern DWNState *dwn; // Global singleton</code></pre>
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
-39
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<main>
<section class="hero" style="padding: 8rem 0 4rem;">
<div class="container hero-content">
@@ -47,7 +46,6 @@
</p>
</div>
</section>
<section class="section">
<div class="container">
<h2>Configuration File</h2>
@@ -55,19 +53,15 @@
DWN reads its configuration from <code>~/.config/dwn/config</code> using an INI-style format.
Changes take effect on restart (or you can reload in a future version).
</p>
<div class="alert alert-info">
<strong class="alert-title">First Run</strong>
<p style="margin: 0;">DWN creates a default configuration file on first run if one doesn't exist.
You can also copy the example config from the source repository.</p>
</div>
<!-- General Section -->
<h2 id="general" style="margin-top: 3rem;">[general] - Core Settings</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Basic behavior settings for applications and focus handling.
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -106,7 +100,6 @@
</tbody>
</table>
</div>
<div class="code-header">
<span>Example</span>
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
@@ -117,13 +110,10 @@ launcher = rofi -show run
file_manager = nautilus
focus_mode = click
decorations = true</code></pre>
<!-- Appearance Section -->
<h2 id="appearance" style="margin-top: 3rem;">[appearance] - Visual Settings</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Control the visual appearance of windows, panels, and gaps.
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -168,7 +158,6 @@ decorations = true</code></pre>
</tbody>
</table>
</div>
<div class="code-header">
<span>Example</span>
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
@@ -179,13 +168,10 @@ title_height = 28
panel_height = 32
gap = 8
font = DejaVu Sans-10</code></pre>
<!-- Layout Section -->
<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.
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -218,7 +204,6 @@ font = DejaVu Sans-10</code></pre>
</tbody>
</table>
</div>
<div class="code-header">
<span>Example</span>
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
@@ -227,13 +212,10 @@ font = DejaVu Sans-10</code></pre>
default = tiling
master_ratio = 0.60
master_count = 1</code></pre>
<!-- Panels Section -->
<h2 id="panels" style="margin-top: 3rem;">[panels] - Panel Visibility</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Control which panels are displayed.
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -257,7 +239,6 @@ master_count = 1</code></pre>
</tbody>
</table>
</div>
<div class="code-header">
<span>Example - Minimal Setup</span>
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
@@ -265,13 +246,10 @@ master_count = 1</code></pre>
<pre><code>[panels]
top = true
bottom = false</code></pre>
<!-- Colors Section -->
<h2 id="colors" style="margin-top: 3rem;">[colors] - Color Scheme</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Customize all colors using hex format (#RRGGBB).
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -350,7 +328,6 @@ bottom = false</code></pre>
</tbody>
</table>
</div>
<div class="code-header">
<span>Example - Nord Theme</span>
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
@@ -369,13 +346,10 @@ border_focused = #88c0d0
border_unfocused = #3b4252
notification_bg = #3b4252
notification_fg = #eceff4</code></pre>
<!-- AI Section -->
<h2 id="ai" style="margin-top: 3rem;">[ai] - AI Integration</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">
Configure AI features. See <a href="ai-features.html">AI Features</a> for full setup instructions.
</p>
<div class="table-wrapper">
<table>
<thead>
@@ -400,7 +374,6 @@ notification_fg = #eceff4</code></pre>
</tbody>
</table>
</div>
<div class="code-header">
<span>Example</span>
<button class="copy-btn" onclick="copyCode(this)">Copy</button>
@@ -409,14 +382,11 @@ notification_fg = #eceff4</code></pre>
model = google/gemini-2.0-flash-exp:free
openrouter_api_key = sk-or-v1-your-key-here
exa_api_key = your-exa-key-here</code></pre>
<div class="alert alert-warning" style="margin-top: 1rem;">
<strong class="alert-title">Security Note</strong>
<p style="margin: 0;">For better security, use environment variables instead of storing API keys in the config file:
<code>export OPENROUTER_API_KEY=sk-or-v1-...</code></p>
</div>
<!-- Complete Example -->
<h2 style="margin-top: 3rem;">Complete Configuration Example</h2>
<div class="code-header">
<span>~/.config/dwn/config</span>
@@ -424,30 +394,25 @@ exa_api_key = your-exa-key-here</code></pre>
</div>
<pre><code># DWN Window Manager Configuration
# https://dwn.github.io
[general]
terminal = alacritty
launcher = rofi -show drun
file_manager = thunar
focus_mode = click
decorations = true
[appearance]
border_width = 2
title_height = 24
panel_height = 28
gap = 6
font = DejaVu Sans-10
[layout]
default = tiling
master_ratio = 0.55
master_count = 1
[panels]
top = true
bottom = true
[colors]
panel_bg = #1a1a2e
panel_fg = #e0e0e0
@@ -462,15 +427,12 @@ border_focused = #4a90d9
border_unfocused = #333333
notification_bg = #2a2a3e
notification_fg = #ffffff
[ai]
model = google/gemini-2.0-flash-exp:free
# API keys via environment variables recommended</code></pre>
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -514,7 +476,6 @@ model = google/gemini-2.0-flash-exp:free
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
-28
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<div class="docs-layout container">
<aside class="docs-sidebar">
<ul>
@@ -70,23 +69,19 @@
</li>
</ul>
</aside>
<main class="docs-content">
<h1 id="introduction">Getting Started with DWN</h1>
<p class="lead">
Learn the fundamentals of DWN and become productive in minutes.
</p>
<h2 id="first-steps">First Steps</h2>
<p>
After <a href="installation.html">installing DWN</a> and starting your session,
you'll see a clean desktop with two panels: a top panel with workspace indicators,
taskbar, and system tray, and a bottom panel showing the clock.
</p>
<h3>Opening Your First Application</h3>
<p>Start by launching a terminal and application launcher:</p>
<div class="table-wrapper">
<table>
<thead>
@@ -115,28 +110,23 @@
</tbody>
</table>
</div>
<div class="alert alert-info">
<strong class="alert-title">Tip: Run the Tutorial</strong>
<p style="margin: 0;">Press <kbd>Super</kbd> + <kbd>T</kbd> to start an interactive
tutorial that will guide you through all essential shortcuts.</p>
</div>
<h2 id="basic-concepts">Basic Concepts</h2>
<h3>The Super Key</h3>
<p>
Most DWN shortcuts use the <kbd>Super</kbd> key (often the Windows key or Command key).
This keeps shortcuts separate from application shortcuts that typically use
<kbd>Ctrl</kbd> or <kbd>Alt</kbd>.
</p>
<h3>Focus Model</h3>
<p>
By default, DWN uses "click to focus" - you click on a window to focus it.
You can change this to "focus follows mouse" (sloppy focus) in the configuration.
</p>
<h3>Window Decorations</h3>
<p>
Each window has a title bar showing its name. The title bar color indicates focus:
@@ -145,7 +135,6 @@
<li><strong>Blue title bar</strong> - Focused window</li>
<li><strong>Gray title bar</strong> - Unfocused window</li>
</ul>
<h2 id="tutorial">Interactive Tutorial</h2>
<p>
DWN includes a built-in interactive tutorial that teaches you essential shortcuts
@@ -157,14 +146,11 @@
<li>Automatically advances when you complete each step</li>
<li>Covers all essential shortcuts from basic to advanced</li>
</ul>
<div class="card">
<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="windows">Managing Windows</h2>
<h3>Window Operations</h3>
<div class="table-wrapper">
<table>
@@ -202,20 +188,17 @@
</tbody>
</table>
</div>
<h3>Moving and Resizing</h3>
<p>In floating mode, you can move and resize windows with the mouse:</p>
<ul>
<li><strong>Move</strong> - Click and drag the title bar</li>
<li><strong>Resize</strong> - Drag any window edge or corner</li>
</ul>
<h2 id="workspaces">Using Workspaces</h2>
<p>
DWN provides 9 virtual workspaces to organize your windows. You can see which
workspaces are active in the top panel.
</p>
<h3>Workspace Navigation</h3>
<div class="table-wrapper">
<table>
@@ -245,7 +228,6 @@
</tbody>
</table>
</div>
<h3>Workspace Organization Tips</h3>
<ul>
<li><strong>Workspace 1</strong> - Main work (editor, terminal)</li>
@@ -253,13 +235,11 @@
<li><strong>Workspace 3</strong> - Communication (email, chat)</li>
<li><strong>Workspace 4-9</strong> - Project-specific contexts</li>
</ul>
<h2 id="layouts">Layout Modes</h2>
<p>
DWN supports three layout modes. Press <kbd>Super</kbd> + <kbd>Space</kbd> to cycle
through them.
</p>
<div class="features-grid" style="grid-template-columns: repeat(3, 1fr); gap: 1rem; margin: 1.5rem 0;">
<div class="card" style="padding: 1.5rem;">
<h4>Tiling</h4>
@@ -283,7 +263,6 @@
</p>
</div>
</div>
<h3>Tiling Layout Controls</h3>
<div class="table-wrapper">
<table>
@@ -313,9 +292,7 @@
</tbody>
</table>
</div>
<h2 id="panels">Panels & System Tray</h2>
<h3>Top Panel</h3>
<p>The top panel contains:</p>
<ul>
@@ -323,7 +300,6 @@
<li><strong>Taskbar</strong> - Shows windows on current workspace</li>
<li><strong>System tray</strong> - Battery, volume, WiFi (see below)</li>
</ul>
<h3>System Tray</h3>
<div class="table-wrapper">
<table>
@@ -357,7 +333,6 @@
</tbody>
</table>
</div>
<h3>Bottom Panel</h3>
<p>
The bottom panel shows the current time and a scrolling news ticker. Navigate
@@ -365,7 +340,6 @@
the current article with <kbd>Super</kbd> + <kbd>Return</kbd>. Both panels can
be hidden in the configuration if you prefer a minimal setup.
</p>
<h2>Next Steps</h2>
<p>Now that you know the basics, explore these topics:</p>
<ul>
@@ -375,7 +349,6 @@
</ul>
</main>
</div>
<footer>
<div class="container">
<div class="footer-grid">
@@ -419,7 +392,6 @@
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
-29
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<main>
<section class="hero" style="padding: 8rem 0 4rem;">
<div class="container hero-content">
@@ -47,8 +46,6 @@
</p>
</div>
</section>
<!-- Window Management -->
<section class="section">
<div class="container">
<h2>Window Management</h2>
@@ -56,7 +53,6 @@
DWN provides flexible window management that adapts to your workflow, whether you prefer
the precision of tiling or the freedom of floating windows.
</p>
<div class="features-grid">
<div class="card">
<h3><span class="card-icon">&#9783;</span> Tiling Layout</h3>
@@ -92,7 +88,6 @@
</ul>
</div>
</div>
<div class="alert alert-info" style="margin-top: 2rem;">
<strong class="alert-title">Pro Tip</strong>
<p style="margin: 0;">Switch layouts instantly with <kbd>Super</kbd> + <kbd>Space</kbd>.
@@ -100,8 +95,6 @@
</div>
</div>
</section>
<!-- Workspaces -->
<section class="section section-alt">
<div class="container">
<h2>Virtual Workspaces</h2>
@@ -109,7 +102,6 @@
Nine virtual desktops give you unlimited room to organize your work.
Each workspace maintains its own window state and layout preferences.
</p>
<div class="features-grid" style="grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));">
<div class="feature-card">
<div class="feature-icon">1-9</div>
@@ -135,8 +127,6 @@
</div>
</div>
</section>
<!-- Panel & System Tray -->
<section class="section">
<div class="container">
<h2>Panels & System Tray</h2>
@@ -144,7 +134,6 @@
Built-in panels provide essential information and quick access to common functions
without needing external tools or status bars.
</p>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 2rem;">
<div class="card">
<h3>Top Panel</h3>
@@ -165,7 +154,6 @@
</ul>
</div>
</div>
<h3 style="margin-top: 3rem; margin-bottom: 1.5rem;">News Ticker</h3>
<div class="card">
<p>The bottom panel includes a scrolling news ticker that displays headlines from a news feed.
@@ -180,7 +168,6 @@
at 80 pixels per second keeps you informed without distraction.
</p>
</div>
<h3 style="margin-top: 3rem; margin-bottom: 1.5rem;">System Tray Features</h3>
<div class="features-grid">
<div class="card">
@@ -213,8 +200,6 @@
</div>
</div>
</section>
<!-- Notifications -->
<section class="section section-alt">
<div class="container">
<h2>Notification System</h2>
@@ -222,7 +207,6 @@
Built-in D-Bus notification daemon following freedesktop.org standards.
No need for external notification tools like dunst or notify-osd.
</p>
<div class="features-grid" style="grid-template-columns: repeat(2, 1fr);">
<div class="card">
<h3>Standards Compliant</h3>
@@ -235,7 +219,6 @@
Notifications match your overall color scheme automatically.</p>
</div>
</div>
<div class="alert alert-success" style="margin-top: 2rem;">
<strong class="alert-title">Capacity</strong>
<p style="margin: 0;">DWN can display up to 32 notifications simultaneously,
@@ -243,8 +226,6 @@
</div>
</div>
</section>
<!-- AI Features Preview -->
<section class="section">
<div class="container">
<h2>AI Integration</h2>
@@ -252,7 +233,6 @@
Optional AI features powered by OpenRouter API and Exa semantic search.
Control your desktop with natural language and get intelligent assistance.
</p>
<div class="features-grid">
<div class="card">
<h3>&#129302; AI Command Palette</h3>
@@ -275,15 +255,12 @@
</div>
</div>
</section>
<!-- EWMH/ICCCM -->
<section class="section section-alt">
<div class="container">
<h2>Standards Compliance</h2>
<p style="color: var(--text-muted); max-width: 700px; margin-bottom: 2rem;">
DWN implements EWMH and ICCCM protocols for maximum compatibility with X11 applications.
</p>
<div class="features-grid" style="grid-template-columns: repeat(2, 1fr);">
<div class="card">
<h3>EWMH Support</h3>
@@ -310,8 +287,6 @@
</div>
</div>
</section>
<!-- Technical Specs -->
<section class="section">
<div class="container">
<h2>Technical Specifications</h2>
@@ -361,8 +336,6 @@
</div>
</div>
</section>
<!-- CTA -->
<section class="section section-alt">
<div class="container" style="text-align: center;">
<h2>Ready to Try DWN?</h2>
@@ -376,7 +349,6 @@
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -420,7 +392,6 @@
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
+1 -73
View File
@@ -38,9 +38,7 @@
</div>
</nav>
</header>
<main>
<!-- Hero Section -->
<section class="hero">
<div class="container hero-content">
<h1>Modern Window Management for X11</h1>
@@ -54,8 +52,6 @@
</div>
</div>
</section>
<!-- Key Features Overview -->
<section class="section">
<div class="container">
<h2 style="text-align: center; margin-bottom: 1rem;">Why Choose DWN?</h2>
@@ -103,8 +99,6 @@
</div>
</div>
</section>
<!-- Stats -->
<section class="section section-alt">
<div class="container">
<div class="stats">
@@ -127,8 +121,6 @@
</div>
</div>
</section>
<!-- Quick Start -->
<section class="section">
<div class="container">
<h2 style="text-align: center;">Get Up and Running in Minutes</h2>
@@ -136,7 +128,6 @@
DWN is designed for easy installation and immediate productivity.
Build from source or use your distribution's package manager.
</p>
<div class="card" style="max-width: 700px; margin: 0 auto;">
<div class="code-header">
<span>Terminal</span>
@@ -145,25 +136,19 @@
<pre><code># Clone the repository
git clone https://retoor.molodetz.nl/retoor/dwn.git
cd dwn
# Install dependencies (auto-detects your distro)
make deps
# Build and install
make
sudo make install
# Add to your .xinitrc
echo "exec dwn" >> ~/.xinitrc</code></pre>
</div>
<p style="text-align: center; margin-top: 2rem;">
<a href="installation.html" class="btn btn-primary">Full Installation Guide</a>
</p>
</div>
</section>
<!-- Screenshots Preview -->
<section class="section section-alt">
<div class="container">
<h2 style="text-align: center;">See DWN in Action</h2>
@@ -192,8 +177,6 @@ echo "exec dwn" >> ~/.xinitrc</code></pre>
</div>
</div>
</section>
<!-- Comparison -->
<section class="section">
<div class="container">
<h2 style="text-align: center;">How DWN Compares</h2>
@@ -239,62 +222,9 @@ echo "exec dwn" >> ~/.xinitrc</code></pre>
</div>
</div>
</section>
<!-- Testimonials -->
<section class="section section-alt">
<div class="container">
<h2 style="text-align: center;">What Users Say</h2>
<div class="testimonials">
<div class="testimonial">
<p class="testimonial-text">
"Finally, a window manager that doesn't make me choose between
productivity and usability. DWN just works."
</p>
<div class="testimonial-author">
<div class="testimonial-avatar">JD</div>
<div class="testimonial-info">
<strong>John Developer</strong>
<span>Senior Software Engineer</span>
</div>
</div>
</div>
<div class="testimonial">
<p class="testimonial-text">
"The AI command palette changed how I interact with my desktop.
It's like having an assistant for window management."
</p>
<div class="testimonial-author">
<div class="testimonial-avatar">SA</div>
<div class="testimonial-info">
<strong>Sarah Admin</strong>
<span>System Administrator</span>
</div>
</div>
</div>
<div class="testimonial">
<p class="testimonial-text">
"Coming from i3, the learning curve was minimal. The built-in
tutorial had me productive in under 10 minutes."
</p>
<div class="testimonial-author">
<div class="testimonial-avatar">ML</div>
<div class="testimonial-info">
<strong>Mike Linux</strong>
<span>DevOps Engineer</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="section">
<div class="container" style="text-align: center;">
<h2>Ready to Transform Your Desktop?</h2>
<p style="color: var(--text-muted); max-width: 500px; margin: 0 auto 2rem;">
Join thousands of developers and power users who have made DWN their window manager of choice.
</p>
<h2>Ready to Try DWN?</h2>
<div class="hero-buttons" style="justify-content: center;">
<a href="installation.html" class="btn btn-primary btn-lg">Install DWN</a>
<a href="documentation.html" class="btn btn-secondary btn-lg">Read the Docs</a>
@@ -302,7 +232,6 @@ echo "exec dwn" >> ~/.xinitrc</code></pre>
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -346,7 +275,6 @@ echo "exec dwn" >> ~/.xinitrc</code></pre>
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
-51
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<main>
<section class="hero" style="padding: 8rem 0 4rem;">
<div class="container hero-content">
@@ -47,15 +46,12 @@
</p>
</div>
</section>
<!-- Requirements -->
<section class="section">
<div class="container">
<h2>Requirements</h2>
<p style="color: var(--text-muted); margin-bottom: 2rem;">
DWN requires X11 and a few common libraries. Most Linux distributions include these by default.
</p>
<div class="card">
<h3>Required Dependencies</h3>
<div class="table-wrapper" style="margin-top: 1rem;">
@@ -114,15 +110,12 @@
</div>
</div>
</section>
<!-- Quick Install -->
<section class="section section-alt">
<div class="container">
<h2>Quick Installation</h2>
<p style="color: var(--text-muted); margin-bottom: 2rem;">
The fastest way to get started. Our build system auto-detects your distribution.
</p>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
@@ -137,7 +130,6 @@
cd dwn</code></pre>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-content">
@@ -153,7 +145,6 @@ cd dwn</code></pre>
</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-content">
@@ -166,7 +157,6 @@ cd dwn</code></pre>
<pre><code>make</code></pre>
</div>
</div>
<div class="step">
<div class="step-number">4</div>
<div class="step-content">
@@ -182,7 +172,6 @@ cd dwn</code></pre>
</p>
</div>
</div>
<div class="step">
<div class="step-number">5</div>
<div class="step-content">
@@ -198,19 +187,15 @@ cd dwn</code></pre>
</div>
</div>
</section>
<!-- Distribution-specific -->
<section class="section">
<div class="container">
<h2>Distribution-Specific Instructions</h2>
<div class="tabs">
<button class="tab active" onclick="showTab('debian')">Debian/Ubuntu</button>
<button class="tab" onclick="showTab('fedora')">Fedora</button>
<button class="tab" onclick="showTab('arch')">Arch Linux</button>
<button class="tab" onclick="showTab('void')">Void Linux</button>
</div>
<div id="debian" class="tab-content active">
<h3>Debian / Ubuntu / Linux Mint</h3>
<div class="code-header">
@@ -230,14 +215,12 @@ sudo apt install -y \
libdbus-1-dev \
libcurl4-openssl-dev \
pkg-config
# Build and install
git clone https://retoor.molodetz.nl/retoor/dwn.git
cd dwn
make
sudo make install</code></pre>
</div>
<div id="fedora" class="tab-content">
<h3>Fedora / RHEL / CentOS</h3>
<div class="code-header">
@@ -257,14 +240,12 @@ sudo dnf install -y \
dbus-devel \
libcurl-devel \
pkg-config
# Build and install
git clone https://retoor.molodetz.nl/retoor/dwn.git
cd dwn
make
sudo make install</code></pre>
</div>
<div id="arch" class="tab-content">
<h3>Arch Linux / Manjaro</h3>
<div class="code-header">
@@ -283,7 +264,6 @@ sudo pacman -S --needed \
dbus \
curl \
pkg-config
# Build and install
git clone https://retoor.molodetz.nl/retoor/dwn.git
cd dwn
@@ -295,7 +275,6 @@ sudo make install</code></pre>
<code>yay -S dwn-git</code></p>
</div>
</div>
<div id="void" class="tab-content">
<h3>Void Linux</h3>
<div class="code-header">
@@ -314,7 +293,6 @@ sudo xbps-install -S \
dbus-devel \
libcurl-devel \
pkg-config
# Build and install
git clone https://retoor.molodetz.nl/retoor/dwn.git
cd dwn
@@ -323,15 +301,12 @@ sudo make install</code></pre>
</div>
</div>
</section>
<!-- Session Setup -->
<section class="section section-alt">
<div class="container">
<h2>Session Setup</h2>
<p style="color: var(--text-muted); margin-bottom: 2rem;">
Configure your display manager or xinit to start DWN.
</p>
<div class="features-grid" style="grid-template-columns: repeat(2, 1fr);">
<div class="card">
<h3>Using xinit / startx</h3>
@@ -342,10 +317,8 @@ sudo make install</code></pre>
</div>
<pre><code># Optional: set display settings
xrandr --output DP-1 --mode 2560x1440
# Optional: set wallpaper
feh --bg-fill ~/wallpaper.jpg
# Start DWN
exec dwn</code></pre>
<p style="margin-top: 1rem; font-size: 0.875rem; color: var(--text-muted);">
@@ -372,15 +345,12 @@ DesktopNames=DWN</code></pre>
</div>
</div>
</section>
<!-- Testing -->
<section class="section">
<div class="container">
<h2>Testing in a Nested X Server</h2>
<p style="color: var(--text-muted); margin-bottom: 2rem;">
Test DWN without leaving your current session using Xephyr.
</p>
<div class="card">
<h3>Using make run</h3>
<p>The easiest way to test DWN safely:</p>
@@ -392,14 +362,12 @@ DesktopNames=DWN</code></pre>
# Debian/Ubuntu: sudo apt install xserver-xephyr
# Fedora: sudo dnf install xorg-x11-server-Xephyr
# Arch: sudo pacman -S xorg-server-xephyr
# Run DWN in a nested window
make run</code></pre>
<p style="margin-top: 1rem; color: var(--text-muted);">
This opens a 1280x720 window running DWN. Perfect for experimenting with configuration changes.
</p>
</div>
<div class="card" style="margin-top: 1.5rem;">
<h3>Manual Xephyr Setup</h3>
<p>For more control over the test environment:</p>
@@ -409,21 +377,16 @@ make run</code></pre>
</div>
<pre><code># Start Xephyr on display :1
Xephyr :1 -screen 1920x1080 &
# Run DWN on that display
DISPLAY=:1 ./dwn
# Open a terminal in the test environment
DISPLAY=:1 xterm &</code></pre>
</div>
</div>
</section>
<!-- Post-install -->
<section class="section section-alt">
<div class="container">
<h2>Post-Installation</h2>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
@@ -437,7 +400,6 @@ DISPLAY=:1 xterm &</code></pre>
<pre><code>mkdir -p ~/.config/dwn</code></pre>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-content">
@@ -446,7 +408,6 @@ DISPLAY=:1 xterm &</code></pre>
that will teach you all the essential shortcuts.</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-content">
@@ -454,7 +415,6 @@ DISPLAY=:1 xterm &</code></pre>
<p>Press <kbd>Super</kbd> + <kbd>S</kbd> to see a complete list of keyboard shortcuts.</p>
</div>
</div>
<div class="step">
<div class="step-number">4</div>
<div class="step-content">
@@ -465,12 +425,9 @@ DISPLAY=:1 xterm &</code></pre>
</div>
</div>
</section>
<!-- Troubleshooting -->
<section class="section">
<div class="container">
<h2>Troubleshooting</h2>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
DWN doesn't start - "cannot open display"
@@ -486,7 +443,6 @@ DISPLAY=:1 xterm &</code></pre>
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
Build fails - "pkg-config: command not found"
@@ -500,7 +456,6 @@ sudo pacman -S pkg-config # Arch</code></pre>
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
Missing header files during build
@@ -513,7 +468,6 @@ sudo pacman -S pkg-config # Arch</code></pre>
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
Keyboard shortcuts don't work
@@ -529,7 +483,6 @@ sudo pacman -S pkg-config # Arch</code></pre>
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question" onclick="toggleFaq(this)">
Fonts look bad or missing
@@ -545,8 +498,6 @@ sudo dnf install dejavu-fonts-all liberation-fonts # Fedora</code></pre>
</div>
</div>
</section>
<!-- CTA -->
<section class="section section-alt">
<div class="container" style="text-align: center;">
<h2>Installation Complete?</h2>
@@ -560,7 +511,6 @@ sudo dnf install dejavu-fonts-all liberation-fonts # Fedora</code></pre>
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -604,7 +554,6 @@ sudo dnf install dejavu-fonts-all liberation-fonts # Fedora</code></pre>
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>
-21
View File
@@ -37,7 +37,6 @@
</div>
</nav>
</header>
<main>
<section class="hero" style="padding: 8rem 0 4rem;">
<div class="container hero-content">
@@ -48,14 +47,11 @@
</p>
</div>
</section>
<section class="section">
<div class="container">
<div class="search-box">
<input type="text" id="shortcut-search" placeholder="Search shortcuts..." onkeyup="filterShortcuts()">
</div>
<!-- Application Launchers -->
<h2 id="launchers">Application Launchers</h2>
<div class="table-wrapper">
<table class="shortcuts-table">
@@ -89,8 +85,6 @@
</tbody>
</table>
</div>
<!-- Window Management -->
<h2 id="windows">Window Management</h2>
<div class="table-wrapper">
<table class="shortcuts-table">
@@ -128,8 +122,6 @@
</tbody>
</table>
</div>
<!-- Workspace Navigation -->
<h2 id="workspaces">Workspace Navigation</h2>
<div class="table-wrapper">
<table class="shortcuts-table">
@@ -223,8 +215,6 @@
</tbody>
</table>
</div>
<!-- Layout Control -->
<h2 id="layouts">Layout Control</h2>
<div class="table-wrapper">
<table class="shortcuts-table">
@@ -258,8 +248,6 @@
</tbody>
</table>
</div>
<!-- AI Features -->
<h2 id="ai">AI Features</h2>
<p style="color: var(--text-muted); margin-bottom: 1rem;">
These shortcuts require API keys to be configured. See <a href="ai-features.html">AI Features</a> for setup.
@@ -288,8 +276,6 @@
</tbody>
</table>
</div>
<!-- News Ticker -->
<h2 id="news">News Ticker</h2>
<p style="color: var(--text-muted); margin-bottom: 1rem;">
Navigate the scrolling news ticker displayed in the bottom panel.
@@ -318,8 +304,6 @@
</tbody>
</table>
</div>
<!-- Help & System -->
<h2 id="system">Help & System</h2>
<div class="table-wrapper">
<table class="shortcuts-table">
@@ -345,12 +329,9 @@
</tbody>
</table>
</div>
<!-- Printable Reference -->
<div class="card" style="margin-top: 3rem;">
<h3>Printable Quick Reference</h3>
<p>Essential shortcuts to memorize when starting with DWN:</p>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; margin-top: 1.5rem;">
<div>
<h4 style="color: var(--primary); margin-bottom: 0.75rem;">Must Know</h4>
@@ -397,7 +378,6 @@
</div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
@@ -441,7 +421,6 @@
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>