{"id":16593555,"url":"https://github.com/mattmc3/zsh_unplugged","last_synced_at":"2025-04-05T15:08:40.497Z","repository":{"id":43957549,"uuid":"426250151","full_name":"mattmc3/zsh_unplugged","owner":"mattmc3","description":" 🤔 perhaps you don't need a Zsh plugin manager after all...","archived":false,"fork":false,"pushed_at":"2024-06-20T13:24:01.000Z","size":164,"stargazers_count":374,"open_issues_count":0,"forks_count":19,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-10-12T23:27:05.842Z","etag":null,"topics":["extensions","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mattmc3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-09T13:58:40.000Z","updated_at":"2024-10-11T16:00:58.000Z","dependencies_parsed_at":"2024-01-03T04:15:21.042Z","dependency_job_id":"ca45c463-570a-4a93-8575-365046c77835","html_url":"https://github.com/mattmc3/zsh_unplugged","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattmc3%2Fzsh_unplugged","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattmc3%2Fzsh_unplugged/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattmc3%2Fzsh_unplugged/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattmc3%2Fzsh_unplugged/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mattmc3","download_url":"https://codeload.github.com/mattmc3/zsh_unplugged/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247353746,"owners_count":20925329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extensions","zsh"],"created_at":"2024-10-11T23:27:11.661Z","updated_at":"2025-04-05T15:08:40.466Z","avatar_url":"https://github.com/mattmc3.png","language":"Shell","funding_links":[],"categories":["Frameworks"],"sub_categories":["[zsh-dot-plugin](https://github.com/DuckzCantFly/zsh-dot-plugin)","\u003cb\u003e\u003ccode\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;6⭐\u003c/code\u003e\u003c/b\u003e \u003cb\u003e\u003ccode\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;2🍴\u003c/code\u003e\u003c/b\u003e [zsh-dot-plugin](https://github.com/DuckzCantFly/zsh-dot-plugin))"],"readme":"# zsh_unplugged\n\n\u003e 🤔 perhaps you don't need a Zsh plugin manager after all...\n\nTLDR; You don't need a big bloated plugin manager for your Zsh plugins. A simple\n~20 line function may be all you need.\n\nClick here to [skip to the code](#jigsaw-the-humble-plugin-load-function).\n\n## :electric_plug: Zsh Plugin Managers\n\n### :newspaper_roll: Current state\n\nThere are an embarrassingly large number of Zsh plugin managers out there. Many of them\nare abandonware, are no longer actively developed, are brand new without many users, or\ndon't have much reason to even exist other than as a novelty.\n\nHere's a list of many (but certainly not all) of them from [awesome-zsh-plugins]:\n\n| Zsh Plugin Manager | Performance        | Current state                                   |\n|--------------------|--------------------|-------------------------------------------------|\n| [antibody]         | :rabbit2: fast     | :imp: Maintenance mode, no new features         |\n| [antigen]          | :turtle: slow      | :imp: Maintenance mode, no new features         |\n| [antidote]         | :rabbit2: fast     | :white_check_mark: Active                       |\n| [sheldon]          | :question: unknown | :white_check_mark: Active                       |\n| [zcomet]           | :rabbit2: fast     | :white_check_mark: Active                       |\n| [zgem]             | :question: unknown | :skull_and_crossbones: Abandonware              |\n| [zgen]             | :rabbit2: fast     | :skull_and_crossbones: Abandonware              |\n| [zgenom]           | :rabbit2: fast     | :white_check_mark: Active                       |\n| [zinit-continuum]  | :rabbit2: fast     | :white_check_mark: Active [\\*][#1]              |\n| [zinit]            | :rabbit2: fast     | :cursing_face: Author deleted project           |\n| [zit]              | :question: unknown | :imp: Few/no recent commits                     |\n| [znap]             | :rabbit2: fast     | :white_check_mark: Active                       |\n| [zplug]            | :turtle: slow      | :skull_and_crossbones: Abandonware              |\n| [zplugin][zinit]   | :rabbit2: fast     | :cursing_face: Renamed to zinit, author deleted |\n| [zpm]              | :rabbit2: fast     | :white_check_mark: Active                       |\n| [zr]               | :rabbit2: fast     | :imp: Complete, bugfixes welcome                |\n\n_Full disclosure, I'm the author of one of these - [antidote] (formerly called [pz])._\n\nThere's new ones popping up all the time too:\n\n| Zsh Plugin Manager | Performance        | Current state        |\n|--------------------|--------------------|----------------------|\n| [mzpm]             | :question: unknown | :hatching_chick: New |\n| [tzpm]             | :question: unknown | :hatching_chick: New |\n| [uz]               | :question: unknown | :hatching_chick: New |\n| [zed]              | :question: unknown | :hatching_chick: New |\n\n### :firecracker: The catalyst\n\nIn January 2021, the plugin manager I was using, [antibody], was deprecated.\nThe author even [went so far as to say](https://github.com/getantibody/antibody/tree/2ca7616ae78754c0ab70790229f5d19be42206e9):\n\n\u003e Most of the other plugin managers catch up on performance, thus keeping this \\[antibody] does not make sense anymore.\n\nPrior to that, I used [zgen], which also stopped being actively developed and the\n[developer](https://github.com/tarjoilija) seems to have disappeared. (_Shoutout\nto @jandamm for carrying on Zgen with [Zgenom](https://github.com/jandamm/zgenom)!_)\n\nIn November 2021, a relatively well known and popular Zsh plugin manager, zinit, was\nremoved from GitHub entirely and without warning. In fact, the author\n[deleted almost his entire body of work][zdharma-debacle]. Zinit was really popular\nbecause it was super fast, and the author promoted his projects in multiple venues\nfor many years. (_Shoutout to [zdharma-continuum] for carrying on with zinit!_)\n\nWith all the instability in the Zsh plugin manager space, it got me wondering why I\neven bother with a plugin manager at all.\n\n### :bulb: The simple idea\n\nAfter [antibody] was deprecated, I tried [znap], but it was in early development at the\ntime and kept breaking, so like many others before me, I decided to write my own - [antidote].\n\nWhen developing [antidote], my goal was simple - make a plugin manager\nthat was fast, functional, and easy to understand - which was everything I loved about\n[zgen] and [antibody]. While [antidote] is a great project, and I fully recommend it\nif you want to use a plugin manager, I kept wondering if I could cut further\ndown to a single _function_ and see what it would take to not use plugin management\nutilities altogether.\n\nThus was born... **zsh_unplugged**.\n\nThis isn't a plugin manager - it's a way to show you how to manage your own plugins\nusing small, easy to understand snippets of Zsh. All this with the thought that perhaps,\nonce-and-for-all, we can demystify what plugin managers do. And for basic configs do\naway with using a plugin manager altogether and simply do it ourselves.\n\nYou can grab a ~20 line function and you have everything you need to manage your own\nplugins from here on out. By way of contrast, I ran [scc](https://github.com/boyter/scc)\nagainst the zinit project which comes out to thousands of lines of Zsh code, along with\nthousands of lines in supporting project files.\\*!\n\n```zsh\n$ zinit_tmpdir=$(mktemp -d)\n$ git clone --depth 1 https://github.com/zdharma-continuum/zinit $zinit_tmpdir\n$ git -C $zinit_tmpdir rev-parse --short HEAD\n1375adf8\n$ scc --no-cocomo $zinit_tmpdir\n$ test -d $zinit_tmpdir \u0026\u0026 rm -rf -- $zinit_tmpdir\n```\n\nResults:\n```text\n───────────────────────────────────────────────────────────────────────────────\nLanguage                 Files     Lines   Blanks  Comments     Code Complexity\n───────────────────────────────────────────────────────────────────────────────\nYAML                        16       643       84        78      481          0\nZsh                         14     10971      937      1352     8682       1782\nAsciiDoc                     6      5375     1746         0     3629          0\nMarkdown                     6      2251      603         0     1648          0\nShell                        3       674       84        56      534         60\nMakefile                     2       111       27        12       72          7\nSVG                          2       683        2         2      679          0\nDocker ignore                1        10        1         0        9          0\nDockerfile                   1        41        9         2       30          8\nJSON                         1        47        0         0       47          0\nLicense                      1        22        4         0       18          0\ngitignore                    1        24        0         0       24          0\n───────────────────────────────────────────────────────────────────────────────\nTotal                       54     20852     3497      1502    15853       1857\n───────────────────────────────────────────────────────────────────────────────\nProcessed 816700 bytes, 0.817 megabytes (SI)\n───────────────────────────────────────────────────────────────────────────────\n```\n\n\\**Note: SLOC is not intended as anything more here than a rough comparison of effort, maintainability, and complexity*\n\n## :tada: The code\n\n### :gear: The bare metal way\n\nIf you don't want to use anything resembling a plugin manager at all, you could simply\nclone and source plugins yourself manually:\n\n```zsh\nZPLUGINDIR=$HOME/.zsh/plugins\n\nif [[ ! -d $ZPLUGINDIR/zsh-autosuggestions ]]; then\n  git clone https://github.com/zsh-users/zsh-autosuggestions \\\n            $ZPLUGINDIR/zsh-autosuggestions\nfi\nsource $ZPLUGINDIR/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh\n\nif [[ ! -d $ZPLUGINDIR/zsh-history-substring-search ]]; then\n  git clone https://github.com/zsh-users/zsh-history-substring-search \\\n            $ZPLUGINDIR/zsh-history-substring-search\nfi\nsource $ZPLUGINDIR/zsh-history-substring-search/zsh-history-substring-search.plugin.zsh\n\nif [[ ! -d $ZPLUGINDIR/z ]]; then\n  git clone https://github.com/rupa/z \\\n            $ZPLUGINDIR/z\nfi\nsource $ZPLUGINDIR/z/z.sh\n```\n\nThis can get pretty repetitive, cumbersome, and tricky to maintain. You need to figure out\neach plugin's init file, and sometimes adding a plugin to your `fpath` is required. While\nthis method works, there's another way...\n\n### :jigsaw: The humble `plugin-load` function\n\nIf we go one level of abstraction higher than manually calling `git clone`, we can\nuse a simple function as the basis for everything you need to manage Zsh plugins:\n\n```zsh\n##? Clone a plugin, identify its init file, source it, and add it to your fpath.\nfunction plugin-load {\n  local repo plugdir initfile initfiles=()\n  : ${ZPLUGINDIR:=${ZDOTDIR:-~/.config/zsh}/plugins}\n  for repo in $@; do\n    plugdir=$ZPLUGINDIR/${repo:t}\n    initfile=$plugdir/${repo:t}.plugin.zsh\n    if [[ ! -d $plugdir ]]; then\n      echo \"Cloning $repo...\"\n      git clone -q --depth 1 --recursive --shallow-submodules \\\n        https://github.com/$repo $plugdir\n    fi\n    if [[ ! -e $initfile ]]; then\n      initfiles=($plugdir/*.{plugin.zsh,zsh-theme,zsh,sh}(N))\n      (( $#initfiles )) || { echo \u003e\u00262 \"No init file '$repo'.\" \u0026\u0026 continue }\n      ln -sf $initfiles[1] $initfile\n    fi\n    fpath+=$plugdir\n    (( $+functions[zsh-defer] )) \u0026\u0026 zsh-defer . $initfile || . $initfile\n  done\n}\n```\n\nThat's it. ~20 lines of code and you have a simple, robust Zsh plugin management\nalternative that is likely as fast as most everything else out there.\n\nWhat this does is simply clones a Zsh plugin's git repository, and then examines that\nrepo for an appropriate .zsh file to use as an init script. We then find and symlink\nthe plugin's init file if necessary, which allows us to get close to the performance\nadvantage of static sourcing rather than searching for which plugin file to load every\ntime we open a new terminal.\n\nThen, the plugin is sourced and added to `fpath`.\n\nYou can even get turbocharged-hypersonic-load-speed-magic :rocket: if you really need\nevery last bit of performance.\n[See how here](#question-how-do-i-load-my-plugins-with-hypersonic-speed-rocket).\n\n### :question: How do you use this in your own Zsh config?\n\nYou are free to grab the `plugin-load` function above and put it directly in your\n.zshrc, maintain it yourself, and never rely on anyone else's plugin manager again. Or,\nthis repo makes the plugin-load function available as a plugin itself if you prefer.\nHere's an example .zshrc:\n\n```zsh\n# where do you want to store your plugins?\nZPLUGINDIR=${ZPLUGINDIR:-${ZDOTDIR:-$HOME/.config/zsh}/plugins}\n\n# get zsh_unplugged and store it with your other plugins\nif [[ ! -d $ZPLUGINDIR/zsh_unplugged ]]; then\n  git clone --quiet https://github.com/mattmc3/zsh_unplugged $ZPLUGINDIR/zsh_unplugged\nfi\nsource $ZPLUGINDIR/zsh_unplugged/zsh_unplugged.zsh\n\n# make list of the Zsh plugins you use\nrepos=(\n  # plugins that you want loaded first\n  sindresorhus/pure\n\n  # other plugins\n  zsh-users/zsh-completions\n  rupa/z\n  # ...\n\n  # plugins you want loaded last\n  zsh-users/zsh-syntax-highlighting\n  zsh-users/zsh-history-substring-search\n  zsh-users/zsh-autosuggestions\n)\n\n# now load your plugins\nplugin-load $repos\n```\n\nHere is an sample [.zshrc](https://github.com/mattmc3/zsh_unplugged/blob/main/examples/zshrc.zsh).\n\n### :question: Could I use this to make a micro-zsh-plugin-manager?\n\nYes! This project uses the [unlicense](https://unlicense.org/). Feel free to use this\ncode anywhere. Or, if you prefer to use something already built and supported, this\nproject includes its own implemetation of a micro plugin manager in the\n[antidote.lite.zsh](antidote.lite.zsh) file. It's ~100 lines of code.\n\nYou can view a full featured example of using zsh_unplugged in the\n[full_featured.zsh example file](examples/full_featured.zsh).\n\n### :question: How do I update my plugins?\n\nUpdating your plugins is as simple as deleting the $ZPLUGINDIR and reloading Zsh.\n\n```zsh\nZPLUGINDIR=~/.config/zsh/plugins\nrm -rfi $ZPLUGINDIR\nzsh\n```\n\nIf you are comfortable with `git` commands and prefer to not rebuild everything, you\ncan run `git pull` yourself, or even use a simple `plugin-update` function:\n\n```zsh\nfunction plugin-update {\n  ZPLUGINDIR=${ZPLUGINDIR:-$HOME/.config/zsh/plugins}\n  for d in $ZPLUGINDIR/*/.git(/); do\n    echo \"Updating ${d:h:t}...\"\n    command git -C \"${d:h}\" pull --ff --recurse-submodules --depth 1 --rebase --autostash\n  done\n}\n```\n\n### :question: How do I list my plugins?\n\nYou can see what plugins you have installed with a simple `ls` command:\n\n```zsh\nls $ZPLUGINDIR\n```\n\nIf you need something fancier and would like to see the git origin of your plugins, you\ncould run this command:\n\n```zsh\nfor d in $ZPLUGINDIR/*/.git; do\n  git -C \"${d:h}\" remote get-url origin\ndone\n```\n\n### :question: How do I remove a plugin?\n\nYou can just remove it from your `plugins` list in your .zshrc. To delete it\naltogether, feel free to run `rm`:\n\n```zsh\n# remove the fast-syntax-highlighting plugin\nrm -rfi $ZPLUGINDIR/fast-syntax-highlighting\n```\n\n### :question: How do I load my plugins with hypersonic speed :rocket:?\n\nYou can get turbocharged-hypersonic-load-speed-magic if you choose to use the\n[romkatv/zsh-defer](https://github.com/romkatv/zsh-defer) plugin. Essentially, if you\nadd `romkatv/zsh-defer` to your plugins list, everything you load afterwards will use\nzsh-defer, meaning you'll get speeds similar to zinit's [turbo mode](https://github.com/zdharma-continuum/zinit#turbo-and-lucid).\n\nNotably, if you like the [zsh-abbr] plugin for fish-like abbreviations in Zsh,\nusing zsh-defer [will boost performance greatly](https://github.com/olets/zsh-abbr/issues/52).\n\n:warning: Warning - the author of zsh-defer does not recommend using the plugin this\nway, so be careful and selective about which plugins you load with zsh-defer. If you\nget weird behavior from a plugin, then load it before zsh-defer. In my extensive\ntesting, the biggest benefit came only from especially sluggish plugins like [zsh-abbr].\n\n### :question: What if I need to customize how a plugin is loaded?\n\nYou can separate the clone and load actions into two separate functions, allowing you\nto further customize how you handle plugins. This technique is especially useful if you\nare using a project like [zsh-utils] with nested plugins, or using utilities like\n[zsh-bench] which aren't plugins.\n\n```zsh\n# declare a simple plugin-clone function, leaving the user to source plugins themselves\nfunction plugin-clone {\n  local repo plugdir initfile initfiles=()\n  ZPLUGINDIR=${ZPLUGINDIR:-${ZDOTDIR:-$HOME/.config/zsh}/plugins}\n  for repo in $@; do\n    plugdir=$ZPLUGINDIR/${repo:t}\n    initfile=$plugdir/${repo:t}.plugin.zsh\n    if [[ ! -d $plugdir ]]; then\n      echo \"Cloning $repo...\"\n      git clone -q --depth 1 --recursive --shallow-submodules \\\n        https://github.com/$repo $plugdir\n    fi\n    if [[ ! -e $initfile ]]; then\n      initfiles=($plugdir/*.{plugin.zsh,zsh-theme,zsh,sh}(N))\n      (( $#initfiles )) \u0026\u0026 ln -sf $initfiles[1] $initfile\n    fi\n  done\n}\n\n# now, plugin-source is a separate thing\nfunction plugin-source {\n  local plugdir\n  ZPLUGINDIR=${ZPLUGINDIR:-${ZDOTDIR:-$HOME/.config/zsh}/plugins}\n  for plugdir in $@; do\n    [[ $plugdir = /* ]] || plugdir=$ZPLUGINDIR/$plugdir\n    fpath+=$plugdir\n    local initfile=$plugdir/${plugdir:t}.plugin.zsh\n    (( $+functions[zsh-defer] )) \u0026\u0026 zsh-defer . $initfile || . $initfile\n  done\n}\n```\n\nYou can then use these two functions like so:\n\n```zsh\n# make a list of github repos\nrepos=(\n  # not-sourcable plugins\n  romkatv/zsh-bench\n\n  # projects with nested plugins\n  belak/zsh-utils\n  ohmyzsh/ohmyzsh\n\n  # regular plugins\n  zsh-users/zsh-autosuggestions\n  zsh-users/zsh-history-substring-search\n  zdharma-continuum/fast-syntax-highlighting\n)\nplugin-clone $repos\n\n# zsh-bench doesn't have a plugin file\n# it just needs added to your $PATH\nexport PATH=\"$ZPLUGINDIR/zsh-bench:$PATH\"\n\n# Oh-My-Zsh plugins rely on stuff in its lib directory\nZSH=$ZPLUGINDIR/ohmyzsh\nfor _f in $ZSH/lib/*.zsh; do\n  source $_f\ndone\nunset _f\n\n# source other plugins\nplugins=(\n  zsh-utils/history\n  zsh-utils/complete\n  zsh-utils/utility\n  ohmyzsh/plugins/magic-enter\n  ohmyzsh/plugins/history-substring-search\n  ohmyzsh/plugins/z\n  fast-syntax-highlighting\n  zsh-autosuggestions\n)\nplugin-source $plugins\n```\n\nHere is a sample [.zshrc](https://github.com/mattmc3/zsh_unplugged/blob/main/examples/zshrc_clone.zsh).\n\n### :question: What if I want my plugins to be even faster?\n\nIf you are an experienced Zsh user, you may know about [zcompile], which takes your\nZsh scripts and potentially speeds them up by compiling them to byte code. If you feel\nconfident you know what you're doing and want to eek every last bit of performance out\nof your Zsh, you can use this function:\n\n```zsh\nfunction plugin-compile {\n  ZPLUGINDIR=${ZPLUGINDIR:-$HOME/.config/zsh/plugins}\n  autoload -U zrecompile\n  local f\n  for f in $ZPLUGINDIR/**/*.zsh{,-theme}(N); do\n    zrecompile -pq \"$f\"\n  done\n}\n```\n\n### :question: How can I use this with Zsh frameworks like Oh-My-Zsh or Prezto?\n\n[Oh-My-Zsh][ohmyzsh] and [Prezto][prezto] have their own built-in methods for loading\nplugins, they just don't come with a way to clone them. You don't need the zsh_unplugged\nscript if you are using those frameworks. However, you also don't need a separate plugin\nmanager utility. Here's how you handle cloning yourself and go plugin-manager-free with\nZsh frameworks:\n\n#### Oh-My-Zsh\n\nIf you are using [Oh-My-Zsh][ohmyzsh], the way to go without a plugin manager would be\nto utilize the `$ZSH_CUSTOM` path.\n\n_Note that this assumes your init file is called {plugin_name}.plugin.zsh which may not\nbe true._\n\n```zsh\n# .zshrc\n# don't call this list 'plugins' since omz uses that\nrepos=(\n  marlonrichert/zsh-hist\n  zsh-users/zsh-syntax-highlighting\n  zsh-users/zsh-autosuggestions\n)\nfor repo in $repos; do\n  if [[ ! -d $ZSH_CUSTOM/${repo:t} ]]; then\n    git clone https://github.com/${repo} $ZSH_CUSTOM/plugins/${repo:t}\n  fi\ndone\nunset repo{s,}\n\n# add your external plugins to your OMZ plugins list\nplugins=(\n  ...\n  zsh-hist\n  zsh-autosuggestions\n  ...\n  zsh-syntax-highlighting\n)\n```\n\n#### Prezto\n\nIf you are using [Prezto][prezto], the way to go without a plugin manager would be to\nutilize the `$ZPREZTODIR/contrib` path.\n\n_Note that this assumes your init file is called {plugin_name}.plugin.zsh which may not\nbe true._\n\n```zsh\n# .zshrc\ncontribs=(\n  rupa/z\n  marlonrichert/zsh-hist\n  mattmc3/zman\n)\nfor contrib in $contribs; do\n  if [[ ! -d $ZPREZTODIR/contrib/${contrib:t} ]]; then\n    git clone https://github.com/${contrib} $ZPREZTODIR/contrib/${contrib:t}\n  fi\ndone\nunset contrib{,s}\n\n# add the contribs to your Prezto modules list in your `.zpreztorc`\nzstyle ':prezto:load' pmodule \\\n  ... \\\n  z \\\n  zsh-hist \\\n  ... \\\n  zman\n```\n\n[zinit-docs-reddit]: https://www.reddit.com/r/zsh/comments/mur6eu/anyone_interested_in_zinit_documentation/\n[awesome-zsh-plugins]: https://github.com/unixorn/awesome-zsh-plugins\n[zdharma-debacle]: https://www.reddit.com/r/zsh/comments/qinb6j/httpsgithubcomzdharma_has_suddenly_disappeared_i/\n[zdharma-continuum]: https://github.com/zdharma-continuum\n[zcompile]: https://github.com/antonio/zsh-config/blob/master/help/zcompile\n[antibody]: https://github.com/getantibody/antibody\n[antigen]: https://github.com/zsh-users/antigen\n[mzpm]: https://github.com/xylous/mzpm\n[antidote]: https://github.com/mattmc3/antidote\n[pz]: https://github.com/mattmc3/antidote/tree/pz\n[sheldon]: https://github.com/rossmacarthur/sheldon\n[tzpm]: https://github.com/notusknot/tzpm\n[uz]: https://github.com/maxrodrigo/uz\n[zcomet]: https://github.com/agkozak/zcomet\n[zed]: https://github.com/MunifTanjim/zed\n[zgem]: https://github.com/qoomon/zgem\n[zgen]: https://github.com/tarjoilija/zgen\n[zgenom]: https://github.com/jandamm/zgenom\n[zinit-continuum]: https://github.com/zdharma-continuum/zinit\n[zinit]: https://github.com/zdharma/zinit\n[zit]: https://github.com/thiagokokada/zit\n[znap]: https://github.com/marlonrichert/zsh-snap\n[zplug]: https://github.com/zplug/zplug\n[zpm]: https://github.com/zpm-zsh/zpm\n[zr]: https://github.com/jedahan/zr\n[#1]: https://github.com/mattmc3/zsh_unplugged/issues/1\n[ohmyzsh]: https://github.com/ohmyzsh/ohmyzsh\n[prezto]: https://github.com/sorin-ionescu/prezto\n[pure]: https://github.com/sindresorhus/pure\n[zsh-abbr]: https://github.com/olets/zsh-abbr\n[zsh-utils]: https://github.com/belak/zsh-utils\n[zsh-bench]: https://github.com/romkatv/zsh-bench\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattmc3%2Fzsh_unplugged","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattmc3%2Fzsh_unplugged","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattmc3%2Fzsh_unplugged/lists"}