aboutsummaryrefslogtreecommitdiffstats
path: root/config/quickshell/overview-trixie/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'config/quickshell/overview-trixie/README.md')
-rw-r--r--config/quickshell/overview-trixie/README.md702
1 files changed, 702 insertions, 0 deletions
diff --git a/config/quickshell/overview-trixie/README.md b/config/quickshell/overview-trixie/README.md
new file mode 100644
index 00000000..64dd8b68
--- /dev/null
+++ b/config/quickshell/overview-trixie/README.md
@@ -0,0 +1,702 @@
+# Quickshell Overview for Hyprland
+
+<div align="center">
+
+A standalone workspace overview module for Hyprland using Quickshell - shows all workspaces with live window previews, drag-and-drop support, and Super+Tab keybind.
+
+![Quickshell](https://img.shields.io/badge/Quickshell-0.2.0-blue?style=flat-square)
+![Hyprland](https://img.shields.io/badge/Hyprland-Compatible-purple?style=flat-square)
+![Qt6](https://img.shields.io/badge/Qt-6-green?style=flat-square)
+![License](https://img.shields.io/badge/License-GPL-orange?style=flat-square)
+
+
+</div>
+
+---
+
+## 📸 Preview
+
+![Overview Screenshot](assets/image.png)
+
+https://github.com/user-attachments/assets/e8f392d7-d831-4dec-9cd3-fb93d1ccc21c
+
+> *Workspace overview showing live window previews with drag-and-drop support*
+
+---
+
+## ✨ Features
+
+- 🖼️ Visual workspace overview showing all workspaces and windows
+- 🖥️ Multi-monitor support with proper scaling and vertical/rotated monitors [in experimental branch]
+- 📐 Smart row hiding - optionally hide empty workspace rows
+- 🎯 Click windows to focus them
+- 🖱️ Middle-click windows to close them
+- 🔄 Drag and drop windows between workspaces
+- ⌨️ Keyboard navigation (Arrow keys, vim keys, number shortcuts)
+- 🖱️ Auto-close on focus loss / outside click
+- 💡 Hover tooltips showing window information
+- 🎨 Material Design 3 theming
+- ⚡ Smooth animations and transitions
+
+## 📦 Installation
+
+### Arch Linux (AUR)
+
+For Arch Linux users, you can install directly from the AUR:
+
+```bash
+# Using yay
+yay -S quickshell-overview-git
+
+# Using paru
+paru -S quickshell-overview-git
+```
+
+On AUR installs, module files are package-managed under:
+
+```text
+/etc/xdg/quickshell/overview/
+```
+
+Put your custom settings in:
+
+```text
+~/.config/quickshell/overview/config.json
+```
+
+Then add the keybind and auto-start to your Hyprland config (see Setup steps 2-4 below).
+
+### Prerequisites
+
+- **Hyprland** compositor
+- **Quickshell** ([installation guide](https://quickshell.org/docs/v0.1.0/guide/install-setup/))
+- **Qt 6** with modules: QtQuick, QtQuick.Controls
+
+### Setup
+
+1. **Install module files** (choose one):
+ - **Git clone (manual install):**
+ ```bash
+ git clone https://github.com/Shanu-Kumawat/quickshell-overview ~/.config/quickshell/overview
+ ```
+ - **AUR package:** use the command above (`yay -S quickshell-overview-git` or `paru -S ...`)
+
+2. **Add keybind** to your Hyprland config:
+
+ *For Hyprland 0.55+ (`~/.config/hypr/hyprland.lua`):*
+ ```lua
+ hl.bind("SUPER + TAB", hl.dsp.exec_cmd("qs ipc -c overview call overview toggle"))
+ ```
+ *For Hyprland 0.54 and older (`~/.config/hypr/hyprland.conf`):*
+ ```conf
+ bind = Super, TAB, exec, qs ipc -c overview call overview toggle
+ ```
+
+4. **Auto-start** the overview (add to Hyprland config):
+
+ *For Hyprland 0.55+ (`~/.config/hypr/hyprland.lua`):*
+ ```lua
+ hl.on("hyprland.start", function ()
+ hl.exec_cmd("qs -c overview")
+ end)
+ ```
+ *For Hyprland 0.54 and older (`~/.config/hypr/hyprland.conf`):*
+ ```conf
+ exec-once = qs -c overview
+ ```
+
+6. **Reload Hyprland**:
+ ```bash
+ hyprctl reload
+ ```
+
+### Manual Start (if needed)
+
+```bash
+qs -c overview &
+```
+
+### NixOS
+
+For NixOS users, ensure Quickshell has access to required Qt6 modules:
+
+```nix
+# In your configuration.nix or home-manager config
+environment.systemPackages = with pkgs; [
+ quickshell
+ qt6.qtwayland
+];
+```
+
+If you're using home-manager:
+
+```nix
+home.packages = with pkgs; [
+ quickshell
+ qt6.qtwayland
+];
+```
+
+## 🎮 Usage
+
+| Action | Description |
+|--------|-------------|
+| **Super + Tab** | Toggle the overview |
+| **Arrow Keys / h/l** | Navigate left/right within current row* |
+| **Up/Down / j/k** | Navigate between workspace rows |
+| **1-9, 0** | Jump to Nth workspace in current group (0 = 10th) |
+| **Mouse wheel on grid** | Move across all normal workspaces, wrapping from last to first |
+| **Escape / Enter** | Close the overview |
+| **Click outside overview** | Close the overview when `overview.closeOnFocusLoss` is enabled (default) |
+| **Click workspace** | Switch to that workspace |
+| **Click window** | Focus that window |
+| **Middle-click window** | Close that window |
+| **Drag window** | Move window to different workspace |
+
+> *When `hideEmptyRows` is enabled, left/right navigation wraps within the current visible row for better UX
+
+---
+
+## ⚙️ Configuration
+
+> **⚠️ Want to change size, position, workspace count, or toggles?**
+> Create/edit `~/.config/quickshell/overview/config.json`.
+
+`Config.qml` inside the module is now treated as defaults. User overrides are read from:
+
+- `$XDG_CONFIG_HOME/quickshell/overview/config.json`
+- fallback: `~/.config/quickshell/overview/config.json`
+
+> **Note:** After editing `config.json`, manually restart overview for changes to apply:
+> `qs ipc -c overview call overview close && qs -c overview`
+
+### Quick Start
+
+```bash
+mkdir -p ~/.config/quickshell/overview
+cp /etc/xdg/quickshell/overview/config.example.json ~/.config/quickshell/overview/config.json
+```
+
+If you installed from git clone instead of AUR, copy from your repo path:
+
+```bash
+cp ~/.config/quickshell/overview/config.example.json ~/.config/quickshell/overview/config.json
+```
+
+### Workspace Grid
+
+Edit `~/.config/quickshell/overview/config.json`:
+
+```json
+{
+ "overview": {
+ "rows": 2,
+ "columns": 5,
+ "scale": 0.16,
+ "enable": true,
+ "hideEmptyRows": true,
+ "closeOnFocusLoss": true,
+ "useWorkspaceMap": false,
+ "workspaceMap": [0, 10],
+ "orderRightLeft": false,
+ "orderBottomUp": false,
+ "previewsEnabled": true,
+ "previewMode": "live",
+ "includeInactiveMonitorPreviews": true,
+ "previewRecaptureDelayMs": 60,
+ "showSpecialWorkspaces": true,
+ "specialWorkspaces": [],
+ "specialWorkspaceColumns": 5,
+ "emptyWorkspaceWallpaper": "",
+ "specialEmptyWorkspaceWallpaper": "",
+ "effects": {
+ "enableBackdrop": false,
+ "backdropOpacity": 0.28,
+ "panelOpacity": 0.92,
+ "workspaceOpacity": 0.86,
+ "emptyWorkspaceWallpaperOverlayOpacity": 0.18,
+ "windowOverlayOpacity": 0.22,
+ "enableBlur": false,
+ "glassMode": false,
+ "glassTintStrength": 0.35,
+ "glassBorderOpacity": 0.72,
+ "glassShineOpacity": 0.14
+ },
+ "workspaceSpacing": 5,
+ "backgroundPadding": 10,
+ "workspaceNumberBaseSize": 250
+ }
+}
+```
+
+**Common adjustments:**
+- **Too small?** Increase `scale` (try 0.20 or 0.25)
+- **Too big?** Decrease `scale` (try 0.12 or 0.14)
+- **More workspaces?** Change `rows` and `columns` (e.g., 3 rows × 4 columns = 12 workspaces)
+- **Reverse order?** Set `orderRightLeft` and/or `orderBottomUp` to `true`
+- **Prefer the overview to stay open after outside clicks/focus changes?** Set `closeOnFocusLoss` to `false`
+- **Per-monitor workspace groups?** Enable `useWorkspaceMap` and set `workspaceMap` (e.g. `[0,10]`)
+- **Show special workspaces below grid?** Keep `showSpecialWorkspaces: true` and optionally prefill `specialWorkspaces`
+- **Lower memory use?** Set `previewMode` to `event` and `includeInactiveMonitorPreviews` to `false`
+- **Transparency / blur?** Tune `overview.effects.*` (details below)
+
+**Hide empty workspace rows:**
+- Set `hideEmptyRows: true` to automatically hide rows that have no windows
+- Keeps your overview clean by only showing rows with active workspaces
+- The current workspace row is always visible, even if empty
+- Arrow key navigation (left/right) stays within the current row when enabled
+- Great for 2-row setups where you rarely use workspaces 6-10
+
+**Close on focus loss / outside click:**
+- `closeOnFocusLoss` defaults to `true`
+- When enabled, clicking outside the overview closes it, similar to menus, dropdowns, and launchers
+- The overview also closes when its Hyprland focus grab is cleared
+- Set `closeOnFocusLoss: false` if you want the previous behavior where the overview can remain open after focus changes
+
+### Position
+
+Edit `~/.config/quickshell/overview/config.json`:
+
+```json
+{
+ "position": {
+ "topMargin": 100
+ }
+}
+```
+
+Increase `topMargin` to move the overview down. Decrease it to move up.
+
+### Window Preview
+
+```json
+{
+ "windowPreview": {
+ "showIcons": true,
+ "iconToWindowRatio": 0.25,
+ "iconToWindowRatioCompact": 0.45,
+ "xwaylandIndicatorToIconRatio": 0.35,
+ "inactiveMonitorOpacity": 0.4,
+ "cropToFill": false
+ }
+}
+```
+
+- `cropToFill`: crop full-screen windows to fill the workspace preview when `true`; keep the full window in preview with possible horizontal/vertical "padding" bars when `false`
+
+### Performance Tuning
+
+```json
+{
+ "overview": {
+ "previewsEnabled": true,
+ "previewMode": "live",
+ "includeInactiveMonitorPreviews": true,
+ "previewRecaptureDelayMs": 60
+ },
+ "hacks": {
+ "hyprlandEventDebounceMs": 40
+ }
+}
+```
+
+- `overview.previewsEnabled`: turn all window screencopy previews on/off
+- `overview.previewMode`: `live` (best visuals, more RAM) or `event` (lower RAM, refreshes on window events)
+- `overview.includeInactiveMonitorPreviews`: when `false`, only current monitor windows get preview capture
+- `overview.previewRecaptureDelayMs`: delay used for event-mode snapshot refresh (lower = faster updates)
+- `hacks.hyprlandEventDebounceMs`: coalesces Hyprland event refreshes to reduce command churn
+
+### Special Workspaces
+
+```json
+{
+ "overview": {
+ "showSpecialWorkspaces": true,
+ "specialWorkspaces": ["stash", "music", "scratch"],
+ "specialWorkspaceColumns": 5
+ }
+}
+```
+
+- `showSpecialWorkspaces`: renders special workspaces in a strip under the normal grid
+- `specialWorkspaces`: optional preconfigured special workspace names (without the `special:` prefix)
+- `specialWorkspaceColumns`: how many special tiles per row before wrapping
+- `emptyWorkspaceWallpaper`: optional image path used as the background for normal workspace tiles
+- `specialEmptyWorkspaceWallpaper`: optional image path used as the background for special workspace tiles
+
+Interaction behavior:
+- Preconfigured special workspaces appear in the overview even when they are empty
+- The special strip shows active special workspaces plus any names you preconfigure
+- This is useful for fixed workflows like `stash`, `music`, or `scratch`
+- Click a special tile to run `togglespecialworkspace <name>`
+- Click the `+` tile to create and open a new special workspace
+- Drag a window onto a special tile to move it with `movetoworkspacesilent special:<name>`
+- Drag a window onto the `+` tile to auto-create a new special workspace (`stash`, `stash-2`, ...), even when no special workspace is currently open or preconfigured
+- Special windows are visible directly in those tiles
+- Restart Quickshell after changing `config.json`, otherwise the special workspace list will not refresh immediately
+
+Normal workspace scrolling:
+- Scroll on the normal workspace grid to move the active workspace/highlighter across all normal workspaces
+- Scrolling wraps from the last workspace back to `1`, and from `1` back to the last
+
+### Workspace Wallpaper
+
+```json
+{
+ "overview": {
+ "emptyWorkspaceWallpaper": "/home/your-user/Pictures/wallpaper.png",
+ "specialEmptyWorkspaceWallpaper": "/home/your-user/Pictures/special-wallpaper.png",
+ "effects": {
+ "emptyWorkspaceWallpaperOverlayOpacity": 0.12
+ }
+ }
+}
+```
+
+- Normal workspaces can use a wallpaper as their background
+- Special workspaces can use a different wallpaper as their background
+- The wallpaper remains visible behind floating or partially covered windows
+- If no special workspaces exist yet, that special wallpaper is also used for the `+` create tile
+- `emptyWorkspaceWallpaperOverlayOpacity` controls how much tint is applied over that wallpaper
+- Use an absolute path for the image for the most reliable behavior
+- Restart Quickshell after changing `config.json`, otherwise the wallpaper path will not refresh immediately
+
+Demo:
+
+![Workspace wallpaper demo](assets/Workspace_Wallpaper.png)
+
+### Transparency & Blur
+
+```json
+{
+ "overview": {
+ "effects": {
+ "enableBackdrop": false,
+ "backdropOpacity": 0.28,
+ "panelOpacity": 0.92,
+ "workspaceOpacity": 0.86,
+ "emptyWorkspaceWallpaperOverlayOpacity": 0.18,
+ "windowOverlayOpacity": 0.22,
+ "enableBlur": false,
+ "glassMode": false,
+ "glassTintStrength": 0.35,
+ "glassBorderOpacity": 0.72,
+ "glassShineOpacity": 0.14
+ }
+ }
+}
+```
+
+- `enableBackdrop`: show/hide full-screen dim backdrop behind overview
+- `backdropOpacity`: opacity of backdrop dim layer (`0` to `1`)
+- `panelOpacity`: opacity of overview panel container (`0` to `1`)
+- `workspaceOpacity`: opacity of each workspace tile (`0` to `1`)
+- `emptyWorkspaceWallpaperOverlayOpacity`: tint strength over empty-workspace wallpaper (`0` to `1`)
+- `windowOverlayOpacity`: opacity of the color tint over window previews (`0` to `1`)
+- `enableBlur`: switches layer namespace to `quickshell:overview-blur`
+- `glassMode`: enables a glass-like tint + softer transparency preset for panel/workspaces/windows
+- `glassTintStrength`: tint mixing strength for glass mode (`0` to `1`)
+- `glassBorderOpacity`: border alpha used by glass mode (`0` to `1`)
+- `glassShineOpacity`: top highlight strength for glass reflections (`0` to `1`)
+
+Stronger glass preset:
+
+```json
+{
+ "overview": {
+ "effects": {
+ "enableBackdrop": true,
+ "enableBlur": true,
+ "panelOpacity": 0.55,
+ "workspaceOpacity": 0.48,
+ "emptyWorkspaceWallpaperOverlayOpacity": 0.10,
+ "windowOverlayOpacity": 0.08,
+ "glassMode": true,
+ "glassTintStrength": 0.55,
+ "glassBorderOpacity": 0.85,
+ "glassShineOpacity": 0.32
+ }
+ }
+}
+```
+
+For Hyprland blur, add layer rules (example):
+
+```ini
+layerrule = blur true, match:namespace quickshell:overview-blur
+layerrule = ignore_alpha 0.2, match:namespace quickshell:overview-blur
+```
+
+If `enableBlur` is `false`, namespace remains `quickshell:overview`.
+
+Low-memory preset:
+
+```json
+{
+ "overview": {
+ "previewMode": "event",
+ "includeInactiveMonitorPreviews": false
+ },
+ "hacks": {
+ "hyprlandEventDebounceMs": 80
+ }
+}
+```
+
+### Full Example
+
+```json
+{
+ "appearance": {
+ "colorSource": "default",
+ "caelestia": {
+ "autoRefresh": true,
+ "refreshInterval": 2000,
+ "accentProfile": "vibrant"
+ },
+ "rounding": {
+ "unsharpen": 2,
+ "verysmall": 8,
+ "small": 12,
+ "normal": 17,
+ "large": 23,
+ "full": 9999,
+ "screenRounding": 23,
+ "windowRounding": 18
+ },
+ "font": {
+ "family": {
+ "main": "sans-serif",
+ "title": "sans-serif",
+ "expressive": "sans-serif"
+ },
+ "pixelSize": {
+ "smaller": 12,
+ "small": 15,
+ "normal": 16,
+ "larger": 19,
+ "huge": 22
+ }
+ },
+ "animation": {
+ "duration": {
+ "elementMove": 500,
+ "elementMoveEnter": 400,
+ "elementMoveFast": 200
+ }
+ },
+ "sizes": {
+ "elevationMargin": 10
+ }
+ },
+ "overview": {
+ "rows": 2,
+ "columns": 5,
+ "scale": 0.16,
+ "enable": true,
+ "hideEmptyRows": true,
+ "closeOnFocusLoss": true,
+ "useWorkspaceMap": false,
+ "workspaceMap": [0, 10],
+ "orderRightLeft": false,
+ "orderBottomUp": false,
+ "previewsEnabled": true,
+ "previewMode": "live",
+ "includeInactiveMonitorPreviews": true,
+ "previewRecaptureDelayMs": 60,
+ "showSpecialWorkspaces": true,
+ "specialWorkspaces": [],
+ "specialWorkspaceColumns": 5,
+ "emptyWorkspaceWallpaper": "",
+ "specialEmptyWorkspaceWallpaper": "",
+ "effects": {
+ "enableBackdrop": false,
+ "backdropOpacity": 0.28,
+ "panelOpacity": 0.92,
+ "workspaceOpacity": 0.86,
+ "emptyWorkspaceWallpaperOverlayOpacity": 0.18,
+ "windowOverlayOpacity": 0.22,
+ "enableBlur": false,
+ "glassMode": false,
+ "glassTintStrength": 0.35,
+ "glassBorderOpacity": 0.72,
+ "glassShineOpacity": 0.14
+ },
+ "workspaceSpacing": 5,
+ "backgroundPadding": 10,
+ "workspaceNumberBaseSize": 250
+ },
+ "position": {
+ "topMargin": 100
+ },
+ "windowPreview": {
+ "showIcons": true,
+ "iconToWindowRatio": 0.25,
+ "iconToWindowRatioCompact": 0.45,
+ "xwaylandIndicatorToIconRatio": 0.35,
+ "inactiveMonitorOpacity": 0.4,
+ "cropToFill": false
+ },
+ "hacks": {
+ "arbitraryRaceConditionDelay": 150,
+ "hyprlandEventDebounceMs": 40
+ }
+}
+```
+
+### Theme & Colors
+
+Most theme sizing/timing options are now configurable via `config.json`:
+- `appearance.colorSource` (`default`, `matugen`, `caelestia`)
+- `appearance.caelestia.*` (`autoRefresh`, `refreshInterval`, `accentProfile`)
+- `appearance.rounding.*`
+- `appearance.font.*`
+- `appearance.animation.duration.*`
+- `appearance.sizes.elevationMargin`
+
+For full color palette customization, edit `~/.config/quickshell/overview/common/Appearance.qml`.
+
+### Matugen (Dynamic Colors from Wallpaper)
+
+[Matugen](https://github.com/InioX/matugen) lets you generate Material You colors from your wallpaper and apply them to the overview automatically.
+
+**1. Install matugen** - follow [matugen's install guide](https://github.com/InioX/matugen?tab=readme-ov-file#installation)
+
+**2. Copy the template** from this repo to matugen's templates folder:
+```bash
+mkdir -p ~/.config/matugen/templates
+cp ~/.config/quickshell/overview/quickshell-overview.qml ~/.config/matugen/templates/
+```
+
+**3. Add this to `~/.config/matugen/config.toml`** (create the file if it doesn't exist):
+```toml
+[templates.quickshell_overview]
+input_path = "./templates/quickshell-overview.qml"
+output_path = "~/.config/quickshell/overview/common/Appearance.colors.qml"
+```
+
+**4. Enable it** in `~/.config/quickshell/overview/config.json`:
+```json
+{
+ "appearance": {
+ "colorSource": "matugen"
+ }
+}
+```
+
+**5. Run matugen** with your wallpaper to generate colors:
+```bash
+matugen image /path/to/your/wallpaper.jpg
+```
+
+This generates `Appearance.colors.qml` which the overview loads automatically. Re-run step 5 whenever you change your wallpaper.
+
+### Caelestia
+
+If you use Caelestia, set the source to `caelestia`:
+
+```json
+{
+ "appearance": {
+ "colorSource": "caelestia",
+ "caelestia": {
+ "autoRefresh": true,
+ "refreshInterval": 2000,
+ "accentProfile": "vibrant"
+ }
+ }
+}
+```
+
+Overview reads the active palette from `caelestia scheme get` and refreshes it live when `autoRefresh` is enabled, so wallpaper/scheme changes can apply without restarting overview.
+
+---
+
+## 📋 Requirements
+
+- **Hyprland** compositor (tested on latest versions)
+- **Quickshell** (Qt6-based shell framework)
+- **Qt 6** with the following modules:
+ - QtQuick
+ - QtQuick.Controls
+ - QtQuick.Layouts
+ - Quickshell.Wayland
+ - Quickshell.Hyprland
+
+## 🚫 Removed Features (from original illogical-impulse)
+
+The following features were removed to make it standalone:
+
+- App search functionality
+- Emoji picker
+- Clipboard history integration
+- Search widget
+- Integration with the full illogical-impulse shell ecosystem
+
+## 📁 File Structure
+
+```
+~/.config/quickshell/overview/
+├── shell.qml # Main entry point
+├── README.md # This file
+├── config.example.json # User override template
+├── hyprland-config.conf # Configuration reference
+├── common/
+│ ├── Appearance.qml # Theme and styling
+│ ├── Config.qml # Default config + user override loader
+│ ├── functions/
+│ │ └── ColorUtils.qml # Color manipulation utilities
+│ └── widgets/
+│ ├── StyledText.qml # Styled text component
+│ ├── StyledRectangularShadow.qml
+│ ├── StyledToolTip.qml
+│ └── StyledToolTipContent.qml
+├── services/
+│ ├── GlobalStates.qml # Global state management
+│ └── HyprlandData.qml # Hyprland data provider
+└── modules/
+ └── overview/
+ ├── Overview.qml # Main overview component
+ ├── OverviewWidget.qml # Workspace grid widget
+ └── OverviewWindow.qml # Individual window preview
+```
+
+## 🎯 IPC Commands
+
+```bash
+# Toggle overview
+qs ipc -c overview call overview toggle
+
+# Open overview
+qs ipc -c overview call overview open
+
+# Close overview
+qs ipc -c overview call overview close
+```
+
+## 🐛 Known Issues
+
+- Window icons may fallback to generic icon if app class name doesn't match icon theme
+- Potential crashes during rapid window state changes due to Wayland screencopy buffer management
+
+## 💖 Support
+
+If this project helps your setup and you want to support continued maintenance, you can sponsor here:
+
+https://github.com/sponsors/Shanu-Kumawat
+
+## Credits
+
+Extracted from the overview feature in [illogical-impulse](https://github.com/end-4/dots-hyprland) by [end-4](https://github.com/end-4).
+
+Adapted as a standalone component for Hyprland + Quickshell users who want just the overview functionality.
+
+---
+
+<div align="center">
+
+**Note:** Maintenance will be limited due to time constraints, but **PRs and code improvements are welcome!** Feel free to contribute or fork for your own needs.
+
+Made with ❤️ for the Hyprland community
+
+</div>
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage