1
0
Fork 0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2024-10-16 11:40:46 +00:00

Compare commits

...

9 commits

Author SHA1 Message Date
Nikolas Garofil
d354023cf0
Merge 01808b3aae into 1514145a09 2024-09-19 11:50:39 +02:00
Carlo Sala
1514145a09
feat(nvm): add _omz_nvm_load function 2024-09-19 11:44:51 +02:00
Nikolas Garofil
01808b3aae Fix(adduser): Better code structure 2021-12-23 21:52:55 +01:00
Nikolas Garofil
8b5f01a22c Fix(adduser): better changing of shell 2021-12-22 20:02:11 +01:00
Nikolas Garofil
f26b428f8e Fix(adduser): better returning to shell of original user 2021-12-22 19:18:04 +01:00
Nikolas Garofil
70edfaf348 Fix(adduser): better binary check 2021-12-22 19:16:50 +01:00
Nikolas Garofil
8ceff21474 Fix(adduser): correct echo redirect 2021-12-22 19:15:49 +01:00
Nikolas Garofil
510d7a778a Fix(adduser): better way to avoid adduser() recursion 2021-12-22 19:15:09 +01:00
Nikolas Garofil
ecc5aab0e7 feat(adduser): add adduser plugin (#10441)
Automatic "Oh My ZSH" installation when adding new users
2021-12-21 19:40:46 +01:00
4 changed files with 111 additions and 11 deletions

26
plugins/adduser/README.md Normal file
View file

@ -0,0 +1,26 @@
# adduser
This plugin adds support for installing "Oh My ZSH" when adding new users.
To use it, add `adduser` to the plugins array of your `~/.zshrc` file:
```zsh
plugins=(... adduser)
```
## Usage
Just run `adduser` as you normally would do and now:
1. The regular `adduser` command will run.
2. The shell of the new user will switch to zsh
3. "Oh My zsh will be installed (as if he would have ran `install.sh` himself).
## NOTES
- It is assumed that the last argument will be the username.<br>*(In rare cases people provide the group as last argument)*
- `useradd` behaviour is not changed.
## Author
[Nikolas Garofil](https://github.com/ngaro)

View file

@ -0,0 +1,70 @@
# Copyright (c) 2021 Nikolas Garofil
_adduser_result() {
local result_string="Installation of 'Oh My Zsh' for '$new_user'"
#Erase the temporary copy of the installscript when necessary
if [[ ! -z $temp_installscript ]] ; then
rm $temp_installscript
fi
#mention the result
if [[ $1 -eq 0 ]]; then
echo "$result_string succeeded."
else
echo "$result_string failed." > /dev/stderr
fi
}
adduser() {
local path_installscript="$ZSH/tools/install.sh"
local unattended_options=" --unattended"
local new_user=${@[$#]}
local temp_installscript; local unattended_installer; local install_as_user; local change_shell;
#Create user, errors will be reported by the 'real' adduser
#Don't use $new_user so that we have all args
command adduser $@ || return 1
echo "\nUser '$new_user' has been created. I will now try to install 'Oh My Zsh'"
if [[ ! -f $path_installscript ]] ; then
echo "Installationscript '$path_installscript' not available" > /dev/stderr;
_adduser_result 1
return 1;
fi
#copy install.sh to a new file in temp that we can give the right owner to execute
#and also make sure that after the install script we are no longer the new user
temp_installscript=$(mktemp)
cp $path_installscript $temp_installscript
chown $new_user $temp_installscript && chmod +x $temp_installscript
unattended_installer="$temp_installscript $unattended_options"
if [[ ( ! -x "$commands[sudo]" ) && ( ! -x "$commands[su]" ) ]] ; then
echo "You can't become $new_user (no 'sudo' or 'su' available)" > /dev/stderr;
_adduser_result 1
return 1;
fi
if [[ -x "$commands[sudo]" ]] ; then
install_as_user="sudo -u $new_user sh -c '$unattended_installer'"
change_shell="sudo chsh -s $commands[zsh] $new_user"
else
install_as_user="su -l $new_user -c '$unattended_installer'"
change_shell="su -c 'chsh -s $commands[zsh] $new_user'"
fi
eval ${install_as_user}
#mention the result before changing the shell (even with a bad result it's still installed)
if [ ! $? -eq 0 ] ; then
_adduser_result 1
return 1
fi
if [[ ! -x "$commands[chsh]" ]] ; then
echo "'chsh' is not available, change the shell manually." > /dev/stderr
fi
eval ${change_shell}
}

View file

@ -42,6 +42,8 @@ as you want:
zstyle ':omz:plugins:nvm' lazy-cmd eslint prettier typescript ... zstyle ':omz:plugins:nvm' lazy-cmd eslint prettier typescript ...
``` ```
There will be a function `_omz_nvm_load` available to load `nvm` without executing any other trigger command.
#### `.nvmrc` autoload #### `.nvmrc` autoload
Note: _if used at the same time as `lazy`, `autoload` will start working only after nvm has been lazy-loaded_ Note: _if used at the same time as `lazy`, `autoload` will start working only after nvm has been lazy-loaded_

View file

@ -20,7 +20,7 @@ if [[ -z "$NVM_DIR" ]] || [[ ! -f "$NVM_DIR/nvm.sh" ]]; then
return return
fi fi
function _omz_load_nvm_completion { function _omz_nvm_setup_completion {
local _nvm_completion local _nvm_completion
# Load nvm bash completion # Load nvm bash completion
for _nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_completion.d/nvm"; do for _nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_completion.d/nvm"; do
@ -33,12 +33,12 @@ function _omz_load_nvm_completion {
break break
fi fi
done done
unfunction _omz_load_nvm_completion unfunction _omz_nvm_setup_completion
} }
function _omz_setup_autoload { function _omz_nvm_setup_autoload {
if ! zstyle -t ':omz:plugins:nvm' autoload; then if ! zstyle -t ':omz:plugins:nvm' autoload; then
unfunction _omz_setup_autoload unfunction _omz_nvm_setup_autoload
return return
fi fi
@ -68,13 +68,13 @@ function _omz_setup_autoload {
add-zsh-hook chpwd load-nvmrc add-zsh-hook chpwd load-nvmrc
load-nvmrc load-nvmrc
unfunction _omz_setup_autoload unfunction _omz_nvm_setup_autoload
} }
if zstyle -t ':omz:plugins:nvm' lazy; then if zstyle -t ':omz:plugins:nvm' lazy; then
# Call nvm when first using nvm, node, npm, pnpm, yarn, corepack or other commands in lazy-cmd # Call nvm when first using nvm, node, npm, pnpm, yarn, corepack or other commands in lazy-cmd
zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd
nvm_lazy_cmd=(nvm node npm npx pnpm pnpx yarn corepack $nvm_lazy_cmd) # default values nvm_lazy_cmd=(_omz_nvm_load nvm node npm npx pnpm pnpx yarn corepack $nvm_lazy_cmd) # default values
eval " eval "
function $nvm_lazy_cmd { function $nvm_lazy_cmd {
for func in $nvm_lazy_cmd; do for func in $nvm_lazy_cmd; do
@ -84,14 +84,16 @@ if zstyle -t ':omz:plugins:nvm' lazy; then
done done
# Load nvm if it exists in \$NVM_DIR # Load nvm if it exists in \$NVM_DIR
[[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\" [[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\"
_omz_load_nvm_completion _omz_nvm_setup_completion
_omz_setup_autoload _omz_nvm_setup_autoload
\"\$0\" \"\$@\" if [[ \"\$0\" != _omz_nvm_load ]]; then
\"\$0\" \"\$@\"
fi
} }
" "
unset nvm_lazy_cmd unset nvm_lazy_cmd
else else
source "$NVM_DIR/nvm.sh" source "$NVM_DIR/nvm.sh"
_omz_load_nvm_completion _omz_nvm_setup_completion
_omz_setup_autoload _omz_nvm_setup_autoload
fi fi