Skip to content

Global default style as a theme/flavor option #2791

@zane-weissman

Description

@zane-weissman

yazi --debug output

Yazi
    Version: 25.4.8 (Nixpkgs 2025-04-08)
    Debug  : false
    Triple : x86_64-unknown-linux-gnu (linux-x86_64)
    Rustc  : 1.86.0 (05f9846f 2025-03-31)

Ya
    Version: 25.4.8 (Nixpkgs 2025-04-08)

Emulator
    TERM                : Some("foot")
    TERM_PROGRAM        : None
    TERM_PROGRAM_VERSION: None
    Brand.from_env      : Some(Foot)
    Emulator.detect     : Emulator { kind: Left(Foot), light: false, cell_size: Some((14, 37)) }

Adapter
    Adapter.matches    : Sixel
    Dimension.available: WindowSize { rows: 49, columns: 97, width: 1358, height: 1813 }

Desktop
    XDG_SESSION_TYPE           : Some("wayland")
    WAYLAND_DISPLAY            : Some("wayland-1")
    DISPLAY                    : None
    SWAYSOCK                   : None
    HYPRLAND_INSTANCE_SIGNATURE: None
    WAYFIRE_SOCKET             : None

SSH
    shared.in_ssh_connection: false

WSL
    WSL: false

Variables
    SHELL           : Some("/run/current-system/sw/bin/fish")
    EDITOR          : Some("nvim")
    VISUAL          : None
    YAZI_FILE_ONE   : None
    YAZI_CONFIG_HOME: None
    YAZI_ZOXIDE_OPTS: None
    FZF_DEFAULT_OPTS: None

Text Opener
    default     : Some(OpenerRule { run: "${EDITOR:-vi} \"$@\"", block: true, orphan: false, desc: "$EDITOR", for_: None, spread: true })
    block-create: Some(OpenerRule { run: "${EDITOR:-vi} \"$@\"", block: true, orphan: false, desc: "$EDITOR", for_: None, spread: true })
    block-rename: Some(OpenerRule { run: "${EDITOR:-vi} \"$@\"", block: true, orphan: false, desc: "$EDITOR", for_: None, spread: true })

Multiplexers
    TMUX               : false
    tmux version       : No such file or directory (os error 2)
    tmux build flags   : enable-sixel=Unknown
    ZELLIJ_SESSION_NAME: None
    Zellij version     : No such file or directory (os error 2)

Dependencies
    file          : 5.46
    ueberzugpp    : No such file or directory (os error 2)
    ffmpeg/ffprobe: 7.1.1 / 7.1.1
    pdftoppm      : 24.02.0
    magick        : 7.1.1-47
    fzf           : 0.61.3
    fd/fdfind     : 10.2.0 / No such file or directory (os error 2)
    rg            : 14.1.1
    chafa         : 1.14.5
    zoxide        : 0.9.7
    7zz/7z        : 24.09 / No such file or directory (os error 2)
    jq            : 1.7.1

Clipboard
    wl-copy/paste: 2.2.1 / 2.2.1
    xclip        : No such file or directory (os error 2)
    xsel         : No such file or directory (os error 2)

Routine
    `file -bL --mime-type`: text/plain


See https://yazi-rs.github.io/docs/plugins/overview#debugging on how to enable logging or debug runtime errors.

Please describe the problem you're trying to solve

I like to use different color schemes for different CLI applications (shell, editor, etc.) so I can identify them more quickly when navigating through windows in a tiling window manager. The different background colors are the best way to quickly identify the application. Background colors can be set for specific parts of the UI, but not for empty space or elements that don't have specifically set background colors.

A global style option would solve this problem and could also simplify other themes that use the same text colors in multiple places.

Would you be willing to contribute this feature?

  • Yes, I'll give it a shot

Describe the solution you'd like

A new option for theme.toml (or flavor.toml inside of flavors) that sets the default background color. This could also include a default foreground color and all of the other style options. Configuration in theme.toml could look like:

[default]
fg = "#123456"
bg = #654321"
...

or perhaps

[manager]
default = {fg = "#123456", bg = #654321", ...}

Additional context

I'm willing to take a shot at this, but I haven't looked through the code base thoroughly yet. I would greatly appreciate any tips about what the process of adding a style option looks like!

Also, any thoughts/discussion about how the configuration should be formatted or how it would work with existing options is welcome. This option would necessarily be different from the existing options in a pretty significant way.

Checklist

  • I have searched the existing issues/discussions
  • The latest nightly build doesn't already have this feature

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions