Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ Formerly: `wallpaper-theme-sync`.

Inspired by Linux theming tools like `pywal`, `wallust`, `wpgtk`, and `Stylix` (NixOS), this project brings similar desktop ricing automation to macOS.

Website: https://paul-cch.github.io/WalBridge/

See [CHANGELOG.md](CHANGELOG.md) for release notes.
See [CONTRIBUTING.md](CONTRIBUTING.md), [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md), and [SECURITY.md](SECURITY.md) for project policies.

Expand Down
1 change: 1 addition & 0 deletions docs/.nojekyll
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

71 changes: 71 additions & 0 deletions docs/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>WalBridge | macOS Wallpaper Theme Bridge</title>
<meta name="description" content="WalBridge syncs your macOS apps to your wallpaper colors with animated transitions and Linux-inspired theming workflows.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<header class="hero">
<nav class="nav">
<a class="brand" href="./">WalBridge</a>
<a class="nav-link" href="https://github.com/paul-cch/WalBridge" target="_blank" rel="noreferrer">GitHub</a>
</nav>
Comment on lines +16 to +18

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Links opened with target="_blank" should include rel="noopener noreferrer" to prevent tabnabbing via window.opener ("noreferrer" alone is not consistently enforced across all environments). Update the rel attribute accordingly for this link.

Copilot uses AI. Check for mistakes.
<div class="hero-grid">
<section>
<p class="kicker">Linux-inspired theming for macOS</p>
<h1>Bridge your wallpaper to your entire desktop stack.</h1>
<p class="lead">
WalBridge automatically syncs color themes across 14 apps from your current wallpaper, with vivid active borders, muted inactive borders, and smooth animated transitions.
</p>
<div class="cta-row">
<a class="btn btn-primary" href="https://github.com/paul-cch/WalBridge/releases/latest" target="_blank" rel="noreferrer">Get Latest Release</a>
<a class="btn btn-ghost" href="https://github.com/paul-cch/WalBridge" target="_blank" rel="noreferrer">View Source</a>
</div>
Comment on lines +27 to +29

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Links opened with target="_blank" should include rel="noopener noreferrer" to prevent tabnabbing via window.opener. Update rel for these outbound links.

Copilot uses AI. Check for mistakes.
</section>
<aside class="card terminal">
<p class="terminal-title">Quick Install</p>
<pre><code>git clone https://github.com/paul-cch/WalBridge.git
cd WalBridge
bash install.sh
# optional setup for tmux/btop/iTerm2
bash install.sh --setup-targets</code></pre>
</aside>
</div>
</header>

<main class="content">
<section class="panel">
<h2>Supported Targets</h2>
<div class="chips">
<span>SketchyBar</span><span>JankyBorders</span><span>Kitty</span><span>WezTerm</span><span>Alacritty</span><span>Ghostty</span><span>iTerm2</span><span>tmux</span><span>btop</span><span>Neovim</span><span>Yazi</span><span>Starship</span><span>OpenCode</span><span>HydroToDo</span>

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All supported-target chips are inlined on a single long line, which makes future edits and diffs harder to review. Consider formatting each on its own line (or generating the list) to improve maintainability.

Suggested change
<span>SketchyBar</span><span>JankyBorders</span><span>Kitty</span><span>WezTerm</span><span>Alacritty</span><span>Ghostty</span><span>iTerm2</span><span>tmux</span><span>btop</span><span>Neovim</span><span>Yazi</span><span>Starship</span><span>OpenCode</span><span>HydroToDo</span>
<span>SketchyBar</span>
<span>JankyBorders</span>
<span>Kitty</span>
<span>WezTerm</span>
<span>Alacritty</span>
<span>Ghostty</span>
<span>iTerm2</span>
<span>tmux</span>
<span>btop</span>
<span>Neovim</span>
<span>Yazi</span>
<span>Starship</span>
<span>OpenCode</span>
<span>HydroToDo</span>

Copilot uses AI. Check for mistakes.
</div>
</section>

<section class="panel">
<h2>How It Works</h2>
<ol>
<li>Capture current wallpaper per display (with fallback for dynamic wallpapers).</li>
<li>Extract dominant palette and generate a coherent scheme.</li>
<li>Write target configs atomically, reload supported apps, and skip unchanged wallpapers via perceptual hash.</li>
</ol>
</section>

<section class="panel">
<h2>Release Demo</h2>
<p>See animated transitions and multi-target sync in action.</p>
<a class="btn btn-primary" href="https://github.com/paul-cch/WalBridge/releases/download/v1.0.0/walbridge-demo.gif" target="_blank" rel="noreferrer">Open Demo GIF</a>
</section>
Comment on lines +61 to +63

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This link uses target="_blank" but is missing rel="noopener noreferrer", which can allow tabnabbing via window.opener. Add noopener (and keep noreferrer if desired).

