Greatly improved layering mechanism.

This commit is contained in:
dabruh 2022-05-29 01:44:01 +02:00
parent 442e0309b8
commit cc3af6cd80
20 changed files with 72 additions and 26 deletions

View File

@ -0,0 +1,2 @@
config.post-main-90-gaps
config.pre-main-90-abdiel

View File

@ -0,0 +1,2 @@
config.post-main-90-gaps
config.post-main-90-laptop

View File

@ -0,0 +1,7 @@
config.pre-main-00-vars
config.main
config.post-main-00-security
config.post-main-01-visuals
config.post-main-10-applets
config.post-main-10-audio
config.post-main-10-misc

View File

@ -0,0 +1,3 @@
config.post-main-01-cmus
config.post-main-01-docker
config.post-main-50-abdiel

View File

@ -0,0 +1,2 @@
config.post-main-01-cmus
config.post-main-01-docker

View File

@ -0,0 +1,4 @@
config.main
config.post-main-25
config.post-main-75
config.post-main-01-docker

View File

@ -3,5 +3,3 @@
^\.install ^\.install
^install\.sh$ ^install\.sh$
^setup_system\.sh$ ^setup_system\.sh$
^\.config\/i3\/layers
^\.config\/i3status\/layers

View File

@ -1,43 +1,71 @@
#!/bin/bash #!/bin/bash
function i3setup() { #
local file dir cfg path \ # Title: i3-config-builder
component="$1" \ # Version: 0.1.0
patterns=( # Author: dabruh
# GitLab: https://gitlab.com/dabruh
# GitHub: https://github.com/dabruh
#
# Builds an i3/i3status configuration file by merging
# multiple defined configurations in an orderly manner.
#
# The files you wish to include MUST exist under ~/.config/i3(status)/layers.
# The files MUST start with one of the defined "PATTERNS" below. However, they
# WILL NOT be read unless explicitly mentioned in a .layer file located in the
# same directory.
#
# Two .layer files are read during execution:
# - default.layer
# - $HOSTNAME.layer: This file doesn't have to exist, but will allow you to
# load a special set of files depending on the hostname of the machine which
# executes this script.
#
# The contents of the .layer files are read first, and then sorted.
#
HOSTNAME="$(hostname | cut -d. -f1)"
PATTERNS=(
"config.vars" "config.vars"
"config.pre-main" "config.pre-main"
"config.main" "config.main"
"config.post-main" "config.post-main"
) )
function i3setup() {
local file dir layers config includes path component="$1"
dir="$HOME/.config/$component" dir="$HOME/.config/$component"
cfg="$dir/config" layers="$dir/layers"
config="$dir/config"
echo "Building $component config... 🔨" echo "Building $component config... 🔨"
rm "$cfg" 2>/dev/null rm "$config" 2>/dev/null
includes=$(cat "$layers/default.layer" "$layers/$HOSTNAME.layer" 2>/dev/null | sort -u)
for pattern in "${patterns[@]}"; do for pattern in "${PATTERNS[@]}"; do
while IFS= read -r path; do for file in $includes; do
[ -z "$path" ] && continue ! [[ "$file" =~ "$pattern"* ]] && continue
file="${path##*/}" path="$layers/$file"
if ! [ -f "$path" ] && ! [ -L "$path" ]; then
echo "ERROR: Invalid path: $path"
continue
fi
echo "WRITE : '$file'." echo "WRITE : '$file'."
{ {
echo "# >>>$file" echo "# >>>$file"
cat "$path" >>"$cfg" cat "$path"
echo "# <<<$file" echo "# <<<$file"
echo echo
} >>"$cfg" } >>"$config"
done
done <<<"$(find "$dir" -maxdepth 1 -type f -name "$pattern*" | sort -n)"
done done
echo
echo "Restarting i3... 🔄"
i3 restart
echo echo
} }
i3setup i3 i3setup i3
i3setup i3status i3setup i3status
echo "Restarting i3... 🔄"
i3 restart