Fedora GNOME — Install 20 Icon Sets

A curated collection of 20 icon families, including additional variants where supplied. The numbering is not a popularity ranking.

These instructions target Fedora Workstation with GNOME. Run each Bash block in order.

Icon collection

#Icon familyStyle
1PapirusColorful, extensive application coverage
2NumixClassic flat design
3Numix CircleCircular application icons
4BreezeClean KDE styling
5OxygenDetailed, traditional desktop icons
6elementarySoft colors and dimensional shapes
7WhiteSurmacOS inspired
8TelaColorful flat icons
9Tela CircleCircular Tela styling
10FluentMicrosoft Fluent inspired
11ColloidSoft, modern styling
12QogirColorful, clean shapes
13McMojave CircleCircular macOS-inspired icons
14VimixMaterial-inspired colors
15ReversalColorful rectangular icons
16Flat RemixFlat shapes with gradients and shadows
17CandyBright gradient colors
18KoraDetailed SVG icons
19La CapitainemacOS and Material Design influences
20Suru++Colorful Suru-inspired styling

What changes?

Icon themes affect supported application launchers, folders, files, and interface icons. They do not change your GTK theme or install a dock.

Some applications use embedded or absolute-path icons and may retain their original appearance. Flatpak and symbolic toolbar icons may also behave differently.

1. Install tools and six Fedora-packaged icon sets

sudo dnf install git gtk3 gnome-tweaks \
  papirus-icon-theme \
  numix-icon-theme \
  numix-icon-theme-circle \
  breeze-icon-theme \
  oxygen-icon-theme \
  elementary-icon-theme

These icon sets install system-wide and receive updates through DNF.

2. Install nine sets using upstream installers

This installs:

  • WhiteSur
  • Tela
  • Tela Circle
  • Fluent
  • Colloid
  • Qogir
  • McMojave Circle
  • Vimix
  • Reversal

Run the entire block without sudo. It downloads and executes each project’s installer, targeting your personal icon directory.

(
  set -e
 
  icon_dest="$HOME/.local/share/icons"
  mkdir -p "$icon_dest" "$HOME/.cache"
  icon_work="$(mktemp -d "$HOME/.cache/icon-installers.XXXXXX")"
 
  repos=(
    vinceliuice/WhiteSur-icon-theme
    vinceliuice/Tela-icon-theme
    vinceliuice/Tela-circle-icon-theme
    vinceliuice/Fluent-icon-theme
    vinceliuice/Colloid-icon-theme
    vinceliuice/Qogir-icon-theme
    vinceliuice/McMojave-circle
    vinceliuice/Vimix-icon-theme
    yeyushengfan258/Reversal-icon-theme
  )
 
  for repo in "${repos[@]}"; do
    repo_name="${repo##*/}"
    printf '\nInstalling %s...\n' "$repo_name"
 
    git clone --depth 1 \
      "https://github.com/${repo}.git" \
      "$icon_work/$repo_name"
 
    (
      cd "$icon_work/$repo_name"
      test -f install.sh
      bash ./install.sh -d "$icon_dest"
    )
  done
 
  printf '\nUpstream icon installers finished.\n'
)

Default variants are installed. Re-running these installers may replace existing variants of the same icon families.

3. Install five sets supplied as ready-to-use files

This installs Flat Remix, Candy, Kora, La Capitaine, and Suru++.

The script checks for index.theme, preserves symbolic links, and skips destination folders that already exist.

Run without sudo:

(
  set -e
 
  icon_dest="$HOME/.local/share/icons"
  mkdir -p "$icon_dest" "$HOME/.cache"
  icon_work="$(mktemp -d "$HOME/.cache/icon-files.XXXXXX")"
 
  copy_icon_theme() {
    local source="$1"
    local name="$2"
    local target="$icon_dest/$name"
 
    if [ -e "$target" ] || [ -L "$target" ]; then
      printf 'Already exists; skipping: %s\n' "$name"
      return
    fi
 
    test -f "$source/index.theme"
    cp -a "$source" "$target"
    printf 'Installed: %s\n' "$name"
  }
 
  repos=(
    daniruiz/flat-remix
    EliverLara/candy-icons
    bikass/kora
    keeferrourke/la-capitaine-icon-theme
    suru-plus/suru-plus
  )
 
  for repo in "${repos[@]}"; do
    repo_name="${repo##*/}"
    source_dir="$icon_work/$repo_name"
 
    printf '\nDownloading %s...\n' "$repo_name"
 
    git clone --depth 1 \
      "https://github.com/${repo}.git" \
      "$source_dir"
 
    if [ -f "$source_dir/index.theme" ]; then
      copy_icon_theme "$source_dir" "$repo_name"
    else
      found=0
 
      for theme_dir in "$source_dir/"*; do
        [ -f "$theme_dir/index.theme" ] || continue
 
        copy_icon_theme "$theme_dir" "$(basename "$theme_dir")"
        found=$((found + 1))
      done
 
      if [ "$found" -eq 0 ]; then
        printf 'No ready-to-use icon themes found in %s\n' "$repo" >&2
        exit 1
      fi
    fi
  done
 
  printf '\nIcon file installation finished.\n'
)

Installation errors

If a block fails, save the error output and resolve it before continuing. Previously completed installations remain in place.

These instructions were checked against upstream documentation and repository layouts, but were not executed on this computer.

4. Refresh the personal icon caches

for icon_dir in "$HOME/.local/share/icons/"*; do
  [ -f "$icon_dir/index.theme" ] || continue
 
  gtk-update-icon-cache -f -t "$icon_dir" ||
    printf 'Cache refresh failed for: %s\n' "$icon_dir"
done

5. List installed icon-theme names

The folder names are the identifiers used by gsettings.

(
  for icon_root in \
    "$HOME/.local/share/icons" \
    "$HOME/.icons" \
    /usr/share/icons
  do
    [ -d "$icon_root" ] || continue
 
    for theme_file in "$icon_root/"*/index.theme; do
      [ -f "$theme_file" ] || continue
      grep -q '^Directories=' "$theme_file" || continue
 
      basename "$(dirname "$theme_file")"
    done
  done
) | sort -u

6. Apply an icon set

Run one of these examples.

Papirus

gsettings set org.gnome.desktop.interface icon-theme 'Papirus'

Papirus for a dark desktop

gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Dark'

Numix Circle

gsettings set org.gnome.desktop.interface icon-theme 'Numix-Circle'

WhiteSur

gsettings set org.gnome.desktop.interface icon-theme 'WhiteSur'

Candy

gsettings set org.gnome.desktop.interface icon-theme 'candy-icons'

Kora

gsettings set org.gnome.desktop.interface icon-theme 'kora'

For other sets, use their exact folder name from Step 5.

Reopen Thunar or other applications if their icons do not update immediately. If the application grid still shows old icons, log out and back in.

7. Choose icons visually

gnome-tweaks

Go to Appearance → Icons.

8. Check the active icon set

gsettings get org.gnome.desktop.interface icon-theme

9. Restore GNOME’s Adwaita icons

gsettings set org.gnome.desktop.interface icon-theme 'Adwaita'

The other icon sets remain installed.

Maintenance

  • Fedora-packaged icon sets update through DNF.
  • GitHub-installed sets do not update through DNF.
  • Step 2 installers can be rerun to reinstall current upstream versions.
  • Step 3 skips existing folders; rerunning it does not update those installed copies.
  • Downloaded source directories remain under ~/.cache/icon-installers.* and ~/.cache/icon-files.*.