Customization

xfetch offers extensive visual customization through logos, icons, colors, and animation effects. All customization is configured in the JSONC configuration file.

Logos

xfetch supports three types of logos: ASCII art, image files, and the built-in default.

Default ASCII Logo

When no custom logo is specified, xfetch displays its built-in ASCII art:


__  __
  \ \/ /
   \  /
   /  \
  /_/\_\
 /____/linux
---------BEGIN PUBLIC KEY----------
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMII
...
----------END PUBLIC KEY-----------

Custom ASCII Logo

To use a custom ASCII logo, set the logo_path or ascii field:

{
    "logo_path": "~/.config/xfetch/logos/arch.txt"
}

ASCII logo files are plain text files. ANSI escape codes can be used for coloring:

\x1b[34m    /\            /\
\x1b[34m   /  \          /  \
\x1b[34m  /\   \        /   /\
\x1b[34m /  \   \      /   /  \
\x1b[34m/   /\   \    /   /\   \
\x1b[34m   /  \   \  /   /  \
\x1b[34m  /    \   \/   /    \
\x1b[34m /______\      /______\
\x1b[0m

Sample logos are included in the xfetch installation at ~/.config/xfetch/logos/:

FileDescription
arch.txtBlue ASCII Arch Linux logo (7 lines)
x_logo.txtCyan-to-green gradient "X" shape (9 lines)
minimal.txtA simple [ xfetch ] label (1 line)

Image Logos

xfetch can render PNG, JPG, and SVG images as logos using the viuer library. This requires terminal support for image display (iTerm2, Kitty, or Sixel-compatible terminals):

{
    "logo_path": "~/.config/xfetch/logos/my-logo.png"
}

Image rendering uses the terminal's native image protocol:

  • iTerm2: inline image protocol
  • Kitty: Kitty's native image protocol
  • Sixel: Sixel graphics (compatible terminals like xterm, mlterm)

If the terminal does not support image display, xfetch falls back to ASCII.

Logo Animation

ASCII logos can be animated using the animate-logo plugin. Animation styles transform the logo with color effects over time.

Configuration

{
    "logo_animation": {
        "plugin": "animate-logo",
        "fps": 12,
        "duration_ms": 1200,
        "loop": false,
        "style": "sweep"
    }
}

Animation Styles

StyleDescription
sweepColors sweep left-to-right using a 6-color ANSI palette (red, green, yellow, blue, magenta, cyan)
waveSine-wave color pattern moves across the logo
rainbowFull RGB gradient shifts over the logo using interpolated 24-bit color
sparkleRandom characters briefly light up in bright colors
breathingAll characters pulse in warm amber tones (sine-based brightness)
frameCycles through pre-loaded ASCII frame sets from a frames file
noneStatic display, no color transformation

Frame-Based Animation

The frame style cycles through pre-defined ASCII frame sets. Frame sets are loaded from a file specified in frames_path:

{
    "logo_animation": {
        "plugin": "animate-logo",
        "style": "frame",
        "fps": 60,
        "duration_ms": 7500,
        "loop": true,
        "frames_path": "~/.config/xfetch/logos/frames.txt"
    }
}

The frames file format uses === as a separator between frame sets:

frame 1 line 1
frame 1 line 2

===

frame 2 line 1
frame 2 line 2

===

frame 3 line 1
frame 3 line 2

Icons

Every module can have a custom icon. Icons are configured in the icons object of the configuration file:

{
    "icons": {
        "os": "\u2302",
        "kernel": "\u2699",
        "hostname": "\u2394",
        "cpu": "\u269b",
        "gpu": "\u26a1",
        "memory": "\u2261",
        "disk": "\u2b23",
        "battery": "\u26a1",
        "uptime": "\u23f1",
        "packages": "\u2b1a",
        "shell": "\u276f",
        "terminal": "\u2b21",
        "wm": "\u25c6",
        "user": "\u263a",
        "datetime": "\u23f0",
        "local_ip": "\u25c9",
        "palette": "\u2588",
        "plugin:<name>": "\u25c8"
    }
}

Icons can be:

  • Nerd Font glyphs: Unicode characters from the Nerd Fonts patched font set
  • Unicode symbols: Standard Unicode characters
  • Text strings: Any short text (e.g., ">>", "+", "OS:")
  • Empty string: To hide the icon entirely

Default Icons

If not specified in the configuration, xfetch uses built-in default icon mappings for all standard modules.

Colors

Module colors are configured in the colors object:

{
    "colors": {
        "os": "Cyan",
        "kernel": "White",
        "hostname": "Green",
        "cpu": "Green",
        "gpu": "Green",
        "memory": "Green",
        "disk": "Green",
        "battery": "Green",
        "uptime": "Yellow",
        "packages": "Yellow",
        "shell": "Green",
        "terminal": "Green",
        "wm": "Blue",
        "user": "Magenta",
        "datetime": "Magenta",
        "local_ip": "Yellow",
        "palette": "Magenta"
    }
}

Available Colors

NameANSI CodeDescription
Black30Standard black
Red31Standard red
Green32Standard green
Yellow33Standard yellow
Blue34Standard blue
Magenta35Standard magenta
Cyan36Standard cyan
White37Standard white
Grey / Gray90Bright black

Color Modes

Color output can be disabled entirely:

{
    "show_colors": false
}

Palette Display

The palette module renders an ANSI color swatch. The style is controlled by the palette_style field:

{
    "palette_style": "squares"
}

Palette Styles

StylePreview
squaresFilled background color blocks
circlesColored circle symbols
trianglesColored triangle symbols
linesThick horizontal color bars
dotsSmall colored dots

The palette displays 8 colors matching the ANSI standard palette: Black, Red, Green, Yellow, Blue, Magenta, Cyan, White.

Preset Configurations

xfetch ships with numerous preset configurations demonstrating different visual styles.

Showcase Presets (23 examples)

Located in configs/xfetch/presets/showcase/, these presets demonstrate various icon, color, and logo combinations:

PresetLayoutKey Features
arch_compact_cyan.jsoncclassicArch logo, all Cyan
arch_full_blue.jsoncclassicArch logo, all Blue
green_chevrons_core.jsoncclassic>> icons, all Green
minimal_plus_monochrome.jsoncclassicMinimal logo, + icons, DarkGrey
minimal_red_compact.jsoncclassicText icons like "OS:", all Red
monochrome_no_icons.jsoncclassicNo icons, all White
neon_hardware_compact.jsoncclassicCyan+Magenta neon theme
rainbow_letters.jsoncclassicR-O-Y-G-B-I-V icons, rainbow colors
x_logo_full_system.jsoncclassicX logo, rainbow coloring
x_logo_red_hardware.jsoncclassicX logo, dot icons, all Red
pacman_full_white.jsoncpacmanX logo, mostly White
pacman_system_compact.jsoncpacman3 modules, Cyan
pacman_abc_shell.jsoncpacmanA-B-C header
pacman_minus_uptime.jsoncpacmanMinus sign header
pacman_numeric_hardware.jsoncpacman1-2-3 header
pacman_plus_os.jsoncpacmanPlus sign header
pacman_question_packages.jsoncpacmanQuestion mark header
pacman_star_uptime.jsoncpacmanStar header
pacman_symbols_portable.jsoncpacman!-@-# header
pacman_xox_kernel.jsoncpacmanX-O-X header
pacman_palette_dots.jsoncpacmanDots palette style
pacman_palette_lines.jsoncpacmanLines palette style
pacman_palette_triangles.jsoncpacmanTriangles palette style

Layout Presets (6 examples)

Located in configs/xfetch/presets/layouts/:

PresetLayoutNotes
layout_box_full.jsoncboxFull module set with sep separators
layout_dots_full.jsoncdotsColored module groups
layout_pacman_full.jsoncpacmanPac-Man icons and "GAME OVER" footer
layout_section.jsoncsectionThree groups: Hardware, Software, Session
layout_side_block.jsoncside-blockText labels as icons
layout_tree.jsonctreeNested OS/DE/PC groups

Using Presets

# Run with a specific preset
xfetch --config /path/to/presets/showcase/arch_compact_cyan.jsonc

Or copy a preset to use as your default:

cp configs/xfetch/presets/showcase/neon_hardware_compact.jsonc ~/.config/xfetch/config.jsonc