Omahub
← All plugins
N

Hyprland Dock

by Nick Friedrich

A configurable macOS-inspired application dock for Hyprland.

Install
$ omarchy plugin add https://github.com/nick-friedrich/hyprland-dock --enable

Hyprland Dock

A lightweight macOS-inspired application dock for Hyprland, built with Quickshell and Qt/QML.

Hyprland Dock running at the bottom of a Hyprland desktop

Features

  • Smooth pointer-distance magnification
  • Freedesktop application icons and launching
  • Focuses an existing application on another workspace
  • Running-application indicators
  • Optional reserved screen space
  • Live JSON configuration reload
  • Multi-monitor support

Requirements

  • Hyprland
  • Quickshell 0.3 or newer
  • A working freedesktop icon theme

Install

Make sure Quickshell is installed, then run:

curl -fsSL https://raw.githubusercontent.com/nick-friedrich/hyprland-dock/master/install.sh | bash

The installer uses only user directories, requires no sudo, and creates an XDG autostart entry. To install without autostart:

curl -fsSL https://raw.githubusercontent.com/nick-friedrich/hyprland-dock/master/install.sh | bash -s -- --no-autostart

Run the dock immediately with:

hyprland-dock --daemonize

Manage autostart later from the CLI:

hyprland-dock autostart status
hyprland-dock autostart enable
hyprland-dock autostart disable

Run hyprland-dock help to see every available command.

If your Hyprland session does not process XDG autostart entries, add one of these manually:

-- Omarchy: ~/.config/hypr/autostart.lua
o.launch_on_start("hyprland-dock")
# Standard Hyprland: ~/.config/hypr/hyprland.conf
exec-once = hyprland-dock

Update or remove

hyprland-dock update
hyprland-dock restart
hyprland-dock uninstall

The older --update, --restart, and --uninstall forms remain supported. Uninstalling preserves the configuration; remove it too with hyprland-dock uninstall --purge.

Install as an Omarchy plugin

Omarchy Quattro users can run the dock inside the existing Omarchy shell instead of starting a second Quickshell process. If the standalone dock is already running, disable its autostart and stop it first:

hyprland-dock autostart disable
hyprland-dock stop

Then install and enable the plugin:

omarchy plugin add https://github.com/nick-friedrich/hyprland-dock.git --enable

The plugin uses the same ~/.config/hyprland-dock/dock.json configuration as the standalone version. On a plugin-only installation, create it from the bundled defaults:

mkdir -p ~/.config/hyprland-dock
cp ~/.config/omarchy/plugins/io.github.nick-friedrich.hyprland-dock/config/dock.json \
  ~/.config/hyprland-dock/dock.json

Update or remove the plugin with:

omarchy plugin update io.github.nick-friedrich.hyprland-dock
omarchy plugin remove io.github.nick-friedrich.hyprland-dock

Do not run the standalone and plugin versions together, or two docks will appear.

Development

Clone the repository and run directly from it:

./scripts/run

Quickshell watches the QML files, so UI changes reload while developing.

Configure

Installed copies use ~/.config/hyprland-dock/dock.json. When running from the repository, edit config/dock.json:

{
  "iconSize": 42,
  "magnification": 1.2,
  "magnificationRadius": 95,
  "margin": 10,
  "position": "bottom",
  "fullLength": false,
  "reserveSpace": true,
  "clickAction": "focus-or-launch",
  "pinned": [
    "org.gnome.Nautilus",
    "com.mitchellh.ghostty",
    "chromium"
  ]
}

Options

Option Description
iconSize Base icon size in pixels
magnification Maximum icon scale under the pointer
magnificationRadius Distance over which nearby icons magnify
margin Distance between the dock and screen edge
position Screen edge: top, bottom, left, or right
fullLength Fill the screen width, or height for a vertical dock
reserveSpace When true, tiled windows stop beside the dock
clickAction focus-or-launch focuses an existing window; launch always starts a new instance
pinned Ordered desktop-entry IDs displayed in the dock

Pinned values are desktop-entry filenames without the .desktop suffix. List available IDs with:

find /usr/share/applications ~/.local/share/applications \
  -type f -name '*.desktop' 2>/dev/null \
  | sed 's#.*/##; s/\.desktop$//' | sort -u

The configuration file is watched and updates automatically.

For a full-height vertical dock on the left, use:

{
  "position": "left",
  "fullLength": true
}

Disable cursor warping

Hyprland controls whether the pointer moves when focus switches to a window on another workspace. This is compositor-wide behavior and cannot be reliably overridden by the dock.

On Omarchy, add this override to ~/.config/hypr/looknfeel.lua:

hl.config({
  cursor = {
    warp_on_change_workspace = 0,
  },
})

Hyprland normally reloads after the file is saved. Validate the configuration with:

hyprctl reload
hyprctl configerrors

This disables cursor warping for all workspace changes, not only dock clicks.

Roadmap

  • Auto-hide and edge reveal
  • Pinning and drag-to-reorder
  • Context menus
  • Theme integration

License

MIT