PromptConfig lets you describe your prompt expressively in JSON and then it gets compiled to Bash. A very simple prompt might look like this:
{
"prompt": ["character", "space"],
"components": [
{
"key": "character",
"value": "❯",
"color": "magenta"
}
]
}
And it will generate Bash that looks like this:
function _promptconfig_prompt() {
local prompt=''
prompt+='\[\e[38;5;5m\]'
prompt+='❯'
prompt+='\[\e[0m\]'
prompt+=' '
PS1=$prompt
}
PROMPT_COMMAND="_promptconfig_prompt; $PROMPT_COMMAND"
Why?
Bash is hard. It’s an arcane language and environment with a steep learning curve. Most programmers wind up using it on a very superficial level, figuring out just enough to get done what they need to do.
Unfortunately, customizing your prompt correctly requires a disproportionately high understanding of how Bash and the terminal work relative to what you’re trying to actually do. The internet is filled with recommendations that will break your prompt in subtle ways that aren’t immediately obvious and later you might not understand are caused by your custom prompt. I’m speaking from personal experience. 😭
It shouldn’t be that complicated and hopefully now it isn’t.
Take a look and let me know what you think!
Top comments (2)
"Bash is hard." said the /bin/fish developers..
a few years later, fish shells are as arcane as bash prompts. lol.
Thanks for writing this, I'm going to try it.
Yeah, I realize “hard” is of course very subjective. I’ve always found it very difficult and most of the people I know seemed to agree. I use it infrequently enough that whatever I might learn when I use it I quickly forget. Debugging Bash while building this was really painful for me. 😭
I used Fish for a few years! I found the scripting much simpler, but it created another problem for me which is that tools that provide shell integrations always assume Bash, or maybe ZSH. A few provide Fish support but most don’t. After a while the headache of tools not working quite right or needing special patches was more trouble than it was worth.
My pleasure! Please let me know if you run into any issues or if it’s missing something! Someone recently pointed out they use styles like bold/underline/etc. in their prompt, so I might add support for that soon.