feat(prvt):Add private submodule for private executable code
[BK-2020-03.git] / unitproc / bkdconfwf
1 #!/bin/bash
2
3 # Desc: Writes keys from dconf dump
4 # Purpose: Applying custom dconf dump without clobbering other keys
5 # Usage: bkdconfwf [file]
6 # Note: Useful if 'dconf load [file]' wipes existing settings.
7
8 # Yell, Die, Try Three-Fingered Claw technique
9 # Ref/Attrib: https://stackoverflow.com/a/25515370
10 yell() { echo "$0: $*" >&2; }
11 die() { yell "$*"; exit 111; }
12 try() { "$@" || die "cannot $*"; }
13
14 #declare -A LG_AA # Associative Array for dconf <dir/key> and <value>
15
16 # Process input file - save <dir/key> & <value> pairs to LG_AA
17 FILEIN="$1"
18 cat "$FILEIN" | while read line; do
19 yell "Begin processing of:$line";
20 if [[ "$line" == "" ]]; then # Check for non-blank line
21 yell "Blank line detected.";
22 elif [[ "$line" =~ ^"["(.*)"]"$ ]]; then # Check for bracket-enclosed string (new line group)
23 yell "New line group detected at line:$line";
24 # Note start of new line group
25 lgNum=0
26 # Extract path
27 lgDir="$line";
28 lgDir="${lgDir#[*}"; # See [2]
29 lgDir="${lgDir%*]}"; # See [2]
30 yell "Path is:$lgDir";
31 elif [[ "$line" =~ (.*)"="(.*) ]]; then # Check for key=value pair
32 yell "DEBUG:Key value pair detected:$line";
33 # Extract key
34 key="${line%%=*}"; # See [1,3]
35 yell "Key extracted:$key";
36 # Extract value
37 value="${line#*=}"; # See [1,3]
38 yell "Value extracted:$value";
39 # Add <path/key>=<value> to associative array LG_AA
40 #yell "DEBUG:LG_AA old:$LG_AA";
41 #yell "DEBUG:lgDir:$lgDir";
42 #yell "DEBUG:value:$value";
43 #LG_AA["$lgDir/$key"]+="'$value' ";
44 #yell "DEBUG:LG_AA new:${LG_AA[@]}";
45 # Apply keyvalue pair
46 try dconf write "/$lgDir/$key" "$value";
47 else
48 yell "ERROR:Unrecognized string detected."
49 fi;
50 # Increment line group counter
51 ((lgNum++))
52 yell "DEBUG:line group number:$lgNum"
53 yell "Finished processing of:$line";
54 yell "=============================";
55 done
56
57 # Ref/Attrib
58 # [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
59 # [2] How to extract string from brackets. Alex Howansky. https://stackoverflow.com/a/7209856
60 # [3] Advanced Bash-Scripting Guide, section 10.1 Manipulating Strings http://tldp.org/LDP/abs/html/string-manipulation.html