Replies: 5 comments 2 replies
-
|
My experience has been pretty good with |
Beta Was this translation helpful? Give feedback.
-
|
Thank you. I found myself in the same situation (black screen after decrypt) and it took me a while to figure it out. |
Beta Was this translation helpful? Give feedback.
-
|
Thank you for this guide :) Probably because of a new change to [shell]
program = "/usr/bin/fish"I get a config warning stating that the [terminal.shell]
program = "/usr/bin/fish"To load zoxide into your fish shell you would need to add: zoxide init fish | sourceat the end of your |
Beta Was this translation helpful? Give feedback.
-
|
@Jerry1098 @omarahmed786 thank you for the information! I've updated the guide to account for your feedback as well as the migration to Ghostty from Alacritty! |
Beta Was this translation helpful? Give feedback.
-
|
Even better, there's one for both! Updated the guide to point to @ryanrhughes's official scripts as the main method. Keeping the technical deep dive for folks who want to understand what's happening or need manual configs, but yeah, use the official scripts. |
Beta Was this translation helpful? Give feedback.
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
chshDoesn't WorkIf you've tried changing your default shell using
chsh -s /usr/bin/zshorchsh -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/profileand everything in/etc/profile.d/*.shbeing 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.shandautostart.confexpects 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)Method 1: Using Ghostty (Omarchy's default terminal as of 3.2.0)For Ghostty, add to
~/.config/ghostty/config:Replace
/usr/bin/zshwith/usr/bin/fishif you prefer fish.Method 2: Using Alacritty
Add this to~/.config/alacritty/alacritty.toml:Update: The
[shell]option has been deprecated in recent Alacritty versions. Use this instead in~/.config/alacritty/alacritty.toml:Or if you're using the older YAML format (
~/.config/alacritty/alacritty.yml):Replace
/usr/bin/zshwith/usr/bin/fishif you prefer fish.Method 3: Using Other Terminals
If you want to use a different terminal emulator (like 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 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
$argvinstead of$@, and(count $argv)instead of$#.Important: To get the full Omarchy experience in fish, you'll also need to initialize zoxide and starship. Add these lines at the end of your
~/.config/fish/config.fish:Alternatively, you can install the zoxide.fish plugin instead of using
zoxide init fish | source.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
.bashrcto 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 Alacrittyfrom Ghostty (Omarchy's default as of 3.2.0) to a different terminal emulator, here's how.GUI Method (recommended):
Press
SUPER+ALT+SPACEto open Walker, then navigate to Setup > Defaults. Find the terminal option and select your preferred terminal emulator (ghostty,alacritty, kitty, wezterm, etc.). This modifies the same config file behind the scenes.Direct Config Method:
Edit
~/.config/uwsm/defaultand look for the line that says:Change it to your preferred terminal:
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=firefoxor
export BROWSER=braveBeta Was this translation helpful? Give feedback.
All reactions