Skip to content

Instantly share code, notes, and snippets.

@ibnsamy96
Last active May 24, 2026 17:47
Show Gist options
  • Select an option

  • Save ibnsamy96/ff427cb712e90174254e46a9a2f9a4cf to your computer and use it in GitHub Desktop.

Select an option

Save ibnsamy96/ff427cb712e90174254e46a9a2f9a4cf to your computer and use it in GitHub Desktop.
  1. Download wezterm https://wezterm.org/install/linux.html#__tabbed_1_3

  2. Download and install the needed fonts

    mkdir -p ~/.local/share/fonts
    cd ~/.local/share/fonts
    wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraCode.zip
    unzip FiraCode.zip
    fc-cache -fv
  3. Create a file a file ~/.wezterm.lua

  4. Fill the file content:

    local wezterm = require("wezterm")
    local config = wezterm.config_builder()
    
    -- ─── Font ────────────────────────────────────────────────────────────────────
    
    config.font = wezterm.font("FiraCode Nerd Font", { weight = "Regular" })
    config.font_size = 13.5
    config.line_height = 1.3
    config.cell_width = 1.0
    
    config.font_rules = {
      {
        italic = true,
        font = wezterm.font("FiraCode Nerd Font", { weight = "Regular", italic = true }),
      },
      {
        intensity = "Bold",
        font = wezterm.font("FiraCode Nerd Font", { weight = "Medium" }),
      },
    }
    
    -- Enable FiraCode ligatures
    config.harfbuzz_features = { "calt=1", "clig=1", "liga=1", "ss01", "ss02", "ss03", "ss05", "ss06" }
    
    -- ─── Colors ──────────────────────────────────────────────────────────────────
    
    local bg          = "#0f1117"
    local bg_alt      = "#161b22"
    local surface     = "#1c2128"
    local border      = "#30363d"
    local muted       = "#484f58"
    local subtle      = "#8b949e"
    local text        = "#cdd9e5"
    local bright_text = "#e6edf3"
    local accent      = "#58a6ff"
    local accent_dim  = "#1f4070"
    local green       = "#3fb950"
    local amber       = "#d29922"
    local red         = "#f85149"
    local purple      = "#bc8cff"
    
    config.colors = {
      foreground    = text,
      background    = bg,
      cursor_bg     = accent,
      cursor_fg     = bg,
      cursor_border = accent,
      selection_fg  = bright_text,
      selection_bg  = accent_dim,
    
      ansi = {
        "#21262d", -- black
        red,       -- red
        green,     -- green
        amber,     -- yellow
        accent,    -- blue
        purple,    -- magenta
        "#39c5cf", -- cyan
        subtle,    -- white
      },
      brights = {
        muted,       -- bright black
        "#ff7b72",   -- bright red
        "#56d364",   -- bright green
        "#e3b341",   -- bright yellow
        "#79c0ff",   -- bright blue
        "#d2a8ff",   -- bright magenta
        "#56d4dd",   -- bright cyan
        bright_text, -- bright white
      },
    
      tab_bar = {
        background = bg,
        active_tab = {
          bg_color  = surface,
          fg_color  = bright_text,
          intensity = "Normal",
          underline = "None",
          italic    = false,
          strikethrough = false,
        },
        inactive_tab = {
          bg_color = bg,
          fg_color = muted,
        },
        inactive_tab_hover = {
          bg_color = bg_alt,
          fg_color = subtle,
          italic   = false,
        },
        new_tab = {
          bg_color = bg,
          fg_color = muted,
        },
        new_tab_hover = {
          bg_color = bg_alt,
          fg_color = subtle,
        },
      },
    }
    
    -- ─── Window ───────────────────────────────────────────────────────────────────
    
    config.window_background_opacity   = 0.97
    config.window_decorations           = "INTEGRATED_BUTTONS|RESIZE"
    config.window_padding               = { left = 14, right = 14, top = 10, bottom = 8 }
    config.scrollback_lines             = 10000
    config.enable_scroll_bar            = true
    config.initial_cols = 100
    config.initial_rows = 20
    
    -- Subtle inactive pane dimming
    config.inactive_pane_hsb = {
      saturation = 0.8,
      brightness = 0.65,
    }
    
    -- ─── Tab Bar ─────────────────────────────────────────────────────────────────
    
    config.use_fancy_tab_bar       = false
    config.tab_bar_at_bottom       = false
    config.hide_tab_bar_if_only_one_tab = false
    config.show_tab_index_in_tab_bar    = false
    config.tab_max_width                = 36   -- wider tabs
    
    config.window_frame = {
      font      = wezterm.font("FiraCode Nerd Font", { weight = "Regular" }),
      font_size = 12.5,
      active_titlebar_bg   = bg,
      inactive_titlebar_bg = bg,
    }
    
    -- Custom tab title: icon + process name + optional activity dot
    wezterm.on("format-tab-title", function(tab, tabs, panes, cfg, hover, max_width)
      local pane  = tab.active_pane
      local title = pane.title
    
      -- Trim to a clean process name
      title = title:gsub("%.exe$", "")
      title = title:match("([^/\\]+)$") or title
      if #title > 20 then title = title:sub(1, 19) .. "…" end
    
      local is_active = tab.is_active
    
      local left_sep  = ""
      local right_sep = ""
    
      if is_active then
        return {
          { Background = { Color = bg } },
          { Foreground = { Color = surface } },
          { Text = left_sep },
          { Background = { Color = surface } },
          { Foreground = { Color = accent } },
          { Text = "     " .. title .. "     " },
          { Background = { Color = bg } },
          { Foreground = { Color = surface } },
          { Text = right_sep },
        }
      else
        return {
          { Background = { Color = bg } },
          { Foreground = { Color = muted } },
          { Text = "     " .. title .. "     " },
        }
      end
    end)
    
    -- ─── Cursor ───────────────────────────────────────────────────────────────────
    
    config.default_cursor_style     = "BlinkingBar"
    config.cursor_blink_rate        = 500
    config.cursor_blink_ease_in     = "Constant"
    config.cursor_blink_ease_out    = "Constant"
    
    -- ─── Keys ────────────────────────────────────────────────────────────────────
    
    config.keys = {
      -- Split panes
      { key = "d",          mods = "CMD",       action = wezterm.action.SplitHorizontal { domain = "CurrentPaneDomain" } },
      { key = "d",          mods = "CMD|SHIFT", action = wezterm.action.SplitVertical   { domain = "CurrentPaneDomain" } },
      -- Navigate panes
      { key = "LeftArrow",  mods = "CMD|OPT",   action = wezterm.action.ActivatePaneDirection("Left")  },
      { key = "RightArrow", mods = "CMD|OPT",   action = wezterm.action.ActivatePaneDirection("Right") },
      { key = "UpArrow",    mods = "CMD|OPT",   action = wezterm.action.ActivatePaneDirection("Up")    },
      { key = "DownArrow",  mods = "CMD|OPT",   action = wezterm.action.ActivatePaneDirection("Down")  },
      -- Tabs
      { key = "t",          mods = "CMD",       action = wezterm.action.SpawnTab("CurrentPaneDomain")  },
      { key = "w",          mods = "CMD",       action = wezterm.action.CloseCurrentTab { confirm = true } },
      { key = "[",          mods = "CMD|SHIFT", action = wezterm.action.ActivateTabRelative(-1) },
      { key = "]",          mods = "CMD|SHIFT", action = wezterm.action.ActivateTabRelative(1)  },
      -- Font size
      { key = "=",          mods = "CMD",       action = wezterm.action.IncreaseFontSize },
      { key = "-",          mods = "CMD",       action = wezterm.action.DecreaseFontSize },
      { key = "0",          mods = "CMD",       action = wezterm.action.ResetFontSize    },
      -- Copy / paste
      { key = "c",          mods = "CMD",       action = wezterm.action.CopyTo("Clipboard")    },
      { key = "v",          mods = "CMD",       action = wezterm.action.PasteFrom("Clipboard") },
    }
    
    -- ─── Mouse ────────────────────────────────────────────────────────────────────
    
    config.mouse_bindings = {
      -- CMD+click opens URLs
      {
        event  = { Up = { streak = 1, button = "Left" } },
        mods   = "CMD",
        action = wezterm.action.OpenLinkAtMouseCursor,
      },
    }
    
    -- ─── Misc ─────────────────────────────────────────────────────────────────────
    
    config.audible_bell             = "Disabled"
    config.visual_bell              = { fade_in_duration_ms = 0, fade_out_duration_ms = 100 }
    config.check_for_updates        = false
    config.automatically_reload_config = true
    config.adjust_window_size_when_changing_font_size = false
    
    return config
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment