mirror of
https://github.com/donovanglover/nix-config.git
synced 2024-12-16 03:40:57 +01:00
meta: Change cursor size based on DPI
Now that I figured out how to change cursor size for all applications and not just a select few, restarting the X session to use a new cursor size is no longer necessary.
This commit is contained in:
commit
fcc021daa5
@ -11,10 +11,45 @@
|
||||
# respects its theming even when XDG_CURRENT_DESKTOP is not set to it
|
||||
# (through settings.ini).
|
||||
|
||||
# Note that the xcursor size is specified with:
|
||||
#
|
||||
# 1. The X server resource database (xrdb), of which cursor size is
|
||||
# only applied BEFORE your window manager starts
|
||||
# 2. The xsetroot command, which affects the cursor shown on the root
|
||||
# window (your desktop)
|
||||
# 3. The XCURSOR_SIZE environment variable, which affects the current
|
||||
# program
|
||||
#
|
||||
# There are a few things to take away from this:
|
||||
#
|
||||
# 1. The root window (desktop) cursor size MUST be changed with xsetroot
|
||||
# 2. KDE applications will honor XCURSOR_SIZE but NOT xsetroot
|
||||
# 3. GTK applications will honor xsetroot but NOT XCURSOR_SIZE
|
||||
#
|
||||
# Additionally,
|
||||
#
|
||||
# 4. SOME X applications require XCURSOR_SIZE to be set and will NOT
|
||||
# honor xsetroot
|
||||
# 5. SOME X applications require xsetroot to be set and will NOT
|
||||
# honor XCURSOR_SIZE
|
||||
#
|
||||
# So for a consistent variable cursor DPI environment, one has to set BOTH
|
||||
# xsetroot and XCURSOR_SIZE
|
||||
#
|
||||
# Note that existing windows will NOT have their X cursor size changed
|
||||
# if they don't depend on xsetroot. Because of this, and because of the
|
||||
# fact that active windows will not handle DPI changes anyway, you should
|
||||
# probably have no GUIs running when switching DPI.
|
||||
|
||||
ROFI_DPI=$(xrdb -query | grep Xft.dpi | cut -f 2)
|
||||
ROFI_SCALE=$(expr $ROFI_DPI / 96)
|
||||
ROFI_DPI_SCALE=$(awk "BEGIN { print "1/$ROFI_SCALE" }")
|
||||
|
||||
CURSOR_THEME=${XCURSOR_THEME:-breeze_cursors}
|
||||
CURSOR_SIZE=$((16 * $ROFI_SCALE))
|
||||
|
||||
xsetroot -xcf "/usr/share/icons/$CURSOR_THEME/cursors/left_ptr" "$CURSOR_SIZE"
|
||||
|
||||
env \
|
||||
XDG_CURRENT_DESKTOP="KDE" \
|
||||
QT_AUTO_SCREEN_SCALE_FACTOR="0" \
|
||||
@ -22,6 +57,7 @@ env \
|
||||
QT_SCREEN_SCALE_FACTORS="VGA-1=$ROFI_SCALE;" \
|
||||
GDK_SCALE="$ROFI_SCALE" \
|
||||
GDK_DPI_SCALE="$ROFI_DPI_SCALE" \
|
||||
XCURSOR_SIZE="$CURSOR_SIZE" \
|
||||
rofi \
|
||||
-show drun \
|
||||
-dpi "$ROFI_DPI"
|
||||
|
@ -3,6 +3,8 @@
|
||||
# Get the host width
|
||||
HOST_WIDTH=$(bspc query -T -m | jq '.rectangle.width')
|
||||
|
||||
CURSOR_THEME=${XCURSOR_THEME:-breeze_cursors}
|
||||
|
||||
# Determine the DPI based on screen width
|
||||
if [ "$HOST_WIDTH" -eq "1920" ]; then
|
||||
X_DPI=96
|
||||
@ -18,6 +20,13 @@ fi
|
||||
# If the DPI needs to be changed, change it
|
||||
if [ "$X_DPI" ]; then
|
||||
echo "Xft.dpi:$X_DPI" | xrdb -merge
|
||||
|
||||
# Change the X cursor size as well
|
||||
# NOTE: For full effect, this needs to be used in combination with XCURSOR_SIZE.
|
||||
# NOTE: ($X_DPI / 6) here means that 4k will use cursor size 32, so it will appear
|
||||
# about half the size of the 1080p cursor. If this is not what you want, use
|
||||
# cursor size 64 instead.
|
||||
xsetroot -xcf "/usr/share/icons/$CURSOR_THEME/cursors/left_ptr" "$(($X_DPI / 6))"
|
||||
fi
|
||||
|
||||
# Reload polybar with the new width / DPI
|
||||
|
Loading…
Reference in New Issue
Block a user