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
- tags
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.tomland 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 includabletokyo-night.conftheme.
Prerequisites
Install Kitty and a Nerd Font (the powerline tab bar needs a patched font, or the slanted separators render as tofu):
sudo dnf install -y kitty
# JetBrainsMono Nerd Font (per-user)mkdir -p ~/.local/share/fonts/JetBrainsMonoNerdFont && cd /tmpcurl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zipunzip -o JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMonoNerdFontfc-cache -ffc-list | grep -i "JetBrainsMono Nerd Font" | head # verifySolution
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 Monobold_font autoitalic_font autobold_italic_font autofont_size 12.0
# --- theme ------------------------------------------------------------------include tokyo-night.conf
# --- window -----------------------------------------------------------------background_opacity 0.97window_padding_width 8hide_window_decorations noconfirm_os_window_close 0scrollback_lines 100000enable_audio_bell no
# --- tab bar (native tabs) --------------------------------------------------tab_bar_edge toptab_bar_style powerlinetab_powerline_style slantedtab_bar_min_tabs 1tab_title_template "{index}: {title}"
# --- keybindings (native, no multiplexer) -----------------------------------# Tabsmap ctrl+shift+t new_tab_with_cwdmap ctrl+shift+q close_tabmap ctrl+shift+right next_tabmap ctrl+shift+left previous_tabmap ctrl+shift+. move_tab_forwardmap ctrl+shift+, move_tab_backwardmap ctrl+shift+alt+t set_tab_title
# Splits (kitty calls them "windows" inside a tab; uses the 'splits' layout)enabled_layouts splits,stackmap ctrl+shift+enter launch --location=vsplit --cwd=currentmap ctrl+shift+minus launch --location=hsplit --cwd=currentmap ctrl+shift+h neighboring_window leftmap ctrl+shift+j neighboring_window downmap ctrl+shift+k neighboring_window upmap ctrl+shift+l neighboring_window right
# Font sizemap ctrl+plus change_font_size all +1.0map ctrl+minus change_font_size all -1.0map ctrl+0 change_font_size all 0Step 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 #a9b1d6background #1a1b26selection_foreground #1a1b26selection_background #33467c
cursor #c0caf5cursor_text_color #1a1b26url_color #7dcfff
# normalcolor0 #32344acolor1 #f7768ecolor2 #9ece6acolor3 #e0af68color4 #7aa2f7color5 #ad8ee6color6 #449dabcolor7 #787c99# brightcolor8 #444b6acolor9 #ff7a93color10 #b9f27ccolor11 #ff9e64color12 #7da6ffcolor13 #bb9af7color14 #0db9d7color15 #acb0d0
# tab baractive_tab_foreground #1a1b26active_tab_background #7aa2f7active_tab_font_style boldinactive_tab_foreground #787c99inactive_tab_background #32344ainactive_tab_font_style normal
# window bordersactive_border_color #7aa2f7inactive_border_color #3b4261Step 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:
sudo dnf install -y fastfetchCreate ~/.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:
[[ $- == *i* ]] && command -v fastfetch >/dev/null && fastfetchLogo: on Fedora the
distroline 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 ownml4w.pngis 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 directoryCtrl+Shift+Enter— vertical split,Ctrl+Shift+-— horizontal splitCtrl+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
splitslayout plusnew_tab_with_cwdcover 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_familyinkitty.conf— no terminal-level GUI setting like in Ptyxis. --cwd=currentmakes 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). Set1.0for 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
# installsudo dnf install -y kitty fastfetchmkdir -p ~/.local/share/fonts/JetBrainsMonoNerdFont && cd /tmpcurl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zipunzip -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