{ config, lib, username, ... }: let cfg = config.modules.wezterm; in { options = { modules.wezterm = { enable = lib.mkEnableOption "enable wezterm"; }; }; config = lib.mkIf cfg.enable { home-manager.users.${username} = { programs.wezterm = { enable = true; # package = inputs.wezterm.packages.${pkgs.system}.default; extraConfig = '' local w = require('wezterm') local function is_vim(pane) return pane:get_user_vars().IS_NVIM == 'true' end local direction_keys = { h = 'Left', j = 'Down', k = 'Up', l = 'Right', } local function split_nav(resize_or_move, key) return { key = key, mods = resize_or_move == 'resize' and 'META' or 'CTRL', action = w.action_callback(function(win, pane) if is_vim(pane) then win:perform_action({ SendKey = { key = key, mods = resize_or_move == 'resize' and 'META' or 'CTRL' }, }, pane) else if resize_or_move == 'resize' then win:perform_action({ AdjustPaneSize = { direction_keys[key], 3 } }, pane) else win:perform_action({ ActivatePaneDirection = direction_keys[key] }, pane) end end end), } end return { enable_wayland = false, front_end = "WebGpu", hide_tab_bar_if_only_one_tab = true, show_new_tab_button_in_tab_bar = false, harfbuzz_features = { "ss01", "ss03" }, leader = { key = " ", mods = "CTRL", timeout_milliseconds = 1000 }, keys = { { mods = "LEADER", key = "-", action = wezterm.action.SplitVertical { domain = "CurrentPaneDomain" } }, { mods = "LEADER", key = "=", action = wezterm.action.SplitHorizontal { domain = "CurrentPaneDomain" } }, split_nav('move', 'h'), split_nav('move', 'j'), split_nav('move', 'k'), split_nav('move', 'l'), split_nav('resize', 'h'), split_nav('resize', 'j'), split_nav('resize', 'k'), split_nav('resize', 'l'), }, } ''; }; }; }; }