79 lines
2.2 KiB
Bash
Executable File
79 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Paths
|
|
TEMPLATE_FILE="$HOME/.config/niri/config.tmpl.kdl"
|
|
COLORS_FILE="$HOME/.config/niri/colors.conf"
|
|
OUTPUT_FILE="$HOME/.config/niri/config.kdl"
|
|
|
|
# Function to generate config
|
|
generate_config() {
|
|
echo "Regenerating niri config..."
|
|
|
|
# Check if colors file exists
|
|
if [[ ! -f "$COLORS_FILE" ]]; then
|
|
echo "Colors file not found: $COLORS_FILE"
|
|
return 1
|
|
fi
|
|
|
|
# Check if template file exists
|
|
if [[ ! -f "$TEMPLATE_FILE" ]]; then
|
|
echo "Template file not found: $TEMPLATE_FILE"
|
|
return 1
|
|
fi
|
|
|
|
# Check if template file is not empty
|
|
if [[ ! -s "$TEMPLATE_FILE" ]]; then
|
|
echo "Template file is empty: $TEMPLATE_FILE"
|
|
return 1
|
|
fi
|
|
|
|
# Read colors and create temporary variables
|
|
declare -A colors
|
|
while IFS='=' read -r key value; do
|
|
if [[ $key =~ ^@([a-zA-Z_][a-zA-Z0-9_]*) ]]; then
|
|
color_name="${BASH_REMATCH[1]}"
|
|
color_value=$(echo "$value" | tr -d ' ')
|
|
colors["$color_name"]="$color_value"
|
|
fi
|
|
done < "$COLORS_FILE"
|
|
|
|
# Create temporary file for atomic write
|
|
TEMP_FILE="${OUTPUT_FILE}.tmp"
|
|
|
|
# Copy template to temporary file
|
|
if ! cp "$TEMPLATE_FILE" "$TEMP_FILE"; then
|
|
echo "Failed to copy template file"
|
|
rm -f "$TEMP_FILE"
|
|
return 1
|
|
fi
|
|
|
|
# Replace @color_name with actual color values
|
|
for color_name in "${!colors[@]}"; do
|
|
if ! sed -i "s/@${color_name}/${colors[$color_name]}/g" "$TEMP_FILE"; then
|
|
echo "Failed to substitute colors"
|
|
rm -f "$TEMP_FILE"
|
|
return 1
|
|
fi
|
|
done
|
|
|
|
# Verify the temporary file is not empty
|
|
if [[ ! -s "$TEMP_FILE" ]]; then
|
|
echo "Generated config is empty, not overwriting existing config"
|
|
rm -f "$TEMP_FILE"
|
|
return 1
|
|
fi
|
|
|
|
# Atomically move temp file to final location
|
|
if mv "$TEMP_FILE" "$OUTPUT_FILE"; then
|
|
echo "Config regenerated successfully!"
|
|
return 0
|
|
else
|
|
echo "Failed to move config to final location"
|
|
rm -f "$TEMP_FILE"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Generate config once on startup
|
|
generate_config
|