mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-21 18:46:06 +02:00
Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
acc11bc5f4 | ||
|
|
d03d367f82 | ||
|
|
eccb32c94c | ||
|
|
24d629f7f1 | ||
|
|
d6f3106269 | ||
|
|
e6561f578f | ||
|
|
9bb15d681a | ||
|
|
ee2acd0e44 | ||
|
|
d5fa35e453 | ||
|
|
2c911e3f80 | ||
|
|
cd320b5506 | ||
|
|
e8b1cca662 | ||
|
|
8e5f198226 | ||
|
|
391cafc4cf | ||
|
|
3079e2f0b5 | ||
|
|
129de5a05f | ||
|
|
bd77419b2a |
+10
-4
@@ -14,10 +14,16 @@ FX=(
|
|||||||
reverse "%{[07m%}" no-reverse "%{[27m%}"
|
reverse "%{[07m%}" no-reverse "%{[27m%}"
|
||||||
)
|
)
|
||||||
|
|
||||||
for color in {000..255}; do
|
# Build the tables with array operations instead of a 256-iteration loop
|
||||||
FG[$color]="%{[38;5;${color}m%}"
|
() {
|
||||||
BG[$color]="%{[48;5;${color}m%}"
|
setopt localoptions noksharrays
|
||||||
done
|
local -a codes fg bg
|
||||||
|
codes=({000..255})
|
||||||
|
fg=( "%{"$'\e'"[38;5;"${^codes}"m%}" )
|
||||||
|
bg=( "%{"$'\e'"[48;5;"${^codes}"m%}" )
|
||||||
|
FG=( ${codes:^fg} )
|
||||||
|
BG=( ${codes:^bg} )
|
||||||
|
}
|
||||||
|
|
||||||
# Show all 256 colors with color number
|
# Show all 256 colors with color number
|
||||||
function spectrum_ls() {
|
function spectrum_ls() {
|
||||||
|
|||||||
+6
-1
@@ -31,7 +31,12 @@ function title {
|
|||||||
else
|
else
|
||||||
# Try to use terminfo to set the title if the feature is available
|
# Try to use terminfo to set the title if the feature is available
|
||||||
if (( ${+terminfo[fsl]} && ${+terminfo[tsl]} )); then
|
if (( ${+terminfo[fsl]} && ${+terminfo[tsl]} )); then
|
||||||
print -Pn "${terminfo[tsl]}$1${terminfo[fsl]}"
|
# Emit the capabilities with echoti so terminfo does its own parameter
|
||||||
|
# substitution: some terminals (vt320) take a column argument, and
|
||||||
|
# running prompt expansion over the capability string mangles it.
|
||||||
|
echoti tsl 0
|
||||||
|
print -Pn "$1"
|
||||||
|
echoti fsl
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ function aws_regions() {
|
|||||||
function aws_profiles() {
|
function aws_profiles() {
|
||||||
aws --no-cli-pager configure list-profiles 2> /dev/null && return
|
aws --no-cli-pager configure list-profiles 2> /dev/null && return
|
||||||
[[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
|
[[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
|
||||||
grep --color=never -Eo '\[.*\]' "${AWS_CONFIG_FILE:-$HOME/.aws/config}" | sed -E 's/^[[:space:]]*\[(profile)?[[:space:]]*([^[:space:]]+)\][[:space:]]*$/\2/g'
|
command grep -Eo '^[[:space:]]*\[[[:space:]]*(profile[[:space:]]+)?[^][:space:]]+[[:space:]]*\]' "${AWS_CONFIG_FILE:-$HOME/.aws/config}" | command sed -E 's/^[[:space:]]*\[[[:space:]]*(profile[[:space:]]+)?([^][:space:]]+)[[:space:]]*\]$/\2/'
|
||||||
}
|
}
|
||||||
|
|
||||||
function _aws_regions() {
|
function _aws_regions() {
|
||||||
|
|||||||
@@ -99,18 +99,21 @@ $ find . -type f 2>/dev/null
|
|||||||
## File extension aliases
|
## File extension aliases
|
||||||
|
|
||||||
These are special aliases that are triggered when a file name is passed as the command. For example,
|
These are special aliases that are triggered when a file name is passed as the command. For example,
|
||||||
if the pdf file extension is aliased to `acroread` (a popular Linux pdf reader), when running `file.pdf`
|
if the pdf file extension is aliased to `open_command`, running `file.pdf` opens that file with
|
||||||
that file will be open with `acroread`.
|
whatever application your system uses for PDFs.
|
||||||
|
|
||||||
### Reading Docs
|
### Reading Docs
|
||||||
|
|
||||||
|
These use `open_command`, which picks the right opener for your platform: `open` on macOS,
|
||||||
|
`xdg-open` on Linux, `cygstart` on Cygwin.
|
||||||
|
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
| ----- | ---------- | ---------------------------------- |
|
| ----- | -------------- | ----------------------------------------------- |
|
||||||
| pdf | `acroread` | Opens up a document using acroread |
|
| pdf | `open_command` | Opens up a .pdf file in your default viewer |
|
||||||
| ps | `gv` | Opens up a .ps file using gv |
|
| ps | `open_command` | Opens up a .ps file in your default viewer |
|
||||||
| dvi | `xdvi` | Opens up a .dvi file using xdvi |
|
| dvi | `open_command` | Opens up a .dvi file in your default viewer |
|
||||||
| chm | `xchm` | Opens up a .chm file using xchm |
|
| chm | `open_command` | Opens up a .chm file in your default viewer |
|
||||||
| djvu | `djview` | Opens up a .djvu file using djview |
|
| djvu | `open_command` | Opens up a .djvu file in your default viewer |
|
||||||
|
|
||||||
### Listing files inside a packed file
|
### Listing files inside a packed file
|
||||||
|
|
||||||
|
|||||||
@@ -71,12 +71,9 @@ if is-at-least 4.2.0; then
|
|||||||
_media_fts=(ape avi flv m4a mkv mov mp3 mpeg mpg ogg ogm rm wav webm)
|
_media_fts=(ape avi flv m4a mkv mov mp3 mpeg mpg ogg ogm rm wav webm)
|
||||||
for ft in $_media_fts; do alias -s $ft=mplayer; done
|
for ft in $_media_fts; do alias -s $ft=mplayer; done
|
||||||
|
|
||||||
#read documents
|
# read documents with the platform's default application
|
||||||
alias -s pdf=acroread
|
_doc_fts=(pdf ps dvi chm djvu)
|
||||||
alias -s ps=gv
|
for ft in $_doc_fts; do alias -s $ft=open_command; done
|
||||||
alias -s dvi=xdvi
|
|
||||||
alias -s chm=xchm
|
|
||||||
alias -s djvu=djview
|
|
||||||
|
|
||||||
#list what's inside packed file
|
#list what's inside packed file
|
||||||
alias -s zip="unzip -l"
|
alias -s zip="unzip -l"
|
||||||
|
|||||||
@@ -1,14 +1,33 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
emacsfun() {
|
emacsfun() {
|
||||||
local cmd frames
|
local cmd frames arg tty
|
||||||
|
|
||||||
# Build the Emacs Lisp command to check for suitable frames
|
# Build the Emacs Lisp command to check for suitable frames
|
||||||
# See https://www.gnu.org/software/emacs/manual/html_node/elisp/Frames.html#index-framep
|
# See https://www.gnu.org/software/emacs/manual/html_node/elisp/Frames.html#index-framep
|
||||||
case "$*" in
|
for arg in "$@"; do
|
||||||
*-t*|*--tty*|*-nw*) cmd="(memq 't (mapcar 'framep (frame-list)))" ;; # if != nil, there are tty frames
|
case "$arg" in
|
||||||
*) cmd="(delete 't (mapcar 'framep (frame-list)))" ;; # if != nil, there are graphical terminals (x, w32, ns)
|
-t|--tty|-nw) tty=1; break ;;
|
||||||
esac
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$tty" ]; then
|
||||||
|
cmd="(memq 't (mapcar 'framep (frame-list)))" # if != nil, there are tty frames
|
||||||
|
else
|
||||||
|
cmd="(delete 't (mapcar 'framep (frame-list)))" # if != nil, there are graphical terminals (x, w32, ns)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# A tty frame needs the client to stay attached, so drop the --no-wait the
|
||||||
|
# `emacs` alias adds. Otherwise emacsclient returns at once and nothing opens.
|
||||||
|
if [ -n "$tty" ]; then
|
||||||
|
for arg do
|
||||||
|
shift
|
||||||
|
case "$arg" in
|
||||||
|
--no-wait) continue ;;
|
||||||
|
esac
|
||||||
|
set -- "$@" "$arg"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
# Check if there are suitable frames
|
# Check if there are suitable frames
|
||||||
frames="$(emacsclient -a '' -n -e "$cmd" 2>/dev/null |sed 's/.*\x07//g' )"
|
frames="$(emacsclient -a '' -n -e "$cmd" 2>/dev/null |sed 's/.*\x07//g' )"
|
||||||
|
|||||||
@@ -15,9 +15,6 @@ This plugin does not add any aliases.
|
|||||||
This plugin caches the completion script and is automatically updated when the
|
This plugin caches the completion script and is automatically updated when the
|
||||||
plugin is loaded, which is usually when you start up a new terminal emulator.
|
plugin is loaded, which is usually when you start up a new terminal emulator.
|
||||||
|
|
||||||
The cache is stored at:
|
The completion script is stored at `$ZSH_CACHE_DIR/completions/_gh`. If an
|
||||||
|
update fails, the plugin keeps the last successfully generated completion
|
||||||
- `$ZSH/plugins/gh/_gh` completions script
|
script.
|
||||||
|
|
||||||
- `$ZSH_CACHE_DIR/gh_version` version of GitHub CLI, used to invalidate
|
|
||||||
the cache.
|
|
||||||
|
|||||||
@@ -13,6 +13,12 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gh"
|
local completion_file="$ZSH_CACHE_DIR/completions/_gh"
|
||||||
zf_mv -f -- =( gh completion --shell zsh ) "$TMPPREFIX"
|
local completion_tmp="${completion_file}.$$.${RANDOM}"
|
||||||
|
|
||||||
|
if gh completion --shell zsh >| "$completion_tmp" && [[ -s "$completion_tmp" ]]; then
|
||||||
|
zf_mv -f -- "$completion_tmp" "$completion_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
command rm -f -- "$completion_tmp"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
+34
-36
@@ -1,45 +1,43 @@
|
|||||||
# github plugin
|
# github plugin
|
||||||
|
|
||||||
This plugin supports working with GitHub from the command line. It provides a few things:
|
> [!WARNING]
|
||||||
|
> This plugin is deprecated and will be removed in a future release. It supports
|
||||||
|
> the legacy [`hub`](https://github.com/mislav/hub) CLI, not the current GitHub
|
||||||
|
> CLI. For `gh` completion, use the [`gh` plugin](../gh) instead.
|
||||||
|
|
||||||
* Sets up the `hub` wrapper and completions for the `git` command if you have [`hub`](https://github.com/github/hub) installed.
|
The plugin provides compatibility for existing `hub` users by:
|
||||||
* Completion for the [`github` Ruby gem](https://github.com/defunkt/github-gem).
|
|
||||||
* Convenience functions for working with repos and URLs.
|
|
||||||
|
|
||||||
### Functions
|
- aliasing `git` to `hub` when `hub` is installed;
|
||||||
|
- adding completion for `hub`; and
|
||||||
|
- defining convenience functions for creating repositories.
|
||||||
|
|
||||||
* `empty_gh` - Creates a new empty repo (with a `README.md`) and pushes it to GitHub
|
## Migrating to GitHub CLI
|
||||||
* `new_gh` - Initializes an existing directory as a repo and pushes it to GitHub
|
|
||||||
* `exist_gh` - Takes an existing repo and pushes it to GitHub
|
|
||||||
|
|
||||||
|
Install [GitHub CLI](https://cli.github.com/), replace `github` with `gh` in
|
||||||
## Installation
|
your plugin list, and restart your shell:
|
||||||
|
|
||||||
[Hub](https://github.com/github/hub) needs to be installed if you want to use it. On OS X with Homebrew, this can be done with `brew install hub`. The `hub` completion definition needs to be added to your `$FPATH` before initializing OMZ.
|
|
||||||
|
|
||||||
The [`github` Ruby gem](https://github.com/defunkt/github-gem) needs to be installed if you want to use it.
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
These settings affect `github`'s behavior.
|
|
||||||
|
|
||||||
#### Environment variables
|
|
||||||
|
|
||||||
* `$GITHUB_USER`
|
|
||||||
* `$GITHUB_PASSWORD`
|
|
||||||
|
|
||||||
#### Git configuration options
|
|
||||||
|
|
||||||
* `github.user` - GitHub username for repo operations
|
|
||||||
|
|
||||||
See `man hub` for more details.
|
|
||||||
|
|
||||||
### Homebrew installation note
|
|
||||||
|
|
||||||
If you have installed `hub` using Homebrew, its completions may not be on your `$FPATH` if you are using the system `zsh`. Homebrew installs `zsh` completion definitions to `/usr/local/share/zsh/site-functions`, which will be on `$FPATH` for the Homebrew-installed `zsh`, but not for the system `zsh`. If you want it to work with the system `zsh`, add this to your `~/.zshrc` before it sources `oh-my-zsh.sh`.
|
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
if (( ! ${fpath[(I)/usr/local/share/zsh/site-functions]} )); then
|
plugins=(... gh)
|
||||||
FPATH=/usr/local/share/zsh/site-functions:$FPATH
|
|
||||||
fi
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The `gh` plugin supplies completion for the installed GitHub CLI. It does not
|
||||||
|
alias `git`, because `gh` is not a Git wrapper.
|
||||||
|
|
||||||
|
The closest replacement for creating a GitHub repository from an existing
|
||||||
|
local repository is:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
gh repo create --source=. --push
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deprecated functions
|
||||||
|
|
||||||
|
- `empty_gh` - creates a new repository with a `README.md` and pushes it to GitHub
|
||||||
|
- `new_gh` - initializes an existing directory and pushes it to GitHub
|
||||||
|
- `exist_gh` - pushes an existing Git repository to GitHub
|
||||||
|
|
||||||
|
These functions remain available during the deprecation period and require
|
||||||
|
`hub`. They will be removed with the plugin.
|
||||||
|
|
||||||
|
If you continue using `hub`, see its documentation for authentication and
|
||||||
|
configuration details.
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
print -Pru2 -- '%F{yellow}[oh-my-zsh] The %Bgithub%b plugin is deprecated and will be removed in a future release.'
|
||||||
|
print -Pru2 -- 'It supports the legacy %Bhub%b CLI. Use the %Bgh%b plugin for GitHub CLI completion.%f'
|
||||||
|
|
||||||
# Set up hub wrapper for git, if it is available; https://github.com/github/hub
|
# Set up hub wrapper for git, if it is available; https://github.com/github/hub
|
||||||
if (( $+commands[hub] )); then
|
if (( $+commands[hub] )); then
|
||||||
alias git=hub
|
alias git=hub
|
||||||
@@ -26,7 +29,7 @@ empty_gh() { # [NAME_OF_REPO]
|
|||||||
# This function will add all non-hidden files to git.
|
# This function will add all non-hidden files to git.
|
||||||
new_gh() { # [DIRECTORY]
|
new_gh() { # [DIRECTORY]
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
local repo="$1"
|
local repo="${1:-.}"
|
||||||
cd "$repo" \
|
cd "$repo" \
|
||||||
|| return
|
|| return
|
||||||
|
|
||||||
@@ -42,7 +45,7 @@ new_gh() { # [DIRECTORY]
|
|||||||
|| return
|
|| return
|
||||||
hub create \
|
hub create \
|
||||||
|| return
|
|| return
|
||||||
git push -u origin master \
|
git push -u origin HEAD \
|
||||||
|| return
|
|| return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,12 +55,13 @@ new_gh() { # [DIRECTORY]
|
|||||||
# to your GitHub.
|
# to your GitHub.
|
||||||
exist_gh() { # [DIRECTORY]
|
exist_gh() { # [DIRECTORY]
|
||||||
emulate -L zsh
|
emulate -L zsh
|
||||||
local repo=$1
|
local repo="${1:-.}"
|
||||||
cd "$repo"
|
cd "$repo" \
|
||||||
|
|| return
|
||||||
|
|
||||||
hub create \
|
hub create \
|
||||||
|| return
|
|| return
|
||||||
git push -u origin master
|
git push -u origin HEAD
|
||||||
}
|
}
|
||||||
|
|
||||||
# git.io "GitHub URL"
|
# git.io "GitHub URL"
|
||||||
@@ -74,4 +78,3 @@ git.io() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# End Functions #############################################################
|
# End Functions #############################################################
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,163 @@
|
|||||||
|
# herdr plugin
|
||||||
|
|
||||||
|
This plugin adds completion, aliases, an interactive session picker and a prompt
|
||||||
|
function for [herdr](https://herdr.dev), the runtime your
|
||||||
|
coding agents live on. herdr keeps agent terminals running in the background across
|
||||||
|
projects and machines, so you can close your terminal, reconnect later, and pick up
|
||||||
|
where the agents left off.
|
||||||
|
|
||||||
|
To use it, add `herdr` to the plugins array in your zshrc file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... herdr)
|
||||||
|
```
|
||||||
|
|
||||||
|
Install herdr first if you have not already:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -fsSL https://herdr.dev/install.sh | sh # or: brew install herdr
|
||||||
|
```
|
||||||
|
|
||||||
|
## Learning herdr from the terminal
|
||||||
|
|
||||||
|
The fastest way to explore herdr is tab completion. Every command group and flag shows a
|
||||||
|
short description, so you can discover what is available without leaving the shell:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ herdr <TAB>
|
||||||
|
agent -- Control and inspect agent panes
|
||||||
|
session -- Manage named persistent sessions
|
||||||
|
workspace -- Manage workspaces over the socket API
|
||||||
|
worktree -- Manage Git worktree-backed workspaces
|
||||||
|
...
|
||||||
|
$ herdr agent <TAB>
|
||||||
|
list -- List agents
|
||||||
|
prompt -- Submit a prompt to an agent
|
||||||
|
start -- Start a supported interactive agent in an existing pane
|
||||||
|
wait -- Wait until an agent reaches one of the requested states
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
A few other ways to learn as you go:
|
||||||
|
|
||||||
|
- `herdr <group>` with no subcommand prints that group's help, for example `herdr pane`.
|
||||||
|
- `herdr --skill` prints the instructions herdr gives to agents that drive it. It is a
|
||||||
|
good tour of the full command surface.
|
||||||
|
- Most control commands return JSON, so you can pipe them into `jq` in scripts.
|
||||||
|
|
||||||
|
## Common workflows
|
||||||
|
|
||||||
|
### Start and reconnect
|
||||||
|
|
||||||
|
```sh
|
||||||
|
herdr # launch, or attach to the default session
|
||||||
|
herdr --session work # use or create a named session
|
||||||
|
herdr session list # see running and stopped sessions
|
||||||
|
herdr session attach work # reconnect to a named session
|
||||||
|
herdr status # check the local client and running server
|
||||||
|
herdr update # install the latest release
|
||||||
|
```
|
||||||
|
|
||||||
|
### Organize work into workspaces and tabs
|
||||||
|
|
||||||
|
```sh
|
||||||
|
herdr workspace list
|
||||||
|
herdr workspace create --cwd ~/projects/app
|
||||||
|
herdr tab create
|
||||||
|
herdr pane split --direction right
|
||||||
|
herdr worktree create --branch feature/login # open a Git worktree in its own workspace
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run and watch agents
|
||||||
|
|
||||||
|
```sh
|
||||||
|
herdr agent list # what is running, and is it idle, working or blocked
|
||||||
|
herdr agent start reviewer --kind claude --pane w1:p2
|
||||||
|
herdr agent prompt reviewer "review the last commit" --wait
|
||||||
|
herdr agent read reviewer # read the agent's terminal output
|
||||||
|
herdr agent wait reviewer --until idle
|
||||||
|
herdr agent attach reviewer # jump straight into that terminal
|
||||||
|
```
|
||||||
|
|
||||||
|
### Work across machines
|
||||||
|
|
||||||
|
```sh
|
||||||
|
herdr --remote user@build-box # attach through SSH with your local keybindings
|
||||||
|
```
|
||||||
|
|
||||||
|
### Keep the server healthy
|
||||||
|
|
||||||
|
```sh
|
||||||
|
herdr config check # validate config.toml
|
||||||
|
herdr server reload-config # apply config changes without restarting panes
|
||||||
|
herdr server stop
|
||||||
|
herdr channel set preview # switch between stable and preview releases
|
||||||
|
herdr integration status # which agent CLIs have herdr hooks installed
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [CLI reference](https://herdr.dev/docs/cli-reference/) for every command and flag.
|
||||||
|
|
||||||
|
## Aliases
|
||||||
|
|
||||||
|
| Alias | Command |
|
||||||
|
| ------- | ----------------------------- |
|
||||||
|
| `hrdr` | `herdr` |
|
||||||
|
| `hrdrst` | `herdr status` |
|
||||||
|
| `hrdrup` | `herdr update` |
|
||||||
|
| `hrdrsl` | `herdr session list` |
|
||||||
|
| `hrdrsa` | `herdr session attach` |
|
||||||
|
| `hrdrr` | `herdr --remote` |
|
||||||
|
| `hrdral` | `herdr agent list` |
|
||||||
|
| `hrdrwl` | `herdr workspace list` |
|
||||||
|
| `hrdrwc` | `herdr workspace create` |
|
||||||
|
| `hrdrwt` | `herdr worktree create` |
|
||||||
|
| `hrdrps` | `herdr pane split` |
|
||||||
|
| `hrdrrc` | `herdr server reload-config` |
|
||||||
|
|
||||||
|
Tab completion works through the aliases too, so `hrdr agent <TAB>` completes the same
|
||||||
|
way `herdr agent <TAB>` does.
|
||||||
|
|
||||||
|
## Session picker
|
||||||
|
|
||||||
|
`hrdrs` lists your herdr sessions and attaches to the one you pick. It uses
|
||||||
|
[fzf](https://github.com/junegunn/fzf) when it is installed and falls back to a numbered
|
||||||
|
menu otherwise, so it works everywhere.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ hrdrs
|
||||||
|
name status directory
|
||||||
|
1) default running /Users/me/.config/herdr
|
||||||
|
2) work stopped /Users/me/projects/app
|
||||||
|
Attach to session: 2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prompt
|
||||||
|
|
||||||
|
This plugin provides the `herdr_prompt_info` function to show the current pane ID in
|
||||||
|
your prompt when the shell is running inside herdr. It reads environment variables only,
|
||||||
|
so it adds no cost to prompt rendering.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
```
|
||||||
|
PROMPT="%~$ "
|
||||||
|
RPROMPT='$(herdr_prompt_info)'
|
||||||
|
```
|
||||||
|
changes your prompt inside a herdr pane to:
|
||||||
|
```
|
||||||
|
~/projects/app$ ▋ w1:p4
|
||||||
|
```
|
||||||
|
and shows nothing outside herdr.
|
||||||
|
|
||||||
|
Wrap it with `ZSH_THEME_HERDR_PROMPT_PREFIX` and `ZSH_THEME_HERDR_PROMPT_SUFFIX`, for
|
||||||
|
example:
|
||||||
|
```
|
||||||
|
ZSH_THEME_HERDR_PROMPT_PREFIX="%{$fg[cyan]%}[herdr "
|
||||||
|
ZSH_THEME_HERDR_PROMPT_SUFFIX="]%{$reset_color%}"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 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/_herdr`.
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# Aliases, helpers and completion for herdr (https://herdr.dev), the runtime for coding agents.
|
||||||
|
|
||||||
|
# PROMPT
|
||||||
|
# Defined before the herdr check so themes can reference it on machines without herdr.
|
||||||
|
function herdr_prompt_info {
|
||||||
|
[[ "$HERDR_ENV" == 1 ]] || return
|
||||||
|
echo "${ZSH_THEME_HERDR_PROMPT_PREFIX}${HERDR_PANE_ID:gs/%/%%}${ZSH_THEME_HERDR_PROMPT_SUFFIX}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (( ! $+commands[herdr] )); then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ALIASES
|
||||||
|
alias hrdr='herdr'
|
||||||
|
alias hrdrst='herdr status'
|
||||||
|
alias hrdrup='herdr update'
|
||||||
|
alias hrdrsl='herdr session list'
|
||||||
|
alias hrdrsa='herdr session attach'
|
||||||
|
alias hrdrr='herdr --remote'
|
||||||
|
alias hrdral='herdr agent list'
|
||||||
|
alias hrdrwl='herdr workspace list'
|
||||||
|
alias hrdrwc='herdr workspace create'
|
||||||
|
alias hrdrwt='herdr worktree create'
|
||||||
|
alias hrdrps='herdr pane split'
|
||||||
|
alias hrdrrc='herdr server reload-config'
|
||||||
|
|
||||||
|
# FUNCTIONS
|
||||||
|
# Pick a session and attach to it, with fzf if available or a numbered menu otherwise.
|
||||||
|
function hrdrs {
|
||||||
|
setopt localoptions extendedglob
|
||||||
|
local -a lines
|
||||||
|
lines=("${(@f)$(herdr session list 2>/dev/null)}")
|
||||||
|
lines=("${(@)lines%%[[:space:]]#[^[:space:]]#}") # drop the socket column
|
||||||
|
if (( $#lines < 2 )); then
|
||||||
|
print "hrdrs: no herdr sessions found" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local choice
|
||||||
|
if (( $+commands[fzf] )); then
|
||||||
|
choice=$(print -l -- "${lines[@]}" | fzf --header-lines=1 --prompt='herdr session> ') || return
|
||||||
|
else
|
||||||
|
print -- "${lines[1]}"
|
||||||
|
local PS3="Attach to session: "
|
||||||
|
select choice in "${lines[@]:1}"; do
|
||||||
|
[[ -n "$choice" ]] && break
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
[[ -n "$choice" ]] || return 1
|
||||||
|
|
||||||
|
herdr session attach "${${(z)choice}[1]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# COMPLETION
|
||||||
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
|
# bind it to `herdr`. Otherwise, compinit will have already done that.
|
||||||
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_herdr" ]]; then
|
||||||
|
typeset -g -A _comps
|
||||||
|
autoload -Uz _herdr
|
||||||
|
_comps[herdr]=_herdr
|
||||||
|
fi
|
||||||
|
|
||||||
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_herdr"
|
||||||
|
zf_mv -f -- =( herdr completion zsh < /dev/null 2> /dev/null ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
@@ -55,7 +55,7 @@ plugins=(... jj)
|
|||||||
| jjopl | `jj op log` |
|
| jjopl | `jj op log` |
|
||||||
| jjor | `jj op restore` |
|
| jjor | `jj op restore` |
|
||||||
| jjrb | `jj rebase` |
|
| jjrb | `jj rebase` |
|
||||||
| jjrbm | `jj rebase -d "trunk()"` |
|
| jjrbm | `jj rebase -o "trunk()"` |
|
||||||
| jjrs | `jj restore` |
|
| jjrs | `jj restore` |
|
||||||
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
||||||
| jjs | `jj show` |
|
| jjs | `jj show` |
|
||||||
@@ -120,10 +120,10 @@ that.
|
|||||||
|
|
||||||
### Git async-prompt compatibility
|
### Git async-prompt compatibility
|
||||||
|
|
||||||
If you use a wrapper function that calls `git_prompt_info` (as shown above), it won't work with
|
If you use a wrapper function that calls `git_prompt_info` (as shown above), it won't work with the default
|
||||||
the default git async-prompt mode. This is because async-prompt only registers its background worker
|
git async-prompt mode. This is because async-prompt only registers its background worker when it detects
|
||||||
when it detects `$(git_prompt_info)` literally in your prompt variables. A wrapper like
|
`$(git_prompt_info)` literally in your prompt variables. A wrapper like `$(_my_theme_vcs_info)` won't match,
|
||||||
`$(_my_theme_vcs_info)` won't match, so the async output stays empty.
|
so the async output stays empty.
|
||||||
|
|
||||||
To fix this, add one of the following to your `.zshrc` **before** Oh My Zsh is sourced:
|
To fix this, add one of the following to your `.zshrc` **before** Oh My Zsh is sourced:
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ alias jjop='jj op'
|
|||||||
alias jjopl='jj op log'
|
alias jjopl='jj op log'
|
||||||
alias jjor='jj op restore'
|
alias jjor='jj op restore'
|
||||||
alias jjrb='jj rebase'
|
alias jjrb='jj rebase'
|
||||||
alias jjrbm='jj rebase -d "trunk()"'
|
alias jjrbm='jj rebase -o "trunk()"'
|
||||||
alias jjrs='jj restore'
|
alias jjrs='jj restore'
|
||||||
alias jjrt='cd "$(jj root || echo .)"'
|
alias jjrt='cd "$(jj root || echo .)"'
|
||||||
alias jjs='jj show'
|
alias jjs='jj show'
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ plugins=(... kubectl)
|
|||||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||||
| kccc | `kubectl config current-context` | Display the current-context |
|
| kccc | `kubectl config current-context` | Display the current-context |
|
||||||
|
| kcrc | `kubectl config rename-context` | Rename a context from the kubeconfig file |
|
||||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||||
| | | **General aliases** |
|
| | | **General aliases** |
|
||||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||||
@@ -130,7 +131,7 @@ plugins=(... kubectl)
|
|||||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a statefulset |
|
||||||
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
||||||
| | | **Service Accounts management** |
|
| | | **Service Accounts management** |
|
||||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ alias kcuc='kubectl config use-context'
|
|||||||
alias kcsc='kubectl config set-context'
|
alias kcsc='kubectl config set-context'
|
||||||
alias kcdc='kubectl config delete-context'
|
alias kcdc='kubectl config delete-context'
|
||||||
alias kccc='kubectl config current-context'
|
alias kccc='kubectl config current-context'
|
||||||
|
alias kcrc='kubectl config rename-context'
|
||||||
|
|
||||||
# List all contexts
|
# List all contexts
|
||||||
alias kcgc='kubectl config get-contexts'
|
alias kcgc='kubectl config get-contexts'
|
||||||
|
|||||||
@@ -1,111 +0,0 @@
|
|||||||
# opencode plugin
|
|
||||||
|
|
||||||
This plugin adds completion and aliases for the [OpenCode](https://opencode.ai) CLI.
|
|
||||||
Install OpenCode using its [installation instructions](https://opencode.ai/docs/#install),
|
|
||||||
and make sure `opencode` is available on your `$PATH`.
|
|
||||||
|
|
||||||
To enable it, add `opencode` to the plugins array in your `.zshrc`:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... opencode)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Learning OpenCode from the terminal
|
|
||||||
|
|
||||||
Use tab completion to explore commands and their descriptions without leaving the
|
|
||||||
shell. For example, these are some of the candidates shown by the CLI:
|
|
||||||
|
|
||||||
```text
|
|
||||||
$ opencode <TAB>
|
|
||||||
agent -- manage agents
|
|
||||||
models -- list all available models
|
|
||||||
run -- run opencode with a message
|
|
||||||
session -- manage sessions
|
|
||||||
stats -- show token usage and cost statistics
|
|
||||||
...
|
|
||||||
|
|
||||||
$ opencode session <TAB>
|
|
||||||
delete -- delete a session
|
|
||||||
list -- list sessions
|
|
||||||
|
|
||||||
$ opencode run --<TAB>
|
|
||||||
--agent -- agent to use
|
|
||||||
--continue -- continue the last session
|
|
||||||
--file -- file(s) to attach to message
|
|
||||||
--model -- model to use in the format of provider/model
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
Completion works through the aliases too. Type a partial command or option and
|
|
||||||
press Tab to finish it:
|
|
||||||
|
|
||||||
```text
|
|
||||||
$ opc session li<TAB>
|
|
||||||
$ opc session list
|
|
||||||
|
|
||||||
$ opcr --att<TAB>
|
|
||||||
$ opcr --attach
|
|
||||||
|
|
||||||
$ opcc --log-l<TAB>
|
|
||||||
$ opcc --log-level
|
|
||||||
```
|
|
||||||
|
|
||||||
Candidates depend on your installed OpenCode version. In OpenCode 1.18.29, the
|
|
||||||
CLI's completion output omits top-level TUI flags such as `--model` and `--fork`,
|
|
||||||
even though those flags work when typed. Use `opencode --help` or
|
|
||||||
`opencode run --help` for the full options, and see the
|
|
||||||
[CLI reference](https://opencode.ai/docs/cli/) for more workflows.
|
|
||||||
|
|
||||||
## Aliases
|
|
||||||
|
|
||||||
| Alias | Command | Description |
|
|
||||||
| ------ | --------------------- | ----------------------------------- |
|
|
||||||
| `opc` | `opencode` | Launch the terminal UI |
|
|
||||||
| `opcc` | `opencode --continue` | Continue the last session |
|
|
||||||
| `opcr` | `opencode run` | Run a prompt without opening the UI |
|
|
||||||
|
|
||||||
To keep completion but skip the aliases, set this in your `.zshrc`, above the line
|
|
||||||
that sources Oh My Zsh:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
# ~/.zshrc
|
|
||||||
zstyle ':omz:plugins:opencode' aliases no
|
|
||||||
|
|
||||||
plugins=(... opencode)
|
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common workflows
|
|
||||||
|
|
||||||
All aliases accept additional arguments:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
# Open a project
|
|
||||||
opc ~/projects/my-app
|
|
||||||
|
|
||||||
# Explore a different approach by forking the last session
|
|
||||||
opcc --fork
|
|
||||||
|
|
||||||
# Ask a question without entering the terminal UI
|
|
||||||
opcr "Explain the test setup in this project"
|
|
||||||
|
|
||||||
# Reuse an already running backend to avoid MCP server cold starts
|
|
||||||
opcr --attach http://localhost:4096 "Explain this project's architecture"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Completion
|
|
||||||
|
|
||||||
Completion queries the installed OpenCode CLI on demand for commands and options,
|
|
||||||
including through the aliases above. It falls back to Zsh's default completion when
|
|
||||||
the CLI returns no candidates. No OpenCode process is started at shell startup,
|
|
||||||
and no generated completion cache is needed.
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
Based on the OpenCode plugin proposals by
|
|
||||||
[pranavavva](https://github.com/pranavavva) in
|
|
||||||
[#13545](https://github.com/ohmyzsh/ohmyzsh/pull/13545) and
|
|
||||||
[mskadu](https://github.com/mskadu) in
|
|
||||||
[#13794](https://github.com/ohmyzsh/ohmyzsh/pull/13794).
|
|
||||||
The completion adapter is derived from OpenCode's `opencode completion` output.
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#compdef opencode
|
|
||||||
|
|
||||||
# Adapted from `opencode completion`, using the CLI's live Yargs completions.
|
|
||||||
local -a reply
|
|
||||||
reply=("${(@f)$(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" \
|
|
||||||
command opencode --get-yargs-completions "${words[@]}" < /dev/null 2> /dev/null)}")
|
|
||||||
|
|
||||||
if [[ -n "${reply[1]}" ]]; then
|
|
||||||
_describe 'values' reply
|
|
||||||
else
|
|
||||||
_default
|
|
||||||
fi
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
if (( ! $+commands[opencode] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
alias opc='opencode'
|
|
||||||
alias opcc='opencode --continue'
|
|
||||||
alias opcr='opencode run'
|
|
||||||
@@ -139,7 +139,6 @@ function rdsl() { _rails_db_command db:schema:load "$@" }
|
|||||||
|
|
||||||
# legacy stuff
|
# legacy stuff
|
||||||
alias sc='ruby script/console'
|
alias sc='ruby script/console'
|
||||||
alias sd='ruby script/destroy'
|
|
||||||
alias sd='ruby script/server --debugger'
|
alias sd='ruby script/server --debugger'
|
||||||
alias sg='ruby script/generate'
|
alias sg='ruby script/generate'
|
||||||
alias sp='ruby script/plugin'
|
alias sp='ruby script/plugin'
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
# Load bracketed-paste-magic if zsh version is >= 5.1
|
# Load bracketed-paste-magic if zsh version is >= 5.1
|
||||||
autoload -Uz is-at-least
|
autoload -Uz is-at-least
|
||||||
if is-at-least 5.1; then
|
if is-at-least 5.1; then
|
||||||
set zle_bracketed_paste # Explicitly restore this zsh default
|
|
||||||
autoload -Uz bracketed-paste-magic
|
autoload -Uz bracketed-paste-magic
|
||||||
zle -N bracketed-paste bracketed-paste-magic
|
zle -N bracketed-paste bracketed-paste-magic
|
||||||
return ### The rest of this file is NOT executed on zsh version >= 5.1 ###
|
return ### The rest of this file is NOT executed on zsh version >= 5.1 ###
|
||||||
|
|||||||
@@ -21,6 +21,18 @@ To enable **agent forwarding support** add the following to your zshrc file:
|
|||||||
zstyle :omz:plugins:ssh-agent agent-forwarding yes
|
zstyle :omz:plugins:ssh-agent agent-forwarding yes
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `honor-existing`
|
||||||
|
|
||||||
|
If your session already provides an ssh-agent — a desktop keyring, `gpg-agent`,
|
||||||
|
KeePassXC, or an agent forwarded over SSH — the plugin normally ignores it and
|
||||||
|
starts one of its own, which leaves you with two agents. Set this to reuse the
|
||||||
|
running agent instead, and only start a new one when `$SSH_AUTH_SOCK` is empty
|
||||||
|
or does not answer:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
zstyle :omz:plugins:ssh-agent honor-existing yes
|
||||||
|
```
|
||||||
|
|
||||||
### `helper`
|
### `helper`
|
||||||
|
|
||||||
To set an **external helper** to ask for the passwords and possibly store
|
To set an **external helper** to ask for the passwords and possibly store
|
||||||
|
|||||||
@@ -1,16 +1,28 @@
|
|||||||
# Get the filename to store/lookup the environment from
|
# Get the filename to store/lookup the environment from
|
||||||
ssh_env_cache="$HOME/.ssh/environment-$SHORT_HOST"
|
ssh_env_cache="$HOME/.ssh/environment-$SHORT_HOST"
|
||||||
|
|
||||||
|
# Test if $SSH_AUTH_SOCK points at a listening agent
|
||||||
|
function _is_agent_running() {
|
||||||
|
local REPLY
|
||||||
|
[[ -n "$SSH_AUTH_SOCK" && -S "$SSH_AUTH_SOCK" ]] || return 1
|
||||||
|
zmodload zsh/net/socket 2>/dev/null || return 1
|
||||||
|
zsocket "$SSH_AUTH_SOCK" 2>/dev/null || return 1
|
||||||
|
exec {REPLY}>&- # close the probe connection
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
function _start_agent() {
|
function _start_agent() {
|
||||||
|
# Reuse an agent the session already provides, if enabled
|
||||||
|
if zstyle -t :omz:plugins:ssh-agent honor-existing && _is_agent_running; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
# Check if ssh-agent is already running
|
# Check if ssh-agent is already running
|
||||||
if [[ -f "$ssh_env_cache" ]]; then
|
if [[ -f "$ssh_env_cache" ]]; then
|
||||||
. "$ssh_env_cache" > /dev/null
|
. "$ssh_env_cache" > /dev/null
|
||||||
|
|
||||||
# Test if $SSH_AUTH_SOCK is visible
|
# Test if $SSH_AUTH_SOCK is visible
|
||||||
zmodload zsh/net/socket
|
_is_agent_running && return 0
|
||||||
if [[ -S "$SSH_AUTH_SOCK" ]] && zsocket "$SSH_AUTH_SOCK" 2>/dev/null; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -d "$HOME/.ssh" ]]; then
|
if [[ ! -d "$HOME/.ssh" ]]; then
|
||||||
@@ -124,4 +136,4 @@ if ! zstyle -t :omz:plugins:ssh-agent lazy; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
unset agent_forwarding ssh_env_cache
|
unset agent_forwarding ssh_env_cache
|
||||||
unfunction _start_agent _add_identities
|
unfunction _start_agent _add_identities _is_agent_running
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ Related: [#9798](https://github.com/ohmyzsh/ohmyzsh/pull/9798).
|
|||||||
| Alias | Commands | Description |
|
| Alias | Commands | Description |
|
||||||
| ----- | ------------------- | ---------------------------------------- |
|
| ----- | ------------------- | ---------------------------------------- |
|
||||||
| zar | `sudo zypper ar` | add a repository |
|
| zar | `sudo zypper ar` | add a repository |
|
||||||
| zcl | `sudo zypper clean` | clean cache |
|
|
||||||
| zlr | `zypper lr` | list repositories |
|
| zlr | `zypper lr` | list repositories |
|
||||||
| zmr | `sudo zypper mr` | modify repositories |
|
| zmr | `sudo zypper mr` | modify repositories |
|
||||||
| znr | `sudo zypper nr` | rename repositories (for the alias only) |
|
| znr | `sudo zypper nr` | rename repositories (for the alias only) |
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ alias zwp='zypper --no-refresh wp'
|
|||||||
|
|
||||||
#Repositories commands
|
#Repositories commands
|
||||||
alias zar='sudo zypper ar'
|
alias zar='sudo zypper ar'
|
||||||
alias zcl='sudo zypper clean'
|
|
||||||
alias zlr='zypper lr'
|
alias zlr='zypper lr'
|
||||||
alias zmr='sudo zypper mr'
|
alias zmr='sudo zypper mr'
|
||||||
alias znr='sudo zypper nr'
|
alias znr='sudo zypper nr'
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ plugins=(... systemd)
|
|||||||
| `sc-set-environment` | `sudo systemctl set-environment` | Set one or more systemd manager environment variables |
|
| `sc-set-environment` | `sudo systemctl set-environment` | Set one or more systemd manager environment variables |
|
||||||
| `sc-unset-environment` | `sudo systemctl unset-environment` | Unset one or more systemd manager environment variables |
|
| `sc-unset-environment` | `sudo systemctl unset-environment` | Unset one or more systemd manager environment variables |
|
||||||
| `sc-edit` | `sudo systemctl edit` | Edit a drop-in snippet or a whole replacement file with `--full` |
|
| `sc-edit` | `sudo systemctl edit` | Edit a drop-in snippet or a whole replacement file with `--full` |
|
||||||
|
| `sc-edit-full` | `sudo systemctl edit --full` | Edit the whole unit file instead of a drop-in snippet |
|
||||||
| `sc-enable-now` | `sudo systemctl enable --now` | Enable and start unit(s) |
|
| `sc-enable-now` | `sudo systemctl enable --now` | Enable and start unit(s) |
|
||||||
| `sc-disable-now` | `sudo systemctl disable --now` | Disable and stop unit(s) |
|
| `sc-disable-now` | `sudo systemctl disable --now` | Disable and stop unit(s) |
|
||||||
| `sc-mask-now` | `sudo systemctl mask --now` | Mask and stop unit(s) |
|
| `sc-mask-now` | `sudo systemctl mask --now` | Mask and stop unit(s) |
|
||||||
|
|||||||
@@ -97,6 +97,10 @@ alias scu-mask-now="scu-mask --now"
|
|||||||
alias scu-failed='systemctl --user --failed'
|
alias scu-failed='systemctl --user --failed'
|
||||||
alias sc-failed='systemctl --failed'
|
alias sc-failed='systemctl --failed'
|
||||||
|
|
||||||
|
# --full commands
|
||||||
|
alias sc-edit-full="sc-edit --full"
|
||||||
|
alias scu-edit-full="scu-edit --full"
|
||||||
|
|
||||||
function systemd_prompt_info {
|
function systemd_prompt_info {
|
||||||
local unit
|
local unit
|
||||||
for unit in "$@"; do
|
for unit in "$@"; do
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then
|
|||||||
# Get absolute path, resolving symlinks
|
# Get absolute path, resolving symlinks
|
||||||
local PROJECT_ROOT="${PWD:A}"
|
local PROJECT_ROOT="${PWD:A}"
|
||||||
while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" \
|
while [[ "$PROJECT_ROOT" != "/" && ! -e "$PROJECT_ROOT/.venv" \
|
||||||
&& ! -d "$PROJECT_ROOT/.git" ]]; do
|
&& ! -e "$PROJECT_ROOT/.git" ]]; do
|
||||||
PROJECT_ROOT="${PROJECT_ROOT:h}"
|
PROJECT_ROOT="${PROJECT_ROOT:h}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -314,8 +314,11 @@ prompt_dir() {
|
|||||||
|
|
||||||
# Virtualenv: current working virtualenv
|
# Virtualenv: current working virtualenv
|
||||||
prompt_virtualenv() {
|
prompt_virtualenv() {
|
||||||
if [ -n "$CONDA_DEFAULT_ENV" ]; then
|
# Skip the conda segment when conda is already showing the environment itself,
|
||||||
prompt_segment magenta $CURRENT_FG "🐍 $CONDA_DEFAULT_ENV"
|
# i.e. when changeps1 is left on. This mirrors how VIRTUAL_ENV_DISABLE_PROMPT
|
||||||
|
# is handled below, and stops the name appearing twice in the prompt.
|
||||||
|
if [[ -n "$CONDA_DEFAULT_ENV" && -z "$CONDA_PROMPT_MODIFIER" ]]; then
|
||||||
|
prompt_segment magenta $CURRENT_FG "🐍 ${CONDA_DEFAULT_ENV:t:gs/%/%%}"
|
||||||
fi
|
fi
|
||||||
if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then
|
if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then
|
||||||
prompt_segment "$AGNOSTER_VENV_BG" "$AGNOSTER_VENV_FG" "(${VIRTUAL_ENV:t:gs/%/%%})"
|
prompt_segment "$AGNOSTER_VENV_BG" "$AGNOSTER_VENV_FG" "(${VIRTUAL_ENV:t:gs/%/%%})"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ function theme_precmd {
|
|||||||
if (( promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize > TERMWIDTH )); then
|
if (( promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize > TERMWIDTH )); then
|
||||||
(( PR_PWDLEN = TERMWIDTH - promptsize ))
|
(( PR_PWDLEN = TERMWIDTH - promptsize ))
|
||||||
elif [[ "${langinfo[CODESET]}" = UTF-8 ]]; then
|
elif [[ "${langinfo[CODESET]}" = UTF-8 ]]; then
|
||||||
PR_FILLBAR="\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize ) ))::${PR_HBAR}:)}"
|
PR_FILLBAR="\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize ) ))::─:)}"
|
||||||
else
|
else
|
||||||
PR_FILLBAR="${PR_SHIFT_IN}\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize ) ))::${altchar[q]:--}:)}${PR_SHIFT_OUT}"
|
PR_FILLBAR="${PR_SHIFT_IN}\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize ) ))::${altchar[q]:--}:)}${PR_SHIFT_OUT}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user