Skip to content
 
 

Repository files navigation

lesbian-shell-color

License: MIT Shells: Zsh | Bash | Fish Platform Release

Demo (Animated GIF)

A tiny pride-flag-themed prompt + “rainbow typewriter” input effect, with an interactive installer. Works on zsh, bash, and fish.

Demo (Rainbow Typewriter on Dark Theme) Demo (Purple Typing on Dark Theme)

Smoke test (no dotfile changes)

Want to try the theme in a given shell without modifying any rc file? Use the bundled smoke-test script:

./scripts/smoke-test.sh bash           # bash (auto-detects ble.sh if installed)
./scripts/smoke-test.sh fish           # fish
./scripts/smoke-test.sh zsh            # zsh in an isolated session
./scripts/smoke-test.sh bash --mode=light --input=default

It launches the requested shell interactively with the theme sourced and the config env vars set, then drops you back to your original shell when you exit. Your real ~/.zshrc / ~/.bashrc / fish config are never touched.

Shell support matrix

Feature zsh bash fish
Colored prompt ✅ native ✅ native ✅ native
Per-word rainbow as-you-type ✅ via ZLE ✅ via ble.sh (optional dep) ⚠️ per-token approximation via fish_color_* (fish's line editor is not user-extensible)
Runtime rainbow-on / rainbow-off

Note on fish: fish's line editor is compiled into the fish binary and does not expose a hook to recolor arbitrary ranges of the typed buffer. The fish port therefore approximates the effect by coloring different token types (commands, params, strings, options, …) with different pride-flag colors. It's a rainbow-flavored highlight, not a true per-word rainbow. See Why fish can't do full parity below.

Requirements

  • One of: zsh, bash, or fish.
  • perl (used by the installer to cleanly remove previous install blocks from your rc file).
  • A terminal that supports 24-bit color (all modern macOS/Linux terminals do).
  • Bash users who want the full rainbow typewriter: install ble.sh and load it in your ~/.bashrc before sourcing our theme. Without ble.sh, bash still gets the colored prompt but not the per-word input coloring — that's a bash limitation, not ours.

Install

  1. Clone this repo.
  2. Run the installer (it auto-detects your login shell via $SHELL):
bash ./turn_your_shell_a_lesbian.sh

To force a specific shell (useful if $SHELL disagrees with what you actually use):

bash ./turn_your_shell_a_lesbian.sh --shell=bash    # or --shell=zsh / --shell=fish
  1. Restart your terminal, or apply immediately:
# zsh
source ~/.zshrc
# bash
source ~/.bashrc
# fish
source ~/.config/fish/config.fish

The installer will:

  • Detect (or accept via --shell=) your target shell.

  • Ask you to choose language (English/中文).

  • Let you preview styles (dark/light, rainbow typing on/off, input color).

  • Ask for a display name (defaults to your real system username).

  • Append a sentineled configuration block to the right rc file (~/.zshrc, ~/.bashrc, or ~/.config/fish/config.fish) that exports:

  • PRIDE_THEME_MODE

  • PRIDE_THEME_USER

  • RAINBOW_TYPING

  • PRIDE_INPUT_COLOR

…and then sources the shell-appropriate theme file (lesbiancolor.sh / .bash / .fish).

Uninstall

Run:

bash ./turn_your_shell_a_lesbian.sh --back

This strips the Pride Shell block from all of ~/.zshrc, ~/.bashrc, and ~/.config/fish/config.fish (whichever contain it). Then restart your terminal.

Manual install (advanced)

If you don’t want the installer, source the shell-specific theme file yourself.

zsh — add to ~/.zshrc:

export PRIDE_THEME_MODE="dark"     # "dark" or "light"
export PRIDE_THEME_USER="%n"       # or a fixed string like "lilith"
export RAINBOW_TYPING="on"         # "on" or "off"
export PRIDE_INPUT_COLOR="purple"  # "purple" or "default"
source "/absolute/path/to/lesbiancolor.sh"

bash — add to ~/.bashrc:

# (Optional, for full rainbow typewriter: load ble.sh first)
# source "/path/to/ble.sh"

export PRIDE_THEME_MODE="dark"
export PRIDE_THEME_USER='\u'       # bash prompt escape for username
export RAINBOW_TYPING="on"
export PRIDE_INPUT_COLOR="purple"
source "/absolute/path/to/lesbiancolor.bash"

fish — add to ~/.config/fish/config.fish:

set -gx PRIDE_THEME_MODE dark
set -gx PRIDE_THEME_USER (whoami)
set -gx RAINBOW_TYPING on
set -gx PRIDE_INPUT_COLOR purple
source "/absolute/path/to/lesbiancolor.fish"

Runtime toggles

Once installed:

  • rainbow-on: enable rainbow typewriter
  • rainbow-off: disable rainbow typewriter

Notes

  • On zsh, the theme sets PROMPT and registers a ZLE line-pre-redraw hook to colorize input per-word.
  • On bash, the theme sets PS1 (and PS0 for color-reset before command execution). If ble.sh is loaded, the theme additionally remaps ble-face syntax highlight faces to the pride-flag palette.
  • On fish, the theme defines fish_prompt and sets the fish_color_* variables to a rainbow-flavored palette (per token type, not per word — see Why fish can't do full parity).
  • The installer temporarily resizes the terminal to 95x24 to fit its TUI.

Why fish can't do full parity

zsh's ZLE and ble.sh both expose programmable hooks to recolor arbitrary ranges of the currently-typed buffer (region_highlight, custom highlight layers). Fish's line editor is written in C++ and compiled into the fish binary; the only user-facing knobs for input coloring are the fish_color_* variables, which let you pick one color per token type (command, param, quote, option, …) — not one color per word. There is no fish_prompt-like hook that runs on every keystroke with write access to the rendered buffer. Producing true per-word rainbow-as-you-type in fish would require patching fish's C++ source, or writing an entire replacement line editor in fishscript (intercepting every keystroke, disabling fish's own highlighter / autosuggestions / history search). Neither is a sustainable shipping option, so the fish port delivers the best faithful approximation instead.

Tested on

  • zsh on macOS — Terminal.app, VS Code / Cursor / Windsurf integrated terminals.
  • bash and fish ports: syntax-checked and sourced in non-interactive subshells; live TUI testing pending per-shell. Reports welcome.

Other terminals (iTerm2, Alacritty, Kitty, GNOME Terminal, …) are expected to work as long as they run one of the supported shells and support 24-bit color.

Credits & Attribution

  • The transgender pride flag colors used in this theme — light blue #5BCEFA, pink #F5A9B8, white — are from the flag designed by Monica Helms in 1999.
  • The warm palette (reds/oranges/pinks in the dark & light themes) is inspired by the lesbian “sunset” pride flag, commonly attributed to Emily Gwen (2018).
  • Flag colors are used here purely as a visual tribute; this project is not officially affiliated with or endorsed by either designer.

中文说明

这是一个 Zsh 终端主题 + “彩虹打字机”输入效果,并带有交互式安装脚本。

仓库内容:

  • turn_your_shell_a_lesbian.sh:交互式安装/卸载脚本(会在 ~/.zshrc 里追加/移除一段配置)。
  • lesbiancolor.sh:真正的主题文件(包含 Prompt 与 ZLE 输入上色 Hook)。

环境要求

  • zshbashfish 中的任意一个。
  • perl(安装脚本用它来干净移除旧的安装段落)。
  • 支持 24-bit 真彩色的终端(macOS/Linux 一般都没问题)。
  • 注意:bash 用户如果希望完整的彩虹打字机效果,需要额外安装 ble.sh,并在 ~/.bashrc 中在 source 本主题之前 source ble.sh。不装 ble.sh 的话,bash 下只有彩色提示符,没有按单词彩虹化的输入——这是 bash 本身的限制,不是我们的 bug。
  • 注意:fish 因为其行编辑器编译在 C++ 二进制里、不对用户开放逐键重染色接口,所以我们只能用 fish_color_* 提供一个按 token 类型着色的彩虹风近似(命令一种颜色、参数一种颜色、引号字符串一种颜色…),不是真正的逐词彩虹。

安装

  1. 先把本仓库 clone 到本地。
  2. 运行安装脚本(会通过 $SHELL 自动检测你在用的 shell):
bash ./turn_your_shell_a_lesbian.sh

想强制指定 shell(假如你实际用的和 $SHELL 不一致):

bash ./turn_your_shell_a_lesbian.sh --shell=bash    # 或 --shell=zsh / --shell=fish
  1. 重启终端,或立刻生效:
# zsh
source ~/.zshrc
# bash
source ~/.bashrc
# fish
source ~/.config/fish/config.fish

安装脚本会:

  • 检测(或通过 --shell= 接受)目标 shell。

  • 让你选择语言(English/中文)。

  • 预览并选择风格。

  • 询问显示用户名(默认为系统用户名)。

  • 在对应 shell 的 rc 文件(~/.zshrc / ~/.bashrc / ~/.config/fish/config.fish)中写入一个有哨兵注释的配置块,设置:

  • PRIDE_THEME_MODE

  • PRIDE_THEME_USER

  • RAINBOW_TYPING

  • PRIDE_INPUT_COLOR

并用绝对路径 source 对应 shell 的主题文件(lesbiancolor.sh / .bash / .fish)。

卸载

运行:

bash ./turn_your_shell_a_lesbian.sh --back

会从 ~/.zshrc~/.bashrc~/.config/fish/config.fish全部清理掉 Pride Shell 的配置块(哪个文件里有就清哪个),然后重启终端即可。

手动安装(进阶)

zsh — 写入 ~/.zshrc

export PRIDE_THEME_MODE="dark"     # "dark" 或 "light"
export PRIDE_THEME_USER="%n"       # 或固定字符串,例如 "lilith"
export RAINBOW_TYPING="on"         # "on" 或 "off"
export PRIDE_INPUT_COLOR="purple"  # "purple" 或 "default"
source "/absolute/path/to/lesbiancolor.sh"

bash — 写入 ~/.bashrc

# (可选,如需完整彩虹打字机效果,先 source ble.sh)
# source "/path/to/ble.sh"

export PRIDE_THEME_MODE="dark"
export PRIDE_THEME_USER='\u'       # bash 用户名转义
export RAINBOW_TYPING="on"
export PRIDE_INPUT_COLOR="purple"
source "/absolute/path/to/lesbiancolor.bash"

fish — 写入 ~/.config/fish/config.fish

set -gx PRIDE_THEME_MODE dark
set -gx PRIDE_THEME_USER (whoami)
set -gx RAINBOW_TYPING on
set -gx PRIDE_INPUT_COLOR purple
source "/absolute/path/to/lesbiancolor.fish"

使用中的开关

安装后可用:

  • rainbow-on:开启彩虹打字机
  • rainbow-off:关闭彩虹打字机

技术说明

  • zsh:设置 PROMPT,并注册 line-pre-redraw ZLE 钩子来逐词重染色输入。
  • bash:设置 PS1(并用 PS0 在执行命令前重置颜色)。如果检测到 ble.sh 已加载,会额外用 ble-face 将语法高亮色图置换成旗帜调色板。
  • fish:定义 fish_prompt,并把 fish_color_* 变量按 token 类型配成彩虹风近似(详见上文环境要求中的 fish 说明)。
  • 为了让终端 UI (TUI) 完美居中显示,安装脚本会临时将终端大小调整为 95x24

测试过的终端

  • zsh on macOS — Terminal.app;以及 VS Code / Cursor / Windsurf 的集成终端。
  • bash / fish 端口:已通过语法检查和非交互式 source 检验;真交互 TUI 测试还在进行中,欢迎反馈。

致谢 / 来源

  • 本主题中使用的跨性别骄傲旗 (transgender pride flag) 配色 —— 浅蓝 #5BCEFA、粉色 #F5A9B8、白色 —— 来自 Monica Helms 于 1999 年设计的跨性别旗。
  • 暖色系配色(深色 / 浅色主题里的红、橙、粉)灵感来自于 “日落版”拉拉旗 (lesbian sunset flag),普遍认为由 Emily Gwen 于 2018 年设计。
  • 这里只是出于视觉致敬使用这些旗帜的配色,本项目并未获得任何原作者的官方授权或背书。

About

🏳️‍🌈 turn your zsh shell prompt into lesbian flag colors!!!

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages