diff --git a/hosts/pinwheel/modules/hyprland/default.nix b/hosts/pinwheel/modules/hyprland/default.nix index c3f0d45..511714e 100644 --- a/hosts/pinwheel/modules/hyprland/default.nix +++ b/hosts/pinwheel/modules/hyprland/default.nix @@ -29,7 +29,8 @@ in env = GDK_DPI_SCALE,1.5 env = XCURSOR_SIZE,64 - monitor=eDP-1, 1920x1200, 0x0, 1 + monitor=eDP-1, 1920x1200, auto-center-down, 1 + monitor=HDMI-A-1, 2560x1440@100, auto-center-up, 1 workspace = 1, monitor:HDMI-A-1 workspace = 2, monitor:HDMI-A-1 @@ -177,88 +178,5 @@ in # openGL is needed for wayland/hyprland hardware.graphics.enable = true; - - systemd.user.services.hyprland-monitors = { - # systemctl --user restart hyprland-monitors.service - # journalctl --user -u hyprland-monitors.service -e -f - unitConfig = { - Description = "handles hyprland monitor connect/disconnect"; - }; - - wantedBy = [ "graphical-session.target" ]; - requires = [ "graphical-session.target" ]; - after = [ "graphical-session.target" ]; - - path = [ - pkgs.coreutils # to include `cat` - pkgs.waybar - pkgs.hyprland - pkgs.socat - pkgs.jq - pkgs.bc - pkgs.libnotify - ]; - - script = - let - moveWSToMonitor = - monitor: first: last: - if last < first then - throw "'first' has to be less than or equal to 'last'" - else - builtins.genList ( - n: "dispatch moveworkspacetomonitor ${builtins.toString (first + n)} ${monitor}" - ) (last - first + 1); - - external = moveWSToMonitor "HDMI-A-1" 1 5; - internal = moveWSToMonitor "eDPI-1" 6 10; - onlyInternal = moveWSToMonitor "eDPI-1" 1 10; - in - '' - update() { - HDMI_STATUS=$(cat /sys/class/drm/card1-HDMI-A-1/status) - - INTERNAL_WIDTH=1920 - INTERNAL_HEIGHT=1200 - - if [ $HDMI_STATUS = "connected" ]; then - notify-send "Using external and laptop monitor" - - hyprctl keyword monitor HDMI-A-1,preferred,0x0,1 - - HDMI=$(hyprctl monitors -j | jq '.[] | select(.name=="HDMI-A-1")') - HDMI_WIDTH=$(echo $HDMI | jq .width) - HDMI_HEIGHT=$(echo $HDMI | jq .height) - - INTERNAL_POS_X=$(echo "($HDMI_WIDTH - $INTERNAL_WIDTH) / 2" | bc) - if (( $(echo "$INTERNAL_POS_X < 0" | bc) )); then INTERNAL_POS_X=0; fi - INTERNAL_POS_Y=$HDMI_HEIGHT - - hyprctl keyword monitor eDP-1,$INTERNAL_WIDTH"x"$INTERNAL_HEIGHT,$INTERNAL_POS_X"x"$INTERNAL_POS_Y,1 - hyprctl --batch "${lib.strings.concatStringsSep ";" (external ++ internal)}" - else - notify-send "Using only laptop monitor" - - hyprctl --batch "keyword monitor HDMI-A,disable; keyword monitor eDP-1,$INTERNAL_WIDTH"x"$INTERNAL_HEIGHT,0x0,1" - hyprctl --batch "${lib.strings.concatStringsSep ";" onlyInternal}" - fi - } - - handle() { - case $1 in - monitoradded\>\>*|monitorremoved\>\>*) - echo "handling event: \"$1\"" - update ;; - esac - } - - echo "Starting service with instance \"$HYPRLAND_INSTANCE_SIGNATURE\"" - - # Do initial configuration - update - - socat -U - UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done - ''; - }; }; }