 Have you been looking for a shell prompt that is extremely customizable, that's very feature rich, that's written in the Rust programming language, which means it's fast, quick, reliable? Have you been looking for a shell prompt that has cross-shell compatibility, meaning it works in Bash, Fish, and ZSH? If these are some things that you've been looking for in a shell prompt, then I have some good news for you because there is a prompt out there that fits all of these criteria. It is called the Starship Prompt, and that's what I'm going to show you today. So the first thing you want to do is of course install the Starship Prompt, and the easy way to do this is just go to their website, go to starship.rs, and scroll down just a little bit on their homepage, and they have some installation instructions. The easiest way to install it for those of us on Linux is simply run this one line, this curl command, in a terminal. So run that curl command, and it will install the Starship Prompt on your system. Now when you open a terminal, you won't actually see the Starship Prompt, because it won't actually run until you add these single lines at the very end of your shell's config file. So your Bash config file is in your home directory dot Bash RC. Your ZSH config file is in your home directory at dot ZSH RC, and your Fish config file is in your home directory slash dot config slash Fish slash config dot Fish. And let me show you this in action, so if I switch over to the desktop, and I'm going to open up a terminal, this is the Fish shell, and this is the default Starship Prompt. And let me zoom in here. Let me open up my Fish config, so let me do dot config slash Fish slash config dot Fish. And if I go to the very last line, this right here Starship space init space fish space, and then the pipe symbol source, that sources the Starship Prompt, the script that actually does the Starship Prompt here. And you can see by default it is a two line prompt. You have, in my case, it looks like on the master branch, it has some get status information. I guess I need to do a push. I think that's what the exclamation point means. I'm not exactly sure what the question mark here is. I'd have to look up the documentation, and it also says took 16 seconds. So it was going to tell you how long the last command you ran actually took. I guess I spent 16 seconds in them there. One interesting thing about the prompt is it has a lot of built-in modules to it that will tell you version information as far as programming languages. So if I CD up one directory here, oh, I made a mistake. I actually thought I was in the dot config directory. So let me CD into dot config, and I'm going to CD into my Qtile directory. So this is where my config file for Qtile lives, because the Qtile config is written in Python. And because the Starship Prompt recognizes that this directory has a bunch of Python scripts in it, it's letting me know, hey, your version of Python, by the way, is version 3.9.0. If I was in a Rust directory, it would give me versions of Rust or Ruby or whatever it happens to be. I actually haven't checked to see if it actually does Haskell. Let me CD back into the home directory and CD into the Xmonad directory. It does not give me versions of Haskell. I'm going to have to file a bug report with the Starship Prompt, guys. If I switch over to Bash, you see the prompt is exactly the same. And the reason it's exactly the same is because you're sourcing the same prompt, right, that Rust-powered prompt. Let me quit out of that. I was trying to get into my VMRC, but I was not in the home directory. So let me CD back into the home directory and I'm going to bash RC. And again, let's go to the last line and you see aval, Starship init bash. Again, it's sourcing the Starship Prompt. If I switch over to ZSH, this is ZSH. Again, it's the exact same prompt. What I really love about this is this cross-shell compatibility because I like things being the same. I like all of my titling window managers, for example, to have the same key bindings to do the same commands. And quite frankly, I like all my shills to do the same thing, whether I'm in Fish, Bash, ZSH. You're not going to get all of the same functionality in each of the three shills, but I like them being pretty close. I like them looking the same, especially. Also, this allows me to really clean up my config files for Bash, Fish, and ZSH because I had a ton of stuff, especially my Fish config file, but also my ZSH config file that was dealing with the prompts, these custom prompts that I was using. And now I just have this one line. It sources the Starship Prompt at the very end of your config. And then what you need to do to configure the Starship Prompt is it has its own separate config file that you can hack on a little bit. Let me show you that. So if I get back to my desktop here and let me cd back into the home directory, let me cd into .config and then it is, it's not in a directory, so I don't need to cd. What I need to do is vim and then .config slash Starship.toml is the name of the config file. So by default, there's really no config file. You know, you're just using the default prompt here. But if you want to change the default prompt, there are some things you can do. For example, I played with the config file a little bit to see what I could do with it. And I've got a lot of these lines commented out because I wanted you guys to see the default prompt before I started hacking on it. Let me zoom in. The default prompt, of course, is two lines. The second line has this right pointing chevron, the greater than sign. And I wanted to change some of this, or at least I wanted to see if I could change this. One thing, I hate two line prompts. Now, two line prompts make sense if your prompt has a ton of information. And some people love adding a lot of extra stuff like time stamps and things like that. So these prompts get very long and it makes sense in that case to have a two line prompt. But if all you're doing is the working directory and maybe the get status, then your prompt is not very long anyway. Just condense that down to one line. And how you do that is in your Starship.toml, you have line break and brackets. That's letting, you know, the line break module or package. And then disabled equals true. And then if I write that, and then let me close that, reopen this. You see, now I am on a single line. And then if I wanted to change that greater than sign to a different character, well, I could do that too. I could get in here and this package here called character. What I'm going to do is set success underscore symbol to an arrow. And I'm going to say the arrow needs to be bold green in color. Let me write that and then restart the fish shill. And now you see, instead of the greater than sign, I have an arrow. So it's pretty easy to configure your prompt a little bit. You want to see, you know, some fancier stuff. Here's a few examples that I just grabbed off of people's GitHub. You know, people had their Starship.toml on GitHub and I just pulled it down. So there was an error here because I commented out the actual commented line that needed to be commented. Let me write. And what this is going to do is going to have a three line prompt here. You see it's going to have an arrow and then a line and then it's going to go down. And we're going to have another line. Well, here, there's the problem. You'll see what exactly what it does. Let me clear the screen. Let me zoom in here. Now the prompt actually does not work because I had this line break disabled here. So let me undo that. Comment that out. And then let me restart it. There we go. That's what the prompt should look like. So you can do some fancy stuff here at the very end of my Starship.toml. You see this comment here, disable the package module. So you have package and then up under it you have disabled equals true. Now what this is letting me know is that if there's a package I want to disable all I have to do is put the name of the package. In these square brackets and then underneath it write disabled equals true. For example, if I didn't want the Python version in my Qtile directory, I just write Python for the package and then disabled equals true. And then let me write that and then let me restart the shell here. I'm going to CD back into my Qtile directory and you see I'm in my Qtile directory, but I no longer get the Python version information. Which I actually like having the Python version information, so I'm going to undo that. And when I did a quick search on GitHub for Starship.toml, I found all kinds of really neat config files for this particular prompt. Like here's one that's got a lot of interesting information. I don't know if I would actually use something like this, but the fact that it is so heavily customized. What I'm going to do is I'm actually going to try this out. So I'm going to go to the last line of my config here and paste all of this. And then let me get into visual mode here in Vim and delete all of my stuff. All right, let's write and this restart our shell. And wow, that's actually not a not a bad looking prompt. It's another two line prompt. He's got the get status and then he's got some different Unicode characters or emojis here. I'm not exactly sure what they're displaying. I'd actually have to read his prompt a little bit to see what is going on there. Just looking through some of what he's got. I'm assuming that these Unicode characters have to do with his get status. Yeah, he has the waste basket here and the trash bin. So I'm assuming these are things that I've removed or deleted from this get repository. And then we have symbols for modified. So I guess this is letting me know maybe I need to do a push here. I'm in my home directory right now. My home directory is a get bear repository. So some of this information is not too useful in my home directory. But let me CD into my wallpapers directory where it's actually a proper get repository. And now it's letting me know some information here. If I did a get add dash you and do a get checkout. Yeah, so I'm assuming the 15 were the things that had been modified. And what I needed to do was go ahead and do a commit here. So let me add new wallpapers. You have swap some wallpapers out with some new wallpapers in my wallpaper repo for those of you that have been following that on my get lab. Let me do a quick push. All right. And you can see how the prompt, the get status has changed. Instead of having the 15 here because I had 15 things that had been modified. I no longer have that. I still have the four out to the side. I'm not sure what that is. Looks like that is untracked files. Okay. To be honest, this is a little bit too much stuff going on in my prompt. I actually like the default prompt. So I'm actually going to undo all of this. And I'm going to get back to the default prompt. So well, that's not the default prompt. Let me keep undoing until I get back to the default prompt. All right. Let me write and let's restart now. All right. That's the prompt I like. That's not the default prompt because it's still on a single line, but I do want it on a single line rather than two lines. So again, works cross shell, fish bash and ZSH. I love it. I love it. I love it. I probably will never use another shell prompt ever again because Starship is extremely customizable. Like you can really do anything you want to do with it. Go to Starship.rs and go to configuration. I'm not going to bore you with this because this is a very, very lengthy configuration page that shows you all the packages and modules and how to edit it. And you can customize this prompt to show you practically anything you want. I'm not that into shell prompts. So I'm not going to get into it, you know, that seriously. But you know, it does everything I want to do really just out of the box. So I'm just going to go with the defaults for now. And it does help me clean up a little bit of my bash, fish and ZSH configs. The other thing I really like about the Starship prompt is the name because it reminds me of that 80s rock band Starship, which was originally Jefferson airplane and then they became Jefferson Starship and then they just became Starship. But I really love that song. Nothing's gonna stop us now. You guys know that song from the 80s. Anyway, before I go, I need to thank a few special people. I need to thank the producers of the show. Devin Fran-Gabe, Corbinian Mitchell, Akami Arch 5530, Chris Chuck. David, the other David. Donnie Dillon, Gregory, Lewis Paul, PickVM, Scott and Willie. They are my highest tier patrons over on Patreon. They are the producers of this episode. The show is also brought to you by each and every one of these ladies and gentlemen as well. These are all my supporters over on Patreon because the Distro Tube channel is sponsored by you guys, the community. If you'd like to support my work, consider doing so. Subscribe to Distro Tube over on Patreon. Alright guys, peace. And we can build this thing together. Standing strong forever. Nothing's gonna stop us now.