 I want to do a brief showcase of fish. Fish stands for the friendly interactive shell. It's supposed to be a replacement for Bash. It offers a whole lot of features that Bash doesn't have and I think it's a lot easier to use than something like ZSH where you have to either manually set things up and Fish honestly just has a lot of perks. Now I've known about Fish for a while. People have been nagging me to use it or some other alternative shell. I think most of you know that I just use Bash. There are a couple things about Fish that I don't like. I'll talk about those. But after the 3.0 release of it, I think there's a better chance that I might actually start using this but I'll go into some reasons why. So Fish at a very basic level, let's get right into it. So let's start typing in a command. You'll actually see that by default Fish does have autocomplete so it will search either your Fish history or available commands for things for you to type. So that just happens immediately. Another thing is if you are typing a command or let's say I just have L typed in here, if I press Tab, that will actually list out all of the different L commands that I can run. That's very convenient. It actually searches everything, shows you all the executables, even shows their size. That's nice I guess. Additionally similar to ZSH, one thing that comes automatically on Fish is if you give some command an option and press Tab, it will actually list those out and you can sort through all these for whatever command, whatever options you want for this. I mean as a long term bash user, I'm not the kind of person who would use this kind of stuff but I think it is very helpful if you forget something or just want to check something out, verify something before you run it. So Fish has all of this stuff by default, you don't have to set it up. It's very convenient. I think also you might have noticed that Fish does have syntax highlighting. You'll see that the commands are typically blue, dark blue and then the light blue stuff, that's usually your arguments or your options or stuff like that and of course everything is pretty much syntax highlighted. And even things like just LSing, like the output of LS, I forget what their default settings are but it's a little more colorful than it is in bash, even if you set bash colors or something like that. So one of the main reasons that I really wanted to use Fish when I first learned about it is these things called abbreviations. Now Fish has aliases like bash and everything else but it also has abbreviations. Now abbreviations, they are nice because basically what they are, well I'll tell you my problem. A lot of times in screencasts I have a whole bunch of aliases in bash. This one for example, CFI is open my i3 config. Now when I run this in the video people will get confused or something like that but the nice thing about abbreviations in Fish is that when you type inner or when you press space these will automatically evaluate to whatever they are. It will show you what this command actually is. Or CFB, that's open to my bash RC or even if I just type space afterwards. Or another one I have is lowercase p for Pseudo pacman and that will automatically type it out. So that I think, I mean it's a nice little visual perk if you want it but it's not nice just to have these things. I think I have capital S, that's for pseudo system CTL. It's nice to have these because it makes your history, your Fish history a lot more readable by yourself in the future and by other people and it's just sort of nice especially because sometimes I have aliases that I might want to backspace in and make changes to or something like that. I don't even know if that's a real thing in YouTube DL but whatever. So that's a nice perk and that's one of the reasons I really wanted to use Fish Shell when I first heard about it. So you can add those and you know if you use my dot files you know that I have this little script shortcut, this shortcut square, I can't even see what I'm typing, there's my computers in the way. I have this shortcut generator and I've actually added, if you check my dot files, I've added the ability for it to generate Fish abbreviations. So it will generate, you give it whatever you know if I put in bookmark files or something like that. I have this set of bookmarked files and the script will automatically generate bash aliases but also Fish abbreviations. So that's something that I use now to auto generate, you know, WL means you know go to my landscape folder and show me all the stuff in there or something like that. So now with Fish you can see all the commands that you're running through aliases. So some other stuff, I guess I might show you a little showcase, I prepared a little showcase of comparing bash and Fish just to show you a couple things about it. So let's say I want to make an if statement in both, okay? I'll go ahead and make one in bash so let's say I'll say if my browser is equal to Firefox, then echo its Firefox. If it isn't, say it's something else. And then you end that with the Fi and of course it runs and you have its Firefox, okay? That's what we expect. So let me show you the syntax in Fish which is a little bit different but at all the interactive aspect of Fish actually has some perks, I don't think I'll move it over to this side. So if browser is equal to Firefox, notice first off that it's already syntax coloring everything you type in. So if I press space, notice also that it has tabbed out. So you now, instead of having this sort of this X, the PS2, the extra prompt in bash, you actually have syntax spacing and stuff like that. So I can type in echo, it's Firefox. Notice also I didn't include the then here, that's not an error. Else, else spaces back out automatically, something else, blah, blah, blah, blah, doesn't matter. And then you end that if statement with end. So that will print out its Firefox and that looks a little funny because the whole thing was spaced out but you actually see that it, I think it actually, if you, let's say I make this thing a little bigger, I think, yeah, if you, one nice thing, it also has like line wrapping, I didn't make a line big enough. But if I say something like if, blah, blah, blah, blah, blah, blah, blah, it'll actually space that over to the next line. So anyway, that's another nice little thing. So again, look at the perks, syntax coloring, automatic spacing. And also you might like this, you might not like it, but fish is not POSIX compliant. And I mean by that, I don't mean it like it has things like bash, it has like bashisms. It has extra features that POSIX shells don't have. There are also some things that POSIX shells have that fish doesn't have. Now you might not know what I mean by that. I'll explain why that's a little annoying in a second. But you'll notice that fish actually does not take a then here. And also it doesn't end if statements with fi, it ends them with if or end. And it ends like case statements with end, everything with end. Now that of course means that fish sometimes runs into trouble when it's running, if you try and run some POSIX compliant shell with fish, some things it can handle, some things it can't. Now one thing I mentioned before that after the 3.0 release, I am thinking of moving to fish. And that's just because they added things like, well, it looks like I already typed this out. They added things like and and. It used to be you had to type something like semicolon and then a literal A and D, which I thought was so silly because it just, it couldn't handle basic POSIX compliant. Anyway, why am I complaining about this? I'll explain to you why. What, why this is annoying is if I want to, I'm going to open up my fish RC. One annoying thing about this is if you have bash aliases or bash settings or if statements or other things that you want fish to be able to read, like you want to have them in common with multiple different shells. You can't really do that because fish just has its own syntax. It does its own thing. Now again, I don't, I'm not against having its own, own additional features. But there are some things like if I were to just feed it some bash function coinages, so this is how you have, you create functions in fish. If I were to give it some bash syntax for that, it wouldn't be able to process it, you know, and that, that's sort of annoying to me. I'd like it to be able to process pretty much any kind of POSIX compliant shell or bash isms, but, you know, for whatever reason, it just does things differently. Another thing down here, you know, if you have a, a sub shell, they, in bash, you would have a dollar sign and then put the whole thing in parentheses. But fish, for whatever reason, they just don't want the dollar sign. They can't handle it. And that sort of annoys me because I'd like to be able to have things that are in common between, I'd like to have an alias file or a function file that I could have in common between bash and fish. That, so that's one thing about it that sort of annoys me. But again, fish adds in a whole bunch of features. Now, since I have the fish RC opened up, I will show you some things I have set up here. Fish does have VI, VI key bindings. That for me is a must have. So you can set that. It does, there might be a more elegant way of doing this. I mean, I basically just looked up their manual and this is the first way of doing it that came to my mind. But this is how I set my fish prompt. Now, I would complain about how ugly this looks. I mean, you know, this is how I get all this stuff that shows my name and all the stuff in color. I would complain about how ugly it looks. But I mean, if you compare it to bash that looks like this, I'm not going to complain too much. But it just feels sort of, I don't know, funny. So you can set your prompt here. You can also have a fish greeting. You can say, like, let's say I wanted to say echo, blah, blah, blah, whenever I start fish. So that's going to pop up there, et cetera, et cetera. And here are abbreviations. I think I seem to remember in earlier versions of fish, you could have an abbreviation over multiple lines. But I think the syntax changed. So I just have an abbreviation command for each one of these. But if someone knows better, please tell me. Now, one drawback about fish's idiosyncratic syntax is the fact that I can't use it to, like, log in as fish, which I'd really like to change my shell to fish and just leave it at that. Right now what I'm doing is bash is my default shell. And I have fish startup from bash. And that's pretty much it, which really sort of annoys me to be perfectly frank. But there's probably a better way of doing it. But it's just, you know, fish has its own way of setting path. It has its own way of making prompts. It has its own way of doing all this stuff that isn't really POSIX compliant. So that stuff sort of annoys me about it. But if you're watching this like, I don't care about any of this. I just want a cool interactive shell. Fish is probably nice for that. And as I said, I might end up using fish anyway. But I wanted to just throw this video out there just to, I guess, update you. So anyway, it sounded, all things considered. I think it's a nice thing. I think there are some things that I would like fish to be a little more compatible with other shells for extensibility's sake. But I think it's pretty useful. And hopefully some of you guys will find it, at least, you know, somewhat useful. But I'll see you guys next time.