feat: add hypr-screen-mirror (#66)

* feat(hypr-screen-mirror): setup plugin

* feat(hypr-screen-mirror): added socat watch on hyprland socket for monitor change

* feat(hypr-screen-mirror): added hyprctl commands for starting and stopping mirroring

* fix(hypr-screen-mirror): check if a mirror is active from monitor output during monitor update

* doc(hypr-screen-mirror): plugin readme and image

* fix(hypr-screen-mirror): issues from review

* fix(hypr-screen-mirror): separate observed state from mirror actions

---------

Co-authored-by: Lemmy <studio@quadbyte.net>
This commit is contained in:
ProfiDev
2026-07-21 23:57:54 -04:00
committed by GitHub
co-authored by Lemmy
parent 58b6c81f09
commit 8a3bb49fdb
7 changed files with 398 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
# Hypr Screen Mirror
This plugin allows you to easily toggle screen mirroring in Hyprland.
## Plugin
| Field | Value |
| ------- | -------------------------------------------------------- |
| ID | `profidev/hypr-screen-mirror` |
| Entries | Bar widget: `widget`; panel: `panel`; service: `service` |
## Requirements
- `hyprctl` available on `PATH` (used to control Hyprland and query monitor information)
- `socat` available on `PATH` (used to watch Hyprland socket for monitor events)
## Usage
1. Add the widget to your bar
2. Open the panel and select your source and target monitors for mirroring
3. Click on "Mirror" to start mirroring, or "Stop" to stop mirroring
```sh
noctalia msg panel-toggle profidev/hypr-screen-mirror:panel
```
## Settings
| Setting | Type | Default | Description |
| ------- | ------- | -------------- | ------------------------------- |
| `glyph` | `glyph` | `screen-share` | The glyph to display in the bar |
## Notes
- Only supports Hyprland 0.55.0 or newer, as it relies on the `hyprctl eval` command to execute lua code for mirroring.