diff --git a/README.md b/README.md index 0a89cf1..bee4f19 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ --- -[![LICENSE: MIT](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](./LICENSE) +[![LICENSE: MIT](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](./LICENSE) [![FORMATTER: SHFMT](https://img.shields.io/badge/formatter-shfmt-darkgrey?style=for-the-badge)](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format) ## Purpose diff --git a/setup.sh b/setup.sh index db73ee9..30e92f5 100755 --- a/setup.sh +++ b/setup.sh @@ -3,19 +3,18 @@ # don't remove line after package_install # it will result in this syntax error: unexpected end of file - # #################### [ ESSENTIALS ] #################### # Installs essential packages and defining important functions -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" DATA_PATH="/media/pomp/data" POST_INSTALL=() BOLD="\e[1m" RESET="\e[0m" -RED="\e[91m" # actually light red -GREEN="\e[92m" # actually light green +RED="\e[91m" # actually light red +GREEN="\e[92m" # actually light green YELLOW="\e[33m" log_no_label() { @@ -39,7 +38,7 @@ warn() { } error() { - >&2 echo -e " $RED$BOLD ERROR | $*$RESET" + echo >&2 -e " $RED$BOLD ERROR | $*$RESET" } title() { @@ -65,39 +64,40 @@ package_remove() { setup_essentials() { # install pamac if it does not exist - if ! command -v pamac &> /dev/null; then + 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 + if ! command -v dialog &>/dev/null; then log "dialog was not installed already. Installing now..." package_install dialog fi } load_dconf() { - dconf load / < "./dconf/$1" + dconf load / <"./dconf/$1" } - # #################### [ DEFINING SETUP ] #################### # Define instructions on how to setup applications & stuff setup_4kvideodownloader() { - package_install \ - 4kvideodownloader \ + package_install \ + 4kvideodownloader + } setup_blender() { package_install \ - blender \ + blender + } setup_brave() { - package_install \ - brave-bin \ + package_install \ + brave-bin # settings: DNS https cloudflare POST_INSTALL+=( @@ -111,9 +111,9 @@ setup_conky() { cp ./autostart/conky.desktop ~/.config/autostart # vnstat: network traffic statistics - package_install \ - conky \ - vnstat \ + package_install \ + conky \ + vnstat sudo systemctl enable vnstat sudo systemctl start vnstat @@ -123,8 +123,8 @@ setup_cpu_undervolting() { # intel CPU undervolting for less heat and power consumption # https://wiki.archlinux.org/index.php/Undervolting_CPU - package_install \ - intel-undervolt \ + package_install \ + intel-undervolt config_file=/etc/intel-undervolt.conf @@ -142,7 +142,7 @@ setup_cpu_undervolting() { # value # space between comment and value: 1 sudo sed -i -e "/^[^#]/s/\(undervolt [0-9]* 'CPU'\) .*\(#.*\)/\1 -100 \2/" $config_file sudo sed -i -e "/^[^#]/s/\(undervolt [0-9]* 'CPU Cache'\) .*\(#.*\)/\1 -100 \2/" $config_file - + sudo intel-undervolt apply sudo systemctl enable intel-undervolt } @@ -159,53 +159,53 @@ setup_discord() { # betterdiscordctl-git: BetterDiscord installer # discord-overlay-git: Discord voice chat overlay - package_install \ - discord \ - betterdiscordctl-git \ - discord-overlay-git \ + package_install \ + discord \ + betterdiscordctl-git \ + discord-overlay-git 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 - 139 # https://betterdiscord.app/plugin/SecretRingTone - 98 # https://betterdiscord.app/plugin/SendLargeMessages - 99 # https://betterdiscord.app/plugin/ServerCounter - 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 + 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 + 139 # https://betterdiscord.app/plugin/SecretRingTone + 98 # https://betterdiscord.app/plugin/SendLargeMessages + 99 # https://betterdiscord.app/plugin/ServerCounter + 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" @@ -220,8 +220,9 @@ setup_discord() { } setup_dotnet() { - package_install \ - dotnet-sdk \ + package_install \ + dotnet-sdk + } setup_fonts() { @@ -232,12 +233,12 @@ setup_fonts() { # adobe-source-han-sans-kr-fonts: Korean font # ttf-baekmuk: Korean font - package_install \ - wget \ - noto-fonts-emoji \ - nerd-fonts-noto-sans-mono \ - adobe-source-han-sans-kr-fonts \ - ttf-baekmuk \ + package_install \ + wget \ + noto-fonts-emoji \ + nerd-fonts-noto-sans-mono \ + adobe-source-han-sans-kr-fonts \ + ttf-baekmuk # path to temporarily save font related files fonts_directory="$SCRIPT_DIR/tmp/fonts" @@ -262,12 +263,12 @@ setup_fonts() { # download and unzip if either zip file or unzipped directory exists if [ ! -f "$zip_path" ] && [ ! -d "$fonts_directory/$font_name" ]; then - wget -O "$zip_path" "https://fonts.google.com/download?family=$font_name" # download zip file - unzip "$zip_path" -d "$fonts_directory/$font_name" # unzip file - rm "$zip_path" # remove zip file + wget -O "$zip_path" "https://fonts.google.com/download?family=$font_name" # download zip file + unzip "$zip_path" -d "$fonts_directory/$font_name" # unzip file + rm "$zip_path" # remove zip file fi done - + font_install_dir="$HOME/.local/share/fonts" # create local fonts directory if it does not exist already @@ -276,7 +277,7 @@ setup_fonts() { fi # "install" all fonts - find "$fonts_directory" -type f -name "*.ttf" | while read ttf_file_path ; do + find "$fonts_directory" -type f -name "*.ttf" | while read ttf_file_path; do mv -f "$ttf_file_path" "$font_install_dir/${ttf_file_path##*/}" done @@ -294,19 +295,21 @@ setup_dns() { setup_geogebra() { package_install \ - geogebra \ + geogebra + } setup_gimp() { # photoshop but FOSS - package_install \ - gimp \ + package_install \ + gimp + } setup_git() { package_install \ - git \ + git git config --global user.email "developomp@gmail.com" git config --global user.name "developomp" @@ -327,16 +330,16 @@ setup_gnome() { # nvidia: nvidia GPU support # optimus-manager-qt: https://github.com/Shatur/optimus-manager-qt - package_install \ - gdm-prime \ - xcursor-breeze `# cursor design` \ - matcha-gtk-theme `# gtk theme` \ - papirus-icon-theme `# icon theme` \ - gnome-backgrounds `# wallpapers and shit` \ - gnome-shell-extensions `# gnome shell extensions` \ - gwe `# nvidia GPU overclocking https://gitlab.com/leinardi/gwe` \ - nvidia `# nvidia GPU support` \ - optimus-manager-qt `# https://github.com/Shatur/optimus-manager-qt` \ + package_install \ + gdm-prime \ + xcursor-breeze \ + matcha-gtk-theme \ + papirus-icon-theme \ + gnome-backgrounds \ + gnome-shell-extensions \ + gwe \ + nvidia \ + optimus-manager-qt sudo systemctl enable gdm sudo systemctl enable optimus-manager @@ -351,7 +354,7 @@ setup_gnome() { setup_gnome_apps - cat > ~/.config/user-dirs.dirs <~/.config/user-dirs.dirs < "$SCRIPT_DIR/dconf$TIMESTAMP.conf" + 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 + 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)" @@ -721,7 +789,6 @@ setup_local() { fi } - # #################### [ TEST ] #################### # Tests if script is ready to be executed @@ -732,11 +799,10 @@ if [[ ! $EUID -ne 0 ]]; then fi # check internet connection -if ! ping -c 1 archlinux.org &> /dev/null; then +if ! ping -c 1 archlinux.org &>/dev/null; then error "You are not connected to the internet" fi - # #################### [ START ] #################### # move to script directory (repo root) @@ -761,120 +827,117 @@ if [[ $REPLY =~ ^[^Yy]$ ]]; then fi echo - # #################### [ MAIN ] #################### setup_essentials options=( - "4k_video_downloader" "" off - "backup" "" off - "blender" "" off - "brave" "" off - "cpu_undervolting" "" off - "discord" "" off - "dotnet" "" off - "fonts" "" off - "geogebra" "" off - "gimp" "" off - "git" "" off - "gnome" "" off - "gnome_apps" "" off - "gnome_extensions" "" off - "go" "" off - "godot" "" off - "gsmartcontrol" "" off - "inkscape" "" off - "kdenlive" "" off - "keyboard" "" off - "obs" "" off - "osu" "" off - "marktext" "" off - "middleclickpaste" "" off - "mystiq" "" off - "node" "" off - "pamac" "" off - "pavucontrol" "" off - "pip" "" off - "piper" "" off - "rust" "" off - "shfmt" "" off - "steam" "" off - "timeshift" "" off - "torrential" "" off - "unity" "" off - "vim" "" off - "virtualbox" "" off - "vlc" "" off - "vscode" "" off - "wine" "" off - "wireshark" "" off - "onlyoffice" "" off - "zoom" "" off - "zsh" "" off + "4k_video_downloader" "" off + "backup" "" off + "blender" "" off + "brave" "" off + "cpu_undervolting" "" off + "discord" "" off + "dotnet" "" off + "fonts" "" off + "geogebra" "" off + "gimp" "" off + "git" "" off + "gnome" "" off + "gnome_apps" "" off + "gnome_extensions" "" off + "go" "" off + "godot" "" off + "gsmartcontrol" "" off + "inkscape" "" off + "kdenlive" "" off + "keyboard" "" off + "obs" "" off + "osu" "" off + "marktext" "" off + "middleclickpaste" "" off + "mystiq" "" off + "node" "" off + "pamac" "" off + "pavucontrol" "" off + "pip" "" off + "piper" "" off + "rust" "" off + "shfmt" "" off + "steam" "" off + "timeshift" "" off + "torrential" "" off + "unity" "" off + "vim" "" off + "virtualbox" "" off + "vlc" "" off + "vscode" "" off + "wine" "" off + "wireshark" "" off + "onlyoffice" "" off + "zoom" "" off + "zsh" "" off ) # choose from available options -cmd=(dialog --separate-output --checklist "Select Setup Operations to perform" 20 50 5) +cmd=(dialog --separate-output --checklist "Select Setup Operations to perform" 20 50 5) choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) clear for choice in $choices; do case "$choice" in - "4k_video_downloader") setup_4kvideodownloader;; - "blender") setup_blender;; - "brave") setup_brave;; - "backup") backup;; - "cpu_undervolting") setup_cpu_undervolting;; - "discord") setup_discord;; - "dotnet") setup_dotnet;; - "fonts") setup_fonts;; - "geogebra") setup_geogebra;; - "gimp") setup_gimp;; - "git") setuo_git;; - "gnome") setup_gnome;; - "gnome_apps") setup_gnome_apps;; - "gnome_extensions") setup_gnome_extensions;; - "go") setup_go;; - "godot") setup_godot;; - "gsmartcontrol") setup_gsmartcontrol;; - "inkscape") setup_inkscape;; - "kdenlive") setup_kdenlive;; - "keyboard") setup_keyboard;; - "obs") setup_obs;; - "osu") setup_osu;; - "marktext") setup_marktext;; - "middleclickpaste") setup_middleclickpaste;; - "mystiq") setup_mystiq;; - "node") setup_node;; - "pamac") setup_pamac;; - "pavucontrol") setup_pavucontrol;; - "pip") setup_pip;; - "piper") setup_piper;; - "rust") setup_rust;; - "shfmt") setup_shfmt;; - "steam") setup_steam;; - "timeshift") setup_timeshift;; - "torrential") setup_torrential;; - "unity") setup_unity;; - "vim") setup_vim;; - "virtualbox") setup_virtualbox;; - "vlc") setup_vlc;; - "vscode") setup_vscode;; - "wine") setup_wine;; - "wireshark") setup_wireshark;; - "onlyoffice") setup_onlyoffice;; - "zoom") setup_zoom;; - "zsh") setup_zsh;; + "4k_video_downloader") setup_4kvideodownloader ;; + "blender") setup_blender ;; + "brave") setup_brave ;; + "backup") backup ;; + "cpu_undervolting") setup_cpu_undervolting ;; + "discord") setup_discord ;; + "dotnet") setup_dotnet ;; + "fonts") setup_fonts ;; + "geogebra") setup_geogebra ;; + "gimp") setup_gimp ;; + "git") setuo_git ;; + "gnome") setup_gnome ;; + "gnome_apps") setup_gnome_apps ;; + "gnome_extensions") setup_gnome_extensions ;; + "go") setup_go ;; + "godot") setup_godot ;; + "gsmartcontrol") setup_gsmartcontrol ;; + "inkscape") setup_inkscape ;; + "kdenlive") setup_kdenlive ;; + "keyboard") setup_keyboard ;; + "obs") setup_obs ;; + "osu") setup_osu ;; + "marktext") setup_marktext ;; + "middleclickpaste") setup_middleclickpaste ;; + "mystiq") setup_mystiq ;; + "node") setup_node ;; + "pamac") setup_pamac ;; + "pavucontrol") setup_pavucontrol ;; + "pip") setup_pip ;; + "piper") setup_piper ;; + "rust") setup_rust ;; + "shfmt") setup_shfmt ;; + "steam") setup_steam ;; + "timeshift") setup_timeshift ;; + "torrential") setup_torrential ;; + "unity") setup_unity ;; + "vim") setup_vim ;; + "virtualbox") setup_virtualbox ;; + "vlc") setup_vlc ;; + "vscode") setup_vscode ;; + "wine") setup_wine ;; + "wireshark") setup_wireshark ;; + "onlyoffice") setup_onlyoffice ;; + "zoom") setup_zoom ;; + "zsh") setup_zsh ;; esac done - # #################### [ CLEANUP ] #################### # remove temporary directory rm -rf "$SCRIPT_DIR/tmp" - # #################### [ DONE ] #################### # print some info after installation @@ -884,7 +947,7 @@ echo # show what to do manually if [ ! ${#POST_INSTALL[@]} -eq 0 ]; then - log_no_label "now:" + log_no_label "now:" for doWhat in "${POST_INSTALL[@]}"; do log_no_label " - $doWhat"