diff --git a/.vscode/settings.json b/.vscode/settings.json index 2d66fad..0ad9afd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,10 @@ { "cSpell.words": [ "alacritty", + "betterdiscordctl", "btop", "davinci", + "dconf", "deno", "developomp", "flatpak", diff --git a/src/setup/__init__.py b/src/setup/__init__.py index 1954864..e96309d 100644 --- a/src/setup/__init__.py +++ b/src/setup/__init__.py @@ -38,70 +38,6 @@ setup_cpu_undervolting() { sudo systemctl enable intel-undervolt } -setup_discord() { - # assumes that plugins are located in ~/.config/BetterDiscord/plugins - - # betterdiscordctl-git: BetterDiscord installer - - package_install \ - discord \ - betterdiscordctl-git - - install ./home/pomp/.config/autostart/discord.desktop ~/.config/autostart/ - - BD_PLUGINS=( - 134 # https://betterdiscord.app/plugin/Avatar%20Hover - 60 # https://betterdiscord.app/plugin/BadgesEverywhere - 119 # https://betterdiscord.app/plugin/BetterCodeblocks - 62 # https://betterdiscord.app/plugin/BetterNsfwTag - 63 # https://betterdiscord.app/plugin/BetterSearchPage - 228 # https://betterdiscord.app/plugin/CallTimeCounter - 64 # https://betterdiscord.app/plugin/CharCounter - 67 # https://betterdiscord.app/plugin/CompleteTimestamps - 176 # https://betterdiscord.app/plugin/Copier - 68 # https://betterdiscord.app/plugin/CopyRawMessage - 69 # https://betterdiscord.app/plugin/CreationDate - 186 # https://betterdiscord.app/plugin/DoNotTrack - 132 # https://betterdiscord.app/plugin/EmoteReplacer - 245 # https://betterdiscord.app/plugin/FreeEmojis - 81 # https://betterdiscord.app/plugin/GoogleTranslateOption - 284 # https://betterdiscord.app/plugin/GrammarCorrect - 220 # https://betterdiscord.app/plugin/GuildProfile - 83 # https://betterdiscord.app/plugin/ImageUtilities - 295 # https://betterdiscord.app/plugin/InvisibleTyping - 84 # https://betterdiscord.app/plugin/JoinedAtDate - 85 # https://betterdiscord.app/plugin/LastMessageDate - 287 # https://betterdiscord.app/plugin/Link-Profile-Picture - 11 # https://betterdiscord.app/plugin/MemberCount - 29 # https://betterdiscord.app/plugin/PermissionsViewer - 158 # https://betterdiscord.app/plugin/PlatformIndicators - 93 # https://betterdiscord.app/plugin/QuickMention - 94 # https://betterdiscord.app/plugin/ReadAllNotificationsButton - 179 # https://betterdiscord.app/plugin/RedditMentions - 97 # https://betterdiscord.app/plugin/RevealAllSpoilersOption - 98 # https://betterdiscord.app/plugin/SendLargeMessages - 159 # https://betterdiscord.app/plugin/ShowAllActivities - 291 # https://betterdiscord.app/plugin/ShowConnections - 103 # https://betterdiscord.app/plugin/ShowHiddenChannels - 104 # https://betterdiscord.app/plugin/SpellCheck - 162 # https://betterdiscord.app/plugin/StaffTag - 8 # https://betterdiscord.app/plugin/SuppressReplyMentions - 253 # https://betterdiscord.app/plugin/Typing%20Users%20Avatars - 196 # https://betterdiscord.app/plugin/TypingIndicator - 293 # https://betterdiscord.app/plugin/UserDetails - ) - - log "installing betterdiscord plugins" - - for id in "${BD_PLUGINS[@]}"; do - BD_PLUGIN_URL="https://betterdiscord.app/Download?id=$id" - log "installing $BD_PLUGIN_URL" - wget --content-disposition --no-clobber -P ~/.config/BetterDiscord/plugins "$BD_PLUGIN_URL" - done - - POST_INSTALL+=("discord: run betterdiscordctl install") -} - setup_docker() { package_install docker @@ -308,51 +244,6 @@ setup_gnome_apps() { sushi } -setup_gnome_extensions() { - log "installing gnome extensions" - - # chrome-gnome-shell GNOME shell integration for Chrome - # gnome-shell-extension-installer Installation of gnome extensions from command line - # gnome-shell-extension-pop-shell-git for window tiling - package_install \ - chrome-gnome-shell \ - gnome-shell-extension-installer \ - gnome-shell-extension-pop-shell-git - - load_dconf "extension-pop-shell.conf" - - extensions=( - 36,"extension-lockkeys.conf" # lock-keys - 906,"extension-sound-output-device-chooser.conf" # sound-output-device-chooser - 1460,"extension-vitals.conf" # vitals - 2741,"" # remove-alttab-delay-v2 - 2890,"extension-trayIconsReloaded.conf" # tray-icons-reloaded - 3193,"extension-blur-my-shell.conf" # blur-my-shell - 4000,"extension-barbar.conf" # babar - 4158,"" # gnome-40-ui-improvements - ) - - for i in "${extensions[@]}"; do - IFS="," - set -- $i - - # $1: extension id - # $2: extension dconf - - log "installing: https://extensions.gnome.org/extension/$1" - gnome-shell-extension-installer $1 --yes --update - - if [ ! -z $2 ]; then - load_dconf $2 - fi - done - - # enable extensions - load_dconf "extensions.conf" - - gnome-shell-extension-installer --restart-shell -} - setup_grub() { sudo sed -i '/GRUB_TIMEOUT=/c\GRUB_TIMEOUT=1' /etc/default/grub sudo sed -i '/GRUB_TIMEOUT_STYLE=/c\GRUB_TIMEOUT_STYLE=hidden' /etc/default/grub diff --git a/src/setup/discord.py b/src/setup/discord.py new file mode 100644 index 0000000..8162ae3 --- /dev/null +++ b/src/setup/discord.py @@ -0,0 +1,71 @@ +from ..util import flatpak_install, pamac_install, smart_copy +from ..constants import tmp_dir +from .. import log +from os import system + +name = "Discord" + +PLUGINS = ( + 134, # https://betterdiscord.app/plugin/Avatar%20Hover + 60, # https://betterdiscord.app/plugin/BadgesEverywhere + 119, # https://betterdiscord.app/plugin/BetterCodeblocks + 62, # https://betterdiscord.app/plugin/BetterNsfwTag + 63, # https://betterdiscord.app/plugin/BetterSearchPage + 228, # https://betterdiscord.app/plugin/CallTimeCounter + 64, # https://betterdiscord.app/plugin/CharCounter + 67, # https://betterdiscord.app/plugin/CompleteTimestamps + 176, # https://betterdiscord.app/plugin/Copier + 68, # https://betterdiscord.app/plugin/CopyRawMessage + 69, # https://betterdiscord.app/plugin/CreationDate + 186, # https://betterdiscord.app/plugin/DoNotTrack + 132, # https://betterdiscord.app/plugin/EmoteReplacer + 245, # https://betterdiscord.app/plugin/FreeEmojis + 81, # https://betterdiscord.app/plugin/GoogleTranslateOption + 284, # https://betterdiscord.app/plugin/GrammarCorrect + 220, # https://betterdiscord.app/plugin/GuildProfile + 83, # https://betterdiscord.app/plugin/ImageUtilities + 295, # https://betterdiscord.app/plugin/InvisibleTyping + 84, # https://betterdiscord.app/plugin/JoinedAtDate + 85, # https://betterdiscord.app/plugin/LastMessageDate + 287, # https://betterdiscord.app/plugin/Link-Profile-Picture + 11, # https://betterdiscord.app/plugin/MemberCount + 29, # https://betterdiscord.app/plugin/PermissionsViewer + 158, # https://betterdiscord.app/plugin/PlatformIndicators + 93, # https://betterdiscord.app/plugin/QuickMention + 94, # https://betterdiscord.app/plugin/ReadAllNotificationsButton + 179, # https://betterdiscord.app/plugin/RedditMentions + 97, # https://betterdiscord.app/plugin/RevealAllSpoilersOption + 98, # https://betterdiscord.app/plugin/SendLargeMessages + 159, # https://betterdiscord.app/plugin/ShowAllActivities + 291, # https://betterdiscord.app/plugin/ShowConnections + 103, # https://betterdiscord.app/plugin/ShowHiddenChannels + 104, # https://betterdiscord.app/plugin/SpellCheck + 162, # https://betterdiscord.app/plugin/StaffTag + 8, # https://betterdiscord.app/plugin/SuppressReplyMentions + 253, # https://betterdiscord.app/plugin/Typing%20Users%20Avatars + 196, # https://betterdiscord.app/plugin/TypingIndicator + 293, # https://betterdiscord.app/plugin/UserDetails +) + + +def setup(): + """Discord and better discord""" + + flatpak_install("com.discordapp.Discord") + pamac_install("betterdiscordctl-git") + + smart_copy( + f"{tmp_dir}/home/pomp/.config/autostart/discord.desktop", + "~/.config/autostart/discord.desktop", + ) + + for id in PLUGINS: + url = f"https://betterdiscord.app/Download?id={id}" + log.log(f"installing {url}") + + # assumes that plugins is located in "~/.var/app/com.discordapp.Discord/config/BetterDiscord/plugins" because I'm using flatpak + system( + f'wget --content-disposition --no-clobber -P ~/.var/app/com.discordapp.Discord/config/BetterDiscord/plugins "{url}"' + ) + + system("betterdiscordctl -i flatpak install") diff --git a/src/setup/gnome_extensions.py b/src/setup/gnome_extensions.py new file mode 100644 index 0000000..7dbb4b3 --- /dev/null +++ b/src/setup/gnome_extensions.py @@ -0,0 +1,43 @@ +from ..util import pamac_install, load_dconf +from .. import log + +name = "Gnome extensions" + +EXTENSIONS = ( + (36, "extension-lockkeys.conf"), # lock-keys + (906, "extension-sound-output-device-chooser.conf"), # sound-output-device-chooser + (1460, "extension-vitals.conf"), # vitals + (2741, ""), # remove-alttab-delay-v2 + (2890, "extension-trayIconsReloaded.conf"), # tray-icons-reloaded + (3193, "extension-blur-my-shell.conf"), # blur-my-shell + (4000, "extension-barbar.conf"), # babar + (4158, ""), # gnome-40-ui-improvements +) + + +def setup(): + """ + Extensions for the GNOME Desktop environment + + Intentionally left out chrome-gnome-shell because I won't be using browsers to install GNOME extensions. + + gnome-shell-extension-installer: gnome extension installer CLI + gnome-shell-extension-pop-shell-git: window tiling extension + """ + + pamac_install( + ["gnome-shell-extension-installer", "gnome-shell-extension-pop-shell-git"] + ) + + load_dconf("extension-pop-shell.conf") + + for (extension, dconf_file) in EXTENSIONS: + log.log("installing: https://extensions.gnome.org/extension/$1") + system(f"gnome-shell-extension-installer {extension} --yes --update") + + if dconf_file: # if dconf_file is not empty + load_dconf(dconf_file) + + # enable extensions + load_dconf("extensions.conf") + system("gnome-shell-extension-installer --restart-shell") diff --git a/src/util.py b/src/util.py new file mode 100644 index 0000000..ba6a2ad --- /dev/null +++ b/src/util.py @@ -0,0 +1,93 @@ +from os import system, makedirs +from shutil import copy +from .constants import tmp_dir + +# todo: remove all uses of AUR (use pacman instead of pamac) +def pamac_install(packages: str | list[str]) -> None: + """ + Download package from the arch repository and AUR. + + arguments: + packages: space-separated list of packages. + """ + + if type(packages) == str: + system(f"pamac install --no-confirm {packages}") + elif type(packages) == list[str]: + packages = packages.join(" ") + system(f"pamac install --no-confirm {packages}") + + +def flatpak_install(packages: str) -> None: + """ + Download packages from flathub. + + arguments: + packages: space-separated list of packages. + """ + + system(f"flatpak install -y {packages}") + + +def smart_mkdir(path: str): + """ + Recursively create directories if it doesn't exist already. + """ + try: + makedirs(path) + except OSError: + pass + + +def smart_copy(src: str, dst: str): + """ + Copies src to dst. + Errors if parent directory/directories of dst does not exist. + + arguments: + src: A path-like object or string pointing to a file. + dst: A path-like object or string pointing to a file or a directory. + """ + + copy(src, dst) + + +def load_dconf(file_name: str): + """Loads dconf configuration""" + + system(f'dconf load / < "{tmp_dir}/dconf/{file_name}"') + + +""" +def setup_essentials(): + setup_fstab + sudo pacman -S --needed base-devel wget + dconf + + # install pamac if it does not exist + if ! command -v pamac &>/dev/null; then + log "pamac was not installed already. Installing now..." + setup_pamac + fi + + # install dialog if it's not installed already + if ! command -v dialog &>/dev/null; then + log "dialog was not installed already. Installing now..." + package_install dialog + fi + +def backup(): + TIMESTAMP=$(date +%s) + # backup dconf configuration + dconf dump / >"$SCRIPT_DIR/dconf$TIMESTAMP.conf" + + # make a home directory backup + rsync -a --info=progress2 --perms /home/pomp "$DATA_PATH/backup$TIMESTAMP" + + # create timeshift backup + if ! command -v timeshift &>/dev/null; then + error "failed to create timeshift backup. Timeshift command not found." + else + sudo timeshift --create --comments "auto created by developomp setup script ($TIMESTAMP)" + fi +"""