#monitor #hyprland #pluggable #docking #screens #toml #acpid

app hyprdock

A small program to handle external pluggable screens with hyprland and acpid

10 releases

0.3.7 Sep 22, 2023
0.3.6 Sep 22, 2023
0.3.5 Apr 13, 2023
0.3.0 Mar 29, 2023
0.1.0 Mar 22, 2023

#212 in Unix APIs

27 downloads per month

GPL-3.0-only

39KB
804 lines

Hyprdock

A small utility to handle automatic monitor docking.

Breaking Changes

  • change of config directory from hyprland config directory to hyprdock directory

HardRequirements

  • acpid installed and running

Soft Requirements

These are programs that were meant to be used with hyprdock, however, the toml allows you to specify the commands you would like to run. So feel free to test out other programs.

  • Hyprland
  • swaylock
  • systemd

behavior and features

  • server mode
    • if there is a monitor connected and you close the laptop lid, the laptop will be stopped from suspending and instead uses the external monitor
    • without a monitor connected, closing the lid will suspend the laptop
    • the name for the monitor is the first monitor specified in the hyprland.conf
  • external: switches to external monitor only
  • internal: switches to internal monitor only
  • extend: extends monitors
  • mirror: mirrors monitors
  • export: save your current monitor configuration
    optional name parameter -> save configuration with specific name
  • import: import a stored configuration
    optional name parameter -> load configuration with specific name

Example config

path needs to be $HOME/.config/hypr/hyprdock.toml

monitor_name = "eDP-1"
open_bar_command = "eww open bar"
close_bar_command = "eww close-all"
reload_bar_command = "eww reload"
suspend_command = "systemctl suspend"
lock_command = "swaylock -c 000000"
utility_command = "playerctl --all-players -a pause"
get_monitors_command = "hyprctl monitors"
enable_internal_monitor_command = "hyprctl keyword monitor eDP-1,highrr,0x0,1"
disable_internal_monitor_command = "hyprctl keyword monitor eDP-1,disabled"
enable_external_monitor_command = "hyprctl keyword monitor ,highrr,0x0,1"
disable_external_monitor_command = "hyprctl keyword monitor ,disabled"
extend_command = "hyprctl keyword monitor ,highrr,1920x0,1"
mirror_command = "hyprctl keyword monitor ,highrr,0x0,1"
wallpaper_command = "hyprctl dispatch hyprpaper"
css_string = ""

multiple commands in 1 line

# make sure to leave a blank space between the start and end of the ;;, which marks the end and start of commands.
utility_command = "yourcommand args ;; yourothercommand args"

extend and mirror

You can specify which should be the default command after plugging in monitors or opening the laptop lid when an external monitor is still connected:

default_external_command = "extend" # or "mirror"

When are specific functions called?

  • open_bar_command => used to open new bars on new monitors
  • close_bar_command => used to close a bugged eww bar
  • reload_bar_command => used to remove graphical errors with eww after re-enabling internal monitor
  • suspend_command => used to suspend (on lid close without external monitor)
  • lock_command => used to lock screen (on lid close without external monitor)
  • utility_command => used before locking -> stop music etc
  • get_monitors_command => used to check if external monitors are attached
  • enable_internal_monitor_command => run after using internal only or opening the laptop lid after using external monitor only
  • disable_internal_monitor_command => run after using external only or closing laptop lid with external monitor attached
  • enable_external_monitor_command => run after disabling internal monitor or pluggin in an external monitor
  • disable_external_monitor_command => run after using internal only or unplugging an external monitor
  • extend_command => run after using extend or default function for external monitors
  • mirror_command => run after using mirror or default function for external monitors
  • wallpaper_command => run after plugging in a monitor

CSS

By default hyprdock uses your system gtk4 theme.
The style can be configured with your own CSS file.
Just overwrite the css_string variable in the toml configuration file.

List of IDs

  • MainWindow
  • MainBox
  • InternalButton
  • ExternalButton
  • ExtendButton
  • MirrorButton
  • ExportButton

Dependencies

~18MB
~428K SLoC