Replies: 1 comment
-
My experience has been pretty good with |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Changing Your Shell to Zsh or Fish in Omarchy Without Breaking Everything
Why
chsh
Doesn't WorkIf you've tried changing your default shell using
chsh -s /usr/bin/zsh
orchsh -s /usr/bin/fish
, you've probably noticed one of two things: either the change doesn't seem to stick, or things start breaking. With fish specifically, you'll likely end up staring at a black screen after entering your LUKS password on boot. This isn't a bug. It's how Omarchy is architected.Here's what's actually happening under the hood.
Omarchy's entire boot chain expects bash. SDDM (the display manager) launches your session via
/usr/share/sddm/scripts/wayland-session
, which expects a POSIX-compatible shell. Session initialization relies on/etc/profile
and everything in/etc/profile.d/*.sh
being sourced, and these are bash scripts. Your user environment sources~/.bash_profile
, which sources~/.bashrc
, which sources~/.local/share/omarchy/default/bash/rc
. All of Omarchy's helper scripts (thoseomarchy-launch-*
andomarchy-restart-*
scripts in~/.local/share/omarchy/bin/
) are written in bash. Hyprland startup via~/.local/share/omarchy/boot.sh
andautostart.conf
expects bash to be available.When you change your login shell to zsh or fish, this entire chain breaks. Zsh and fish won't source bash config files, use different syntax, and can't execute bash scripts the same way. The system literally can't boot your desktop environment.
Even fish's own documentation warns about this:
The Correct Way: Configure Your Terminal Instead
The solution is simple. Keep bash as your login shell so the system boots properly, but configure your terminal emulator to launch your preferred shell.
Method 1: Using Alacritty (Omarchy's default terminal)
Add this to
~/.config/alacritty/alacritty.toml
:Or if you're using the older YAML format (
~/.config/alacritty/alacritty.yml
):Replace
/usr/bin/zsh
with/usr/bin/fish
if you prefer fish.Method 2: Using a Different Terminal
If you want to use a different terminal emulator (like ghostty, kitty, wezterm, etc.), configure that terminal's startup shell. Not sure how to change your default terminal in Omarchy? There's a quick guide at the bottom of this post.
For ghostty, add to
~/.config/ghostty/config
:For kitty, add to
~/.config/kitty/kitty.conf
:For wezterm, add to
~/.config/wezterm/wezterm.lua
:That's it. You keep bash as the login shell (don't touch
chsh
), and now your terminal launches zsh (or fish) every time while the system stays stable.Shell-Specific Configuration
Zsh
For zsh, you can pretty much copy your bash aliases directly to
~/.zshrc
. The syntax is nearly identical:If you want to manually add them to your
~/.zshrc
, the Omarchy aliases work as-is in zsh since the syntax is compatible.Fish
Fish doesn't use bash-style aliases for complex functions. Here's how to translate Omarchy's default aliases to fish syntax for your
~/.config/fish/config.fish
:Key differences: fish uses
$argv
instead of$@
, and(count $argv)
instead of$#
.Works perfectly. You get to daily drive zsh or fish without breaking anything.
Alternative Method: Using .bashrc to Drop Into Your Shell
If you want a terminal-agnostic solution that works everywhere (including ssh sessions), you can modify your
.bashrc
to automatically switch to your preferred shell after bash initializes.Add this to the end of your
~/.bashrc
:For Fish:
For Zsh:
This way bash handles all the system initialization and Omarchy setup, then immediately drops you into your preferred shell.
When to use this method:
When to use the terminal emulator method:
Both methods work perfectly. Pick whichever fits your workflow.
Bonus: Changing Your Default Terminal Emulator
If you want to switch from Alacritty to a different terminal emulator, here's how.
GUI Method (recommended):
Press
SUPER+ALT+SPACE
to open Walker, then navigate to Setup > Defaults. Find the terminal option and select your preferred terminal emulator (ghostty, kitty, wezterm, etc.). This modifies the same config file behind the scenes.Direct Config Method:
Edit
~/.config/uwsm/default
and look for the line that says:export TERMINAL=alacritty
Change it to your preferred terminal:
export TERMINAL=ghostty
The GUI method is cleaner and ensures everything gets updated properly, but both methods modify the same line.
Bonus tip: Firefox or Brave users can set their default browser in the same file by adding or modifying this line:
export BROWSER=firefox
or
export BROWSER=brave
Beta Was this translation helpful? Give feedback.
All reactions