Monitor management utilities for Hyprland
Project description
hyprland-monitors
Monitor management utilities for Hyprland. Built on top of hyprland-socket.
Scale computation, layout geometry, config line parsing, and hardware capability detection for Hyprland monitor management.
Installation
pip install hyprland-monitors
Usage
Scale computation
Hyprland quantizes display scale to multiples of 1/120 and requires both
dimensions to divide evenly. compute_valid_scales finds all valid scales
for a given resolution.
from hyprland_monitors.monitors import compute_valid_scales, nearest_scale_index
scales = compute_valid_scales(3440, 1440)
for s in scales:
print(f" {s.label} ({s.value})")
# Find the closest valid scale to a target
idx = nearest_scale_index(scales, 1.5)
print(f"Nearest to 1.5: {scales[idx].label}")
Layout geometry
Check adjacency, detect gaps, and adjust positions when monitors resize.
from hyprland_monitors.monitors import (
MonitorState, is_adjacent, all_monitors_connected, adjust_neighbors,
)
a = MonitorState(name="DP-1", make="", model="", width=1920, height=1080,
refresh_rate=60.0, x=0, y=0, scale=1.0)
b = MonitorState(name="DP-2", make="", model="", width=1920, height=1080,
refresh_rate=60.0, x=1920, y=0, scale=1.0)
print(is_adjacent(a, b)) # True — edge-adjacent
print(all_monitors_connected([a, b])) # True — connected group
# After resizing a, shift b to maintain adjacency
old_w, old_h = a.effective_size
a.scale = 2.0
adjust_neighbors([a, b], a, old_w, old_h)
print(b.x) # 960 — shifted to stay adjacent
Config line parsing
Parse and generate Hyprland monitor = config lines.
from hyprland_monitors.monitors import lines_from_monitors, parse_mode, parse_extras
lines = lines_from_monitors([a, b])
# ['DP-1, 1920x1080@60.00Hz, 0x0, 2', 'DP-2, 1920x1080@60.00Hz, 960x0, 1']
mode = parse_mode("3440x1440@165.00Hz")
# {'width': 3440, 'height': 1440, 'refresh_rate': 165.0}
extras = parse_extras("DP-1, 1920x1080@60, 0x0, 1, bitdepth, 10, vrr, 1")
# {'bit_depth': '10', 'vrr': '1'}
Hardware detection
Query monitor capabilities via EDID parsing and DRM kernel properties.
from hyprland_monitors.hardware import get_monitor_capabilities
caps = get_monitor_capabilities("DP-1")
# {'hdr': True, 'ten_bit': True, 'vrr': False}
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hyprland_monitors-0.4.0.tar.gz.
File metadata
- Download URL: hyprland_monitors-0.4.0.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8d5112f79687125c3c5c0b0ebcf5aa2539b13b323e63f917ba6b5f5e1585c3d
|
|
| MD5 |
fa488bf51234c3b2ecf2f7bc755205e7
|
|
| BLAKE2b-256 |
73860312dac13a2d8c44d1385f3b596e867a63c03a522370f41b6d2fa7ba7c43
|
Provenance
The following attestation bundles were made for hyprland_monitors-0.4.0.tar.gz:
Publisher:
publish.yml on BlueManCZ/hyprland-monitors
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hyprland_monitors-0.4.0.tar.gz -
Subject digest:
e8d5112f79687125c3c5c0b0ebcf5aa2539b13b323e63f917ba6b5f5e1585c3d - Sigstore transparency entry: 1186395519
- Sigstore integration time:
-
Permalink:
BlueManCZ/hyprland-monitors@79f8cf703c9bad21ddfbded30c6d6d4a2ca618f1 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/BlueManCZ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@79f8cf703c9bad21ddfbded30c6d6d4a2ca618f1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hyprland_monitors-0.4.0-py3-none-any.whl.
File metadata
- Download URL: hyprland_monitors-0.4.0-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02c600f4abd6935ed27120193013fabd25923cda804d059c222a38952b3fe564
|
|
| MD5 |
4467c7898a87ee9ec08bfd0bd317e472
|
|
| BLAKE2b-256 |
a5701d5c69d63ef631c6c3b5a3529a9714e386f99bf2748edf7ff25a2c63e3f7
|
Provenance
The following attestation bundles were made for hyprland_monitors-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on BlueManCZ/hyprland-monitors
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hyprland_monitors-0.4.0-py3-none-any.whl -
Subject digest:
02c600f4abd6935ed27120193013fabd25923cda804d059c222a38952b3fe564 - Sigstore transparency entry: 1186395530
- Sigstore integration time:
-
Permalink:
BlueManCZ/hyprland-monitors@79f8cf703c9bad21ddfbded30c6d6d4a2ca618f1 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/BlueManCZ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@79f8cf703c9bad21ddfbded30c6d6d4a2ca618f1 -
Trigger Event:
release
-
Statement type: