2023-05-30 22:07:01 +00:00
#!/bin/bash
################################################################################
#
# opensuse-personalizer.sh
# Interactive post-install setup script for OpenSUSE installations
#
################################################################################
################################################################################
#
# Constants
#
################################################################################
2023-06-02 15:46:34 +00:00
########################################
# OpenSUSE patterns
PATTERNS = (
# (Base system)
patterns-base-apparmor
patterns-base-base
patterns-base-enhanced_base
# (Desktop environment)
patterns-gnome-gnome_basic
)
2023-05-30 22:07:01 +00:00
########################################
# Zypper packages
# To remove
2023-06-02 12:50:54 +00:00
RM = (
2023-06-02 18:42:00 +00:00
yast2-*
2023-06-02 12:50:54 +00:00
)
2023-05-30 22:07:01 +00:00
# To remove (and prevent reinstallation of)
2023-06-02 12:50:54 +00:00
AL = (
2023-06-02 18:42:00 +00:00
gnome-clocks gnome-packagekit gnome-software tigervnc xterm yast2
2023-06-02 12:50:54 +00:00
)
2023-05-30 22:07:01 +00:00
# To install
2023-06-02 12:50:54 +00:00
IN = (
# (Necessary packages)
2023-06-02 15:46:34 +00:00
git-core flatpak opi
2023-06-02 12:50:54 +00:00
# (Theming)
2023-06-02 12:53:09 +00:00
papirus-icon-theme fira-code-fonts gdouros-symbola-fonts
2023-06-02 12:50:54 +00:00
# (Shell utilities)
2023-06-02 16:39:08 +00:00
fish fzf ispell zenity fortune toilet cowsay wmctrl libnotify-tools
2023-06-02 12:50:54 +00:00
# (Programs)
emacs inkscape gimp shotcut audacity geary nextcloud-desktop steam blender
# (GNOME utilities)
2023-06-02 16:39:08 +00:00
gnome-session-wayland gnome-characters gnome-disk-utility gnome-font-viewer gnome-dictionary gnome-logs gnome-screenshot gnome-weather eog dconf-editor baobab totem menulibre Fragments
2023-06-02 12:50:54 +00:00
# (Misc.)
distribution-logos-openSUSE distribution-logos-openSUSE-icons distribution-logos-openSUSE-Tumbleweed
)
2023-05-30 22:07:01 +00:00
########################################
# Flatpak packages
2023-06-02 12:50:54 +00:00
FLATPAK_PACKAGES = (
com.discordapp.Discord
com.spotify.Client
com.github.tchx84.Flatseal
org.nickvision.tagger
)
2023-05-30 22:07:01 +00:00
########################################
# GNOME extensions
2023-06-02 12:50:54 +00:00
GNOME_EXTENSIONS = (
AlphabeticalAppGrid@stuarthayhurst
color-picker@tuberry
places-menu@gnome-shell-extensions.gcampax.github.com
)
2023-05-30 22:07:01 +00:00
########################################
2023-06-02 15:46:34 +00:00
# URLs
2023-06-02 18:42:18 +00:00
PACKMAN_REPO_URL = "https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed/"
2023-06-02 15:46:34 +00:00
FLATHUB_REMOTE_URL = "https://flathub.org/repo/flathub.flatpakrepo"
PERSONALIZER_REPO_URL = "https://gitlab.com/jessieh/opensuse-personalizer.git"
########################################
# Directories and files
2023-05-30 22:07:01 +00:00
2023-06-02 15:46:34 +00:00
PERSONALIZER_REPO_DIR = /tmp/opensuse-personalizer
2023-05-30 22:07:01 +00:00
################################################################################
#
# Pre-setup prompts
#
################################################################################
########################################
# Pre-setup
# Ensure we're not running as root
2023-06-02 12:50:54 +00:00
if [ " ${ EUID } " = = 0 ] ; then
2023-05-30 22:07:01 +00:00
echo "DO NOT RUN THIS SCRIPT AS ROOT!"
echo "Please run this script as a regular user."
exit 1
fi
2023-06-02 19:22:54 +00:00
# Ensure PackageKit is not running so that it doesn't interrupt us
sudo systemctl stop packagekit
2023-06-02 15:46:34 +00:00
# Ensure "dialog" is installed
echo "Installing dialog utility..."
sudo zypper --non-interactive in dialog
2023-05-30 22:07:01 +00:00
########################################
# Prompt for system chassis
system_chassis = $( hostnamectl chassis)
function string_eq ( )
{
2023-06-02 15:46:34 +00:00
[ [ " ${ 1 } " = = " ${ 2 } " ] ] && echo ON || echo OFF
2023-05-30 22:07:01 +00:00
}
function prompt_chassis_type ( )
{
2023-06-02 15:46:34 +00:00
entry = $( dialog --title "Chassis Type" --stdout --no-cancel --erase-on-exit \
--radiolist "Confirm the chassis type for this system:" 0 0 0 \
"Desktop" "Stationary form factor" $( string_eq " ${ system_chassis } " "desktop" ) \
"Laptop" "Clamshell form factor" $( string_eq " ${ system_chassis } " "laptop" ) \
"Tablet" "Touchscreen form factor" $( string_eq " ${ system_chassis } " "tablet" ) \
"Convertible" "Hybrid form factor" $( string_eq " ${ system_chassis } " "convertible" ) )
2023-05-30 22:07:01 +00:00
# Ensure entry is lowercase
entry = ${ entry ,, }
case " ${ entry } " in
"desktop" | "laptop" | "convertible" | "tablet" )
if
2023-06-02 15:46:34 +00:00
dialog --title "Chassis Type" --defaultno --yesno " Use ${ entry } as chassis type? " 0 0
2023-05-30 22:07:01 +00:00
then
system_chassis = " ${ entry } "
return 0
else
return 1
fi
; ;
*)
2023-06-02 15:46:34 +00:00
dialog --title "Chassis Type" --msgbox "Please choose a chassis type for this system." 0 0
2023-05-30 22:07:01 +00:00
return 1
; ;
esac
}
# Repeatedly show the prompt until we receive valid input
until prompt_chassis_type; do : ; done
# Set chassis type
echo " Setting chassis type to ${ system_chassis } "
sudo hostnamectl chassis " ${ system_chassis } "
########################################
# Prompt for system name
2023-06-02 12:50:54 +00:00
system_name = $( hostnamectl hostname)
2023-05-30 22:07:01 +00:00
function prompt_system_name ( )
{
2023-06-02 15:46:34 +00:00
entry = $( dialog --title "System Name" --stdout --no-cancel --erase-on-exit \
--inputbox "All lowercase letters, no spaces or symbols:" 0 0 \
" ${ system_name } " )
2023-05-30 22:07:01 +00:00
# Filter all non-letter characters out of the user's entry
entry = ${ entry //[^[ : alpha : ]]/ }
# Ensure entry is lowercase
entry = ${ entry ,, }
case " ${ entry } " in
"" )
2023-06-02 15:46:34 +00:00
dialog --title "Chassis Type" --msgbox "Please enter a name for this system." 0 0
2023-05-30 22:07:01 +00:00
return 1
; ;
*)
if
2023-06-02 15:46:34 +00:00
dialog --title "Chassis Type" --defaultno --yesno " Use ${ entry } as system name? " 0 0
2023-05-30 22:07:01 +00:00
then
system_name = " ${ entry } "
return 0
else
return 1
fi
; ;
esac
}
# Repeatedly show the prompt until we receive valid input
until prompt_system_name; do : ; done
# Set hostname and pretty hostname
echo " Setting hostname to ${ system_name } ... "
sudo hostnamectl hostname " ${ system_name } "
echo " Setting pretty hostname to ${ system_name ^ } "
sudo hostnamectl hostname --pretty " ${ system_name ^ } "
########################################
# Prompt for optional additions
optional_additions = ""
function prompt_optional_additions ( )
{
2023-06-02 15:46:34 +00:00
ENTRY = $( dialog --title "Optional Additions" --stdout --no-cancel --single-quoted --output-separator '|' \
--checklist "Select any additional configuration changes that you would like applied to the system:" 0 0 0 \
"Xournal++" "Install Xournal++ for taking handwritten notes" OFF \
"EasyEffects" "Install EasyEffects for applying effects (e.g. equalizers) to system audio devices" OFF \
2023-06-02 16:14:32 +00:00
"Media Control Key Shortcuts" "Set up media control keyboard shortcuts (for systems without dedicated media control keys)" OFF \
"Power Button Screen Lock Override" "Override the power button's default behavior with a screen lock shortcut (for tablets and some convertibles)" OFF )
2023-05-30 22:07:01 +00:00
case " ${ ENTRY } " in
"" )
if
2023-06-02 15:46:34 +00:00
dialog --keep-window --erase-on-exit --title "Chassis Type" --defaultno --yesno "Apply only baseline system configuration?" 0 0
2023-05-30 22:07:01 +00:00
then
return 0
else
return 1
fi
; ;
*)
if
2023-06-02 15:46:34 +00:00
ADDITIONS_LIST = $( echo " ${ ENTRY } " | sed "s/|/\\\\n * /g" | sed "s/'//g" )
dialog --keep-window --erase-on-exit --title "Chassis Type" --defaultno --yesno " Confirm your selection of the following additions:\n ${ ADDITIONS_LIST } " 0 0
2023-05-30 22:07:01 +00:00
then
optional_additions = " ${ ENTRY } "
return 0
else
return 1
fi
; ;
esac
}
# Repeatedly show the prompt until we receive valid input
until prompt_optional_additions; do : ; done
2023-06-02 16:14:32 +00:00
################################################################################
#
# Feature detection
#
################################################################################
2023-06-02 17:21:34 +00:00
detected_features = ( )
2023-06-02 17:20:46 +00:00
# Mobile system detection
case " ${ system_chassis } " in
"latop" | "convertible" | "tablet" )
2023-06-02 17:42:47 +00:00
detected_features += ( 'Mobile' )
2023-06-02 17:23:03 +00:00
; ;
2023-06-02 17:20:46 +00:00
esac
# x86-64-v3 CPU support detection
CPU_FLAGS = $( cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -f2)
if
echo CPU_FLAGS | awk '/avx/&&/avx2/&&/bmi1/&&/bmi2/&&/f16c/&&/fma/&&/abm/&&/movbe/&&/xsave/ {found=1} END {exit !found}'
then
2023-06-02 17:42:47 +00:00
detected_features += ( 'x86-64-v3' )
2023-06-02 17:20:46 +00:00
fi
2023-06-02 16:14:32 +00:00
# Touchpad detection
if
cat /proc/bus/input/devices | grep -i Touchpad
then
detected_features += ( 'Touchpad' )
fi
# Windows multi-boot detection
if
sudo grep menuentry /boot/grub2/grub.cfg | grep -Po ".*Windows.*"
then
detected_features += ( 'Windows' )
fi
2023-05-30 22:07:01 +00:00
################################################################################
#
# Package setup
#
################################################################################
########################################
# Package operations
echo "Setting up packages..."
2023-06-02 17:42:47 +00:00
2023-06-02 18:44:50 +00:00
sudo zypper --non-interactive install ${ PATTERNS [@] }
2023-06-02 17:42:47 +00:00
if [ [ " ${ detected_features [@] } " = = *"Mobile" * ] ] ; then
2023-06-02 18:44:50 +00:00
sudo zypper --non-interactive install patterns-desktop-mobile
2023-06-02 17:42:47 +00:00
fi
if [ [ " ${ detected_features [@] } " = = *"x86-64-v3" * ] ] ; then
2023-06-02 18:44:50 +00:00
sudo zypper --non-interactive install patterns-glibc-hwcaps-x86_64_v3
2023-06-02 17:42:47 +00:00
fi
2023-06-02 18:42:18 +00:00
sudo zypper --non-interactive remove ${ RM [@] } ${ AL [@] }
sudo zypper --non-interactive addlock ${ AL [@] }
sudo zypper --non-interactive install ${ IN [@] }
# Install any codecs not hosted by OpenSUSE
sudo zypper --non-interactive addrepo -cfp 90 " ${ PACKMAN_REPO_URL } " packman
sudo zypper --non-interactive install --from packman ffmpeg gstreamer-plugins-{ good,bad,ugly,libav} libavcodec-full
2023-05-30 22:07:01 +00:00
########################################
# Flatpak operations
echo "Setting up Flatpak remotes..."
2023-06-02 15:46:34 +00:00
2023-05-30 22:07:01 +00:00
sudo flatpak remote-add --if-not-exists flathub " ${ FLATHUB_REMOTE } "
echo "Setting up Flatpak packages..."
2023-06-02 12:50:54 +00:00
sudo flatpak install --noninteractive ${ FLATPAK_PACKAGES [@] }
2023-05-30 22:07:01 +00:00
########################################
# (OPTIONAL) Extra packages
if [ [ " ${ optional_additions } " = = *"Xournal++" * ] ] ; then
echo "Installing Xournal++..."
2023-06-02 18:44:50 +00:00
sudo zypper --non-interactive addlock texlive
sudo zypper --non-interactive install xournalpp
2023-05-30 22:07:01 +00:00
fi
if [ [ " ${ optional_additions } " = = *"EasyEffects" * ] ] ; then
echo "Installing EasyEffects..."
2023-06-02 18:44:50 +00:00
sudo zypper --non-interactive install easyeffects
2023-05-30 22:07:01 +00:00
fi
################################################################################
#
# System configuration
#
################################################################################
########################################
# GRUB configuration
# Silence GRUB
echo "Configuring GRUB..."
2023-06-02 17:48:26 +00:00
echo " # Automatically added by opensuse-personalizer.sh
2023-05-30 22:07:01 +00:00
GRUB_TIMEOUT = 0
GRUB_HIDDEN_TIMEOUT = 0
GRUB_QUIET = true
GRUB_HIDDEN_TIMEOUT_QUIET = true" | sudo tee --append /etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
########################################
# PolicyKit configuration
# Create a local policy that unlocks basic networking settings for users
echo "Configuring PolicyKit..."
sudo mkdir -p /etc/polkit/localauthority/50-local.d/
echo " [Allow users to modify system network settings]
Identity = unix-group:users
Action = org.freedesktop.NetworkManager.settings.modify.system
ResultAny = auth_admin_keep
ResultInactive = auth_admin_keep
ResultActive = yes" | sudo tee /etc/polkit/localauthority/50-local.d/10-NetworkManager.pkla
################################################################################
#
# GNOME keyboard shortcuts
#
################################################################################
echo "Configuring GNOME keyboard shortcuts..."
########################################
# Navigation
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['<Primary><Super>Left']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['<Primary><Super>Right']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "['<Primary><Shift><Super>Left']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "['<Primary><Shift><Super>Right']"
# Swap "switch applications" (grouped alt+tab) for "switch windows" (non-grouped alt+tab) shortcuts
gsettings set org.gnome.shell.window-switcher current-workspace-only false
2023-06-02 18:55:50 +00:00
gsettings set org.gnome.desktop.wm.keybindings switch-windows " $( gsettings get org.gnome.desktop.wm.keybindings switch-applications) "
gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward " $( gsettings get org.gnome.desktop.wm.keybindings switch-applications-backward) "
gsettings set org.gnome.desktop.wm.keybindings switch-applications "[]"
gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "[]"
2023-05-30 22:07:01 +00:00
########################################
# (OPTIONAL) Media
if [ [ " ${ optional_additions } " = = *"Media Control Key Shortcuts" * ] ] ; then
gsettings set org.gnome.settings-daemon.plugins.media-keys mic-mute "['<Super>Home']"
gsettings set org.gnome.settings-daemon.plugins.media-keys next "['<Control><Super>Page_Down']"
gsettings set org.gnome.settings-daemon.plugins.media-keys previous "['<Control><Super>Page_Up']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down "['<Super>Page_Down']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute "['<Super>End']"
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up "['<Super>Page_Up']"
fi
########################################
# Windows
gsettings set org.gnome.desktop.wm.keybindings close "['<Super>w']"
gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['<Super>f']"
########################################
# Custom shortcuts
# Helper function (because gsettings doesn't make this simple)
function add_custom_gnome_keybinding ( )
{
EXISTING_KEYBINDINGS = $( gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings)
KEYBINDING_INDEX = $( expr $( echo $EXISTING_KEYBINDINGS | grep -oE '[0-9]+' | sort -n | tail -n 1) + 1)
KEYBINDING_PATH = /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${ KEYBINDING_INDEX } /
2023-06-02 12:50:54 +00:00
if [ [ " $EXISTING_KEYBINDINGS " = = "@as []" ] ] ; then
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings " [' ${ KEYBINDING_PATH } '] "
else
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings " $( echo ${ EXISTING_KEYBINDINGS } | sed s/.$//) , ' ${ KEYBINDING_PATH } '] "
fi
2023-05-30 22:07:01 +00:00
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${ KEYBINDING_PATH } name " ${ 1 } "
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${ KEYBINDING_PATH } command " ${ 2 } "
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${ KEYBINDING_PATH } binding " ${ 3 } "
}
# Add custom shortcuts
add_custom_gnome_keybinding "Launch Terminal" "gnome-terminal" "<Super>Return"
add_custom_gnome_keybinding "Toggle Night Light" "gnome-toggle-night-light" "<Alt><Super>n"
# (OPTIONAL) Add custom shortcuts
2023-06-02 16:14:32 +00:00
if [ [ " ${ detected_features [@] } " = = *"Touchpad" * ] ] ; then
2023-05-30 22:07:01 +00:00
add_custom_gnome_keybinding "Toggle Touchpad Lock" "gnome-toggle-touchpad-lock" "<Alt><Super>t"
fi
if [ [ " ${ optional_additions } " = = *"Power Button Screen Lock Override" * ] ] ; then
add_custom_gnome_keybinding "Lock Screen" "gdm-lock-screen" "PowerOff"
fi
################################################################################
#
# GNOME appearance configuration
#
################################################################################
echo "Configuring GNOME appearance settings..."
gsettings set org.gnome.desktop.interface icon-theme "Papirus"
2023-06-02 12:50:54 +00:00
2023-05-30 22:07:01 +00:00
gsettings set org.gnome.desktop.interface clock-format '24h'
2023-06-02 12:50:54 +00:00
gsettings set org.gnome.desktop.interface clock-show-date true
gsettings set org.gnome.desktop.interface clock-show-weekday true
2023-05-30 22:07:01 +00:00
gsettings set org.gnome.desktop.interface font-antialiasing "rgba"
gsettings set org.gnome.desktop.interface font-name "Cantarell 10"
gsettings set org.gnome.desktop.interface document-font-name "Cantarell 10"
gsettings set org.gnome.desktop.interface monospace-font-name "Fira Code 10"
2023-06-02 12:50:54 +00:00
gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled true
gsettings set org.gnome.settings-daemon.plugins.color night-light-temperature 3700
gsettings set org.gnome.settings-daemon.plugins.color night-light-schedule-automatic false
gsettings set org.gnome.settings-daemon.plugins.color night-light-schedule-from 22
gsettings set org.gnome.settings-daemon.plugins.color night-light-schedule-to 6
2023-05-30 22:07:01 +00:00
################################################################################
#
# GNOME app folder configuration
#
################################################################################
echo "Configuring GNOME app folders..."
2023-06-02 12:50:54 +00:00
########################################
# Favorites
2023-06-02 18:55:50 +00:00
gsettings set org.gnome.shell favorite-apps "['org.gnome.Terminal.desktop', 'firefox.desktop', 'emacsclient.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Nautilus.desktop']"
2023-06-02 12:50:54 +00:00
2023-05-30 22:07:01 +00:00
########################################
# Utilities folder
UTILITIES_FOLDER_PATH = /org/gnome/desktop/app-folders/folders/Utilities/
gsettings set org.gnome.desktop.app-folders folder-children "['Utilities']"
gsettings set org.gnome.desktop.app-folders.folder:${ UTILITIES_FOLDER_PATH } name "X-GNOME-Utilities.directory"
gsettings set org.gnome.desktop.app-folders.folder:${ UTILITIES_FOLDER_PATH } translate true
2023-06-02 12:50:54 +00:00
gsettings set org.gnome.desktop.app-folders.folder:${ UTILITIES_FOLDER_PATH } categories "[]"
2023-05-30 22:07:01 +00:00
gsettings set org.gnome.desktop.app-folders.folder:${ UTILITIES_FOLDER_PATH } apps "['org.gnome.FileRoller.desktop', 'org.gnome.Characters.desktop', 'ca.desrt.dconf-editor.desktop', 'org.gnome.Dictionary.desktop', 'org.gnome.baobab.desktop', 'org.gnome.DiskUtility.desktop', 'org.gnome.Evince.desktop', 'com.github.wwmm.easyeffects.desktop', 'org.gnome.Extensions.desktop', 'com.github.tchx84.Flatseal.desktop', 'org.gnome.font-viewer.desktop', 'de.haeckerfelix.Fragments.desktop', 'org.gnome.eog.desktop', 'org.gnome.Logs.desktop', 'menulibre.desktop', 'org.gnome.Screenshot.desktop', 'gnome-system-monitor.desktop', 'org.nickvision.tagger.desktop', 'org.gnome.tweaks.desktop', 'uefi-firmware-settings.desktop', 'org.gnome.Totem.desktop']"
################################################################################
#
# GNOME extension setup
#
################################################################################
echo "Setting up GNOME extensions..."
2023-06-02 12:50:54 +00:00
for EXTENSION in " ${ GNOME_EXTENSIONS [@] } " ; do
2023-05-30 22:07:01 +00:00
busctl --user call org.gnome.Shell.Extensions /org/gnome/Shell/Extensions org.gnome.Shell.Extensions InstallRemoteExtension s ${ EXTENSION }
done
################################################################################
#
# Personal configuration files and scripts
#
################################################################################
########################################
# Emacs
2023-06-02 12:50:54 +00:00
echo "Setting up Emacs..."
# Remove any vendor-provided Emacs configuration files
rm ${ HOME } /.emacs ${ HOME } /.emacs.d/init.el
# Download Emacs configuration
EMACS_CONFIG_DIR = ${ HOME } /.config/emacs
mkdir -p ${ EMACS_CONFIG_DIR }
wget https://jessieh.net/emacs -O ${ EMACS_CONFIG_DIR } /init.el
# Enable and start Emacs daemon
systemctl --user enable emacs.service
systemctl --user start emacs.service
2023-05-30 22:07:01 +00:00
########################################
# Fish
2023-06-02 12:50:54 +00:00
echo "Setting up Fish..."
# Download Fish configuration
FISH_CONFIG_DIR = ${ HOME } /.config/fish
mkdir -p ${ FISH_CONFIG_DIR }
wget https://jessieh.net/fish -O ${ EMACS_CONFIG_DIR } /config.fish
2023-05-30 22:07:01 +00:00
2023-06-02 12:50:54 +00:00
# Set Fish as default shell
sudo chsh ${ USER } -s $( which fish)
2023-05-30 22:07:01 +00:00
########################################
# Utility scripts
echo "Installing scripts..."
2023-06-02 15:46:34 +00:00
# Clone personalizer repo containing scripts, desktop entries, etc. to temporary folder
git clone " ${ PERSONALIZER_REPO_URL } " " ${ PERSONALIZER_REPO_DIR } "
2023-06-02 16:14:32 +00:00
if [ [ " ${ detected_features [@] } " != *'Touchpad' * ] ] ; then
2023-06-02 15:46:34 +00:00
rm ${ PERSONALIZER_REPO_DIR } /scripts/gnome-toggle-touchpad-lock
2023-06-02 12:50:54 +00:00
fi
2023-06-02 16:14:32 +00:00
if [ [ " ${ detected_features [@] } " != *'Windows' * ] ] ; then
2023-06-02 15:46:34 +00:00
rm ${ PERSONALIZER_REPO_DIR } /scripts/reboot-windows
2023-05-30 22:07:01 +00:00
fi
2023-06-02 15:46:34 +00:00
chmod +x ${ PERSONALIZER_REPO_DIR } /scripts/*
sudo cp ${ PERSONALIZER_REPO_DIR } /scripts/* /usr/bin
2023-05-30 22:07:01 +00:00
########################################
# Desktop entries
echo "Installing desktop entries..."
2023-06-02 16:14:32 +00:00
if [ [ " ${ detected_features [@] } " != *'Windows' * ] ] ; then
2023-06-02 15:46:34 +00:00
rm ${ PERSONALIZER_REPO_DIR } /desktop_entries/windows.desktop
2023-05-30 22:07:01 +00:00
fi
mkdir -p ${ HOME } /.local/share/applications/
2023-06-02 15:46:34 +00:00
cp ${ PERSONALIZER_REPO_DIR } /desktop-entries/* ${ HOME } /.local/share/applications/
2023-05-30 22:07:01 +00:00
################################################################################
#
# Post-setup suggestions
#
################################################################################
2023-06-02 15:46:34 +00:00
echo "
Personalization complete!
Recommended next steps:
• Log in to Firefox Sync
• Configure Nextcloud client
2023-06-02 18:55:50 +00:00
$( if [ [ " ${ optional_additions } " = = *"EasyEffects" * ] ] ; then echo " • Install an audio device profile from" ; echo " https://autoeq.app" ; echo; fi )
2023-06-02 15:46:34 +00:00
• Install a Wireguard VPN profile from
https://mullvad.net/en/account/#/wireguard-config/?platform= linux
• Configure display settings and run 'gdm-update-display-settings'
• Run 'themer' to install/update unofficial libadwaita themes
2023-06-02 16:24:34 +00:00
A copy of these recommendations has been saved to ${ HOME } /next-steps" | tee ${ HOME } /next-steps