Install Oh My Zsh Fedora



This article shows you how to set up some powerful tools in your command line interpreter (CLI) shell on Fedora. If you use bash (the default) or zsh, Fedora lets you easily setup these tools.

Requirements

Some installed packages are required. On Workstation, run the following command:

On Silverblue run:

Installing Oh My Zsh on Windows 10. Now that we have zsh installed, we can install Oh My Zsh.If you’re not familiar with Oh My Zsh, the developer says it best: “Oh-My-Zsh is an open source, community-driven framework for managing your zsh configuration. Early in the Oh My Bash world, we may have gotten a bit too theme happy. We have over one hundred themes now bundled. Most of them have screenshots on our wiki or alternatively oh-my-zsh wiki. Selecting a Theme. Powerline's theme is the default one. It's not the fanciest one. It's not the simplest one. It's just the right one.

Note: On Silverblue you need to restart before proceeding.

Fonts

You can give your terminal a new look by installing new fonts. Why not fonts that display characters and icons together?

Installing-oh-my-zsh-fedora.md Installing oh-my-zsh on Fedora (for DB class images) Oh-my-zsh is an extension of the traditional z shell that is extensible via community created plugins (Plugins found here: oh-my-zsh github repo). It is, in my opinion, a breath of fresh air in comparison to the traditional bash shell. Ctrl-x, Y to exit. Source /.zshrc to reload the config! And you should have it! 💪 Install Plugins. We will just install 2 very useful plugins here — zsh-syntax-highlighting to add. On Fedora, RHEL, and CentOS: sudo dnf install zsh. Also, you can check for any shells currently in use: echo SHELL /usr/bin/bash. Type the following command to install on Debian. Also, you can find many other themes available and in /.oh-my-zsh/themes/ directory. Ls /.oh-my-zsh/themes.

Nerd-Fonts

Open a new terminal and type the following commands:

Awesome-Fonts

On Workstation, install using the following command:

On Silverblue, type:

Powerline

Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including bash, zsh, tmus, i3, Awesome, IPython and Qtile. You can find more information about powerline on the official documentation site.

Installation

To install powerline utility on Fedora Workstation, open a new terminal and run:

On Silverblue, the command changes to:

Note: On Silverblue, before proceeding you need restart.

Activating powerline

To make the powerline active by default, place the code below at the end of your ~/.bashrc file

Finally, close the terminal and open a new one. It will look like this:

Oh-My-Zsh

Oh-My-Zsh is a framework for managing your Zsh configuration. It comes bundled with helpful functions, plugins, and themes. To learn how set Zsh as your default shell this article.

Installation

Type this in the terminal:

Alternatively, you can type this:

At the end, you see the terminal like this:

Congratulations, Oh-my-zsh is installed.

Themes

Once installed, you can select your theme. I prefer to use the Powerlevel10k. One advantage is that it is 100 times faster than powerlevel9k theme. To install run this line:

And set ZSH_THEME in your ~/.zshrc file

Close the terminal. When you open the terminal again, the Powerlevel10k configuration wizard will ask you a few questions to configure your prompt properly.

After finish Powerline10k configuration wizard, your prompt will look like this:

If you don’t like it. You can run the powerline10k wizard any time with the command p10k configure.

Enable plug-ins

Plug-ins are stored in .oh-my-zsh/plugins folder. You can visit this site for more information. To activate a plug-in, you need edit your ~/.zshrc file. Install plug-ins means that you are going create a series of aliases or shortcuts that execute a specific function.

For example, to enable the firewalld and git plugins, first edit ~/.zshrc:

Note: use a blank space to separate the plug-ins names list.

Then reload the configuration

To see the created aliases, use the command:

Additional configuration

I suggest the install syntax-highlighting and syntax-autosuggestions plug-ins.

Add them to your plug-ins list in your file ~/.zshrc

Reload the configuration

See the results:

Colored folders and icons

Colorls is a Ruby gem that beautifies the terminal’s ls command, with colors and font-awesome icons. You can visit the official site for more information.

Because it’s a ruby gem, just follow this simple step:

To keep up to date, just do:

To prevent type colorls everytime you can make aliases in your ~/.bashrc or ~/.zshrc.

Also, you can enable tab completion for colorls flags, just entering following line at end of your shell configuration:

Reload it and see what it happens:

#!/bin/sh

#

# This script should be run via curl:

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

# or via wget:

# sh -c '$(wget -qO- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)'

# or via fetch:

# sh -c '$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)'

#

# As an alternative, you can first download the install script and run it afterwards:

# wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh

# sh install.sh

#

# You can tweak the install behavior by setting variables when running the script. For

# example, to change the path to the Oh My Zsh repository:

# ZSH=~/.zsh sh install.sh

#

# Respects the following environment variables:

# ZSH - path to the Oh My Zsh repository folder (default: $HOME/.oh-my-zsh)

# REPO - name of the GitHub repo to install from (default: ohmyzsh/ohmyzsh)

# REMOTE - full remote URL of the git repo to install (default: GitHub via HTTPS)

