qs: a new action

This commit is contained in:
2025-12-23 22:13:04 +01:00
parent af0f4c83ba
commit 7e5dba2118
3 changed files with 47 additions and 35 deletions
@@ -85,7 +85,7 @@ Item {
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
hoverEnabled: true hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.MiddleButton acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
onEntered: { onEntered: {
if (windowTitle.implicitWidth > titleContainer.width) if (windowTitle.implicitWidth > titleContainer.width)
windowTitle.x = titleContainer.width - windowTitle.implicitWidth; windowTitle.x = titleContainer.width - windowTitle.implicitWidth;
@@ -99,6 +99,8 @@ Item {
Quickshell.execDetached(["niri", "msg", "action", "close-window"]); Quickshell.execDetached(["niri", "msg", "action", "close-window"]);
else if (mouse.button === Qt.LeftButton) else if (mouse.button === Qt.LeftButton)
Quickshell.execDetached(["niri", "msg", "action", "center-window"]); Quickshell.execDetached(["niri", "msg", "action", "center-window"]);
else if (mouse.button === Qt.RightButton)
Quickshell.execDetached(["niri", "msg", "action", "maximize-window-to-edges"]);
} }
onWheel: function(wheel) { onWheel: function(wheel) {
if (wheel.angleDelta.y > 0) if (wheel.angleDelta.y > 0)
+43 -33
View File
@@ -1,10 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Description: # Description:
# Select which GPU to use for rendering for Hyprland and Niri. # Select which GPU to use for rendering by Hyprland and Niri.
# #
# envs exported: # Envs exported:
# HYPR_AQ_DRM_DEVICES - Colon-separated list of DRM device paths for Hyprland's aq_drm # HYPR_AQ_DRM_DEVICES - Colon-separated list of DRM device paths for Hyprland's AQ_DRM_DEVICES env
# BRIGHTNESSCTL_DEVICE - Device identifier for brightnessctl # BRIGHTNESSCTL_DEVICE - Device identifier for brightnessctl
# Constants # Constants
@@ -19,36 +19,36 @@ nvidia_path=""
amd_path="" amd_path=""
for link in /dev/dri/by-path/*-card; do for link in /dev/dri/by-path/*-card; do
[[ -e "$link" ]] || continue [[ -e "$link" ]] || continue
card="$(readlink -f "$link")" card="$(readlink -f "$link")"
vfile="/sys/class/drm/$(basename "$card")/device/vendor" vfile="/sys/class/drm/$(basename "$card")/device/vendor"
[[ -r "$vfile" ]] || continue [[ -r "$vfile" ]] || continue
vendor="$(cat "$vfile")" vendor="$(cat "$vfile")"
case "$vendor" in case "$vendor" in
0x10de) nvidia_path="$card" ;; 0x10de) nvidia_path="$card" ;;
0x8086) intel_path="$card" ;; 0x8086) intel_path="$card" ;;
0x1002) amd_path="$card" ;; 0x1002) amd_path="$card" ;;
esac esac
done done
# Specify device for brightnessctl # Specify device for brightnessctl
# Only tested on my laptop with Intel iGPU & Nvidia dGPU # Only tested on my laptop with Intel iGPU & Nvidia dGPU
BRIGHTNESSCTL_DEVICE="auto" BRIGHTNESSCTL_DEVICE="auto"
if [[ -n "$intel_path" ]]; then if [[ -n "$intel_path" ]]; then
BRIGHTNESSCTL_DEVICE="intel_backlight" BRIGHTNESSCTL_DEVICE="intel_backlight"
elif [[ -n "$nvidia_path" ]]; then elif [[ -n "$nvidia_path" ]]; then
BRIGHTNESSCTL_DEVICE="nvidia_0" BRIGHTNESSCTL_DEVICE="nvidia_0"
fi fi
export BRIGHTNESSCTL_DEVICE export BRIGHTNESSCTL_DEVICE
# AQ_DRM_DEVICES allows multiple entries separated by colon # AQ_DRM_DEVICES allows multiple entries separated by colon
devices="" devices=""
for who in "${prefer_order[@]}"; do for who in "${prefer_order[@]}"; do
case "$who" in case "$who" in
nvidia) [[ -n "$nvidia_path" ]] && devices="${devices:+$devices:}$nvidia_path" ;; nvidia) [[ -n "$nvidia_path" ]] && devices="${devices:+$devices:}$nvidia_path" ;;
intel) [[ -n "$intel_path" ]] && devices="${devices:+$devices:}$intel_path" ;; intel) [[ -n "$intel_path" ]] && devices="${devices:+$devices:}$intel_path" ;;
amd) [[ -n "$amd_path" ]] && devices="${devices:+$devices:}$amd_path" ;; amd) [[ -n "$amd_path" ]] && devices="${devices:+$devices:}$amd_path" ;;
esac esac
done done
HYPR_AQ_DRM_DEVICES="${devices:-$default_dri_path}" HYPR_AQ_DRM_DEVICES="${devices:-$default_dri_path}"
export HYPR_AQ_DRM_DEVICES export HYPR_AQ_DRM_DEVICES
@@ -56,28 +56,38 @@ export HYPR_AQ_DRM_DEVICES
# But niri only supports choosing one preferred render device # But niri only supports choosing one preferred render device
primary_device="$default_dri_path" primary_device="$default_dri_path"
for who in "${prefer_order[@]}"; do for who in "${prefer_order[@]}"; do
case "$who" in case "$who" in
nvidia) [[ -n "$nvidia_path" ]] && { primary_device="$nvidia_path"; break; } ;; nvidia) [[ -n "$nvidia_path" ]] && {
intel) [[ -n "$intel_path" ]] && { primary_device="$intel_path"; break; } ;; primary_device="$nvidia_path"
amd) [[ -n "$amd_path" ]] && { primary_device="$amd_path"; break; } ;; break
esac } ;;
intel) [[ -n "$intel_path" ]] && {
primary_device="$intel_path"
break
} ;;
amd) [[ -n "$amd_path" ]] && {
primary_device="$amd_path"
break
} ;;
esac
done done
# Update niri config # Update niri config
function update_niri_config() { function update_niri_config() {
local config_file="$1" local config_file="$1"
local device_path="$2" local device_path="$2"
[[ -f "$config_file" ]] || return [[ -f "$config_file" ]] || return
if grep -qE '^\s*render-drm-device\s+"[^"]+"' "$config_file"; then if grep -qE '^\s*render-drm-device\s+"[^"]+"' "$config_file"; then
local current local current
current="$(grep -E '^\s*render-drm-device\s+"[^"]+"' "$config_file" | sed -E 's/^\s*render-drm-device\s+"([^"]+)".*/\1/')" current="$(grep -E '^\s*render-drm-device\s+"[^"]+"' "$config_file" | sed -E 's/^\s*render-drm-device\s+"([^"]+)".*/\1/')"
[[ "$current" == "$device_path" ]] && return [[ "$current" == "$device_path" ]] && return
sed -i -E "s|^(\s*render-drm-device\s+)\"[^\"]+\"|\1\"$device_path\"|" "$config_file" sed -i -E "s|^(\s*render-drm-device\s+)\"[^\"]+\"|\1\"$device_path\"|" "$config_file"
else else
printf '\ndebug {\nrender-drm-device "%s"\n}\n' "$device_path" >> "$config_file" printf '\ndebug {\nrender-drm-device "%s"\n}\n' "$device_path" >>"$config_file"
fi fi
} }
update_niri_config "$niri_config_file" "$primary_device" update_niri_config "$niri_config_file" "$primary_device"