From 4d987af661125ccb8fe3119e0b318db89340e1fe Mon Sep 17 00:00:00 2001 From: Jessie Hildebrandt Date: Tue, 30 May 2023 18:07:01 -0400 Subject: [PATCH] Initial commit --- .repo-assets/icon.png | Bin 0 -> 19387 bytes .repo-assets/icon.xcf | Bin 0 -> 13228 bytes desktop-entries/blender.desktop | 17 + desktop-entries/calf.desktop | 10 + .../com.discordapp.Discord.desktop | 12 + ....nextcloud.desktopclient.nextcloud.desktop | 17 + desktop-entries/com.spotify.Client.desktop | 14 + desktop-entries/emacs.desktop | 14 + desktop-entries/emacsclient.desktop | 22 + desktop-entries/fish.desktop | 11 + desktop-entries/org.gnome.PowerStats.desktop | 13 + desktop-entries/org.gnome.Weather.desktop | 13 + .../uefi-firmware-settings.desktop | 9 + desktop-entries/windows.desktop | 9 + desktop-entries/yelp.desktop | 14 + opensuse-personalizer.sh | 488 ++++++++++++++++++ scripts/discord-launcher | 20 + scripts/gdm-lock-screen | 10 + scripts/gdm-update-display-settings | 10 + scripts/gnome-toggle-night-light | 42 ++ scripts/gnome-toggle-touchpad-lock | 42 ++ scripts/reboot-uefi | 17 + scripts/reboot-windows | 37 ++ scripts/spotify-launcher | 20 + scripts/themer | 59 +++ 25 files changed, 920 insertions(+) create mode 100644 .repo-assets/icon.png create mode 100644 .repo-assets/icon.xcf create mode 100644 desktop-entries/blender.desktop create mode 100644 desktop-entries/calf.desktop create mode 100644 desktop-entries/com.discordapp.Discord.desktop create mode 100644 desktop-entries/com.nextcloud.desktopclient.nextcloud.desktop create mode 100644 desktop-entries/com.spotify.Client.desktop create mode 100644 desktop-entries/emacs.desktop create mode 100644 desktop-entries/emacsclient.desktop create mode 100644 desktop-entries/fish.desktop create mode 100644 desktop-entries/org.gnome.PowerStats.desktop create mode 100644 desktop-entries/org.gnome.Weather.desktop create mode 100644 desktop-entries/uefi-firmware-settings.desktop create mode 100644 desktop-entries/windows.desktop create mode 100644 desktop-entries/yelp.desktop create mode 100644 opensuse-personalizer.sh create mode 100644 scripts/discord-launcher create mode 100644 scripts/gdm-lock-screen create mode 100644 scripts/gdm-update-display-settings create mode 100644 scripts/gnome-toggle-night-light create mode 100644 scripts/gnome-toggle-touchpad-lock create mode 100644 scripts/reboot-uefi create mode 100644 scripts/reboot-windows create mode 100644 scripts/spotify-launcher create mode 100755 scripts/themer diff --git a/.repo-assets/icon.png b/.repo-assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..85975255aefba6fca8d6c3c7b58b3f5325954f5c GIT binary patch literal 19387 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 z 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 QnFpL;)v;0kUvFIg1JXTMSpWb4 literal 0 HcmV?d00001 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/