#!/bin/bash #------------------------------------------------------------------------------# # Yggdrasil NG # # compatibility : Mint 18, Ubuntu 16.04, Elementary and other derivatives # # author : Francois B. (Makotosan/Shakasan) # # licence : GPLv3 # # website : https://makotonoblog.be/ #------------------------------------------------------------------------------# #------------------------------------------------------------------------------# # Script's cons. and vars. # #------------------------------------------------------------------------------# # # app version number # version="0.3.0" # # myHomedir is used in full paths to the homedir # myHomedir=$(whoami) # # script base dir # scriptDir=$(pwd) # # logfile # logFile="/home/"$myHomedir"/yggdrasil.log" # # date and time # cTime=$(date +%H:%M) cDate=$(date +%d-%m-%Y) # # shell color codes # UNDERLINE=$(tput sgr 0 1) BOLD=$(tput bold) ROUGE=$(tput setaf 1) VERT=$(tput setaf 2) JAUNE=$(tput setaf 3) BLEU=$(tput setaf 4) MAUVE=$(tput setaf 5) CYAN=$(tput setaf 6) BLANC=$(tput setaf 7) NORMAL=$(tput sgr0) INV=$(tput smso) BOLDROUGE=${BOLD}${ROUGE} BOLDVERT=${BOLD}${VERT} BOLDJAUNE=${BOLD}${JAUNE} BOLDBLEU=${BOLD}${BLEU} BOLDMAUVE=${BOLD}${MAUVE} BOLDCYAN=${BOLD}${CYAN} BOLDBLANC=${BOLD}${BLANC} #-----------------------------------------------------------------------------# # list of apps with required package manager and category # #-----------------------------------------------------------------------------# # # List of packages available # fields : package name, package manager, category, unique ID for external functions # Apps="cifs-utils;apt;base;cifs-utils xterm;apt;base;xterm curl;apt;base;curl mc;apt;base;mc bmon;apt;base;bmon htop;apt;base;htop screen;apt;base;screen dconf-cli;apt;base;dconf dconf-editor;apt;base;dconf-editor lnav;apt;base;lnav exfat-fuse;apt;base;exfat-fuse exfat-utils;apt;base;exfat-utils iftop;apt;base;iftop iptraf;apt;base;iptraf mpg123;apt;base;mpg123 debconf-utils;apt;base;debconf-utils idle3-tools;apt;base;idle3-tools snapd;apt;base;snapd sysstat;apt;base;sysstat spotify-client;apt;multimedia;spotify-client slowmovideo;apt;multimedia;slowmovideo sayonara;apt;multimedia;sayonara qmmp;apt;multimedia;qmmp qmmp-plugin-projectm;apt;multimedia;qmmp-plugin-projectm shotcut;apt;multimedia;shotcut audacious;apt;multimedia;audacious dia;apt;multimedia;dia mpv;apt;multimedia;mpv picard;apt;multimedia;picard inkscape;apt;multimedia;inkscape aegisub;apt;multimedia;aegisub aegisub-l10n;apt;multimedia;aegisub-l10n mypaint;apt;multimedia;mypaint mypaint-data-extras;apt;multimedia;mypaint-data-extras audacity;apt;multimedia;audacity blender;apt;multimedia;blender kodi;apt;multimedia;kodi digikam;apt;multimedia;digikam synfigstudio;apt;multimedia;synfigstudio mkvtoolnix-gui;apt;multimedia;mkvtoolnix-gui rawtherapee;apt;multimedia;rawtherapee hugin;apt;multimedia;hugin asunder;apt;multimedia;asunder milkytracker;apt;multimedia;milkytracker pitivi;apt;multimedia;pitivi openshot;apt;multimedia;openshot smplayer;apt;multimedia;smplayer smplayer-themes;apt;multimedia;smplayer-themes smplayer-l10n;apt;multimedia;smplayer-l10n selene;apt;multimedia;selene gnome-mplayer;apt;multimedia;gnome-mplayer handbrake;apt;multimedia;handbrake avidemux2.6-qt;apt;multimedia;avidemux2.6-qt avidemux2.6-plugins-qt;apt;multimedia;avidemux2.6-plugins-qt mjpegtools;apt;multimedia;mjpegtools twolame;apt;multimedia;twolame lame;apt;multimedia;lame banshee;apt;multimedia;banshee banshee-extension-soundmenu;apt;multimedia;banshee-extension-soundmenu gpicview;apt;multimedia;gpicview vlc;apt;multimedia;vlc shotwell;apt;multimedia;shotwell darktable;apt;multimedia;darktable ffmpeg;apt;multimedia;ffmpeg flacon;apt;multimedia;flacon scribus;apt;multimedia;scribus gnome-font-viewer;apt;multimedia;gnome-font-viewer moc;apt;multimedia;moc webp;apt;multimedia;webp simplescreenrecorder;apt;multimedia;simplescreenrecorder simplescreenrecorder-lib;apt;multimedia;simplescreenrecorder-lib simplescreenrecorder-lib:i386;apt;multimedia;simplescreenrecorder-lib:i386 cuetools;apt;multimedia;cuetools shntool;apt;multimedia;shntool flac;apt;multimedia;flac entangle;apt;multimedia;entangle krita;apt;multimedia;krita soundconverter;apt;multimedia;soundconverter gimp;apt;multimedia;gimp vidcutter;apt;multimedia;vidcutter green-recorder;apt;multimedia;green-recorder radiotray;apt;multimedia;radiotray quodlibet;apt;multimedia;quodlibet python-cddb;apt;multimedia;python-cddb python-musicbrainz2;apt;multimedia;python-musicbrainz2 owncloud-client;apt;internet;owncloud-client syncthing-gtk;apt;internet;syncthing-gtk syncthing;apt;internet;syncthing insync;apt;internet;insync quiterss;apt;internet;quiterss frogr;apt;internet;frogr opera-stable;apt;internet;opera-stable google-chrome-stable;apt;internet;google-chrome-stable xchat-gnome;apt;internet;xchat-gnome xchat-gnome-indicator;apt;internet;xchat-gnome-indicator chromium-browser;apt;internet;chromium-browser chromium-browser-l10n;apt;internet;chromium-browser-l10n dropbox;apt;internet;dropbox qupzilla;apt;internet;qupzilla filezilla;apt;internet;filezilla hexchat;apt;internet;hexchat mumble;apt;internet;mumble imagedownloader;apt;internet;imagedownloader california;apt;internet;california midori;apt;internet;midori geary;apt;internet;geary corebird;apt;internet;corebird nextcloud-client;apt;internet;nextcloud-client nextcloud-client-caja;apt;internet;nextcloud-client-caja deluge-gtk;apt;internet;deluge-gtk deluge-torrent;apt;internet;deluge-torrent vivaldi-stable;apt;internet;vivaldi-stable qtqr;apt;utilities;qtqr cpu-g;apt;utilities;cpu-g screenfetch;apt;utilities;screenfetch xcalib;apt;utilities;xcalib conky-manager;apt;utilities;conky-manager conky-all;apt;utilities;conky-all plank;apt;utilities;plank indicator-sound-switcher;apt;utilities;indicator-sound-switcher y-ppa-manager;apt;utilities;y-ppa-manager synapse;apt;utilities;synapse acetoneiso;apt;utilities;acetoneiso guake;apt;utilities;guake tilda;apt;utilities;tilda psensor;apt;utilities;psensor kazam;apt;utilities;kazam bleachbit;apt;utilities;bleachbit gparted;apt;utilities;gparted gsmartcontrol;apt;utilities;gsmartcontrol terminator;apt;utilities;terminator aptik;apt;utilities;aptik gufw;apt;utilities;gufw numlockx;apt;utilities;numlockx grub-customizer;apt;utilities;grub-customizer chmsee;apt;utilities;chmsee unetbootin;apt;utilities;unebootin zim;apt;utilities;zim diodon;apt;utilities;diodon pyrenamer;apt;utilities;pyrenamer qt5ct;apt;utilities;qt5ct qt4-qtconfig;apt;utilities;qt4-qtconfig byobu;apt;utilities;byobu mupdf;apt;utilities;mupdf mupdf-tools;apt;utilities;mupdf-tools ukuu;apt;utilities;ukuu fcrackzip;apt;utilities;fcrackzip rarcrack;apt;utilities;rarcrack pdfcrack;apt;utilities;pdfcrack figlet;apt;utilities;figlet alltray;apt;utilities;alltray mate-sensors-applet-nvidia;apt;utilities;mate-sensors-applets-nvidia woeusb;apt;utilities;woeusb screenkey;apt;utilities;screenkey tmsu;apt;utilities;tmsu etcher-electron;apt;utilities;etcher-electron pdfgrep;apt;utilities;pdfgrep coinmon;npm;utilities;coinmon tldr;pip;utilities;tldr s-tui;pip;utilities;s-tui gyazo;apt;utilities;gyazo pip;pip;python;setuptools python3-dev;apt;python;python3-dev python3-pip;apt;python;python3-pip python3-pyqt5;apt;python;python3-pyqt5 pyqt5-dev-tools;apt;python;pyqt5-dev-tools setuptools;pip;python;setuptools PyOpenGL;pip;python;PyOpenGL tweepy;pip;python;tweepy weppy;pip;python;weppy py-term;pip;python;py-term steam;apt;games;steam jstest-gtk;apt;games;jstest-gtk brasero;apt;burningtools;brasero k3b;apt;burningtools;k3b k3b-extrathemes;apt;burningtools;k3b-extrathemes xfburn;apt;burningtools;xfburn whois;apt;nettools;whois iptraf;apt;nettools;iptraf iperf;apt;nettools;iperf wireshark;apt;nettools;wireshark tshark;apt;nettools;tshark zenmap;apt;nettools;zenmap dsniff;apt;nettools;dsniff aircrack-ng;apt;nettools;aricrack-ng SpoofMAC;pip;nettools;SpoofMAC speedtest-cli;pip;nettools;speedtest-cli whatportis;pip;nettools;whatportis droopescan;pip;nettools;droopescan nethogs;apt;nettools;nethogs caja-share;apt;cajaplugins;caja-share caja-wallpaper;apt;cajaplugins;caja-wallpaper caja-sendto;apt;cajaplugins;caka-sendto caja-image-converter;apt;cajaplugins;caja-image-converter insync-caja;apt;cajaplugins;insync-caja nautilus;apt;nautilus;nautilus file-roller;apt;nautilus;file-roller nautilus-emblems;apt;nautilus;nautilus-emblems nautilus-image-manipulator;apt;nautilus;nautilus-image-manipulator nautilus-image-converter;apt;nautilus;nautilus-image-converter nautilus-compare;apt;nautilus;nautilus-compare nautilus-actions;apt;nautilus;nautilus-actions nautilus-sendto;apt;nautilus;nautilus-sendto nautilus-share;apt;nautilus;nautilus-share nautilus-wipe;apt;nautilus;nautilus-wipe nautilus-script-audio-convert;apt;nautilus;nautilus-script-audio-convert nautilus-filename-repairer;apt;nautilus;filename-repairer nautilus-gtkhash;apt;nautilus;nautilus-gtkhash nautilus-ideviceinfo;apt;nautilus;nautilus-ideviceinfo ooo-thumbnailer;apt;nautilus;ooo-thumbnailer nautilus-dropbox;apt;nautilus;nautilus-dropbox nautilus-script-manager;apt;nautilus;nautilus-script-manager nautilus-columns;apt;nautilus;nautilus-columns nautilus-flickr-uploader;apt;nautilus;nautilus-flickr-uploader insync-nautilus;apt;nautilus;insync-nautilus gtkam-gimp;apt;gimp;gtkam-gimp gimp-gluas;apt;gimp;gimp-gluas pandora;apt;gimp;pandora gimp-data-extras;apt;gimp;gimp-data-extras gimp-lensfun;apt;gimp;gimp-lensfun gimp-gmic;apt;gimp;gimp-gmic gimp-ufraw;apt;gimp;gimp-ufraw gimp-texturize;apt;gimp;gimp-texturize gimp-plugin-registry;apt;gimp;gimp-plugin-registry rhythmbox-plugin-alternative-toolbar;apt;rhythmbox;rhythmbox-plugin-alternative-toolbar rhythmbox-plugin-artdisplay;apt;rhythmbox;rhythmbox-plugin-artdisplay rhythmbox-plugin-cdrecorder;apt;rhythmbox;rhythmbox-plugin-cdrecorder rhythmbox-plugin-close-on-hide;apt;rhythmbox;rhythmbox-plugin-close-on-hide rhythmbox-plugin-countdown-playlist;apt;rhythmbox;rhythmbox-plugin-countdown-playlist rhythmbox-plugin-coverart-browser;apt;rhythmbox;rhythmbox-plugin-coverart-browser rhythmbox-plugin-coverart-search;apt;rhythmbox;rhythmbox-pluginn-coverart-search rhythmbox-plugin-desktopart;apt;rhythmbox;rhythmbox-plugin-desktopart rhythmbox-plugin-equalizer;apt;rhythmbox;rhythmbox-plugin-equalizer rhythmbox-plugin-fileorganizer;apt;rhythmbox;rhythmbox-plugin-fileorganizer rhythmbox-plugin-fullscreen;apt;rhythmbox;rhythmbox-plugin-fullscreen rhythmbox-plugin-hide;apt;rhythmbox;rhythmbox-plugin-hide rhythmbox-plugin-jumptowindow;apt;rhythmbox;rhythmbox-plugin-jumptowindow rhythmbox-plugin-llyrics;apt;rhythmbox;rhythmbox-plugin-llyrics rhythmbox-plugin-looper;apt;rhythmbox;rhythmbox-plugin-looper rhythmbox-plugin-opencontainingfolder;apt;rhythmbox;rhythmbox-plugin-opencontainingfolder rhythmbox-plugin-parametriceq;apt;rhythmbox;rhythmbox-plugin-parametriceq rhythmbox-plugin-playlist-import-export;apt;rhythmbox;rhythmbox-plugin-playlist rhythmbox-plugin-podcast-pos;apt;rhythmbox;rhythmbox-plugin-podcast-pos rhythmbox-plugin-randomalbumplayer;apt;rhythmbox;rhythmbox-plugin-randomalbumplayer rhythmbox-plugin-rating-filters;apt;rhythmbox;rhythmbox-plugin-rating-filters rhythmbox-plugin-remembertherhythm;apt;rhythmbox;rhythmbox-plugin-remembertherhythm rhythmbox-plugin-repeat-one-song;apt;rhythmbox;rhythmbox-plugin-repeat-one-song rhythmbox-plugin-rhythmweb;apt;rhythmbox;rhythmbox-plugin-rhythmweb rhythmbox-plugin-screensaver;apt;rhythmbox;rhythmbox-plugin-screensaver rhythmbox-plugin-smallwindow;apt;rhythmbox;rhythmbox-plugin-smallwindow rhythmbox-plugin-spectrum;apt;rhythmbox;rhythmbox-plugin-spectrum rhythmbox-plugin-suspend;apt;rhythmbox;rhythmbox-plugin-suspend rhythmbox-plugin-tray-icon;apt;rhythmbox;rhythmbox-plugin-tray-icon rhythmbox-plugin-visualizer;apt;rhythmbox;rhythmbox-plugin-visualizer rhythmbox-plugin-wikipedia;apt;rhythmbox;rhythmbox-plugin-wikipedia rhythmbox-plugins;apt;rhythmbox;rhythmbox-plugins telegram-purple;apt;pidgin;telegram-purple pidgin-skype;apt;pidgin;pidgin-skype purple-facebook;apt;pidgin;purple-facebook purple-hangouts;apt;pidgin;purple-hangouts pidgin-hangouts;apt;pidgin;pidgin-hangouts pidgin-skypeweb;apt;pidgin;pidgin-skypeweb purple-skypeweb;apt;pidgin;purple-skypeweb unbound;apt;unbound;unbound ambiance-crunchy;apt;gtkthemes;ambiance-crunchy arc-theme;apt;gtkthemes;arc-theme ambiance-colors;apt;gtkthemes;ambiance-colors radiance-colors;apt;gtkthemes;radiance-colors ambiance-flat-colors;apt;gtkthemes;ambiance-flat-colors vivacious-colors-gtk-dark;apt;gtkthemes;vivacious-colors-gtk-dark vivacious-colors-gtk-light;apt;gtkthemes;vivacious-colors-gtk-light yosembiance-gtk-theme;apt;gtkthemes;yosembiance-gtk-theme ambiance-blackout-colors;apt;gtkthemes;ambiance-blackout-colors ambiance-blackout-flat-colors;apt;gtkthemes;ambiance-blackout-flat-colors radiance-flat-colors;apt;gtkthemes;radiance-flat-colors vibrancy-colors;apt;gtkthemes;vibrancy-colors vivacious-colors;apt;gtkthemes;vivacious-colors numix-gtk-theme;apt;gtkthemes;numix-gtk-theme adapta-gtk-theme;apt;gtkthemes;adapta-gtk-theme arc-icons;apt;icons;arc-icons ultra-flat-icons;apt;icons;ultra-flat-icons myelementary;apt;icons;myelementary ghost-flat-icons;apt;icons;ghost-flat-icons faenza-icon-theme;apt;icons;faenza-icon-theme faience-icon-theme;apt;icons;faience-icon-theme vibrantly-simple-icon-theme;apt;icons;vibrantly-simple-icon-theme rave-x-colors-icons;apt;icons;rave-x-colors-icons ravefinity-x-icons;apt;icons;ravefinity-x-icons numix-icon-theme;apt;icons;numix-icon-theme numix-icon-theme-circle;apt;icons;numix-icon-theme-circle solaar;apt;solaar;solaar pcscd;apt;cardreader;pcscd pcsc-tools;apt;cardreader;pcsc-tools libacr38u;apt;cardreader;libacr38u guvcview;apt;webcam;guvcview cheese;apt;webcam;cheese nvidia-370;apt;nvidia-370;nvidia-370 nvidia-settings;apt;nvidia-370;nvidia-settings nvidia-opencl-icd-370;apt;nvidia-370;nvidia-opencl-icd-370 nvidia-375;apt;nvidia-375;nvidia-375 nvidia-settings;apt;nvidia-375;nvidia-settings nvidia-opencl-icd-375;apt;nvidia-375;nvidia-opencl-icd-375 nvidia-378;apt;nvidia-378;nvidia-378 nvidia-settings;apt;nvidia-378;nvidia-settings nvidia-opencl-icd-378;apt;nvidia-378;nvidia-opencl-icd-378 libcuda1-378;apt;nvidia-378;libcuda1-378 nvidia-381;apt;nvidia-381;nvidia-381 nvidia-settings;apt;nvidia-381;nvidia-settings nvidia-opencl-icd-381;apt;nvidia-381;nvidia-opencl-icd-381 libcuda1-381;apt;nvidia-381;libcuda1-381 nvidia-384;apt;nvidia-384;nvidia-384 nvidia-settings;apt;nvidia-384;nvidia-settings nvidia-opencl-icd-384;apt;nvidia-384;nvidia-opencl-icd-384 libcuda1-384;apt;nvidia-384;libcuda1-384 tlp;apt;tlp;tlp notepadqq;apt;dev;notepadqq agave;apt;dev;agave utext;apt;dev;utext gpick;apt;dev;gpick virtualbox-5.1;apt;dev;virtualbox-5.1 build-essential;apt;dev;build-essential ubuntu-make;apt;dev;ubuntu-make ghex;apt;dev;ghex glade;apt;dev;glade eric;apt;dev;eric bluefish;apt;dev;bluefish meld;apt;dev;meld bluegriffon;apt;dev;bluegriffon zeal;apt;dev;zeal shellcheck;apt;dev;shellcheck umbrello;apt;dev;umbrello ack-grep;apt;dev;ack-grep ansible;apt;dev;ansible remark-lint;npm;dev;remark-lint jedi;npm;dev;jedi beautysh;pip;dev;beautys retext;pip;dev;retext mycli;pip;dev;mycli npm;apt;javascript;npm javascript-common;apt;javascript;javascript-common yarn;npm;javascript;yarn jshint;npm;javascript;jshint oracle-java9-installer;apt;java9;oracle-java9-installer oracle-java9-set-default;apt;java9;oracle-java9-set-default php7.0-cli;apt;php;php7.0-cli php-pear;apt;php;php-pear composer;apt;php;composer luajit;apt;lua;luajit ruby-dev;apt;ruby;ruby-dev anjuta;apt;anjuta;anjuta anjuta-extras;apt;anjuta;anjuta-extras brackets;apt;brackets;brackets codeblocks;apt;codeblocks;codeblocks codeblocks-contrib;apt;codeblocks;codeblocks-contrib geany;apt;geany;geany geany-plugins;apt;geany;geany-plugins geany-plugin-markdown;apt;geany;geany-plugin-markdown pycharm;apt;pycharm;pycharm sublime-text;apt;sublime-text;sublime-text kicad;apt;cad;kicad kicad-locale-fr;apt;cad;kicad-locale-fr librecad;apt;cad;librecad freecad;apt;cad;freecad atom;apt;atom;atom sync-settings;apm;atom;sync-settings sqlparse;pip;atom;sqlparse flake8;pip;atom;flake8 autopep8;pip;atom;autopep8 htmlbeautifier;gem;atom;htmlbeautifier kodi;apt;beta;kodi-beta kodi;apt;nightly;kodi-nightly nitrogen;apt;nitrogen;nitrogen firefox-trunk;apt;nightly;firefox-trunk firefox-trunk-locale-fr;apt;nightly;firefox-trunk-locale-fr libreoffice;apt;office;libreoffice54 winehq-devel;apt;wine;winehq-devel winetricks;apt;wine;winetricks playonlinux;apt;wine;playonlinux mongodb-org;apt;mongodb;mongodb-org qt4-dev-tools;apt;qt;qt4-dev-tools qt4-linguist-tools;apt;qt;qt4-linguist-tools qt5-doc;apt;qt;qt5-doc qttools5-doc;apt;qt;qttools5-doc qttools5-dev-tools;apt;qt;qttools5-dev-tools qttools5-examples;apt;qt;qttools5-examples qttools5-doc-html;apt;qt;qttools5-doc-html" #-----------------------------------------------------------------------------# # Specific Repo list and functions # #-----------------------------------------------------------------------------# # # list of specific repositories # fields : unique ID, function to add repo # AppsRepo="kodi-beta;addSpecificRepo_KodiBeta kodi-nightly;addSpecificRepo_KodiNightly libreoffice54:addSpecificRepo_Libreoffice54 winehq-devel:addSpecificRepo_Wine mongodb-org;addSpecificRepo_MongoDB3CE gyazo;addSpecificRepo_Gyazo" # # Gyazo # function addSpecificRepo_Gyazo () { addKey "https://packagecloud.io/gyazo/gyazo-for-linux/gpgkey" addRepo gyazo_gyazo-for-linux.list \ "deb https://packagecloud.io/gyazo/gyazo-for-linux/ubuntu/ xenial main" \ "deb-src https://packagecloud.io/gyazo/gyazo-for-linux/ubuntu/ xenial main" } # # MongoDB 3 CE # function addSpecificRepo_MongoDB3CE () { addKey "hkp://keyserver.ubuntu.com:80" "2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5" addRepo "mongodb-org-3.6.list" "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/testing multiverse" } # # Wine Build # function addSpecificRepo_Wine () { addKey "https://dl.winehq.org/wine-builds/Release.key" addPPA "https://dl.winehq.org/wine-builds/ubuntu/" } # # LibreOffice 5.4 # function addSpecificRepo_Libreoffice54 () { addPPA "ppa:libreoffice/libreoffice-5-4" } # # Kodi Beta, repo # function addSpecificRepo_KodiBeta () { addPPA "ppa:team-xbmc/unstable" } # # Kodi Nightly repo # function addSpecificRepo_KodiNightly () { addPPA "ppa:team-xbmc/xbmc-nightly" } #-----------------------------------------------------------------------------# # Package post install functions list # #-----------------------------------------------------------------------------# # # list of post install functions # fields : unique ID, function to process after install # AppsTrtFct="nitrogen;nitrogenTrtFct mongodb-org;mongodbTrtFct qttools5-dev-tools;qtTrtFct" # # QT5 Dev Tools # function qtTrtFct () { runCmd "sudo ln -s /usr/share/qtchooser/qt5-x86_64-linux-gnu.conf /usr/lib/x86_64-linux-gnu/qtchooser/default.conf" createAppShortcut "/usr/bin/designer" \ "/home/"$myHomedir"/.icons/qtdesigner.png" \ "GNOME;GTK;Development;IDE" \ "QT Designer 5" \ "local" \ update-menus } # # MongoDB 3 CE # function mongodbTrtFct () { runCmd "sudo systemctl unmask mongodb.service" runCmd "sudo systemctl enable mongodb" runCmd "sudo systemctl start mongodb" } # # nitrogen post install function # function nitrogenTrtFct () { # if [[ $DESKTOP_SESSION == *"mate"* ]]; then if isMate; then runCmd "gsettings set org.mate.background draw-background false" runCmd "gsettings set org.mate.background show-desktop-icons false" createAppShortcut "bash -c \"sleep 10; nitrogen --restore\"" \ "/home/"$myHomedir".icons/franz.png" \ "Network;InstantMessaging" \ "Nitrogen" \ "local" \ "start" update-menus else printf "[ERR] only Mate Desktop is currently supported\n" fi } #------------------------------------------------------------------------------# # core functions # #------------------------------------------------------------------------------# # # display a simple message + CR # function smsgn () { printf "$*\n" } # # display a simple message # function smsg () { printf "$*" } # # display a message + notification # function msg () { printf "\n" printf "$JAUNE" if [ "$#" -gt "0" ]; then printf "$*\n" /usr/bin/notify-send -t 7000 "$*" fi printf "$NORMAL" } # # display a message between [ ] depending of the ret_code # function retCode () { typeset ret_code="$1" if [ $ret_code == 0 ]; then printf "[ ""$BOLDVERT""OK"$NORMAL" ] " else printf "[ ""$BOLDROUGE""!!"$NORMAL" ] " fi #printf "\n" } # # run a shell command and display a message between [ ] depending on the ret_code # function runCmd () { typeset cmd="$1" typeset ret_code printf "[CMD] executing : $cmd " printf "\n[CMD] executing $cmd\n" &>> $logFile eval $cmd" &>> $logFile" ret_code=$? retCode $ret_code } # # display a message + notification + ask to push a key to continue # function pressKey () { printf "$*\n" if which mpg123 >/dev/null; then mpg123 -q $scriptDir/notify.mp3 & fi printf "$INV" read -p "Press key to continue ..." printf "$NORMAL" } # # check if OS is Mint # function isMint () { OS=`lsb_release -d | awk -F':' '{print $2}' | awk -F'\t' '{print $2}'` if [[ $OS == *"Linux Mint 18"* ]]; then return 0 else return 1 fi } # # check if DE is Mate # function isMate () { if [[ $DESKTOP_SESSION == *"mate"* ]]; then return 0 else return 1 fi } # # system update # function updateSystem () { typeset ret_code printf "[APT] update " printf "\n[APT] update\n" &>> $logFile sudo apt-get update &>> $logFile ret_code=$? retCode $ret_code printf "\n" printf "[APT] upgrade " printf "\n[APT] upgrade\n" &>> $logFile sudo apt-get -y upgrade &>> $logFile ret_code=$? retCode $ret_code printf "\n" printf "[APT] dist-upgrade " printf "\n[APT] dist-upgrade\n" &>> $logFile sudo apt-get -y dist-upgrade &>> $logFile ret_code=$? retCode $ret_code printf "\n" printf "[SNAP] refresh " printf "\n[SNAP] refresh\n" &>> $logFile sudo snap refresh &>> $logFile ret_code=$? retCode $ret_code printf "\n" } # # add ppa # input : ppa name # function addPPA () { typeset ret_code printf "[PPA] adding : $* " printf "\n[PPA] adding $*\n" &>> $logFile sudo add-apt-repository -y $* &>> $logFile ret_code=$? retCode $ret_code printf "\n" } # # add repo's key # input : file's url OR keyserver + key # function addKey () { typeset ret_code case $# in "1") printf "[REPO] adding key from file : $1 " printf "\n[REPO] adding key from file $1\n" &>> $logFile wget -qO - $1 | sudo apt-key add - &>> $logFile ret_code=$? retCode $ret_code ;; "2") printf "[REPO] adding key $2 from $1 " printf "\n[REPO] adding key $2 from $1\n" &>> $logFile sudo apt-key adv --keyserver $1 --recv-keys $2 - &>> $logFile ret_code=$? retCode $ret_code ;; esac printf "\n" } # # create new entry in /etc/apt/source.list.d/ # input : filename, repo, src repo # function addRepo () { typeset ret_code printf "[REPO] adding : $2 in $1" printf "\n[REPO] adding $2 in $1\n" &>> $logFile echo $2 | sudo tee /etc/apt/sources.list.d/$1 &>> $logFile ret_code=$? retCode $ret_code if [ "$#" -eq 3 ]; then printf "[REPO] adding : $3 in $1" printf "\n[REPO] adding $3 in $1\n" &>> $logFile echo $3 | sudo tee -a /etc/apt/sources.list.d/$1 &>> $logFile ret_code=$? retCode $ret_code fi printf "\n" } # # install package manually # input : url of package, package name # function installPackageDpkg () { runCmd "cd /tmp" printf "\n" runCmd "wget -q -O $2 $1" printf "\n" runCmd "sudo dpkg -i $2 " printf "\n" runCmd "sudo apt-get install -fy" printf "\n" } # # install app by remote shell script # input : script url, script name, opt extra param #TODO:#TODO:#TODO:#TODO:#TODO:#TODO:#TODO:#TODO: function installAppRemoteScript () { runCmd "cd /tmp" printf "\n" runCmd "wget -q -O $2 $1" printf "\n" runCmd "chmod +x $2" printf "\n" } # # install app from archive # input : archive url, archive name, archive type, orig dir, dest dir #TODO:#TODO:#TODO:#TODO:#TODO:#TODO:#TODO:#TODO: function installAppFromArchive () { runCmd "cd /tmp" printf "\n" runCmd "wget -q -O $2 $1" printf "\n" case "$3" in "tgz") runCmd "tar xzf $2" printf "\n" ;; "xz") runCmd "tar xvJf $2" printf "\n" ;; esac runCmd "mkdir -p $5" printf "\n" } # # install package from repositories # input : package manager, package name # package manager available : apt, pip, npm, gem, snap # TODO: add apm, flatpak, umake? # function installPackage () { typeset pkg="$*" typeset ret_code case $1 in "apt") printf "[APT] Installing by $* " printf "\n[APT] installing by $*\n" &>> $logFile sudo apt-get install -fy $* &>> $logFile ret_code=$? retCode $ret_code printf "\n" ;; "pip") if which pip3 >/dev/null; then printf "[PIP] Installing by $* " printf "\n[PIP] installing by $*\n" &>> $logFile sudo -H pip3 install --upgrade $* &>> $logFile ret_code=$? retCode $ret_code printf "\n" else printf "[ERR] pip3 not found, installing...\n" printf "\n[ERR] pip3 not found, installing...\n" &>> $logFile installPackage apt "python3-pip" installPackage pip "pip" fi ;; "npm") if which npm >/dev/null; then printf "[NPM] Installing by $* " printf "\n[NPM] installing by $*\n" &>> $logFile sudo npm install -g $* &>> $logFile ret_code=$? retCode $ret_code printf "\n" else printf "[ERR] npm not found, installing...\n" printf "\n[ERR] npm not found, installing...\n" &>> $logFile installPackage apt "npm" fi ;; "gem") if which gem >/dev/null; then printf "[GEM] Installing by $* " printf "\n[GEM] installing by $*\n" &>> $logFile sudo gem install $* &>> $logFile ret_code=$? retCode $ret_code printf "\n" else printf "[ERR] gem not found, installing...\n" printf "\n[ERR] gem not found, installing...\n" &>> $logFile installPackage apt "ruby-dev" fi ;; "snap") if which snap >/dev/null; then printf "[SNAP] Installing by $* " printf "\n[SNAP] installing by $*\n" &>> $logFile sudo snap install $* &>> $logFile ret_code=$? retCode $ret_code printf "\n" else printf "[ERR] snap not found, installing...\n" printf "\n[ERR] snap not found, installing...\n" &>> $logFile installPackage apt "snapd" fi ;; esac } # # check dependency and install it if necessary # input : package manager, package name # function checkAndInstallDep () { if ! which $2 >/dev/null; then printf "[DEP] check dependency : $2 [ ""$BOLDROUGE""!!"$NORMAL" ]\n" printf "[ERR] dependency $2 not found\n" &>> $logFile case $1 in "apt") installPackage apt $2 ;; "npm") installPackage npm $2 ;; "pip") installPackage pip $2 ;; "gem") installPackage gem $2 ;; "snap") installPackage snap $2 ;; esac fi } # # dependencies used in the script checked and installed if necessary # function depCheck () { printf "$BOLDJAUNE""Script dependencies checking\n\n""$NORMAL" checkAndInstallDep apt mpg123 checkAndInstallDep apt libnotify-bin checkAndInstallDep apt lsb-release checkAndInstallDep apt cifs-utils } # # install required ppa and settings # function addRequiredPPA () { msg "Adding PPA and repositories" runCmd "sudo dpkg --add-architecture i386" installPackage apt "apt-transport-https" runCmd "echo sience-config science-config/group select '$myHomedir ($myHomedir)' | sudo debconf-set-selections" addPPA "ppa:noobslab/themes" # themes from noobslab addPPA "ppa:noobslab/icons" # icons from noobslab addPPA "ppa:numix/ppa" # theme Numix addPPA "ppa:ravefinity-project/ppa" # Themes addPPA "ppa:teejee2008/ppa" # Aptik - Conky-Manage addPPA "ppa:yktooo/ppa" # indicator-sound-switcher addPPA "ppa:webupd8team/y-ppa-manager" # y-ppa-manager addPPA "ppa:webupd8team/atom" # IDE addPPA "ppa:videolan/stable-daily" # video player addPPA "ppa:ubuntu-desktop/ubuntu-make" # ubuntu-make addPPA "ppa:nowrep/qupzilla" # web browser addPPA "ppa:atareao/atareao" # pushbullet-indicator, imagedownloader, gqrcode, cpu-g addPPA "ppa:fossfreedom/rhythmbox-plugins"; # Rhythmbox plugins addPPA "ppa:fossfreedom/rhythmbox" # Rhythmbox addPPA "ppa:nilarimogard/webupd8" # Audacious, Grive2, Pidgin-indicator addPPA "ppa:oibaf/graphics-drivers" # free graphics-drivers + mesa addPPA "ppa:team-xbmc/ppa" # Kodi addPPA "ppa:webupd8team/java" # Oracle Java SE 7/8 addPPA "ppa:hugin/hugin-builds" # image editor addPPA "ppa:mumble/release" # Mumble addPPA "ppa:atareao/utext" # Markdown editor addPPA "ppa:danielrichter2007/grub-customizer" # grub-customizer addPPA "ppa:lucioc/sayonara" # audio player addPPA "ppa:haraldhv/shotcut" # video editor addPPA "ppa:flacon/ppa" # audio extraction addPPA "ppa:jaap.karssenberg/zim" # local wiki addPPA "ppa:pmjdebruijn/darktable-release" # raw editor addPPA "ppa:js-reynaud/kicad-4" # CAD addPPA "ppa:stebbins/handbrake-releases" # video transcoder addPPA "ppa:webupd8team/brackets" # IDE addPPA "ppa:graphics-drivers/ppa" # non-free nvidia drivers addPPA "ppa:djcj/hybrid" # FFMpeg, MKVToolnix addPPA "ppa:diodon-team/stable" # clipboard manager addPPA "ppa:notepadqq-team/notepadqq" # notepad++ clone addPPA "ppa:mariospr/frogr" # flickr manager addPPA "ppa:ubuntuhandbook1/slowmovideo" # slow motion video editor addPPA "ppa:transmissionbt/ppa" # bittorrent client addPPA "ppa:geary-team/releases" # email client addPPA "ppa:ubuntuhandbook1/corebird" # corebird addPPA "ppa:tista/adapta" # adapta gtk theme addPPA "ppa:maarten-baert/simplescreenrecorder" # simplescreenrecorder addPPA "ppa:dhor/myway" # rawtherapee (newer version) addPPA "ppa:zeal-developers/ppa" # Zeal (newer version) addPPA "ppa:nextcloud-devs/client" # NextCloud client addPPA "ppa:deluge-team/ppa" # Deluge P2P client addPPA "ppa:kritalime/ppa" # Krita addPPA "ppa:otto-kesselgulasch/gimp" # Gmic2 addPPA "ppa:ozmartian/apps" # Vidcutter addPPA "ppa:fossproject/ppa" # green-recorder addPPA "ppa:quiterss/quiterss" # quiterss addPPA "ppa:tmsu/ppa" # tmsu addPPA "ppa:ansible/ansible" # ansiaddmsg "Adding Opera repository" addKey "http://deb.opera.com/archive.key" addRepo opera.list \ "deb http://deb.opera.com/opera-stable/ stable non-free" addKey "https://dl.google.com/linux/linux_signing_key.pub" addRepo google-chrome.list \ "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" addKey "https://d2t3ff60b2tol4.cloudfront.net/services@insynchq.com.gpg.key" addRepo insync.list \ "deb http://apt.insynchq.com/ubuntu xenial non-free contrib" addKey "hkp://p80.pool.sks-keyservers.net:80" \ "58118E89F3A912897C070ADBF76221572C52609D" addRepo docker.list \ "deb https://apt.dockerproject.org/repo ubuntu-xenial main" addKey "https://syncthing.net/release-key.txt" addRepo syncthing.list \ "deb http://apt.syncthing.net/ syncthing release" addKey "http://download.opensuse.org/repositories/isv:ownCloud:desktop/Ubuntu_16.04/Release.key" addRepo owncloud-client.list \ "deb http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Ubuntu_16.04/ /" addKey "https://mkvtoolnix.download/gpg-pub-moritzbunkus.txt" addRepo mkv.list \ "deb http://mkvtoolnix.download/ubuntu/xenial/ ./" \ "deb-src http://mkvtoolnix.download/ubuntu/xenial/ ./ " addKey "https://jgeboski.github.io/obs.key" addRepo jgeboski.list \ "deb http://download.opensuse.org/repositories/home:/jgeboski/xUbuntu_16.04/ ./" addKey "hkp://keyserver.ubuntu.com:80" \ "BBEBDCB318AD50EC6865090613B00F1FD2C19886" addRepo spotify.list \ "deb http://repository.spotify.com stable non-free" addKey "http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc" addKey "http://download.virtualbox.org/virtualbox/debian/oracle_vbox_2016.asc" addRepo virtualbox.list \ "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" addKey "http://archive.getdeb.net/getdeb-archive.key" addRepo getdeb.list \ "deb http://archive.getdeb.net/ubuntu xenial-getdeb apps games" addKey "http://repo.vivaldi.com/stable/linux_signing_key.pub" addKey "keyserver.ubuntu.com" \ "1397BC53640DB551" addRepo vivaldi.list \ "deb http://repo.vivaldi.com/stable/deb/ stable main " addKey "https://download.sublimetext.com/sublimehq-pub.gpg" addRepo sublime-text.list \ "deb https://download.sublimetext.com/ apt/dev/" addKey "hkp://pgp.mit.edu:80" \ "379CE192D401AB61" addRepo etcher.list \ "deb https://dl.bintray.com/resin-io/debian stable etcher" updateSystem } # # add specific repository for a given package # input : unique ID # function addSpecificRepoFct () { for i in $AppsRepo; do appRepo=(${i//;/ }) if [ "${appRepo[0]}" == "$1" ]; then printf "[ADD_REPO_FCT] for package : $1, " printf "add repo by function : ${appRepo[1]} \n" eval "${appRepo[1]}" fi done updateSystem #unset i #unset appRepo } # # find and execute Pre/Post install functions for a specific app # input : unique ID # function processAppTrtFct () { for i in $AppsTrtFct; do appTrtFct=(${i//;/ }) if [ "${appTrtFct[0]}" == "$1" ]; then printf "[APP_TRT_FCT] for package : $1, " printf "processing function : ${appTrtFct[1]} \n" eval "${appTrtFct[1]}" fi done } # # install all about a specific category from Apps array app list (headless) # input : category name # function installAppsFromList () { msg "Installing apps from $1 category" for i in $Apps; do app=(${i//;/ }) if [ "${app[2]}" == "$1" ]; then addSpecificRepoFct ${app[3]} installPackage ${app[1]} ${app[0]} processAppTrtFct ${app[3]} fi done } # # generate install apps menu about a specific category from Apps array app list (Menu) # input : category name # function installAppsFromListMenu () { for i in $Apps; do app=(${i//;/ }) if [ "${app[2]}" == "$1" ]; then #list+=("${app[0]}" "${app[0]}" "ON") list+=("${app[3]}" "${app[3]}" "ON") fi done pkg=$(whiptail \ --title "Yggdrasil $version - App Install ($1)" \ --checklist \ "Select app to install and press OK" 25 80 19 \ "${list[@]}" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then for pkgToInstall in $pkg; do for i in $Apps; do app=(${i//;/ }) if [ "${app[3]}" == "${pkgToInstall//\"}" ]; then addSpecificRepoFct ${app[3]} installPackage ${app[1]} ${app[0]} processAppTrtFct ${app[3]} fi done done fi unset list pressKey } # # create app shortcut # inputs : bin to exec, icon path, category, name, local/global, start w/ session # function createAppShortcut () { typeset ret_code shortcut='[Desktop Entry]\n' shortcut+='Encoding=UTF-8\n' shortcut+='Terminal=0\n' shortcut+='Exec='$1'\n' shortcut+='Icon='$2'\n' shortcut+='Type=Application\n' if [ "$6" == "start" ]; then shortcut+='X-MATE-Autostart-enabled=true\n\n' else shortcut+='Categories='$3';\n' fi shortcut+='StartupNotify=true\n' shortcut+='Name='$4'\n' shortcut+='GenericName='$4'\n' shortcut+='Comment=' if [ "$5" == "global" ]; then smsg "creating shortcut for $4 " echo -e $shortcut > /usr/share/applications/"$4".desktop ret_code=$? retCode $ret_code else mkdir -p /home/$myHomedir/.local/share/applications smsg "creating shortcut for $4 " echo -e $shortcut > /home/"$myHomedir"/.local/share/applications/"$4".desktop ret_code=$? retCode $ret_code fi } # # show usage for headless mode # function usage () { printf "\n" printf "$BOLDJAUNE" printf "██╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ███████╗██╗██╗ \n" printf "╚██╗ ██╔╝██╔════╝ ██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔════╝██║██║ \n" printf " ╚████╔╝ ██║ ███╗██║ ███╗██║ ██║██████╔╝███████║███████╗██║██║ \n" printf " ╚██╔╝ ██║ ██║██║ ██║██║ ██║██╔══██╗██╔══██║╚════██║██║██║ \n" printf " ██║ ╚██████╔╝╚██████╔╝██████╔╝██║ ██║██║ ██║███████║██║███████╗\n" printf " ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝╚══════╝\n" printf "$BOLDROUGE Customize Linux Mint & Ubuntu derivatives made easier\n" printf "$BOLDBLANC ver "$version" - GPLv3 - Francois B. (Makotosan) - makotonoblog.be\n" printf "\n" printf "$NORMAL" printf "Usage : yggdrasil [options]\n" printf " -a : install all apps (except: customization,tweak,dev,nightly,beta,hardware)\n" printf " -c : install gtk themes and icons\n" printf " -v : show verison number\n" printf " -h : show help & informations\n" } #-----------------------------------------------------------------------------# # install, config, ... functions # #-----------------------------------------------------------------------------# # # install Base Apps (headless) # function installBase () { installAppsFromList base } # # install Base Apps (Menu) # function installBaseMenu () { installAppsFromListMenu base } # # install Office Apps (headless) # function installOffice () { installAppsFromList office } # # install Office Apps (Menu) # function installOfficeMenu () { installAppsFromListMenu office } # # install Multimedia Apps (headless) # function installMultimedia () { installAppsFromList multimedia } # # install Multimedia Apps (Menu) # function installMultimediaMenu () { installAppsFromListMenu multimedia } #TODO: function installMultimediaExt () { msg "Installing Multimedia apps and tools" cd /tmp msg "Téléchargement de XnRetro" wget http://download.xnview.com/XnRetro-linux.tgz msg "Installation de XnRetro" tar xzf XnRetro-linux.tgz mv XnRetro /home/$myHomedir/Apps createAppShortcut "/home/"$myHomedir"/Apps/XnRetro/xnretro.sh" \ "/home/"$myHomedir"/Apps/XnRetro/xnretro.png" \ "Graphics" \ "XnRetro" \ "local" update-menus msg "Téléchargement de XnView" wget http://download.xnview.com/XnViewMP-linux-x64.deb msg "Installation de XnView" sudo dpkg -i XnViewMP-linux-x64.deb sudo apt-get install -fy } #TODO: function installEbook () { msg "Installation eBook apps and tools" runCmd "sudo apt-get install -y fbreader"; smsgn "Installing fbreader" cd /tmp runCmd "sudo -v && wget -q --no-check-certificate -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py | sudo python -c \"import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()\"" smsgn "Installing calibre" } # # install Internet Apps (headless) # function installInternet () { echo "opera-stable opera-stable/add-deb-source boolean false" | sudo debconf-set-selections installAppsFromList internet } # # install Internet Apps (Menu) # function installInternetMenu () { echo "opera-stable opera-stable/add-deb-source boolean false" | sudo debconf-set-selections installAppsFromListMenu internet } #TODO: function installInternetExt () { msg "Installing Internet apps and tools" msg "Téléchargement de Skype" installPackageDpkg https://go.skype.com/skypeforlinux-64.deb \ skypeforlinux-64.deb msg "Téléchargement de Viber" installPackageDpkg http://download.cdn.viber.com/cdn/desktop/Linux/viber.deb \ viber.deb msg "Téléchargement de MegaSync" installPackageDpkg https://mega.nz/linux/MEGAsync/xUbuntu_16.04/amd64/megasync-xUbuntu_16.04_amd64.deb \ megasync-xUbuntu_16.04_amd64.deb msg "Installation de Discord" installPackageDpkg https://discordapp.com/api/download?platform=linux&format=deb \ discord.deb msg "Téléchargement de Telegram Desktop" wget -O tsetup.tar.xz https://tdesktop.com/linux msg "Installation de Telegram Desktop" tar xvJf tsetup.tar.xz mv Telegram /home/$myHomedir/Apps sh -c "/home/"$myHomedir"/Apps/Telegram/Telegram &" && sleep 10 && pkill Telegram #TODO: archive no dir msg "Téléchargement de Franz" mkdir -p Franz cd Franz wget -O franz.tgz https://github.com/imprecision/franz-app/releases/download/3.1.0/Franz-linux-x64-3.1.0.tgz msg "Installation de Franz" tar xzf franz.tgz cd .. mv Franz /home/$myHomedir/Apps createAppShortcut "/home/"$myHomedir"/Apps/Franz/Franz" \ "/home/"$myHomedir".icons/franz.png" \ "Network;InstantMessaging" \ "Franz" \ "local" update-menus } # # install Misc Utilities Apps (headless) # function installMiscUtilities () { installAppsFromList utilities } # # install Misc Utilities Apps (Menu) # function installMiscUtilitiesMenu () { installAppsFromListMenu utilities } # # install Wine Build (headless) # function installWine () { msg "Installing Wine Apps" installAppsFromList wine } # # install Wine Build (Menu) # function installWineMenu () { installAppsFromListMenu wine } # # install Game Apps (headless) # function installGames () { msg "Installing Games apps and tools" installAppsFromList games } # # install Game Apps (Menu) # function installGamesMenu () { installAppsFromListMenu games } # # install Burning Apps (headless) # function installBurningTools () { msg "Installing CD/DVD/BD Burning apps and tools" installAppsFromListMenu burningtools } # # install Burning Apps (Menu) # function installBurningToolsMenu () { installAppsFromListMenu burningtools } # # install Network Apps (headless) # function installNetTools () { msg "Installing Network apps and tools" installAppsFromList nettools } # # install Network Apps (Menu) # function installNetToolsMenu () { installAppsFromListMenu nettools } # # install Caja Plugins (headless) # function installCajaPlugins () { msg "Installing Caja extensions" installAppsFromList cajaplugins } # # install Caja Plugins (Menu) # function installCajaPluginsMenu () { installAppsFromListMenu cajaplugins } # # install Nautilus Apps + plugins (headless) # function installNautilusAndPlugins () { msg "Installing Nautilus and extensions" installAppsFromList nautilus } # # install Nautilus Apps + plugins (Menu) # function installNautilusAndPluginsMenu () { installAppsFromListMenu nautilus } # # install Gimp plugins (headless) # function installGimpPlugins () { msg "Installing Gimp extensions" installAppsFromList gimp } # # install Gimp plugins (Menu) # function installGimpPluginsMenu () { installAppsFromListMenu gimp } # # install RhythmBox plugins (headless) # function installRhythmBoxPlugins () { msg "Installing RhythmBox extensions" installAppsFromList rhythmbox } # # install RhythmBox plugins (Menu) # function installRhythmBoxPluginsMenu () { installAppsFromListMenu rhythmbox } # # install Pidgin plugins (headless) # function installPidginPlugins () { msg "Installing Pidgin extensions" installAppsFromList pidgin } # # install Pidgin plugins (Menu) # function installPidginPluginsMenu () { installAppsFromListMenu pidgin } # # install Nitrogen app (headless) # function installNitrogen () { msg "Installing Nitrogren" installAppsFromList nitrogen } # # install Nitrogen app (Menu) # function installNitrogenMenu () { installAppsFromListMenu nitrogen } # # install Beta Apps (headless) # function installBeta () { msg "Installing Beta Apps" installAppsFromList beta } # # install Beta Apps (Menu) # function installBetaMenu () { installAppsFromListMenu beta } # # install Nightly Apps (headless) # function installNightly () { msg "Installing Nightly Apps" installAppsFromList nightly } # # install Nightly Apps (Menu) # function installNightlyMenu () { installAppsFromListMenu nightly } # # install GTK Themes (headless) # function installThemes () { msg "Installing themes" installAppsFromList gtkthemes } # # install GTK Themes (Menu) # function installThemesMenu () { installAppsFromListMenu gtkthemes } # # install Icon Themes (headless) # function installIcons () { msg "Installing icons" installAppsFromList icons } # # install Icon Themes (Menu) # function installIconsMenu () { installAppsFromListMenu icons } #TODO: function installPlankThemes () { msg "Installing Plank themes" checkAndInstallDep apt plank if ! (( $(ps -ef | grep -v grep | grep plank | wc -l) > 0 )); then plank 2&>1 >/dev/null & sleep 10 fi yes | sh -c "cd ~ \ && mkdir -p ~/.temp-plank-themer \ && cd ~/.temp-plank-themer \ && wget https://github.com/rhoconlinux/plank-themer/archive/master.zip \ && unzip master.zip \ && cd plank-themer-master/ \ && rm -fR ~/.config/plank/dock1/theme_index; \ rm -fR ~/.config/plank/dock1/themes-repo; \ cp -a theme_index/ ~/.config/plank/dock1 \ && cp -a themes-repo/ ~/.config/plank/dock1 \ && cd ~ \ && rm -R ~/.temp-plank-themer \ && sh ~/.config/plank/dock1/theme_index/plank-on-dock-themer.sh" } # # install Solaar App (headless) # function installSolaar () { msg "Installing Solaar" installAppsFromList solaar } # # install Solaar App (Menu) # function installSolaarMenu () { installAppsFromListMenu solaar } # # install CardReader Apps (headless) # function installCardReader () { msg "Installing CardReader and utils" installAppsFromList cardreader } # # install CardReader Apps (Menu) # function installCardReaderMenu () { installAppsFromListMenu cardreader } # # update AMD/Intel CPU Microcode # function updateMicrocode () { oldMicrocode=`cat /proc/cpuinfo | grep -i --color microcode -m 1` intel=`cat /proc/cpuinfo | grep -i Intel | wc -l` amd=`cat /proc/cpuinfo | grep -i Amd | wc -l` if [ "$intel" -gt "0" ]; then installPackage apt intel-microcode elif [ "$amd" -gt "0" ]; then installPackage apt amd64-microcode fi newMicrocode=`cat /proc/cpuinfo | grep -i --color microcode -m 1` printf "[INFO] Microcode updated from "$oldMicrocode" version to "$newMicrocode" version\n" } # # fix some config issue with Intel Wireless 6320 cards # function fixWirelessIntel6320 () { printf "[INFO] backuping config : " runCmd "sudo cp /etc/modprobe.d/iwlwifi.conf /etc/modprobe.d/iwlwifi.conf.bak" printf "[INFO] applying config : " runCmd "echo options iwlwifi bt_coex_active=0 swcrypto=1 11n_disable=8 | sudo tee /etc/modprobe.d/iwlwifi.conf" printf "[INFO] reboot required !!!" printf "\n" } # # install Webcam Apps (headless) # function installWebcam () { msg "Installing Apps needed for Webcams" installAppsFromList webcam } # # install Webcam Apps (Menu) # function installWebcamMenu () { installAppsFromListMenu webcam } # # install Nvidia Drivers (headless) # function installNvidia370 () { msg "Installing Nvidia 370 driver" installAppsFromList nvidia-370 } # # install Nvidia Drivers (Menu) # function installNvidia370Menu () { installAppsFromListMenu nvidia-370 } # # install Nvidia Drivers (headless) # function installNvidia375 () { msg "Installing Nvidia 375 driver" installAppsFromList nvidia-375 } # # install Nvidia Drivers (Menu) # function installNvidia375Menu () { installAppsFromListMenu nvidia-375 } # # install Nvidia Drivers (headless) # function installNvidia378 () { msg "Installing Nvidia 378 driver" installAppsFromList nvidia-378 } # # install Nvidia Drivers (Menu) # function installNvidia378Menu () { installAppsFromListMenu nvidia-378 } # # install Nvidia Drivers (headless) # function installNvidia381 () { msg "Installing Nvidia 381 driver" installAppsFromList nvidia-381 } # # install Nvidia Drivers (Menu) # function installNvidia381Menu () { installAppsFromListMenu nvidia-381 } # # install Nvidia Drivers (headless) # function installNvidia384 () { msg "Installing Nvidia 384 driver" installAppsFromList nvidia-384 } # # install Nvidia Drivers (Menu) # function installNvidia384Menu () { installAppsFromListMenu nvidia-384 } # # install TLP App (headless) # function installTLP () { msg "Installing TLP" installAppsFromList tlp } # # install TLP App (Menu) # function installTLPMenu () { installAppsFromListMenu tlp } #TODO: function installKeyIDuDev () { msg "Adding UDEV rules" sudo sh -c "echo '# this udev file should be used with udev 188 and newer\n\ ACTION!=\"add|change\", GOTO=\"u2f_end\"\n\ \n\ # Key-ID FIDO U2F\n\ KERNEL==\"hidraw*\", SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"096e\", ATTRS{idProduct}==\"0850|0880\", TAG+=\"uaccess\"\n\ \n\ LABEL=\"u2f_end\"' > /etc/udev/rules.d/70-u2f.rules" rmcCmd "sudo service udev restart" } # # install Dev Apps (headless) # function installDevApps () { msg "Installing base Dev apps and tools" installAppsFromList dev } # # install Dev Apps (Menu) # function installDevAppsMenu () { installAppsFromListMenu dev } # # install JAVA 9 (headless) # function installJava9 () { msg "Installing Java9 + set as Default" installAppsFromList java9 } # # install JAVA 9 (Menu) # function installJava9Menu () { installAppsFromListMenu java9 } #TODO: function installNode8LTS () { msg "Installing NodeJS 8 LTS" curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - &>> $logFile && retCode $? && smsgn "Adding Node repository" runCmd "sudo apt-get install -y nodejs"; smsgn "Installing nodejs" } # # install Mongo DB 3 CE (headless) # function installMongo3CE () { msg "Installing Mongo DB 3 CE Apps" installAppsFromList mongodb-org } # # install Mongo DB 3 CE (Menu) # function installMongo3CEMenu () { installAppsFromListMenu mongodb-org } # # install Python Apps (headless) # function installPython () { msg "Installing Python apps and tools" installAppsFromList python } # # install Python Apps (Menu) # function installPythonMenu () { installAppsFromListMenu python } # # install PHP Apps (headless) # function installPHP () { msg "Installing PHP apps and tools" installAppsFromList php } # # install PHP Apps (Menu) # function installPHPMenu () { installAppsFromListMenu php } # # install QT Apps/tools (headless) # function installQT () { msg "Installing QT apps and tools" installAppsFromList qt } # # install QT Apps/tools (Menu) # function installQTMenu () { installAppsFromListMenu qt } # # install LUA Apps (headless) # function installLUA () { msg "Installing LUA apps and tools" installAppsFromList lua } # # install LUA Apps (Menu) # function installLUAMenu () { installAppsFromListMenu lua } # # install Ruby Apps (headless) # function installRuby () { msg "Installing Ruby apps and tools" installAppsFromList ruby } # # install Ruby Apps (Menu) # function installRubyMenu () { installAppsFromListMenu ruby } #TODO: function installAndroidEnv () { msg="Installing Android environment" msg "PATH in .bashrc" touch /home/$myHomedir/.bashrc sh -c "echo '\n\nexport PATH=${PATH}:/home/'$myHomedir'/Android/Sdk/tools:/home/'$myHomedir'/Android/Sdk/platform-tools' >> /home/$myHomedir/.bashrc" msg "Adding UDEV rules" sudo sh -c "echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0502\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Acer\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0b05\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Asus\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"413c\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Dell\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0489\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Foxconn\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04c5\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Fujitsu\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04c5\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Fujitsu-Toshiba\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"091e\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Garmin-Asus\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"18d1\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Google-Nexus\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"201E\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Haier\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"109b\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Hisense\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0bb4\", MODE=\"0666\", OWNER=\""$myHomedir"\" # HTC\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"12d1\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Huawei\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"8087\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Intel\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"24e3\", MODE=\"0666\", OWNER=\""$myHomedir"\" # K-Touch\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2116\", MODE=\"0666\", OWNER=\""$myHomedir"\" # KT Tech\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0482\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Kyocera\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"17ef\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Lenovo\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"1004\", MODE=\"0666\", OWNER=\""$myHomedir"\" # LG\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"22b8\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Motorola\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0e8d\", MODE=\"0666\", OWNER=\""$myHomedir"\" # MTK\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0409\", MODE=\"0666\", OWNER=\""$myHomedir"\" # NEC\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2080\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Nook\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0955\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Nvidia\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2257\", MODE=\"0666\", OWNER=\""$myHomedir"\" # OTGV\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"10a9\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Pantech\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"1d4d\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Pegatron\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0471\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Philips\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04da\", MODE=\"0666\", OWNER=\""$myHomedir"\" # PMC-Sierra\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"05c6\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Qualcomm\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"1f53\", MODE=\"0666\", OWNER=\""$myHomedir"\" # SK Telesys\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04e8\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Samsung\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04dd\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sharp\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"054c\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sony\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0fce\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sony Ericsson\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0fce\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sony Mobile Communications\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2340\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Teleepoch\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0930\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Toshiba\n\ SUBSYSTEM==\"usb\", ATTR{idVendor}==\"19d2\", MODE=\"0666\", OWNER=\""$myHomedir"\" # ZTE' > /etc/udev/rules.d/99-android.rules" msg "Restarting UDEV service" sudo service udev restart createAppShortcut "/home/"$myHomedir"/tools/Android/Sdk/tools/android" \ "/home/"$myHomedir"/.icons/android.png" \ "GNOME;GTK;Development;IDE" \ "Android SDK" \ "local" \ update-menus } # # install Atom App (headless) # function installAtom () { msg "Installing Atom and extensions" installAppsFromList atom } # # install Atom App (menu) # function installAtomMenu () { msg "Installing Atom and extensions" installAppsFromListMenu atom } # # install Anjuta Apps (headless) # function installAnjuta () { msg "Installing Anjuta" installAppsFromList anjuta } # # install Anjuta Apps (Menu) # function installAnjutaMenu () { installAppsFromListMenu anjuta } # # install Brackets Apps (headless) # function installBrackets () { msg "Installing Brackets" installAppsFromList brackets } # # install Brackets Apps (Menu) # function installBracketsMenu () { installAppsFromListMenu brackets } # # install CodeBlocks Apps (headless) # function installCodeBlocks () { msg "Installing CodeBlocks" installAppsFromList codeblocks } # # install CodeBlocks Apps (Menu) # function installCodeBlocksMenu () { installAppsFromListMenu codeblocks } # # install Geany Apps (headless) # function installGeany () { msg "Installing Geany and extensions" installAppsFromList geany } # # install Geany Apps (Menu) # function installGeanyMenu () { installAppsFromListMenu geany } #TODO: function installEclipse () { if which umake >/dev/null; then msg "Umake installing : Eclipse" sudo umake ide eclipse fi } #TODO: function installIdea () { if which umake >/dev/null; then msg "Umake installing : Idea" sudo umake ide idea fi } # # install Pycharm Apps (headless) # function installPyCharm () { msg "Installing PyCharm" installAppsFromList pycharm } # # install Pycharm Apps (Menu) # function installPyCharmMenu () { installAppsFromListMenu pycharm } #TODO: function installVisualStudioCode () { if which umake >/dev/null; then msg "Umake installing : Visual-studio-code" sudo umake ide visual-studio-code fi } #TODO: function installAndroidStudio () { if which umake >/dev/null; then msg "Umake installing : Android-Studio" sudo umake android android-studio fi } # # install SublimeText Apps (headless) # function installSublimeText() { msg "Installing Sublime-Text" installAppsFromList sublime-text } # # install SublimeText Apps (Menu) # function installSublimeTextMenu() { installAppsFromListMenu sublime-text } # # install CAD Apps (headless) # function installCAD () { msg "Installing CAD apps and tools" installAppsFromList cad } # # install CAD Apps (Menu) # function installCADMenu () { installAppsFromListMenu cad } # # install Teamviewer 13 (headless) # function installTeamViewer13 () { msg "Install Teamviewer 13" installPackageDpkg https://download.teamviewer.com/download/linux/teamviewer_amd64.deb \ teamviewer12.deb } # # install Teamviewer 13 (Menu) # function installTeamViewer13Menu () { installPackageDpkg https://download.teamviewer.com/download/linux/teamviewer_amd64.deb \ teamviewer12.deb } # # install/enable Unboud (headless) # function enableUnbound () { msg "Installing Unbound" installAppsFromList unbound } # # install/enable Unboud (Menu) # function enableUnboundMenu () { installAppsFromListMenu unbound } # # enable ufw at boot time and add rules for installed apps # function enableUFW () { msg "Enabling FireWall (UFW)" runCmd "sudo ufw enable" if which syncthing >/dev/null; then runCmd "sudo ufw allow syncthing" fi } #TODO: function enableNumLockX () { msg "Adding NumLockX to MDM/LightDM Default Init" checkAndInstallDep apt numlockx if which mdm >/dev/null; then sudo cp /etc/mdm/Init/Default /etc/mdm/Init/Default.yggbak sudo sed -i -e ' s!exit 0!#numlockx! ' /etc/mdm/Init/Default sudo sh -c "echo 'if [ -x /usr/bin/numlockx ]; then\n\ exec /usr/bin/numlockx on\n\ fi\n\ \n\ exit 0' >> /etc/mdm/Init/Default" elif which lightdm >/dev/null; then sudo cp /etc/lightdm/lightdm.conf.d/70-linuxmint.conf /etc/lightdm/lightdm.conf.d/70-linuxmint.conf.yggbak sudo bash -c "echo 'greeter-setup-script=/usr/bin/numlockx on' >> /etc/lightdm/lightdm.conf.d/70-linuxmint.conf" fi } # # /tmp in RAM by modifying /etc/fstab # function enableTmpRAM () { msg "Enable /tmp in RAM by modifying /etc/fstab" runCmd "echo 'tmpfs /tmp tmpfs defaults,size=2g 0 0' | sudo tee -a /etc/fstab" printf "[INFO] Reboot required" printf "\n" } # # add screenfetch exec in .bashrc # function addScreenfetchBashrc () { msg "Adding screenfetch to .bashrc" checkAndInstallDep apt screenfetch runCmd "touch /home/$myHomedir/.bashrc" printf "\n" runCmd "echo 'screenfetch -t' | tee -a /home/$myHomedir/.bashrc" printf "\n" } # # cli history cmd timestamp enable #TODO: function enableHistoryTS () { typeset ret_code printf "CLI History TimeStamp enabling " echo "export HISTTIMEFORMAT='%F %T '" | tee -a /home/$myHomedir/.bashrc &>> $logFile ret_code=$? retCode $ret_code } # # install/enable auto install of security updates # function installUnattendedUpgrades () { msg "Installing unattended-upgrades" installPackage apt "unattended-upgrades" } # # display useful system/hardware informations # function toolInxi () { checkAndInstallDep apt inxi inxi -F } # # check bandwith and latency of the internet connection # function toolSpeedtestCli () { checkAndInstallDep pip speedtest-cli speedtest-cli } # # check for packet loss # function toolPacketLoss () { ping -q -c 10 google.com } # # Optimization of SQLite databases of Firefox and Firefox Nightly # function toolOptimizeFirefox () { if (whiptail --title "Firefox SQLite DB Optimization" --yesno "Terminate Firefox and proceed ?" 10 60) then if which firefox >/dev/null; then printf "Optimizing Firefox" pkill -9 firefox for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM; REINDEX;'; done fi if which firefox-trunk >/dev/null; then printf "Optimizing Firefox Nightly" pkill -9 firefox-trunk for f in ~/.mozilla/firefox-trunk/*/*.sqlite; do sqlite3 $f 'VACUUM; REINDEX;'; done fi if (whiptail --title "Firefox SQLite DB Optimization - Reboot" --yesno "Reboot required, proceed now ?" 10 60) then sudo reboot fi fi } # # remove useless packages (depedencies) # function toolAutoremove () { msg "Cleaning useless deb package(s)" runCmd "sudo apt-get -y autoremove" } # # remove old versions of installed kernels # function toolClearOldKernels () { msg "Removing old kernels (keeping the 3 last kernels)" checkAndInstallDep apt byobu runCmd "sudo purge-old-kernels --keep 3" } # # force soundcards detection # function toolSoundCardsDetection () { runCmd "sudo alsa force-reload" } #-----------------------------------------------------------------------------# # menus functions # #-----------------------------------------------------------------------------# # # show about dialog box # function showAboutBoxMenu () { whiptail \ --title "About" \ --msgbox "\n Author : Francois B. (Makotosan) Email : shakasan@sirenacorp.be Website : https://makotonoblog.be/ Github : https://github.com/shakasan/Yggdrasil Licence : GPLv3 Version : '$version'\n This script has been written to makes my life easier when I have to (re)install my personal computers ;-) This is my first major shell sccript and use of whiptail,... Advices and remarks are welcome ^^" \ 20 80 } # # show reboot menu # function showRebootBoxMenu () { if (whiptail \ --title "Yggdrasil $version - WARNING - ReBoot" \ --yesno "Are you sure to reboot this computer ?" \ 7 42) then sudo reboot fi } # # show menu to config system # function showConfigMenu () { while true; do configMenuOptions=$(whiptail \ --title "Yggdrasil $version - System Config" \ --menu "System Config" \ 25 80 16 \ "Ufw" "Enable Firewall (ufw)" \ "NumLockX" "NumLock Enabled at boot time" \ "TmpRAM" "/tmp stored in RAM" \ "screenfetch" "screenfetch added to .bashrc" \ "historyTS" "TimeStamp enabled in Shell History" \ "unattendedUpgrades" "Enable automatic security updates" \ "Back" "Back" 3>&1 1>&2 2>&3) case $configMenuOptions in "Ufw") clear; enableUFW; pressKey ;; "NumLockX") clear; enableNumLockX; pressKey ;; "TmpRAM") clear; enableTmpRAM; pressKey ;; "screenfetch") clear; addScreenfetchBashrc; pressKey ;; "historyTS") clear; enableHistoryTS; pressKey ;; "unattendedUpgrades") clear; installUnattendedUpgrades; pressKey ;; "Back") break ;; esac done } # # show menu to install system tools # function showSysToolsMenu () { while true; do sysToolsMenuOptions=$(whiptail \ --title "Yggdrasil $version - System Tools" \ --menu "System tools to diagnose and optimize" \ 25 80 16 \ "inxi" "System informations" \ "speedtest-cli" "Bandwidth test" \ "packetloss" "Packetloss test (ping)" \ "OptimizeFirefox" "Firefox SQLite databases optimization" \ "Autoremove" "Remove useless Deb packages" \ "CleanOldKernels" "Removing old kernels (keep 2 last kernels)" \ "SoundCardsDetection" "Sound Cards Detection" \ "Back" "Back" 3>&1 1>&2 2>&3) case $sysToolsMenuOptions in "inxi") clear; toolInxi; pressKey ;; "speedtest-cli") clear; toolSpeedtestCli; pressKey ;; "packetloss") clear; toolPacketLoss; pressKey ;; "OptimizeFirefox") clear; toolOptimizeFirefox; pressKey ;; "Autoremove") clear; toolAutoremove; pressKey ;; "CleanOldKernels") clear; toolClearOldKernels; pressKey ;; "SoundCardsDetection") clear; toolSoundCardsDetection; pressKey ;; "Back") break ;; esac done } # # show menu to install themes/icons # function showThemesInstallMenu () { while true; do themesInstallMenuOptions=$(whiptail \ --title "Yggdrasil $version - Themes/Icons Install" \ --menu "Install themes/icons from different submenus" \ 25 80 16 \ "themes" "GTK themes" \ "icons" "Icons" \ "Back" "Back" 3>&1 1>&2 2>&3) case $themesInstallMenuOptions in "themes") installThemesMenu ;; "icons") installIconsMenu ;; "Back") break ;; esac done } # # show menu to install dev apps # function showDevInstallMenu () { while true; do devInstallMenuOptions=$(whiptail \ --title "Yggdrasil $version - Dev Install" \ --menu "Install Dev apps from different submenus" \ 25 80 16 \ "devbase" "dev apps and tools" \ "java9" "Java 9 dev env" \ "javascriptbase" "JavaScript dev env" \ "nodelts" "NodeJS 8.x LTS" \ "mongodb3ce" "MongoDB 3 CE" \ "php" "PHP dev env" \ "lua" "Lua dev env" \ "ruby" "Ruby dev env" \ "qt" "QT dev env" \ "python" "Python dev env" \ "androidenv" "Set Android env" \ "atom" "Atom" \ "anjuta" "Anjuta" \ "brackets" "Brackets" \ "codeblocks" "CodeBlocks" \ "geany" "Geany" \ "eclipse" "Eclipse" \ "idea" "Idea" \ "pycharm" "PyCharm" \ "vsc" "Visual Studio Code" \ "androidstudio" "Android Studio" \ "sublimetext" "Sublime Text" \ "cad" "CAD tools" \ "teamviewer13" "Teamviewer 13" \ "Back" "Back" 3>&1 1>&2 2>&3) case $devInstallMenuOptions in "devbase") installDevAppsMenu ;; "java9") installJava9 ;; "javascriptbase") #TODO: ;; "nodelts") #TODO: ;; "mongodb3ce") installMongo3CEMenu ;; "php") installPHPMenu ;; "lua") installLUAMenu ;; "ruby") installRubyMenu ;; "qt") installQTMenu ;; "python") installPythonMenu ;; "androidenv") #TODO: ;; "atom") installAtomMenu ;; "anjuta") installAnjutaMenu ;; "brackets") installBracketsMenu ;; "codeblocks") installCodeBlocksMenu ;; "geany") installGeanyMenu ;; "eclipse") #TODO: ;; "idea") #TODO: ;; "pycharm") installPyCharmMenu ;; "vsc") #TODO: ;; "androidstudio") #TODO: ;; "sublimetext") installSublimeTextMenu ;; "cad") installCADMenu ;; "teamviewer13") installTeamViewer13Menu ;; "Back") break ;; esac done } # # show menu to install apps from different categories # function showAppInstallMenu () { while true; do appsInstallMenuOptions=$(whiptail \ --title "Yggdrasil $version - Apps Install" \ --menu "Install apps from different submenus" \ 25 80 16 \ "base" "Base Apps" \ "office" "Office Apps" \ "multimedia" "Multimedia Apps" \ "internet" "Internet Apps" \ "utilities" "Misc Utilities" \ "games" "Games & tools" \ "burningtools" "Disc Burning and tools" \ "nettools" "Network tools" \ "cajaplugins" "Caja Plugins" \ "nautilus" "Nautilus and plugins" \ "gimp" "Gimp plugins" \ "rhythmbox" "RhythmBox plugins" \ "pidgin" "Pidgin plugins" \ "nitrogen" "Nitrogen WP Manager" \ "wine" "Wine Builds" \ "Back" "Back" 3>&1 1>&2 2>&3) case $appsInstallMenuOptions in "base") installBaseMenu ;; "office") installOfficeMenu ;; "multimedia") installMultimediaMenu ;; "internet") installInternetMenu ;; "utilities") installMiscUtilitiesMenu ;; "games") installGamesMenu ;; "burningtools") installBurningToolsMenu ;; "nettools") installNetToolsMenu ;; "cajaplugins") installCajaPluginsMenu ;; "nautilus") installNautilusAndPluginsMenu ;; "gimp") installGimpPluginsMenu ;; "rhythmbox") installRhythmBoxPluginsMenu ;; "pidgin") installPidginPluginsMenu ;; "nitrogen") installNitrogenMenu ;; "wine") installWineMenu ;; "Back") break ;; esac done } # # show menu to install beta apps from different categories # function showAppBetaInstallMenu () { installBetaMenu } # # show menu to install nightly apps from different categories # function showAppNightlyInstallMenu () { installNightlyMenu } # # show menu about install/config hardware # function showHardwareMenu () { while true; do hardwareMenuOptions=$(whiptail \ --title "Yggdrasil $version - System Tools" \ --menu "System tools to diagnose and optimize" \ 25 80 16 \ "cardreader" "Apps/tools needed for cardreaders" \ "solaar" "Solaar for Logitech Unifying devices" \ "webcam" "Install webcam neede apps" \ "microcode" "Update Intel/AMD CPU microcode" \ "nvidia370" "Install Nvidia 370 graphic drivers" \ "nvidia375" "Install Nvidia 375 graphic drivers" \ "nvidia378" "Install Nvidia 378 graphic drivers" \ "nvidia381" "Install Nvidia 381 graphic drivers" \ "nvidia384" "Install Nvidia 384 graphic drivers" \ "tlp" "Install/Enable TLP for better power management " \ "keyid" "Add udev rules for Key-ID FIDO U2F usb key" \ "WI6320" "Fix Intel Wireless 6320 card config problem" \ "Back" "Back" 3>&1 1>&2 2>&3) case $hardwareMenuOptions in "cardreader") installCardReaderMenu ;; "solaar") installAppsFromListMenu ;; "webcam") installWebcamMenu ;; "microcode") updateMicrocode ;; "nvidia370") installNvidia370Menu ;; "nvidia375") installNvidia375Menu ;; "nvidia378") installNvidia378Menu ;; "nvidia381") installNvidia381Menu ;; "nvidia384") installNvidia384Menu ;; "tlp") installTLPMenu ;; "keyid") installKeyIDuDev ;; "WI6320") fixWirelessIntel6320 ;; "Back") break ;; esac done } #------------------------------------------------------------------------------# # Entry point of the script # #------------------------------------------------------------------------------# # NEVER run the script as root or with sudo !!!! if ! [ "$UID" -ne "0" ]; then printf "\n" printf "$BOLDROUGE""This script can't be run as root/sudo, please retry as normal user""$NORMAL" printf "\n\n" exit fi # add a mark to the log file at every script run echo "--[ Yggdrasil log ]--[ "$cDate" ]--[ "$cTime" ]-----------------------" >> $logFile # # Headless Mode # arguments/options management with getopts # while getopts ":h,v,a,c" option; do case "$option" in a) # install all apps (except dev apps) echo "all apps" exit ;; c) # install themes and icons echo "all themes and icons" exit ;; h) # display help usage exit ;; v) # display version number printf "Yggdrasil version : $version\n" exit ;; :) # display error message in case of missing argument(s) usage printf "\nError : Option $OPTARG : missing argument\n" exit 1 ;; \?) # display error message in case of invalid option usage printf "\nError : $OPTARG : invalid option\n" exit 1 ;; esac done # # Menu Mode # clear printf "\n" printf "$BOLDJAUNE" printf "██╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ █████╗ ███████╗██╗██╗ \n" printf "╚██╗ ██╔╝██╔════╝ ██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔════╝██║██║ \n" printf " ╚████╔╝ ██║ ███╗██║ ███╗██║ ██║██████╔╝███████║███████╗██║██║ \n" printf " ╚██╔╝ ██║ ██║██║ ██║██║ ██║██╔══██╗██╔══██║╚════██║██║██║ \n" printf " ██║ ╚██████╔╝╚██████╔╝██████╔╝██║ ██║██║ ██║███████║██║███████╗\n" printf " ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝╚══════╝\n" printf "$BOLDROUGE Customize Linux Mint & Ubuntu derivatives made easier\n" printf "$BOLDBLANC ver "$version" - GPLv3 - Francois B. (Makotosan) - makotonoblog.be\n" printf "\n" printf "$BOLDVERT""User (userdir) :""$NORMAL"" $myHomedir\n" printf "$BOLDVERT""OS : ""$NORMAL" lsb_release -d | awk -F':' '{print $2}' | awk -F'\t' '{print $2}' printf "$BOLDVERT""Kernel : ""$NORMAL" uname -r printf "$BOLDVERT""Architecture : ""$NORMAL" uname -m #osCheck #deCheck #depCheck # Useless by itself, but is used to don't be annoyed later in the script sudo echo pressKey # Apps dir created if necessary mkdir -p /home/$myHomedir/Apps # # Main menu # while true; do # main menu loop mainMenuOptions=$(whiptail \ --title "Yggdrasil $version - Main Menu" \ --menu "This tool will help you to install all needed applications and cutomize your fresh install of Mint/Ubuntu/Elementary/..." \ 25 80 16 \ "1" "System update" \ "2" "Add required PPA/Repo" \ "3" "Applications" \ "4" "Applications (BETA)" \ "5" "Applications (Nightly)" \ "6" "Themes & Icons" \ "7" "Dev Apps" \ "8" "System Config" \ "9" "System Tools" \ "10" "Reboot this computer" \ "11" "About Yggdrasil" \ "12" "Quit" 3>&1 1>&2 2>&3) case $mainMenuOptions in "1") updateSystem pressKey ;; "2") addRequiredPPA pressKey ;; "3") showAppInstallMenu ;; "4") showAppBetaInstallMenu ;; "5") showAppNightlyInstallMenu ;; "6") showThemesInstallMenu ;; "7") showDevInstallMenu ;; "8") showConfigMenu; ;; "9") showSysToolsMenu ;; "10") showRebootBoxMenu ;; "11") showAboutBoxMenu ;; "12") exit ;; esac # main menu done # end of main menu loop #------------------------------------------------------------------------------# clear exit