Random Helix Themes
Published at 2024-12-15T13:55:05+02:00; Last updated 2024-12-18
I thought it would be fun to have a random Helix theme every time I open a new shell. Helix is the text editor I use.
https://helix-editor.com/
So I put this into my zsh dotfiles (in some editor.zsh.source in my ~ directory):
export EDITOR=hx
export VISUAL=$EDITOR
export GIT_EDITOR=$EDITOR
export HELIX_CONFIG_DIR=$HOME/.config/helix
editor::helix::random_theme () {
# May add more theme search paths based on OS. This one is
# for Fedora Linux, but there is also MacOS, etc.
local -r theme_dir=/usr/share/helix/runtime/themes
if [ ! -d $theme_dir ]; then
echo "Helix theme dir $theme_dir doesnt exist"
return 1
fi
local -r config_file=$HELIX_CONFIG_DIR/config.toml
local -r random_theme="$(basename "$(ls $theme_dir \
| grep -v random.toml | grep .toml | sort -R \
| head -n 1)" | cut -d. -f1)"
sed "/^theme =/ { s/.*/theme = \"$random_theme\"/; }" \
$config_file > $config_file.tmp &&
mv $config_file.tmp $config_file
}
if [ -f $HELIX_CONFIG_DIR/config.toml ]; then
editor::helix::random_theme
fi
So every time I open a new terminal or shell, editor::helix::random_theme gets called, which randomly selects a theme from all installed ones and updates the helix config accordingly.
[paul@earth] ~ % editor::helix::random_theme
[paul@earth] ~ % head -n 1 ~/.config/helix/config.toml
theme = "jellybeans"
[paul@earth] ~ % editor::helix::random_theme
[paul@earth] ~ % head -n 1 ~/.config/helix/config.toml
theme = "rose_pine"
[paul@earth] ~ % editor::helix::random_theme
[paul@earth] ~ % head -n 1 ~/.config/helix/config.toml
theme = "noctis"
[paul@earth] ~ %
A better version
Update 2024-12-18: This is an improved version, which works cross platform (e.g., also on MacOS) and multiple theme directories:
export EDITOR=hx
export VISUAL=$EDITOR
export GIT_EDITOR=$EDITOR
export HELIX_CONFIG_DIR=$HOME/.config/helix
editor::helix::theme::get_random () {
for dir in $(hx --health \
| awk '/^Runtime directories/ { print $3 }' | tr ';' ' '); do
if [ -d $dir/themes ]; then
ls $dir/themes
fi
done | grep -F .toml | sort -R | head -n 1 | cut -d. -f1
}
editor::helix::theme::set () {
local -r theme="$1"; shift
local -r config_file=$HELIX_CONFIG_DIR/config.toml
sed "/^theme =/ { s/.*/theme = \"$theme\"/; }" \
$config_file > $config_file.tmp &&
mv $config_file.tmp $config_file
}
if [ -f $HELIX_CONFIG_DIR/config.toml ]; then
editor::helix::theme::set $(editor::helix::theme::get_random)
fi
I hope you had some fun. E-Mail your comments to paul@nospam.buetow.org :-)
Back to the main site