Compare commits

..
Author SHA1 Message Date
copilot-swe-agent[bot]androbbyrussell 61f12e078f fix(vcs_info): avoid undefining wrapper during load transition
Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com>
2026-09-06 15:56:08 +00:00
copilot-swe-agent[bot]androbbyrussell e4172614e8 fix(vcs_info): keep lazy wrapper recoverable on autoload failure
Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com>
2026-09-06 15:55:21 +00:00
copilot-swe-agent[bot]androbbyrussell 3fe8d6d6af fix(vcs_info): preserve preloaded VCS_INFO_formats when patching
Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com>
2026-09-06 15:54:56 +00:00
Robby RussellandClaude Fable 5.1 a0fa610df3 perf(vcs_info): apply the %-quoting patch on first use
lib/vcs_info.zsh loaded VCS_INFO_formats and regexp-replace and patched
the function body on every startup, although only themes that call
vcs_info ever need it. Define a VCS_INFO_formats wrapper that loads and
patches the real function the first time it's called, then replaces
itself with it. `autoload` doesn't override an existing function, so
the wrapper survives a theme's `autoload -Uz vcs_info` and vcs_info's
own autoload of VCS_INFO_*.

Verified that a branch named `evil%n%m` still renders literally after
prompt expansion, as with the eager patch (CVE-2021-45444 mitigation).
Measured on macOS arm64, zsh 5.9: 1.6 ms -> 0.1 ms per interactive
start.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 08:14:53 -07:00
Jérôme Tamarelle 426650fbe8 fix(symfony6): don't run command substitutions on tab completion (#14058)
The plugin is a copy of the completion script shipped by symfony/console.
It has not been updated since it was added, and two fixes made upstream
since then are missing.

The completion request was assembled as a string from the raw words of
the command line, then passed to "eval". Any command substitution present
in a word was therefore executed by the completion, before the user
validated the line. The request is now run as an array of arguments,
without being read again by the shell, and "_describe" is called directly
instead of through "eval". The alias of the command is resolved
explicitly, since that was the only useful effect of the "eval".

The request also runs with SHELL_VERBOSITY=0, so that completion keeps
working for users who exported SHELL_VERBOSITY=-1.

