refactor(iso-script): improve flexibility and add new images (#336)

* refactor(iso-script): improve flexibility and add new images

- Add associative array for image configurations
- Include new images: aurora, cosmic, server-zfs
- Dynamically generate desktop options
- Simplify logic for adding parameters to image name
- Improve handling of specific desktop options (dx, asus, surface)
- Enhance code modularity for easier future modifications
- Update VARIANT selection logic for all images

BREAKING CHANGE: The script now uses a new configuration structure for image options, which may require updates to any external dependencies or documentation referencing the old script structure. New images have been added and VARIANT selection has been modified for existing images.

* fix(iso-script): enable ASUS support for Silverblue and Kinoite
This commit is contained in:
HryshcIlya
2024-07-29 09:11:13 +05:00
committed by GitHub
parent be1effa83d
commit e500f078ef

View File

@@ -3,6 +3,7 @@
if ! command -v podman &> /dev/null if ! command -v podman &> /dev/null
then then
echo "Podman is not installed, install it to use this script." echo "Podman is not installed, install it to use this script."
exit 1
fi fi
function is_yes { function is_yes {
@@ -12,97 +13,76 @@ function is_yes {
esac esac
} }
desktop_options=("kinoite" "cinnamon" "bluefin" "silverblue" "sericea" "wayblue-wayfire" "wayblue-sway" "wayblue-river" "wayblue-hyprland") # Define image configurations
desktop_options_asus=("silverblue" "kinoite") declare -A image_configs=(
["server"]="Server"
["server-zfs"]="Server"
["silverblue"]="Silverblue:asus"
["kinoite"]="Kinoite:asus"
["bluefin"]="Silverblue:dx"
["sericea"]="Sericea"
["wayblue-wayfire"]="Sericea"
["wayblue-sway"]="Sericea"
["wayblue-river"]="Sericea"
["wayblue-hyprland"]="Sericea"
["cinnamon"]="Silverblue"
["aurora"]="Kinoite:dx:asus:surface"
["cosmic"]="Silverblue"
)
image_name="" image_name=""
additional_params=""
variant=""
read -p "Do you need user namespaces? (yes/No): " use_userns # Determine if it's a server or desktop
read -p "Do you use an Asus laptop? (yes/No): " is_asus read -p "Is this for a server? (yes/No): " is_server
read -p "Do you use Nvidia? (yes/No): " use_nvidia if is_yes "$is_server"; then
if is_yes "$is_asus"; then read -p "Do you need ZFS support? (yes/No): " use_zfs
image_name=$(is_yes "$use_zfs" && echo "server-zfs" || echo "server")
variant=${image_configs[$image_name]}
else
# For desktops, present all non-server options
desktop_options=($(for key in "${!image_configs[@]}"; do [[ $key != server* ]] && echo "$key"; done | sort))
echo "Select a desktop:" echo "Select a desktop:"
select opt in "${desktop_options_asus[@]}"; do select opt in "${desktop_options[@]}"; do
case $opt in if [[ " ${desktop_options[@]} " =~ " ${opt} " ]]; then
"silverblue") image_name=$opt
image_name+="silverblue" IFS=':' read -r variant options <<< "${image_configs[$opt]}"
break; break
;; else
"kinoite") echo "Invalid option"
image_name+="kinoite" fi
break;
;;
*) echo "Invalid option";;
esac
done done
image_name+="-asus" # Ask specific questions based on the chosen desktop
if is_yes "$use_nvidia"; then if [[ $options == *"dx"* ]]; then
image_name+="-nvidia" read -p "Do you need Developer Experience (dx)? (yes/No): " use_dx
fi is_yes "$use_dx" && additional_params+="-dx"
else
read -p "Is this for a server? (yes/No): " is_server
if is_yes "$is_server"; then
image_name+="server"
else
echo "Select a desktop:"
select opt in "${desktop_options[@]}"; do
case $opt in
"silverblue")
image_name+="silverblue"
break;
;;
"kinoite")
image_name+="kinoite"
break;
;;
"cinnamon")
image_name+="cinnamon"
break;
;;
"sericea")
image_name+="sericea"
break;
;;
"bluefin")
image_name+="bluefin"
break;
;;
"wayblue-river")
image_name+="wayblue-river"
break;
;;
"wayblue-sway")
image_name+="wayblue-sway"
break;
;;
"wayblue-hyprland")
image_name+="wayblue-hyprland"
break;
;;
"wayblue-wayfire")
image_name+="wayblue-wayfire"
break;
;;
*) echo "Invalid option";;
esac
done
fi fi
if is_yes "$use_nvidia"; then if [[ $options == *"asus"* ]]; then
image_name+="-nvidia" read -p "Do you use an Asus laptop? (yes/No): " is_asus
else is_yes "$is_asus" && additional_params+="-asus"
image_name+="-main" fi
if [[ $options == *"surface"* && $additional_params != *"-asus"* ]]; then
read -p "Do you use a Microsoft Surface device? (yes/No): " is_surface
is_yes "$is_surface" && additional_params+="-surface"
fi fi
fi fi
if is_yes "$use_userns"; then # Ask about Nvidia for all options
image_name+="-userns" read -p "Do you use Nvidia? (yes/No): " use_nvidia
fi is_yes "$use_nvidia" && additional_params+="-nvidia" || additional_params+="-main"
image_name+="-hardened" # Ask about user namespaces for all options
read -p "Do you need user namespaces? (yes/No): " use_userns
is_yes "$use_userns" && additional_params+="-userns"
command="sudo podman run --rm --privileged --volume .:/build-container-installer/build ghcr.io/jasonn3/build-container-installer:latest IMAGE_REPO=ghcr.io/secureblue IMAGE_NAME=$image_name VERSION=40 IMAGE_TAG=latest" image_name+="$additional_params-hardened"
command="sudo podman run --rm --privileged --volume .:/build-container-installer/build ghcr.io/jasonn3/build-container-installer:latest IMAGE_REPO=ghcr.io/secureblue IMAGE_NAME=$image_name VERSION=40 IMAGE_TAG=latest VARIANT=$variant"
echo "Command to execute:" echo "Command to execute:"
echo "$command" echo "$command"