Shell Wars: The Zsh Pigeon Crew Hates Fish
Why is this CLI meme funny?
Level 1: Chocolate vs Vanilla
Imagine a group of friends on the playground who all decided that chocolate ice cream is the best thing ever. They even form a little club about it. They all shout, “We only eat chocolate! Vanilla ice cream is gross, and anyone who likes vanilla can’t sit with us!” 😠🍦 It’s a pretty silly scene, right? They’re acting like a tough gang, but it’s just about ice cream flavors.
That’s exactly what’s going on in the meme, but with computer stuff. One group (the pigeons in this case) loves one type of tool (let’s say the chocolate ice cream of computer shells, called Zsh) and they loudly say they “hate” the other type (the vanilla of shells, called Fish). It’s funny because they’re treating something small – a personal choice of ice cream or a computer preference – like it’s super important gang business. We laugh because it’s an overreaction: just like both chocolate and vanilla can be tasty, two computer shells can both be good. The pigeons acting like an ice cream gang make it clear how silly it is to be that serious over a preference. In short, it’s humor about friends being very loyal to their favorite thing, blown up in a dramatic way.
Level 2: Dotfiles Gang Signs
Let’s decode what’s happening for those newer to the command-line scene. First, when we say “shell”, we’re not talking turtles or seashells – a shell in computing is a program that lets you interact with your computer by typing text commands. It’s basically the text-based interface (the CLI, or Command Line Interface) where developers and power users control the system, run scripts, launch programs, and so on. If you’ve ever opened a Terminal on macOS or Linux (or the command prompt/Powershell on Windows), you were using a shell. Common shells include Bash, Zsh, and Fish, among others. Think of different shells like different text-based “apps” for talking to your OS – they all let you do similar things (navigate folders, launch programs) but have different features and syntax quirks, kind of like different web browsers that each have their own look and shortcuts.
Now, Zsh (pronounced “Zee Shell” or "Zed Shell") and Fish (short for “Friendly Interactive Shell”) are two popular shells that developers often choose between for their daily work. Zsh has been around longer and recently became the default shell on macOS. It’s loved for being like a supercharged version of the traditional Bash shell – meaning if you know Bash (the old default on many systems), Zsh feels familiar but adds nice improvements. Fish, on the other hand, is a newer shell that isn’t based on Bash. Its creators designed it to be user-friendly right out of the gate. For example, Fish gives you suggestions and completions as you type (without needing to configure anything), and it has a colorful interface by default. The trade-off is Fish uses slightly different command syntax than what older shells use (not following some POSIX shell standards), so commands or scripts written for Bash/Zsh might not work in Fish without changes. Newcomers often find Fish approachable (as its name “friendly” implies), whereas many experienced folks stick with Zsh because it’s more of an evolution of what they already know.
So what about the meme text? “I HATE FISH” and “ME AND MY FELLAS USE ZSH” are the pigeons’ bold statements. They’re using slangy, aggressive phrasing to mimic a street gang. Imagine a group of tough friends saying “We hate that other thing; we only use our thing.” Here, “fish” and “zsh” are that “other thing” and “our thing” – specifically, Fish shell vs Zsh shell. So the pigeons are essentially role-playing a group of developers who strongly prefer Zsh and trash-talk the Fish shell. It’s a playful exaggeration of real-life tech arguments: some devs do get very passionate about their preferred tools. The pigeon gang visual drives home how ridiculous it can look to outsiders. They appear to be an intimidating crew, but the subject of their intimidation is just… a different shell named after an aquatic animal 🐟. It’s a joke about turning a nerdy disagreement into a faux gang rivalry.
The title caption adds “dotfiles allegiance: zsh only, fish need not apply.” Let’s unpack that:
- Dotfiles are configuration files, often starting with a dot (like
.zshrcor.bash_profile), used to customize your shell and other developer tools. For example, in Zsh, your~/.zshrcfile contains settings that run every time you open a terminal: you might set your prompt style, add handy shortcuts (aliases), or enable plugins that show git branch info, etc. Many developers fine-tune these dotfiles to make their terminal experience more efficient or personalized – this is part of Developer Experience (DX), making sure your tools fit you well. - Saying someone has “dotfiles allegiance” means they’re almost loyal to their configuration and shell. They’ve invested time making their environment just right, and they’re proud of it – sometimes to the point of defending it like a favorite sports team.
- “Zsh only, fish need not apply” is phrased like a strict rule or a sign on a clubhouse. “X need not apply” is an old-timey phrase meaning “don’t even bother trying if you are X.” Here it humorously implies this gang has a rule that only Zsh users can join their club, and if you use Fish, you’re not welcome. It exaggerates the exclusivity for comedic effect – obviously, in real life, developers using different shells can still be friends (no actual clubs kick you out for using Fish!). But the joke plays on the idea of a clique or exclusive gang in the developer community.
This ties into the tag DeveloperTribalism, which is when devs split into camps over tool preferences. It’s like harmless rivalry – think of how sports fans have friendly banter, or how gamers might rib each other over Xbox vs PlayStation. In tech, we see it with things like Editor wars (e.g., Vim vs Emacs, or these days VS Code vs everyone else), programming languages (Java vs C# back in the day, or Rustaceans vs Go fans now), tabs vs spaces (infamously joked about), and yes, shell wars like what this meme shows. Most of the time it’s all in good fun: a way to build camaraderie with those who like the same tools, and poke fun at those who like the “rival” tool. The pigeons embody that by literally forming a mock “street gang” around using Zsh.
Let’s clarify Fish vs Zsh a bit more in practical terms. If you’re a newer dev:
- Zsh: You use it much like Bash. For instance, setting a variable in Zsh:
Zsh’s big appeal is when you start adding plugins or customizations. Many people install Oh My Zsh, a popular framework that makes it easy to enable themes (to change how your prompt looks) and plugins (to auto-suggest commands, or add handy shortcuts for things like git). With Zsh plus those configs, your terminal can be very powerful and personalized, but it requires editing config files and knowing what to enable.MY_NAME="Alice" # This works in Zsh (just like in Bash) echo $MY_NAME # Outputs "Alice" - Fish: It has a different syntax for some tasks. For example, setting a variable in Fish:
Fish often feels more interactive out-of-the-box. The moment you start typing a command, Fish might show a suggestion in a lighter color, guessing what you might want to type (based on history or common commands). This is something Zsh needs a plugin for. Fish also has a web-based configuration you can launch to tweak settings, which is newbie-friendly. However, because Fish isn’t following all the old shell syntax rules, some common scripts (written for Bash/Zsh) might not run in Fish without minor changes or invoking a different shell.set MY_NAME "Alice" # Fish uses 'set' command, not the equals sign echo $MY_NAME # Also outputs "Alice"
The meme doesn’t delve into these nitty-gritty technical details – it’s focusing on the social aspect (the “my crew vs your crew” mentality). But understanding the differences helps explain why there are separate “crews” at all:
- Each shell has its fans because of these features. Zsh fans might say, “I can carry over all my old Bash knowledge and just sprinkle new features; plus I love my theme and plugins.” Fish fans might say, “I prefer ease-of-use and modern features without spending hours configuring.” These differing values lead to playful rivalry.
- Neither choice is objectively “wrong” – it’s preference and use-case. But for the sake of humor, the meme pretends it’s as clear-cut as a gang declaring their turf.
The tags TerminalHumor and TerminalLife indicate this is a joke about daily life using the terminal. Developers who spend a lot of time in a black-and-white text terminal sometimes joke about it as if it’s a lifestyle (thus “Terminal Life”). They’ll share funny anecdotes, custom prompt screenshots, or memes like this to bond over the shared experience. Indeed, customizing your prompt or arguing about shells is almost a rite of passage in programmer culture.
So, if you’re new and feeling a bit lost: just picture that these pigeons are like a group of very opinionated power-users. One pigeon might have a little mohawk of terminal command knowledge, another wearing the proverbial “Oh My Zsh” jacket, and they’re all scowling at the idea of anything that’s not Zsh. The poor Fish shell, despite being called “friendly,” gets the cold shoulder from this crew. It’s all parody – in reality, you can try out both shells on your own machine and see which you like, without any gang coming after you! In fact, many devs encourage experimenting: they joke about hating on the other shell, but often they’ve tried it themselves.
The bottom line for a junior developer: Zsh and Fish are just two flavors of command-line shells. This meme is a lighthearted take on how people sometimes form cliques around their favorite tools. It’s exaggerating to be funny. You’ll see this kind of humor a lot in developer communities where folks jokingly brag about their setup. As you gain experience, you too might end up with strong opinions on your tools – just remember to have a laugh about it, like this meme does, because even pigeons are out here pretending to throw gang signs over shell configurations!
Level 3: Terminal Turf War
In the developer world, even the command-line interface (CLI) can spark intense loyalty battles that look absurd from the outside. Here we have a pigeon “street gang” loudly declaring “I hate fish” and “Me and my fellas use zsh”. Of course, these birds aren’t squawking about real seafood – they’re parodying hardcore CLI users taking sides in the shell wars. The meme mashes up gang-like posturing with nerdy shell preferences: it’s as if a crew of tough pigeons has drawn a territorial line around their favorite shell configuration. This kind of developer tribalism is an ongoing inside joke: it echoes the old editor wars (think Vim vs Emacs) or the tabs vs spaces feud, but here it’s about which shell runs your terminal. The humor comes from how over-the-top the stance is – these pigeons act like a hostile street gang over something as geeky as dotfiles. It’s a classic case of taking a mundane tech preference and cranking it up to gang-war intensity for comedic effect.
On a technical level, fish and zsh are two different Unix/Linux shells, each with its own philosophy and following. Zsh (Z Shell) is a powerful, POSIX-compliant shell that extends the traditional Bourne shell (sh) with loads of features. It’s been a favorite for ages among power users who love tweaking their ~/.zshrc (Zsh config file) to customize prompts, enable plugins, and squeeze out efficiency. Fish (Friendly Interactive SHell), on the other fin, is a newer shell that isn’t fully POSIX-compatible – instead, it deliberately breaks from some old shell syntax to provide a more user-friendly, out-of-the-box experience (like automatic suggestions and syntax highlighting without extra config). The rivalry arises because each shell’s design appeals to a different mindset: Zsh is beloved by those who enjoy endless customization and integrating decades of Unix script compatibility, whereas Fish attracts folks who want smart defaults and modern convenience, even if it means learning a slightly different shell language. So when the pigeons say “fish need not apply”, it’s poking fun at the exclusionary attitude some Zsh users have: If it’s not the Z shell, it’s not welcome on our turf!
This “turf war” is all about dotfiles allegiance. In Unix culture, dotfiles (like .zshrc or Fish’s config.fish) are personal config files that often start with a dot, and customizing them is practically a hobby and badge of honor. Developers notoriously share their elaborate dotfile setups on GitHub, showing off fancy prompts and time-saving aliases like they’re flaunting gang colors. Here the pigeon gang has effectively sworn by a particular dotfile creed: they likely have pimped-out ~/.zshrc files with all the bells and whistles, and they take pride in it as a group identity. They sneer at Fish shell as outsiders, similar to how a clique might diss a different style just to strengthen their own bond. It’s a satirical nod to how devs sometimes treat tool preferences almost like sports teams or clans.
Why specifically pigeons? This image is a popular meme format where pigeons photographed from a low angle look like intimidating gang members – a humorous contrast since pigeons are ordinary (even goofy) animals, not exactly symbols of intimidation. That absurdity mirrors the situation: we have ordinary tools (shells) that become the subject of an exaggerated gang feud. And the text overlays in Impact font (classic meme style) make it explicit and loud, just like a confrontation. The top text “I HATE FISH” is aggressive and blunt (in true meme fashion), and the bottom “ME AND MY FELLAS USE ZSH” completes the punchline by revealing the context: it’s not about aquatic fish at all, but about a group of dev “fellas” asserting their shell of choice. The capital letters and terse phrasing mimic how meme characters speak in a simplistic, forceful way – perfect for these feathered hooligans staking their claim in the Terminal.
This resonates with seasoned engineers because many have seen or participated in these shell debates. It’s common on teams or online forums to encounter the Zsh vs Fish (or Bash, or Powershell, etc.) discussions. Often, each camp claims superiority in productivity or aesthetics:
- Zsh users boast about the oh-my-zsh framework, rich plugin ecosystem, and being the default on macOS now (Apple switched from Bash to Zsh as the default shell, partly for licensing reasons, but Zsh fans wear it like a trophy). They’ll say things like, “Why use Fish? Zsh can do everything with the right plugins, and it’s scriptable in standard shell syntax.”
- Fish users counter with, “Fish just works out of the box! No need for heavy dotfile tweaking or third-party plugins to get features like autosuggestions, syntax highlighting, and a pretty prompt.” They might poke fun at Zsh’s need for configuration by saying their shell is already friendly and tricked out from the start.
The meme’s joke exaggerates this by turning the preference into a hostile “fish are not allowed in our neighborhood” vibe. It’s amusing because, in reality, using Fish vs Zsh is an individual choice – it doesn’t harm anyone – but the meme pretends it’s a gang rivalry in a gritty city square. The “pigeon street gang” is essentially role-playing how overzealous tech folks sound when they gatekeep (“Only our choice is the right one, others get lost”). It’s a self-own on the community: we realize that getting this worked up over a shell is silly, so we laugh at ourselves through the pigeons.
To seasoned devs, there’s also subtext about shell performance and prompt speed. The caption references “cleanest prompt and fastest completions”, which are points of pride. For example, a common gripe: a heavily customized Zsh (with tons of plugins in .oh-my-zsh) can make your prompt sluggish, especially if it shows git status or other info. Fish, by contrast, is often praised for snappy auto-completions and prompt rendering because it’s optimized for interactivity. So when someone says “my shell is faster or cleaner,” it’s like bragging rights – and something a tech gang might brawl over in jest. The meme distills that down to a primal “ours is best, yours stinks” declaration.
Finally, consider the absurd literal layer: Pigeons saying “I hate fish” – pigeons don’t eat fish (usually), and “fish” is also not a typical rival to a pigeon. This odd match-up underscores that the fight is purely symbolic, much like how these shell rivalries have fervor despite both shells ultimately doing the same basic job (helping you execute commands). It’s a playful reminder that, at the end of the day, zsh and fish are both just shells – different flavors of the same idea. But to the “gang” in the meme, that nuance is lost as they double-down on loyalty. The result is a rich mix of tech in-joke and visual silliness that makes experienced developers both nod in recognition and chuckle at the ridiculous seriousness. In other words, it’s an apt portrayal of how we sometimes look when we feud over dev tools.
Let’s break down the key differences and attitudes being lampooned here:
| Aspect | Zsh Crew 🐦 | Fish Crew 🐟 |
|---|---|---|
| Philosophy | Traditionalist plus extras – “classic shell, but make it powerful.” | Modern and user-friendly – “reinvent shell for humans.” |
| Config Style | Extensive dotfiles tweaking (~/.zshrc heaven), often using frameworks like Oh-My-Zsh for plugins/themes. |
Minimal config needed; comes with fancy features by default. Uses ~/.config/fish/config.fish for settings. |
| Compliance | POSIX-compatible – runs bash scripts and legacy syntax fine. | Not fully POSIX – uses its own syntax (e.g., set var value instead of var=value), which some veteran scripters side-eye. |
| Cool Factor | Feels like a souped-up classic car – venerable, heavily modded shell with a long history. | Feels like a slick new electric car – fresh design, no baggage, impressively smooth ride out-of-box. |
| Bragging Rights | “My prompt has every git branch and AWS context, and I still use vi keybindings in shell.” | “I get suggestions as I type without configuring a thing, and my prompt was pretty from install.” |
| Stereotype | The old-school hacker who spent a week fine-tuning their .zshrc and wears that like a badge. |
The forward-looking tinkerer who installed Fish and was amazed when things just auto-magically worked. |
| Attitude in Meme | “You ain’t one of us unless you run Zsh. Other shells are trash – get outta here!” | (Not represented in this meme, but likely: “We’re chill and modern, why you clinging to that fossil Zsh?” 😂) |
(Table: A tongue-in-cheek comparison of Zsh gang vs Fish gang characteristics.)
The table above exaggerates the differences, but it’s all in good fun. In reality, both shells can greatly enhance a developer’s Terminal life and improve their developer experience (DX) once configured to their liking. Long-time users have likely experimented with both. In fact, some devs even use both: maybe Zsh as their login shell for compatibility, and Fish for interactive sessions to enjoy its features. But when it comes to internet humor, nuance gets thrown out the window – it’s funnier to paint it as a zero-sum feud. The pigeon gang does exactly that, giving a face (well, a beak) to the zealotry. Seasoned engineers laugh because they recognize a bit of themselves in these pigeons: we’ve all had that phase of loudly endorsing our favorite tool and teasing the alternatives, even if just ironically.
In summary, the meme operates on multiple layers: an animal visual gag, a play on words (fish the shell vs fish the animal), and a satire of developer culture’s tribal side. Experienced devs get a kick out of how accurately it skewers the irrational loyalty to config files and shells, all while being utterly ridiculous (gangster pigeons, seriously!). It’s a way of laughing at the silly “us vs them” mindset that we sometimes adopt over things like shell prompts. After all, if even pigeons are taking sides in the Zsh vs Fish fight, maybe we humans should realize how comedic our own turf wars appear.
Description
A meme featuring a low-angle, wide-lens photograph of a group of pigeons in an urban plaza, looking directly at the camera with an intimidating demeanor, as if part of a street crew. Overlaid text in a bold, white, sans-serif font reads "I HATE FISH" at the top and "ME AND MY FELLAS USE ZSH" at the bottom. The meme humorously personifies the technical debate between users of different command-line shells. It frames the choice of a shell as a matter of group identity, contrasting the user-friendly 'fish' shell with the powerful and highly customizable 'zsh' (Z Shell). The joke resonates with developers who understand the tribalism and strong preferences that form around development tools, portraying zsh users as a tough, unified gang
Comments
39Comment deleted
Using fish is fine if you want your shell to autocomplete your path to mediocrity. Real engineers use zsh, where the autocomplete is just a plugin you wrote yourself to handle aliases that are longer than the original commands
When the senior sysadmin joins the stand-off, he just mutters “rc files are cattle, not pets” and switches to Nushell
After 15 years of maintaining shell scripts across three companies, I've learned the real shell war isn't fish vs zsh - it's explaining to the CTO why our entire CI/CD pipeline breaks when someone's .bashrc sources their personal dotfiles repo with 47 incompatible aliases
The irony here is that both ZSH and Fish users spend more time configuring their shell prompts and aliases than actually writing the scripts they claim their shell is superior for. Meanwhile, the Bash users are quietly shipping code while everyone else is still tweaking their starship.toml configs and arguing about whether POSIX compliance matters in 2024
We proudly use zsh - until the Docker ENTRYPOINT hits /bin/sh, CI ignores our dotfiles, and we realize prompt themes were never an architecture decision - just a latency budget
We feud over fish vs zsh; meanwhile the cronjob runs /bin/sh and ignores our 900-line .zshrc
Fish: works out of the box. Zsh: infinite plugins, zero regrets - until merge conflicts in .zshrc
Bash Comment deleted
Bash! Bash! Bash! No thinking required. Comment deleted
zsh zsh zsh! because I want slightly better completion Comment deleted
remember the tablet from yesterday? Comment deleted
no? Comment deleted
I deadass slept for 12h today so I'm a bit wobbly in my brain =w= Comment deleted
I am only 4h awake daily to avoid my depression Comment deleted
i use bash because of my cringe hand-crafted PS1 that refused to work under ash, ksh, csh, zsh, ... lib.rs/statusline Comment deleted
oh, I mean I have my own PS1 too, but I made it work in zsh when I switched :3 Comment deleted
im doing cursed things with file descriptors and stderr to make it work at least somewhat good without blocking on git and making leftover processes Comment deleted
hm, I don't remember what I'm doing but it works and prints me a beautiful git branch when I'm in a git folder :3 Comment deleted
Bash + fzf. A league above Zsh's completion plugins Comment deleted
I've never heard of fzf, and I'm not changing my config now :P Comment deleted
Look into fzf. It's a very cool tool. On the same level as grep/ripgrep and other common ones. Comment deleted
meh. I want to spend my holidays on other things Comment deleted
zsh ftw🥰 Comment deleted
Unknown command:& Comment deleted
fish ftw Comment deleted
I use the one that came with my distro Comment deleted
NOT POSIX Comment deleted
powershell btw Comment deleted
(nushell btw) Comment deleted
Man... I sometimes hate it... Too many breaking changes imo... After each update I have to do my configuration again 😐 Comment deleted
zsh master race Comment deleted
Linux in a nutshell (ba-dum-tss) Comment deleted
May a Windows user join the convo? 😔 Comment deleted
The fuck are you talking about, nushell is the only right choice rn Comment deleted
ksh Comment deleted
😭😭😭 Comment deleted
damn xD Comment deleted
.... Didn't realize it meant the shell fish at first Comment deleted
Strange looking penguins. Comment deleted