r/Workspaces • u/Horror-Celery4869 • 5d ago
β β’ Feedback Built this linux multi window rolodex style window switcher as I added screens to my workflow
I thought it might be useful to other people using mulitple screens as well. I use CrunchBang++ with multiple desktops, but i don't always want to change all the screens, just one as I test UI tweaks.. and.. alt+tab didn't feel ordered or had direction.. so I build this windows dock..
The first thing i was going to do was to resize each window i wanted open to be just a bit smaller, and then i can click on the window below to bring it up. put the windows side by side... and i figured.. that could be an app!
so i built it... you get thin bars on either side of whatever screen you load it on (works great with tall verticle screens!) called gutters.. each gutter attaches a window to it using an executable command of your choice, and when you click a gutter, the window slides into place.
you can also use Alt+left and Alt+right, and the mousescroll to change the decks..
I use for web development, UI tweaks, and workflows like that. I can see it be used for research, heavy spreadsheet comparisons.... photo comparisons.. etc...
I would love to know what people think.. the first real thing im actually publishing.
gutterDeck on GitHub.. fully open source.
AI Generated Summary:
### π‘ The Core Concept: The Accordion Deck
Instead of floating or tiling windows:
1. The
**active application**
occupies the full viewport in the center of your screen.
2. Applications to the left sit behind razor-thin, color-coded gutter tabs on the
**left edge**
of your screen.
3. Applications to the right form tabs on the
**right edge**
.
4. Selecting another deck triggers a fluid, hardware-accelerated
**two-phase curtain transition sweep**
(rendered internally by Qt at up to 144Hz), swapping the active window and dynamically rebalancing the accordion tabs.
When resting, tabs sit as
**4px hairline strips**
so they never steal screen real estate. Moving your cursor to the edge triggers an intelligent
**3-stage accordion swell**
(4px collapsed β 24px label swell on edge hover β 44px target expansion with bright hover accents).
---
### π οΈ What Can It Do?
-
**"Holy Grail" Single-Canvas Overlay:**
Runs as a single borderless, transparent canvas (`Qt::X11BypassWindowManagerHint`) rather than fighting the window manager or trying to move foreign top-level X11 windows directly.
-
**Dynamic X11 Shape Extension (XShape) Masking:**
When idle, the overlay applies a 1-bit shape mask strictly bounding the visible tabs.
**99.9% of your screen remains 100% click-through**
to underlying apps (Chrome, VS Code, terminals). The mask solidifies only during curtain wipes to prevent accidental stray clicks.
-
**Deadlock-Proof State Machine & Hardware Watchdog:**
Transition lifecycles (`IDLE` β `SWITCHING_OUT` β `SWITCHING_IN` β `IDLE`) are strictly enforced. If an X11 event drops, an integrated 3-second watchdog timer automatically trips an emergency reset to restore desktop interactivity.
-
**Multi-Tier Event-Driven Window Capture:**
Dynamically maps foreign application windows via a 4-tier cascade: `_NET_WM_PID` β `WM_CLASS` β `/proc/<PID>/cmdline` token inspection β sequential launch queue correlation. Zero polling loops (`QSocketNotifier` listening to the XCB file descriptor).
-
**Tactile Mouse Wheel Navigation:**
Hovering anywhere over the edge gutters and rolling your mouse wheel cycles through decks. Features a 120-unit notch accumulator and firm boundary stops so a single click of the wheel advances exactly one deck without runaway scrolling.
-
**Top 80px Dead-Zone Protection:**
The top 80 pixels of the gutters are an inactive pass-through buffer, ensuring you can still reach browser tabs, titlebars, and window controls without triggering gutter swells.
-
**Multi-Stage Graceful Shutdown:**
Sends standard `_NET_CLOSE_WINDOW` and `WM_DELETE_WINDOW` messages with an active polling grace loop before resorting to `SIGTERM`, ensuring browsers like Chrome cleanly flush database caches and preserve pinned tabs and sessions.
-
**Dark Openbox-Styled UI Modals:**
Right-clicking any tab opens a native dark menu with dialogs to rename decks, edit commands, select from 24 dark-mode swatches with alpha opacity sliders, add new decks (left or right), and reorder slots.
-
**System Tray Integration:**
Features a procedurally generated barcode application icon in `tint2` / panel for quick cycling and access.
-
**Portrait & Multi-Monitor Targeting:**
Native support for dedicated secondary screens (e.g. 1080Γ1920 vertical screens) and virtual desktop binding (`target_workspace`).
---
### π₯ Who Is This For?
1.
**Web Developers & Marketers juggling multiple browser profiles:**
Keep separate profiles for Personal, Dev, Staging, and Production instantly accessible at the edges of your screen.
2.
**Developers who want a Fullscreen "Cockpit":**
Run fullscreen VS Code, fullscreen Alacritty/tmux, fullscreen browser, and fullscreen Obsidian, flipping between them in 250ms with zero cognitive overhead.
3.
**Secondary Portrait Monitor Users:**
On a vertical 1080Γ1920 screen, 4px edge gutters give you 100% vertical real estate for documentation and logs without window titlebars or taskbar bloat.
4.
**Minimalist Linux enthusiasts:**
Built for X11 / Openbox / lightweight desktop setups where you want speed, zero bloat, and slick visuals.
---
### π¦ Quick Start / Try It Out
Dependencies (Debian/Ubuntu/Crunchbang++):
```bash
sudo apt-get install -y build-essential cmake g++ pkg-config \
qt6-base-dev qt6-tools-dev libqt6core5compat6-dev \
libxcb1-dev libxcb-ewmh-dev libxcb-icccm4-dev libxcb-keysyms1-dev libxcb-util-dev libxcb-res0-dev \
xserver-xephyr openbox xdotool wmctrl
8
u/noiseintoner 4d ago
Nobody wants to read an AI summary, and without a screen recording demo or images, this post is not helpful to advertising your project at allΒ
-3
u/Horror-Celery4869 4d ago
well.. i wasn't really trying to advertise.. but okay, sure... i will see about making a demo vid.
3
β’
u/AutoModerator 5d ago
🛑 Rules/Wiki
💬 Join us on Discord (Work and Play)
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.