Aller au contenu

Oh My Zsh - Gestionnaire de cadre et de configuration Zsh

Copier toutes les commandes Générer PDF

Oh My Zsh est un cadre communautaire de gestion de votre configuration Zsh. Avec plus de 300 plugins optionnels et 140 thèmes, il transforme votre expérience de terminal en un environnement de ligne de commande puissant, personnalisable et visuellement attrayant. Soutenu par une communauté de 2 400 contributeurs et 179k GitHub stars, Oh My Zsh est devenu le standard de facto pour la personnalisation Zsh.

Prérequis et installation

Exigences du système

# Check Zsh version (4.3.9+ required, 5.0.8+ preferred)
zsh --version

# Install Zsh if not present
# Ubuntu/Debian
sudo apt update && sudo apt install zsh

# CentOS/RHEL/Fedora
sudo dnf install zsh

# macOS (usually pre-installed)
brew install zsh

# Arch Linux
sudo pacman -S zsh

# Set Zsh as default shell
chsh -s $(which zsh)

Outils requis

# Verify required tools are installed
curl --version
wget --version
git --version

# Install missing tools
# Ubuntu/Debian
sudo apt install curl wget git

# CentOS/RHEL/Fedora
sudo dnf install curl wget git

# macOS
brew install curl wget git
```_

### Méthodes d'installation

#### Installation rapide (Recommandé)
```bash
# Via curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Via wget
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Via fetch (FreeBSD)
sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```_

#### Miroir alternatif (pour les régions réglementées)
```bash
# Via curl (alternative mirror)
sh -c "$(curl -fsSL https://install.ohmyz.sh/)"

# Via wget (alternative mirror)
sh -c "$(wget -O- https://install.ohmyz.sh/)"

Installation manuelle

# Download and inspect before running
wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
cat install.sh  # Review the script
sh install.sh

# Manual git clone method
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

Après l'installation Configuration

# Reload Zsh configuration
source ~/.zshrc

# Verify installation
echo $ZSH
ls -la ~/.oh-my-zsh

# Check Oh My Zsh version
omz version

Gestion de la configuration

Configuration de base Fichier

# Main configuration file
~/.zshrc

# Oh My Zsh installation directory
$ZSH (typically ~/.oh-my-zsh)

# Custom directory for user modifications
$ZSH_CUSTOM (typically ~/.oh-my-zsh/custom)

Configuration de base Structure

# ~/.zshrc structure
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="robbyrussell"
plugins=(git)
source $ZSH/oh-my-zsh.sh

# User configuration
export PATH=$HOME/bin:/usr/local/bin:$PATH
export EDITOR='vim'

Variables d'environnement

# Oh My Zsh configuration variables
ZSH_THEME="theme_name"              # Theme selection
ZSH_CUSTOM="$ZSH/custom"            # Custom directory
DISABLE_AUTO_UPDATE="true"          # Disable auto-updates
DISABLE_UPDATE_PROMPT="true"        # Skip update prompts
UPDATE_ZSH_DAYS=13                  # Update frequency (days)
DISABLE_LS_COLORS="true"            # Disable ls colors
DISABLE_AUTO_TITLE="true"           # Disable auto-setting terminal title
ENABLE_CORRECTION="true"            # Enable command correction
COMPLETION_WAITING_DOTS="true"      # Show dots while waiting for completion
DISABLE_UNTRACKED_FILES_DIRTY="true" # Disable marking untracked files as dirty

Gestion des thèmes

Thèmes intégrés

# List all available themes
ls ~/.oh-my-zsh/themes/

# Popular built-in themes
ZSH_THEME="robbyrussell"    # Default, minimal
ZSH_THEME="agnoster"        # Powerline-style, requires Nerd Font
ZSH_THEME="powerlevel9k"    # Feature-rich (deprecated, use powerlevel10k)
ZSH_THEME="spaceship"       # Modern, Git-focused
ZSH_THEME="pure"            # Minimal, async
ZSH_THEME="bullet-train"    # Colorful, informative
ZSH_THEME="avit"            # Clean, Git integration
ZSH_THEME="bira"            # Two-line prompt
ZSH_THEME="cloud"           # Minimalist
ZSH_THEME="dallas"          # Simple, effective

Configuration du thème

# Set theme in ~/.zshrc
ZSH_THEME="agnoster"

# Random theme selection
ZSH_THEME="random"

# Random from specific themes
ZSH_THEME_RANDOM_CANDIDATES=(
  "robbyrussell"
  "agnoster"
  "spaceship"
  "powerlevel10k/powerlevel10k"
)

# Ignore specific themes from random selection
ZSH_THEME_RANDOM_IGNORED=(pygmalion tjkirch_mod)

# Apply changes
source ~/.zshrc

Installation de thème personnalisée

