flocon/modules/gui/wezterm.nix

88 lines
3 KiB
Nix
Raw Normal View History

2024-09-24 13:09:36 +00:00
{
config,
lib,
username,
...
2024-09-24 21:47:52 +00:00
}: let
2024-09-24 13:09:36 +00:00
cfg = config.modules.wezterm;
2024-09-24 21:47:52 +00:00
in {
2024-09-23 22:40:38 +00:00
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 = ''
2024-09-24 13:09:36 +00:00
local w = require('wezterm')
2024-09-23 22:40:38 +00:00
2024-09-24 13:09:36 +00:00
local function is_vim(pane)
return pane:get_user_vars().IS_NVIM == 'true'
end
2024-09-23 22:40:38 +00:00
2024-09-24 13:09:36 +00:00
local direction_keys = {
h = 'Left',
j = 'Down',
k = 'Up',
l = 'Right',
}
2024-09-23 22:40:38 +00:00
2024-09-24 13:09:36 +00:00
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
2024-09-23 22:40:38 +00:00
2024-09-24 13:09:36 +00:00
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" },
2024-09-23 22:40:38 +00:00
2024-09-24 13:09:36 +00:00
leader = { key = " ", mods = "CTRL", timeout_milliseconds = 1000 },
2024-09-23 22:40:38 +00:00
2024-09-24 13:09:36 +00:00
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'),
2024-09-23 22:40:38 +00:00
},
2024-09-24 13:09:36 +00:00
}
2024-09-23 22:40:38 +00:00
'';
};
};
};
}