How to Install Zsh on Fedora 44

Install Zsh on Fedora 44 and enhance your terminal with Oh My Zsh. Includes plugins, themes, shell configuration, and troubleshooting.

Last updatedAuthorJoshua JamesRead time8 minGuide typeFedora

When Bash starts feeling bare, Zsh gives Fedora users smarter completion, reusable command history, and prompts that can show useful context without a custom shell script. You can install Zsh on Fedora from the default repositories, then choose whether to keep the setup minimal, add Fedora-packaged plugins, or use Oh My Zsh for a larger theme and plugin framework.

The package name is zsh, and no Copr or third-party repository is needed for the base shell. The same DNF path applies to Fedora 44 and Fedora 43 because the workflow uses Fedora’s own packages, with optional Git-based steps only for Oh My Zsh custom plugins.

Install Zsh on Fedora

Zsh itself is the required package. The plugin and framework choices below add convenience, but the shell works normally after the base DNF install.

Choose a Zsh Setup Method on Fedora

Use one plugin-loading approach at a time. Fedora-packaged plugins are simple and update through DNF, while Oh My Zsh gives you a broader ecosystem but stores its framework and custom plugins in your home directory.

MethodSourceWhat It AddsUpdate BehaviorBest Fit
Basic ZshFedora repositoriesInteractive shell, completion system, history, and configuration wizardUpdates through DNFUsers who want Zsh without extra plugins
Fedora-packaged pluginsFedora repositoriesAuto-suggestions and syntax highlighting from RPM packagesUpdates through DNFUsers who prefer system-managed plugin files
Oh My ZshOh My Zsh installer and GitHub plugin repositoriesTheme framework, bundled plugins, custom plugin directory, and omz helperFramework updates with omz update; custom plugins update with GitUsers who want a larger customization framework

Refresh Fedora Before Installing Zsh

Refresh repository metadata and apply available package updates before changing your login shell:

sudo dnf upgrade --refresh

Install the Zsh Package with DNF

Install the Fedora package named zsh:

sudo dnf install zsh

Check the installed shell version:

zsh --version

Relevant output includes the Fedora build suffix:

zsh 5.9 (x86_64-redhat-linux-gnu)

If another command asks for the Zsh path, Fedora normally resolves it to /usr/bin/zsh:

command -v zsh
/usr/bin/zsh

Run the Zsh Configuration Wizard on Fedora

Starting Zsh for the first time can open the built-in new-user configuration wizard when ~/.zshrc does not exist. If you already have a Zsh configuration file, Zsh skips the wizard and opens the shell prompt.

Start a Zsh session manually:

zsh

The wizard gives you a few practical choices:

  • Press q: Exit without creating ~/.zshrc. Zsh asks again the next time it starts without a configuration file.
  • Press 0: Create an empty ~/.zshrc. This is a clean choice if you plan to let Oh My Zsh create its own template later.
  • Press 1: Open the interactive menu for history, completion, key bindings, and other first-run settings.
  • Press 2: Create a starter ~/.zshrc with recommended defaults.

Leave the Zsh session with exit when you want to return to Bash before changing your default shell.

Set Zsh as the Default Shell on Fedora

Fedora registers the packaged Zsh binary in /etc/shells, which lets chsh set it as your login shell. Use the resolved path so the command follows Fedora’s package location:

chsh -s "$(command -v zsh)"

Enter your account password when prompted. The account record changes immediately, but existing terminal sessions keep their current shell until you log out and back in.

Confirm the login shell recorded for your user:

getent passwd "$USER" | cut -d: -f7
/usr/bin/zsh

After a full logout and login, confirm the active login shell variable:

printf '%s\n' "$SHELL"
/usr/bin/zsh

To start using Zsh immediately in the current terminal before logging out, run:

exec zsh

Move Bash Aliases to Zsh on Fedora

Changing your login shell does not rewrite existing Bash scripts. Scripts that start with a Bash shebang such as #!/bin/bash still run under Bash, even after new terminals open in Zsh.

Zsh does not read ~/.bashrc by default. Copy simple aliases and shell functions into ~/.zshrc, or keep shell-neutral aliases in a separate file and source that file from Zsh:

if [ -f ~/.shell_aliases ]; then
  source ~/.shell_aliases
fi

Reload Zsh with exec zsh after editing ~/.zshrc so the alias file is read in the current terminal.

Avoid sourcing ~/.bashrc directly from ~/.zshrc. Fedora’s Bash startup files can contain Bash-specific logic, and a clean Zsh configuration is easier to troubleshoot when each shell keeps its own startup file.

Zsh writes interactive history to ~/.zsh_history, so old Bash history remains in ~/.bash_history unless you intentionally migrate selected commands.

Add Zsh Plugins on Fedora