# BRANCH - branch to check out immediately after install (default: master)

#

# Other options:

# CHSH - 'no' means the installer will not change the default shell (default: yes)

# RUNZSH - 'no' means the installer will not run zsh after the install (default: yes)

# KEEP_ZSHRC - 'yes' means the installer will not replace an existing .zshrc (default: no)

#

# You can also pass some arguments to the install script to set some these options:

# --skip-chsh: has the same behavior as setting CHSH to 'no'

# --unattended: sets both CHSH and RUNZSH to 'no'

# --keep-zshrc: sets KEEP_ZSHRC to 'yes'

# For example:

# sh install.sh --unattended

# or:

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

#

set -e


Install

# Track if $ZSH was provided

custom_zsh=${ZSH:+yes}


# Default settings

ZSH=${ZSH:-~/.oh-my-zsh}

REPO=${REPO:-ohmyzsh/ohmyzsh}

REMOTE=${REMOTE:-https://github.com/${REPO}.git}

BRANCH=${BRANCH:-master}


# Other options

CHSH=${CHSH:-yes}

RUNZSH=${RUNZSH:-yes}

KEEP_ZSHRC=${KEEP_ZSHRC:-no}



command_exists() {

command -v '$@' >/dev/null 2>&1

}


fmt_error() {

Install Oh My Zsh Plugin

echo ${RED}'Error: $@'${RESET} >&2

}


fmt_underline() {

echo '$(printf '033[4m')$@$(printf '033[24m')'

}


fmt_code() {

echo '`$(printf '033[38;5;247m')$@${RESET}`'

}


setup_color() {

# Only use colors if connected to a terminal

if [ -t 1 ]; then

RED=$(printf '033[31m')

GREEN=$(printf '033[32m')

YELLOW=$(printf '033[33m')

BLUE=$(printf '033[34m')

BOLD=$(printf '033[1m')

RESET=$(printf '033[m')

else

RED='

GREEN='

YELLOW='

BLUE='

BOLD='

RESET='

fi

}


setup_ohmyzsh() {

# Prevent the cloned repository from having insecure permissions. Failing to do

# so causes compinit() calls to fail with 'command not found: compdef' errors

# for users with insecure umasks (e.g., '002', allowing group writability). Note

# that this will be ignored under Cygwin by default, as Windows ACLs take

# precedence over umasks except for filesystems mounted with option 'noacl'.

umask g-w,o-w


echo '${BLUE}Cloning Oh My Zsh...${RESET}'


command_exists git || {

fmt_error 'git is not installed'

exit 1

}


if [ '$OSTYPE' = cygwin ] && git --version | grep -q msysgit; then

fmt_error 'Windows/MSYS Git is not supported on Cygwin'

fmt_error 'Make sure the Cygwin git package is installed and is first on the $PATH'

exit 1

fi


git clone -c core.eol=lf -c core.autocrlf=false

-c fsck.zeroPaddedFilemode=ignore

-c fetch.fsck.zeroPaddedFilemode=ignore

-c receive.fsck.zeroPaddedFilemode=ignore

--depth=1 --branch '$BRANCH' '$REMOTE' '$ZSH' || {

fmt_error 'git clone of oh-my-zsh repo failed'

exit 1

}


echo

}


setup_zshrc() {

# Keep most recent old .zshrc at .zshrc.pre-oh-my-zsh, and older ones

# with datestamp of installation that moved them aside, so we never actually

Install Oh My Zsh Mac

# destroy a user's original zshrc

echo '${BLUE}Looking for an existing zsh config...${RESET}'


# Must use this exact name so uninstall.sh can find it

OLD_ZSHRC=~/.zshrc.pre-oh-my-zsh

if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then

# Skip this if the user doesn't want to replace an existing .zshrc

if [ $KEEP_ZSHRC = yes ]; then

echo '${YELLOW}Found ~/.zshrc.${RESET} ${GREEN}Keeping...${RESET}'

return

fi

if [ -e '$OLD_ZSHRC' ]; then

OLD_OLD_ZSHRC='${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)'

if [ -e '$OLD_OLD_ZSHRC' ]; then

fmt_error '$OLD_OLD_ZSHRC exists. Can't back up ${OLD_ZSHRC}'

fmt_error 're-run the installer again in a couple of seconds'

exit 1

fi

mv '$OLD_ZSHRC' '${OLD_OLD_ZSHRC}'


echo '${YELLOW}Found old ~/.zshrc.pre-oh-my-zsh.'

'${GREEN}Backing up to ${OLD_OLD_ZSHRC}${RESET}'

fi

echo '${YELLOW}Found ~/.zshrc.${RESET} ${GREEN}Backing up to ${OLD_ZSHRC}${RESET}'

mv ~/.zshrc '$OLD_ZSHRC'

fi


echo '${GREEN}Using the Oh My Zsh template file and adding it to ~/.zshrc.${RESET}'


sed '/^export ZSH=/ c

export ZSH='$ZSH'

' '$ZSH/templates/zshrc.zsh-template' > ~/.zshrc-omztemp

mv -f ~/.zshrc-omztemp ~/.zshrc


echo

}


setup_shell() {

# Skip setup if the user wants or stdin is closed (not running interactively).

if [ $CHSH = no ]; then

return

fi


# If this user's login shell is already 'zsh', do not attempt to switch.

if [ '$(basename -- '$SHELL')' = 'zsh' ]; then

return

fi


# If this platform doesn't provide a 'chsh' command, bail out.

if ! command_exists chsh; then

cat <<EOF

I can't change your shell automatically because this system does not have chsh.

${BLUE}Please manually change your default shell to zsh${RESET}

EOF

return

fi


echo '${BLUE}Time to change your default shell to zsh:${RESET}'


# Prompt for user choice on changing the default login shell

printf '${YELLOW}Do you want to change your default shell to zsh? [Y/n]${RESET} '

read opt

case $opt in

y*|Y*|') echo 'Changing the shell...' ;;

n*|N*) echo 'Shell change skipped.'; return ;;

*) echo 'Invalid choice. Shell change skipped.'; return ;;

esac


# Check if we're running on Termux

case '$PREFIX' in

*com.termux*) termux=true; zsh=zsh ;;

*) termux=false ;;

esac


if [ '$termux' != true ]; then

# Test for the right location of the 'shells' file

if [ -f /etc/shells ]; then

shells_file=/etc/shells

elif [ -f /usr/share/defaults/etc/shells ]; then # Solus OS

shells_file=/usr/share/defaults/etc/shells

else

fmt_error 'could not find /etc/shells file. Change your default shell manually.'

return

fi


# Get the path to the right zsh binary

# 1. Use the most preceding one based on $PATH, then check that it's in the shells file

# 2. If that fails, get a zsh path from the shells file, then check it actually exists

if ! zsh=$(which zsh) || ! grep -qx '$zsh' '$shells_file'; then

if ! zsh=$(grep '^/.*/zsh$' '$shells_file' | tail -1) || [ ! -f '$zsh' ]; then

fmt_error 'no zsh binary found or not present in '$shells_file'

fmt_error 'change your default shell manually.'

return

fi

fi

fi


# We're going to change the default shell, so back up the current one

if [ -n '$SHELL' ]; then

echo $SHELL > ~/.shell.pre-oh-my-zsh

Install Oh My Zsh Fedora

else

grep '^$USER:' /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh

fi


# Actually change the default shell to zsh

if ! chsh -s '$zsh'; then

fmt_error 'chsh command unsuccessful. Change your default shell manually.'

else

export SHELL='$zsh'

echo '${GREEN}Shell successfully changed to '$zsh'.${RESET}'

fi


echo

}


