#!/bin/sh # List GNOME `dconf` keys that are live but not described by ~/.config/gnome-settings/*.ini set -eu # Keep in sync with the `RESET_PATHS` in ~/.local/bin/restore-gnome FILTER='^(org/gnome/|org/gtk/|org/freedesktop/(ibus|tracker)/|ca/desrt/|system/)' DIR="${XDG_CONFIG_HOME:-$HOME/.config}/gnome-settings" flat() { awk '/^\[/ { s = substr($0, 2, length($0) - 2); next } /^[A-Za-z0-9][A-Za-z0-9_-]*=/ { i = index($0, "="); print s "/" substr($0, 1, i - 1) }' } live=$(mktemp) || exit 1 managed=$(mktemp) || exit 1 trap 'rm -f "$live" "$managed"' EXIT INT TERM dconf dump / | flat | grep -E "$FILTER" | sort -u > "$live" find "$DIR" -maxdepth 2 -type f -name '*.ini' -exec cat {} + \ | sed "s|/home/user|$HOME|g" \ | flat | grep -E "$FILTER" | sort -u > "$managed" echo "" echo "== Live keys NOT in the ~/.config/gnome-settings/*.ini files ==" comm -23 "$live" "$managed" echo "" echo "" echo "== Keys in the ~/.config/gnome-settings/*.ini files but NOT live ==" comm -13 "$live" "$managed" echo ""