Fedora packages zsh-autosuggestions and zsh-syntax-highlighting in its default repositories. Use this method when you want DNF to own the plugin files and updates.

Install Fedora-Packaged Zsh Plugins

Install the plugin RPMs:

sudo dnf install zsh-autosuggestions zsh-syntax-highlighting

Create ~/.zshrc if needed, then append the required source lines. The checks prevent duplicate lines if you rerun the block later:

touch ~/.zshrc
grep -qxF 'source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh' ~/.zshrc || printf '%s\n' 'source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh' >> ~/.zshrc
grep -qxF 'source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' ~/.zshrc || printf '%s\n' 'source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' >> ~/.zshrc

Load ~/.zshrc from a Zsh session, not from Bash. If your current terminal is still Bash, use exec zsh or open a new terminal instead of running source ~/.zshrc from Bash.

Verify Fedora installed the plugin source files where the configuration lines expect them:

ls /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
ls /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
/usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
/usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

How the Fedora Zsh Plugins Work

Auto-suggestions show likely commands from your history as faded text while you type. Press the right arrow key or End to accept the full suggestion.

Syntax highlighting colors the command line before you press Enter. Valid commands, invalid commands, and existing file paths display differently, which helps catch typos earlier.

Install Oh My Zsh on Fedora

Oh My Zsh is a user-level framework for managing Zsh themes, plugins, aliases, and update helpers. It requires Zsh, Git installed on Fedora, and the curl command on Linux to retrieve the official installer.

Do not load the same auto-suggestions or syntax-highlighting plugin through both Fedora’s RPM files and Oh My Zsh. Pick the DNF plugin method or the Oh My Zsh custom-plugin method so Zsh does not load duplicate code during startup.

Install Oh My Zsh Prerequisites

Install Git and curl if they are not already present:

sudo dnf install git curl

Run the Official Oh My Zsh Installer

The Oh My Zsh project publishes this installer command on its official site and GitHub README:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

The installer clones the framework into ~/.oh-my-zsh, backs up an existing ~/.zshrc to ~/.zshrc.pre-oh-my-zsh, and writes a new template configuration. If it asks whether to change your default shell, answer y only if you did not already run chsh.

Verify the framework directory exists:

test -d ~/.oh-my-zsh && echo "Oh My Zsh installed"
Oh My Zsh installed

If raw.githubusercontent.com is blocked on your network, the project also exposes the same installer through https://install.ohmyz.sh:

sh -c "$(curl -fsSL https://install.ohmyz.sh)"

Enable Oh My Zsh Plugins

Oh My Zsh already enables its bundled git plugin by default. To add auto-suggestions and syntax highlighting through Oh My Zsh, clone the community plugins into the custom plugin directory:

git clone --depth 1 https://github.com/zsh-users/zsh-autosuggestions "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
git clone --depth 1 https://github.com/zsh-users/zsh-syntax-highlighting "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"

The --depth 1 option downloads the current plugin files without the full Git history, which keeps the clone small.

Edit ~/.zshrc:

nano ~/.zshrc

Find the line that starts with plugins= and include the plugin names:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Save the file, then reload Zsh by opening a new terminal or running:

exec zsh

Change the Oh My Zsh Theme

Oh My Zsh themes are controlled by the ZSH_THEME line in ~/.zshrc. Browse the Oh My Zsh theme gallery, then set a theme name:

ZSH_THEME="agnoster"

Prompt themes that use special glyphs may need Powerline symbols:

sudo dnf install powerline-fonts

After installing the fonts, choose a Powerline-capable font in your terminal profile if the prompt still shows boxes or question marks.

Update Zsh and Oh My Zsh on Fedora

Fedora updates Zsh and DNF-installed plugins with normal system packages:

sudo dnf upgrade --refresh

To check only the Zsh package set, name the installed packages explicitly:

sudo dnf upgrade zsh zsh-autosuggestions zsh-syntax-highlighting

Oh My Zsh has its own updater for the framework:

omz update

Custom plugins cloned with Git need their own pulls:

git -C "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" pull
git -C "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" pull

Open a new terminal after framework or plugin updates if your prompt does not refresh automatically.

Troubleshoot Zsh on Fedora

Most Zsh problems on Fedora come from a missing package, a login session that has not been restarted, duplicate plugin loading, or a plugin directory that does not match the names in ~/.zshrc.

DNF Cannot Find the Zsh Package

The Fedora package is named zsh. Commands that try to install zshrc or use a leading hyphen before the package name are invalid because ~/.zshrc is a user configuration file, not a Fedora package.

sudo dnf install zsh

Then verify the installed RPM name:

rpm -q zsh

Relevant output includes:

zsh-5.9-20.fc44.x86_64

Default Shell Still Shows Bash

