{"id":14351190,"url":"https://github.com/pdf/hyprpanel","last_synced_at":"2025-05-07T22:09:57.900Z","repository":{"id":226184538,"uuid":"758736696","full_name":"pdf/hyprpanel","owner":"pdf","description":"An opinionated panel/shell for the Hyprland compositor.","archived":false,"fork":false,"pushed_at":"2025-04-19T10:49:53.000Z","size":305,"stargazers_count":81,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-07T22:09:49.112Z","etag":null,"topics":["desktop-environment","desktop-notifications","hyprland","hyprland-bar"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pdf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-02-17T00:26:53.000Z","updated_at":"2025-05-07T07:25:41.000Z","dependencies_parsed_at":"2024-03-28T10:31:22.624Z","dependency_job_id":"fc5005d7-c128-4811-aa8d-2531c0b67a25","html_url":"https://github.com/pdf/hyprpanel","commit_stats":null,"previous_names":["pdf/hyprpanel"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pdf%2Fhyprpanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pdf%2Fhyprpanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pdf%2Fhyprpanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pdf%2Fhyprpanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pdf","download_url":"https://codeload.github.com/pdf/hyprpanel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252961841,"owners_count":21832197,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop-environment","desktop-notifications","hyprland","hyprland-bar"],"created_at":"2024-08-27T04:01:07.960Z","updated_at":"2025-05-07T22:09:57.867Z","avatar_url":"https://github.com/pdf.png","language":"Go","funding_links":[],"categories":["Tools"],"sub_categories":["Status Bar/Shell"],"readme":"# hyprpanel\n\n[![Lint](https://github.com/pdf/hyprpanel/actions/workflows/lint.yml/badge.svg)](https://github.com/pdf/hyprpanel/actions/workflows/lint.yml)\n[![Release](https://github.com/pdf/hyprpanel/actions/workflows/release.yml/badge.svg)](https://github.com/pdf/hyprpanel/actions/workflows/release.yml)\n[![AUR](https://github.com/pdf/hyprpanel/actions/workflows/aur.yml/badge.svg)](https://github.com/pdf/hyprpanel/actions/workflows/aur.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/pdf/hyprpanel)](https://goreportcard.com/report/github.com/pdf/hyprpanel)\n[![License](https://img.shields.io/badge/License-MIT-%23a31f34)](https://github.com/pdf/hyprpanel/blob/main/LICENSE)\n\nAn opinionated panel/shell for the Hyprland compositor.\n\n\u003e [!NOTE]\n\u003e This project was created as a holiday hackathon for my personal use only. There are almost certainly bugs, and possibly the occasional memory leak. Please don't read the code if you're easily offended 🙃.\n\u003e \n\u003e Use at your own risk - I will accept contributions, but I don't expect to spend a lot of time maintaining this project.\n\nhttps://github.com/pdf/hyprpanel/assets/146192/2b6b3b40-e814-44c0-9b7e-148a65906874\n\n## Install\n\n### Install via AUR\n\nThis project is published in the Arch AUR as `hyprpanel-bin` or `hyprpanel`, install using your favourite AUR helper.\n\n### Dependencies\n\nThis project depends on (required):\n- gtk4\n- gtk4-layer-shell\n- Hyprland (version must be \u003e= v0.42.0)\n\nOptional dependencies (required for default configuration):\n- systemd\n- pipewire-pulse/pulseaudio (for audio)\n- upower (for battery state)\n\nPlease ensure that you have these packages installed.\n\n### Install from Release\n\nDownload the [latest release](https://github.com/pdf/hyprpanel/releases/latest) for your operating system and architecture.\n\nUnpack the archive and place the `hyprpanel` and `hyprpanel-client` binaries on your `$PATH`.\n\n### Install from Source\n\nExecute the following (requires the Go toolchain):\n\n```shell\ngo install github.com/pdf/hyprpanel/cmd/hyprpanel@latest\ngo install github.com/pdf/hyprpanel/cmd/hyprpanel-client@latest\n```\n\n## Usage\n\nAdd the following to your `hyprland.conf` (assuming that `hyprpanel` is available on your PATH):\n\n```\nexec-once = hyprpanel\n```\n\nAlternatively if you're using uwsm, launch using the app wrapper:\n\n```\nexec-once = uwsm app -- hyprpanel\n```\n\nAnd if you'd like applications started from the taskbar to be launched under the session, add the option:\n\n```json\n\"launch_wrapper\": [\"uwsm\", \"app\", \"--\"]\n```\n\nto the top-level config for hyprpanel (see below for more details).\n\n## Configuration\n\nOn first run, hyprpanel will create a default configuration file at:\n\n`${XDG_CONFIG_HOME}/hyprpanel/config.json`\n\nYou may review the current default configuration at [config/default.json](config/default.json).\n\nJSON is not my first choice for a human-writable config format, but due to internal protobuf usage this was by far the least painful format to implement.\n\nGlobal configuration options are documented [here](proto/doc/hyprpanel/config/v1/doc.md#hyprpanel-config-v1-Config).\n\n## Panels\n\nMultiple panels are supported, if that's your thing.\n\n[Config Options](proto/doc/hyprpanel/config/v1/doc.md#hyprpanel-config-v1-Panel)\n\n## Modules\n\nEach panel is composed of modules.\n\nThe complete list of available modules is available [here](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Module)\n\n### Audio\n\nThe audio module displays the current audio volume level as an icon.\n\nThis module supports embedding in systray.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Audio)\n\n#### Actions\n\n- Left-click launches the specified mixer application.\n- Middle-click mutes the default input device.\n- Right-click mutes the default output device.\n- Scroll-wheel adjusts default output volume. \n\n### Clock\n\nThe clock module displays the current time/date. You may also specify a number of secondary regions to display via tooltip.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Clock)\n\n#### Actions\n\n- Left-click to display a basic calendar.\n\n### Hud\n\nDisplays heads-up notifications for hardware events (e.g. volume, display brightness changes, etc)\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Hud)\n\n### Notifications\n\nDisplays system notifications.\n\n\u003e [!NOTE]\n\u003e The hyprpanel notifications implementation does not play well with others, and will fail to start if it can't own the bus. So if you use this module hyprpanel *must* be the only notifications implementation on your desktop.\n\u003e\n\u003e To disable notifications support, set the config option `dbus.notifications.enabled` to `false`, and remove the `notifications` module from all panels.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Notifications)\n\n#### Actions\n\nOn notifications:\n\n- Left-click on notifications that include a default action will execute that action and optionally focus the sending application if supported by the notification.\n- Middle-click closes the notification.\n\n### Pager\n\nThe pager module displays a stylized preview of your workspace contents.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Pager)\n\n#### Actions\n\n- Left-click switches to workspace.\n- Scroll-wheel switches between workspaces.\n\n### Power\n\nThe power module displays the current battery level as an icon.\n\nThis modules supports embedding in systray.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Power)\n\n#### Actions\n\n- Scroll-wheel adjusts display brightness. \n\n### Session\n\nThe session module provides a basic session management screen.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Session)\n\n#### Actions\n\n- Left-click to display session management screen.\n\n### Spacer\n\nThe spacer module simply adds empty space between modules.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Spacer)\n\n### Systray\n\nThe systray module implements the StatusNotifierItem spec.\n\nSome modules ([where noted](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-SystrayModule)) support embedding in the systray.\n\n\u003e [!NOTE]\n\u003e The hyprpanel SNI implementation does not play well with others: hyprpanel does not support registering additional StatusNotifierHosts, and will fail to start if it can't own the bus. So if you use this module hyprpanel *must* be the only SNI implementation on your desktop.\n\u003e\n\u003e To disable systray support, set the config option `dbus.systray.enabled` to `false`, and remove the `systray` module from all panels.\n\u003e\n\u003e If you need xembed support, you can try `xembedsniproxy` from the KDE project, though expect some artifical delays as that project expects to communicate directly with the KDE SNI implementation.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Systray)\n\n### Taskbar\n\nThe taskbar module displays an icon-only representation of running tasks, and optionally displays pinned launchers.\n\n[Config Options](proto/doc/hyprpanel/module/v1/doc.md#hyprpanel-module-v1-Taskbar)\n\n#### Actions\n\n- Left-click launches a pinned application if it is not running. Focuses the application if it is running.\n- Middle-click launches a new instance of the application (if supported).\n- Right-click displays the application context-menu.\n- Scroll-wheel cycles focus between application windows when grouped tasks is enabled.\n\n## Global keybinds\n\nGlobal keybinds are registered through the desktop portal. By default they do not have prefixes in `hyprctl globalshortcuts`. The following keybinds are available:\n\n\n```\n:com.c0dedbad.hyprpanel.audioSinkVolumeUp -\u003e Increase the volume of the default audio output device\n:com.c0dedbad.hyprpanel.audioSinkVolumeDown -\u003e Decrease the volume of the default audio output device\n:com.c0dedbad.hyprpanel.audioSinkMuteToggle -\u003e Toggle the mute status of the default audio output device\n:com.c0dedbad.hyprpanel.audioSourceVolumeUp -\u003e Increase the volume of the default audio input device\n:com.c0dedbad.hyprpanel.audioSourceVolumeDown -\u003e Decrease the volume of the default audio input device\n:com.c0dedbad.hyprpanel.audioSourceMuteToggle -\u003e Toggle the mute status of the default audio input device\n:com.c0dedbad.hyprpanel.brightnessUp -\u003e Increase display brightness\n:com.c0dedbad.hyprpanel.brightnessDown -\u003e Increase display brightness\n```\n\nHowever if hyprpanel is running under uwsm, they will be prefixed by the unit/process name:\n\n\n```\nhyprpanel:com.c0dedbad.hyprpanel.audioSinkVolumeDown -\u003e Decrease the volume of the default audio output device\nhyprpanel:com.c0dedbad.hyprpanel.audioSinkMuteToggle -\u003e Toggle the mute status of the default audio output device\nhyprpanel:com.c0dedbad.hyprpanel.audioSourceVolumeUp -\u003e Increase the volume of the default audio input device\nhyprpanel:com.c0dedbad.hyprpanel.audioSourceVolumeDown -\u003e Decrease the volume of the default audio input device\nhyprpanel:com.c0dedbad.hyprpanel.audioSourceMuteToggle -\u003e Toggle the mute status of the default audio input device\nhyprpanel:com.c0dedbad.hyprpanel.brightnessUp -\u003e Increase display brightness\nhyprpanel:com.c0dedbad.hyprpanel.brightnessDown -\u003e Increase display brightness\nhyprpanel:com.c0dedbad.hyprpanel.audioSinkVolumeUp -\u003e Increase the volume of the default audio output device\n```\n\n## Styling\n\nYou may apply custom styling by providing a GTK4-compatible CSS file. By default hyprpanel will look for this file at:\n\n`${XDG_CONFIG_HOME}/hyprpanel/style.css`\n\nYou may review the default stylesheet at [style/default.css](style/default.css).\n\nIf you simply wish to update the colour scheme, you may define only the colours you wish to change in your stylesheet. For example, the following sets the highlight to blue and creates floating modules by setting a transparent panel background, and opaque module background:\n\n```css\n@define-color Highlight rgba(0, 102, 255, 1.0);\n@define-color PanelBackground rgba(0, 0, 0, 0.0);\n@define-color ModuleBackground rgba(16, 16, 16, 1.0);\n```\n\nAlternatively, you can supply entirely custom styles, have fun.\n\n## Roadmap\n\n- [ ] Granular config reloads - reloads currently restart the whole panel plugin process\n- [X] (Pulse)Audio module\n- [X] Power/Battery/Brightness module\n- [ ] Notification history\n- [ ] GUI configuration (e.g. pinned launchers, pinned tray items, etc) (maybe)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpdf%2Fhyprpanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpdf%2Fhyprpanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpdf%2Fhyprpanel/lists"}