# How to Customize Colors and Themes in Fastfetch: Complete Guide

> Easily customize Fastfetch colors and themes. Learn to modify config.jsonc and use command-line flags for personalized output in this complete guide.

- Repository: [fastfetch-cli/fastfetch](https://github.com/fastfetch-cli/fastfetch)
- Tags: how-to-guide
- Published: 2026-03-30

---

**You customize colors in fastfetch by modifying the `display.color` object in your `config.jsonc` file or using `--color-keys` and `--color-output` flags, while per-module overrides use `keyColor` and `outputColor` fields, and the `theme` module displays desktop themes via configurable `format` strings.**

Fastfetch is a system information tool that offers granular control over terminal colors and appearance. According to the fastfetch-cli/fastfetch source code, the application separates color configuration into global display settings and per-module overrides, allowing you to style everything from key names to ASCII logos. Whether you prefer editing JSONC configuration files or using command-line flags, you can customize colors and themes in fastfetch through a well-defined hierarchy defined in [`src/options/display.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.h) and [`src/options/display.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.c).

## Understanding Fastfetch's Color Architecture

Fastfetch implements a two-layer color system that separates global defaults from specific overrides.

### Global Display Settings

The **global display settings** control default colors for keys, values, separators, progress bars, percentages, and temperature readings. These defaults live in the `display` object within your configuration file or via matching `--color-…` command-line flags.

According to [`src/options/display.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.h), the `FFOptionsDisplay` struct stores these values in fields like `colorKeys`, `colorOutput`, `barColor`, `percentColor`, and `tempColor`. When fastfetch renders output, it injects ANSI escape codes based on these settings using the `ffOptionParseColor` function.

### Per-Module Overrides

You can override global colors for individual modules using **per-module overrides**. Each module definition supports `keyColor`, `outputColor`, and `keyIcon` fields that temporarily replace global colors during rendering.

The **Theme** module functions differently—it displays custom text defined by the `themeFormat` string, which can include placeholders like `{gtk}` or `{qt}` for desktop environment themes.

## Where Colors Are Parsed in the Source Code

The color parsing pipeline involves several key components:

- **[`src/options/display.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.c)**: Contains `ffOptionsParseDisplayJsonConfig` which walks the `display` object using `yyjson_obj_foreach` (around lines 22-70) and populates the `FFOptionsDisplay` struct
- **[`common/color.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/common/color.h)**: Defines macros for color codes and ANSI escape sequences
- **`ffOptionParseColor`**: Called from [`src/options/display.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.c) (lines 46-66) to parse color strings like `"red"` or `"bright_blue"`
- **[`src/options/logo.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/logo.c)**: Handles `--logo-color-N` flags for ASCII logo customization

When fastfetch reads `~/.config/fastfetch/config.jsonc`, it validates against the schema in [`doc/json_schema.json`](https://github.com/fastfetch-cli/fastfetch/blob/main/doc/json_schema.json) before applying color settings.

## Configuration Methods

### JSONC Configuration File

Fastfetch reads configuration from `~/.config/fastfetch/config.jsonc` (JSON with Comments). The `display.color` object supports keys, output, separator, and other elements:

```jsonc
{
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
    "display": {
        "color": {
            "keys": "bright_cyan",
            "output": "bright_yellow",
            "separator": "dim"
        },
        "brightColor": true
    },
    "modules": [
        "title",
        {
            "type": "os",
            "keyColor": "magenta"
        }
    ]
}

```

In this example, `display.color` sets global defaults while the `os` module uses `keyColor` to override only its key color to magenta.

### Command-Line Flags

For temporary changes without editing files, use these flags:

- **`--color-keys`**: Set default color for module keys (labels)
- **`--color-output`**: Set default color for module values (data)
- **`--key-color`**: Override key color for the next module
- **`--output-color`**: Override output color for the next module
- **`--logo-color-1`, `--logo-color-2`**: Set colors for ASCII logo placeholders

Example overriding specific modules:

```bash
fastfetch --color-keys bright_green \
          --color-output bright_white \
          -M os --key-color red \
          -M theme --format "{theme}"

```

## Practical Color Customization Examples

### Global Color Configuration

Set comprehensive color defaults for all modules:

```jsonc
{
    "display": {
        "color": {
            "keys": "bright_blue",
            "output": "white",
            "separator": "dim",
            "title": "bright_magenta"
        },
        "brightColor": true
    }
}

```

This configuration applies to every module unless overridden individually.

### Module-Specific Color Overrides

Target specific modules while keeping global defaults for others:

```jsonc
{
    "modules": [
        {
            "type": "cpu",
            "keyColor": "bright_red",
            "outputColor": "yellow"
        },
        {
            "type": "memory",
            "keyColor": "green"
        }
    ]
}

```

The `cpu` module uses bright red keys and yellow output, while `memory` uses green keys but inherits the global output color.

### ASCII Logo Colors

Customize logo colors using placeholders that map to `--logo-color` flags:

```bash
fastfetch --logo-color-1 bright_red \
          --logo-color-2 bright_blue \
          --logo-color-3 green

```

In custom logos, these correspond to `{{color1}}`, `{{color2}}`, and `{{color3}}` placeholders as defined in [`src/options/logo.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/logo.h).

### Theme Module Customization

The `theme` module displays desktop environment themes using format strings:

```jsonc
{
    "modules": [
        "title",
        {
            "type": "theme",
            "format": "GTK: {gtk} | Qt: {qt} | Icon: {icon}"
        }
    ]
}

```

Fastfetch replaces `{gtk}`, `{qt}`, and `{icon}` with detected theme names, applying your global `outputColor` or specific `outputColor` if set.

## Key Source Files Reference

| File | Purpose |
|------|---------|
| [`src/options/display.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.h) | Declares `FFOptionsDisplay` struct with color fields |
| [`src/options/display.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.c) | Parses `display.*` from JSONC and command-line arguments |
| [`src/options/logo.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/logo.h) | Defines color placeholders for ASCII art |
| [`doc/json_schema.json`](https://github.com/fastfetch-cli/fastfetch/blob/main/doc/json_schema.json) | Documents `keyColor`, `outputColor`, and `themeFormat` schemas |
| `presets/neofetch.jsonc` | Example configuration showing color implementation |

## Summary

- **Fastfetch** uses a hierarchical color system with global defaults in `display.color` and per-module overrides via `keyColor`/`outputColor`
- **Configuration** happens in `~/.config/fastfetch/config.jsonc` or via `--color-…` flags, parsed by `ffOptionsParseDisplayJsonConfig` in [`src/options/display.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.c)
- **Global colors** affect all modules unless overridden: `keys`, `output`, `separator`, `bar`, `percent`, and `temp`
- **Module colors** apply only to specific instances using `keyColor` and `outputColor` fields
- **Logo colors** use `--logo-color-N` flags mapped to `{{colorN}}` placeholders in ASCII art
- **Theme module** displays desktop themes through customizable `format` strings with placeholders like `{gtk}` and `{qt}`

## Frequently Asked Questions

### How do I change colors for just one module without affecting the rest?

Use the `keyColor` and `outputColor` fields inside that specific module's configuration. According to [`doc/json_schema.json`](https://github.com/fastfetch-cli/fastfetch/blob/main/doc/json_schema.json), these fields override the global `display.color` settings only for that module instance. For command-line use, place `--key-color` or `--output-color` immediately after the `-M <module>` flag to target that specific module.

### Can I use hex color codes or only named colors?

The `ffOptionParseColor` function in [`src/options/display.c`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.c) primarily handles named colors like `"red"`, `"bright_blue"`, and `"dim"`. While the source shows support for standard ANSI color names, hex codes depend on your terminal's support for truecolor sequences. Check the [`common/color.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/common/color.h) file for the specific color macros supported in your version.

### What's the difference between the Theme module and color themes?

The **Theme module** is a specific fastfetch module that displays your desktop environment's GTK, Qt, or icon theme names using the `themeFormat` field. It does not change fastfetch's colors. **Color themes** refer to the ANSI color configuration via `display.color` settings that control how text appears in your terminal output.

### Where does fastfetch store its color configuration?

Fastfetch reads colors from `~/.config/fastfetch/config.jsonc` (or `$XDG_CONFIG_HOME/fastfetch/config.jsonc`). The `display` object in this file maps directly to the `FFOptionsDisplay` struct defined in [`src/options/display.h`](https://github.com/fastfetch-cli/fastfetch/blob/main/src/options/display.h). Command-line flags override file settings for that specific execution.