gnome-shell/tools/toolbox/create-toolbox.sh
Florian Müllner b739375bbd tools/toolbox: Set up first toolbox as default
Setting up more than one gnome-shell toolbox is uncommon, and users
shouldn't have to specify --set-default for other tools to pick the
right default.

It would be possible to detect the number of containers that were
created from the shell toolbox image, but the far easier option is
to just set up the first container as default.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2935>
2023-12-01 15:58:21 +00:00

182 lines
3.7 KiB
Bash
Executable File

#!/bin/sh
# vi: sw=2 ts=4
set -e
TOOLBOX_IMAGE=registry.gitlab.gnome.org/gnome/gnome-shell/toolbox
DEFAULT_NAME=gnome-shell-devel
CONFIG_FILE=${XDG_CONFIG_HOME:-$HOME/.config}/gnome-shell-toolbox-tools.conf
usage() {
cat <<-EOF
Usage: $(basename $0) [OPTION…]
Create a toolbox for gnome-shell development
Options:
-n, --name=NAME Create container as NAME instead of the
default "$DEFAULT_NAME"
-v, --version=VERSION Create container for stable version VERSION
(like 44) instead of the main branch
-r, --replace Replace an existing container
-c, --classic Set up support for GNOME Classic
-b, --builder Set up GNOME Builder configuration
--locales=LOCALES Enable support for additional locales LOCALES
--skip-mutter Do not build mutter
--set-default Set as default for other gnome-shell
toolbox tools
-h, --help Display this help
EOF
}
die() {
echo "$@" >&2
exit 1
}
toolbox_run() {
toolbox run --container $NAME "$@"
}
install_extra_packages() {
local -a pkgs
pkgs+=( ${LOCALES[@]/#/glibc-langpack-} )
[[ $SETUP_CLASSIC ]] && pkgs+=( gnome-menus )
[[ ${#pkgs[@]} > 0 ]] &&
toolbox_run su -c "dnf install -y ${pkgs[*]}"
true
}
create_builder_config() {
local container_id=$(podman container inspect --format='{{.Id}}' $NAME)
local top_srcdir=$(realpath $(dirname $0)/../..)
local wayland_display=builder-wayland-0
cat >> $top_srcdir/.buildconfig <<-EOF
[toolbox-$NAME]
name=$NAME Toolbox
runtime=podman:$container_id
prefix=/usr
run-command=dbus-run-session gnome-shell --nested --wayland-display=$wayland_display
[toolbox-$NAME.runtime_environment]
WAYLAND_DISPLAY=$wayland_display
G_MESSAGES_DEBUG=GNOME Shell
XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
EOF
}
setup_classic() {
local branch=${VERSION:+gnome-}${VERSION:-main}
toolbox_run /usr/libexec/install-meson-project.sh \
--prepare "git submodule update --init" \
-Dclassic_mode=true \
https://gitlab.gnome.org/GNOME/gnome-shell-extensions.git $branch
}
set_default() {
mkdir -p $(dirname $CONFIG_FILE)
echo DEFAULT_TOOLBOX=$NAME > $CONFIG_FILE
}
TEMP=$(getopt \
--name $(basename $0) \
--options 'n:v:rcbh' \
--longoptions 'name:' \
--longoptions 'version:' \
--longoptions 'replace' \
--longoptions 'classic' \
--longoptions 'builder' \
--longoptions 'locales:' \
--longoptions 'skip-mutter' \
--longoptions 'set-default' \
--longoptions 'help' \
-- "$@")
eval set -- "$TEMP"
unset TEMP
NAME=$DEFAULT_NAME
LOCALES=()
# set up first toolbox as default
[ ! -f $CONFIG_FILE ] && SET_DEFAULT=1
while true; do
case "$1" in
-n|--name)
NAME="$2"
shift 2
;;
-v|--version)
VERSION="$2"
shift 2
;;
-r|--replace)
REPLACE=1
shift
;;
-c|--classic)
SETUP_CLASSIC=1
shift
;;
-b|--builder)
SETUP_BUILDER=1
shift
;;
--skip-mutter)
SKIP_MUTTER=1
shift
;;
--set-default)
SET_DEFAULT=1
shift
;;
--locales)
IFS=" ," LOCALES+=($2)
shift 2
;;
-h|--help)
usage
exit 0
;;
--)
shift
break
;;
esac
done
TAG=${VERSION:-main}
if podman container exists $NAME; then
[[ $REPLACE ]] ||
die "Container $NAME already exists and --replace was not specified"
toolbox rm --force $NAME
fi
podman pull $TOOLBOX_IMAGE:$TAG
toolbox create --image $TOOLBOX_IMAGE:$TAG $NAME
install_extra_packages
[[ $SKIP_MUTTER ]] || toolbox_run update-mutter
[[ $SETUP_CLASSIC ]] && setup_classic
[[ $SETUP_BUILDER ]] && create_builder_config
[[ $SET_DEFAULT ]] && set_default