# Install external themes
# Example: Spaceship theme
git clone https://github.com/spaceship-prompt/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt" --depth=1
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"

# Set in ~/.zshrc
ZSH_THEME="spaceship"

# Install Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $\\\\{ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom\\\\}/themes/powerlevel10k
ZSH_THEME="powerlevel10k/powerlevel10k"

Personnalisation du thème

# Create custom theme
cp ~/.oh-my-zsh/themes/robbyrussell.zsh-theme ~/.oh-my-zsh/custom/themes/mytheme.zsh-theme

# Edit custom theme
vim ~/.oh-my-zsh/custom/themes/mytheme.zsh-theme

# Basic theme structure
PROMPT='%\\\\{$fg[cyan]%\\\\}%n%\\\\{$reset_color%\\\\}@%\\\\{$fg[yellow]%\\\\}%m%\\\\{$reset_color%\\\\}:%\\\\{$fg[green]%\\\\}%c%\\\\{$reset_color%\\\\}$(git_prompt_info) %# '
ZSH_THEME_GIT_PROMPT_PREFIX=" git:(%\\\\{$fg[red]%\\\\}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%\\\\{$reset_color%\\\\}"
ZSH_THEME_GIT_PROMPT_DIRTY="%\\\\{$fg[blue]%\\\\}) %\\\\{$fg[yellow]%\\\\}✗%\\\\{$reset_color%\\\\}"
ZSH_THEME_GIT_PROMPT_CLEAN="%\\\\{$fg[blue]%\\\\})"

Système de connexion

Greffons de base (préinstallés)

# Essential plugins included with Oh My Zsh
plugins=(
  git                    # Git aliases and functions
  sudo                   # ESC ESC to add sudo
  web-search            # Web search from terminal
  copydir               # Copy current directory path
  copyfile              # Copy file contents
  history               # History aliases
  jsontools             # JSON manipulation
  urltools              # URL manipulation
  encode64              # Base64 encoding/decoding
)

Catégories populaires de greffons

Outils de développement

plugins=(
  git                    # Git integration
  github                 # GitHub CLI integration
  gitignore             # Gitignore.io integration
  docker                # Docker aliases
  docker-compose        # Docker Compose aliases
  kubectl               # Kubernetes CLI
  terraform             # Terraform aliases
  ansible               # Ansible aliases
  vagrant               # Vagrant aliases
  npm                   # npm aliases
  yarn                  # Yarn aliases
  pip                   # Python pip aliases
  composer              # PHP Composer aliases
)

Plugins spécifiques à la langue

plugins=(
  python                # Python aliases
  node                  # Node.js aliases
  ruby                  # Ruby aliases
  golang                # Go aliases
  rust                  # Rust aliases
  java                  # Java aliases
  scala                 # Scala aliases
  php                   # PHP aliases
  laravel               # Laravel framework
  rails                 # Ruby on Rails
  django                # Django framework
)

Système et productivité

plugins=(
  sudo                  # ESC ESC for sudo
  command-not-found     # Suggest package installation
  colored-man-pages     # Colorized man pages
  extract               # Universal archive extraction
  z                     # Jump to frequent directories
  autojump              # Smart directory jumping
  fzf                   # Fuzzy finder integration
  tmux                  # Tmux integration
  screen                # GNU Screen integration
  systemd               # systemd aliases
  systemadmin           # System administration tools
)

Plugins spécifiques à la plate-forme

# macOS plugins
plugins=(
  macos                 # macOS-specific aliases
  brew                  # Homebrew integration
  iterm2                # iTerm2 integration
  xcode                 # Xcode tools
)

# Linux plugins
plugins=(
  ubuntu                # Ubuntu-specific aliases
  debian                # Debian-specific aliases
  archlinux             # Arch Linux aliases
  fedora                # Fedora aliases
  systemd               # systemd integration
)

# Windows (WSL) plugins
plugins=(
  wsl                   # Windows Subsystem for Linux
  windows               # Windows integration
)

Configuration du plugin

# Enable plugins in ~/.zshrc
plugins=(
  git
  docker
  kubectl
  python
  node
  fzf
  z
  colored-man-pages
  extract
  sudo
)

# Plugin-specific configuration
# Git plugin settings
ZSH_THEME_GIT_PROMPT_PREFIX="git:("
ZSH_THEME_GIT_PROMPT_SUFFIX=")"
ZSH_THEME_GIT_PROMPT_DIRTY=" ✗"
ZSH_THEME_GIT_PROMPT_CLEAN=""

# Docker plugin settings
DOCKER_COMPLETION_SHOW_TAGS=true

# FZF plugin settings
export FZF_DEFAULT_COMMAND='fd --type f'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

Installation externe du plugin

Installation manuelle

# Clone plugin to custom directory
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $\\\\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\\\\}/plugins/zsh-syntax-highlighting

# Add to plugins list
plugins=(... zsh-syntax-highlighting)

# Reload configuration
source ~/.zshrc

Greffons externes populaires

# Syntax highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $\\\\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\\\\}/plugins/zsh-syntax-highlighting

# Auto-suggestions
git clone https://github.com/zsh-users/zsh-autosuggestions $\\\\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\\\\}/plugins/zsh-autosuggestions

# History substring search
git clone https://github.com/zsh-users/zsh-history-substring-search $\\\\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\\\\}/plugins/zsh-history-substring-search

# Fast syntax highlighting (alternative)
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git $\\\\{ZSH_CUSTOM:-~/.oh-my-zsh/custom\\\\}/plugins/fast-syntax-highlighting

# You Should Use (alias reminder)
git clone https://github.com/MichaelAquilina/zsh-you-should-use.git $ZSH_CUSTOM/plugins/you-should-use

Développement de plugins

# Create custom plugin directory
mkdir -p $ZSH_CUSTOM/plugins/myplugin

# Create plugin file
cat > $ZSH_CUSTOM/plugins/myplugin/myplugin.plugin.zsh << 'EOF'
# My Custom Plugin

# Aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Functions
function mkcd() \\\\{
    mkdir -p "$1" && cd "$1"
\\\\}

function extract() \\\\{
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)   tar xjf $1     ;;
            *.tar.gz)    tar xzf $1     ;;
            *.bz2)       bunzip2 $1     ;;
            *.rar)       unrar e $1     ;;
            *.gz)        gunzip $1      ;;
            *.tar)       tar xf $1      ;;
            *.tbz2)      tar xjf $1     ;;
            *.tgz)       tar xzf $1     ;;
            *.zip)       unzip $1       ;;
            *.Z)         uncompress $1  ;;
            *.7z)        7z x $1        ;;
            *)     echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
\\\\}
EOF

# Enable plugin
plugins=(... myplugin)

Configuration avancée

Fonctions personnalisées et alias

# Add to ~/.zshrc or $ZSH_CUSTOM/aliases.zsh
# Directory navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

# File operations
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

# Git shortcuts
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git pull'
alias gd='git diff'
alias gb='git branch'
alias gco='git checkout'

# System monitoring
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias ps='ps auxf'
alias psg='ps aux|grep -v grep|grep -i -e VSZ -e'

# Network
alias ping='ping -c 5'
alias ports='netstat -tulanp'
alias wget='wget -c'

Personnalisation de l'environnement

# Add to ~/.zshrc
# History configuration
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history
setopt HIST_VERIFY
setopt SHARE_HISTORY
setopt APPEND_HISTORY
setopt INC_APPEND_HISTORY
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_REDUCE_BLANKS
setopt HIST_IGNORE_SPACE

# Directory options
setopt AUTO_CD
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS
setopt PUSHD_SILENT

# Completion options
setopt COMPLETE_ALIASES
setopt COMPLETE_IN_WORD
setopt ALWAYS_TO_END
setopt PATH_DIRS
setopt AUTO_MENU
setopt AUTO_LIST
setopt AUTO_PARAM_SLASH
setopt EXTENDED_GLOB

# Correction
setopt CORRECT
setopt CORRECT_ALL

# Job control
setopt LONG_LIST_JOBS
setopt AUTO_RESUME
setopt NOTIFY
setopt BG_NICE
setopt HUP

Reliure des clés

# Add to ~/.zshrc or $ZSH_CUSTOM/keybindings.zsh
# Emacs-style key bindings
bindkey -e

# Custom key bindings
bindkey '^R' history-incremental-search-backward
bindkey '^S' history-incremental-search-forward
bindkey '^P' history-search-backward
bindkey '^N' history-search-forward
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey '^[[1;5C' forward-word
bindkey '^[[1;5D' backward-word
bindkey '^[[3~' delete-char
bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-line

# Alt+. to insert last argument
bindkey '\e.' insert-last-word

# Ctrl+U to delete line
bindkey '^U' backward-kill-line

# Ctrl+K to delete to end of line
bindkey '^K' kill-line

Mise à jour et maintenance

Mises à jour automatiques

# Enable automatic updates (default)
# Updates check every 13 days
UPDATE_ZSH_DAYS=13

# Disable update prompts
DISABLE_UPDATE_PROMPT="true"

# Disable automatic updates completely
DISABLE_AUTO_UPDATE="true"

Mises à jour manuelles

# Update Oh My Zsh
omz update

# Alternative update method
upgrade_oh_my_zsh

# Check for updates without installing
omz update --dry-run

# Update specific components
git -C $ZSH pull
git -C $ZSH_CUSTOM/plugins/zsh-syntax-highlighting pull
git -C $ZSH_CUSTOM/themes/powerlevel10k pull

