Repository Analysis

ohmyzsh/ohmyzsh

🙃 A delightful community-driven (with 2,500+ contributors) framework for managing your zsh configuration. Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140+ themes to spice up your morning, and an auto-update tool that makes it easy to keep up with the latest updates from the community.

6.6 Low AI signal View on GitHub
6.6
Adjusted Score
6.6
Raw Score
100%
Time Factor
2026-05-28
Last Push
187,452
Stars
Shell
Language
82,619
Lines of Code
768
Files
293
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 2MEDIUM 87LOW 204

Pattern Findings

293 matches across 13 categories. Click a row to expand file-level details.

Decorative Section Separators66 hits · 258 pts
SeverityFileLineSnippet
MEDIUMplugins/man/man.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/man/man.plugin.zsh7# ------------------------------------------------------------------------------
MEDIUMplugins/man/man.plugin.zsh13# ------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh12#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh14#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh19#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh21#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh55#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh57#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh64#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh66#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh89#-------------------------------------------------------------------------------
MEDIUMplugins/per-directory-history/per-directory-history.zsh91#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh12#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh14#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh19#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh21#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh55#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh57#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh64#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh66#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh89#-------------------------------------------------------------------------------
MEDIUM…per-directory-history/per-directory-history.plugin.zsh91#-------------------------------------------------------------------------------
MEDIUMplugins/gitfast/git-completion.bash207# ==============================================================================
MEDIUMplugins/n98-magerun/n98-magerun.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/n98-magerun/n98-magerun.plugin.zsh7# ------------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh42#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh44#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh53#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh55#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh70#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh72#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh97#-----------------------------------------------------------------------------
MEDIUM…/history-substring-search/history-substring-search.zsh99#-----------------------------------------------------------------------------
MEDIUMplugins/emotty/emotty.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/emotty/emotty.plugin.zsh11# ------------------------------------------------------------------------------
MEDIUMplugins/grunt/grunt.plugin.zsh3# -----------------------------------------------------------------------------
MEDIUMplugins/grunt/grunt.plugin.zsh10# -----------------------------------------------------------------------------
MEDIUMplugins/grunt/grunt.plugin.zsh20# -----------------------------------------------------------------------------
MEDIUMplugins/grunt/grunt.plugin.zsh48# -----------------------------------------------------------------------------
MEDIUMplugins/sfffe/sfffe.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/sfffe/sfffe.plugin.zsh7# ------------------------------------------------------------------------------
MEDIUMplugins/wd/wd.plugin.zsh4# ==============
MEDIUMplugins/wd/wd.sh4# ==============
MEDIUMplugins/systemadmin/systemadmin.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/systemadmin/systemadmin.plugin.zsh3# -----------
MEDIUMplugins/systemadmin/systemadmin.plugin.zsh7# ------------------------------------------------------------------------------
MEDIUMplugins/systemadmin/systemadmin.plugin.zsh13# ------------------------------------------------------------------------------
MEDIUMplugins/emoji-clock/emoji-clock.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/emoji-clock/emoji-clock.plugin.zsh8# -----------------------------------------------------------------------------
MEDIUMplugins/gnu-utils/gnu-utils.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/gnu-utils/gnu-utils.plugin.zsh6# ------------------------------------------------------------------------------
MEDIUMplugins/sbt/sbt.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/sbt/sbt.plugin.zsh6# ------------------------------------------------------------------------------
MEDIUMplugins/sudo/sudo.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/sudo/sudo.plugin.zsh3# -----------
MEDIUMplugins/sudo/sudo.plugin.zsh7# ------------------------------------------------------------------------------
MEDIUMplugins/sudo/sudo.plugin.zsh16# ------------------------------------------------------------------------------
MEDIUMplugins/compleat/compleat.plugin.zsh1# ------------------------------------------------------------------------------
MEDIUMplugins/compleat/compleat.plugin.zsh6# ------------------------------------------------------------------------------
6 more matches not shown…
Over-Commented Block142 hits · 133 pts
SeverityFileLineSnippet
LOWtools/changelog.sh181fi
LOWtools/changelog.sh241
LOWtools/install.sh1#!/bin/sh
LOWtools/install.sh21# [2] https://zsh.sourceforge.io/Doc/Release/Files.html#index-ZDOTDIR_002c-use-of
LOWtools/install.sh41#
LOWtools/install.sh101 #
LOWtools/install.sh121 is_tty() {
LOWtools/upgrade.sh61#
LOWplugins/man/man.plugin.zsh1# ------------------------------------------------------------------------------
LOWplugins/per-directory-history/per-directory-history.zsh1#!/usr/bin/env zsh
LOWplugins/per-directory-history/per-directory-history.zsh21#-------------------------------------------------------------------------------
LOWplugins/per-directory-history/per-directory-history.zsh41# freely, subject to the following restrictions:
LOW…per-directory-history/per-directory-history.plugin.zsh1#!/usr/bin/env zsh
LOW…per-directory-history/per-directory-history.plugin.zsh21#-------------------------------------------------------------------------------
LOW…per-directory-history/per-directory-history.plugin.zsh41# freely, subject to the following restrictions:
LOWplugins/gitfast/git-prompt.sh1# bash/zsh git prompt support
LOWplugins/gitfast/git-prompt.sh21# you would put in $PS1 before and after the status string
LOWplugins/gitfast/git-prompt.sh41# bash.showDirtyState variable, which defaults to true once
LOWplugins/gitfast/git-prompt.sh61#
LOWplugins/gitfast/git-prompt.sh81#
LOWplugins/gitfast/git-prompt.sh101# If you would like a colored hint about the current dirty state, set
LOWplugins/gitfast/git-prompt.sh361 # set PS1 to a plain prompt so that we can
LOWplugins/gitfast/git-prompt.sh381 # This protects the user from arbitrary code execution via
LOWplugins/gitfast/git-completion.bash1# bash/zsh completion support for core Git.
LOWplugins/gitfast/git-completion.bash21#
LOWplugins/gitfast/git-completion.bash41# __git_complete gk gitk
LOWplugins/gitfast/git-completion.bash61# When set to "1" suggest all options, including options which are
LOWplugins/gitfast/git-completion.bash101# 2: A prefix to be added to each possible completion word (optional).
LOWplugins/gitfast/git-completion.bash121
LOWplugins/gitfast/git-completion.bash541 local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers
LOWplugins/gitfast/git-completion.bash681#
LOWplugins/gitfast/git-completion.bash1721}
LOWplugins/gitfast/git-completion.bash3421if [[ -n ${ZSH_VERSION-} && -z ${GIT_SOURCING_ZSH_COMPLETION-} ]]; then
LOWplugins/gitfast/git-completion.bash3441# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
LOWplugins/pow/pow.plugin.zsh1# Restart a rack app running under pow
LOWplugins/dotenv/dotenv.plugin.zsh121 # READER'S NOTE: this is actually a "best effort" check (works in tests), but
LOWplugins/dirhistory/dirhistory.plugin.zsh1##
LOWplugins/gulp/gulp.plugin.zsh1#!/usr/bin/env zsh
LOWplugins/kube-ps1/kube-ps1.plugin.zsh1#!/usr/bin/env bash
LOWplugins/symfony6/symfony6.plugin.zsh1#compdef console
LOW…/history-substring-search/history-substring-search.zsh1#!/usr/bin/env zsh
LOW…/history-substring-search/history-substring-search.zsh21# disclaimer in the documentation and/or other materials provided
LOW…/history-substring-search/history-substring-search.zsh101zmodload -F zsh/parameter
LOW…/history-substring-search/history-substring-search.zsh121 if [[ $KEYS == [[:print:]] ]]; then
LOW…/history-substring-search/history-substring-search.zsh141 ( autoload -U +X -- "$1" 2>/dev/null )
LOW…/history-substring-search/history-substring-search.zsh181 fi
LOW…/history-substring-search/history-substring-search.zsh281 # query string.
LOW…/history-substring-search/history-substring-search.zsh301 local search_pattern="${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
LOW…/history-substring-search/history-substring-search.zsh321 # In order to stay as responsive as possible, we will process the raw
LOW…/history-substring-search/history-substring-search.zsh341 # are beyond the end of $_history_substring_search_matches and that we
LOW…/history-substring-search/history-substring-search.zsh401 "$(($highlight_start_index - 1)) $(($highlight_end_index - 1)) ${_history_substring_search_query_highlight}${h
LOW…/history-substring-search/history-substring-search.zsh421 # before removing search highlight and exiting. This ensures no highlights
LOW…/history-substring-search/history-substring-search.zsh461_history-substring-search-down-buffer() {
LOW…/history-substring-search/history-substring-search.zsh541
LOW…/history-substring-search/history-substring-search.zsh601_history-substring-search-has-next() {
LOW…/history-substring-search/history-substring-search.zsh641 # We are at the beginning of the processed list. We do not have any more
LOW…/history-substring-search/history-substring-search.zsh661
LOW…/history-substring-search/history-substring-search.zsh681 #
LOW…/history-substring-search/history-substring-search.zsh701 # $#_history_substring_search_raw_matches, then we need to further process
LOW…/history-substring-search/history-substring-search.zsh721 fi
82 more matches not shown…
Redundant / Tautological Comments41 hits · 62 pts
SeverityFileLineSnippet
LOWoh-my-zsh.sh41# Check if in emulation mode, if so early return
LOWoh-my-zsh.sh53# Set ZSH_CUSTOM to the path where your custom config files
LOWoh-my-zsh.sh57# Set ZSH_CACHE_DIR to the path where cache files should be created
LOWtools/check_for_upgrade.sh214 # Check if there are updates available before proceeding
LOWtools/install.sh89 # Check if sudo is installed
LOWtools/install.sh428 # Check if we're running on Termux
LOWtools/install.sh466 # Check if user has sudo privileges to run `chsh` with or without `sudo`
LOWtools/install.sh482 # Check if the shell change was successful
LOWtools/upgrade.sh246 # Check if it was really updated or not
LOWtools/require_tool.sh13 # Set d1 to be the next thing to compare from v1, and likewise for d2.
LOWplugins/autoenv/autoenv.plugin.zsh5 # Check if activate.sh is in $PATH
LOW…/history-substring-search/history-substring-search.zsh127 # Check if $1 denotes the name of a callable function, i.e. it is fully
LOW…/history-substring-search/history-substring-search.zsh434 # Check if the UP arrow was pressed to move the cursor within a multi-line
LOW…/history-substring-search/history-substring-search.zsh463 # Check if the DOWN arrow was pressed to move the cursor within a multi-line
LOWplugins/python/python.plugin.zsh27 # Check if command exists
LOWplugins/emoji/update_emoji.py183 # Check if there is an alias available in the Gemoji DB
LOWplugins/wd/wd.sh270 # Check if fzf is installed
LOWplugins/wd/wd.sh281 # Check if config file exists
LOWplugins/wd/wd.sh324 # Check if config file exists
LOWplugins/emacs/emacsclient.sh13 # Check if there are suitable frames
LOWplugins/ssh-agent/ssh-agent.plugin.zsh5 # Check if ssh-agent is already running
LOWplugins/vim-interaction/vim-interaction.plugin.zsh51 # Open files passed (:A means abs path resolving symlinks, :q means quoting special chars)
LOWplugins/mercurial/mercurial.plugin.zsh99 # Check if there are modifications
LOWplugins/tmux/tmux.plugin.zsh20# Set term to screen or screen-256color based on current terminal support
LOWplugins/nestjs/nestjs.plugin.zsh3# Check if nest command exists
LOWplugins/sudo/sudo.plugin.zsh58 # Check if the typed command is really an alias to $EDITOR
LOWplugins/vscode/vscode.plugin.zsh8# Verify if any manual user choice of VS Code exists first.
LOWplugins/drush/drush.complete.sh27 # Set DRUSH_PS1_SHOWCOLORHINTS to a non-empty value and define a
LOWplugins/drush/drush.complete.sh40 # Set IFS to newline (locally), since we only use newline separators, and
LOWplugins/bundler/bundler.plugin.zsh59# Check if in the root or a subdirectory of a bundled project
LOWplugins/git/git.plugin.zsh76 # Check if a commit without "--wip--" was found and it's not the same as HEAD
LOWplugins/cake/cake.plugin.zsh1# Set this to 1 if you want to cache the tasks
LOWlib/async_prompt.zsh61 # Close the file descriptor and remove the handler
LOWlib/git.zsh164 # Check if git_prompt_info is used in a prompt variable
LOWlib/cli.zsh510 # Check if its a valid plugin
LOWlib/cli.zsh519 # Check if it has completion to reload compinit
LOWlib/cli.zsh566 # Check if there are PR branches
LOWlib/cli.zsh630 # Check if Pull Request has the "testers needed" label
LOWlib/cli.zsh645 # Check if the label is present with jq or grep
LOWlib/cli.zsh886 # Check if git command is available
LOWlib/cli.zsh892 # Check if --unattended was passed
Self-Referential Comments15 hits · 42 pts
SeverityFileLineSnippet
MEDIUMplugins/gitfast/git-completion.bash70# The following functions are meant to modify COMPREPLY, which should not be
MEDIUMplugins/gitfast/git-completion.bash331# This function is equivalent to
MEDIUMplugins/gitfast/git-completion.bash3426# The following function is based on code from:
MEDIUMplugins/debian/debian.plugin.zsh151# Create a basic .deb package
MEDIUMplugins/symfony6/symfony6.plugin.zsh3# This file is part of the Symfony package.
MEDIUM…/history-substring-search/history-substring-search.zsh153 # The following code is based on the zsh-syntax-highlighting plugin.
MEDIUMplugins/python/python.plugin.zsh90# Create a new virtual environment using the specified name.
MEDIUMplugins/meteor/meteor.plugin.zsh10alias mc='meteor create' # Create a new project.
MEDIUMplugins/safe-paste/safe-paste.plugin.zsh34# Create a new keymap to use while pasting
MEDIUMplugins/emoji/update_emoji.py20# This file is auto-generated by update_emoji.py. Do not edit it manually.
MEDIUMplugins/emoji/emoji-char-definitions.zsh4# This file is auto-generated by update_emoji.py. Do not edit it manually.
MEDIUMplugins/emacs/emacsclient.sh29 # Create a tempfile to hold stdin
MEDIUMplugins/extract/extract.plugin.zsh45 # Create an extraction directory based on the file name
MEDIUMplugins/ubuntu/ubuntu.plugin.zsh60# Create a basic .deb package
MEDIUM.github/workflows/dependencies/updater.py281 # Create a GitHub issue to notify maintainer
AI Slop Vocabulary6 hits · 14 pts
SeverityFileLineSnippet
LOWplugins/gitfast/git-prompt.sh362 # simply return early if the prompt should not
LOWplugins/debian/debian.plugin.zsh2# You can just set apt_pref='apt-get' to override it.
LOW…/history-substring-search/history-substring-search.zsh618 # returns whether any more matches were available, so just return
MEDIUMplugins/emoji/emoji.plugin.zsh23# These additional emoji are not in the definition file, but are useful in conjunction with it
MEDIUMplugins/vi-mode/vi-mode.plugin.zsh123 # See zsh-autosuggestions.zsh for a more generic and more robust wrapper
MEDIUMlib/diagnostics.zsh52# * Consider whether to move default output file location to TMPDIR. More robust
Example Usage Blocks9 hits · 14 pts
SeverityFileLineSnippet
LOWplugins/debian/debian.plugin.zsh172# Usage:
LOWplugins/forklift/forklift.plugin.zsh7# Usage:
LOWplugins/pip/pip.plugin.zsh1# Usage:
LOWplugins/ubuntu/ubuntu.plugin.zsh83# Usage:
LOWlib/diagnostics.zsh9# Usage:
LOWlib/clipboard.zsh25# Usage:
LOWlib/clipboard.zsh35# Usage:
LOWlib/functions.zsh168# Usage:
LOWlib/functions.zsh252# Usage:
Slop Phrases5 hits · 10 pts
SeverityFileLineSnippet
LOWtools/uninstall.sh41echo "Don't forget to restart your terminal!"
MEDIUMplugins/gitfast/git-completion.bash28# If you use complex aliases of form '!f() { ... }; f', you can use the null
MEDIUMplugins/gitfast/git-completion.bash35# like completion, you can use __git_complete:
LOWplugins/opentofu/opentofu.plugin.zsh18 # make sure to escape % signs in the workspace name to prevent command injection
LOWplugins/opentofu/opentofu.plugin.zsh26 # make sure to escape % signs in the version string to prevent command injection
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippet
HIGHplugins/gitfast/git-completion.bash1383# logic, as requested by the user.
Cross-Language Confusion1 hit · 2 pts
SeverityFileLineSnippet
HIGH.github/workflows/dependencies/updater.py244 Git.push(branch)
Unused Imports2 hits · 2 pts
SeverityFileLineSnippet
LOWplugins/git-prompt/gitstatus.py2
LOWplugins/aliases/termcolor.py26
Excessive Try-Catch Wrapping2 hits · 2 pts
SeverityFileLineSnippet
MEDIUM.github/workflows/dependencies/updater.py270 print(f"Error copying files: {e}", file=sys.stderr)
LOW.github/workflows/dependencies/updater.py294 except Exception as e:
Hyper-Verbose Identifiers2 hits · 1 pts
SeverityFileLineSnippet
LOW.github/workflows/dependencies/updater.py147 def update_dependency_version(path: str, version: str) -> DependencyYAML:
LOW.github/workflows/dependencies/updater.py368 def checkout_or_create_branch(branch_name: str):
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippet
LOW.github/workflows/dependencies/updater.py201