An ML4W-style Kitty config on Fedora: native tabs, splits, and Tokyo Night

Published 19 July 2026

date
env
linux Fedora 44 (GNOME 50 / Wayland) — Framework Laptop 16 macos N/A — config is portable, but paths/install differ on macOS

ML4W (My Linux for Work) is Stephan Raabe’s polished Hyprland dotfiles set, and its default terminal is Kitty. The thing that makes it feel good isn’t Hyprland-specific — it’s Kitty’s own native tabs and splits, a powerline tab bar, a Nerd Font, and the Tokyo Night palette. All of that is shell/terminal-side, so you can have the exact same experience on a plain Fedora GNOME desktop without running Hyprland, and without tmux.

This HOWTO reproduces that setup as two small config files.

Companion prompt: Kitty pairs perfectly with a Starship prompt. See Give Ptyxis a Starship powerline prompt with a Tux logo — the same starship.toml and shell init work verbatim in Kitty.

Environment: Fedora 44, GNOME 50 on Wayland, zsh login shell.


Goal

  • Kitty as a standalone terminal on Fedora GNOME (not inside Hyprland).
  • Native tabs + splits with ergonomic keybindings — no tmux multiplexer.
  • Powerline (slanted) tab bar, JetBrainsMono Nerd Font, Tokyo Night theme.
  • The Fastfetch system-info greeting (with a logo) on every new terminal, like ML4W.
  • Config split into kitty.conf + an includable tokyo-night.conf theme.

Prerequisites

Install Kitty and a Nerd Font (the powerline tab bar needs a patched font, or the slanted separators render as tofu):

Terminal window
sudo dnf install -y kitty
# JetBrainsMono Nerd Font (per-user)
mkdir -p ~/.local/share/fonts/JetBrainsMonoNerdFont && cd /tmp
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip -o JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMonoNerdFont
fc-cache -f
fc-list | grep -i "JetBrainsMono Nerd Font" | head # verify

Solution

Step 1 — The main config: ~/.config/kitty/kitty.conf

Native tabs and splits replace tmux; the tab bar is powerline/slanted; the theme is pulled in with an include.

# Kitty configuration — Fedora 44 / GNOME 50.
# Native tabs + splits (no tmux needed). Prompt is Starship (Tokyo Night preset).
# --- font -------------------------------------------------------------------
font_family JetBrainsMono Nerd Font Mono
bold_font auto
italic_font auto
bold_italic_font auto
font_size 12.0
# --- theme ------------------------------------------------------------------
include tokyo-night.conf
# --- window -----------------------------------------------------------------
background_opacity 0.97
window_padding_width 8
hide_window_decorations no
confirm_os_window_close 0
scrollback_lines 100000
enable_audio_bell no
# --- tab bar (native tabs) --------------------------------------------------
tab_bar_edge top
tab_bar_style powerline
tab_powerline_style slanted
tab_bar_min_tabs 1
tab_title_template "{index}: {title}"
# --- keybindings (native, no multiplexer) -----------------------------------
# Tabs
map ctrl+shift+t new_tab_with_cwd
map ctrl+shift+q close_tab
map ctrl+shift+right next_tab
map ctrl+shift+left previous_tab
map ctrl+shift+. move_tab_forward
map ctrl+shift+, move_tab_backward
map ctrl+shift+alt+t set_tab_title
# Splits (kitty calls them "windows" inside a tab; uses the 'splits' layout)
enabled_layouts splits,stack
map ctrl+shift+enter launch --location=vsplit --cwd=current
map ctrl+shift+minus launch --location=hsplit --cwd=current
map ctrl+shift+h neighboring_window left
map ctrl+shift+j neighboring_window down
map ctrl+shift+k neighboring_window up
map ctrl+shift+l neighboring_window right
# Font size
map ctrl+plus change_font_size all +1.0
map ctrl+minus change_font_size all -1.0
map ctrl+0 change_font_size all 0

Step 2 — The theme: ~/.config/kitty/tokyo-night.conf

Tokyo Night, translated to Kitty’s color keys — the same palette ML4W uses across its terminals:

# Tokyo Night — same palette as the Alacritty theme, translated to kitty.
foreground #a9b1d6
background #1a1b26
selection_foreground #1a1b26
selection_background #33467c
cursor #c0caf5
cursor_text_color #1a1b26
url_color #7dcfff
# normal
color0 #32344a
color1 #f7768e
color2 #9ece6a
color3 #e0af68
color4 #7aa2f7
color5 #ad8ee6
color6 #449dab
color7 #787c99
# bright
color8 #444b6a
color9 #ff7a93
color10 #b9f27c
color11 #ff9e64
color12 #7da6ff
color13 #bb9af7
color14 #0db9d7
color15 #acb0d0
# tab bar
active_tab_foreground #1a1b26
active_tab_background #7aa2f7
active_tab_font_style bold
inactive_tab_foreground #787c99
inactive_tab_background #32344a
inactive_tab_font_style normal
# window borders
active_border_color #7aa2f7
inactive_border_color #3b4261

Step 3 — The ML4W greeting: Fastfetch on launch

The panel ML4W shows when a terminal opens — user, host, OS age, uptime, distro, kernel, wm, term, shell, cpu, disk, memory, and a color-swatch row, drawn next to a logo — is Fastfetch run from the shell startup file. Install it:

Terminal window
sudo dnf install -y fastfetch