Commandes de maintenance

# Reload configuration
omz reload
# or
source ~/.zshrc

# Check Oh My Zsh version
omz version

# List installed plugins
omz plugin list

# List available themes
omz theme list

# Enable/disable plugins
omz plugin enable <plugin_name>
omz plugin disable <plugin_name>

# Set theme
omz theme set <theme_name>

# Clean up
omz clean

Dépannage

Questions communes

# Slow startup diagnosis
# Add to ~/.zshrc for profiling
zmodload zsh/zprof
# ... rest of .zshrc
zprof

# Check plugin load times
time zsh -i -c exit

# Disable problematic plugins temporarily
plugins=(git)  # Minimal plugin set

# Reset to default configuration
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

Optimisation des performances

# Optimize Git status checking
git config --global oh-my-zsh.hide-dirty 1
git config --global oh-my-zsh.hide-status 1

# Disable unnecessary plugins
plugins=(
  git
  # Remove unused plugins
)

# Use faster alternatives
# Replace 'z' with 'fasd' for better performance
# Use 'fast-syntax-highlighting' instead of 'zsh-syntax-highlighting'

# Lazy load heavy plugins
# Add to ~/.zshrc
lazy_load_plugin() \\\\{
    local plugin_name=$1
    local plugin_path="$ZSH_CUSTOM/plugins/$plugin_name"

    if [[ -d "$plugin_path" ]]; then
        source "$plugin_path/$plugin_name.plugin.zsh"
    fi
\\\\}

# Load plugins on demand
alias load_docker='lazy_load_plugin docker'

Déboguement

# Enable debug mode
set -x
source ~/.zshrc
set +x

# Check for conflicts
zsh -f  # Start Zsh without configuration

# Verify plugin installation
ls -la $ZSH_CUSTOM/plugins/
ls -la $ZSH_CUSTOM/themes/

# Check environment variables
echo $ZSH
echo $ZSH_CUSTOM
echo $ZSH_THEME

# Test specific plugin
source $ZSH_CUSTOM/plugins/plugin_name/plugin_name.plugin.zsh

Intégration avec d'autres outils

Émulateurs terminaux

# iTerm2 integration
plugins=(iterm2)

# Configure iTerm2 shell integration
curl -L https://iterm2.com/shell_integration/zsh -o ~/.iterm2_shell_integration.zsh
echo 'source ~/.iterm2_shell_integration.zsh' >> ~/.zshrc

# Windows Terminal
# Add Oh My Zsh profile to Windows Terminal settings.json

Développement Environnement Intégration

# VS Code integration
# Install "Oh My Zsh in VSCode" extension
# Configure terminal.integrated.shell.linux: "/bin/zsh"

# Docker integration
plugins=(docker docker-compose)

# Kubernetes integration
plugins=(kubectl helm)

# Cloud platforms
plugins=(aws gcloud azure)

Gestionnaires de versions

# Node.js version managers
plugins=(nvm n)

# Python version managers
plugins=(pyenv virtualenv)

# Ruby version managers
plugins=(rbenv rvm)

# Java version managers
plugins=(jenv)

# Multiple runtime version manager
plugins=(asdf)

Meilleures pratiques

Organisation de configuration

# Organize ~/.zshrc sections
# 1. Oh My Zsh configuration
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git docker kubectl python node)

# 2. Oh My Zsh initialization
source $ZSH/oh-my-zsh.sh

# 3. User configuration
export EDITOR='vim'
export PATH=$HOME/bin:$PATH

# 4. Custom aliases and functions
source $ZSH_CUSTOM/aliases.zsh
source $ZSH_CUSTOM/functions.zsh

# 5. Tool-specific configuration
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

Considérations en matière de sécurité

# Secure history
chmod 600 ~/.zsh_history

# Avoid storing sensitive data in history
setopt HIST_IGNORE_SPACE  # Commands starting with space not saved

# Use secure plugins only
# Verify plugin sources before installation
# Regularly update plugins

# Environment variable security
# Don't store secrets in .zshrc
# Use external secret management

Meilleures pratiques en matière de rendement

# Minimal plugin set for better performance
plugins=(
  git
  sudo
  colored-man-pages
  extract
)

# Lazy load heavy plugins
# Use async where possible
# Profile startup time regularly
# Clean up unused plugins and themes

Oh My Zsh transforme le shell Zsh en un environnement puissant, personnalisable et visuellement attrayant en ligne de commande. Avec son vaste écosystème plugin, ses beaux thèmes et sa communauté active, il fournit tout ce qu'il faut pour créer une expérience terminal productive. Que vous soyez développeur, administrateur système ou utilisateur de puissance, Oh My Zsh offre les outils et la flexibilité pour personnaliser votre shell exactement à vos préférences tout en conservant une excellente performance et fiabilité.