Copilot uses AI. Check for mistakes.
</main>

<footer class="footer">
<p>Inspired by pywal, wallust, wpgtk, and Stylix.</p>
<p><a href="https://github.com/paul-cch/WalBridge/blob/main/LICENSE" target="_blank" rel="noreferrer">MIT License</a></p>
</footer>
Comment on lines +67 to +69

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This external link opens in a new tab (target="_blank") but lacks rel="noopener noreferrer", which is recommended to prevent tabnabbing via window.opener.

Copilot uses AI. Check for mistakes.
</body>
</html>
199 changes: 199 additions & 0 deletions docs/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
:root {
--bg: #0f1724;
--bg-soft: #162237;
--panel: #1d2c45;
--text: #f2f6fc;
--muted: #b4c4d8;
--accent: #f08c5a;
--accent-2: #5fb7b0;
--line: #304666;
}

* {
box-sizing: border-box;
}

body {
margin: 0;
font-family: "Space Grotesk", sans-serif;
color: var(--text);
background:
radial-gradient(circle at 80% -20%, #2f4c7a 0%, transparent 45%),
radial-gradient(circle at -10% 30%, #3d2f53 0%, transparent 35%),
linear-gradient(165deg, var(--bg) 0%, #101f33 55%, #121d2d 100%);
min-height: 100vh;
}

.nav,
.hero-grid,
.content,
.footer {
width: min(1120px, calc(100% - 2rem));
margin: 0 auto;
}

.nav {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.25rem 0;
}

.brand {
color: var(--text);
text-decoration: none;
font-weight: 700;
font-size: 1.2rem;
letter-spacing: 0.02em;
}

.nav-link {
color: var(--muted);
text-decoration: none;
font-weight: 500;
}

.hero {
padding-bottom: 1.75rem;
}

.hero-grid {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 1.25rem;
align-items: stretch;
}

.kicker {
margin: 0 0 0.5rem;
color: var(--accent-2);
font-weight: 500;
}

h1 {
margin: 0;
line-height: 1.1;
font-size: clamp(2rem, 4vw, 3.2rem);
}

.lead {
color: var(--muted);
line-height: 1.6;
margin: 1rem 0 1.25rem;
max-width: 58ch;
}

.cta-row {
display: flex;
gap: 0.75rem;
flex-wrap: wrap;
}

.btn {
display: inline-block;
padding: 0.72rem 1rem;
border-radius: 0.7rem;
text-decoration: none;
font-weight: 600;
transition: transform 120ms ease, filter 120ms ease;
}

.btn:hover {
transform: translateY(-1px);
Comment on lines +98 to +102

Copilot AI Feb 26, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The button hover animation uses transform/transition; consider respecting user motion preferences by disabling or reducing these effects under @media (prefers-reduced-motion: reduce). This improves accessibility for users sensitive to motion.

Copilot uses AI. Check for mistakes.
filter: brightness(1.08);
}

.btn-primary {
background: linear-gradient(135deg, var(--accent), #ffb347);
color: #231209;
}

.btn-ghost {
border: 1px solid var(--line);
color: var(--text);
background: rgba(255, 255, 255, 0.04);
}

.card {
background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03));
border: 1px solid var(--line);
border-radius: 0.95rem;
}

.terminal {
padding: 0.95rem;
}

.terminal-title {
margin: 0 0 0.6rem;
color: var(--accent);
font-weight: 600;
}

pre {
margin: 0;
overflow-x: auto;
font-family: "IBM Plex Mono", monospace;
font-size: 0.9rem;
line-height: 1.6;
color: #dce5f0;
}

.content {
display: grid;
gap: 1rem;
padding: 1rem 0 2rem;
}

.panel {
padding: 1rem;
border: 1px solid var(--line);
border-radius: 0.95rem;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02));
}

h2 {
margin: 0 0 0.75rem;
}

.chips {
display: flex;
flex-wrap: wrap;
gap: 0.55rem;
}

.chips span {
display: inline-block;
padding: 0.38rem 0.62rem;
border-radius: 999px;
border: 1px solid var(--line);
color: var(--muted);
font-size: 0.9rem;
}

ol {
margin: 0;
padding-left: 1.2rem;
color: var(--muted);
line-height: 1.6;
}

.footer {
display: flex;
justify-content: space-between;
gap: 0.75rem;
flex-wrap: wrap;
color: var(--muted);
border-top: 1px solid var(--line);
padding: 1rem 0 2rem;
}

.footer a {
color: var(--text);
}

@media (max-width: 900px) {
.hero-grid {
grid-template-columns: 1fr;
}
}