Create ~/.config/fastfetch/config.jsonc. This mirrors ML4W’s layout (a boxed panel with Nerd Font icons; {#34} is a color code, so a Nerd Font is required):

// ML4W-style Fastfetch — inspired by Catnap.
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
// Point this at YOUR OWN image (PNG). ML4W ships its own ml4w.png — supply
// your own logo, or drop the "source" line to use the built-in distro logo.
"source": "~/.config/fastfetch/logo.png",
"type": "auto", // 'kitty' graphics in Kitty; 'auto' picks the best protocol
"width": 12,
"padding": { "top": 1, "right": 4, "left": 3 }
},
"display": { "separator": " " },
"modules": [
{ "key": "╭───────────╮", "type": "custom" },
{ "key": "│ {#34} user {#keys}│", "type": "title", "format": "{user-name}" },
{ "key": "│ {#34}󰇅 hname {#keys}│", "type": "title", "format": "{host-name}" },
{
"type": "command",
"key": "│ {#34}󱦟 os age {#keys}│",
"keyColor": "magenta",
"text": "printf \"\\e[0m%s days\\e[0m\" \"$(( ($(date +%s) - $(stat -c %W /)) / 86400 ))\""
},
{ "key": "│ {#34}󰅐 uptime {#keys}│", "type": "uptime" },
{ "key": "│ {#34}{icon} distro {#keys}│", "type": "os" },
{ "key": "│ {#34} kernel {#keys}│", "type": "kernel" },
{ "key": "│ {#34} wm {#keys}│", "type": "wm" },
{ "key": "│ {#34}󰇄 desktop {#keys}│", "type": "de" },
{ "key": "│ {#34} term {#keys}│", "type": "terminal" },
{ "key": "│ {#34} shell {#keys}│", "type": "shell" },
{ "key": "│ {#34}󰍛 cpu {#keys}│", "type": "cpu", "showPeCoreCount": true },
{ "key": "│ {#34}󰉉 disk {#keys}│", "type": "disk", "folders": "/" },
{ "key": "│ {#34} memory {#keys}│", "type": "memory" },
{ "key": "├───────────┤", "type": "custom" },
{ "key": "│ {#34} colors {#keys}│", "type": "colors", "symbol": "circle" },
{ "key": "╰───────────╯", "type": "custom" }
]
}

Test it once: fastfetch. Then run it on every interactive shell — append to your rc (zsh here; use ~/.bashrc for bash). The guard stops it firing in scripts and non-interactive shells:

~/.zshrc
[[ $- == *i* ]] && command -v fastfetch >/dev/null && fastfetch

Logo: on Fedora the distro line shows Tux/Fedora automatically. For the big side logo, put any PNG at ~/.config/fastfetch/logo.png. To skip an image entirely and use Fastfetch’s built-in ASCII distro logo, delete the whole "logo" block. ML4W’s own ml4w.png is their asset — use your own artwork.

Step 4 — Reload and try it

Kitty reloads config on launch; open a fresh window. Then exercise the workflow:

  • Ctrl+Shift+T — new tab in the current directory
  • Ctrl+Shift+Enter — vertical split, Ctrl+Shift+- — horizontal split
  • Ctrl+Shift+H/J/K/L — move between splits (Vim directions)
  • Ctrl+Shift+←/→ — switch tabs

You can also live-reload without restarting: Ctrl+Shift+F5.

Notes and good practices

  • No tmux needed. Kitty’s splits layout plus new_tab_with_cwd cover the 90% case tmux is usually used for locally. Keep tmux only if you need detachable sessions on remote hosts.
  • Nerd Font is required for the tab bar. With a non-patched font, the slanted powerline separators show as boxes. The font is set by font_family in kitty.conf — no terminal-level GUI setting like in Ptyxis.
  • --cwd=current makes new splits/tabs inherit the current directory — the small ergonomic detail that makes it feel like ML4W.
  • Set Kitty as the GNOME default (optional):
    Terminal window
    xdg-settings set default-terminal-emulator kitty.desktop
    # GNOME "open terminal here" (Nautilus) may need nautilus-open-any-terminal:
    # sudo dnf install -y nautilus-open-any-terminal && \
    # gsettings set com.github.stunkymonkey.nautilus-open-any-terminal terminal kitty
  • Opacity is 0.97 (subtle). Set 1.0 for fully opaque, or lower for more transparency — Wayland/GNOME honors it.
  • Portable. Both files are plain Kitty config; copy them to any distro. Only the install command and font path differ.

Quick reference

Terminal window
# install
sudo dnf install -y kitty fastfetch
mkdir -p ~/.local/share/fonts/JetBrainsMonoNerdFont && cd /tmp
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip -o JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMonoNerdFont && fc-cache -f
# config (three files)
mkdir -p ~/.config/kitty ~/.config/fastfetch
$EDITOR ~/.config/kitty/kitty.conf # main config (font, tabs, splits, keys)
$EDITOR ~/.config/kitty/tokyo-night.conf # theme, pulled in via: include tokyo-night.conf
$EDITOR ~/.config/fastfetch/config.jsonc # ML4W-style greeting panel
# greeting on interactive shells (zsh; use ~/.bashrc for bash)
echo '[[ $- == *i* ]] && command -v fastfetch >/dev/null && fastfetch' >> ~/.zshrc
# keys: Ctrl+Shift+T new tab · Ctrl+Shift+Enter vsplit · Ctrl+Shift+- hsplit
# Ctrl+Shift+H/J/K/L move between splits · Ctrl+Shift+F5 reload config
# make kitty the default terminal (optional)
xdg-settings set default-terminal-emulator kitty.desktop