90 Commits

Author SHA1 Message Date
2bb6671836 installed.sh
-les fichiers Brewfile_* vieux de plus de 10 jours sont supprimés
-la section paquets Atom est désormais optionnelle
2025-04-17 09:31:08 +02:00
ea87685dde venv.sh
soco-cli est désormais installé avec pipx
2025-04-17 09:26:37 +02:00
ce8d9b799e Update Python for PEP668 2024-08-05 23:18:29 +02:00
2124781520 nodejs.sh
-update for latest npm / node compatibility
2024-05-14 07:05:53 +02:00
dc4764c832 Test connection
-replace google.com by apple.com
2024-05-14 07:04:20 +02:00
40040c264b pipx.sh
bug in pipx -> pips list —quiet
2024-01-09 18:05:36 +01:00
b76e72a1ef Test internet connection
-run scripts only if internet is ok
2023-11-16 15:00:35 +01:00
c8ced14004 venv.sh
-add streamrip to apps list
2023-11-14 20:27:59 +01:00
6ee801d946 Bugfix
-json casks list
2023-08-01 13:53:54 +02:00
feab0bb267 nodejs
-add a do_not_update option
2023-01-05 16:55:18 +01:00
02ed39943b Rust plugin
1st version
2022-11-25 10:26:39 +01:00
bcd4ca41c6 homebrew.sh
-add a test to not proceed any bash upgrade.
2022-11-08 22:03:33 +01:00
d13e3277b1 minor bugfix 2022-08-03 15:39:57 +02:00
de82e3f6a3 kymsu.sh
-bugfix
2022-07-17 16:57:17 +02:00
db3ef113ad Auto-update
-add a preference file $HOME/.kymsu/plugins.d/kymsu.pref
-add a preference for setting auto-update from github repo
2022-07-17 16:56:38 +02:00
cefbd6d1e9 global option
change -g by —location=global
2022-07-15 13:02:38 +02:00
bebcacecc3 nodejs.sh
-g deprecated. Use --location=global instead
2022-05-29 17:23:07 +02:00
ace96fcd46 Fix The unauthenticated git protocol on port 9418 is no longer supported
change git://github.com by https://github.com
2022-03-17 15:46:31 +01:00
b744cd6624 Option -s
-option --nodistract (ou -n) pour exécuter les scripts sans interaction.
-option -s 'script' pour exécuter 1 seul script (i.e -s homebrew, -s node, -s pip...)
2021-12-20 16:00:30 +01:00
97a1005d12 pipx.sh
-test si pipx n'est pas installé
2021-12-14 11:44:47 +01:00
afa77f865c kymsu2.sh
-option --all to run all scripts
2021-12-14 11:43:12 +01:00
a4e9ed9053 Update pipx script 2021-11-11 08:22:43 +01:00
e8fc598082 11-10-2021 2021-10-11 06:32:21 +02:00
61cdb0e44b Bugfix
find -maxdeph
2021-08-09 08:03:03 +02:00
f99b2c3107 06-08-2021
update to M1
2021-08-06 12:45:12 +02:00
c2e950d819 28-07-2021 2021-07-28 14:30:23 +02:00
21501ed2ce pip.sh
-change do_not_update array
2021-06-26 08:11:06 +02:00
36d7f88ffc node.sh
-add a pref to update or not node
2021-06-26 07:55:45 +02:00
9fc8f9668f Update may 2021
-node.sh: info about local pacakges
-mas.sh: mas v1.8.2
-homebrew.sh: minor bugfixes
-pecl.sh: add update-channels command
2021-05-17 16:03:20 +02:00
6d98e2043e node.sh
Bugfix if github.com don’t respond.
2021-03-15 07:34:27 +01:00
9177cea743 node.sh
-bugfix: update node
2021-03-09 06:29:30 +01:00
3595de3c64 node.sh
Bugfix:
-correct nb of global package update

Feature:
-advise for node and npm update
2021-02-28 08:50:52 +01:00
24f829d102 pip.sh
+more efficience dependencies detect
2021-02-12 08:33:52 +01:00
f1412739df node.sh
+ add number of package update
2021-02-12 08:32:48 +01:00
d2f5735073 pip.sh node.sh
pip.sh: minor bugfix
node.sh: update node
2021-02-11 08:11:23 +01:00
555c362e30 Minors bugfixs 2021-02-06 08:13:46 +01:00
32b861a8f1 node.sh
Bugfix:
+npm outdated for local packages
2021-01-19 19:46:52 +01:00
a8ec0b2e37 pip.sh
Bugfix:
+display color dpendancies
2021-01-15 19:20:12 +01:00
4a1ea52926 pecl.sh
Feature:
- open PHP info page only if available update
2021-01-15 06:52:28 +01:00
f1a1a94886 pip.sh
Features:
-check dependances
2021-01-13 19:32:46 +01:00
7b78bbd1ca homebrew.sh
Bugfix:
- n° de version des paquets (info)
2021-01-13 14:49:41 +01:00
e6c7db1711 homebrew.sh
Feature:
-mask ‘Updating pkg/cask’ if no update awailable

