xfetch offers extensive visual customization through logos, icons, colors, and animation effects. All customization is configured in the JSONC configuration file.
xfetch supports three types of logos: ASCII art, image files, and the built-in default.
When no custom logo is specified, xfetch displays its built-in ASCII art:
__ __
\ \/ /
\ /
/ \
/_/\_\
/____/linux
---------BEGIN PUBLIC KEY----------
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMII
...
----------END PUBLIC KEY-----------
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/:
| File | Description |
|---|---|
arch.txt | Blue ASCII Arch Linux logo (7 lines) |
x_logo.txt | Cyan-to-green gradient "X" shape (9 lines) |
minimal.txt | A simple [ xfetch ] label (1 line) |
| Field | Type | Default | Description |
|---|---|---|---|
logo_color | string | none | Color applied to the ASCII logo. Accepts names ("Cyan"), 256-color indexes ("196") and hex RGB ("#FF0000"). Also applies to animated logos; lines that already contain ANSI codes are left untouched. |
logo_padding | number | 0 | Leading spaces added before the logo (and its frames when animated). |
logo_type | string | "auto" | "auto" detects by file extension, "ascii" forces text rendering, "image" forces image rendering. |
{
"ascii": "~/.config/xfetch/logos/arch.txt",
"logo_color": "#00FF87",
"logo_padding": 2
}
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:
If the terminal does not support image display, xfetch falls back to ASCII.
Control image dimensions and spacing with these configuration fields:
{
"logo_path": "~/.config/xfetch/images/my-image.png",
"logo_width": 30,
"logo_height": null,
"logo_gap": 5
}
| Field | Default | Description |
|---|---|---|
logo_width | Auto (28% of terminal width, clamped 12–42 cols) | Image width in terminal columns |
logo_height | Auto (aspect-ratio preserved) | Image height in terminal rows |
logo_gap | 12 | Gap in columns between the image and the info text |
The auto-width calculation scales with your terminal: wider terminals get proportionally larger images.
| Field | Default | Description |
|---|---|---|
logo_color | none | Color for ASCII logos (name, hex, or RGB) |
logo_colors | Auto | Per-row colors for ASCII logos (array; row i uses logo_colors[i % len]) |
logo_padding | 0 | Padding around the logo |
logo_type | Auto | Logo type: auto, ascii, or image |
In Kitty terminals, xfetch supports two rendering modes controlled by logo_kitty:
{
"logo_kitty": true
}
| Value | Mode | Description |
|---|---|---|
true (default) | Native protocol | Full-resolution images using Kitty's \x1b_G graphics protocol. Best quality. |
false | Half-block | Images rendered using Unicode half-block characters (▄). Lower vertical resolution but fully compatible with all terminal features. |
Set logo_kitty: false if you experience layout issues with native Kitty rendering (e.g., text overlap or misalignment). The half-block fallback guarantees correct side-by-side layout at the cost of some image fidelity.
ASCII logos can be animated using the animate-logo plugin. Animation styles transform the logo with color effects over time.
{
"logo_animation": {
"plugin": "animate-logo",
"fps": 12,
"duration_ms": 1200,
"loop": false,
"style": "sweep"
}
}
| Style | Description |
|---|---|
sweep | Colors sweep left-to-right using a 6-color ANSI palette (red, green, yellow, blue, magenta, cyan) |
wave | Sine-wave color pattern moves across the logo |
rainbow | Full RGB gradient shifts over the logo using interpolated 24-bit color |
sparkle | Random characters briefly light up in bright colors |
breathing | All characters pulse in warm amber tones (sine-based brightness) |
frame | Cycles through pre-loaded ASCII frame sets from a frames file |
none | Static display, no color transformation |
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
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:
">>", "+", "OS:")If not specified in the configuration, xfetch uses built-in default icon mappings for all standard modules.
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"
}
}
| Name | ANSI Code | Description |
|---|---|---|
Black | 30 | Standard black |
Red | 31 | Standard red |
Green | 32 | Standard green |
Yellow | 33 | Standard yellow |
Blue | 34 | Standard blue |
Magenta | 35 | Standard magenta |
Cyan | 36 | Standard cyan |
White | 37 | Standard white |
Grey / Gray | 90 | Bright black |
Color output can be disabled entirely:
{
"show_colors": false
}
By default xfetch renders each module as icon value. To display the module label as well, enable show_keys; use key_width to pad the labels to a fixed column count so values align vertically.
| Field | Type | Default | Description |
|---|---|---|---|
show_keys | boolean | false | Render key: value in the icon-style layouts (classic, section, compact, custom-x, box variants). |
key_width | number | auto | Pad the key to this many columns before the : separator. Applies wherever keys are shown, including section and minimal. |
{
"show_keys": true,
"key_width": 12
}
Example with show_keys and key_width: 12:
cpu : Apple M4 (10) @ 4.46 GHz
memory : 10.88 GiB / 16.00 GiB (68%)
disk : 152.80 GiB / 931.32 GiB (16%) - apfs
The palette module renders an ANSI color swatch. The style is controlled by the palette_style field:
{
"palette_style": "squares"
}
| Style | Preview |
|---|---|
squares | Filled background color blocks |
circles | Colored circle symbols |
triangles | Colored triangle symbols |
lines | Thick horizontal color bars |
The palette displays 8 colors matching the ANSI standard palette: Black, Red, Green, Yellow, Blue, Magenta, Cyan, White.
labelsThe labels map renames the key shown for any module, in every layout (classic and variants, compact, minimal, section, section-box, tree, custom-x). An empty string hides the key — the row shows icon value only. Modules without an entry keep their name.
{
"labels": {
"cpu": "processor",
"gpu": ""
}
}
formatsThe formats map replaces a module's value with a template. Placeholders {field} are substituted with the module's fields; unknown placeholders render empty, and {{ / }} escape literal braces. Modules without an entry keep their default output.
| Module | Fields | Example |
|---|---|---|
| every module | {value} (current output), {key} (module name) | "os": "System: {value}" |
cpu | {brand} (raw), {model} (cleaned), {cores}, {freq} | "cpu": "{model} · {cores} cores · {freq}" |
gpu | {name}, {vendor}, {model}, {vram} | "gpu": "{vendor} {model}" |
memory, swap | {used}, {total} (with unit), {percent} | "memory": "{used} / {total} ({percent}%)" |
disk | memory fields plus {fs} | "disk": "{used} on {fs}" |
os | {distro}, {version}, {arch}, {wsl} | "os": "{distro} {version} ({arch})" |
packages | one field per manager ({pacman}, {aur}, ...), plus {count}, {manager}, {managers} | "packages": "pkg: {pacman} · aur: {aur}" |
battery | {percent}, {state} | "battery": "{percent}% [{state}]" |
uptime | {days}, {hours}, {mins} | "uptime": "{days}d {hours}h {mins}m" |
datetime | {date}, {time} | `"datetime": "{date} |
For example, Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz (4) @ 3.00 GHz becomes Intel Core i5-7400 with {model}, and NVIDIA GeForce GTX 1060 6GB becomes NVIDIA GTX 1060 with {vendor} {model}.
{
"formats": {
"cpu": "{model} ({cores}) @ {freq}",
"gpu": "{vendor} {model}"
}
}
xfetch ships with numerous preset configurations demonstrating different visual styles.
Located in configs/xfetch/presets/showcase/, these presets demonstrate various icon, color, and logo combinations:
| Preset | Layout | Key Features |
|---|---|---|
arch_compact_cyan.jsonc | classic | Arch logo, all Cyan |
arch_full_blue.jsonc | classic | Arch logo, all Blue |
green_chevrons_core.jsonc | classic | >> icons, all Green |
minimal_plus_monochrome.jsonc | classic | Minimal logo, + icons, Grey |
minimal_red_compact.jsonc | classic | Text icons like "OS:", all Red |
monochrome_no_icons.jsonc | classic | No icons, all White |
neon_hardware_compact.jsonc | classic | Cyan+Magenta neon theme |
rainbow_letters.jsonc | classic | R-O-Y-G-B-I-V icons, rainbow colors |
x_logo_full_system.jsonc | classic | X logo, rainbow coloring |
x_logo_red_hardware.jsonc | classic | X logo, dot icons, all Red |
pacman_full_white.jsonc | pacman | X logo, mostly White |
pacman_system_compact.jsonc | pacman | 3 modules, Cyan |
pacman_abc_shell.jsonc | pacman | A-B-C header |
pacman_minus_uptime.jsonc | pacman | Minus sign header |
pacman_numeric_hardware.jsonc | pacman | 1-2-3 header |
pacman_plus_os.jsonc | pacman | Plus sign header |
pacman_question_packages.jsonc | pacman | Question mark header |
pacman_star_uptime.jsonc | pacman | Star header |
pacman_symbols_portable.jsonc | pacman | !-@-# header |
pacman_xox_kernel.jsonc | pacman | X-O-X header |
pacman_palette_dots.jsonc | pacman | Dots palette style |
pacman_palette_lines.jsonc | pacman | Lines palette style |
pacman_palette_triangles.jsonc | pacman | Triangles palette style |
Located in configs/xfetch/presets/layouts/:
| Preset | Layout | Notes |
|---|---|---|
layout_box_full.jsonc | box | Full module set with sep separators |
layout_dots_full.jsonc | dots | Colored module groups |
layout_pacman_full.jsonc | pacman | Pac-Man icons and "GAME OVER" footer |
layout_section.jsonc | section | Three groups: Hardware, Software, Session |
layout_side_block.jsonc | side-block | Text labels as icons |
layout_tree.jsonc | tree | Nested OS/DE/PC groups |
# 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