commit 4d987af661125ccb8fe3119e0b318db89340e1fe Author: Jessie Hildebrandt Date: Tue May 30 18:07:01 2023 -0400 Initial commit diff --git a/.repo-assets/icon.png b/.repo-assets/icon.png new file mode 100644 index 0000000..8597525 Binary files /dev/null and b/.repo-assets/icon.png differ diff --git a/.repo-assets/icon.xcf b/.repo-assets/icon.xcf new file mode 100644 index 0000000..c3e90b7 Binary files /dev/null and b/.repo-assets/icon.xcf differ diff --git a/desktop-entries/blender.desktop b/desktop-entries/blender.desktop new file mode 100644 index 0000000..ca868fa --- /dev/null +++ b/desktop-entries/blender.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Name=Blender 2.91 +GenericName=3D modeler +Comment=3D modeling, animation, rendering and post-production +Keywords=3d;cg;modeling;animation;painting;sculpting;texturing;video editing;video tracking;rendering;render engine;cycles;game engine;python; +Exec=blender %f +Icon=blender +Terminal=false +Type=Application +Categories=3DGraphics;Graphics; +MimeType=application/x-blender; +Name[en_US.UTF-8]=Blender +X-GNOME-FullName[en_US.UTF-8]=Blender +Comment[en_US.UTF-8]=3D modeling, animation, rendering and post-production +NoDisplay=false +Path= +X-GNOME-UsesNotifications=false diff --git a/desktop-entries/calf.desktop b/desktop-entries/calf.desktop new file mode 100644 index 0000000..b09ca3e --- /dev/null +++ b/desktop-entries/calf.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Calf Plugin Pack for JACK +NoDisplay=true +Comment=Process and produce sounds using a set of plugins with JACK interface +Icon=calf +Exec=calfjackhost +Actions= +Categories=AudioVideo;Music; diff --git a/desktop-entries/com.discordapp.Discord.desktop b/desktop-entries/com.discordapp.Discord.desktop new file mode 100644 index 0000000..318bb9d --- /dev/null +++ b/desktop-entries/com.discordapp.Discord.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Discord +GenericName=Internet Messenger +Comment=All-in-one voice and text chat for gamers that's free, secure, and works on both your desktop and phone. +Icon=com.discordapp.Discord +Exec=discord-launcher +Path=/usr/bin +Actions= +Categories=InstantMessaging;Network; +StartupWMClass=discord diff --git a/desktop-entries/com.nextcloud.desktopclient.nextcloud.desktop b/desktop-entries/com.nextcloud.desktopclient.nextcloud.desktop new file mode 100644 index 0000000..8871753 --- /dev/null +++ b/desktop-entries/com.nextcloud.desktopclient.nextcloud.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Nextcloud Desktop +GenericName=Folder Sync +NoDisplay=true +Comment=Nextcloud desktop synchronization client +Icon=Nextcloud +Exec=nextcloud +Actions=Quit; +MimeType=application/vnd.nextcloud; +Categories=Utility;X-SuSE-SyncUtility; +Keywords=Nextcloud;syncing;file;sharing; + +[Desktop Action Quit] +Name=Quit Nextcloud +Exec=nextcloud --quit diff --git a/desktop-entries/com.spotify.Client.desktop b/desktop-entries/com.spotify.Client.desktop new file mode 100644 index 0000000..9f3cccf --- /dev/null +++ b/desktop-entries/com.spotify.Client.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Spotify +GenericName=Online music streaming service +Comment=Access all of your favorite music +Icon=com.spotify.Client +X-GNOME-UsesNotifications=true +Exec=spotify-launcher +Actions= +MimeType=x-scheme-handler/spotify; +Categories=Audio;AudioVideo;Music; +Keywords=Music;Player;Streaming;Online; +StartupWMClass=Spotify diff --git a/desktop-entries/emacs.desktop b/desktop-entries/emacs.desktop new file mode 100644 index 0000000..a156f0b --- /dev/null +++ b/desktop-entries/emacs.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Emacs (New Instance) +GenericName=Text Editor +NoDisplay=true +Comment=Edit text +Icon=emacs +Exec=emacs %F +Actions= +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Categories=Development;TextEditor;Utility; +StartupNotify=true +StartupWMClass=Emacs diff --git a/desktop-entries/emacsclient.desktop b/desktop-entries/emacsclient.desktop new file mode 100644 index 0000000..cb04547 --- /dev/null +++ b/desktop-entries/emacsclient.desktop @@ -0,0 +1,22 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Emacs +GenericName=Text Editor +Comment=Edit text +Icon=emacs +Exec=emacsclient -cn %F +Actions=new-window;new-instance; +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Categories=Development;TextEditor;Utility; +Keywords=emacsclient; +StartupNotify=true +StartupWMClass=Emacs + +[Desktop Action new-window] +Name=New Window +Exec=emacsclient -cn %F + +[Desktop Action new-instance] +Name=New Instance +Exec=emacs %F diff --git a/desktop-entries/fish.desktop b/desktop-entries/fish.desktop new file mode 100644 index 0000000..c5227b8 --- /dev/null +++ b/desktop-entries/fish.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=fish +GenericName=Command-line interpreter +NoDisplay=true +Icon=fish +Exec=fish +Terminal=true +Actions= +Categories=ConsoleOnly;System;System-Tools;TerminalEmulator; diff --git a/desktop-entries/org.gnome.PowerStats.desktop b/desktop-entries/org.gnome.PowerStats.desktop new file mode 100644 index 0000000..d4891c9 --- /dev/null +++ b/desktop-entries/org.gnome.PowerStats.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Power Statistics +NoDisplay=true +Comment=Observe power management +Icon=org.gnome.PowerStats +OnlyShowIn=GNOME;Unity; +Exec=gnome-power-statistics +Actions= +Categories=GNOME;GTK;Monitor;System;System-Tools; +Keywords=battery;consumption;charge; +StartupNotify=true diff --git a/desktop-entries/org.gnome.Weather.desktop b/desktop-entries/org.gnome.Weather.desktop new file mode 100644 index 0000000..f3881ae --- /dev/null +++ b/desktop-entries/org.gnome.Weather.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Weather +NoDisplay=true +Comment=Show weather conditions and forecast +Icon=org.gnome.Weather +DBusActivatable=true +Exec=gapplication launch org.gnome.Weather +Actions= +Categories=Core;GNOME;GTK;Utility;X-SuSE-DesktopUtility; +Keywords=Weather;Forecast; +StartupNotify=true diff --git a/desktop-entries/uefi-firmware-settings.desktop b/desktop-entries/uefi-firmware-settings.desktop new file mode 100644 index 0000000..c242e22 --- /dev/null +++ b/desktop-entries/uefi-firmware-settings.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=UEFI Setup +Comment=Reboot to UEFI setup +Icon=mx-boot-options +Exec=reboot-uefi +Actions= +Categories=Utility; diff --git a/desktop-entries/windows.desktop b/desktop-entries/windows.desktop new file mode 100644 index 0000000..53a214c --- /dev/null +++ b/desktop-entries/windows.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Windows +Comment=Reboot to Microsoft Windows +Icon=windows95 +Exec=reboot-windows +Actions= +Categories=Utility; diff --git a/desktop-entries/yelp.desktop b/desktop-entries/yelp.desktop new file mode 100644 index 0000000..98f42af --- /dev/null +++ b/desktop-entries/yelp.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Version=1.1 +Type=Application +Name=Help +NoDisplay=true +Comment=Get help with GNOME +Icon=org.gnome.Yelp +OnlyShowIn=GNOME;Unity; +Exec=yelp %u +Actions= +MimeType=x-scheme-handler/ghelp;x-scheme-handler/help;x-scheme-handler/info;x-scheme-handler/man; +Categories=Core;Documentation;GNOME;GTK;Utility; +Keywords=documentation;information;manual;help; +StartupNotify=true diff --git a/opensuse-personalizer.sh b/opensuse-personalizer.sh new file mode 100644 index 0000000..b368dc5 --- /dev/null +++ b/opensuse-personalizer.sh @@ -0,0 +1,488 @@ +#!/bin/bash + +################################################################################ +# +# opensuse-personalizer.sh +# Interactive post-install setup script for OpenSUSE installations +# +################################################################################ + +################################################################################ +# +# Constants +# +################################################################################ + +######################################## +# Zypper packages + +# To remove +RM= \ + libreoffice gedit + +# To remove (and prevent reinstallation of) +AL= \ + gnome-clocks gnome-packagekit gnome-software tigervnc vlc-noX xterm yast2 + +# To install +IN= \ + # (Necessary packages) \ + wget nano git-core flatpak opi \ + \ + # (Theming) \ + papirus-icon-theme fira-code-fonts \ + \ + # (Shell utilities) \ + fish fzf fortune toilet cowsay \ + \ + # (Programs) \ + emacs inkscape gimp shotcut audacity geary nextcloud-desktop steam blender \ + \ + # (GNOME utilities) \ + gnome-session-wayland gnome-characters gnome-disk-utility gnome-font-viewer gnome-dictionary gnome-logs gnome-screenshot gnome-text-editor gnome-weather gnome-tweaks eog dconf-editor baobab totem menulibre Fragments \ + \ + # (Misc.) \ + distribution-logos-openSUSE distribution-logos-openSUSE-icons distribution-logos-openSUSE-Tumbleweed + +######################################## +# Flatpak packages + +# To install +FLATPAK_PACKAGES= \ + com.discordapp.Discord \ + com.spotify.Client \ + com.github.tchx84.Flatseal \ + org.nickvision.Tagger + +######################################## +# GNOME extensions + +GNOME_EXTENSIONS= \ + AlphabeticalAppGrid@stuarthayhurst \ + color-picker@tuberry \ + places-menu@gnome-shell-extensions.gcampax.github.com + +######################################## +# Directories + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +TMP_WORKDIR="/tmp/opensuse-setup-script-workdir/" + +################################################################################ +# +# Pre-setup prompts +# +################################################################################ + +######################################## +# Pre-setup + +# Ensure we're not running as root +if [ "$EUID" == 0 ]; then + echo "DO NOT RUN THIS SCRIPT AS ROOT!" + echo "Please run this script as a regular user." + exit 1 +fi + +# Ensure zenity is installed +echo "Ensuring zenity is installed..." +sudo zypper --non-interactive in zenity + +######################################## +# Prompt for system chassis + +system_chassis=$(hostnamectl chassis) + +function string_eq () +{ + [[ "${1}" == "${2}" ]] && echo TRUE || echo FALSE +} + +function prompt_chassis_type () +{ + + entry=$(zenity --title="Chassis Type" --list --radiolist --width=200 --height=400 \ + --text="Confirm the chassis type for this system:\n" \ + --column="Selected" --column="Chassis Type" \ + $(string_eq "${system_chassis}" "desktop") "Desktop" \ + $(string_eq "${system_chassis}" "laptop") "Laptop" \ + $(string_eq "${system_chassis}" "tablet") "Tablet" \ + $(string_eq "${system_chassis}" "convertible") "Convertible") + + # Ensure entry is lowercase + entry=${entry,,} + + + case "${entry}" in + "desktop"|"laptop"|"convertible"|"tablet") + if + zenity --question --title="Chassis Type" --text="Use ${entry} as chassis type?" --default-cancel --no-wrap + then + system_chassis="${entry}" + return 0 + else + return 1 + fi + ;; + *) + zenity --warning --title="Chassis Type" --text="Please choose a chassis type for this system." --no-wrap + 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 + +system_name="mycomputer" + +function prompt_system_name () +{ + + entry=$(zenity --entry --title="System Name" --text="All lowercase letters, no spaces or symbols:" --entry-text="${system_name}") + + # Filter all non-letter characters out of the user's entry + entry=${entry//[^[:alpha:]]/} + + # Ensure entry is lowercase + entry=${entry,,} + + case "${entry}" in + "mycomputer") + zenity --warning --title="System Name" --text="Please enter a name for this system." --no-wrap + return 1 + ;; + "") + zenity --warning --title="System Name" --text="Please enter a name for this system." --no-wrap + return 1 + ;; + *) + if + zenity --question --title="System Name" --text="Use ${entry} as system name?" --default-cancel --no-wrap + 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 () +{ + + ENTRY=$(zenity --title="Optional Additions" --list --checklist --width=600 --height=440 \ + --text="Select any additional configuration changes that you would like applied to the system:\n" \ + --column="Apply" --column="Title" --column="Description" \ + FALSE "Xournal++" "Install Xournal++ for taking handwritten notes" \ + FALSE "EasyEffects" "Install EasyEffects for applying effects (e.g. equalizers) to system audio devices" \ + FALSE "Media Control Key Shortcuts" "Set up media control keyboard shortcuts (for keyboards without dedicated media control keys)" \ + FALSE "Touchpad Lock Toggle Shortcut" "Set up a touchpad lock toggle keyboard shortcut (for systems with touchpads)" \ + FALSE "Power Button Screen Lock Override" "Override the power button's default behavior with a screen lock shortcut (for tablets or convertibles)" \ + FALSE '"Reboot to Windows" Launcher' "Install a desktop entry that reboots the system to Microsoft Windows (for systems that multi-boot with Windows)") + + case "${ENTRY}" in + "") + if + zenity --question --title="Optional Additions" --text="Apply only baseline system configuration?" --default-cancel --no-wrap + then + return 0 + else + return 1 + fi + ;; + *) + if + ADDITIONS_LIST=$(echo " • ${ENTRY}" | sed "s/|/\n • /g") + zenity --question --title="Optional Additions" --text="Confirm your selection of the following additions:\n${ADDITIONS_LIST}" --default-cancel --no-wrap + 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 + +################################################################################ +# +# Package setup +# +################################################################################ + +######################################## +# Package operations + +echo "Setting up packages..." +sudo zypper --non-interactive rm ${RM} ${AL} +sudo zypper --non-interactive al ${AL} +sudo zypper --non-interactive in ${IN} + +######################################## +# Flatpak operations + +echo "Setting up Flatpak remotes..." +FLATHUB_REMOTE=https://flathub.org/repo/flathub.flatpakrepo +sudo flatpak remote-add --if-not-exists flathub "${FLATHUB_REMOTE}" + +echo "Setting up Flatpak packages..." +sudo flatpak install --noninteractive ${FLATPAK_PACKAGES} + +######################################## +# Codec installation + +echo "Setting up codecs..." +opi codecs + +######################################## +# (OPTIONAL) Extra packages + +if [[ "${optional_additions}" == *"Xournal++"* ]]; then + echo "Installing Xournal++..." + sudo zypper al texlive + sudo zypper in xournalpp +fi + +if [[ "${optional_additions}" == *"EasyEffects"* ]]; then + echo "Installing EasyEffects..." + sudo zypper in easyeffects +fi + +################################################################################ +# +# System configuration +# +################################################################################ + +######################################## +# GRUB configuration + +# Silence GRUB +echo "Configuring GRUB..." +echo "# Automatically added by personal-opensuse-setup.sh +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 "['Left']" +gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['Right']" +gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "['Left']" +gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "['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 +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 [] + +######################################## +# (OPTIONAL) Media + +if [[ "${optional_additions}" == *"Media Control Key Shortcuts"* ]]; then + gsettings set org.gnome.settings-daemon.plugins.media-keys mic-mute "['Home']" + gsettings set org.gnome.settings-daemon.plugins.media-keys next "['Page_Down']" + gsettings set org.gnome.settings-daemon.plugins.media-keys previous "['Page_Up']" + gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down "['Page_Down']" + gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute "['End']" + gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up "['Page_Up']" +fi + +######################################## +# Windows + +gsettings set org.gnome.desktop.wm.keybindings close "['w']" +gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['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}/ + gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "$(echo ${EXISTING_KEYBINDINGS} | sed s/.$//), '${KEYBINDING_PATH}']" + 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" "Return" +add_custom_gnome_keybinding "Toggle Night Light" "gnome-toggle-night-light" "n" + +# (OPTIONAL) Add custom shortcuts +if [[ "${optional_additions}" == *"Touchpad Lock Toggle Shortcut"* ]]; then + add_custom_gnome_keybinding "Toggle Touchpad Lock" "gnome-toggle-touchpad-lock" "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" +gsettings set org.gnome.desktop.interface clock-format '24h' +gsettings set org.gnome.desktop.interface clock-show-date false +gsettings set org.gnome.desktop.interface clock-show-weekday false +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" + +################################################################################ +# +# GNOME app folder configuration +# +################################################################################ + +echo "Configuring GNOME app folders..." + +######################################## +# 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 +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..." + +for EXTENSION in "${GNOME_EXTENSIONS}"; do + 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 + +echo "Downloading Emacs configuration..." +wget https://jessieh.net/emacs -O ${HOME}/.config/emacs/init.el + +######################################## +# Fish + +echo "Downloading Fish configuration..." +wget https://jessieh.net/fish -O ${HOME}/.config/fish/config.fish + +echo "Setting default shell to Fish..." +chsh -s $(which fish) + +######################################## +# Utility scripts + +echo "Installing scripts..." + +if [[ "${optional_additions}" != *'"Reboot to Windows" Launcher'* ]]; then + rm ${SCRIPT_DIR}/scripts/reboot-windows +fi + +chmod +x ${SCRIPT_DIR}/scripts/* +sudo cp ${SCRIPT_DIR}/scripts/* /usr/bin + +######################################## +# Desktop entries + +echo "Installing desktop entries..." + +if [[ "${optional_additions}" != *'"Reboot to Windows" Launcher'* ]]; then + rm ${SCRIPT_DIR}/desktop_entries/windows.desktop +fi + +mkdir -p ${HOME}/.local/share/applications/ +cp ${SCRIPT_DIR}/desktop-entries/* ${HOME}/.local/share/applications/ + +################################################################################ +# +# Post-setup suggestions +# +################################################################################ + +echo +echo "Personalization complete!" +echo +echo "Recommended next steps:" +echo " • Log in to Firefox Sync" +echo " • Configure Nextcloud client" +if [[ "${optional_additions}" == *"EasyEffects"* ]]; then + echo " • Install an audio device profile from" + echo " https://autoeq.app" +fi +echo " • Install a Wireguard VPN profile from" +echo " https://mullvad.net/en/account/#/wireguard-config/?platform=linux" +echo " • Configure display settings and run 'gdm-update-display-settings'" +echo " • Run 'themer' to install/update unofficial libadwaita themes" diff --git a/scripts/discord-launcher b/scripts/discord-launcher new file mode 100644 index 0000000..0b83643 --- /dev/null +++ b/scripts/discord-launcher @@ -0,0 +1,20 @@ +#!/bin/bash + +################################################################################ +# +# discord-launcher +# Launches discord and forces it to use the correct (dark) GTK theme variant +# +################################################################################ + +export GTK_THEME=:dark +export GTK_THEME_VARIANT="dark" + +/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=discord com.discordapp.Discord & + +# This is dumb, but it works... +for i in {1..11} +do + xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT dark -id $(wmctrl -lp | grep Discord | cut -d ' ' -f1) + sleep 1 +done diff --git a/scripts/gdm-lock-screen b/scripts/gdm-lock-screen new file mode 100644 index 0000000..2826649 --- /dev/null +++ b/scripts/gdm-lock-screen @@ -0,0 +1,10 @@ +#!/bin/bash + +################################################################################ +# +# gdm-lock-screen +# Instructs GDM to lock the screen via D-Bus +# +################################################################################ + +dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock diff --git a/scripts/gdm-update-display-settings b/scripts/gdm-update-display-settings new file mode 100644 index 0000000..645e249 --- /dev/null +++ b/scripts/gdm-update-display-settings @@ -0,0 +1,10 @@ +#!/bin/bash + +################################################################################ +# +# gdm-update-display-settings +# Copies user's current display settings to GDM's config folder +# +################################################################################ + +sudo cp .config/monitors.xml /var/lib/gdm/.config/ && echo "Copied .config/monitors.xml to /var/lib/gdm/.config" diff --git a/scripts/gnome-toggle-night-light b/scripts/gnome-toggle-night-light new file mode 100644 index 0000000..0f83731 --- /dev/null +++ b/scripts/gnome-toggle-night-light @@ -0,0 +1,42 @@ +#!/bin/bash + +################################################################################ +# +# gnome-toggle-night-light +# Requires notify-send to be installed +# +################################################################################ + +################################################################################ +# User configuration +################################################################################ + +title="Night Light" +body_enabled="Night light has been enabled." +body_disabled="Night light has been disabled." +icon_enabled="night-light" +icon_disabled="night-light-disabled" +key="org.gnome.settings-daemon.plugins.color night-light-enabled" + +################################################################################ +# gnome-toggle code +################################################################################ + +value=$(gsettings get $key) + +notif_id_file_name=/tmp/tmp.$(echo $key | tr -d ' ').nid +{ prev_notif_id=$(<$notif_id_file_name); } 2> /dev/null + +replace_flag="" +case $prev_notif_id in + ''|*[!0-9]*) ;; + *) replace_flag="--replace-id=$prev_notif_id" ;; +esac + +if [[ $value == "true" ]]; then + gsettings set $key false + notify-send "$title Disabled" "$body_disabled" --icon $icon_disabled $replace_flag --transient --expire-time=0 --print-id > $notif_id_file_name +else + gsettings set $key true + notify-send "$title Enabled" "$body_enabled" --icon $icon_enabled $replace_flag --transient --expire-time=0 --print-id > $notif_id_file_name +fi diff --git a/scripts/gnome-toggle-touchpad-lock b/scripts/gnome-toggle-touchpad-lock new file mode 100644 index 0000000..a691356 --- /dev/null +++ b/scripts/gnome-toggle-touchpad-lock @@ -0,0 +1,42 @@ +#!/bin/bash + +################################################################################ +# +# gnome-toggle-touchpad-lock +# Requires notify-send to be installed +# +################################################################################ + +################################################################################ +# User configuration +################################################################################ + +title="Touchpad Lock" +body_enabled="Touchpad will be locked while typing." +body_disabled="Touchpad will be unlocked while typing." +icon_enabled="touchpad-disabled" +icon_disabled="input-touchpad" +key="org.gnome.desktop.peripherals.touchpad disable-while-typing" + +################################################################################ +# gnome-toggle code +################################################################################ + +value=$(gsettings get $key) + +notif_id_file_name=/tmp/tmp.$(echo $key | tr -d ' ').nid +{ prev_notif_id=$(<$notif_id_file_name); } 2> /dev/null + +replace_flag="" +case $prev_notif_id in + ''|*[!0-9]*) ;; + *) replace_flag="--replace-id=$prev_notif_id" ;; +esac + +if [[ $value == "true" ]]; then + gsettings set $key false + notify-send "$title Disabled" "$body_disabled" --icon $icon_disabled $replace_flag --transient --expire-time=0 --print-id > $notif_id_file_name +else + gsettings set $key true + notify-send "$title Enabled" "$body_enabled" --icon $icon_enabled $replace_flag --transient --expire-time=0 --print-id > $notif_id_file_name +fi diff --git a/scripts/reboot-uefi b/scripts/reboot-uefi new file mode 100644 index 0000000..4e8110c --- /dev/null +++ b/scripts/reboot-uefi @@ -0,0 +1,17 @@ +#!/bin/bash + +################################################################################ +# +# reboot-uefi +# Prompts the user to reboot to system firmware (UEFI) setup +# +################################################################################ + +######################################## +# Prompt user and execute reboot seq. +######################################## + +if zenity --question --icon device_pci --text="Reboot to UEFI setup?" --title "UEFI Setup" --default-cancel --no-wrap --timeout=10 +then + pkexec systemctl reboot --firmware-setup +fi diff --git a/scripts/reboot-windows b/scripts/reboot-windows new file mode 100644 index 0000000..b79e155 --- /dev/null +++ b/scripts/reboot-windows @@ -0,0 +1,37 @@ +#!/bin/bash + +################################################################################ +# +# reboot-windows +# Finds and flags a Windows menuentry in GRUB, and then reboots the system +# +################################################################################ + +######################################## +# Reboot command +######################################## + +REBOOT_CMD=$(cat < ${HOME}/.gtkrc-2.0 + +######################################## +# Install Adwaita theme for Firefox + +echo "Installing Adwaita theme for Firefox..." +curl -s -o- https://raw.githubusercontent.com/rafaelmardojai/firefox-gnome-theme/master/scripts/install-by-curl.sh | bash + +# Set user flags for theme +echo "Configuring Adwaita theme for Firefox..." +function set_ff_flag () +{ + USER_JS_FILE=${HOME}/.mozilla/firefox/*.default-release/user.js + sed -i 's/user_pref("'${1}'",.*);/user_pref("'${1}'",'${2}');/' $USER_JS_FILE + grep -q ${1} $USER_JS_FILE || echo "user_pref(\"$1\",$2);" >> $USER_JS_FILE +} +set_ff_flag gnomeTheme.dragWindowHeaderbarButtons true +set_ff_flag gnomeTheme.bookmarksToolbarUnderTabs true +set_ff_flag gnomeTheme.hideSingleTab true +set_ff_flag gnomeTheme.hideUnifiedExtensions true + +######################################## +# Install Adwaita theme for Steam + +echo "Installing Adwaita theme for Steam..." +cd /tmp/ +git clone https://github.com/tkashkin/Adwaita-for-Steam +cd Adwaita-for-Steam +./install.py +cd /tmp/