Bugfix:
-display multiples versions (i e python@3.9)
2021-01-11 09:34:16 +01:00
9a9bf77fb7 pecl.sh
Features:
+display info about php config
+open php info in Safari
+support PHP 8.0
2021-01-10 18:42:18 +01:00
a32a0d6ded 5 scripts
+update colors strings
+update parameter ‘—nodistract’
2021-01-09 15:05:29 +01:00
9d8b924a30 node.sh install.sh
minor bugfixs
2021-01-09 14:13:24 +01:00
a5c0c2b011 antibody.sh
+antibody version
2021-01-09 14:12:29 +01:00
1061909d5b pip.sh
Rebuild from scratch
2021-01-09 13:04:07 +01:00
02648b8f83 node.sh
+use npm outdated —long instead npm outdated
2021-01-09 13:03:03 +01:00
e97ae7ec2c homebrew.sh
+minor dialog corrections
2021-01-09 13:00:28 +01:00
064ae0ecf0 homebrew.sh
Bugfix:
-nb de cask
-brew info —cask et brew upgrade —cask (pour les casks comme docker qui existe aussi en formula
2021-01-07 17:36:36 +01:00
cb0a07339d node.sh
Features:
+rebuild from scratch
+info on updated modules
2021-01-06 11:30:19 +01:00
560bb5e13b homebrew.sh
Release version 2.0
2021-01-05 16:57:13 +01:00
64264174b4 homebrew.sh
Feature:
+info casks latest
2021-01-05 11:49:28 +01:00
6b4dfb2abb homebrew.sh
Feature:
+test if Apache conf file has been modified by Homebrew
2021-01-04 18:57:50 +01:00
1d2a6b5e3b homebrew.sh
Features:
+display number of updates
+message about required (jq) or recommended (terminal-notifier) softwares

Cleaning code.
2021-01-04 18:51:57 +01:00
f337e0c62b homebrew.sh
build from scratch:
+add descriptions for packages/casks
2021-01-04 08:52:05 +01:00
3e88dc59df homebrew.sh
rebuild from scratch
2021-01-03 10:04:05 +01:00
e6fb194868 homebrew.sh
+update comments
2021-01-03 09:59:24 +01:00
5268f23fcd node.sh
+rename npm.sh to node.sh
+custom npm list colors
2021-01-01 07:30:04 +01:00
2adb0f1064 pip.sh
Replace \033[1m by ${bold}.
Idem for others styles
2020-12-30 08:26:20 +01:00
9f6cb2e72e New installer
Features:
+when update, disabled plugins stay disabled
+if new install, choice to disable some plugins
2020-12-30 08:21:46 +01:00
c390f22b0f pip.sh
use pip3
2020-12-27 16:58:22 +01:00
8e15aa05a0 homebrew.sh
-bugfix
2020-12-27 16:57:56 +01:00
e5e2aa5d60 02-12-2020
-homebrew.sh: brew info --cask remplace brew cask info
-pip.sh: suppression de features 2020-resolver
2020-12-02 08:03:03 +01:00
ae8a356f1a homebrew.sh
-brew upgrade —formula
-brew upgrade —cask
-brew list --formulae --pinned
2020-11-06 17:17:26 +01:00
f77903f01d option —latest
homebrew.sh & kymsu2.sh:
-ajout d’une option —latest pour afficher les casks ‘latest’
2020-10-30 11:42:01 +01:00
d368c37788 pecl.sh
-bugfix
2020-10-16 06:22:44 +02:00
e4db3040d2 homebrew.sh
-bugfix
2020-10-16 06:22:25 +02:00
2947d9e7c6 pip.sh
-bugfix
-compatibilité Python 3.9
2020-10-16 06:21:27 +02:00
81c8ad34aa antibody.sh
1 seule notification même si plusieurs màj
2020-10-02 15:06:38 +02:00
731142630b 27-09-2020
-homebrew.sh
-pip.sh
-README.md
2020-09-27 18:51:29 +02:00
380967c8d4 homebrew.sh
-cleaning code
2020-09-20 07:55:10 +02:00
4b06dd1079 homebrew.sh
Corrige les erreurs:
 -Warning: Calling brew cask outdated is deprecated! Use brew outdated --cask instead.
 -Warning: Calling brew cask reinstall is deprecated! Use brew reinstall instead.
 -Warning: Calling brew cask upgrade is deprecated! Use brew upgrade --cask instead.
2020-09-15 08:11:53 +02:00
6895aa8cc5 success.png 2020-09-15 08:04:20 +02:00
6e8361312c Bugfix
-pecl refonctionne
-ajout d’espace pour antibody
2020-09-02 18:25:56 +02:00
a434e2814a pip.sh
-remplacement de la variable $version par $pip_version

Nouveau:
-ajout de la commande ‘pip check’
-notice sur les nouvelles options ‘2020-resolver’ et ‘fast-deps’ (pas de changement dans le script mais ajout des options dans ‘pip config edit’)
2020-08-05 09:17:23 +02:00
0077eaca53 Antibody.sh
Nouveau:
-affiche le dossiers où s’installent les modulent
2020-08-05 09:12:16 +02:00
81afb2846e Nouveau module Antibody
Antibody est un gestionnaire de plugin pour zsh:
https://getantibody.github.io

La commande ‘antibody update’  recherche les m-à-j ET les installe.
2020-08-05 09:10:58 +02:00
285b991b09 Plugin Antibody
Antibody est un gestionnaire de module pour zsh
2020-07-24 08:00:38 +02:00
3651ee64be channel "pecl.php.net"
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
2020-06-05 08:13:58 +02:00
3eeff4b705 npm.sh
--no-colors options:
nvm list —no-colors
2020-04-18 07:20:15 +02:00
4620ab071d homebrew.sh
bugfix: ne pas tester la modif des php.ini si il n’y a pas eu de mises-à-jouir
2020-03-17 14:24:03 +01:00
78f4158361 npm.sh
Feature: update nvm from github.com
2020-01-27 18:20:10 +01:00
e5ae3745f7 README.md
-add bash 5 requirement for associative array
2020-01-26 12:24:40 +01:00
1648fbb13e homebrew.sh
-update package (yes/no/ALL)
2020-01-26 09:42:57 +01:00
80e905ec4e Cleaning code 2020-01-25 06:40:56 +01:00
3f61fa4a57 Cleaning code 2020-01-25 06:40:30 +01:00
648bd9d211 homebrew.sh
-bugfix si aucune màj de paquet n’est dispo
2019-12-20 08:43:32 +01:00
be093d2455 Minor bugfix
-temps de modification de php.ini ramené à 5mn
2019-12-10 12:38:51 +01:00
cf760c8b3a Minors bugfixs
-running hellcheck
-optimize md file
2019-12-09 19:53:21 +01:00
27 changed files with 2431 additions and 646 deletions

0
.gitattributes vendored Normal file
View File

0
.gitignore vendored Normal file
View File

View File

@@ -10,26 +10,33 @@ homebrew and pecl plugins notifie you if apache/php configuration files have bee
## Plug-ins: ## Plug-ins:
- **atom** (plug-ins) - **atom** ([plug-ins](https://atom.io/packages/list))
- **homebrew** (brew and cask) - **antibody** ([zsh plug-ins](https://getantibody.github.io))
- **gem** ([Ruby](https://rubygems.org))
- **homebrew** ([brew and cask](https://formulae.brew.sh))
- **installed** (create a list of all your brew, pip, npm... stuffs and a Brewfile). - **installed** (create a list of all your brew, pip, npm... stuffs and a Brewfile).
- **npm** (javascript package) (local or global packages) - **nodejs** ([npm package](https://www.npmjs.com)) (local or global packages) (can update [nvm](https://github.com/nvm-sh/nvm) script)
- **mas** (Mac Appstore) - **mas** (Mac Appstore)
- **pip** (Python Package index) (pip or pip3) - **pecl** ([PHP modules](https://pecl.php.net)) (<u>for testing only</u>)
- **PECL** (PHP modules) - **perl** (Perl modules ([cpan](https://metacpan.org)))
- **Wordpress** (wp-cli) <u>(for testing only)</u> - **pip** ([Python Package index](https://pypi.org)) (pip or pip3)
- **pipx** ([Python Apps in Isolated Environments](https://pypa.github.io/pipx/))
- **rust** ([Rust](https://www.rust-lang.org))
- **venv** ([Environnement virtuel Python](https://docs.python.org/3/library/venv.html))
- **wp** (WordPress [wp-cli](https://wp-cli.org/fr/)) <u>(for testing only)</u>
## Requirements ## Requirements
- [Homebrew](https://brew.sh/) - [Homebrew](https://brew.sh/)
- [jq](https://github.com/stedolan/jq) *(brew install jq)* for processing JSON data (homebrew plugin)
Optionnal: Optionnal:
- [pipdeptree](https://pypi.python.org/pypi/pipdeptree) *(pip install pipdeptree)* for checking dependancies (pip plugin) - [pipdeptree](https://pypi.python.org/pypi/pipdeptree) *(pip install pipdeptree)* for checking dependancies (pip plugin)
- [jq](https://github.com/stedolan/jq) *(brew install jq)* for processing JSON data (homebrew plugin)
- [terminal-notifier](https://github.com/julienXX/terminal-notifier) *(brew install terminal-notifier)* for sending macOS notification (all plugins) - [terminal-notifier](https://github.com/julienXX/terminal-notifier) *(brew install terminal-notifier)* for sending macOS notification (all plugins)
- ~~[Bash 5](https://www.gnu.org/software/bash/) *(brew install bash)* for associative array (homebrew plugin)~~ (homebrew plugin 2.0)
@@ -47,9 +54,13 @@ Plug-ins are placed in `~/.kymsu/`
Only update all the things: `$ kymsu2` Only update all the things: `$ kymsu2`
Run only 1 script: `$ kymsu2 -s homebrew` (option -s and name of script without extension)
With cleanup after updates: `$ kymsu2 --cleanup` With cleanup after updates: `$ kymsu2 --cleanup`
No distract mode (no user interaction):`$ kymsu2 --nodistract` No distract mode (no user interaction):`$ kymsu2 --nodistract` `$ kymsu2 -n` (update without confirmation)
Help: `$ kymsu2 --help` `$ kymsu2 -h`
Prefix plugin with a _ to ignore it: Prefix plugin with a _ to ignore it:
@@ -67,7 +78,7 @@ Prefix plugin with a _ to ignore it:
There is a <u>settings section</u> on top of each plug-in: There is a <u>settings section</u> on top of each plug-in:
- *[homebrew-pip]* don't update a module, package...: add it to the `do_not_update` array on the top. - *[homebrew-pip-nodejs]* don't update a module, package...: add it to the `do_not_update` array on the top.
```bash ```bash
$ nano homebrew.sh $ nano homebrew.sh
@@ -75,9 +86,9 @@ declare -a do_not_update=('virtualbox,virtualbox-extension-pack')
``` ```
- *[homebrew]* display info on updated pakages: `display_info=true` - *[homebrew]* display info on updated pakages: `display_info=true`
- *[homebrew-npm-pecl-pip]* no distract mode (no user interaction): `no_distract=false` - *[homebrew-nodejs-pecl-pip]* no distract mode (no user interaction): `no_distract=false`
*If running Homebrew plug-in in no_distract mode, Casks with 'latest' version number won't be updated.* *If running Homebrew plug-in in no_distract mode, Casks with 'latest' version number won't be updated.*
- *[npm]* run npm maintenance tools: `doctor=true` - *[nodejs]* run npm maintenance tools: `doctor=true`
- *[pip]* `version=pip or pip3` `user="" or "--user"` - *[pip]* `version=pip or pip3` `user="" or "--user"`

View File

@@ -1,14 +1,70 @@
#!/usr/bin/env bash #!/usr/bin/env bash
italic="\033[3m"
underline="\033[4m"
bold="\033[1m"
reset="\033[0m"
KYMSU_PATH=`pwd` KYMSU_PATH=`pwd`
# Make Kymsu accessible in PATH # Make Kymsu accessible in PATH
ln -fs "${KYMSU_PATH}"/kymsu2.sh /usr/local/bin/kymsu2 echo -e "\nInstalling ${bold}kymsu2${reset} in ${bold}/usr/local/bin${reset} ..."
sudo ln -fs "${KYMSU_PATH}"/kymsu2.sh /usr/local/bin/kymsu2
# Store Kymsu stuff in home directory # Store Kymsu stuff in home directory
mkdir -p ~/.kymsu && echo "${KYMSU_PATH}" > ~/.kymsu/path mkdir -p $HOME/.kymsu && echo "${KYMSU_PATH}" > $HOME/.kymsu/path
cp -R "${KYMSU_PATH}/plugins.d" ~/.kymsu
echo "altKYMSU has been installed. Run kymsu2 command!" pluginpath=$HOME/.kymsu/plugins.d/
echo "It's a fork from https://github.com/welcoMattic/kymsu"
echo "All credits to welcoMattic" if [ ! -d $pluginpath ]; then new_install=true; fi
# Backup disabled plugins
disabled=$(ls $pluginpath | grep ^_ | sed 's/^_//')
# Delete plugins folder
rm -rf $pluginpath
# Install new plugins
echo -e "Copying plugins in ${bold}$pluginpath${reset} ..."
cp -R "${KYMSU_PATH}/plugins.d" $HOME/.kymsu
if [ -n "$disabled" ]; then
echo -e "Disabling previous disabled plugins ..."
# Disable previous disabled plugins
for i in $(ls $pluginpath)
do
[[ $disabled =~ $i ]] && mv "$pluginpath$i" "$pluginpath"_"$i"
done
fi
echo -e "\n${bold}altKYMSU${reset} has been installed. Run ${bold}kymsu2${reset} command!"
echo -e "It's a fork from ${italic}https://github.com/welcoMattic/kymsu${reset}"
echo -e "All credits to ${underline}welcoMattic${reset}\n"
# If NEW install, we choose to desactivate some plugins
if [ "$new_install" = true ]; then
read -p "Do you want to activate / deactivate some plugins ? [y/n]" deactivate
echo ""
if [[ "$deactivate" == "y" || "$deactivate" == "Y" ]]; then
for i in $(ls $pluginpath)
do
if [[ ${i: -3} == ".sh" ]] && [[ ! ${i:0:2} == "00" ]] && [[ ! ${i:0:1} == "_" ]]; then
a=$(echo -e "Do you want to deactivate ${bold}$i${reset} plugins ? [y/n]")
read -p "$a" rep
if [[ "$rep" == "y" || "$rep" == "Y" ]]; then
mv "$pluginpath$i" "$pluginpath"_"$i" && echo -e "${bold}$i${reset} deactivated !"
fi
fi
done
fi
fi

106
kymsu2.sh
View File

@@ -1,6 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [[ "$1" == "-h" || "$1" == "--help" ]]; then italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
bold_ita="\033[1;3m"
box="\033[1;41m"
reset="\033[0m"
function showHelp() {
echo -e "\033[93m\033[1maltKymsu\033[0m" echo -e "\033[93m\033[1maltKymsu\033[0m"
echo "" echo ""
echo "alt Keep Your macOs Stuff Updated" echo "alt Keep Your macOs Stuff Updated"
@@ -9,33 +19,89 @@ if [[ "$1" == "-h" || "$1" == "--help" ]]; then
echo "USAGE: kymsu2" echo "USAGE: kymsu2"
echo echo
echo "Commandes: " echo "Commandes: "
echo " -h, --help display this help" echo " -h, --help display this help"
echo " --nodistract no distract mode (no user interaction)" echo " -n, --nodistract no distract mode (no user interaction)"
echo " --cleanup removing any older versions of installed formulae and clearing old downloads from the Homebrew download-cache" echo " -c, --cleanup removing any older versions of installed formulae and clearing old downloads from the Homebrew download-cache"
echo " --npm_cleanup cleaning npm cache" #echo " --npm_cleanup cleaning npm cache"
echo " -s $script run only the script given in argument"
echo " -a, --all run all scripts (by default, all except those start by _)"
echo echo
echo "Tips:" echo "Tips:"
echo " -prefix the plugin with _ to ignore it" echo " -prefix the plugin with _ to ignore it"
echo " -see Settings section on top of each plug-in" echo " -see Settings section on top of each plug-in"
echo echo
exit 0 # exit 0
}
all_plugins=false
no_distract=false
brew_cleanup=false
SCRIPTS_DIR=$HOME/.kymsu/plugins.d
while getopts "hncs: a-:" opt
do
case $opt in
-) case "${OPTARG}" in
help) showHelp; exit;;
nodistract) no_distract=true;;
cleanup) brew_cleanup=true;;
all) all_plugins=true;;
*)
echo "Unknow option '--${OPTARG}'" >&2
exit -1;;
esac;;
h) showHelp; exit;;
n) no_distract=true;;
c) brew_cleanup=true;;
s) one_script="${OPTARG}";;
a) all_plugins=true;;
*)
echo "Unknow option '-$opt'" >&2
exit -1;;
esac
done
#shift "$((OPTIND-1))"
# -n : non vide
if [ -n "$one_script" ]; then
# Un seul script
#list_plugins=$(find $SCRIPTS_DIR -maxdepth 1 -type f -name "*$one_script" -a -perm +111)
list_plugins=$(find $SCRIPTS_DIR -maxdepth 1 -type f -name "$one_script" -o -name "_$one_script" -a -perm +111)
[ -z "$list_plugins" ] && echo -e "❗️ No named plugin ${italic}$one_script${reset}" && exit -1
# [[ $@ =~ "--all" ]] && all_plugins=true || all_plugins=false
elif [ "$all_plugins" = false ]; then
# Tous sauf commençant par _ (les fichiers commençant par '_' ne sont pas pris en compte) "_*.sh"
list_plugins=$(find $SCRIPTS_DIR -maxdepth 1 -type f ! -name "_*" -a -name "*.sh" -a -perm +111 | sort)
[ -z "$list_plugins" ] && echo -e "❗️ No plugin in ${italic}$SCRIPTS_DIR${reset}" && exit -1
else
# Tous (-a = ET; -perm +111 = exec)
list_plugins=$(find $SCRIPTS_DIR -maxdepth 1 -type f -name "*.sh" -a -perm +111 | sort)
[ -z "$list_plugins" ] && echo -e "❗️ No plugin in ${italic}$SCRIPTS_DIR${reset}" && exit -1
fi fi
echo "Please, grab a ☕️, KYMSU keep your working environment up to date!"
SCRIPTS_DIR=$HOME/.kymsu/plugins.d
#SCRIPTS_DIR=$(cat ~/.kymsu/path)/plugins.d
cd "$SCRIPTS_DIR" cd "$SCRIPTS_DIR"
# On boucle sur tous les fichiers du répertoire <<COMMENT
# (seuls les fichiers commençant par '_' ou '0' sont pris en compte) echo "$list_plugins"
#for script in $(find . -name '[_0]*' -maxdepth 1 | sort); do
for script in $(find . ! -name _\*.sh -maxdepth 1 | sort); do echo "all args: $@"
# si le fichier est exécutable et n'est pas un dossier echo ""
if [ -x "$SCRIPTS_DIR/$script" ] && [ -f "$SCRIPTS_DIR/$script" ]; then echo "script: $one_script"
# on lexécute ; le $@ permet de passer à chaque echo ""
# script les arguments passés à *ce* script COMMENT
$SCRIPTS_DIR/$script $@
fi
echo "Please, grab a ☕️, KYMSU keep your working environment up to date!"
echo ""
for script in $list_plugins; do
# le $@ permet de passer à chaque script les arguments passés à *ce* script
$script $@
#echo "$script"
done done
shift "$((OPTIND-1))"

View File

@@ -1,6 +1,57 @@
#!/usr/bin/env bash #!/usr/bin/env bash
echo "🦄 KYMSU self update"
pushd "$(cat ~/.kymsu/path)" > /dev/null SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
git pull #PREF_FILE="$SCRIPT_DIR/kymsu.pref"
popd > /dev/null #TEMP_FILE="$SCRIPT_DIR/kymsu.pref.tmp"
echo "" PREF_FILE="$HOME/.kymsu/plugins.d/kymsu.pref"
TEMP_FILE="$HOME/.kymsu/plugins.d/kymsu.pref.tmp"
# 5m 5 minutes
# 2h 2 hours
# 4d 4 days
# 3w 3 weeks
# 1M 1 month
# 1Y 1 year
update_interval="1w"
x=${update_interval: -1}
case $x in
m) unite=60;;
h) unite=3600;;
d) unite=$(( 3600*24 ));;
w) unite=$(( 3600*24*7 ));;
M) unite=$(( 3600*24*30 ));;
Y) unite=$(( 3600*24*30*12 ));;
*) echo "Bad update_interval pref" >&2
#exit -1;;
esac
y=$(( ${#update_interval}-1 ))
nb=${update_interval:0:$y}
w=$(( unite*nb ))
if [ -f $PREF_FILE ]; then
last_update=$(cat $PREF_FILE | grep "last.update" | awk -F"=" '{print $2}' )
else
last_update=0
fi
current_timestamp=$(date +"%s")
temps=$(( current_timestamp-last_update))
if [ $(( temps-w)) -gt 0 ]; then
echo "🦄 KYMSU self update"
pushd "$(cat ~/.kymsu/path)" > /dev/null
#git pull
git pull https://Bruno21@github.com/Bruno21/kymsu.git
popd > /dev/null
echo ""
if [ $last_update -eq 0 ]; then
echo "last.update=$current_timestamp" > $PREF_FILE
else
awk -F'=' -v OFS='=' -v newval="$current_timestamp" '/^last.update/{$2=newval;print;next}1' $PREF_FILE > $TEMP_FILE
mv $TEMP_FILE $PREF_FILE
fi
fi

135
plugins.d/antibody.sh Executable file
View File

@@ -0,0 +1,135 @@
#!/usr/bin/env bash
# Antibody plugin for KYMSU
# https://github.com/welcoMattic/kymsu
# https://github.com/getantibody/antibody
###############################################################################################
#
# Settings:
# Display info on updated pakages
display_info=true
# Casks don't have pinned cask. So add Cask to the do_not_update array for prevent to update.
# Also add package for prevent to update whitout pin it.
declare -a do_not_update=('')
# No distract mode (no user interaction)
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
#
###############################################################################################
#
# Recommended software (brew install):
# -jq (Lightweight and flexible command-line JSON processor)
# -terminal-notifier (Send macOS User Notifications from the command-line)
#
###############################################################################################
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
box="\033[1;41m"
reset="\033[0m"
notification() {
sound="Basso"
title="Antibody"
#subtitle="Attention !!!"
message="$1"
image_err="error.png"
image_ok="success.png"
if [[ "$OSTYPE" == "darwin"* ]] && [ -x "$(command -v terminal-notifiera)" ]; then
terminal-notifier -title "$title" -message "$message" -sound "$sound" -contentImage "$image_ok"
elif [[ "$OSTYPE" == "darwin"* ]] && [ -n "$(which alerter)" ]; then
alerter -title "$title" -subtitle "" -message "$message" -sound "$sound" -contentImage "$image_ok" -timeout 3
fi
}
antibody_folder=$(antibody home)
antibody_version=$(antibody -v 2>&1 | awk '{print $3}')
echo -e "${bold}🙏 Antibody ${reset}\n"
echo -e "Current ${underline}Antibody${reset} version: $antibody_version\n"
update=$(antibody update 2>&1)
installed=$(echo "$update" | grep "updating")
updated=$(echo "$update" | grep "updated")
if [ -n "$installed" ]; then
echo -e "${underline}Antibody modules installed:${reset}"
#echo "$installed"
IFS=$'\n'
#for i in $(echo "$update" | grep "updating")
for i in $(echo "$installed")
do
url=$(echo "$i" | awk '{print $3}')
module=$(echo "$i" | awk -F "/" '{print $NF}')
echo -e "${bold}$module${reset} ($url)"
done
echo ""
echo "Modules are installed in $antibody_folder folder."
else
echo -e "${underline}No Antibody modules installed.${reset}"
fi
<<COMMENT
antibody update:
antibody: updating: https://github.com/zsh-users/zsh-history-substring-search
antibody: updating: https://github.com/zsh-users/zsh-completions
antibody: updating: https://github.com/zsh-users/zsh-autosuggestions
antibody: updating: https://github.com/mafredri/zsh-async
antibody: updating: https://github.com/zdharma/fast-syntax-highlighting
antibody: updating: https://github.com/sindresorhus/pure
antibody: updating: https://github.com/marzocchi/zsh-notify
COMMENT
echo ""
if [ -n "$updated" ]; then
echo -e "${underline}Antibody modules to update:${reset}"
#echo "$updated"
IFS=$'\n'
for j in $(echo "$updated")
do
url=$(echo "$j" | awk '{print $3}')
module=$(echo "$j" | awk -F "/" '{print $NF}' | awk '{print $1}')
commit=$(echo "$j" | awk -F "$url" '{print $NF}')
last_commit=$(echo "$commit" | awk '{print $NF}')
echo -e "${bold}$module${reset} ($url)"
echo "Commits: $commit"
echo "Last commit: "$url"/commits/"$last_commit
# https://github.com/zsh-users/zsh-completions/commits/
modules+="$module "
done
notif="$modules has been updated"
notification "$notif"
else
echo -e "${underline}No Antibody modules to update.${reset}"
echo ""
fi
<<COMMENT
antibody: updated: https://github.com/mafredri/zsh-async 95c2b15 -> 490167c
antibody: updated: https://github.com/marzocchi/zsh-notify 4eea098 -> 8a4abe7
antibody: updated: https://github.com/sindresorhus/pure 0a92b02 -> 3a5355b
antibody: updated: https://github.com/zdharma/fast-syntax-highlighting 303eeee -> 865566c
antibody: updated: https://github.com/zsh-users/zsh-completions ed0c7a7 -> 16b8947
COMMENT
echo ""
echo ""

View File

@@ -2,6 +2,8 @@
echo -e "\033[1m⚛ Atom editor will be shiny when you'll be back from your coffee/tea break! \033[0m" echo -e "\033[1m⚛ Atom editor will be shiny when you'll be back from your coffee/tea break! \033[0m"
command -v apm >/dev/null 2>&1 || { echo -e "\n${bold}Atom editor${reset} is not installed.\n\nRun ${italic}'brew install atom'${reset} for install." && exit 1; }
if hash apm-beta 2>/dev/null; then if hash apm-beta 2>/dev/null; then
apm-beta upgrade -c false apm-beta upgrade -c false
fi fi

69
plugins.d/conda.sh Executable file
View File

@@ -0,0 +1,69 @@
#!/usr/bin/env bash
# conda plugin for KYMSU
# https://github.com/welcoMattic/kymsu
# If you'd prefer that conda's base environment not be activated on startup, set the auto_activate_base parameter to false:
# conda config --set auto_activate_base false
# In order to initialize after the installation process is done,
# first run source <path to conda>/bin/activate and then run conda init.
# Update conda
echo -e "\033[1m🦎 conda \033[0m"
path_to_conda=$(conda config --show | grep 'root_prefix' | awk '{print $2}')
cd $path_to_conda
#conda update conda
# conda update -n base -c defaults conda
#upd=$(conda update --all)
#echo $upd
#avail_update=$(echo $upd | grep '$ conda update -n base -c defaults conda')
#avail_update=$(conda update --all | grep '$ conda update -n base -c defaults conda')
#avail_update=$(conda update --all)
conda update --all
avail_update="$(conda update --all 2>&1 > /dev/null)"
# Proceed ([y]/n)? n
echo "---"
if echo "$avail_update" | grep -q "$ conda update -n base -c defaults conda"
then
echo "need update"
fi
echo ""
# If you want to update to a newer version of Anaconda, type:
#
# $ conda update --prefix /Users/bruno/miniconda3 anaconda
# Initialisation
# source $HOME/miniconda3/bin/activate
# source $path_to_conda/bin/activate
# conda init
# Configuration
#conda config --help
#conda config --set auto_update_conda False
# Packages installés dans l'environnement conda
echo -e "\033[4mInstalled packages in conda environment:\033[0m"
echo ""
conda list

49
plugins.d/gem.sh Executable file
View File

@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# gem plugin for KYMSU (install local package)
# https://github.com/welcoMattic/kymsu
# https://guides.rubygems.org/what-is-a-gem/
# No distract mode
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bold="\033[1m"
bold_under="\033[1;4m"
redbox="\033[1;41m"
redbold="\033[1;31m"
red="\033[31m"
yellow="\033[33m"
reset="\033[0m"
echo -e "${bold} 💍 Gem (Ruby) ${reset}"
echo ""
gem_outdated=$(gem outdated --local)
upd=$(echo "$gem_outdated" | awk '{print $1}')
if [ -n "$upd" ]; then
nb=$(echo "$upd" | wc -w | xargs)
echo -e "${redbox} $nb ${reset} ${underline}availables updates:${reset}"
echo "$gem_outdated"
echo ""
for i in $upd
do
if [ "$no_distract" = false ]; then
echo "$i" | xargs -n 1 gem info
echo "$i" | xargs -p -n 1 gem update
echo -e "\n"
else
echo "$i" | xargs -n 1 gem update
echo -e "\n"
fi
done
else
echo -e "${underline}No gem updates.${reset}"
fi

View File

@@ -3,34 +3,51 @@
# Homebrew plugin for KYMSU # Homebrew plugin for KYMSU
# https://github.com/welcoMattic/kymsu # https://github.com/welcoMattic/kymsu
# Error: Cask 'onyx' definition is invalid: invalid 'depends_on macos' value: :snow_leopard
# Supprimer manuellement onyx de /Applications
# rm -rvf "$(brew --prefix)/Caskroom/onyx"
# ou
# /usr/bin/find "$(brew --prefix)/Caskroom/"*'/.metadata' -type f -name '*.rb' -print0 | /usr/bin/xargs -0 /usr/bin/perl -i -0pe 's/depends_on macos: \[.*?\]//gsm;s/depends_on macos: .*//g'
############################################################################################### ###############################################################################################
# #
# Settings: # Settings:
# Display info on updated pakages # Display info on updated pakages / casks
display_info=true display_info=true
# Casks don't have pinned cask. So add Cask to the do_not_update array for prevent to update. # Casks don't have pinned cask. So add Cask to the do_not_update array for prevent to update.
# Also add package for prevent to update whitout pin it. # declare -a do_not_update=("xnconvert" "yate")
declare -a do_not_update=('') declare -a cask_to_not_update=()
# No distract mode (no user interaction)(Casks with 'latest' version number won't be updated) # No distract mode (no user interaction)(Casks with 'latest' version number won't be updated)
no_distract=false #[[ $@ =~ "--nodistract" ]] && no_distract=true || no_distract=false
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
# Some Casks have auto_updates true or version :latest. Homebrew Cask cannot track versions of those apps.
# 'latest=true' force Homebrew to update those apps.
latest=false
# #
############################################################################################### ###############################################################################################
# #
# Recommended software (brew install): # Require software (brew install):
# -jq (Lightweight and flexible command-line JSON processor) # -jq (Lightweight and flexible command-line JSON processor)
#
# Recommended software (brew install):
# -terminal-notifier (Send macOS User Notifications from the command-line) # -terminal-notifier (Send macOS User Notifications from the command-line)
# #
############################################################################################### ###############################################################################################
: <<'END_COMMENT'
blabla
END_COMMENT
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
box="\033[1;41m"
reset="\033[0m"
command -v terminal-notifier >/dev/null 2>&1 || { echo -e "You shoud intall ${bold}terminal-notifier${reset} for notification ${italic}(brew install terminal-notifier)${reset}.\n"; }
command -v jq >/dev/null 2>&1 || { echo -e "${bold}kymsu2${reset} require ${bold}jq${reset} but it's not installed.\nRun ${italic}(brew install jq)${reset}\nAborting..." >&2; exit 1; }
notification() { notification() {
sound="Basso" sound="Basso"
title="Homebrew" title="Homebrew"
@@ -43,268 +60,403 @@ notification() {
fi fi
} }
get_info_cask() {
info="$1"
app="$2"
l1=""
if [[ $1 == "--nodistract" ]]; then token=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.token)')
no_distract=true name=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.name)' | jq -r '.[0]')
homepage=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.homepage)')
url=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.url)')
desc=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.desc)')
version=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.version)')
#auto_updates=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.auto_updates)')
#caveats=$(echo "$info" | jq -r '.[] | select(.token == "'${app}'") | (.caveats)')
installed_versions=$(echo "$upd_cask" | jq -r '.[] | select(.name == "'${app}'") | (.installed_versions)' | jq -r '.[]')
current_version=$(echo "$upd_cask" | jq -r '.[] | select(.name == "'${app}'") | (.current_version)')
[[ "$desc" = "null" ]] && desc="${italic}No description${reset}"
if [[ ! " ${casks_not_pinned} " =~ " ${token} " ]] && [[ ! " ${casks_latest_not_pinned} " =~ " ${token} " ]]; then
l1+="${red}$name ($token): installed: $installed_versions current: $current_version [Do not update]${reset}\n"
else
l1+="${bold}$name ($token): installed: $installed_versions current: $current_version${reset}\n"
fi
l1+="$desc\n"
l1+="$homepage"
echo -e "$l1\n"
}
get_info_pkg() {
info="$1"
pkg="$2"
pkg2="$2"
l1=""
#echo "pkg: $pkg"
if [[ " ${pkg} " =~ "/" ]]; then
pkg=$(echo "$pkg" | awk -F"/" '{print $NF}')
fi
#echo "pkg: $pkg"
name=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.name)')
#name=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'")')
full_name=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.full_name)')
desc=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.desc)')
homepage=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.homepage)')
#urls=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.urls)' | jq -r '.stable | .url')
keg_only=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.keg_only)')
caveats=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.caveats)')
#stable=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.versions)' | jq -r '.stable')
#installed=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.installed)' | jq -r '.[].version')
pinned=$(echo "$info" | jq -r '.[] | select(.name == "'${pkg}'") | (.pinned)')
#echo -e "installed: $installed\n"
installed_versions=$(echo "$upd_package" | jq -r '.[] | select(.name == "'${pkg2}'") | (.installed_versions)' | jq -r '.[]')
current_version=$(echo "$upd_package" | jq -r '.[] | select(.name == "'${pkg2}'") | (.current_version)')
#echo -e "installed_versions: $installed_versions\n"
#echo "stable: $current_version"
#echo "name: $name"
#echo "desc: $desc"
# Python@3.9 : multiples versions
ins=""
for i in $installed_versions
do
ins=$i
done
installed=$ins
if [ "$pinned" = "true" ]; then
pinned_v=$(echo "$upd_package" | jq -r '.[] | select(.name == "'${pkg}'") | (.pinned_version)')
l1+="${red}$name: installed: $installed stable: $current_version [pinned at $pinned_v]"
[ "$keg_only" = true ] && l1+=" [keg-only]"
l1+="${reset}\n"
else
l1+="${bold}$name: installed: $installed stable: $current_version"
[ "$keg_only" = true ] && l1+=" [keg-only]"
l1+="${reset}\n"
fi
if [ "$desc" != "null" ]; then l1+="$desc\n"; fi;
l1+="$homepage"
echo -e "$l1\n"
}
echo -e "${bold}🍺 Homebrew ${reset}"
curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi fi
echo -e "\033[1m🍺 Homebrew \033[0m" echo -e "\n🍺 ${underline}Updating brew...${reset}\n"
brew update brew update
echo "" echo ""
brew_outdated=$(brew outdated --greedy --json=v2)
#echo "\nSearch for brew update...\n"
upd_json=$(echo "$brew_outdated")
################
### Packages ###
################
# Packages update:
echo -e "\n🍺 ${underline}Search for packages update...${reset}\n"
upd_package=$(echo "$brew_outdated" | jq '{formulae} | .[]')
for row in $(jq -c '.[]' <<< "$upd_package");
do
name=$(echo "$row" | jq -j '.name')
installed_versions=$(echo "$row" | jq -j '.installed_versions' | jq -r '.[]')
current_version=$(echo "$row" | jq -j '.current_version')
pinned=$(echo "$row" | jq -j '.pinned')
#pinned_version=$(echo "$row" | jq -j '.pinned_version')
upd_pkgs+="$name "
if [ "$pinned" = true ]; then
upd_pkg_pinned+="$name "
elif [ "$pinned" = false ]; then
upd_pkg_notpinned+="$name "
fi
done
#echo "$upd_pkgs"
upd_pkgs=$(echo "$upd_pkgs" | sed 's/.$//')
#echo "$upd_pkgs"
upd_pkg_pinned=$(echo "$upd_pkg_pinned" | sed 's/.$//')
upd_pkg_notpinned=$(echo "$upd_pkg_notpinned" | sed 's/.$//')
# Find infos about updated packages
nb_pkg_upd=$(echo "$upd_pkgs" | wc -w | xargs)
if [ "$nb_pkg_upd" -gt 0 ]; then
a="available package update"
array=($a)
if [ "$display_info" = true ]; then
[ "$nb_pkg_upd" -gt 1 ] && echo -e "${box} $nb_pkg_upd ${reset} ${array[@]/%/s}:\n" || echo -e "${box} $nb_pkg_upd ${reset} ${array[@]}:\n"
upd_pkgs_info=$(brew info --json=v2 $upd_pkgs | jq '{formulae} | .[]')
#echo "$upd_pkgs_info"
for row in $upd_pkgs;
do
#echo "$row"
get_info_pkg "$upd_pkgs_info" "$row"
done
else
[ "$nb_pkg_upd" -gt 1 ] && echo -e "${box} $nb_pkg_upd ${reset} ${array[@]/%/s}: ${bold}$upd_pkgs${reset}" || echo -e "${box} $nb_pkg_upd ${reset} ${array[@]}: ${bold}$upd_pkgs${reset}"
fi
fi
# Pinned packages # Pinned packages
pkg_pinned=$(brew list --pinned | xargs)
if [ -n "$pkg_pinned" ]; then
brew_pinned=$(brew list --pinned | xargs) nbp=$(echo "$pkg_pinned" | wc -w | xargs)
#brew_pinned=`echo $brew_pinned | sed 's/ *$//g'`
#brew_pinned=`echo $brew_pinned | xargs`
if [ -n "$brew_pinned" ]; then echo -e "\n${underline}List of${reset} ${box} $nbp ${reset} ${underline}pinned packages:${reset}"
echo -e "${red}$pkg_pinned${reset}"
nbp=$(echo "$brew_pinned" | wc -w | xargs)
echo -e "\033[4mList of\033[0m \033[1;41m $nbp \033[0m \033[4mpinned packages:\033[0m"
echo -e "\033[1;31m$brew_pinned\033[0m"
echo "To update a pinned package, you need to un-pin it manually (brew unpin <formula>)" echo "To update a pinned package, you need to un-pin it manually (brew unpin <formula>)"
echo "" echo ""
fi fi
# A pinned package is in 'brew outdated' ### Usefull for notify recent modification of apache/mysql/php conf files. ###
touch /tmp/checkpoint
declare -A array_info # Updating packages
if [ -n "$upd_pkg_notpinned" ]; then
if [ -x "$(command -v jq)" ]; then echo -e "\n🍺 ${underline}Updating packages...${reset}\n"
brew_outdated=$(brew outdated --json)
upd_json=$(echo "$brew_outdated" )
for row in $(jq -c '.[]' <<< "$upd_json"); [ -n "$pkg_pinned" ] && echo -e "${red}Pinned: $upd_pkg_pinned . It won't be updated!'${reset}\n"
do
name=$(echo "$row" | jq -j '.name, "\n"');
upd3+="$name "
done
upd3=$(echo "$upd3" | sed 's/.$//')
# Only 1 request 'brew info' for all updated packages
info=$(brew info --json=v1 $upd3)
i=0
for row in $(echo "${info}" | jq -r '.[] | @base64');
do
_jq() {
echo ${row} | base64 --decode | jq -r ${1}
}
name=$(_jq '.name')
homepage=$(_jq '.homepage')
# encoding to base64 to prevent errors with some characters (')
desc=$(_jq '.desc' | base64 --break=0) # BSD: break=0 GNU: wrap=0
pinned=$(_jq '.pinned')
installed_v=$(_jq '.installed[].version')
stable=$(_jq '.versions.stable')
#linked=$(_jq '.linked_keg')
eval "declare -a array_info$i=($name $homepage $desc $pinned $installed_v $stable)"
((i++))
done
nb=$i
i=0
else
brew_outdated=$(brew outdated)
upd3=$(echo "$brew_outdated" | awk '{print $1}')
info=$(brew info $upd3)
for i in $upd3
do
a=$(grep -A 3 "$i: stable" <<< "$info")
array_info["$i"]="$a"
done
nb=${#array_info[@]}
fi
# Get infos for all updated packages
if [ -n "$upd3" ]; then
# Display info on outdated packages
if [ "$display_info" = true ]; then
echo -e "\033[4mInfo on\033[0m \033[1;41m $nb \033[0m \033[4mupdated packages:\033[0m"
if [ -x "$(command -v jq)" ]; then
# ok avec jq installé
i=0
for row in $(jq -c '.[]' <<< "$upd_json");
do
name=$(echo "$row" | jq -j '.name, "\n"');
pinned=$(echo "$row" | jq -j '.pinned, "\n"');
pinned_v=$(echo "$row" | jq -j '.pinned_version, "\n"');
iv=$(echo "$row" | jq -j '.installed_versions, "\n"');
installed_v=$(echo "$iv" | jq -j '.[]');
current_v=$(echo "$row" | jq -j '.current_version, "\n"');
#n="array_info$i[0]"
#name=$(echo ${!n})
h="array_info$i[1]"
homepage=$(echo ${!h})
d="array_info$i[2]"
desc=$(echo ${!d} | base64 --decode)
#info_pkg=$(brew info --json=v1 "$name")
#homepage=$(echo "$info_pkg" | jq -r .[].homepage)
#desc=$(echo "$info_pkg" | jq -r .[].desc)
#current=$(echo "$info_pkg" | jq -r .[].installed[].version | tail -n 1 | awk '{print $1}')
#stable=$(echo "$info_pkg" | jq -r .[].versions.stable)
#pined=$(echo "$info_pkg" | jq -r .[].pinned)
upd+="$name "
if [ "$pinned" = "true" ]; then echo -e "\033[1;31m$name: installed: $installed_v stable: $current_v [pinned at $pinned_v]\033[0m";
else echo -e "\033[1;37m$name: installed: $installed_v stable: $current_v\033[0m";
fi
if [ "$desc" != "null" ]; then echo "$desc"; fi;
echo -e "\033[4m$homepage\033[0m"
echo ""
((i++))
done
upd3=$upd
else
# ok sans jq
for pkg in $upd3
do
info_pkg="${array_info[$pkg]}"
ligne1=$(echo "$info_pkg" | head -n 1)
desc=$(echo "$info_pkg"| sed '1d')
if [[ $ligne1 =~ "pinned" ]]; then # same as if [[ $ligne1 == *"pinned"* ]]; then
echo -e "\033[1;31m$ligne1\033[0m"
else
echo -e "\033[1m$ligne1\033[0m"
fi
echo "$desc"
echo ""
done
fi
fi
# Usefull for notify recent modification of apache/mysql/php conf files.
touch /tmp/checkpoint
# Remove pinned packages from outdated packages list
not_pinned=""
for i in $upd3
do
if [[ $brew_pinned != *"$i"* ]]; then
not_pinned+="$i "
fi
done
not_pinned=$(echo "$not_pinned" | sed 's/.$//')
# Update outdated packages
if [ "$no_distract" = false ]; then if [ "$no_distract" = false ]; then
a=$(echo -e "Do you wanna run ${bold}brew upgrade "$upd_pkg_notpinned"${reset} ? (y/n/a) ")
# yes/no/all
read -p "$a" choice
if [ -n "$not_pinned" ]; then if [ "$choice" == "y" ] || [ "$choice" == "Y" ] || [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
for i in $upd_pkg_notpinned;
do
if [ "$i" == "bash" ]; then
echo -e "\nBash update available !"
echo -e "You should run ${bold}brew upgrade bash${reset} in another terminal !\n"
continue
fi
if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
echo "$i" | xargs -p -n 1 brew upgrade
elif [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
echo "$i" | xargs -n 1 brew upgrade
fi
done
else
echo -e "OK, let's continue..."
fi
else
#echo "No distract"
echo -e "Running ${bold}brew upgrade $upd_pkg_notpinned${reset}..."
echo "$upd_pkg_notpinned" | xargs -n 1 brew upgrade
fi
a=$(echo -e "Do you wanna run \033[1mbrew upgrade "$not_pinned"\033[0m ? (y/n)") else
echo -e "\n${italic}No update package available...${reset}\n"
fi
echo ""
#############
### Casks ###
#############
#Casks update
echo -e "\n🍺 ${underline}Casks...${reset}\n"
upd_cask=$(echo "$brew_outdated" | jq '{casks} | .[]')
# erreur avec PureVPN et plusieurs versions installées.
# parse error: Unfinished string at EOF at line 2, column 0
# parse error: Invalid numeric literal at line 1, column 7
#echo "$upd_cask"
for row in $(jq -c '.[]' <<< "$upd_cask");
do
name=$(echo "$row" | jq -j '.name')
installed_versions=$(echo "$row" | jq -j '.installed_versions | .[]')
current_version=$(echo "$row" | jq -j '.current_version')
if [ "$current_version" != "latest" ]; then
upd_casks+="$name "
elif [ "$current_version" == "latest" ]; then
upd_casks_latest+="$name "
fi
done
upd_casks=$(echo "$upd_casks" | sed 's/.$//')
upd_casks_latest=$(echo "$upd_casks_latest" | sed 's/.$//')
# Do not update casks
if (( ${#cask_to_not_update[@]} )); then
# cask_to_not_update contient 1 cask ET/OU 1 latest
nbp=${#cask_to_not_update[*]}
echo -e "${underline}List of${reset} ${box} $nbp ${reset} ${underline}'do not update' casks:${reset}"
echo -e "${red}${cask_to_not_update[*]}${reset}"
echo -e "To remove an app from this list, you need to edit the ${italic}do_not_update${reset} array."
echo ""
casks_not_pinned=""
for i in $upd_casks
do
if [[ ! " ${cask_to_not_update[@]} " =~ " ${i} " ]]; then
casks_not_pinned+="$i "
fi
done
casks_not_pinned=$(echo "$casks_not_pinned" | sed 's/.$//')
casks_latest_not_pinned=""
for i in $upd_casks_latest
do
if [[ ! " ${cask_to_not_update[@]} " =~ " ${i} " ]]; then
casks_latest_not_pinned+="$i "
fi
done
casks_latest_not_pinned=$(echo "$casks_latest_not_pinned" | sed 's/.$//')
else
casks_not_pinned=$upd_casks
casks_latest_not_pinned=$upd_casks_latest
fi
#Casks update
echo -e "🍺 ${underline}Search for casks update...${reset}\n"
[ -n "$casks_latest_not_pinned" ] && echo -e "Some Casks have ${italic}auto_updates true${reset} or ${italic}version :latest${reset}. Homebrew Cask cannot track versions of those apps."
[ -n "$casks_latest_not_pinned" ] && echo -e "Edit this script and change the setting ${italic}latest=false${reset} to ${italic}true${reset}\n"
# Find infos about updated casks
nb_casks_upd=$(echo "$upd_casks" | wc -w | xargs)
if [ "$nb_casks_upd" -gt 0 ]; then
a="available cask update"
array=($a)
if [ "$display_info" = true ]; then
[ "$nb_casks_upd" -gt 1 ] && echo -e "${box} $nb_casks_upd ${reset} ${array[@]/%/s}:\n" || echo -e "${box} $nb_casks_upd ${reset} ${array[@]}:\n"
upd_casks_info=$(brew info --cask --json=v2 $upd_casks | jq '{casks} | .[]')
for row in $upd_casks;
do
get_info_cask "$upd_casks_info" "$row"
done
else
[ "$nb_casks_upd" -gt 1 ] && echo -e "${box} $nb_casks_upd ${reset} ${array[@]/%/s}: ${bold}$upd_casks${reset}" || echo -e "${box} $nb_casks_upd ${reset} ${array[@]}: ${bold}$upd_casks${reset}"
fi
# Updating casks
echo -e "\n🍺 ${underline}Updating casks...${reset}\n"
[ "${#cask_to_not_update[@]}" -gt 0 ] && echo -e "${red}Do not update: ${cask_to_not_update[@]} . It won't be updated!'${reset}\n"
if [ -n "$casks_not_pinned" ]; then
if [ "$no_distract" = false ]; then
a=$(echo -e "Do you wanna run ${bold}brew upgrade $casks_not_pinned${reset} ? (y/n/a) ")
# yes/no/all
read -p "$a" choice read -p "$a" choice
#case "$choice" in
# y|Y ) echo "$brew_outdated" | awk '{print $1}' | xargs -p -n 1 brew upgrade ;;
# n|N ) echo "Ok, let's continue";;
# * ) echo "invalid";;
#esac
if [ "$choice" == "y" ]; then if [ "$choice" == "y" ] || [ "$choice" == "Y" ] || [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
echo ""
for i in $not_pinned for i in $casks_not_pinned;
do do
FOUND=`echo ${do_not_update[*]} | grep "$i"` if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
if [ "${FOUND}" = "" ]; then # --cask required for Cask like 'docker'. It can be a formula or a cask.
echo "$i" | awk '{print $1}' | xargs -p -n 1 brew upgrade echo "$i" | xargs -p -n 1 brew upgrade --cask
#echo "Running update package $i " echo ""
#fi elif [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
echo "$i" | xargs -n 1 brew upgrade --cask
echo ""
fi fi
done done
else else
echo "Ok, let's continue" echo -e "OK, let's continue..."
fi fi
else else
echo "No package to update" echo "$casks_not_pinned" | xargs -n 1 brew upgrade --cask
fi fi
else # no distract = true
if [ -n "$not_pinned" ]; then
echo "$not_pinned" | awk '{print $1}' | xargs -n 1 brew upgrade
#echo "Running update package $not_pinned"
else
echo "No package to update"
fi
fi fi
echo ""
fi
# Casks
echo "🍺 Casks upgrade."
cask_outdated=$(brew cask outdated --greedy --verbose)
outdated=$(echo "$cask_outdated" | grep -v '(latest)')
if [ -n "$outdated" ]; then
# don't stop multiples updates if one block (bad checksum, not compatible with OS version (Onyx))
sea=$(echo "$outdated" | awk '{print $1}')
for i in $sea
do
FOUND=`echo ${do_not_update[*]} | grep "$i"`
if [ "${FOUND}" == "" ]; then
echo "$i" | xargs brew cask reinstall
fi
done
else else
echo -e "\033[4mNo availables Cask updates.\033[0m" echo -e "\n${italic}No update cask available...${reset}\n"
fi fi
echo ""
latest=$(echo "$cask_outdated" | grep '(latest)')
if [ -n "$latest" ] && [ "$no_distract" = false ]; then # Updating casks latest
echo -e "\033[4mCasks (latest):\033[0m" if [ -n "$casks_latest_not_pinned" ] && [ "$latest" == true ]; then
echo "$latest" | cut -d " " -f1,2 echo -e "\n🍺 ${underline}Updating casks with 'latest' as version...${reset}\n"
echo "" #echo -e "Some Casks have ${italic}auto_updates true${reset} or ${italic}version :latest${reset}. Homebrew Cask cannot track versions of those apps."
#echo -e "Here you can force Homebrew to upgrade those apps.\n"
read -p "Do you wanna run Cask (latest) upgrade? (y/n)" choice # Find infos about updated casks
nb_casks_latest_upd=$(echo "$upd_casks_latest" | wc -w | xargs)
if [ "$nb_casks_latest_upd" -gt 0 ]; then
a="available cask update"
array=($a)
if [ "$display_info" = true ]; then
[ "$nb_casks_latest_upd" -gt 1 ] && echo -e "${box} $nb_casks_latest_upd ${reset} ${array[@]/%/s}:\n" || echo -e "${box} $nb_casks_latest_upd ${reset} ${array[@]}:\n"
upd_casks_latest_info=$(brew info --cask --json=v2 $upd_casks_latest | jq '{casks} | .[]')
for row in $upd_casks_latest;
do
get_info_cask "$upd_casks_latest_info" "$row"
done
else
[ "$nb_casks_latest_upd" -gt 1 ] && echo -e "${box} $nb_casks_latest_upd ${reset} ${array[@]/%/s}: ${bold}$upd_casks_latest${reset}" || echo -e "${box} $nb_casks_upd ${reset} ${array[@]}: ${bold}$upd_casks_latest${reset}"
fi
if [ "$choice" == "y" ]; then
for i in "$latest"
do
echo "$i" | awk '{print $1}' | xargs -p -n 1 brew cask upgrade --greedy
echo $?
done
else
echo "Ok, let's continue"
fi fi
fi if [ "$no_distract" = false ]; then
echo "" q=$(echo -e "Do you wanna run ${bold}brew upgrade $casks_latest_not_pinned${reset} ? (y/n/a) ")
read -p "$q" choice
# Test if Apache conf file has been modified by Homebrew (Apache, PHP or Python updates) if [ "$choice" == "y" ] || [ "$choice" == "Y" ] || [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
echo ""
for i in $casks_latest_not_pinned
do
if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
echo "$i" | xargs -p -n 1 brew upgrade --cask
echo ""
elif [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
echo "$i" | xargs -n 1 brew upgrade --cask
echo ""
fi
done
else
echo -e "OK, let's continue..."
fi
else
echo -e "Running ${bold}brew upgrade $casks_latest_not_pinned${reset}..."
echo "$casks_latest_not_pinned" | xargs -n 1 brew upgrade
fi
fi
###############################################################
### Test if Apache conf file has been modified by Homebrew ###
### (Apache, PHP or Python updates) ###
###############################################################
v_apa=$(httpd -V | grep 'SERVER_CONFIG_FILE') v_apa=$(httpd -V | grep 'SERVER_CONFIG_FILE')
conf_apa=$(echo "$v_apa" | awk -F "\"" '{print $2}') conf_apa=$(echo "$v_apa" | awk -F "\"" '{print $2}')
@@ -312,32 +464,51 @@ dir=$(dirname $conf_apa)
name=$(basename $conf_apa) name=$(basename $conf_apa)
notif1="$dir has been modified in the last 5 minutes" notif1="$dir has been modified in the last 5 minutes"
test=$(find $dir -name "$name" -mmin -5 -maxdepth 1) test=$(find $dir -maxdepth 1 -name "$name" -mmin -5)
echo "$test"
[ ! -z $test ] && echo -e "\033[1;31m❗ $notif1\033[0m" [ ! -z $test ] && echo -e "\033[1;31m❗ $notif1\033[0m"
[ ! -z $test ] && notification "$notif1" [ ! -z $test ] && notification "$notif1"
# Test if PHP.ini file has been modified by Homebrew (PECL) # Test if PHP.ini file has been modified by Homebrew (PECL)
php_versions=$(ls /usr/local/etc/php/) # Fichier php.ini courant
# php -i | grep 'Loaded Configuration File' | awk '{print $NF}'
php_versions=$(ls $(brew --prefix)/etc/php/ 2>/dev/null)
for php in $php_versions for php in $php_versions
do do
# file modified since it was last read if [ -n "$upd_pkg" ]; then
#if [ -N /usr/local/etc/php/$php/php.ini ]; then echo "modified"; fi
php_modified=$(find /usr/local/etc/php/$php/ -name php.ini -newer /tmp/checkpoint) # file modified since it was last read
php_ini=/usr/local/etc/php/$php/php.ini php_modified=$(find $(brew --prefix)/etc/php/$php/ -name php.ini -newer /tmp/checkpoint)
notif2="$php_ini has been modified" php_ini=$(brew --prefix)/etc/php/$php/php.ini
notif2="$php_ini has been modified"
[ ! -z $php_modified ] && echo -e "\033[1;31m❗ $notif2\033[0m" echo "$php_modified"
[ ! -z $php_modified ] && notification "$notif2"
[ ! -z $php_modified ] && echo -e "\033[1;31m❗ $notif2\033[0m"
[ ! -z $php_modified ] && notification "$notif2"
fi
done done
echo "" echo ""
# Doctor
echo "🍺 The Doc is checking that everything is ok." ##############
### Doctor ###
##############
echo -e "\n🍺 ${underline}The Doc is checking that everything is ok...${reset}\n"
brew doctor brew doctor
echo "python-cryptography required by certbot"
echo "python-certifi required by certbot and yt-dlp"
echo "numpy required ffmpeg and openvin"
# suprimer: python-packaging python-argcomplete
brew missing brew missing
status=$? status=$?
if [ $status -ne 0 ]; then brew missing --verbose; fi if [ $status -ne 0 ]; then brew missing --verbose; fi
@@ -346,12 +517,11 @@ echo ""
# Homebrew 2.0.0+ run a cleanup every 30 days # Homebrew 2.0.0+ run a cleanup every 30 days
if [[ $1 == "--cleanup" ]]; then if [[ $1 == "--cleanup" ]]; then
echo "🍺 Cleaning brewery" echo -e "🍺 Cleaning brewery..."
##brew cleanup -s
# keep 30 days #HOMEBREW_NO_INSTALL_CLEANUP
brew cleanup --prune=30 brew cleanup --prune=30
##brew cask cleanup: deprecated - merged with brew cleanup
#brew cask cleanup --outdated
echo "" echo ""
fi fi

View File

@@ -7,180 +7,229 @@
# Settings: # Settings:
# npm local install # npm local install
local_path=/Users/bruno/Sites/node_modules/ local_path=$HOME/Sites/node_modules/
chemin=$(pwd) # folder contains Brewfile and Installer.md
#chemin=$(pwd)
chemin=$HOME/Documents/kymsu
#version: pip ou pip3 #version: pip ou pip3
version=pip3 pip_version=pip3
# #
# https://github.com/atom/apm/tags
apm=false
######################################### #########################################
now=$(date +"%d-%m-%Y_%T") #if [ ! -d chemin ]; then mkdir $chemin; fi
mkdir -p $chemin
now=$(date +"%d-%m-%Y_%T" | sed 's/://g')
mac=$(hostname -s) mac=$(hostname -s)
file=$mac"@"$now file=$mac"@"$now
#echo "$file"
filename="Installed_$file" filename="Installed_$file"
echo -e "\033[1m🛠 Installed \033[0m" echo -e "\033[1m🛠 Installed \033[0m"
echo '' echo ''
Installed=$(find . -name 'Installed*.md' -maxdepth 1) Installed=$(find $chemin -name 'Installed*.md' -maxdepth 1)
if [ -n "$Installed" ]; then if [ -n "$Installed" ]; then
echo -e "A file \033[93mInstalled*.md\033[0m already exist! We remove it." echo -e "A file \033[93mInstalled*.md\033[0m already exist! We remove it."
a=$(echo "$Installed" | xargs rm) a=$(echo "$Installed" | xargs rm)
fi fi
if [ -f Brewfile ]; then if [ -f $chemin/Brewfile ]; then
echo -e "The \033[93mBrewfile\033[0m already exist! We rename it." echo -e "The \033[93mBrewfile\033[0m already exist! We rename it."
bf=$(find . -name 'Brewfile_*' -maxdepth 1 | xargs rm) find $chemin -name 'Brewfile_*' -maxdepth 1 -print0 | xargs rm
d=$(date -r Brewfile "+%m-%d-%Y_%H:%M:%S") d=$(date -r $chemin/Brewfile "+%d-%m-%Y_%H:%M:%S")
mv Brewfile "Brewfile_$mac@$d" mv "$chemin/Brewfile" "$chemin/Brewfile_$mac@$d"
fi fi
echo '# Apps, package, scripts installed:' > Installed.md {
echo "<u>"$mac"@"$now"</u>" >> Installed.md echo '# Apps, package, scripts installed:'
echo '' >> Installed.md echo "*$mac@$now*"
echo ''
echo '[TOC]' >> Installed.md echo '[TOC]'
echo '' >> Installed.md echo ''
# Homebrew # Homebrew
echo '## Homebrew' >> Installed.md echo '## 🍺 Homebrew'
echo '' >> Installed.md echo ''
} >> $chemin/Installed.md
echo -e "🍺 Get Homebrew \033[3m\033[93mtap\033[0m list" echo -e "🍺 Get Homebrew \033[3m\033[93mtap\033[0m list"
echo '### Tap:' >> Installed.md echo '### Tap:' >> $chemin/Installed.md
tap=$(brew tap) tap=$(brew tap)
echo "\`\`\`bash" >> Installed.md {
echo "$tap" >> Installed.md echo "\`\`\`bash"
echo "\`\`\`" >> Installed.md echo "$tap"
echo "" >> Installed.md echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
echo -e "🍺 Get Homebrew \033[3m\033[93mpackages\033[0m installed list" echo -e "🍺 Get Homebrew \033[3m\033[93mpackages\033[0m installed list"
echo '### Packages:' >> Installed.md echo '### Packages:' >> $chemin/Installed.md
brew=$(brew list) brew=$(brew list --formula)
echo "\`\`\`bash" >> Installed.md {
echo "$brew" >> Installed.md echo "\`\`\`bash"
echo "\`\`\`" >> Installed.md echo "$brew"
echo "" >> Installed.md echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
echo -e "🍺 Get Homebrew \033[3m\033[93mCask\033[0m installed list" echo -e "🍺 Get Homebrew \033[3m\033[93mCask\033[0m installed list"
echo '### Casks:' >> Installed.md echo '### Casks:' >> $chemin/Installed.md
cask=$(brew cask list) cask=$(brew list --cask)
echo "\`\`\`bash" >> Installed.md {
echo "$cask" >> Installed.md echo "\`\`\`bash"
echo "\`\`\`" >> Installed.md echo "$cask"
echo "" >> Installed.md echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
# liste des apps de l'Appstore installées (nom & numéro) # liste des apps de l'Appstore installées (nom & numéro)
echo -e "🍏 Get mas \033[3m\033[93mApp Store applications\033[0m list" echo -e "🍏 Get mas \033[3m\033[93mApp Store applications\033[0m list"
echo '## mas (Mac App Store)' >> Installed.md echo '## 🍏 mas (Mac App Store)' >> $chemin/Installed.md
echo '' >> Installed.md echo '' >> $chemin/Installed.md
appfrommas=$(mas list | sort -k2) appfrommas=$(mas list | sort -k2)
#echo "$appfrommas" #echo "$appfrommas"
#declare -a appstore #declare -a appstore
echo "\`\`\`bash" >> Installed.md echo "\`\`\`bash" >> $chemin/Installed.md
# todo: trier la liste par nom # todo: trier la liste par nom
while read -r line; do while read -r line; do
number=$(echo "$line" | awk '{print $1}') number=$(echo "$line" | awk '{print $1}')
name=$(echo "$line" | awk -F "(" '{print $1}' | awk {'first = $1; $1=""; print $0'} | sed 's/^ //g') #name=$(echo "$line" | awk -F "(" '{print $1}' | awk {'first = $1; $1=""; print $0'} | sed 's/^ //g')
echo "$name ($number)" >> Installed.md name=$(echo "$line" | awk -F "(" '{print $1}' | awk '{first = $1; $1=""; print $0}' | sed 's/^ //g')
echo "$name ($number)" >> $chemin/Installed.md
#echo " " >> Installed.md #echo " " >> Installed.md
#appstore["$name"]="${number}" #appstore["$name"]="${number}"
done <<< "$appfrommas" done <<< "$appfrommas"
echo "\`\`\`" >> Installed.md {
echo "" >> Installed.md echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
# Extensions PHP PECL # Extensions PHP PECL
echo -e "🐘 Get PECL \033[3m\033[93mPHP extensions\033[0m list" echo -e "🐘 Get PECL \033[3m\033[93mPHP extensions\033[0m list"
echo '## PECL extensions' >> Installed.md echo '## 🐘 PECL extensions' >> $chemin/Installed.md
echo '' >> Installed.md echo '' >> $chemin/Installed.md
ext_pecl=$(pecl list | sed '1,3d' | awk '{print $1}') ext_pecl=$(pecl list | sed '1,3d' | awk '{print $1}')
echo "\`\`\`bash" >> Installed.md {
echo "$ext_pecl" >> Installed.md echo "\`\`\`bash"
echo "\`\`\`" >> Installed.md echo "$ext_pecl"
echo "" >> Installed.md echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
# Python packages (pip) # Python packages (pip)
echo -e "🐍 Get pip \033[3m\033[93mPython 3 packages\033[0m installed list" echo -e "🐍 Get pip \033[3m\033[93mPython 3 packages\033[0m installed list"
echo '## Python packages' >> Installed.md echo '## 🐍 Python packages' >> $chemin/Installed.md
echo '' >> Installed.md echo '' >> $chemin/Installed.md
pip_packages=$($version list | sed '1,2d' | awk '{print $1}')
echo "\`\`\`bash" >> Installed.md
echo "$pip_packages" >> Installed.md
echo "\`\`\`" >> Installed.md
echo '' >> Installed.md
pip_packages=$($pip_version list | sed '1,2d' | awk '{print $1}')
{
echo "\`\`\`bash"
echo "$pip_packages"
echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
# atom # atom
echo -e "⚛️ Get \033[3m\033[93mAtom editor packages\033[0m installed list" if [ "$apm" = "true" ]; then
echo '## Atom packages' >> Installed.md echo -e "⚛️ Get \033[3m\033[93mAtom editor packages\033[0m installed list"
echo '' >> Installed.md atom=$(apm list | grep 'Community Packages' -A 100 | sed '1,1d')
{
atom=$(apm list | grep 'Community Packages' -A 100 | sed '1,1d') echo '## ⚛️ Atom packages'
echo ''
echo "\`\`\`bash" >> Installed.md echo "\`\`\`bash"
while read -r line; do
a=$(echo "$line" | awk -F "@" '{print $1}' | awk '{print $2}' )
#atom_pkg=${a:4}
echo "$a" >> Installed.md
done <<< "$atom"
echo "\`\`\`" >> Installed.md
echo '' >> Installed.md
while read -r line; do
a=$(echo "$line" | awk -F "@" '{print $1}' | awk '{print $2}' )
#atom_pkg=${a:4}
echo "$a"
done <<< "$atom"
echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
fi
# Node.js packages (npm) # Node.js packages (npm)
echo '## Node.js packages' >> Installed.md
echo '' >> Installed.md
echo -e "🌿 Get npm \033[3m\033[93m node global packages\033[0m installed scripts" echo -e "🌿 Get npm \033[3m\033[93m node global packages\033[0m installed scripts"
echo '### Global:' >> Installed.md pkg_global_npm=$(npm list -g --depth=0 --silent | sed '1d' | awk '{print $2}' | awk -F "@" '{print $1}')
pkg_global_npm=$(npm list -g --depth=0 --silent | sed '1,2d' | awk '{print $2}' | awk -F "@" '{print $1}') {
echo "\`\`\`bash" >> Installed.md echo '## 🌿 Node.js packages'
echo "$pkg_global_npm" >> Installed.md echo ''
echo "\`\`\`" >> Installed.md
echo '### Global:'
echo "\`\`\`bash"
echo "$pkg_global_npm"
echo "\`\`\`"
} >> $chemin/Installed.md
#echo "$local_path"
if [ -d "$local_path" ]; then if [ -d "$local_path" ]; then
cd $local_path cd "$local_path" || exit
echo -e "🌿 Get npm \033[3m\033[93m node local packages\033[0m installed scripts" echo -e "🌿 Get npm \033[3m\033[93m node local packages\033[0m installed scripts"
echo '### Local:' >> "$chemin/Installed.md" echo '### Local:' >> "$chemin/Installed.md"
pkg_local=$(npm ls | sed '1,1d' | grep -v 'deduped') pkg_local=$(npm ls | sed '1d' | grep -v 'deduped')
echo "\`\`\`bash" >> "$chemin/Installed.md" {
echo "\`\`\`bash"
while read -r line; do while read -r line; do
a=$(echo "$line" | awk -F "@" '{print $1}') pkg_local_npm=$(echo "$line" | sed 's/[│ └──├┬]//g' | awk -F "@" '{print $1}')
pkg_local_npm=${a:4} echo "$pkg_local_npm"
echo "$pkg_local_npm" >> "$chemin/Installed.md"
done <<< "$pkg_local" done <<< "$pkg_local"
echo "\`\`\`" >> "$chemin/Installed.md" echo "\`\`\`"
} >> "$chemin/Installed.md"
cd $chemin
cd "$chemin" || exit
fi fi
echo "" >> Installed.md echo "" >> $chemin/Installed.md
# gem
echo -e "💍 Get \033[3m\033[93mgem\033[0m installed list"
gems=$(gem list --no-versions)
{
echo '## 💍 Gem packages'
echo ''
echo "\`\`\`bash"
while read -r line; do
a=$(echo "$line")
echo "$a"
done <<< "$gems"
echo "\`\`\`"
echo ""
echo ''
} >> $chemin/Installed.md
echo '' echo ''
@@ -189,13 +238,21 @@ echo ''
echo -e "🍺 Create a \033[3m\033[93mBrewfile\033[0m:" echo -e "🍺 Create a \033[3m\033[93mBrewfile\033[0m:"
echo "list all of the installed brew packages, cask applications, and Mac App Store applications currently on the machine..." echo "list all of the installed brew packages, cask applications, and Mac App Store applications currently on the machine..."
brew bundle dump brew bundle dump
echo '' echo -e "To restore everything listed in that file, run \033[3m\033[93m'brew bundle'\033[0m in folder that contains the Brewfile."
echo -e "To restore everything listed in that file, run \033[3m\033[93m'$ brew bundle'\033[0m in folder that contains the Brewfile."
echo '' echo ''
iconv -f macroman -t utf-8 Installed.md > Installed-utf8.md mv $chemin/Brewfile "$chemin/Brewfile_$file".md
#iconv -s -f macroman -t utf-8 Installed.md y=$(find . -type f -name 'Brewfile*' -mtime +10 -maxdepth 1)
mv Installed-utf8.md "$filename".md if [ -n "$y" ]; then
rm Installed.md nb=$(echo "$y" | wc -l)
echo "$y" | xargs rm
[ $? ] && echo -e "\033[93m$nb Brewfile_*\033[0m files removed !"
fi
open "$filename".md #iconv -f macroman -t utf-8 Installed.md > Installed-utf8.md
#mv Installed-utf8.md "$filename".md
#rm Installed.md
mv $chemin/Installed.md "$chemin/$filename".md
open "$chemin/$filename".md

1
plugins.d/kymsu.pref Normal file
View File

@@ -0,0 +1 @@
last.update=1658067929

View File

@@ -3,47 +3,125 @@
# Mac Appstore plugin for KYMSU # Mac Appstore plugin for KYMSU
# https://github.com/welcoMattic/kymsu # https://github.com/welcoMattic/kymsu
echo -e "\033[1m🍏 Mac App Store updates come fast as lightning \033[0m"
# No distract mode (no user interaction) # No distract mode (no user interaction)
no_distract=false [[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
if [[ $1 == "--nodistract" ]]; then testing=1
no_distract=true
fi italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bold="\033[1m"
bold_under="\033[1;4m"
redbox="\033[1;41m"
redbold="\033[1;31m"
red="\033[31m"
yellow="\033[33m"
reset="\033[0m"
echo -e "${bold}🍏 Mac App Store updates come fast as lightning ${reset}"
echo ""
echo -e "mas : https://github.com/mas-cli/mas"
command -v mas >/dev/null 2>&1 || { echo -e "\n${bold}mas${reset} is not installed.\n\nRun ${italic}'brew install mas'${reset} for install." && exit 1; }
latest_v=$(curl -s https://api.github.com/repos/mas-cli/mas/releases/latest | jq -j '.tag_name')
current_v=$(mas version)
echo -e "Current version: $current_v"
echo -e "Latest version: $latest_v"
# On teste si mas est installé # On teste si mas est installé
if hash mas 2>/dev/null; then if hash mas 2>/dev/null; then
massy=$(mas outdated) massy=$(mas outdated)
echo "" echo ""
echo "$massy" #echo "$massy"
nomoreatstore=$(echo "$massy" | grep "not found in store")
outdated=$(echo "$massy" | grep -v "not found in store")
if [ -n "$outdated" ]; then
echo -e "${underline}Availables updates:${reset}"
echo "$outdated" | awk '{ $1=""; print}'
echo "--"
#echo "$outdated" | awk '{ $1=""; $3=""; print}'
#if [ -n "$massy" ]; then
if [ ! -z "$(mas outdated)" ]; then
echo -e "\033[4mAvailables updates:\033[0m"
echo "$massy" | cut -d " " -f2-5
echo "" echo ""
if [ "$no_distract" = false ]; then #if [ "$no_distract" = false ]
if [[ $testing -ne 1 ]]; then
#if (( $testing == 1 )); then
a=$(echo -e "Do you wanna run \033[1mmas upgrade\033[0m ? (y/n)") #a=$(echo -e "Do you wanna run \033[1mmas upgrade${reset} ? (y/n)")
#read -pr "$a" choice
a=$(echo -e "Do you wanna run \033[1mmas upgrade${reset} ? (y/n) ")
read -p "$a" choice read -p "$a" choice
case "$choice" in
y|Y|o ) mas upgrade;;
n|N ) echo "Ok, let's continue";;
* ) echo "invalid";;
esac
else if [ "$choice" == "y" ] || [ "$choice" == "Y" ] || [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
mas upgrade
#case "$choice" in
# y|Y|o ) mas upgrade;;
# n|N ) echo "Ok, let's continue";;
# * ) echo "invalid";;
#esac
while IFS=\n read -r line
#for line in "$outdated"
do
echo "$line"
idendifiant=$(echo "$line" | awk '{print $1}')
nom=$(echo "$line" | awk -F "(" '{print $1}' | awk '{ $1=""; print}' | xargs)
nom_version=$(echo "$line" | awk '{ $1=""; print}')
version=$(echo "$line" | awk -F "(" '{print $2}' | sed 's/.$//')
echo "$idendifiant - $nom - $version"
#echo "$version"
#b=$(echo -e "Do you wanna run ${bold}mas upgrade $nom ${reset} ${italic}$version${reset} ? (y/n) ")
#read -p "$b" upg
#echo "-- $upg --"
#if [ "$upg" == "y" ] || [ "$upg" == "Y" ]; then
# mas upgrade "$idendifiant"
#fi
echo "-- fin --"
#echo "$line" | awk '{print $1}' | xargs -p -n 1 mas upgrade
done <<< "$outdated"
#done
else
echo -e "OK, let's continue..."
fi
#else
# mas upgrade
fi fi
else else
echo -e "\033[4mNo availables mas updates.\033[0m" echo -e "${italic}No availables mas updates.${reset}"
fi fi
if [ -n "$nomoreatstore" ]; then
echo -e "\n${underline}Apps no more in App Store:${reset}"
while IFS= read -r line
do
id=$(echo "$line" | awk '{print $3}')
#name=$(echo "$line" | awk '{print $12}' | sed 's/.$//')
name=$(echo "$line" | awk -F "identify" '{print $2}' | sed 's/.$//' | xargs)
echo -e "$name ($id)"
done <<< "$nomoreatstore"
fi
else else
echo "Please install mas: brew install mas" echo -e "Please install mas: ${italic}brew install mas${reset}"
fi fi
echo "" echo ""

438
plugins.d/nodejs.sh Executable file
View File

@@ -0,0 +1,438 @@
#!/usr/bin/env bash
# npm plugin for KYMSU (install local package)
# https://github.com/welcoMattic/kymsu
#
#########################################
#
# Settings:
# Display info on updated pakages / casks
display_info=true
# No distract mode (no user interaction)
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
# Set ls_color to '' for output nvm list in default colors, else '--no-colors'
# ls_color='--no-colors'
# ls_color='BrGcm' for custom colors
# export NVM_COLORS='BrGcm' in .zshrc for persistant custom colors
# Set doctor=true to run 'npm doctor' and 'npm cache verify' each time
doctor=true
# Set update_node to true to update node.
update_node=true
# Local install:
# run 'npm init' in local_path to create package.json
local_path=$HOME/Sites/
# Add module to the do_not_update array for prevent to update.
#declare -a do_not_update=()
#declare -a do_not_update=("parso" "asgiref")
declare -a do_not_update=("@squoosh/cli")
#########################################
: <<'END_COMMENT'
blabla
END_COMMENT
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
green="\033[1;32m"
bold="\033[1m"
bold_ita="\033[1;3m"
box="\033[1;41m"
redbold="\033[1;31m"
redbox="\033[1;41m"
reset="\033[0m"
upd_nvm() {(
cd "$NVM_DIR"
git fetch --tags origin
git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"
}
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
echo -e "${bold}🌿 npm ${reset}"
echo ""
# version courante de node.js
node_v=$(node -v)
node_ins=$(which node)
echo -e "${underline}🌿 node.js:${reset}"
echo -e " - current version: ${italic}$node_v${reset}"
echo -e " - install path: ${italic}$node_ins${reset}"
# version courante de npm
npm_v=$(npm -v)
npm_ins=$(which npm)
old_npm="$npm_v"
echo -e "\n${underline}🌿 npm:${reset}"
echo -e " - current version: ${italic}$npm_v${reset}"
echo -e " - install path: ${italic}$npm_ins${reset}"
curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi
# version installée de nvm par Homebrew
# nvm_installed=$(brew info nvm | grep Cellar)
# version actuelle de nvm sur GitHub
version_nvm=$(git ls-remote --tags --refs --sort="v:refname" https://github.com/nvm-sh/nvm.git | tail -n1 | sed 's/.*\///' | sed 's/v//')
# nvm from github
if [ -f "$NVM_DIR/nvm.sh" ]; then
source $NVM_DIR/nvm.sh
# version courante de nvm
nvm_v=$(nvm --version)
echo -e "\n${underline}🌿 nvm install is:${reset} $NVM_DIR/nvm.sh"
echo " - nvm $nvm_v is installed from https://github.com/nvm-sh/nvm"
if [ -n "$version_nvm" ]; then
if [ "$nvm_v" != "$version_nvm" ]; then
echo "Current nvm version on GitHub: $version_nvm"
echo "Current nvm installed version: $nvm_v"
read -p "Do you want to update nvm from GitHub repo? (y/n)" choice
if [ "$choice" == "y" ]; then
echo "Updating nvm from GitHub..."
#curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v"$version_nvm"/install.sh | bash
upd_nvm
#curl: native on Catalina, wget installed by homebrew
#wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
#curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
fi
fi
fi
node_install=$(nvm list "$ls_color")
echo -e "\n${underline}🌿 node.js${reset} (installed versions): \n$node_install"
# nvm from homebrew
elif [ -f "/usr/local/opt/nvm/nvm.sh" ]; then
source $(brew --prefix nvm)/nvm.sh
# version courante de nvm
nvm_v=$(nvm --version)
echo -e "\n${underline}🌿 nvm install is:${reset} /usr/local/opt/nvm/nvm.sh"
echo "nvm $nvm_v is installed from homebrew"
if [ "$nvm_v" != "$version_nvm" ]; then
echo "Current nvm version on GitHub: $version_nvm"
echo "Current nvm installed version: $nvm_v"
echo -e "nvm is outdated ! You should run \033[1;3mbrew update && brew upgrade nvm\033[0m"
echo -e "or run \033[1;3mKymsu's homebrew.sh script.${reset}"
fi
node_install=$(nvm list "$ls_color")
echo -e "\n${underline}🌿 node.js${reset} (installed versions): \n$node_install"
fi
echo -e "${italic}Note:"
echo -e "N/A: version \"10.18.0 -> N/A\" is not yet installed."
echo -e "You need to run \"nvm install 10.18.0\" to install it before using it.${reset}"
echo ""
# Do not update packages
if (( ${#do_not_update[@]} )); then
nbp=${#do_not_update[*]}
echo -e "${underline}🌿 List of${reset} ${redbox} $nbp ${reset} ${underline}'do not update' packages:${reset}"
echo -e "${redbold}${do_not_update[*]}${reset}"
echo -e "To remove package from this list, you need to edit the ${italic}do_not_update${reset} array."
echo ""
fi
##################
# Local packages #
##################
# 1. Create package.json file with 'npm init'
# or copy packagejson in $local_path
# 2. Install node modules with 'npm install' in $local_path\node_modules
# Local folder exist and not empty (modules installed)
#if [ -d "$local_path/node_modules" ] && [ -n "$(ls -A "$local_path/node_modules")" ]; then
if find "$local_path/node_modules" -mindepth 1 -maxdepth 1 | read; then
echo -e "${underline}🌿 Local installed scripts:${reset}"
cd "$local_path" || return
if [ "$display_info" = true ]; then
ll=$(npm ls --long | grep -v 'git$')
x=
while IFS= read -r line
do
if [[ "${line}" =~ "──" ]] || [[ "${line}" =~ "─┬" ]]; then
local_pkg=$(echo "${line}" | awk '{print $2}' | awk -F"@" '{print $1}')
#echo -e "${bold}${line}${reset}"
info_pkg=$(npm view "$local_pkg" | sed -n '3,4p')
q=$(echo "$info_pkg" | sed "s/^/| /")
#echo -e "$q"
x+="${bold}${line}${reset}\n"
x+="$q\n"
else
#echo -e "${line}"
x+="${line}\n"
fi
done <<< "$ll"
else
npm ls
fi
echo -e "$x"
echo -e "\n${underline}🌿 Search for local packages update...${reset}\n"
outdated=$(npm outdated --long | sed '1d')
if [ -n "$outdated" ]; then
nb_update=$(echo "outdated" | wc -l | xargs)
a="available package update"
array=($a)
[ "$nb_update" -gt 1 ] && echo -e "${box} $nb_update ${reset} ${array[@]/%/s}:\n" || echo -e "${box} $nb_update ${reset} ${array[@]}:\n"
echo -e "\n${underline}🌿 Updating local packages...${reset}\n"
while IFS= read -r i
do
package=$(echo "$i" | awk '{print $1}')
current=$(echo "$i" | awk '{print $2}')
wanted=$(echo "$i" | awk '{print $3}')
latest=$(echo "$i" | awk '{print $4}')
j=$(echo "$current" | awk -F "." '{print $1}')
k=$(echo "$latest" | awk -F "." '{print $1}')
if [[ ! " ${do_not_update[@]} " =~ " ${package} " ]]; then
# Update major version 1.x.y to 2.x.y
if [ $current = $wanted ] && [ "$j" -lt "$k" ]; then
if [ "$no_distract" = false ]; then
echo "$package@latest" | xargs -p npm install
else
echo "$package@latest" | xargs npm install
#npm install "$package@latest"
fi
# Update minor or patch version
else
if [ "$no_distract" = false ]; then
echo "$package" | xargs -p npm update
else
echo "$package" | xargs npm update
fi
fi
else
echo -e "${redbold}$package is pinned to version $current !${reset} Don't update !"
fi
done <<< "$outdated"
else
echo -e "${italic}No local packages updates.${reset}"
fi
fi
echo ""
###################
# Global packages #
###################
echo -e "${underline}🌿 Global installed scripts:${reset}"
if [ "$display_info" = true ]; then
lg=$(npm list --location=global --depth=0 --long | grep -v 'git$')
x=""
q=""
while IFS= read -r line
do
if [[ "${line}" =~ "──" ]]; then
#echo -e "${bold}${line}${reset}"
global_pkg=$(echo "${line}" | awk '{print $2}' | awk -F"@" '{print $1}')
#echo -e "${bold}${line}${reset}"
info_pkg=$(npm view "$global_pkg" | sed -n '4p')
q=$(echo "$info_pkg" | sed "s/^/| /")
#echo "$q"
x+="${bold}${line}${reset}\n"
elif [[ ${#line} > 2 ]]; then
#echo -e "${line}"
x+="${line}\n"
x+="$q\n"
fi
done <<< "$lg"
else
npm list --location=global --depth=0
fi
echo -e "$x"
#Packages update
echo -e "\n${underline}🌿 Search for global packages update...${reset}\n"
glong_outdated=$(npm outdated --location=global --long | sed '1d')
if [ -n "$glong_outdated" ]; then
nb_update_global=$(echo "$glong_outdated" | wc -l | xargs)
a="available package update"
array=($a)
[ "$nb_update_global" -gt 1 ] && echo -e "${box} $nb_update_global ${reset} ${array[@]/%/s}:\n" || echo -e "${box} $nb_update_global ${reset} ${array[@]}:\n"
echo -e "$glong_outdated\n"
echo -e "\n${underline}🌿 Updating global packages...${reset}\n"
# Disable: Would you like to share anonymous usage data with the Angular Team at Google ?
if [[ " $glong_outdated " =~ "angular" ]]; then
export NG_CLI_ANALYTICS="false"
fi
# 15 packages are looking for funding
while IFS= read -r line
do
pkg=$(echo "$line" | awk '{print $1}')
curr=$(echo "$line" | awk '{print $2}')
vers=$(echo "$line" | awk '{print $4}')
outdated="$pkg@$vers"
if [[ ! " ${do_not_update[@]} " =~ " ${pkg} " ]]; then
# TEST
#version=$(echo "$line" | awk '{print $1 "@" $4}')
#echo "$version"
# /test
if [ "$no_distract" = false ]; then
echo "$outdated" | xargs -p -n 1 npm --location=global install
echo ""
else
echo "$outdated" | xargs -n 1 npm --location=global install
echo ""
fi
else
echo -e "${redbold}$pkg is pinned to version $curr !${reset} Don't update !"
fi
done <<< "$glong_outdated"
else
echo -e "${italic}No global packages updates.${reset}"
fi
echo ""
###############
# Maintenance #
###############
if [ "$doctor" = true ]; then
echo -e "${underline}🌿 The Doc is checking that everything is ok.${reset}\n"
#npm doctor
doc=$(cd "$local_path" && npm doctor)
while IFS= read -r line
do
if [[ "${line}" =~ "Not ok" ]]; then
echo -e "${red}${line}${reset}"
elif [[ "${line}" =~ "Ok" ]]; then
echo -e "${green}${line}${reset}"
else
echo -e "${line}"
fi
done <<< "$doc"
#echo -e "$doc\n"
# search not ok => red
#npm_v=$(echo "$doc" | grep 'npm -v')
#node_v=$(echo "$doc" | grep 'node -v')
npm_v=$(echo "$doc" | grep -A2 'Checking npm version')
node_v=$(echo "$doc" | grep -A2 'Checking node version')
if [[ " $node_v " =~ "Not ok" ]]; then
no=$(echo "$node_v" | sed -n '$p')
new_node=$(echo "$no" | awk '{print $3}' | sed 's/^.//')
old_node=$(echo "$no" | awk '{print $5}' | sed 's/.//;s/.$//')
if [ "$new_node" != "$old_node" ] && [ "$update_node" = true ]; then
b=$(echo -e "\nCurrent node: v$old_node. Update ${bold}node${reset} to ${bold}v$new_node${reset} [y/n] ? ")
read -e -p "$b" rep2
if [ "$rep2" == "y" ] || [ "$rep2" == "Y" ]; then
. $HOME/.nvm/nvm.sh
echo -e "\n${bold}Updating node to v$new_node...${reset}"
nvm install "$new_node"
echo -e "\n${bold}Updating npm...${reset}"
npm --location=global install npm
#
nvm use $new_node
echo -e "\n${bold}Reinstall packages from v$old_node...${reset}"
nvm reinstall-packages "$old_node"
fi
fi
fi
if [[ " $npm_v " =~ "Not ok" ]]; then
np=$(grep -o -E "v([0-9]{1,2}\.){2}[0-9]{1,2}" <<< "$npm_v")
new_npm=$(echo "${np:1}") # 10.7.0
if [ "$new_npm" != "$old_npm" ]; then
echo -e "${underline}\nUdpate available for npm.${reset}"
echo -e " - Current: ${red}v$old_npm${reset}"
echo -e " - Update: ${green}v$new_npm${reset}"
echo -e "You should run:"
echo -e " - ${bold}npm --location=global install npm${reset}"
fi
fi
echo ""
echo "Troubleshooting:"
echo "https://github.com/nvm-sh/nvm#macos-troubleshooting"
echo ""
echo -e "🔍 Verifying npm cache\n"
npm cache verify
echo ""
fi
echo ""

View File

@@ -1,148 +0,0 @@
#!/usr/bin/env bash
# npm plugin for KYMSU (install local package)
# https://github.com/welcoMattic/kymsu
# Fixing npm On Mac OS X for Homebrew Users
# https://gist.github.com/rcugut/c7abd2a425bb65da3c61d8341cd4b02d
# https://gist.github.com/DanHerbert/9520689
# brew install node
# node -v => 9.11.1
# npm -v => 5.6.0
# npm install -g npm
# npm -v => 5.8.0
# https://github.com/npm/npm/issues/17744
#########################################
#
# Settings:
# No distract mode (no user interaction)
no_distract=false
if [[ $1 == "--nodistract" ]]; then
no_distract=true
fi
# Set doctor=true to run 'npm doctor' and 'npm cache verify' each time
doctor=true
# Local install
local_path=$HOME/Sites/node_modules/
#########################################
echo -e "\033[1m🌿 npm \033[0m"
echo ""
# version courante de node.js
node_v=$(node -v)
echo -e "\033[4m🌿 node.js\033[0m (current version): $node_v"
# version courante de npm
npm_v=$(npm -v)
echo -e "\033[4m🌿 npm\033[0m (current version): $npm_v"
# versions installées de node.js
nvm_installed=$(brew info nvm | grep Cellar)
if [ -f "$NVM_DIR/nvm.sh" ]; then
source $NVM_DIR/nvm.sh
# version courante de nvm
nvm_v=$(nvm --version)
echo -e "\033[4m🌿 nvm install is:\033[0m $NVM_DIR/nvm.sh"
echo "nvm $nvm_v is installed from https://github.com/nvm-sh/nvm"
node_install=$(nvm list)
echo -e "\033[4m🌿 node.js\033[0m (installed versions): \n$node_install"
elif [ -f "/usr/local/opt/nvm/nvm.sh" ]; then
source $(brew --prefix nvm)/nvm.sh
# version courante de nvm
nvm_v=$(nvm --version)
echo -e "\033[4m🌿 nvm install is:\033[0m /usr/local/opt/nvm/nvm.sh"
echo "nvm $nvm_v is installed from homebrew"
node_install=$(nvm list)
echo -e "\033[4m🌿 node.js\033[0m (installed versions): \n$node_install"
fi
echo
# Local packages
if [ -d "$local_path" ]; then
cd $local_path
echo -e "\033[4m🌿 Local installed scripts:\033[0m"
npm ls
outdated=$(npm outdated)
if [ -n "$outdated" ]; then
echo "$outdated"
echo "$outdated" | awk '{print $1}' | xargs npm update
else
echo -e "\033[4mNo local packages updates.\033[0m"
fi
fi
echo ""
# Global packages
echo -e "\033[4m🌿 Global installed scripts:\033[0m"
npm list -g --depth=0
g_outdated=$(npm outdated -g)
# => npm ERR! Cannot read property 'length' of undefined -> https://stackoverflow.com/questions/55172700/npm-outdated-g-error-cannot-read-property-length-of-undefined
# /Users/bruno/.nvm/versions/node/v10.16.2/lib/node_modules/npm/lib/outdated.js
# /usr/local/lib/node_modules/npm/lib/outdated.js
# update -> wanted ; install -> latest
if [ -n "$g_outdated" ]; then
if [ "$no_distract" = false ]; then
echo "$g_outdated"
#echo "$g_outdated" | sed '1d' | awk '{print $1}' | xargs -p -n 1 npm install -g
echo "$g_outdated" | sed '1d' | awk '{print $1}' | xargs -p -n 1 npm update -g
else
#echo "$g_outdated" | sed '1d' | awk '{print $1}' | xargs -n 1 npm install -g
echo "$g_outdated" | sed '1d' | awk '{print $1}' | xargs -n 1 npm update -g
fi
else
echo -e "\033[4mNo global packages updates.\033[0m"
fi
echo ""
# Maintenance
if [ "$doctor" = true ]; then
echo "🌿 The Doc is checking that everything is ok."
npm doctor
echo ""
echo "🔍 Verifying npm cache"
npm cache verify
echo ""
fi
#if [[ $1 == "--npm_cleanup" ]]; then
if [[ $1 == "--cleanup" ]]; then
echo "npm cache clean"
# As of npm@5, the npm cache self-heals from corruption issues and data extracted from the cache is guaranteed to be valid.
# If you want to make sure everything is consistent, use 'npm cache verify' instead.
# On the other hand, if you're debugging an issue with the installer, you can use `npm install --cache /tmp/empty-cache` to use a temporary cache instead of nuking the actual one.
# If you're sure you want to delete the entire cache, rerun this command with --force.
if printf '%s\n%s\n' "$(npm --version)" 5.0.0 | sort --version-sort --check=silent; then
echo "🌿 Cleaning npm cache"
npm cache clean
fi
echo ""
fi
echo ""

View File

@@ -10,10 +10,25 @@
# Settings: # Settings:
# No distract mode (no user interaction) # No distract mode (no user interaction)
no_distract=false [[ $@ =~ "--nodistract" ]] && no_distract=true || no_distract=false
#
# Display PHP informations
display_info=true
# Open PHP info in Safari
php_info=false
# #
######################################### #########################################
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
blue="\033[34m"
bold="\033[1m"
box="\033[1;41m"
reset="\033[0m"
notification() { notification() {
sound="Basso" sound="Basso"
title="Homebrew" title="Homebrew"
@@ -27,76 +42,186 @@ notification() {
} }
if [[ $1 == "--nodistract" ]]; then echo -e "${bold}🐘 pecl ${reset}"
no_distract=true
echo ""
echo -e "${bold}❗️ plugin en test (beta) ${reset}"
echo ""
# Airbook
# echo $(brew --prefix)
#/opt/homebrew
# which -a php
#/opt/homebrew/bin/php
#/usr/bin/php
#/opt/homebrew/opt/php
# php --info | grep 'PHP Version'
#PHP Version => 7.3.24-(to be removed in future macOS)
#PHP Version => 7.3.24-(to be removed in future macOS)
# Silberbook
# echo $(brew --prefix)
#/usr/local
# which -a php
#/usr/local/bin/php
#/usr/bin/php
#/usr/local/opt/php
version=$(php --info | grep 'PHP Version' | sed -n '1p' | awk -F" " '{print $NF}')
v=${version:0:3}
echo -e "${ita_under}${blue}Current PHP version:${reset} ${bold}$version${reset}\n"
latest="8.2"
versions=("7.4" "8.0" "8.1" "8.3" "$latest")
php_installed=$(ls -1 $(brew --prefix)/opt/ | grep php@)
echo -e "${ita_under}${blue}Installed PHP versions:${reset}"
echo -e "$php_installed\n"
if [ "$v" == "$latest" ] ; then
php_path=$(brew --prefix)/opt/php/bin
else
php_path=$(brew --prefix)/opt/php@$v/bin
fi
#echo "$php_path"
pecl version
curl -Is https://www.apple.com | head -1 | grep 200
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi fi
echo -e "\033[1m🐘 pecl \033[0m" # Note that all public channels can be synced using "update-channels"
echo -e "\n${ita_under}${blue}Updating all channels...${reset}"
pecl update-channels
echo "" #pecl channel-update pecl.php.net
#pecl channel-update pear.php.net
# List Installed Packages In The Default Channel
#pecl_list=$($php_path/pecl list)
# List installed packages from all channels
pecl_list=$(pecl list -a)
echo -e "\n$pecl_list\n"
# Installation imagick:
# https://github.com/Imagick/imagick
#git clone https://github.com/Imagick/imagick
#cd imagick
#phpize && ./configure
#make
#make install
echo -e "\033[1m❗ plugin en test (beta) \033[0m"
echo ""
pecl_upgrade=$(pecl list-upgrades) pecl_upgrade=$(pecl list-upgrades)
if [ -n "$pecl_upgrade" ]; then if [ -n "$pecl_upgrade" ]; then
echo -e "\033[4mExtensions update:\033[0m" echo -e "${ita_under}${blue}Extensions update:${reset}"
echo "" echo ""
echo "$pecl_upgrade" echo "$pecl_upgrade"
echo "" echo ""
available=$(echo "$pecl_upgrade" | grep -v 'No upgrades available' | grep 'kB') available=$(echo "$pecl_upgrade" | grep -v 'No upgrades available' | grep 'kB')
#echo "available: $available"
if [ -n "$available" ]; then if [ -n "$available" ]; then
while read ligne while read ligne
do do
#echo "$ligne" #echo "$ligne"
# Channel pear.php.net
a=$(echo "$ligne" | grep "pear") a=$(echo "$ligne" | grep "pear")
#echo "a: $a"
if [ -n "$a" ]; then if [ -n "$a" ]; then
#pecl channel-update pear.php.net
pecl channel-update pear.php.net pecl channel-update pear.php.net
else fi
# Channel pecl.php.net
b=$(echo "$ligne" | grep "pecl")
#echo "b: $b"
if [ -n "$b" ]; then
#pecl channel-update pecl.php.net
pecl channel-update pecl.php.net
#(pecl or doc) update available #(pecl or doc) update available
b=$(echo "$ligne" | awk '{print $2}') b=$(echo "$ligne" | awk '{print $2}')
#pecl info "$b"
pecl info "$b" pecl info "$b"
echo "" echo ""
if [ "$no_distract" = false ]; then if [ "$no_distract" = false ]; then
#echo "$b" | xargs -p -n 1 pecl upgrade
echo "$b" | xargs -p -n 1 pecl upgrade echo "$b" | xargs -p -n 1 pecl upgrade
php_info=true
else else
#echo "$b" | xargs -n 1 pecl upgrade
echo "$b" | xargs -n 1 pecl upgrade echo "$b" | xargs -n 1 pecl upgrade
php_info=true
fi fi
fi fi
echo ""
done <<< "$available" done <<< "$available"
fi fi
fi fi
# si modif des extensions, les .ini dans conf.d/ ne sont pas modifiés, juste le php.ini # si modif des extensions, les .ini dans conf.d/ ne sont pas modifiés, juste le php.ini
# php.ini a été modifié il y a moins de 5mn # php.ini a été modifié il y a moins de 5mn
v_php=$(php --info | grep -E 'usr.*ini') #v_php=$(php --info | grep -E 'usr.*ini')
v_php=$(php --ini)
conf_php=$(echo "$v_php" | grep 'Loaded Configuration File' | awk '{print $NF}') conf_php=$(echo "$v_php" | grep 'Loaded Configuration File' | awk '{print $NF}')
dir=$(dirname $conf_php) dir=$(dirname "$conf_php")
name=$(basename $conf_php) name=$(basename "$conf_php")
notif2="$conf_php was modified in the last 5 minutes" notif2="$conf_php was modified in the last 5 minutes"
test=$(find $dir -name "$name" -mmin -500 -maxdepth 1) if [ "$display_info" = true ]; then
echo -e "${ita_under}${blue}PHP ini files:${reset}"
echo -e "php.ini path: ${bold}$conf_php${reset}"
echo -e "Additionnals ini files:\n$(ls $dir/conf.d/*.ini)"
echo -e "\n${ita_under}${blue}To change php version:${reset} ${italic}$ sphp 7.4${reset}"
echo -e " ${italic}•mod-php: https://gist.github.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2${reset}"
echo -e " ${italic}•php-fpm: https://gist.github.com/rozsival/10289d1e2006c68009ace0478306ecd2${reset}\n"
if [ ! -z $test ]; then #[ "$php_info" = true ] && echo -e "Opening PHP info in Safari..." && open "https://$host.local/info.php"
echo -e "\033[1;31m❗ $notif2\033[0m" if [ "$php_info" = true ]; then
#host=$(hostname)
echo -e "Some extensions have been updated. Let's opening PHP info in Safari..."
open "https://$(hostname).local/info.php"
fi
fi
test=$(find "$dir" -maxdepth 1 -name "$name" -mmin -5)
if [ -n "$test" ]; then
echo -e "${red}❗️ $notif2${reset}"
notification "$notif2" notification "$notif2"
echo "" echo ""
a=$(echo -e "Do you want to edit \033[1m$conf_php\033[0m file ? (y/n)") if [ -n "$available" ]; then
read -p "$a" choice a=$(echo -e "Do you want to edit ${bold}$conf_php${reset} file ? (y/n)")
if [ "$choice" == "y" ]; then read -p "$a" choice
$EDITOR $conf_php if [ "$choice" == "y" ]; then
$EDITOR "$conf_php"
fi
fi fi
fi fi
echo "" echo ""
echo "" echo ""
# WARNING: channel "pear.php.net" has updated its protocols,
# use "pecl channel-update pear.php.net" to update

106
plugins.d/perl.sh Executable file
View File

@@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Perl plugin for KYMSU
# https://github.com/welcoMattic/kymsu
###############################################################################################
#
# Settings:
# Display info on updated pakages
display_info=true
# No distract mode (no user interaction)
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
# Also add module for prevent to update it.
declare -a do_not_update=('')
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
bold_ita="\033[1;3m"
box="\033[1;41m"
redbold="\033[1;31m"
redbox="\033[1;41m"
reset="\033[0m"
echo -e "${bold}🐪 Perl ${reset}"
echo
perl_app=$(which perl)
perl_v=$(perl -v | sed -n '2p')
echo -e "\033[4mPerl:\033[0m $perl_app"
echo -e "\033[4mVersion:\033[0m $perl_v"
echo ""
module="App::cpanoutdated"
if ! perl -M$module -e 1 2>/dev/null; then
echo -e "\033[4mRequierement:\033[0m module $module is not installed"
a=$(echo -e "Do you wanna run \033[1mcpan -i "$module"\033[0m ? (y/n)")
read -p "$a" choice
if [ "$choice" == "y" ]; then
cpan -i $module
install_ok=true
else
echo "Bye"
exit
fi
else
install_ok=true
fi
curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi
if [ "$install_ok" == "true" ]; then
# install with cpan
# % cpan-outdated | xargs cpan -i
# install with cpanm
# % cpan-outdated | cpanm
# % cpan-outdated -p | cpanm
outdated=$(cpan-outdated -p)
nb=$(echo $outdated | wc -w)
a=$(echo -e "Do you wanna update\033[1m "$nb" outdated\033[0m modules ? (y/n/a)")
read -p "$a" choice
if [ "$choice" == "y" ] || [ "$choice" == "Y" ] || [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
for i in $outdated
do
FOUND=`echo ${do_not_update[*]} | grep "$i"`
if [ "${FOUND}" = "" ]; then
echo ""
if [ "$display_info" = true ]; then
cpan -D "$i"
fi
echo -e "\033[1m"
if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
echo "$i" | awk '{print $1}' | xargs -p -n 1 cpan -i
elif [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
echo "$i" | awk '{print $1}' | xargs -n 1 cpan -i
fi
echo -e "\033[0m"
#echo ""
fi
done
else
echo "Bye"
exit
fi
fi

80
plugins.d/perlbrew.sh Executable file
View File

@@ -0,0 +1,80 @@
#!/usr/bin/env bash
#Display useful information about the perlbrew installation.
#If a module is given the version and location of the module is displayed.
perlbrew info
<<COMMENT
Current perl:
Name: perl-5.30.1
Path: /Users/bruno/perl5/perlbrew/perls/perl-5.30.1/bin/perl
Config: -de -Dprefix=/Users/bruno/perl5/perlbrew/perls/perl-5.30.1 -Aeval:scriptdir=/Users/bruno/perl5/perlbrew/perls/perl-5.30.1/bin
Compiled at: Dec 16 2019 08:44:12
perlbrew:
version: 0.87
ENV:
PERLBREW_ROOT: /Users/bruno/perl5/perlbrew
PERLBREW_HOME: /Users/bruno/perl5/perlbrew
PERLBREW_PATH: /Users/bruno/perl5/perlbrew/bin:/Users/bruno/perl5/perlbrew/perls/perl-5.30.1/bin
PERLBREW_MANPATH: /Users/bruno/perl5/perlbrew/perls/perl-5.30.1/man
COMMENT
# List the recently available versions of perl on CPAN.
perlbrew available
# Removes all previously downloaded Perl tarballs and build directories.
perlbrew clean
# Show the version of perlbrew.
perlbrew version
<<COMMENT
# Build and install the given versions of perl.
perlbrew install [options] stable
perlbrew install [options] blead
perlbrew install [options] <version>
# https://github.com/perl11/cperl
perlbrew install [options] cperl-<version>
Options for "install" command:
-f --force Force installation
-j $n Parallel building and testing. ex. C<perlbrew install -j 5 perl-5.14.2>
-n --notest Skip testing
--switch Automatically switch to this Perl once successfully
installed, as if with `perlbrew switch <version>`
--as Install the given version of perl by a name.
ex. C<perlbrew install perl-5.6.2 --as legacy-perl>
--noman Skip installation of manpages
--thread Build perl with usethreads enabled
--multi Build perl with usemultiplicity enabled
--64int Build perl with use64bitint enabled
--64all Build perl with use64bitall enabled
--ld Build perl with uselongdouble enabled
--debug Build perl with DEBUGGING enabled
--clang Build perl using the clang compiler
--no-patchperl
Skip calling patchperl
-D,-U,-A Switches passed to perl Configure script.
ex. C<perlbrew install perl-5.10.1 -D usemymalloc -U versiononly>
--destdir $path
Install perl as per 'make install DESTDIR=$path'
--sitecustomize $filename
Specify a file to be installed as sitecustomize.pl
# Uninstalls the given perl installation.
perlbrew uninstall <name>
COMMENT

View File

@@ -3,116 +3,200 @@
# pip plugin for KYMSU # pip plugin for KYMSU
# https://github.com/welcoMattic/kymsu # https://github.com/welcoMattic/kymsu
# upgrade pip:
# python -m pip install --upgrade pip
# Configurer pip3:
# pip config edit
######################################### #########################################
# #
# Settings: # Settings:
# Display info on updated pakages / casks
#[[ $@ =~ "--info" ]] && display_info=false || display_info=true
display_info=true
# No distract mode (no user interaction)
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
# Display dependancies on updated pakages / casks
#[[ $@ =~ "--depend" ]] && display_depend=false || display_depend=true
display_depend=true
#version: pip ou pip3 #version: pip ou pip3
version=pip3 # pip: python3.8 - pip3: python3.9
pip_version=pip3
#user: "" or "--user" #user: "" or "--user"
user="" user=""
# No distract mode
no_distract=false # Add module to the do_not_update array for prevent to update.
#add module to do_not_update array #declare -a do_not_update=()
declare -a do_not_update=() #declare -a do_not_update=("parso" "asgiref")
declare -a do_not_update=("pyee")
# #
######################################### #########################################
if [[ $1 == "--nodistract" ]]; then : <<'END_COMMENT'
no_distract=true blabla
END_COMMENT
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bold="\033[1m"
bold_under="\033[1;4m"
redbox="\033[1;41m"
redbold="\033[1;31m"
red="\033[31m"
yellow="\033[33m"
reset="\033[0m"
command -v pipdeptree >/dev/null 2>&1 || { echo -e "You shoud intall ${bold}pipdeptree${reset} for checking packages dependancies ${italic}($pip_version install pipdeptree)${reset}.\n"; }
command -v $pip_version >/dev/null 2>&1 || { echo -e "${bold}$pip_version${reset} is not installed." && exit 1; }
echo -e "${bold}🐍 $pip_version (Python 3) ${reset}"
echo ""
echo -e "Current ${underline}Python3${reset} version: $(python3 -V | awk '{print $2}')"
echo -e "Current ${underline}pip3${reset} version: $(pip3 -V)"
#$pip_version install --upgrade pip > /dev/null
echo ""
# Do not update packages
if (( ${#do_not_update[@]} )); then
nbp=${#do_not_update[*]}
echo -e "${underline}List of${reset} ${redbox} $nbp ${reset} ${underline}'do not update' packages:${reset}"
echo -e "${redbold}${do_not_update[*]}${reset}"
echo -e "To remove package from this list, you need to edit the ${italic}do_not_update${reset} array."
echo ""
fi fi
if ! [ -x "$(command -v $version)" ]; then
echo "Error: $version is not installed." >&2 curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1 exit 1
fi fi
echo -e "\033[1m🐍 $version (Python 3) \033[0m" #Packages update
echo -e "🐍 ${underline}Search for packages update...${reset}\n"
echo "" pip_outdated=$($pip_version list --outdated --format columns)
$version install --upgrade pip
echo ""
pip_outdated=$($version list --outdated --format columns)
upd=$(echo "$pip_outdated" | sed '1,2d' | awk '{print $1}') upd=$(echo "$pip_outdated" | sed '1,2d' | awk '{print $1}')
# Find infos about updated packages
if [ -n "$upd" ]; then if [ -n "$upd" ]; then
echo -e "\033[4mAvailables updates:\033[0m" nb=$(echo "$upd" | wc -w | xargs)
#echo $pip3_outdated_freeze | tr [:space:] '\n'
echo "$pip_outdated" echo -e "${redbox} $nb ${reset} availables updates:"
echo -e "\n$pip_outdated"
echo "" echo ""
for i in $upd for i in $upd
do do
info=$($version show $i) info=$($pip_version show "$i")
#info=$($version show $i | sed -n 4q)
#info=$($version show $i | head -5)
#info=$($version show $i | tail -n +5)
echo "$info" | head -4
echo ''
#echo "$i"
done
if [ -x "$(command -v pipdeptree)" ]; then l=$(echo "$info" | sed -n '1p')
echo -e "\033[4mCheck dependancies:\033[0m"
echo "Be carefull!! This updates can be a dependancie for some modules. Check for any incompatible version."
fi
echo ""
for i in $upd
do
if [ -x "$(command -v pipdeptree)" ]; then
dependencies=$(echo "$i" | xargs pipdeptree -r -p | grep "$upd")
z=0 if [[ ! " ${do_not_update[@]} " =~ " ${i} " ]]; then
while read -r line; do m=$(sed "1s/.*/\\${bold}$l\\${reset}/" <<< "$info")
if [[ $line = *"<"* ]]; then else
echo -e "\033[31m$line\033[0m" m=$(sed "1s/.*/\\${redbold}$l\\${reset}/" <<< "$info")
else fi
if [ "$z" -eq 0 ]; then echo -e "$m" | head -4
echo -e "\033[3m$line\033[0m" echo ""
else
echo "$line"
fi
z=$((z+1))
fi
done <<< "$dependencies"
z+="$i "
done
# z = asgiref setuptools lunr
# Check dependancies
if [ -x "$(command -v pipdeptree)" ] && [ "$display_depend" == true ]; then
echo -e "🐍 ${underline}Check dependancies:${reset}\n"
echo -e "Be carefull!! This updates can be a dependancie for some modules. Check for any incompatible version.\n"
# packages dont on recherche les dépendances (x = asgiref,setuptools,lunr)
x=$(echo "$z" | sed 's/.$//' | sed 's/ /,/g')
# on filtre les lignes (y = asgiref|setuptools|lunr)
y=$(echo "$z" | sed 's/.$//' | sed 's/ /|/g')
dependencies=$(echo "$x" | xargs pipdeptree -r --python /opt/homebrew/opt/python@3.11/bin/python3.11 -p | grep -E $y)
echo -e ""
while IFS= read -r line; do
z=$(echo "${line}" | grep -i ^[a-z])
k=$(echo "${line}" | awk -F'==' '{print $1}')
l=$(echo "${line}" | awk -F':' '{print $2}')
# Si la ligne commence par une lettre (aka. paquet à mettre à jour)
if [ -n "$z" ] ; then
# Met en redbold le paquet si il est 'do_not_update'
if [[ ! " ${do_not_update[@]} " =~ " ${k} " ]]; then
echo -e "\n${bold}${line}${reset}"
else
echo -e "\n${redbold}${line}${reset}"
fi
# sinon dépendance
elif [[ "${l}" = *"<"* ]] || [[ "${l}" = *"=="* ]]; then
echo -e "${red}${line}${reset}"
elif [[ "${l}" = *"~="* ]]; then
echo -e "${yellow}${line}${reset}"
else else
c=$(echo -e "Do you want to install pipdeptree to check dependancies ? (y/n)") echo "${line}"
read -p "$c" choice
case "$choice" in
y|Y|o ) $version install $user pipdeptree ;;
n|N ) echo "Ok, let's continue";;
* ) echo "invalid";;
esac
fi fi
done <<< "$dependencies"
# If the update is not in the do_not_update array, we install it. fi
FOUND=`echo ${do_not_update[*]} | grep "$i"`
if [ "${FOUND}" = "" ] && [ "$no_distract" = false ]; then
b=$(echo -e "Do you wanna run \033[1m$version install $user --upgrade "$i"\033[0m ? (y/n)") # Updating packages
echo -e "\n🐍 ${underline}Updating packages...${reset}\n"
[ "${#do_not_update[@]}" -gt 0 ] && echo -e "${redbold}Do not update: ${underline}${do_not_update[@]}${reset}${redbold} . It won't be updated!'${reset}\n"
for i in $upd
do
if [[ ! " ${do_not_update[@]} " =~ " ${i} " ]]; then
if [ "$no_distract" = false ]; then
b=$(echo -e "Do you wanna run ${bold}$pip_version install $user --upgrade $i${reset} ? (y/n)")
read -p "$b" choice read -p "$b" choice
case "$choice" in case "$choice" in
y|Y|o ) echo $i | xargs $version install $user --upgrade ;; y|Y|o ) echo "$i" | xargs $pip_version install $user --upgrade ;;
n|N ) echo "Ok, let's continue";; n|N ) echo "Ok, let's continue";;
* ) echo "invalid";; * ) echo "invalid";;
esac esac
echo "" echo ""
elif [ "${FOUND}" = "" ]; then else
echo "$i" | xargs $pip_version install $user --upgrade
echo $i | xargs $version install $user --upgrade
fi fi
done fi
done
else else
echo -e "\033[4mNo availables updates.\033[0m" echo -e "No availables updates."
fi fi
echo ""
echo -e "🐍 ${underline}Running ${reset}${bold_under}pip check${reset}${underline} for checking that everything is ok...${reset}\n"
$pip_version check
echo "" echo ""
echo "" echo ""

105
plugins.d/pipx.sh Executable file
View File

@@ -0,0 +1,105 @@
#!/usr/bin/env bash
# pipx plugin for KYMSU
# https://github.com/welcoMattic/kymsu
# No distract mode (no user interaction)
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
# Upgrade --include-injected
injected=true
# Add module to the do_not_update array for prevent to update.
#declare -a do_not_update=()
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
box="\033[1;41m"
reset="\033[0m"
echo -e "${bold}🛠 pipx (Python 3) ${reset}"
if ! command -v pipx &> /dev/null
then
echo -e "${bold}pipx${reset} could not be found !\n"
echo -e "You should install ${bold}pipx${reset}:\n"
echo -e " - brew install pipx"
echo -e " - pipx ensurepath"
echo -e "or"
echo -e " - python3 -m pip install --user pipx"
echo -e " - python3 -m pipx ensurepath"
exit
fi
list=$(pipx list --include-injected) # pipx list --quiet
echo -e "\n${underline}List installed packages:${reset}"
echo "$list"
curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi
pipx-outdated() {
echo -e "\n${underline}Outdated Packages:${reset}"
while read -sr pyPkgName pyPkyVersion; do
local pypi_latest="$(curl -sS https://pypi.org/simple/${pyPkgName}/ | grep -o '>.*</' | tail -n 1 | grep -o -E '[0-9]([0-9]|[-._])*[0-9]')"
#[ "$pyPkyVersion" != "$pypi_latest" ] && printf "%s\tCurrent: %s\tLatest: %s\n" "$pyPkgName" "$pyPkyVersion" "$pypi_latest"
if [ "$pyPkyVersion" != "$pypi_latest" ]; then
printf "%s\tCurrent: %s\tLatest: %s\n" "$pyPkgName" "$pyPkyVersion" "$pypi_latest"
outdated+="$pyPkgName "
fi
done < <( pipx list | grep -o 'package.*,' | tr -d ',' | cut -d ' ' -f 2- )
}
# https://github.com/avantrec/soco-cli/blob/master/CHANGELOG.txt
pipx-outdated
outdated=$(echo "$outdated" | sed 's/.$//')
if [ -n "$outdated" ]; then
nb=$(echo "$outdated" | wc -w | xargs)
echo -e "${redbox} $nb ${reset} availables updates:"
a=$(echo -e "\nDo you wanna run ${bold}pipx upgrade "$outdated"${reset} ? (y/n/a) ")
# yes/no/all
read -p "$a" choice
if [ "$choice" == "y" ] || [ "$choice" == "Y" ] || [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
for i in $outdated;
do
if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
if [ "$injected" = true ]; then
echo "$i" | xargs -p -n 1 pipx upgrade --include-injected
else
echo "$i" | xargs -p -n 1 pipx upgrade
fi
elif [ "$choice" == "a" ] || [ "$choice" == "A" ]; then
if [ "$injected" = true ]; then
pipx upgrade-all --include-injected
else
pipx upgrade-all
fi
fi
done
else
echo -e "OK, let's continue..."
fi
else
echo "No update available !"
fi
echo ""
echo ""

92
plugins.d/python_668.sh Executable file
View File

@@ -0,0 +1,92 @@
#!/usr/bin/env bash
# pip plugin for KYMSU
# https://github.com/welcoMattic/kymsu
# upgrade pip:
# python -m pip install --upgrade pip
# Configurer pip3:
# pip config edit
#########################################
#
# Settings:
# Display info on updated pakages / casks
#[[ $@ =~ "--info" ]] && display_info=false || display_info=true
display_info=true
# No distract mode (no user interaction)
[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
# Display dependancies on updated pakages / casks
#[[ $@ =~ "--depend" ]] && display_depend=false || display_depend=true
display_depend=true
#version: pip ou pip3
# pip: python3.8 - pip3: python3.9
pip_version=pip3
#user: "" or "--user"
user=""
# Add module to the do_not_update array for prevent to update.
#declare -a do_not_update=()
#declare -a do_not_update=("parso" "asgiref")
declare -a do_not_update=("pyee")
#
#########################################
: <<'END_COMMENT'
blabla
END_COMMENT
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bold="\033[1m"
bold_under="\033[1;4m"
redbox="\033[1;41m"
redbold="\033[1;31m"
red="\033[31m"
yellow="\033[33m"
reset="\033[0m"
command -v pipdeptree >/dev/null 2>&1 || { echo -e "You shoud intall ${bold}pipdeptree${reset} for checking packages dependancies ${italic}($pip_version install pipdeptree)${reset}.\n"; }
command -v $pip_version >/dev/null 2>&1 || { echo -e "${bold}$pip_version${reset} is not installed." && exit 1; }
echo -e "${bold}🐍 $pip_version (Python 3) ${reset}"
echo ""
echo -e "Current ${underline}Python3${reset} version: $(python3 -V | awk '{print $2}')"
echo -e "Current ${underline}pip3${reset} version: $(pip3 -V)"
#$pip_version install --upgrade pip > /dev/null
echo ""
# Do not update packages
if (( ${#do_not_update[@]} )); then
nbp=${#do_not_update[*]}
echo -e "${underline}List of${reset} ${redbox} $nbp ${reset} ${underline}'do not update' packages:${reset}"
echo -e "${redbold}${do_not_update[*]}${reset}"
echo -e "To remove package from this list, you need to edit the ${italic}do_not_update${reset} array."
echo ""
fi
curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi
#Packages update
echo -e "🐍 ${underline}Search for packages update...${reset}\n"
pip_outdated=$($pip_version list --outdated --format columns)
upd=$(echo "$pip_outdated" | sed '1,2d' | awk '{print $1}')

50
plugins.d/rustup.sh Executable file
View File

@@ -0,0 +1,50 @@
#!/usr/bin/env bash
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
box="\033[1;41m"
reset="\033[0m"
echo -e "\n${bold}🦀 Rust${reset}\n"
curl -Is https://www.apple.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi
if hash rustup 2>/dev/null; then
echo -e "🦀 ${underline}rustup check${reset}\n"
rustup check
if [[ ! $(which rustup-init) =~ "homebrew" ]]; then
echo -e "\n🦀 ${underline}Upgrading rustup itself !${reset}\n"
rustup self update
fi
echo -e "\n🦀 ${underline}Upgrading rust toolchains !${reset}\n"
rustup update
echo ""
fi
if hash cargo 2>/dev/null; then
echo -e "\n🦀 ${underline}Update cargo packages !${reset}\n"
if hash ggrep 2>/dev/null; then
cargo install $(cargo install --list | ggrep -E '^[a-z0-9_-]+ v[0-9.]+:$' | cut -f1 -d' ')
else
cargo install $(cargo install --list | egrep '^[a-z0-9_-]+ v[0-9.]+:$' | cut -f1 -d' ')
fi
echo ""
fi
echo ""

BIN
plugins.d/success.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

101
plugins.d/venv.sh Executable file
View File

@@ -0,0 +1,101 @@
#!/usr/bin/env bash
# Venv plugin for KYMSU
# https://github.com/welcoMattic/kymsu
italic="\033[3m"
underline="\033[4m"
ita_under="\033[3;4m"
bgd="\033[1;4;31m"
red="\033[1;31m"
bold="\033[1m"
box="\033[1;41m"
reset="\033[0m"
###############################################################################################
#
# Settings:
# Liste des apps:
# - le venv doit avoir le même nom que l'app
declare -a apps=("mkdocs")
# Liste des extensions pour Mkdocs
mkdocs_ext=("mkdocs-material" "mkdocs-material-extensions" "mkdocs-git-revision-date-localized-plugin" "mkdocs-minify-plugin" "fontawesome_markdown" "mkdocs-pdf-export-plugin")
echo -e "${bold}🐍 Update apps in Python virtuals environments ${reset}\n"
# Où sont stockés les environnements virtuels:
# macos: silverbook / airbook
if [[ "$OSTYPE" == "darwin"* ]]; then
v=$HOME/Documents/venv
# rpi4: linux_gnueabihf
# rpi3:
# solus: linux-gnu
elif [[ "$OSTYPE" == "linux_gnu" ]]; then
v=$HOME/Applications
elif [[ "$OSTYPE" == "linux_gnueabihf" ]]; then
v=$HOME/venv
fi
curl -Is http://www.google.com | head -1 | grep 200 1>/dev/null
if [[ $? -eq 1 ]]; then
echo -e "\n${red}No Internet connection !${reset}"
echo -e "Exit !"
exit 1
fi
echo -e "Venv directory: $v\n"
################################################################################################
for app in ${apps[*]}
do
echo -e "${bold}Update $app${reset}";
cd "$v/$app"
source bin/activate
python3 -V
pip3 install -U pip setuptools
pip3 install -U "$app"
ret=$?
# pas d'update: ret=0
#[ $ret -eq 0 ] && echo -e "${underline}\nNo update available !\n${reset}"
if [ $ret -eq 0 ]; then
echo -e "${underline}\nNo update available !\n${reset}"
fi
info=$(pip3 show "$app")
l1=$(echo "$info" | sed -n '1p')
l1="\\\033[4m$l1\\\033[0m"
info=$(echo "$info" | sed "1s/.*/$l1/")
echo -e "$info"
<<COMMENT
# Update all modules:
pip_outdated=$(pip3 list --outdated --format columns)
upd=$(echo "$pip_outdated" | sed '1,2d' | awk '{print $1}')
outdated=""
for i in $upd
do
outdated+="$i "
done
outdated=$(echo "$outdated" | sed 's/.$//')
COMMENT
# Update mkdocs plugins & themes:
if [ $app == "mkdocs" ]; then
for i in ${mkdocs_ext[*]}
do
echo -e "\n${bold}Update $i:${reset}" && pip3 install -U $i
done
fi
deactivate
echo ""
done

View File

@@ -34,6 +34,8 @@ admin=false
#add module to do_not_update array #add module to do_not_update array
declare -a do_not_update=() declare -a do_not_update=()
#[[ $@ =~ "-nodistract" || $@ =~ "-n" ]] && no_distract=true || no_distract=false
if [[ $1 == "--nodistract" ]] || [[ $no_distract == true ]]; then if [[ $1 == "--nodistract" ]] || [[ $no_distract == true ]]; then
no_distract=true no_distract=true
prompt= prompt=

5
prefs_kymsu.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
source plugins.d/pip.sh
echo ${#do_not_update[*]}