Ported from symfony/symfony#65818 and symfony/symfony#63859.
2026-09-06 07:02:47 -07:00
Robby RussellandMoulick Aggarwal 8a5b393088 feat(kubectl): add kesec alias for editing secrets (#14048)
Secret was the only resource in the plugin with get, describe and delete
aliases but no edit alias, while thirteen other resource types have one.

Closes #8309

Co-authored-by: Moulick Aggarwal <Moulick@users.noreply.github.com>
2026-09-05 23:04:08 -03:00
Josh McKinney 87d4d40418 feat(jj): Add common jj aliases (#13962) 2026-09-05 14:36:14 -07:00
Ting-An Chen 593e8ed6c8 fix(poetry-env): preserve venv in project subdirectories (#13932)
* fix(poetry-env): preserve venv in project subdirectories

Keep the active environment while navigating ordinary project children, but switch when entering a nested Poetry project.

Use a path-component boundary so similarly named sibling projects are not mistaken for subdirectories.

Fixes #12377

* fix(poetry-env): normalize active project root
2026-09-05 12:41:40 -07:00
Morningstar202604 747123823c fix(pipenv): keep activation and the project directory in sync (#14021)
* fix(pipenv): don't activate or leak errors when virtualenv is missing

* fix(pipenv): compare whole path components when deactivating

$PWD
$pipfile_dir is a string-prefix test, so moving from a project to an
unrelated sibling whose path merely starts with the same text (…/proj ->
…/proj-archive, …/projX) does not deactivate: the project's virtualenv
stays active in a directory that has no Pipfile. Require an exact match or
a component boundary instead. Subdirectories of the project keep their
current behaviour, and a project at / still matches everything.
2026-09-05 12:13:51 -07:00
Rasmus Skovgaard Lauritsen daaa103cec feat(gcx): add completion plugin for Grafana's gcx (#13950)
* feat(gcx): add completion plugin

* fix(gcx): write completion cache atomically
2026-09-05 11:19:45 -07:00
Gore Williams 4bdcaad01a feat(ruff): add plugin for Asral's ruff (#13604) 2026-09-05 11:14:48 -07:00
FazleArefin 5b5265d677 feat(uv-env): add plugin for Astral's uv (#13914)
* feat(uv-env): create plugin

This plugin automatically activates/deactivates a uv-managed virtual
environment when you cd into or out of a project directory. It looks
for pyproject.toml and uv.lock to detect a uv project, and reads
UV_PROJECT_ENVIRONMENT to support custom venv locations.

* fix(uv-env): address review feedback from robbyrussell

- Add `local` to venv_dir to prevent leaking into user's shell
- Replace `export` with `typeset -g` for uv_active and uv_dir
- Use `autoload -Uz` to match the style guide
2026-09-05 11:13:45 -07:00
Johan Hammar 421d95782d feat(vagrant): Add vagrant box prune command (#5946) 2026-09-04 16:38:16 -07:00
Raihan Firdaus 7079eaf80d feat: update laravel.plugin add make:view and update README.md (#13674) 2026-09-04 16:18:53 -07:00
Morningstar202604 b842e5e63e fix(aws): send asr() error message to stderr and reset terminal color (#14027)
asp() already writes its "profile not found" error to stderr and ends
with ${reset_color}; asr() printed its region error to stdout without a
reset, leaving the terminal red and mixing diagnostics into piped output.

Mirror asp() so both selection helpers behave the same.

Refs #13949
2026-09-04 15:25:14 -07:00
blag c76b3002b6 Sublime Merge plugin: Add an smerge alias to complement the similar alias in the Sublime Text plugin (#13930) 2026-09-04 14:49:54 -07:00
Matt CampbellandCarlo Sala 3f84a2ae4a fix(ssh-agent): create screen/tmux symlink atomically (#14035)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-09-04 08:19:10 -03:00
Mohammad Al ZouabiandCarlo Sala 9112b53fa8 fix(mise): activate using ~/.local/bin/mise (#13984)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-09-01 09:21:54 +02:00
Maksym Tymoshyk a5ecff7560 fix(updater): silence git version check output (#14029) 2026-08-30 19:16:06 +02:00
Maksym Tymoshyk 233ec5c507 fix(systemadmin): quote awk program in webtraffic (#14030) 2026-08-30 19:15:26 +02:00
Maksym Tymoshyk 91ad6c5c4c fix(git): restore git_develop_branch fallback in gbds (#14033) 2026-08-30 19:12:18 +02:00
Maksym Tymoshyk b5d75fc565 fix(cli): keep completion flag when loading multiple plugins (#14032) 2026-08-30 19:11:30 +02:00
Maksym Tymoshyk 44ce832bbd fix(diagnostics): correct reserved_words array name (#14031) 2026-08-30 19:10:57 +02:00
dependabot[bot] b23f11ce1e chore(deps): bump github/codeql-action/upload-sarif (#14034)
Bumps the gha-minor group with 1 update: [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/upload-sarif` from 4.37.7 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd...cdf488f595d80d6e07e03d4674febd5ab45fa938)

---
updated-dependencies:
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gha-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-30 19:07:00 +02:00
Miguel Hargreaves PimentaandRobby Russell 4b657407c9 feat(rails): support multi-database aliases (#13368)
Rails applications can define more than one database (`primary`, `cache`, `cable`, `queue`, ...), and each one gets its own namespaced task. These commands accept an optional database name as the first argument:

`rdc`, `rdd`, `rdm`, `rdmd`, `rdmr`, `rdms`, `rdmu`, `rdr`, `rdrs`, `rdsl`

Co-authored-by: Robby Russell <robby@planetargon.com>
2026-08-28 21:43:45 -03:00
Pavel R`andRobby Russell 9b26410d99 fix(eza): pass an explicit value to --hyperlink (#14024)
Since eza 0.23 `--hyperlink` is an option with an optional WHEN value
instead of a boolean flag, so a bare `--hyperlink` at the end of the
alias consumes the following argument:

    $ ll ./tmp
    error: invalid value './tmp' for '--hyperlink [<WHEN>]'
      [possible values: always, auto, never]

Pass `--hyperlink=auto` (mirroring how the plugin already handles
`--icons=auto`) when eza accepts it, and fall back to the bare flag on
older releases.

Co-authored-by: Robby Russell <robby@planetargon.com>
2026-08-28 21:36:04 -03:00
Fernando AraujoandFernando Silva 58f87ce1e9 feat(docker-compose): add config alias (#13856)
* add docker compose config alias

* updated readme

* sorting :)

---------

Co-authored-by: Fernando Silva <fcasilva.nz@gmail.com>
2026-08-28 16:08:59 -07:00
Morningstar202604 146461f7c6 fix(git): force C locale only while matching status regexes (#14006) 2026-08-25 10:26:23 +02:00
ディレーン ec03bc620c fix(docker): resolve completion path correctly (#14004)
Use `${0:A:h}` to get the absolute plugin directory path before entering
the anonymous function, where `$0` refers to the function itself. Store
it in a local variable to ensure the completion file path is resolved
correctly.

Fixes #14003
2026-08-24 13:33:49 -03:00
dependabot[bot] 67462daf46 chore(deps): bump step-security/harden-runner in the gha-minor group (#14002)
Bumps the gha-minor group with 1 update: [step-security/harden-runner](https://github.com/step-security/harden-runner).


Updates `step-security/harden-runner` from 2.20.1 to 2.21.0
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](https://github.com/step-security/harden-runner/compare/b09bb98e06d4d774595224525879c09bc6e98c40...05e31511f85b41b11d1cf0ef85d0992719546e2c)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gha-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 08:41:51 +02:00
dependabot[bot] effdcb7572 chore(deps): bump the py-minor group (#14001)
Bumps the py-minor group in /.github/workflows/dependencies with 2 updates: [charset-normalizer](https://github.com/jawah/charset_normalizer) and [idna](https://github.com/kjd/idna).


Updates `charset-normalizer` from 3.5.0 to 3.5.1
- [Release notes](https://github.com/jawah/charset_normalizer/releases)
- [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jawah/charset_normalizer/compare/3.5.0...3.5.1)

Updates `idna` from 3.18 to 3.19
- [Release notes](https://github.com/kjd/idna/releases)
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md)
- [Commits](https://github.com/kjd/idna/compare/v3.18...v3.19)

---
updated-dependencies:
- dependency-name: charset-normalizer
  dependency-version: 3.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: py-minor
- dependency-name: idna
  dependency-version: '3.19'
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: py-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-24 08:41:19 +02:00
Carlo SalaandMarc Cornellà 830a5bcfd2 fix: load completion files atomically (#14000)
Fixes #13964
 
Co-authored-by: Marc Cornellà <marc@mcornella.com>
2026-08-22 17:24:24 +02:00
P1bubandCarlo Sala d42209f2af fix(installer): prevent command injection via $USER in install.sh (#13960)
HOME="${HOME:-$(eval echo ~"$USER")}" expands any shell metacharacters in
$USER when HOME is unset (CWE-78), e.g. USER='x"; <command>; "'. Validate the
username against a safe character set before running the eval and fall back
to $PWD for unsafe values. Also quote $USER in the getent call to avoid word
splitting.

Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-08-20 10:43:07 +02:00
Josh McKinney 1b2b604c48 fix(core): add Ghostty OSC 8 support (#13961) 2026-08-20 10:18:07 +02:00
ohmyzsh[bot]andCarlo Sala 97e11051e2 chore(z): update to version 102fb780 (#13957)
* chore(z): update to 102fb780

* remove tests

* do not include tests

---------

Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com>
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-08-16 18:16:26 +02:00
dependabot[bot] 178813b7b9 chore(deps): bump charset-normalizer from 3.4.9 to 3.5.0 in /.github/workflows/dependencies in the py-minor group (#13958)
Signed-off-by: dependabot[bot] <support@github.com>
2026-08-16 18:13:24 +02:00
dependabot[bot] 0e98520c5b chore(deps): bump github/codeql-action/upload-sarif from 4.37.6 to 4.37.7 in the gha-minor group (#13959)
Signed-off-by: dependabot[bot] <support@github.com>
2026-08-16 18:13:07 +02:00
Jose Seabra b54a719775 feat(laravel): add pad alias (#13927) 2026-08-11 13:03:42 +02:00
Oleg Guba 1f9511f132 perf(kubectx)!: load context asynchronously (#13825)
BREAKING CHANGE: `kubectx_prompt_info` uses the async prompt API by default on supported zsh versions. Set async-prompt to no for synchronous behavior, or force it when calling it through a wrapper function. See the plugin README for details.
2026-08-11 12:38:52 +02:00
dependabot[bot] 97b27bb2ec chore(deps): bump the gha-minor group with 2 updates (#13926)
Bumps the gha-minor group with 2 updates: [step-security/harden-runner](https://github.com/step-security/harden-runner) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `step-security/harden-runner` from 2.20.0 to 2.20.1
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](https://github.com/step-security/harden-runner/compare/bf7454d06d71f1098171f2acdf0cd4708d7b5920...b09bb98e06d4d774595224525879c09bc6e98c40)

Updates `github/codeql-action/upload-sarif` from 4.37.4 to 4.37.6
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/f205ea1c3313d32999d8d6a48b4f6530d4437b38...5595ccaf912efad79be6eef63a5619ff05969be3)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.20.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gha-minor
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gha-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-09 15:17:48 +02:00
Copilotandcarlosala 99aaf58d00 fix(codex): redirect stdin from /dev/null in background completion generation (#13921)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: carlosala <66907184+carlosala@users.noreply.github.com>
2026-08-08 20:06:16 +02:00
Runrioter Wung 6f39351fef feat(codex): add plugin (#13757) 2026-08-07 10:58:15 +02:00
Rishvic PushpakaranandCarlo Sala 069512d14a feat(gitignore): add caching to gi completion (#13735)
Adds a cache policy for the `gi` command completion function, i.e.
`_gitignoreio`. Previously, every completion call would request the list
endpoint of gitignore.io over the network, resulting in a delay between
pressing <Tab> and the autocomplete options showing up.

Since we don't expect the gitignore.io templates to change that
frequently, configured the cache policy to expire after 7 days.

Signed-off-by: Rishvic Pushpakaran <rishvic@gmail.com>
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-08-07 10:53:03 +02:00
Marc Cornellà 0912e05c05 fix(jonathan): make compatible with Ghostty shell-integration (#13917)
The issue is that Ghostty shell-integration tries to parse PS1. How we're
defining it now, the precmd function from Ghostty does not properly read
the newlines, resulting in broken prompts. This doesn't happen if:

- Zsh is reloaded (`omz reload` or `exec zsh`)
- Ghostty shell integration is disabled (`shell-integration = none` in config)

This fix just removes the newlines, and it's enough to fix the integration.
2026-08-06 09:20:53 +02:00
御风andCarlo Sala 076d692dac fix(per-directory-history): prevent fc -p from clearing preexec (#13815)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-08-05 18:56:19 +02:00
FiNeXdesignandCarlo Sala 7e2aa2c8cb feat(keychain): add version handling (#13898)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-08-05 18:22:17 +02:00
Matheus FelipeandCarlo Sala ab84cca50a feat(pipenv): add completion for >= 2026.5.0 (#13686)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
2026-08-05 18:21:07 +02:00
farlyfeifei a4a224b3fe perf: avoid duplicate completion security audit (#13873) 2026-08-05 13:30:21 +02:00
zhoufengen 898b579cf5 fix(git): avoid illegal byte sequence (#13878) 2026-08-05 13:23:04 +02:00
Brennan Lujan bc0d7fa6ab feat(eza): add smart-group option (#13857) 2026-08-05 13:05:18 +02:00
xs5871 ed19f8ffcf fix(extract): properly handle xz archives (#13853) 2026-08-05 13:04:27 +02:00
Dan Vrátil 26b4e0a8c0 feat(jj): add aliases for workspace operations (#13850) 2026-08-05 12:41:57 +02:00
Session小胡 a8afe14b93 feat(command-not-found): add alpine support (#13864) 2026-08-05 12:10:52 +02:00
kapil971390 be0dfaad6b fix(aws): quote vars to support spaces (#13868) 2026-08-05 12:05:39 +02:00
Santiago Aguilar Hernández 14200130f0 fix(archlinux): remove unnecessary sudo (#13866) 2026-08-05 12:03:47 +02:00
Krut Patel ad586ffeca fix(tmux): preserve newlines when refreshing environment (#13880) 2026-08-03 10:18:44 +02:00
Akshat1927andMarc Cornellà da368d6468 feat(cdk): add plugin (#13831)
Co-authored-by: Marc Cornellà <marc@mcornella.com>
2026-08-03 10:16:50 +02:00
dependabot[bot] 6adfef3a8b chore(deps): bump github/codeql-action/upload-sarif (#13913)
Bumps the gha-minor group with 1 update: [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `github/codeql-action/upload-sarif` from 4.37.3 to 4.37.4
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81...f205ea1c3313d32999d8d6a48b4f6530d4437b38)

---
updated-dependencies:
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gha-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-02 17:30:46 +02:00
Owain Williams c5ba74cf02 fix(git): use canonical --remotes (#13908) 2026-07-30 17:41:24 +02:00
Enzo Degraeve 7ea697fd81 fix(pm2): escape + in completion regex for BSD awk (#13900) 2026-07-28 00:41:53 +02:00
Carlo Sala d26b91b3fe ci(deps): group dependabot updates (#13897) 2026-07-27 14:07:40 +02:00
dependabot[bot] 64c49681f1 chore(deps): bump charset-normalizer from 3.4.7 to 3.4.9 in /.github/workflows/dependencies (#13890)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:04:23 +02:00
dependabot[bot] f5f46df291 chore(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#13886)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:03:16 +02:00
dependabot[bot] 9e67851a2f chore(deps): bump github/codeql-action/upload-sarif from 4.37.1 to 4.37.3 (#13885)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:03:02 +02:00
dependabot[bot] 2ea792fd9b chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 (#13887)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:02:41 +02:00
dependabot[bot] bce9fec859 chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#13889)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:02:13 +02:00
dependabot[bot] 12eb42de60 chore(deps): bump certifi from 2026.4.22 to 2026.7.22 in /.github/workflows/dependencies (#13891)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:01:57 +02:00
dependabot[bot] f25287d881 chore(deps): bump idna from 3.15 to 3.18 in /.github/workflows/dependencies (#13888)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 12:01:44 +02:00
Aadhil b37dd49ca5 feat(flutter): Added aliases for test, analyze, dependencies upgrade and logs (#13492)
* Added Flutter aliases for test, analyze, dependencies upgrade and logs

* sorted the aliases
2026-07-23 10:38:43 -07:00
Nicolas Temciuc e1d1f0dcd5 feat(rails): add rails db:migrate:reset alias (#13845) 2026-07-22 03:59:54 -07:00
Rahul Agarwal 59a9740721 fix(bundler): restore bu and add bua alias (#13872)
* fix(bundler): make `bu` pass arguments through

Preserve `bundle update --all` for the no-argument form while allowing specific gems and options to pass through.

Fixes #13871

Assisted-by: Claude Fable 5 (Claude Code)

* fix(bundler): keep bu as generic update alias

* feat(bundler): add alias for update all
2026-07-21 13:25:18 -07:00
dependabot[bot] 98fe9b81a6 chore(deps): bump step-security/harden-runner from 2.19.4 to 2.20.0 (#13863)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-20 10:39:30 +02:00
dependabot[bot] f2546022a5 chore(deps): bump github/codeql-action/upload-sarif from 4.36.3 to 4.37.1 (#13874)
Signed-off-by: dependabot[bot] <support@github.com>
2026-07-20 10:31:39 +02:00
Ishaan Kapur 677a4592b1 feat(ufw): complete route rule actions (#13848) 2026-07-07 10:49:59 +02:00
kapil971390andkapilvus 8c8782e362 fix(josh): escape % in branch before computing branch_size (#13835)
Co-authored-by: kapilvus <kapilvus@gmail.com>
2026-07-07 10:47:59 +02:00
dependabot[bot] 51e98fadc9 chore(deps): bump github/codeql-action/upload-sarif (#13855)
Bumps [github/codeql-action/upload-sarif](https://github.com/github/codeql-action) from 4.36.2 to 4.36.3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/8aad20d150bbac5944a9f9d289da16a4b0d87c1e...54f647b7e1bb85c95cddabcd46b0c578ec92bc1a)

---
updated-dependencies:
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.36.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-06 10:31:12 +02:00
117 changed files with 2239 additions and 552 deletions
+14
View File
@@ -6,9 +6,23 @@ updates:
interval: "weekly"
day: "sunday"
labels: []
groups:
gha-minor:
patterns:
- "*"
update-types:
- minor
- patch
- package-ecosystem: "pip"
directory: "/.github/workflows/dependencies"
schedule:
interval: "weekly"
day: "sunday"
labels: []
groups:
py-minor:
patterns:
- "*"
update-types:
- minor
- patch
+2 -1
View File
@@ -46,9 +46,10 @@ dependencies:
plugins/z:
branch: master
repo: agkozak/zsh-z
version: acd0e1984df350c189f8f9c4956ec586b6c73fca
version: 102fb78036ed76feedf623907483691777a1d510
precopy: |
set -e
rm -r tests
test -e README.md && mv -f README.md MANUAL.md
postcopy: |
set -e
+3 -3
View File
@@ -16,12 +16,12 @@ jobs:
contents: write # this is needed to push commits and branches
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
- name: Authenticate as @ohmyzsh
@@ -31,7 +31,7 @@ jobs:
client-id: ${{ secrets.OHMYZSH_CLIENT_ID }}
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
- name: Setup Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.12"
cache: "pip"
@@ -1,6 +1,6 @@
certifi==2026.4.22
charset-normalizer==3.4.7
idna==3.15
certifi==2026.7.22
charset-normalizer==3.5.1
idna==3.19
PyYAML==6.0.3
requests==2.34.2
semver==3.0.4
+4 -4
View File
@@ -26,12 +26,12 @@ jobs:
- macos-latest
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
- name: Set up git repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install zsh
if: runner.os == 'Linux'
run: sudo apt-get update; sudo apt-get install zsh
@@ -47,12 +47,12 @@ jobs:
- test
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Vercel CLI
run: npm install -g vercel
- name: Setup project and deploy
+2 -2
View File
@@ -24,12 +24,12 @@ jobs:
if: github.repository == 'ohmyzsh/ohmyzsh'
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
- name: Set up git repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install zsh
run: sudo apt-get update; sudo apt-get install zsh
- name: Check syntax
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
if: github.repository == 'ohmyzsh/ohmyzsh'
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
- name: Authenticate as @ohmyzsh
+4 -4
View File
@@ -36,17 +36,17 @@ jobs:
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
- name: "Checkout code"
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
with:
results_file: results.sarif
results_format: sarif
@@ -60,6 +60,6 @@ jobs:
retention-days: 5
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
with:
sarif_file: results.sarif
+1 -1
View File
@@ -519,7 +519,7 @@ function _omz::plugin::load {
# Check if it has completion to reload compinit
local -a comp_files
comp_files=($base/_*(N))
has_completion=$(( $#comp_files > 0 ))
(( has_completion )) || has_completion=$(( $#comp_files > 0 ))
# Load the plugin
if [[ -f "$base/$plugin.plugin.zsh" ]]; then
+1 -1
View File
@@ -271,7 +271,7 @@ function _omz_diag_dump_check_core_commands() {
unfunction unhash unlimit unset unsetopt vared wait whence where which zcompile
zle zmodload zparseopts zregexparse zstyle )
if is-at-least 5.1; then
reserved_word+=( declare export integer float local readonly typeset )
reserved_words+=( declare export integer float local readonly typeset )
else
builtins+=( declare export integer float local readonly typeset )
fi
+23 -3
View File
@@ -39,6 +39,26 @@ function _omz_git_prompt_info() {
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref//\%/%%}${upstream//\%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
}
# Match an extended regular expression against a subject, forcing the C locale
# only for the duration of the call.
#
# OHMYZSH-13330: zsh's "=~" operator delegates to the C library regex, which
# aborts with REG_ILLSEQ when the subject contains an invalid byte sequence
# under a multibyte locale (e.g. a filename with non-UTF-8 bytes in `git
# status` output). Forcing the C locale makes every byte a valid character,
# so the regex matching never fails that way. `git status --porcelain` is
# locale-independent, so this does not change the parsed output.
#
# OHMYZSH-13985: the locale must be scoped to this function and not set for
# the whole caller. Assigning LC_ALL makes zsh re-run setlocale() right away,
# so leaving it set while the rest of the caller runs breaks multibyte
# handling there — most visibly, `echo` refuses to expand Unicode escapes in
# theme prompt symbols ("character not in range").
function _omz_git_prompt_status_match() {
local -x LC_ALL=C
[[ "$1" =~ "$2" ]]
}
function _omz_git_prompt_status() {
[[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
@@ -104,11 +124,11 @@ function _omz_git_prompt_status() {
status_lines=("${(@f)${status_text}}")
# If the tracking line exists, get and parse it
if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then
if _omz_git_prompt_status_match "$status_lines[1]" "^## [^ ]+ \[(.*)\]"; then
local branch_statuses
branch_statuses=("${(@s/,/)match}")
for branch_status in $branch_statuses; do
if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then
if ! _omz_git_prompt_status_match "$branch_status" "(behind|diverged|ahead) ([0-9]+)?"; then
continue
fi
local last_parsed_status=$prefix_constant_map[$match[1]]
@@ -121,7 +141,7 @@ function _omz_git_prompt_status() {
local status_constant="${prefix_constant_map[$status_prefix]}"
local status_regex=$'(^|\n)'"$status_prefix"
if [[ "$status_text" =~ $status_regex ]]; then
if _omz_git_prompt_status_match "$status_text" "$status_regex"; then
statuses_seen[$status_constant]=1
fi
done
+42 -11
View File
@@ -38,16 +38,47 @@
# due to malicious input as a consequence of CVE-2021-45444, which affects
# zsh versions from 5.0.3 to 5.8.
#
autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 0
# The patch is applied when VCS_INFO_formats is first called, since loading
# and patching it on every startup costs time in shells that never use
# vcs_info. `autoload` doesn't replace an already defined function, so this
# wrapper survives a later `autoload -Uz vcs_info` in a theme or .zshrc, and
# vcs_info's own `autoload -Uz VCS_INFO_formats`.
if (( $+functions[VCS_INFO_formats] )); then
() {
autoload -Uz +X regexp-replace 2>/dev/null || return 1
# We use $tmp here because it's already a local variable in VCS_INFO_formats
typeset PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
# Unique string to avoid reapplying the patch if this code gets called twice
typeset PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
# Only patch the VCS_INFO_formats function if not already patched
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
regexp-replace 'functions[VCS_INFO_formats]' \
"VCS_INFO_hook 'post-backend'" \
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
# We use $tmp here because it's already a local variable in VCS_INFO_formats
local PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
# Unique string to avoid reapplying the patch if this code gets called twice
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
# Only patch the VCS_INFO_formats function if not already patched
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
regexp-replace 'functions[VCS_INFO_formats]' \
"VCS_INFO_hook 'post-backend'" \
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
fi
}
else
function VCS_INFO_formats {
local loaded_function="$(
unfunction VCS_INFO_formats 2>/dev/null
autoload -Uz +X VCS_INFO_formats 2>/dev/null || return 1
print -r -- "$functions[VCS_INFO_formats]"
)" || return 1
functions[VCS_INFO_formats]="$loaded_function"
autoload -Uz +X regexp-replace 2>/dev/null || return 1
# We use $tmp here because it's already a local variable in VCS_INFO_formats
local PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
# Unique string to avoid reapplying the patch if this code gets called twice
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
# Only patch the VCS_INFO_formats function if not already patched
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
regexp-replace 'functions[VCS_INFO_formats]' \
"VCS_INFO_hook 'post-backend'" \
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
fi
VCS_INFO_formats "$@"
}
fi
unset PATCH PATCH_ID
+3 -1
View File
@@ -124,9 +124,11 @@ fi
if [[ "$ZSH_DISABLE_COMPFIX" != true ]]; then
source "$ZSH/lib/compfix.zsh"
# Load only from secure directories
# Reset the flag compinit sets when -i excludes insecure entries
unset _comp_secure
compinit -i -d "$ZSH_COMPDUMP"
# If completion insecurities exist, warn the user
handle_completion_insecurities &|
[[ "$_comp_secure" == yes ]] && handle_completion_insecurities &|
else
# If the user wants it, load from all found directories
compinit -u -d "$ZSH_COMPDUMP"
+5 -1
View File
@@ -9,7 +9,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_op" ]]; then
_comps[op]=_op
fi
op completion zsh >| "$ZSH_CACHE_DIR/completions/_op" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_op"
zf_mv -f -- =( op completion zsh ) "$TMPPREFIX"
} &|
# Load opswd function
autoload -Uz opswd
+1 -1
View File
@@ -21,7 +21,7 @@ plugins=(... archlinux)
| pacloc | `pacman -Qi` | Display information about a package in the local database |
| paclocs | `pacman -Qs` | Search for packages in the local database |
| paclr | `sudo pacman -Scc` | Remove all files from the cache |
| paclsorphans | `sudo pacman -Qdt` | List all orphaned packages |
| paclsorphans | `pacman -Qdt` | List all orphaned packages |
| pacmir | `sudo pacman -Syy` | Force refresh of all package lists after updating mirrorlist |
| pacre | `sudo pacman -R` | Remove packages, keeping its settings and dependencies |
| pacrem | `sudo pacman -Rns` | Remove packages, including its settings and dependencies |
+1 -1
View File
@@ -16,7 +16,7 @@ alias pacloc='pacman -Qi'
alias paclocs='pacman -Qs'
alias pacinsd='sudo pacman -S --asdeps'
alias pacmir='sudo pacman -Syy'
alias paclsorphans='sudo pacman -Qdt'
alias paclsorphans='pacman -Qdt'
alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)'
alias pacfileupg='sudo pacman -Fy'
alias pacfiles='pacman -F'
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_arduino-cli" ]]; then
fi
# Generate and load arduino-cli completion
arduino-cli completion zsh >! "$ZSH_CACHE_DIR/completions/_arduino-cli" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_arduino-cli"
zf_mv -f -- =( arduino-cli completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_argocd" ]]; then
_comps[argocd]=_argocd
fi
argocd completion zsh >| "$ZSH_CACHE_DIR/completions/_argocd" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_argocd"
zf_mv -f -- =( argocd completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -12,4 +12,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
autoload -Uz _asdf
_comps[asdf]=_asdf
fi
asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_asdf"
zf_mv -f -- =( asdf completion zsh ) "$TMPPREFIX"
} &|
+3 -3
View File
@@ -9,14 +9,14 @@ function agr() {
# Update state file if enabled
function _aws_update_state() {
if [[ "$AWS_PROFILE_STATE_ENABLED" == true ]]; then
test -d $(dirname ${AWS_STATE_FILE}) || return 1
test -d "$(dirname "${AWS_STATE_FILE}")" || return 1
echo "${AWS_PROFILE} ${AWS_REGION}" > "${AWS_STATE_FILE}"
fi
}
function _aws_clear_state() {
if [[ "$AWS_PROFILE_STATE_ENABLED" == true ]]; then
test -d $(dirname ${AWS_STATE_FILE}) || return 1
test -d "$(dirname "${AWS_STATE_FILE}")" || return 1
echo -n > "${AWS_STATE_FILE}"
fi
}
@@ -69,7 +69,7 @@ function asr() {
local -a available_regions
available_regions=($(aws_regions))
if [[ -z "${available_regions[(r)$1]}" ]]; then
echo "${fg[red]}Available regions: \n$(aws_regions)"
echo "${fg[red]}Available regions: \n$(aws_regions)${reset_color}" >&2
return 1
fi
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_buf" ]]; then
fi
# Generate and load buf completion
buf completion zsh >! "$ZSH_CACHE_DIR/completions/_buf" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_buf"
zf_mv -f -- =( buf completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_bun" ]]; then
_comps[bun]=_bun
fi
SHELL=zsh bun completions >| "$ZSH_CACHE_DIR/completions/_bun" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_bun"
zf_mv -f -- =( SHELL=zsh bun completions ) "$TMPPREFIX"
} &|
+2 -1
View File
@@ -22,7 +22,8 @@ plugins=(... bundler)
| `bo` | `bundle open` | Opens the source directory for a gem in your bundle |
| `bout` | `bundle outdated` | List installed gems with newer versions available |
| `bp` | `bundle package` | Package your needed .gem files into your application |
| `bu` | `bundle update --all` | Update your gems to the latest available versions |
| `bu` | `bundle update` | Update your gems to the latest available versions |
| `bua` | `bundle update --all` | Update all gems to the latest available versions |
## Gem wrapper
+2 -1
View File
@@ -9,7 +9,8 @@ alias bl="bundle list"
alias bo="bundle open"
alias bout="bundle outdated"
alias bp="bundle package"
alias bu="bundle update --all"
alias bu="bundle update"
alias bua="bundle update --all"
## Gem wrapper
+32
View File
@@ -0,0 +1,32 @@
# AWS CDK Plugin
This plugin provides aliases and autocompletion for the [AWS Cloud Development Kit (CDK)](https://aws.amazon.com/cdk/) CLI.
## Usage
Add `cdk` to the plugins array in your `.zshrc`:
```zsh
plugins=(... cdk)
```
## Requirements
- [AWS CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) installed (`npm install -g aws-cdk`)
## Aliases
| Alias | Command | Description |
| ------------ | ----------------- | ---------------------------------- |
| `cdkl` | `cdk list` | List all stacks in the app |
| `cdksynth` | `cdk synth` | Synthesize CloudFormation template |
| `cdkdiff` | `cdk diff` | Compare deployed vs local stack |
| `cdkdeploy` | `cdk deploy` | Deploy stack to AWS |
| `cdkdestroy` | `cdk destroy` | Destroy deployed stack |
| `cdkboot` | `cdk bootstrap` | Bootstrap CDK environment |
| `cdkdoc` | `cdk docs` | Open CDK documentation |
| `cdkinit` | `cdk init` | Initialize a new CDK project |
| `cdkwatch` | `cdk watch` | Watch for changes and auto-deploy |
| `cdkctx` | `cdk context` | Manage cached context values |
| `cdkack` | `cdk acknowledge` | Acknowledge a notice |
| `cdkver` | `cdk --version` | Print CDK version |
+12
View File
@@ -0,0 +1,12 @@
#compdef cdk
# Originally found and adapted from: https://github.com/aws/aws-cdk/discussions/24380#discussioncomment-5158176
local -a reply
local IFS
IFS=$'\n' reply=($(COMP_CWORD="$((CURRENT-1))" \
COMP_LINE="$BUFFER" \
COMP_POINT="$CURSOR" \
cdk --get-yargs-completions "${words[@]}"))
_describe 'values' reply
+13
View File
@@ -0,0 +1,13 @@
# Aliases
alias cdkl='cdk list'
alias cdksynth='cdk synth'
alias cdkdiff='cdk diff'
alias cdkdeploy='cdk deploy'
alias cdkdestroy='cdk destroy'
alias cdkboot='cdk bootstrap'
alias cdkdoc='cdk docs'
alias cdkinit='cdk init'
alias cdkwatch='cdk watch'
alias cdkctx='cdk context'
alias cdkack='cdk acknowledge'
alias cdkver='cdk --version'
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_charm" ]]; then
_comps[charm]=_charm
fi
charm completion zsh >| "$ZSH_CACHE_DIR/completions/_charm" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_charm"
zf_mv -f -- =( charm completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_chezmoi" ]]; then
_comps[chezmoi]=_chezmoi
fi
chezmoi completion zsh >| "$ZSH_CACHE_DIR/completions/_chezmoi" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_chezmoi"
zf_mv -f -- =( chezmoi completion zsh ) "$TMPPREFIX"
} &|
+11
View File
@@ -0,0 +1,11 @@
# codex Plugin
## Introduction
This `codex` plugin sets up completion for [codex](https://github.com/openai/codex).
To use it, add `codex` to the plugins array of your zshrc file:
```bash
plugins=(... codex)
```
+18
View File
@@ -0,0 +1,18 @@
# COMPLETION FUNCTION
if (( ! $+commands[codex] )); then
return
fi
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `codex`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_codex" ]]; then
typeset -g -A _comps
autoload -Uz _codex
_comps[codex]=_codex
fi
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_codex"
zf_mv -f -- =( codex completion zsh < /dev/null 2> /dev/null ) "$TMPPREFIX"
} &|
+1
View File
@@ -32,5 +32,6 @@ It works out of the box with the command-not-found packages for:
- [SUSE](https://www.unix.com/man-page/suse/1/command-not-found/)
- [Gentoo](https://github.com/AndrewAmmerlaan/command-not-found-gentoo/tree/main)
- [Void Linux](https://codeberg.org/classabbyamp/xbps-command-not-found)
- [Alpine Linux](https://pkgs.alpinelinux.org/package/edge/main/x86_64/command-not-found)
You can add support for other platforms by submitting a Pull Request.
@@ -74,3 +74,10 @@ if [[ -x /usr/bin/command-not-found ]]; then
/usr/bin/command-not-found "$1"
}
fi
# Alpine: https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/main/command-not-found/APKBUILD
if [[ -x /usr/libexec/command-not-found ]]; then
command_not_found_handler() {
/usr/libexec/command-not-found "$1"
}
fi
+5 -1
View File
@@ -25,4 +25,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_deno" ]]; then
_comps[deno]=_deno
fi
deno completions zsh >| "$ZSH_CACHE_DIR/completions/_deno" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_deno"
zf_mv -f -- =( deno completions zsh ) "$TMPPREFIX"
} &|
+1 -1
View File
@@ -17,7 +17,7 @@ plugins=(... docker-compose)
|-----------|----------------------------------|----------------------------------------------------------------------------------|
| dco | `docker-compose` | Docker-compose main command |
| dcb | `docker-compose build` | Build containers |
| dcc | `docker-compose config` | Parse, resolve and render compose file in canonical format |
| dcc | `docker-compose config` | Parse, resolve and render compose file in canonical format |
| dce | `docker-compose exec` | Execute command inside a container |
| dcps | `docker-compose ps` | List containers |
| dcrestart | `docker-compose restart` | Restart container |
+9 -4
View File
@@ -56,14 +56,19 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_docker" ]]; then
_comps[docker]=_docker
fi
{
zmodload -F zsh/files b:zf_mv
() {
local plugin_dir="$1"
# `docker completion` is only available from 23.0.0 on
# docker version returns `Docker version 24.0.2, build cb74dfcd85`
# with `s:,:` remove the comma after the version, and select third word of it
if zstyle -t ':omz:plugins:docker' legacy-completion || \
! is-at-least 23.0.0 ${${(s:,:z)"$(command docker --version)"}[3]}; then
command cp "${0:h}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
command cp "${plugin_dir}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
else
command docker completion zsh | tee "$ZSH_CACHE_DIR/completions/_docker" > /dev/null
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_docker"
zf_mv -f -- =( command docker completion zsh ) "$TMPPREFIX"
fi
} &|
} "${0:A:h}" &|
+5 -1
View File
@@ -14,4 +14,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_doctl" ]]; then
_comps[doctl]=_doctl
fi
doctl completion zsh >| "$ZSH_CACHE_DIR/completions/_doctl" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_doctl"
zf_mv -f -- =( doctl completion zsh ) "$TMPPREFIX"
} &|
+1 -1
View File
@@ -102,7 +102,7 @@ EOF
(*.tar.lrz) (( $+commands[lrzuntar] )) && lrzuntar "$full_path" ;;
(*.gz) (( $+commands[pigz] )) && pigz -cdk "$full_path" > "${file:t:r}" || gunzip -ck "$full_path" > "${file:t:r}" ;;
(*.bz2) (( $+commands[pbzip2] )) && pbzip2 -d "$full_path" || bunzip2 "$full_path" ;;
(*.xz) unxz "$full_path" ;;
(*.xz) xzcat "$full_path" > "${file:t:r}" ;;
(*.lrz) (( $+commands[lrunzip] )) && lrunzip "$full_path" ;;
(*.lz4) lz4 -d "$full_path" ;;
(*.lzma) unlzma "$full_path" ;;
+2 -1
View File
@@ -48,10 +48,11 @@ Default: `no`
### `show-group`
```zsh
zstyle ':omz:plugins:eza' 'show-group' yes|no
zstyle ':omz:plugins:eza' 'show-group' yes|no|smart
```
If `yes` (default), always add `-g` flag to show the group ownership.
If `smart`, adds the `--smart-group` flag to only show the group if it has a different name from the owner.
Default: `yes`
+16 -5
View File
@@ -9,9 +9,15 @@ typeset -a _EZA_TAIL
function _configure_eza() {
local _val
# Get the head flags
if zstyle -T ':omz:plugins:eza' 'show-group'; then
_EZA_HEAD+=("g")
fi
zstyle -s ':omz:plugins:eza' 'show-group' _val
case "${_val:l}" in
yes)
_EZA_HEAD+=("g")
;;
smart)
_EZA_TAIL+=("--smart-group")
;;
esac
if zstyle -t ':omz:plugins:eza' 'header'; then
_EZA_HEAD+=("h")
fi
@@ -46,8 +52,13 @@ function _configure_eza() {
if [[ $_val ]]; then
_EZA_TAIL+=("--time-style='$_val'")
fi
if zstyle -t ":omz:plugins:eza" "hyperlink"; then
_EZA_TAIL+=("--hyperlink")
if zstyle -t ':omz:plugins:eza' 'hyperlink'; then
# eza >= 0.23 needs an explicit WHEN value
if command eza --hyperlink=auto --version &>/dev/null; then
_EZA_TAIL+=("--hyperlink=auto")
else
_EZA_TAIL+=("--hyperlink")
fi
fi
}
+8 -4
View File
@@ -13,16 +13,20 @@ plugins=(... flutter)
| Alias | Command | Description |
| :--------- | :---------------------- | :------------------------------------------------------------------------- |
| `fl` | `flutter` | Shorthand for flutter command |
| `fla` | `flutter analyze` | Analyzes flutter code |
| `flattach` | `flutter attach` | Attaches flutter to a running flutter application with enabled observatory |
| `flb` | `flutter build` | Build flutter application |
| `flchnl` | `flutter channel` | Switches flutter channel (requires input of desired channel) |
| `flc` | `flutter clean` | Cleans flutter project |
| `fldvcs` | `flutter devices` | List connected devices (if any) |
| `flchnl` | `flutter channel` | Switches flutter channel (requires input of desired channel) |
| `fldoc` | `flutter doctor` | Runs flutter doctor |
| `flpub` | `flutter pub` | Shorthand for flutter pub command |
| `fldvcs` | `flutter devices` | List connected devices (if any) |
| `flget` | `flutter pub get` | Installs dependencies |
| `fll` | `flutter logs` | Shows flutter logs |
| `flpu` | `flutter pub upgrade` | Upgrades dependencies |
| `flpub` | `flutter pub` | Shorthand for flutter pub command |
| `flr` | `flutter run` | Runs flutter app |
| `flrd` | `flutter run --debug` | Runs flutter app in debug mode (default mode) |
| `flrp` | `flutter run --profile` | Runs flutter app in profile mode |
| `flrr` | `flutter run --release` | Runs flutter app in release mode |
| `flupgrd` | `flutter upgrade` | Upgrades flutter version depending on the current channel |
| `flt` | `flutter test` | Runs flutter tests |
| `flupgrd` | `flutter upgrade` | Upgrades flutter version depending on the current channel |
+12 -4
View File
@@ -1,16 +1,20 @@
alias fl="flutter"
alias fla="flutter analyze"
alias flattach="flutter attach"
alias flb="flutter build"
alias flchnl="flutter channel"
alias flc="flutter clean"
alias fldvcs="flutter devices"
alias flchnl="flutter channel"
alias fldoc="flutter doctor"
alias flpub="flutter pub"
alias fldvcs="flutter devices"
alias flget="flutter pub get"
alias fll="flutter logs"
alias flpu="flutter pub upgrade"
alias flpub="flutter pub"
alias flr="flutter run"
alias flrd="flutter run --debug"
alias flrp="flutter run --profile"
alias flrr="flutter run --release"
alias flt="flutter test"
alias flupgrd="flutter upgrade"
# COMPLETION FUNCTION
@@ -26,4 +30,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flutter" ]]; then
_comps[flutter]=_flutter
fi
flutter zsh-completion < /dev/null >| "$ZSH_CACHE_DIR/completions/_flutter" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_flutter"
zf_mv -f -- =( flutter zsh-completion < /dev/null ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flux" ]]; then
_comps[flux]=_flux
fi
flux completion zsh >| "$ZSH_CACHE_DIR/completions/_flux" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_flux"
zf_mv -f -- =( flux completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_fnm" ]]; then
_comps[fnm]=_fnm
fi
fnm completions --shell=zsh >| "$ZSH_CACHE_DIR/completions/_fnm" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_fnm"
zf_mv -f -- =( fnm completions --shell=zsh ) "$TMPPREFIX"
} &|
if zstyle -t ':omz:plugins:fnm' autostart; then
local -a fnm_env_cmd
+18
View File
@@ -0,0 +1,18 @@
# Grafana CLI plugin
This plugin adds completion for the [Grafana CLI (gcx)](https://github.com/grafana/gcx).
To use it, add `gcx` to the plugins array in your zshrc file:
```zsh
plugins=(... gcx)
```
This plugin does not add any aliases.
## Cache
This plugin caches the completion script and automatically updates it when the
plugin is loaded, which is usually when you start a new terminal emulator.
The cache is stored at `$ZSH_CACHE_DIR/completions/_gcx`.
+18
View File
@@ -0,0 +1,18 @@
# Autocompletion for the Grafana CLI (gcx).
if (( ! $+commands[gcx] )); then
return
fi
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `gcx`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_gcx" ]]; then
typeset -g -A _comps
autoload -Uz _gcx
_comps[gcx]=_gcx
fi
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gcx"
zf_mv -f -- =( gcx completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_gh" ]]; then
_comps[gh]=_gh
fi
gh completion --shell zsh >| "$ZSH_CACHE_DIR/completions/_gh" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gh"
zf_mv -f -- =( gh completion --shell zsh ) "$TMPPREFIX"
} &|
+1 -1
View File
@@ -45,7 +45,7 @@ plugins=(... git)
| `gbgD` | `LANG=C git branch --no-color -vv \| grep ": gone\]" \| cut -c 3- \| awk '"'"'{print $1}'"'"' \| xargs git branch -D` |
| `gbm` | `git branch --move` |
| `gbnm` | `git branch --no-merged` |
| `gbr` | `git branch --remote` |
| `gbr` | `git branch --remotes` |
| `ggsup` | `git branch --set-upstream-to=origin/$(git_current_branch)` |
| `gbg` | `LANG=C git branch -vv \| grep ": gone\]"` |
| `gco` | `git checkout` |
+4 -3
View File
@@ -137,8 +137,9 @@ function gbda() {
# Copied and modified from James Roeder (jmaroeder) under MIT License
# https://github.com/jmaroeder/plugin-git/blob/216723ef4f9e8dde399661c39c80bdf73f4076c4/functions/gbda.fish
function gbds() {
local default_branch=$(git_main_branch)
(( ! $? )) || default_branch=$(git_develop_branch)
local default_branch
default_branch=$(git_main_branch) \
|| default_branch=$(git_develop_branch)
git for-each-ref refs/heads/ "--format=%(refname:short)" | \
while read branch; do
@@ -153,7 +154,7 @@ alias gbgd='LANG=C git branch --no-color -vv | grep ": gone\]" | cut -c 3- | awk
alias gbgD='LANG=C git branch --no-color -vv | grep ": gone\]" | cut -c 3- | awk '"'"'{print $1}'"'"' | xargs git branch -D'
alias gbm='git branch --move'
alias gbnm='git branch --no-merged'
alias gbr='git branch --remote'
alias gbr='git branch --remotes'
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
alias gbg='LANG=C git branch -vv | grep ": gone\]"'
alias gco='git checkout'
+40 -4
View File
@@ -10,12 +10,48 @@ function gi() {
}
_gitignoreio_get_command_list() {
setopt local_options pipe_fail
_gi_curl "list" | tr "," "\n"
}
_gitignoreio () {
compset -P '*,'
compadd -S '' $(_gitignoreio_get_command_list)
__gitignoreio_caching_policy() {
local -a oldp
oldp=("$1"(Nm+7))
(($#oldp))
}
compdef _gitignoreio gi
_gitignoreio_retrieve_stale_cache() {
zstyle -t ":completion:${curcontext}:" use-cache || return 1
local cache_dir
zstyle -s ":completion:${curcontext}:" cache-path cache_dir
: ${cache_dir:=${ZDOTDIR:-$HOME}/.zcompcache}
[[ -e "$cache_dir/gi-list" ]] || return 1
. "$cache_dir/gi-list"
}
_gitignoreio() {
compset -P '*,'
local cache_policy
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
if [[ -z "$cache_policy" ]]; then
zstyle ":completion:${curcontext}:" cache-policy __gitignoreio_caching_policy
fi
local -a _gi_list
if _cache_invalid gi-list || ! _retrieve_cache gi-list; then
local command_list
if command_list="$(_gitignoreio_get_command_list)" && [[ -n "$command_list" ]]; then
_gi_list=(${(f)command_list})
_store_cache gi-list _gi_list
else
_gitignoreio_retrieve_stale_cache
fi
fi
compadd -S '' -a _gi_list
}
compdef _gitignoreio gi
+5 -1
View File
@@ -9,5 +9,9 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_hasura" ]]; then
source "$ZSH_CACHE_DIR/completions/_hasura"
else
source "$ZSH_CACHE_DIR/completions/_hasura"
hasura completion zsh --file "$ZSH_CACHE_DIR/completions/_hasura" >/dev/null &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hasura"
zf_mv -f -- =( hasura completion zsh ) "$TMPPREFIX"
} &|
fi
+5 -1
View File
@@ -13,7 +13,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_hcloud" ]]; then
_comps[hcloud]=_hcloud
fi
hcloud completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_hcloud" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hcloud"
zf_mv -f -- =( hcloud completion zsh 2> /dev/null ) "$TMPPREFIX"
} &|
# Main alias
alias hc='hcloud'
+5 -1
View File
@@ -9,7 +9,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_helm" ]]; then
source "$ZSH_CACHE_DIR/completions/_helm"
else
source "$ZSH_CACHE_DIR/completions/_helm"
helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_helm"
zf_mv -f -- =( helm completion zsh ) "$TMPPREFIX"
} &|
fi
alias h='helm'
+19
View File
@@ -19,35 +19,54 @@ plugins=(... jj)
| jjbd | `jj bookmark delete` |
| jjbf | `jj bookmark forget` |
| jjbl | `jj bookmark list` |
| jjblt | `jj bookmark list --tracked` |
| jjbm | `jj bookmark move` |
| jjbr | `jj bookmark rename` |
| jjbs | `jj bookmark set` |
| jjbt | `jj bookmark track` |
| jjbu | `jj bookmark untrack` |
| jjc | `jj commit` |
| jjcfg | `jj config` |
| jjcfgl | `jj config list` |
| jjcmsg | `jj commit --message` |
| jjd | `jj diff` |
| jjdmsg | `jj desc --message` |
| jjds | `jj desc` |
| jjdst | `jj diff --stat` |
| jje | `jj edit` |
| jjev | `jj evolog` |
| jjf | `jj file` |
| jjfl | `jj file list` |
| jjg | `jj git` |
| jjgcl | `jj git clone` |
| jjgf | `jj git fetch` |
| jjgfa | `jj git fetch --all-remotes` |
| jjgi | `jj git init` |
| jjgp | `jj git push` |
| jjgpa | `jj git push --all` |
| jjgpd | `jj git push --deleted` |
| jjgpt | `jj git push --tracked` |
| jjgrl | `jj git remote list` |
| jjl | `jj log` |
| jjla | `jj log -r "all()"` |
| jjn | `jj new` |
| jjnt | `jj new "trunk()"` |
| jjop | `jj op` |
| jjopl | `jj op log` |
| jjor | `jj op restore` |
| jjrb | `jj rebase` |
| jjrbm | `jj rebase -d "trunk()"` |
| jjrs | `jj restore` |
| jjrt | `cd "$(jj root \|\| echo .)"` |
| jjs | `jj show` |
| jjsp | `jj split` |
| jjsq | `jj squash` |
| jjst | `jj status` |
| jju | `jj undo` |
| jjw | `jj workspace` |
| jjwa | `jj workspace add` |
| jjwf | `jj workspace forget` |
| jjwl | `jj workspace list` |
## Prompt usage
+24 -1
View File
@@ -11,7 +11,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then
_comps[jj]=_jj
fi
COMPLETE=zsh jj >| "$ZSH_CACHE_DIR/completions/_jj" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_jj"
zf_mv -f -- =( COMPLETE=zsh jj ) "$TMPPREFIX"
} &|
function __jj_prompt_jj() {
local -a flags
@@ -41,32 +45,51 @@ alias jjbc='jj bookmark create'
alias jjbd='jj bookmark delete'
alias jjbf='jj bookmark forget'
alias jjbl='jj bookmark list'
alias jjblt='jj bookmark list --tracked'
alias jjbm='jj bookmark move'
alias jjbr='jj bookmark rename'
alias jjbs='jj bookmark set'
alias jjbt='jj bookmark track'
alias jjbu='jj bookmark untrack'
alias jjc='jj commit'
alias jjcfg='jj config'
alias jjcfgl='jj config list'
alias jjcmsg='jj commit --message'
alias jjd='jj diff'
alias jjdmsg='jj desc --message'
alias jjds='jj desc'
alias jjdst='jj diff --stat'
alias jje='jj edit'
alias jjev='jj evolog'
alias jjf='jj file'
alias jjfl='jj file list'
alias jjg='jj git'
alias jjgcl='jj git clone'
alias jjgf='jj git fetch'
alias jjgfa='jj git fetch --all-remotes'
alias jjgi='jj git init'
alias jjgp='jj git push'
alias jjgpa='jj git push --all'
alias jjgpd='jj git push --deleted'
alias jjgpt='jj git push --tracked'
alias jjgrl='jj git remote list'
alias jjl='jj log'
alias jjla='jj log -r "all()"'
alias jjn='jj new'
alias jjnt='jj new "trunk()"'
alias jjop='jj op'
alias jjopl='jj op log'
alias jjor='jj op restore'
alias jjrb='jj rebase'
alias jjrbm='jj rebase -d "trunk()"'
alias jjrs='jj restore'
alias jjrt='cd "$(jj root || echo .)"'
alias jjs='jj show'
alias jjsp='jj split'
alias jjsq='jj squash'
alias jjst='jj status'
alias jju='jj undo'
alias jjw='jj workspace'
alias jjwa='jj workspace add'
alias jjwf='jj workspace forget'
alias jjwl='jj workspace list'
+5 -1
View File
@@ -11,4 +11,8 @@ fi
# and then generate it in the background. On first completion,
# the actual completion file will be loaded.
k9s completion zsh >| "$ZSH_CACHE_DIR/completions/_k9s" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_k9s"
zf_mv -f -- =( k9s completion zsh ) "$TMPPREFIX"
} &|
+40 -27
View File
@@ -4,37 +4,50 @@
SHORT_HOST=${SHORT_HOST:-${(%):-%m}}
function {
local agents
local -a identities
local -a options
local _keychain_env_sh
local _keychain_env_sh_gpg
local -a identities
local -a options
local _keychain_env_sh
local _keychain_env_sh_gpg
local version_string major
# load agents to start.
zstyle -s :omz:plugins:keychain agents agents
# load identities to manage.
zstyle -a :omz:plugins:keychain identities identities
# load identities to manage.
zstyle -a :omz:plugins:keychain identities identities
# load additional options
zstyle -a :omz:plugins:keychain options options
# load additional options
zstyle -a :omz:plugins:keychain options options
# Detect major version robustly: case-insensitive, tolerant of
# "keychain 3.0.0_beta3" / "Keychain 3.0.0" / etc.
version_string=$(keychain --version 2>&1)
if [[ "${version_string:l}" =~ '([0-9]+)\.[0-9]+' ]]; then
major=${match[1]}
else
major=2
fi
# Check keychain version to decide whether to use --agents
local version_string=$(keychain --version 2>&1)
# start keychain, only use --agents for versions below 2.9.0
autoload -Uz is-at-least
if [[ "$version_string" =~ 'keychain ([0-9]+\.[0-9]+)' ]] && \
is-at-least 2.9 "$match[1]"; then
keychain ${^options:-} ${^identities} --host $SHORT_HOST
else
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
fi
if (( major >= 3 )); then
# Keychain 3.x: subcommand-based CLI, no --agents.
keychain add ${^options:-} --host $SHORT_HOST ${^identities}
else
local agents
# Get the filenames to store/lookup the environment from
_keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh"
_keychain_env_sh_gpg="$HOME/.keychain/$SHORT_HOST-sh-gpg"
# load agents to start (only used by keychain < 2.9).
zstyle -s :omz:plugins:keychain agents agents
# Source environment settings.
[ -f "$_keychain_env_sh" ] && . "$_keychain_env_sh"
[ -f "$_keychain_env_sh_gpg" ] && . "$_keychain_env_sh_gpg"
autoload -Uz is-at-least
if [[ "${version_string:l}" =~ 'keychain ([0-9]+\.[0-9]+)' ]] && \
is-at-least 2.9 "$match[1]"; then
keychain ${^options:-} ${^identities} --host $SHORT_HOST
else
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
fi
fi
# Get the filenames to store/lookup the environment from
_keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh"
_keychain_env_sh_gpg="$HOME/.keychain/$SHORT_HOST-sh-gpg"
# Source environment settings.
[ -f "$_keychain_env_sh" ] && . "$_keychain_env_sh"
[ -f "$_keychain_env_sh_gpg" ] && . "$_keychain_env_sh_gpg"
}
+5 -1
View File
@@ -11,7 +11,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_kind" ]]; then
fi
# Generate and load kind completion
kind completion zsh >! "$ZSH_CACHE_DIR/completions/_kind" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_kind"
zf_mv -f -- =( kind completion zsh ) "$TMPPREFIX"
} &|
# Register aliases
alias kicc="kind create cluster"
+1
View File
@@ -71,6 +71,7 @@ plugins=(... kubectl)
| | | **Secret management** |
| kgsec | `kubectl get secret` | Get secret for decoding |
| kgseca | `kubectl get secret --all-namespaces` | List secrets across all namespaces |
| kesec | `kubectl edit secret` | Edit secret resource |
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
| kdelsec | `kubectl delete secret` | Delete the secret |
| | | **Deployment management** |
+6 -1
View File
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
_comps[kubectl]=_kubectl
fi
kubectl completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_kubectl" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_kubectl"
zf_mv -f -- =( kubectl completion zsh 2> /dev/null ) "$TMPPREFIX"
} &|
# This command is used a LOT both below and in daily life
alias k=kubectl
@@ -89,6 +93,7 @@ alias kdelcm='kubectl delete configmap'
# Secret management
alias kgsec='kubectl get secret'
alias kgseca='kubectl get secret --all-namespaces'
alias kesec='kubectl edit secret'
alias kdsec='kubectl describe secret'
alias kdelsec='kubectl delete secret'
+15
View File
@@ -22,6 +22,21 @@ RPS1='$(kubectx_prompt_info)'
PROMPT="$PROMPT"'$(kubectx_prompt_info)'
```
The context is loaded asynchronously on supported versions of zsh so that
`kubectl` does not block the prompt. To restore synchronous behavior, add this
before Oh My Zsh is sourced:
```zsh
zstyle ':omz:alpha:plugins:kubectx' async-prompt no
```
If your theme calls `kubectx_prompt_info` indirectly through another function,
force registration of the async handler instead:
```zsh
zstyle ':omz:alpha:plugins:kubectx' async-prompt force
```
### Custom context names
You can rename the default context name for better readability or additional formatting.
+32 -1
View File
@@ -1,6 +1,6 @@
typeset -g -A kubectx_mapping
function kubectx_prompt_info() {
function _omz_kubectx_prompt_info() {
(( $+commands[kubectl] )) || return
local current_ctx=$(kubectl config current-context 2> /dev/null)
@@ -13,3 +13,34 @@ function kubectx_prompt_info() {
# the context name, as it could contain a % character.
echo "${kubectx_mapping[$current_ctx]:-${current_ctx:gs/%/%%}}"
}
function kubectx_prompt_info() {
if (( ${+_OMZ_ASYNC_OUTPUT} )) \
&& [[ -n "${_OMZ_ASYNC_OUTPUT[_omz_kubectx_prompt_info]-}" ]]; then
echo -n "${_OMZ_ASYNC_OUTPUT[_omz_kubectx_prompt_info]}"
fi
}
local _style
if zstyle -t ':omz:alpha:plugins:kubectx' async-prompt \
|| { is-at-least 5.0.6 && zstyle -T ':omz:alpha:plugins:kubectx' async-prompt }; then
function _defer_async_kubectx_register() {
case "${PS1}:${PS2}:${PS3}:${PS4}:${RPROMPT-}:${RPS1-}:${RPS2-}:${RPS3-}:${RPS4-}" in
*(\$\(kubectx_prompt_info\)|\`kubectx_prompt_info\`)*)
_omz_register_handler _omz_kubectx_prompt_info
;;
esac
add-zsh-hook -d precmd _defer_async_kubectx_register
unset -f _defer_async_kubectx_register
}
autoload -Uz add-zsh-hook
precmd_functions=(_defer_async_kubectx_register $precmd_functions)
elif zstyle -s ':omz:alpha:plugins:kubectx' async-prompt _style && [[ $_style == "force" ]]; then
_omz_register_handler _omz_kubectx_prompt_info
else
function kubectx_prompt_info() {
_omz_kubectx_prompt_info
}
fi
+2
View File
@@ -10,6 +10,7 @@ plugins=(... laravel)
|:-:|:-:|
| `artisan` | `php artisan` |
| `pas` | `php artisan serve` |
| `pad` | `php artisan dev` |
| `pats` | `php artisan test` |
## Database
@@ -41,6 +42,7 @@ plugins=(... laravel)
| `pamen` | `php artisan make:enum` |
| `pami` | `php artisan make:interface` |
| `pamtr` | `php artisan make:trait` |
| `pamv` | `php artisan make:view` |
## Clears
+2
View File
@@ -4,6 +4,7 @@ alias bob='php artisan bob::build'
# Development
alias pas='php artisan serve'
alias pad='php artisan dev'
alias pats='php artisan test'
# Database
@@ -30,6 +31,7 @@ alias pamcl='php artisan make:class'
alias pamen='php artisan make:enum'
alias pami='php artisan make:interface'
alias pamtr='php artisan make:trait'
alias pamv='php artisan make:view'
# Clears
+5 -1
View File
@@ -10,4 +10,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_minikube" ]]; then
_comps[minikube]=_minikube
fi
minikube completion zsh >| "$ZSH_CACHE_DIR/completions/_minikube" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_minikube"
zf_mv -f -- =( minikube completion zsh ) "$TMPPREFIX"
} &|
+12 -3
View File
@@ -1,9 +1,14 @@
if (( ! $+commands[mise] )); then
if (( $+commands[mise] )); then
_mise_bin=mise
elif [[ -x ~/.local/bin/mise ]]; then
_mise_bin=~/.local/bin/mise
else
return
fi
# Load mise hooks
eval "$(mise activate zsh)"
eval "$($_mise_bin activate zsh)"
unset _mise_bin
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `mise`. Otherwise, compinit will have already done that.
@@ -14,4 +19,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_mise" ]]; then
fi
# Generate and load mise completion
mise completion zsh >| "$ZSH_CACHE_DIR/completions/_mise" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_mise"
zf_mv -f -- =( mise completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,7 +11,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_molecule" ]]; then
_comps[molecule]=_molecule
fi
_MOLECULE_COMPLETE=zsh_source molecule >| "$ZSH_CACHE_DIR/completions/_molecule" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_molecule"
zf_mv -f -- =( _MOLECULE_COMPLETE=zsh_source molecule ) "$TMPPREFIX"
} &|
# Alias
# molecule: https://docs.ansible.com/projects/molecule/
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_atlas" ]]; then
_comps[atlas]=_atlas
fi
atlas completion zsh >| "$ZSH_CACHE_DIR/completions/atlas" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_atlas"
zf_mv -f -- =( atlas completion zsh ) "$TMPPREFIX"
} &|
+10 -2
View File
@@ -7,7 +7,11 @@ if (( $+commands[nsc] )); then
_comps[nsc]=_nsc
fi
nsc completion zsh >| "$ZSH_CACHE_DIR/completions/_nsc" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_nsc"
zf_mv -f -- =( nsc completion zsh ) "$TMPPREFIX"
} &|
fi
if (( $+commands[nats] )); then
@@ -19,5 +23,9 @@ if (( $+commands[nats] )); then
_comps[nats]=_nats
fi
nats --completion-script-zsh >| "$ZSH_CACHE_DIR/completions/_nats" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_nats"
zf_mv -f -- =( nats --completion-script-zsh ) "$TMPPREFIX"
} &|
fi
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_ngrok" ]]; then
_comps[ngrok]=_ngrok
fi
ngrok completion zsh >| "$ZSH_CACHE_DIR/completions/_ngrok" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_ngrok"
zf_mv -f -- =( ngrok completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_pass-cli" ]]; then
_comps[pass-cli]=_pass-cli
fi
pass-cli completions zsh >| "$ZSH_CACHE_DIR/completions/_pass-cli" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pass-cli"
zf_mv -f -- =( pass-cli completions zsh ) "$TMPPREFIX"
} &|
@@ -91,13 +91,14 @@ bindkey -M vicmd $PER_DIRECTORY_HISTORY_TOGGLE per-directory-history-toggle-hist
#-------------------------------------------------------------------------------
_per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
_per_directory_history_global="$HISTFILE"
function _per-directory-history-change-directory() {
_per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
mkdir -p ${_per_directory_history_directory:h}
if [[ $_per_directory_history_is_global == false ]]; then
#save to the global history
fc -AI $HISTFILE
fc -AI "$_per_directory_history_global"
#save history to previous file
local prev="$HISTORY_BASE${OLDPWD:A}/history"
mkdir -p ${prev:h}
@@ -125,10 +126,9 @@ function _per-directory-history-addhistory() {
if [[ -o share_history ]] || \
[[ -o inc_append_history ]] || \
[[ -o inc_append_history_time ]]; then
fc -AI $HISTFILE
fc -AI "$_per_directory_history_global"
fc -AI $_per_directory_history_directory
fi
fc -p $_per_directory_history_directory
fi
}
@@ -147,12 +147,13 @@ function _per-directory-history-precmd() {
}
function _per-directory-history-set-directory-history() {
fc -AI $HISTFILE
fc -AI "$_per_directory_history_global"
local original_histsize=$HISTSIZE
HISTSIZE=0
HISTSIZE=$original_histsize
if [[ -e "$_per_directory_history_directory" ]]; then
fc -R "$_per_directory_history_directory"
fc -p "$_per_directory_history_directory"
fi
}
@@ -161,8 +162,9 @@ function _per-directory-history-set-global-history() {
local original_histsize=$HISTSIZE
HISTSIZE=0
HISTSIZE=$original_histsize
if [[ -e "$HISTFILE" ]]; then
fc -R "$HISTFILE"
if [[ -e "$_per_directory_history_global" ]]; then
fc -R "$_per_directory_history_global"
fc -p "$_per_directory_history_global"
fi
}
+13 -1
View File
@@ -10,7 +10,7 @@ plugins=(... pipenv ...)
## Features
- Adds completion for pipenv
- Adds completion for pipenv ([install the `argcomplete` package to get it working with pipenv >= 2026.5.0](https://pipenv.pypa.io/en/latest/shell.html#shell-completion))
- Auto activates and deactivates pipenv shell
- Adds short aliases for common pipenv commands
- `pch` is aliased to `pipenv check`
@@ -29,6 +29,18 @@ plugins=(... pipenv ...)
- `pvenv` is aliased to `pipenv --venv`
- `ppy` is aliased to `pipenv --py`
## Cache
This plugin caches the Pipenv version to avoid running `pipenv --version` on every shell startup. The cache is automatically refreshed asynchronously when the plugin is loaded, which is usually when you start a new terminal session.
For legacy Pipenv versions, the generated completion script is also cached.
The cache is stored at:
- `$ZSH_CACHE_DIR/pipenv_version` version of Pipenv, used to choose between argcomplete-based completion and legacy Click-based completion.
- `$ZSH_CACHE_DIR/completions/_pipenv` legacy Click-based completion script.
## Configuration
### Shell activation
+58 -12
View File
@@ -2,15 +2,53 @@ if (( ! $+commands[pipenv] )); then
return
fi
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `pipenv`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_pipenv" ]]; then
typeset -g -A _comps
autoload -Uz _pipenv
_comps[pipenv]=_pipenv
# Compatibility note:
# pipenv < 2026.5.0 used Click-based shell completion driven by the
# _PIPENV_COMPLETE environment variable.
#
# pipenv >= 2026.5.0 removed this mechanism and switched to argcomplete-based
# completion using register-python-argcomplete instead.
autoload -Uz is-at-least
_pipenv_version_cache="$ZSH_CACHE_DIR/pipenv_version"
if [[ -f "$_pipenv_version_cache" ]]; then
_pipenv_version="$(< "$_pipenv_version_cache" 2>/dev/null)"
else
_pipenv_version="${$(pipenv --version 2>/dev/null)#pipenv, version }"
fi
_PIPENV_COMPLETE=zsh_source pipenv >| "$ZSH_CACHE_DIR/completions/_pipenv" &|
{
_pipenv_fresh_version="${$(pipenv --version 2>/dev/null)#pipenv, version }"
[[ -n "$_pipenv_fresh_version" ]] && print -r -- "$_pipenv_fresh_version" >| "$_pipenv_version_cache"
} &|
if is-at-least 2026.5.0 "$_pipenv_version"; then
# pipenv >= 2026.5.0: argcomplete-based completion (no legacy fallback)
if (( $+commands[register-python-argcomplete] )); then
autoload -Uz bashcompinit
bashcompinit
eval "$(register-python-argcomplete pipenv)"
fi
else
# legacy Click-based completion via _PIPENV_COMPLETE
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `pipenv`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_pipenv" ]]; then
typeset -g -A _comps
autoload -Uz _pipenv
_comps[pipenv]=_pipenv
fi
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pipenv"
zf_mv -f -- =( _PIPENV_COMPLETE=zsh_source pipenv ) "$TMPPREFIX"
} &|
fi
if zstyle -T ':omz:plugins:pipenv' auto-shell; then
# Automatic pipenv shell activation/deactivation
@@ -18,22 +56,30 @@ if zstyle -T ':omz:plugins:pipenv' auto-shell; then
# deactivate shell if Pipfile doesn't exist and not in a subdir
if [[ ! -f "$PWD/Pipfile" ]]; then
if [[ "$PIPENV_ACTIVE" == 1 ]]; then
if [[ "$PWD" != "$pipfile_dir"* ]]; then
# Compare whole path components: `$pipfile_dir"*` also matches unrelated
# siblings that merely start with the same text (…/proj -> …/proj-docs),
# which would keep the virtualenv active outside the project.
local project_dir="${pipfile_dir%/}"
if [[ "$PWD" != "$project_dir" && "$PWD" != "$project_dir"/* ]]; then
unset PIPENV_ACTIVE pipfile_dir
deactivate
fi
fi
fi
# activate the shell if Pipfile exists
# activate the shell if Pipfile exists and its virtualenv is usable
if [[ "$PIPENV_ACTIVE" != 1 ]]; then
if [[ -f "$PWD/Pipfile" ]]; then
export pipfile_dir="$PWD"
source "$(pipenv --venv)/bin/activate"
export PIPENV_ACTIVE=1
local venv_path
if venv_path="$(pipenv --venv 2>/dev/null)" && [[ -n "$venv_path" && -f "$venv_path/bin/activate" ]]; then
export pipfile_dir="$PWD"
source "$venv_path/bin/activate"
export PIPENV_ACTIVE=1
fi
fi
fi
}
autoload -U add-zsh-hook
add-zsh-hook chpwd _togglePipenvShell
_togglePipenvShell
+1 -1
View File
@@ -314,7 +314,7 @@ _pm2_subcommands() {
(( $+functions[_pm2_id_names] )) ||
_pm2_id_names() {
local app_list=$(pm2 list -m)
local -a names=(${(@f)"$(echo $app_list | awk '/^\+---/{sub("+--- ", ""); print}')"})
local -a names=(${(@f)"$(echo $app_list | awk '/^\+---/{sub("\\+--- ", ""); print}')"})
local -a ids=(${(@f)"$(echo $app_list | awk '/^pm2 id/{sub("pm2 id :", ""); print}')"})
if (( ${#ids} > 0 )); then
+5 -1
View File
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_podman" ]]; then
_comps[podman]=_podman
fi
podman completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_podman" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_podman"
zf_mv -f -- =( podman completion zsh 2> /dev/null ) "$TMPPREFIX"
} &|
alias pbl='podman build'
alias pcin='podman container inspect'
+4 -2
View File
@@ -1,7 +1,9 @@
# Poetry Environment Plugin
This plugin automatically changes poetry environment when you cd into or out of the project directory.
Note: Script looks for pyproject.toml file to determine poetry if its a poetry environment
This plugin automatically activates a Poetry environment when you enter a
directory containing both `pyproject.toml` and `poetry.lock`. It keeps the
environment active in project subdirectories, switches to nested Poetry
projects, and deactivates it when you leave the project tree.
To use it, add `poetry-env` to the plugins array in your zshrc file:
+14 -5
View File
@@ -1,15 +1,24 @@
_togglePoetryShell() {
# Determine if currently in a Poetry-managed directory
local in_poetry_dir=0
local in_active_poetry_dir=0
if [[ -f "$PWD/pyproject.toml" && -f "$PWD/poetry.lock" ]]; then
in_poetry_dir=1
fi
# Deactivate the current environment if moving out of a Poetry directory or into a different Poetry directory
if [[ $poetry_active -eq 1 ]] && { [[ $in_poetry_dir -eq 0 ]] || [[ "$PWD" != "$poetry_dir"* ]]; }; then
export poetry_active=0
unset poetry_dir
(( $+functions[deactivate] )) && deactivate
# Deactivate when leaving the active project or entering a nested project
if [[ $poetry_active -eq 1 ]]; then
local project_dir="${poetry_dir%/}"
if [[ "$PWD" == "$project_dir" || "$PWD" == "$project_dir"/* ]]; then
in_active_poetry_dir=1
fi
if [[ $in_active_poetry_dir -eq 0 ]] ||
{ [[ $in_poetry_dir -eq 1 ]] && [[ "$PWD" != "$poetry_dir" ]]; }; then
export poetry_active=0
unset poetry_dir
(( $+functions[deactivate] )) && deactivate
fi
fi
# Activate the environment if in a Poetry directory and no environment is currently active
+5 -1
View File
@@ -39,4 +39,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_poetry" ]]; then
_comps[poetry]=_poetry
fi
poetry completions zsh >| "$ZSH_CACHE_DIR/completions/_poetry" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_poetry"
zf_mv -f -- =( poetry completions zsh ) "$TMPPREFIX"
} &|
+10 -6
View File
@@ -10,12 +10,16 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then
_comps[procs]=_procs
fi
{
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_procs"
autoload -Uz is-at-least
local _version=$(procs --version)
if is-at-least "0.14" "${_version#procs }"; then
procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
else
procs --completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
fi
zf_mv -f -- =(
if is-at-least "0.14" "${_version#procs }"; then
procs --gen-completion-out zsh
else
procs --completion-out zsh
fi
) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_pulumi" ]]; then
_comps[pulumi]=_pulumi
fi
pulumi gen-completion zsh >| "$ZSH_CACHE_DIR/completions/_pulumi" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pulumi"
zf_mv -f -- =( pulumi gen-completion zsh ) "$TMPPREFIX"
} &|
# Aliases
alias pul='pulumi'
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_qodana" ]]; then
_comps[qodana]=_qodana
fi
qodana completion zsh >| "$ZSH_CACHE_DIR/completions/_qodana" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_qodana"
zf_mv -f -- =( qodana completion zsh ) "$TMPPREFIX"
} &|
+29 -1
View File
@@ -24,11 +24,12 @@ plugins=(... rails)
| `rdm` | `rails db:migrate` | Run pending db migrations |
| `rdmd` | `rails db:migrate:down` | Undo specific db migration |
| `rdmr` | `rails db:migrate:redo` | Redo specific db migration |
| `rdmrs` | `rails db:migrate:reset` | Delete the database and set it up again from scratch. |
| `rdms` | `rails db:migrate:status` | Show current db migration status |
| `rdmtc` | `rails db:migrate db:test:clone` | Run pending migrations and clone db into test database |
| `rdmu` | `rails db:migrate:up` | Run specific db migration |
| `rdr` | `rails db:rollback` | Roll back the last migration |
| `rdrs` | `rails db:reset` | Delete the database and set it up again |
| `rdrs` | `rails db:reset` | Delete the database and set it up again from schema. |
| `rds` | `rails db:seed` | Seed the database |
| `rdsl` | `rails db:schema:load` | Load the database schema |
| `rdtc` | `rails db:test:clone` | Clone the database into the test database |
@@ -53,6 +54,33 @@ plugins=(... rails)
| `rta` | `rails test:all` | Runs all Rails tests, including system tests |
| `ru` | `rails runner` | Run Ruby code in the context of Rails |
### Multiple databases
Rails applications can define more than one database (`primary`, `cache`, `cable`,
`queue`, ...), and each one gets its own namespaced task. These commands accept an
optional database name as the first argument:
`rdc`, `rdd`, `rdm`, `rdmd`, `rdmr`, `rdms`, `rdmu`, `rdr`, `rdrs`, `rdsl`
```zsh
rdm # rails db:migrate
rdm cache # rails db:migrate:cache
rdm VERSION=20231225 # rails db:migrate VERSION=20231225
rdm cache STEP=2 # rails db:migrate:cache STEP=2
rdm --trace # rails db:migrate --trace
```
The first argument is read as a database name only when it is a bare word. Flags
(`--trace`), variables (`STEP=2`) and other tasks (`db:seed`) are passed through to
`rails` unchanged, so previous usage keeps working. When a database name is given,
the resolved command is printed so it is clear which database is being used.
`rdmrs` is not in the list above because Rails does not define a per-database
`db:migrate:reset` task.
Note that these are implemented as shell functions rather than aliases, so they will
not appear in the output of `alias`.
### Foreman
| Alias | Command | Description |
+1
View File
@@ -214,6 +214,7 @@ _rails_subcommands() {
"db\:migrate[Migrate the database]"
"db\:migrate\:down[Run the 'down' for a given migration VERSION]"
"db\:migrate\:redo[Roll back the database one migration and re-migrate up]"
"db\:migrate\:reset[Drop and recreate all databases from scratch for the current environment]"
"db\:migrate\:status[Display status of migrations]"
"db\:migrate\:up[Run the 'up' for a given migration VERSION]"
"db\:prepare[Run setup if database does not exist, or run migrations if it does]"
+42 -10
View File
@@ -47,18 +47,9 @@ alias rc='rails console'
alias rcs='rails console --sandbox'
alias rd='rails destroy'
alias rdb='rails dbconsole'
alias rdc='rails db:create'
alias rdd='rails db:drop'
alias rdm='rails db:migrate'
alias rdmd='rails db:migrate:down'
alias rdmr='rails db:migrate:redo'
alias rdms='rails db:migrate:status'
alias rdmrs='rails db:migrate:reset'
alias rdmtc='rails db:migrate db:test:clone'
alias rdmu='rails db:migrate:up'
alias rdr='rails db:rollback'
alias rdrs='rails db:reset'
alias rds='rails db:seed'
alias rdsl='rails db:schema:load'
alias rdtc='rails db:test:clone'
alias rdtp='rails db:test:prepare'
alias rgen='rails generate'
@@ -105,6 +96,47 @@ alias rkn='rake notes'
alias rksts='rake stats'
alias rkt='rake test'
# Database tasks
#
# Rails applications can define more than one database (primary, cache, cable,
# queue, ...). Each one gets its own namespaced task, e.g. `db:migrate:cache`.
# The functions below take an optional database name as the first argument:
#
# rdm -> rails db:migrate
# rdm cache -> rails db:migrate:cache
# rdm VERSION=20231225 -> rails db:migrate VERSION=20231225
# rdm cache STEP=2 -> rails db:migrate:cache STEP=2
# rdm --trace -> rails db:migrate --trace
#
# The first argument is read as a database name only when it is a bare word.
# Flags (--trace), variables (STEP=2) and other tasks (db:seed) are passed
# through to rails untouched, so the previous alias behavior still works.
function _rails_db_command() {
local task="$1"
shift
if [[ $# -gt 0 && "$1" != -* && "$1" != *=* && "$1" != *:* ]]; then
task="$task:$1"
shift
# Echo the resolved task so it is clear which database is being used
local -a cmd=(rails "$task" "$@")
print -u2 -r -- "Running: ${cmd[*]}"
fi
rails "$task" "$@"
}
function rdc() { _rails_db_command db:create "$@" }
function rdd() { _rails_db_command db:drop "$@" }
function rdm() { _rails_db_command db:migrate "$@" }
function rdmd() { _rails_db_command db:migrate:down "$@" }
function rdmr() { _rails_db_command db:migrate:redo "$@" }
function rdms() { _rails_db_command db:migrate:status "$@" }
function rdmu() { _rails_db_command db:migrate:up "$@" }
function rdr() { _rails_db_command db:rollback "$@" }
function rdrs() { _rails_db_command db:reset "$@" }
function rdsl() { _rails_db_command db:schema:load "$@" }
# legacy stuff
alias sc='ruby script/console'
alias sd='ruby script/destroy'
+5 -1
View File
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rbw" ]]; then
_comps[rbw]=_rbw
fi
rbw gen-completions zsh >| "$ZSH_CACHE_DIR/completions/_rbw" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rbw"
zf_mv -f -- =( rbw gen-completions zsh ) "$TMPPREFIX"
} &|
# rbwpw function copies the password of a service to the clipboard
# and clears it after 20 seconds
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rclone" ]]; then
_comps[rclone]=_rclone
fi
rclone completion zsh - >| "$ZSH_CACHE_DIR/completions/_rclone" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rclone"
zf_mv -f -- =( rclone completion zsh - ) "$TMPPREFIX"
} &|
+22
View File
@@ -0,0 +1,22 @@
# ruff plugin
This plugin automatically installs [ruff](https://github.com/astral-sh/ruff)'s completions for you,
and keeps them up to date. It also adds convenient aliases for common usage.
To use it, add `ruff` to the plugins array in your zshrc file:
```zsh
plugins=(... ruff)
```
## Aliases
| Alias | Command | Description |
| :---- | -------------------- | :----------------------------------------------------------- |
| ruc | `ruff check` | Run Ruff linter on the given files or directories |
| rucf | `ruff check --fix` | Run Ruff linter and fix auto-fixable issues |
| ruf | `ruff format` | Run the Ruff formatter on the given files or directories |
| rufc | `ruff format --check`| Check if files are already formatted without making changes |
| rur | `ruff rule` | Explain a rule (or all rules) |
| rul | `ruff linter` | List all supported upstream linters |
| rucl | `ruff clean` | Clear any caches in the current directory and subdirectories |
+27
View File
@@ -0,0 +1,27 @@
# Return immediately if ruff is not found
if (( ! ${+commands[ruff]} )); then
return
fi
alias ruc='ruff check'
alias rucf='ruff check --fix'
alias ruf='ruff format'
alias rufc='ruff format --check'
alias rur='ruff rule'
alias rul='ruff linter'
alias rucl='ruff clean'
# If the completion file doesn't exist yet, we need to autoload it and
# bind it. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_ruff" ]]; then
typeset -g -A _comps
autoload -Uz _ruff
_comps[ruff]=_ruff
fi
# Overwrites the file each time as completions might change with ruff versions.
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_ruff"
zf_mv -f -- =( ruff generate-shell-completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -19,7 +19,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rustup" ]]; then
fi
# Generate completion files in the background
rustup completions zsh >| "$ZSH_CACHE_DIR/completions/_rustup" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rustup"
zf_mv -f -- =( rustup completions zsh ) "$TMPPREFIX"
} &|
cat >| "$ZSH_CACHE_DIR/completions/_cargo" <<'EOF'
#compdef cargo
source "$(rustup run ${${(z)$(rustup default)}[1]} rustc --print sysroot)"/share/zsh/site-functions/_cargo
+5 -1
View File
@@ -12,7 +12,11 @@ function install_autocompletion {
_comps[$1]=_$1
fi
$1 completion zsh >| "$ZSH_CACHE_DIR/completions/_$1" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_$1"
zf_mv -f -- =( $1 completion zsh ) "$TMPPREFIX"
} "$1" &|
}
install_autocompletion cosign
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_skaffold" ]]; then
_comps[skaffold]=_skaffold
fi
skaffold completion zsh >| "$ZSH_CACHE_DIR/completions/_skaffold" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_skaffold"
zf_mv -f -- =( skaffold completion zsh ) "$TMPPREFIX"
} &|
+10 -2
View File
@@ -101,10 +101,18 @@ if zstyle -t :omz:plugins:ssh-agent agent-forwarding \
&& [[ -n "$SSH_AUTH_SOCK" ]]; then
if [[ ! -L "$SSH_AUTH_SOCK" ]]; then
if [[ -n "$TERMUX_VERSION" ]]; then
ln -sf "$SSH_AUTH_SOCK" "$PREFIX"/tmp/ssh-agent-$USERNAME-screen
_omz_ssh_agent_link="$PREFIX"/tmp/ssh-agent-$USERNAME-screen
else
ln -sf "$SSH_AUTH_SOCK" /tmp/ssh-agent-$USERNAME-screen
_omz_ssh_agent_link=/tmp/ssh-agent-$USERNAME-screen
fi
# `ln -sf` unlinks the old symlink and then creates the new one: two
# syscalls, no atomic swap. Shells starting concurrently (a tmux window
# opening several panes at once) interleave those steps and all but one
# fail with "ln: ...: File exists". Stage the link under a PID-unique
# name and move it into place, since rename(2) is atomic.
command ln -sf "$SSH_AUTH_SOCK" "$_omz_ssh_agent_link.$$" \
&& command mv -f "$_omz_ssh_agent_link.$$" "$_omz_ssh_agent_link"
unset _omz_ssh_agent_link
fi
else
_start_agent
+5 -1
View File
@@ -10,4 +10,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_stripe" ]]; then
_comps[stripe]=_stripe
fi
stripe completion --shell zsh --write-to-stdout >| "$ZSH_CACHE_DIR/completions/_stripe" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_stripe"
zf_mv -f -- =( stripe completion --shell zsh --write-to-stdout ) "$TMPPREFIX"
} &|
@@ -19,6 +19,7 @@
ssm_run_sudo() {sudo $_sublime_merge_path "$@" >/dev/null 2>&1}
alias ssm=ssm_run_sudo
alias sm=sm_run
alias smerge="'$_sublime_merge_path'"
break
fi
done
@@ -33,6 +34,7 @@
if [[ -a $_sublime_merge_path ]]; then
subm () { "$_sublime_merge_path" "$@" }
alias sm=subm
alias smerge="'$_sublime_merge_path'"
break
fi
done
@@ -45,6 +47,7 @@
if [[ -a $_sublime_merge_path ]]; then
subm () { "$_sublime_merge_path" "$@" }
alias sm=subm
alias smerge="'$_sublime_merge_path'"
break
fi
done
+21 -13
View File
@@ -15,8 +15,8 @@
# - https://github.com/symfony/symfony/blob/5.4/src/Symfony/Component/Console/Resources/completion.bash
#
_sf_console() {
local lastParam flagPrefix requestComp out comp
local -a completions
local lastParam out comp sf_cmd
local -a completions flagPrefix requestComp inputs
# The user could have moved the cursor backwards on the command-line.
# We need to trigger completion from the $CURRENT location, so we need
@@ -29,11 +29,20 @@ _sf_console() {
setopt local_options BASH_REMATCH
if [[ "${lastParam}" =~ '-.*=' ]]; then
# We are dealing with a flag with an =
flagPrefix="-P ${BASH_REMATCH}"
flagPrefix=(-P "${BASH_REMATCH}")
fi
# Prepare the command to obtain completions
requestComp="${words[0]} ${words[1]} _complete --no-interaction -szsh -a1 -c$((CURRENT-1))" i=""
# Prepare the command to obtain completions. An alias is resolved here,
# because the request is no longer read again by the shell.
sf_cmd="${words[1]}"
if [[ -n "${aliases[$sf_cmd]}" ]]; then
requestComp=(${(z)aliases[$sf_cmd]})
else
requestComp=(${~sf_cmd})
fi
requestComp+=(_complete --no-interaction -szsh -a1 "-c$((CURRENT-1))")
for w in ${words[@]}; do
w=$(printf -- '%b' "$w")
# remove quotes from typed values
@@ -47,19 +56,18 @@ _sf_console() {
fi
# empty values are ignored
if [ ! -z "$w" ]; then
i="${i}-i${w} "
inputs+=("-i$w")
fi
done
# Ensure at least 1 input
if [ "${i}" = "" ]; then
requestComp="${requestComp} -i\" \""
else
requestComp="${requestComp} ${i}"
if (( ! $#inputs )); then
inputs=(-i' ')
fi
# Use eval to handle any environment variables and such
out=$(eval ${requestComp} 2>/dev/null)
# The request is run without being read again by the shell, so that a
# "$(...)" or a backtick typed on the command line is not executed
out=$(SHELL_VERBOSITY=0 "${requestComp[@]}" "${inputs[@]}" 2>/dev/null)
while IFS='\n' read -r comp; do
if [ -n "$comp" ]; then
@@ -75,7 +83,7 @@ _sf_console() {
done < <(printf "%s\n" "${out[@]}")
# Let inbuilt _describe handle completions
eval _describe "completions" completions $flagPrefix
_describe "completions" completions "${flagPrefix[@]}"
return $?
}
+1 -1
View File
@@ -138,7 +138,7 @@ function consume100() {
# Website traffic statistics (G)
function webtraffic() {
awk "{sum+=$10} END {print sum/1024/1024/1024}" "$(retlog)"
awk '{sum+=$10} END {print sum/1024/1024/1024}' "$(retlog)"
}
# Statistical connections 404
+5 -1
View File
@@ -22,4 +22,8 @@ if (( $+aliases[tailscale] )); then
_comps[${aliases[tailscale]:t}]=_tailscale
fi
tailscale completion zsh >| "$ZSH_CACHE_DIR/completions/_tailscale" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_tailscale"
zf_mv -f -- =( tailscale completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_task" ]]; then
fi
# Generate and load task completion
task --completion zsh >! "$ZSH_CACHE_DIR/completions/_task" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_task"
zf_mv -f -- =( task --completion zsh ) "$TMPPREFIX"
} &|
+5 -1
View File
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_timoni" ]]; then
_comps[timoni]=_timoni
fi
timoni completion zsh >| "$ZSH_CACHE_DIR/completions/_timoni" &|
zmodload -F zsh/files b:zf_mv
() {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_timoni"
zf_mv -f -- =( timoni completion zsh ) "$TMPPREFIX"
} &|

Some files were not shown because too many files have changed in this diff Show More