dotfiles/modules/home/apps/tmux/default.nix

95 lines
2.6 KiB
Nix
Raw Normal View History

{
lib,
config,
pkgs,
namespace,
...
}: let
inherit (lib) mkEnableOption;
inherit (pkgs) tmuxPlugins;
cfg = config.${namespace}.apps.tmux;
2024-10-06 16:15:43 +00:00
tmsConfig = {
display_full_path = true;
session_sort_order = "LastAttached";
search_dirs = [
{
path = "${config.home.homeDirectory}/src";
depth = 2;
}
];
};
in {
options.${namespace}.apps.tmux = {
enable = mkEnableOption "tmux";
};
config = lib.mkIf cfg.enable {
2024-10-06 16:15:43 +00:00
home.packages = [pkgs.tmux-sessionizer];
programs.tmux = {
enable = true;
2024-10-19 04:25:06 +00:00
baseIndex = 1;
2024-08-12 02:21:41 +00:00
catppuccin.enable = true;
keyMode = "vi";
newSession = true;
sensibleOnTop = true;
terminal = "screen-256color";
plugins = [
{
plugin = tmuxPlugins.resurrect;
extraConfig = ''
set -g @resurrect-capture-pane-contents 'on'
set -g @resurrect-strategy-nvim 'session'
'';
}
{
plugin = tmuxPlugins.continuum;
extraConfig = ''
set -g @continuum-restore 'on'
'';
}
tmuxPlugins.open
2024-10-06 03:47:57 +00:00
tmuxPlugins.pain-control
2024-08-12 02:51:28 +00:00
tmuxPlugins.tmux-fzf
tmuxPlugins.vim-tmux-navigator
];
2024-10-06 16:57:13 +00:00
extraConfig =
''
# Scrolling with mouse wheel scrolls output instead of previous commands
setw -g mouse on
2024-10-06 16:57:13 +00:00
# Open panes in the same directory
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
2024-10-06 16:15:43 +00:00
2024-10-06 16:57:13 +00:00
# sessionizer
bind C-o display-popup -E "${pkgs.tmux-sessionizer}/bin/tms"
bind C-j display-popup -E "${pkgs.tmux-sessionizer}/bin/tms switch"
bind C-w display-popup -E "${pkgs.tmux-sessionizer}/bin/tms windows"
bind C-s command-prompt -p "Rename active session to:" "run-shell '${pkgs.tmux-sessionizer}/bin/tms rename %1'"
''
+ lib.strings.optionalString config.programs.lazygit.enable ''
# Open lazygit in a popup
# Spins up a new session with a '-lg' suffix (hitting the shortcut
# toggles between attaching and detaching)
bind C-g if-shell "[[ $(tmux display-message -p '#S') == *-lg ]]" {
detach-client
} {
display-popup -h 90% -w 90% -E "tmux new-session -A -s $(tmux display-message -p '#S')-lg ${pkgs.lazygit}/bin/lazygit"
}
'';
};
2024-10-06 16:15:43 +00:00
xdg.configFile."tms/config.toml".source = (pkgs.formats.toml {}).generate "tms-config" tmsConfig;
};
}