1. 23
  1. 15

    This isn’t “modern” or “ergonomic” so much as it is just bloated. Look at what the default starship prompt includes. Who can keep track of what that is currently showing? In a minimal configuration (e.g. just status, host name, pwd, etc), a standard/scripted fish prompt will be faster because fish is stateful and caches all these so there’s no need to launch an external process. Fisher is included but I don’t see any use of fisher in the config file - also, fish doesn’t need fisher, it’s modular enough as it is.

    This isn’t Unix-y because exa deliberately breaks compatibility with ls flags/switches even when they wouldn’t conflict, and maintainers have refused to add an option to fall back to ls arg handling if the binary is aliased to ls (I reported both issues years and years ago).

    zoxide I can admittedly get behind - I used auto jump for years but it’s no longer maintained. But you don’t need to use z instead of cd - it pulls the CWD from the prompt integration so you can only use it when you need to fuzzy jump, therefore being more Unix-y and more compatible.

    1. 5

      Look at what the default starship prompt includes. Who can keep track of what that is currently showing?

      Me, because 90% of those items are inactive at any point in time! I rarely set my python_env and lua_env simultaneously. But I’d love to have a prompt that shows neither or either or both, as appropriate.

      NB: this is me endorsing only the idea, I haven’t used this linked prompt specifically. Perhaps we are both opining naïvely, but I certainly am.

      1. 3

        I gave it a try. The text above the prompt gives you info about the “state” or “type” of project you’re currently cd’d into. This is what it shows after I cd ~:

        ~ via 🐘 v7.2.24 via 🐍 v3.6.9 

        WTF does that even mean? Why do I need to see this each time I press enter, before and after every command? Why do I need emoji (note, not glyphs like those in nerd font but actual, childish emoji)? Why does my home directory tell me what I now understand after significant head banging to be a postgres version (postgres isn’t even installed on this laptop! Not even just the client tools!) and a python version? I have four different python3 versions installed and one python2 version. Why show me 3.6.9 when python3.10 is the most recent I’ve used? Why do I need to see this again? And most importantly, how do I make this all go away?

        What a stupid execution of an OK idea (using an external process written in a fast language like rust to process things like git info faster). I’m fine with the default fish prompt, thanks.

        Edit: ahahaha it’s so slow in an actual (tiny!) git repository that this has now gone from ridiculous to funny. fish’s default git prompt with branch/status integration and all that is faster than the default starship git integration that shows you nothing more than the name of the branch you’re in. This is hilarious.

      2. 2

        Thanks for the input! I’ll consider your thoughts and feedback with great care.

        1. 2

          Sorry for being so harsh. I was triggered once I saw exa, because for me that’s personal since I contributed to the project and had high hopes for it but was completely turned off when they refused to support ls compatibility for a tool they self-declare as a modern ls replacement. You shouldn’t have to think twice before being able to ls -ahltr something.

          Please see my other reply in a sibling comment about starship. You may want to reconsider, I think you’ll find that if you’re using the latest version of fish, this will slow down your prompt rather than speed it up. The newest fish releases have a much-improved and very snappy git prompt.

          1. 2

            All good, friend! Sorry you had that experience with Exa and I really appreciate the tip about the latest Fish version. I’ll look into it right away!

      3. 2

        None of the mentioned tools are specific to Fish shell. Most even work on Powershell

        1. 1

          That’s a really great point!

        2. 1

          @yonkeltron I am intrigued by your usage of a single, global CARGO_TARGET_DIR. How does this work for you? You’re in ~/foo working on a cargo project and build it. What’s your workflow after cargo build? I imagine cargo run, etc. know where to find the result, but how often do you have to manually go into that directory to get build output for other reasons?

          1. 2

            Yes I very occasionally need to go in there to get stuff but on the whole it uses much less space and often speeds up compilation! Just need to be careful when using cargo clean if working actively on multiple projects.

            1. 1


          2. 1

            My zshrc is 140 lines, my zshenv is 50 lines and my aliases file is 90 lines. I rarely, if ever, modify any of these lines now that they’ve been written. Fish is pretty great, but for someone like me with a long history of writing bash scripts, zsh is king.

            These plugins get you 90% of the way to Fish’s interactive magic:

            if [[ -n "$HOMEBREW_PREFIX" ]]; then
              fpath=("$HOMEBREW_PREFIX"/share/zsh-completions $fpath)
              source "$HOMEBREW_PREFIX"/share/zsh-autosuggestions/zsh-autosuggestions.zsh
              source "$HOMEBREW_PREFIX"/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
              # Must come after zsh-syntax-highlighting.
              # https://github.com/zsh-users/zsh-history-substring-search#usage
              source "$HOMEBREW_PREFIX"/share/zsh-history-substring-search/zsh-history-substring-search.zsh

            No need for plug-in managers, these are all in Homebrew on both MacOS and Linux.