Shell tricks
A collection of shell utities leveraging mise.
Prompt colouring
In ZSH to set the prompt colour whenever mise updates the environment (e.g. on cd into a project, or due to modification of the .mise*.toml):
# activate mise like normal
source <(command mise activate zsh)
typeset -i _mise_updated
# replace default mise hook
function _mise_hook {
local diff=${__MISE_DIFF}
source <(command mise hook-env -s zsh)
[[ ${diff} == ${__MISE_DIFF} ]]
_mise_updated=$?
}
_PROMPT="❱ " # or _PROMPT=${PROMPT} to keep the default
function _prompt {
if (( ${_mise_updated} )); then
PROMPT='%F{blue}${_PROMPT}%f'
else
PROMPT='%(?.%F{green}${_PROMPT}%f.%F{red}${_PROMPT}%f)'
fi
}
add-zsh-hook precmd _promptNow, when mise makes any updates to the environment the prompt will go blue.
Current configuration environment in powerline-go prompt
powerline-go's shell-var segment can be used to display the value of an environment variable in the prompt. The current mise configuration environment, MISE_ENV is a good candidate for this.
Mostly, it is as one would expect: include shell-var in -modules, and -shell-var MISE_ENV -shell-var-no-warn-empty in arguments, and make sure MISE_ENV is exported so powerline-go can "see" it.
A gotcha as of February 2025 is that the shell-var module does not tolerate unset (as opposed to empty) environment variables. To work around this, set MISE_ENV to an empty value early in the shell startup scripts, and avoid manually unseting it. For example for bash, typically in ~/.bashrc:
export MISE_ENV=Inspect what changed after mise hook
Using record-query you can inspect the __MISE_DIFF and __MISE_SESSION variables to see what's changing in your environment due to the mise hook.
[tools]
"cargo:record-query" = "latest"function mise_parse_env {
rq -m < <(
zcat -q < <(
printf $'\x1f\x8b\x08\x00\x00\x00\x00\x00'
base64 -d <<< "$1"
)
)
}$ mise_parse_env "${__MISE_DIFF}"
{
"new": {
...
},
"old": {
...
},
"path": [
...
]
}