If $SHELL still reports Bash right after chsh, log out completely and log back in. A new terminal window inside the same desktop session may keep the old login-shell environment.

Check that Zsh is listed as an allowed shell:

grep -Fx /usr/bin/zsh /etc/shells
/usr/bin/zsh

If the line is missing after a nonstandard install, add the resolved Zsh path and rerun chsh:

printf '%s\n' "$(command -v zsh)" | sudo tee -a /etc/shells
chsh -s "$(command -v zsh)"

Oh My Zsh Plugin Not Found

If Oh My Zsh cannot find a plugin name from your plugins=(...) array, it prints an error like this during shell startup:

[oh-my-zsh] plugin 'zsh-autosuggestions' not found

Check whether the custom plugin directory exists:

ls "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
ls "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"

If a directory is missing, rerun the matching git clone command from the Oh My Zsh plugin section. If the missing plugin name is not one you intended to use, remove that name from the plugins=(...) line.

Fedora-Packaged Plugins Do Not Load

For DNF-installed plugins, verify both the RPM state and the source lines in ~/.zshrc:

rpm -q zsh-autosuggestions zsh-syntax-highlighting
grep -E 'zsh-autosuggestions|zsh-syntax-highlighting' ~/.zshrc

If the RPMs are installed but the plugins still do not work, place the source lines near the end of ~/.zshrc so they load after your main shell settings.

Zsh Starts Slowly

Measure startup time with and without your configuration file. The -f comparison starts Zsh without loading normal startup files, which helps separate a slow shell from a slow ~/.zshrc.

time zsh -i -c exit
time zsh -f -i -c exit

If the normal run is much slower, review plugins, network-dependent commands, prompt themes, and Git status checks in ~/.zshrc. Disable one section at a time until startup time returns to normal.

Prompt Symbols Show Boxes or Question Marks

Install Powerline symbols if a theme such as agnoster shows missing glyphs:

sudo dnf install powerline-fonts

Restart the terminal and select a compatible font in the terminal profile. Font package installation alone does not force every terminal emulator to switch fonts automatically.

Remove Zsh from Fedora

Switch back to Bash before removing Zsh, especially if Zsh is your current login shell:

chsh -s "$(command -v bash)"

Log out and back in, then remove the Fedora packages you installed:

sudo dnf remove zsh zsh-autosuggestions zsh-syntax-highlighting

If you installed Powerline fonts only for a Zsh theme and no longer need them, remove that optional package too:

sudo dnf remove powerline-fonts

Verify the main packages are no longer installed:

rpm -q zsh zsh-autosuggestions zsh-syntax-highlighting || true
package zsh is not installed
package zsh-autosuggestions is not installed
package zsh-syntax-highlighting is not installed

The following cleanup removes your Zsh history, Oh My Zsh framework, custom plugins, and local Zsh configuration. Back up ~/.zshrc first if it contains aliases, functions, or prompt settings you want to keep.

cp ~/.zshrc ~/zshrc.backup 2>/dev/null || true
rm -rf ~/.oh-my-zsh ~/.zcompdump*
rm -f ~/.zshrc ~/.zshrc.pre-oh-my-zsh ~/.zsh_history

After the next login, Bash should be active again. Fedora accounts may show either /bin/bash or /usr/bin/bash, depending on the path saved in the account record:

printf '%s\n' "$SHELL"
/bin/bash

Conclusion

Zsh is now available on Fedora with either a clean base configuration, DNF-managed plugins, or an Oh My Zsh framework in your home directory. Once your shell is comfortable, a faster editor is the next useful terminal upgrade, and installing Neovim on Fedora pairs well with a tuned Zsh prompt and Git-aware plugins.

Share this guide

Help another Linux user troubleshoot faster

Share this guide with someone troubleshooting Linux systems or saving it for later.

Follow LinuxCapable

Want more LinuxCapable guides in Google?

Add LinuxCapable as a preferred source so Google can show our tutorials more often in Top Stories and mark them as preferred in AI Mode and AI Overviews when relevant.

Add LinuxCapable as a preferred source on Google
Search LinuxCapable

Need another guide?

Search LinuxCapable for package installs, commands, troubleshooting, and follow-up guides related to what you just read.

Found this guide useful?

Support LinuxCapable to keep tutorials free and up to date.

Buy me a coffeeBuy me a coffee
Before commenting, please review our Comments Policy.
Formatting tips for your comment

You can use basic HTML to format your comment. Useful tags currently allowed in published comments:

You type Result
<code>command</code> command
<strong>bold</strong> bold
<em>italic</em> italic
<a href="https://example.com">link</a> link
<blockquote>quote</blockquote> quote block

Add to the discussion

Questions, fixes, command output, and version notes help keep this guide current.

Verify before posting: