
Security News
Feross on TBPN: Socket's Series C and the State of Software Supply Chain Security
Feross Aboukhadijeh joins TBPN to discuss Socket's $60M Series C, 500%+ ARR growth, AI's impact on open source, and the rise in supply chain attacks.
HyprMon is a TUI (Terminal User Interface) tool for configuring monitors on Arch Linux running Wayland with Hyprland. It provides a visual "desk map" where you can arrange monitors using keyboard and mouse controls, with real-time application to Hyprland.


yay -S hyprmon-bin
If you have Nix setup you can try out hyprmon without installing it:
nix run nixpkgs#hyprmon
{pkgs, ... }: {
environment.systemPackages = [ # or home.packages
pkgs.hyprmon
];
}
hyprctl command availablewlr-randr for additional monitor detectiongit clone https://github.com/erans/hyprmon.git
cd hyprmon
go build -o hyprmon
sudo mv hyprmon /usr/local/bin/
hyprmon
# Apply a saved profile directly
hyprmon --profile work
# Show profile selection menu
hyprmon profiles
| Key | Action |
|---|---|
↑↓←→ or hjkl | Move selected monitor by grid size |
Shift+↑↓←→ | Move by 10× grid size |
Tab / Shift+Tab | Cycle through monitors |
G | Change grid size (1, 8, 16, 32, 64 px) |
L | Toggle snap mode (Off, Edges, Centers, Both) |
R | Open scale selector with common DPI values |
F | Open resolution & refresh rate mode picker |
[ / ] | Decrease/Increase scale by 0.05 |
Enter or Space | Toggle monitor active/inactive |
C or D | Open advanced display settings dialog |
M | Open monitor mirroring configuration |
A | Apply changes live to Hyprland |
S | Save changes to configuration file |
P | Save current layout as named profile |
Z | Revert to previous configuration |
Q or Ctrl+C | Quit |
| Action | Effect |
|---|---|
| Left Click | Select monitor |
| Left Drag | Move monitor (with snapping) |
| Right Click | Toggle monitor active/inactive |
| Scroll Wheel | Adjust monitor scale |
Press C or D in the main UI to open the advanced display settings dialog for the selected monitor. This allows you to configure:
| Key | Action |
|---|---|
Tab / ↑↓ | Navigate between settings |
Space | Toggle boolean settings |
←→ | Adjust slider values (SDR brightness/saturation) |
Enter | Apply changes and close dialog |
Esc | Cancel changes and close dialog |
Press M in the main UI to configure monitor mirroring for the selected monitor. This allows you to:
| Key | Action |
|---|---|
↑↓ | Navigate between available source monitors |
Enter | Set selected monitor as mirror source |
D | Disable mirroring (no source) |
Esc | Cancel and close mirror picker |
HyprMon supports saving and loading monitor configurations as profiles, perfect for different setups like home, work, or presentation modes.
P to save the current layout~/.config/hyprmon/profiles/# Quick switch via command line (perfect for keybindings)
hyprmon --profile home
hyprmon --profile work
hyprmon --profile laptop-only
# Interactive profile menu - shows all saved profiles
hyprmon profiles
The profile menu allows you to:
Add these to your hyprland.conf for quick profile switching:
bind = $mainMod, F1, exec, hyprmon --profile home
bind = $mainMod, F2, exec, hyprmon --profile work
bind = $mainMod, F3, exec, hyprmon --profile laptop
bind = $mainMod, F4, exec, hyprmon profiles
HyprMon profiles can be used for laptop clamshell mode by combining them with Hyprland's lid switch bindings. Create two profiles — one for docked use (laptop display off, external monitor only) and one for laptop-only use — then add these lines to your hyprland.conf:
bindl = , switch:on:Lid Switch, exec, hyprmon --profile docked
bindl = , switch:off:Lid Switch, exec, hyprmon --profile laptop
When the lid closes, HyprMon will apply the "docked" profile, disable the laptop display, save the configuration, and automatically migrate workspaces to the external monitor. When the lid opens, the "laptop" profile restores the internal display.
Note: You may need to set
HandleLidSwitch=ignorein/etc/systemd/logind.confto prevent systemd from suspending the laptop when the lid closes.
desc: formatBy default, HyprMon writes monitor lines keyed by connector name (e.g., monitor=DP-9,…). For daisy-chained or otherwise indistinguishable monitors, the kernel may assign connector names in a different order across reboots or replugs, which swaps monitor positions.
Hyprland supports matching by EDID description instead:
monitor=desc:Dell Inc. DELL U3419W 5HJB6T2,3440x1440@60,0x0,1.00
To opt in per monitor:
c (or d) to open advanced settings.S) to persist the monitor using desc: in whichever Hyprland config format is active.The toggle is unavailable when the monitor has no EDID description, when two or more connected monitors share the same description (typically identical monitors without a serial number), or when the description contains characters Hyprland cannot parse. The preference persists across sessions in ~/.config/hyprmon/settings.json and is also stored inside any profile you save that includes the monitor.
Live application via hyprctl continues to use connector names — the desc: format applies only to persisted config files.
HyprMon reads and writes to your Hyprland configuration file. The location is determined in this order:
$HYPRLAND_CONFIG environment variable. Paths ending in .lua use the Lua writer; other paths use the legacy hyprlang writer.~/.config/hypr/hyprland.lua when it exists.~/.config/hypr/hyprland.conf (legacy fallback).For Lua configs, HyprMon writes monitor rules to ~/.config/hypr/hyprmon.lua and adds this managed include to hyprland.lua if it is not already present:
-- hyprmon: managed monitor profile include
require("hyprmon")
For legacy hyprlang configs, HyprMon keeps the existing behavior and rewrites only the monitor= lines in hyprland.conf.
Before any configuration changes, HyprMon creates a backup:
<config-file>.bak.<timestamp>hyprctl monitors -j to read current monitor configurationhyprctl keyword monitor ... commandsmonitor= lines in legacy hyprlang config, or updates the managed hyprmon.lua sidecar for Lua configset -g mouse onhyprctl is available and Hyprland is runningwlr-randr for additional monitor detectionset -g mouse on to your tmux.confecho $HYPRLAND_CONFIGApache License 2.0 - See LICENSE file for details
Copyright 2025 Eran Sandler
git clone https://github.com/eransandler/hyprmon.git
cd hyprmon
make deps # Install dependencies
make hooks # Install git pre-commit hooks
make build # Build the application
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
Built with:
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Feross Aboukhadijeh joins TBPN to discuss Socket's $60M Series C, 500%+ ARR growth, AI's impact on open source, and the rise in supply chain attacks.

Security News
OSV withdrew 157 OSV malware reports after automated false positives incorrectly flagged trusted npm and PyPI packages, sending bad records into tools that rely on OSV data.

Research
/Security News
TrapDoor crypto stealer hits 36 malicious packages across npm, PyPI, and Crates.io, targeting crypto, DeFi, AI, and security developers.