Skip to content

Add sync support to gsettings background path #337

@PrincParshia

Description

@PrincParshia

I have made this shell code that syncs hyprland background with gsettings background path.

-> paper.sh

#!/bin/bash

BACKEND="Hyprpaper" # ofcourse :)
# $BACKGROUND must be bound in Hyprpaper!
BACKGROUND="$HOME/.background"
DIR="$HOME/.config/hypr/scripts/paper"

uri() {
	if gsettings get org.gnome.desktop.interface color-scheme | grep -q "dark"; then
		echo "picture-uri-dark"
	else
		echo "picture-uri"
	fi
}

reload() {
	file=$(gsettings get org.gnome.desktop.background "$(uri)" | sed -E "s/^'file:\/\/|'\$//g")
	cp "$file" "$BACKGROUND"
	hyprctl hyprpaper wallpaper ",$BACKGROUND" > /dev/null 2>&1 &
}

daemon() {
	if [[ -n $(pgrep -f "paper-monitor") ]]; then
		echo "[LOG] Daemon already running!"
	else
		setsid "$DIR/paper --monitor" "$(uri)" &
		setsid "$DIR/paper --monitor-scheme" &
	fi
}


usage() {
	cat <<EOF
[LOG] Welcome to paper!
Usage: paper [arg [...]].

Arguments:
--help    |-?   |help    -| Show this help message
--reload  |-r   |reload  -| Reload $BACKEND
--uri     |-uri |uri     -| Get currently monitoring picture uri (light/dark) as color-scheme
--backend |-b   |backend -| Get the paper/background backend name
EOF
}

case "$1" in
	--reload|-r|reload)
		reload
		;;
	--uri|-uri|uri)
		uri
		;;
	--backend|-b|backend)
		echo "$BACKEND"
		;;
	"")
		daemon
		;;
	*)
		usage
		;;
esac

-> paper --monitor.sh

#!/bin/bash

DIR="$HOME/.config/hypr/scripts/paper"

monitor() {
	local current="$1"
	gsettings monitor org.gnome.desktop.background "$current" | while read -r; do
		"$DIR/paper" --reload
	done
}

monitor "$1"

-> paper --monitor-scheme.sh

#!/bin/bash

DIR="$HOME/.config/hypr/scripts/paper"

monitorScheme() {
	gsettings monitor org.gnome.desktop.interface color-scheme | while read -r; do
		"$DIR/paper" --reload

		(
			pgid=$(ps -o pgid= -p "$(pgrep -fo "paper --monitor picture-uri")" | tr -d ' ')

			if [[ -n "$pgid" ]]; then
				kill -- -"$pgid"
			fi

			setsid "$DIR/paper --monitor" "$("$DIR/paper" --uri)" &
		) &
	done
}

monitorScheme

Can anyone convert this to a C program and create a pull request? I dont know how to code C tbh.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions