#!/bin/bash
# Desc: Writes keys from dconf dump
# Purpose: Applying custom dconf dump without clobbering other keys
# Usage: bkdconfwf [file]
# Note: Useful if 'dconf load [file]' wipes existing settings.
# Yell, Die, Try Three-Fingered Claw technique
# Ref/Attrib: https://stackoverflow.com/a/25515370
yell() { echo "$0: $*" >&2; }
die() { yell "$*"; exit 111; }
try() { "$@" || die "cannot $*"; }
#declare -A LG_AA # Associative Array for dconf
and
# Process input file - save & pairs to LG_AA
FILEIN="$1"
cat "$FILEIN" | while read line; do
yell "Begin processing of:$line";
if [[ "$line" == "" ]]; then # Check for non-blank line
yell "Blank line detected.";
elif [[ "$line" =~ ^"["(.*)"]"$ ]]; then # Check for bracket-enclosed string (new line group)
yell "New line group detected at line:$line";
# Note start of new line group
lgNum=0
# Extract path
lgDir="$line";
lgDir="${lgDir#[*}"; # See [2]
lgDir="${lgDir%*]}"; # See [2]
yell "Path is:$lgDir";
elif [[ "$line" =~ (.*)"="(.*) ]]; then # Check for key=value pair
yell "DEBUG:Key value pair detected:$line";
# Extract key
key="${line%%=*}"; # See [1,3]
yell "Key extracted:$key";
# Extract value
value="${line#*=}"; # See [1,3]
yell "Value extracted:$value";
# Add = to associative array LG_AA
#yell "DEBUG:LG_AA old:$LG_AA";
#yell "DEBUG:lgDir:$lgDir";
#yell "DEBUG:value:$value";
#LG_AA["$lgDir/$key"]+="'$value' ";
#yell "DEBUG:LG_AA new:${LG_AA[@]}";
# Apply keyvalue pair
try dconf write "/$lgDir/$key" "$value";
else
yell "ERROR:Unrecognized string detected."
fi;
# Increment line group counter
((lgNum++))
yell "DEBUG:line group number:$lgNum"
yell "Finished processing of:$line";
yell "=============================";
done
# Ref/Attrib
# [1] How to extract substrings around specific character using parameter expansion. chepner. https://stackoverflow.com/a/15149278 https://stackoverflow.com/questions/15148796/get-string-after-character#comment43744397_15149278
# [2] How to extract string from brackets. Alex Howansky. https://stackoverflow.com/a/7209856
# [3] Advanced Bash-Scripting Guide, section 10.1 Manipulating Strings http://tldp.org/LDP/abs/html/string-manipulation.html