main() {

# Run as unattended if stdin is not a tty

if [ ! -t 0 ]; then

RUNZSH=no

CHSH=no

Fedora

fi


# Parse arguments

while [ $# -gt 0 ]; do

case $1 in

--unattended) RUNZSH=no; CHSH=no ;;

--skip-chsh) CHSH=no ;;

--keep-zshrc) KEEP_ZSHRC=yes ;;

esac

shift

done


setup_color


if ! command_exists zsh; then

echo '${YELLOW}Zsh is not installed.${RESET} Please install zsh first.'

exit 1

fi


if [ -d '$ZSH' ]; then

echo '${YELLOW}The $ZSH folder already exists ($ZSH).${RESET}'

if [ '$custom_zsh' = yes ]; then

cat <<EOF


You ran the installer with the $ZSH setting or the $ZSH variable is

exported. You have 3 options:


1. Unset the ZSH variable when calling the installer:

$(fmt_code 'ZSH= sh install.sh')

2. Install Oh My Zsh to a directory that doesn't exist yet:

$(fmt_code 'ZSH=path/to/new/ohmyzsh/folder sh install.sh')

3. (Caution) If the folder doesn't contain important information,

you can just remove it with $(fmt_code 'rm -r $ZSH')


EOF

else

echo 'You'll need to remove it if you want to reinstall.'

fi

exit 1

fi


setup_ohmyzsh

setup_zshrc

setup_shell


printf '$GREEN'

cat <<'EOF'

__ __

____ / /_ ____ ___ __ __ ____ _____/ /_

/ __ / __ / __ `__ / / / / /_ / / ___/ __

/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / /

____/_/ /_/ /_/ /_/ /_/__, / /___/____/_/ /_/

/____/ ....is now installed!



EOF

cat <<EOF

Before you scream Oh My Zsh! please look over the ~/.zshrc file to select plugins, themes, and options.


• Follow us on Twitter: $(fmt_underline https://twitter.com/ohmyzsh)

• Join our Discord server: $(fmt_underline https://discord.gg/ohmyzsh)

• Get stickers, shirts, coffee mugs and other swag: $(fmt_underline https://shop.planetargon.com/collections/oh-my-zsh)


EOF

printf '$RESET'


if [ $RUNZSH = no ]; then

echo '${YELLOW}Run zsh to try it out.${RESET}'

exit

fi


exec zsh -l

}


main '$@'