From fe558493331e63e336054081cb3c2faa83a968c0 Mon Sep 17 00:00:00 2001 From: Alejandro Angulo Date: Sun, 28 Jul 2024 19:46:30 -0700 Subject: [PATCH] Converted tmux from nixosModule to homeModule --- homes/x86_64-linux/alejandro/default.nix | 15 +++ modules/home/home/default.nix | 7 ++ modules/home/tmux/default.nix | 108 +++++++++++++++++ modules/nixos/apps/tmux/default.nix | 118 ------------------- modules/nixos/suites/development/default.nix | 8 +- systems/x86_64-linux/node/default.nix | 2 - 6 files changed, 133 insertions(+), 125 deletions(-) create mode 100644 homes/x86_64-linux/alejandro/default.nix create mode 100644 modules/home/home/default.nix create mode 100644 modules/home/tmux/default.nix delete mode 100644 modules/nixos/apps/tmux/default.nix diff --git a/homes/x86_64-linux/alejandro/default.nix b/homes/x86_64-linux/alejandro/default.nix new file mode 100644 index 0000000..01daa86 --- /dev/null +++ b/homes/x86_64-linux/alejandro/default.nix @@ -0,0 +1,15 @@ +{ + lib, + pkgs, + config, + osConfig ? {}, + format ? "unknown", + namespace, + ... +}: { + aa = { + apps = { + tmux.enable = true; + }; + }; +} diff --git a/modules/home/home/default.nix b/modules/home/home/default.nix new file mode 100644 index 0000000..d1af176 --- /dev/null +++ b/modules/home/home/default.nix @@ -0,0 +1,7 @@ +{ + lib, + osConfig ? {}, + ... +}: { + home.stateVersion = lib.mkDefault (osConfig.system.stateVersion or "24.05"); +} diff --git a/modules/home/tmux/default.nix b/modules/home/tmux/default.nix new file mode 100644 index 0000000..5174690 --- /dev/null +++ b/modules/home/tmux/default.nix @@ -0,0 +1,108 @@ +{ + lib, + config, + pkgs, + namespace, + ... +}: let + inherit (lib) mkEnableOption; + + cfg = config.${namespace}.apps.tmux; +in { + options.${namespace}.apps.tmux = { + enable = mkEnableOption "tmux"; + }; + + config = lib.mkIf cfg.enable { + programs.tmux = { + enable = true; + keyMode = "vi"; + newSession = true; + sensibleOnTop = true; + terminal = "screen-256color"; + + # TOOD: Check if neovim is enabled before config vim integrations + + plugins = [ + { + plugin = pkgs.tmuxPlugins.resurrect; + extraConfig = '' + set -g @resurrect-capture-pane-contents 'on' + set -g @resurrect-strategy-nvim 'session' + ''; + } + + { + plugin = pkgs.tmuxPlugins.continuum; + extraConfig = '' + set -g @continuum-restore 'on' + ''; + } + + { + plugin = + pkgs.tmuxPlugins.mkTmuxPlugin + { + pluginName = "tmux-nerd-font-window-name"; + version = "2.1.1"; + src = pkgs.fetchFromGitHub { + owner = "joshmedeski"; + repo = "tmux-nerd-font-window-name"; + rev = "57961cb0a99b76f20e02639d398c973d81971d05"; + sha256 = "sha256-8P4jFEkcJn/JbdRAC5PCrLAGTJwFxCknllOjkD+PK9w="; + }; + nativeBuildInputs = [pkgs.makeWrapper]; + rtpFilePath = "tmux-nerd-font-window-name.tmux"; + postInstall = '' + wrapProgram $target/bin/tmux-nerd-font-window-name \ + --prefix PATH ${lib.makeBinPath [pkgs.yq-go]} + + # NOTE: I thought the wrapProgram above should make it so this wouldn't be needed + find $target -type f -print0 | xargs -0 sed -i -e 's|yq |${pkgs.yq-go}/bin/yq |g' + ''; + }; + } + + pkgs.tmuxPlugins.vim-tmux-navigator + pkgs.tmuxPlugins.open + ]; + + extraConfig = '' + # Color fix + # set-option -ga terminal-overrides ",alacritty:Tc,xterm-256color:Tc" + + # Scrolling with mouse wheel scrolls output instead of previous commands + setw -g mouse on + + # 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}" + + # Eye Candy + # set -g @plugin 'mattdavis90/base16-tmux' + # set -g @colors-base16 'darktooth' + + # Smart pane switching with awareness of Vim splits. + # See: https://github.com/christoomey/vim-tmux-navigator + is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?\\.?g?(view|n?vim?x?)(-wrapped)?(diff)?$'" + bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' + bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' + bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' + bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' + tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' + if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ + "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" + if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ + "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" + + bind-key -T copy-mode-vi 'C-h' select-pane -L + bind-key -T copy-mode-vi 'C-j' select-pane -D + bind-key -T copy-mode-vi 'C-k' select-pane -U + bind-key -T copy-mode-vi 'C-l' select-pane -R + bind-key -T copy-mode-vi 'C-\' select-pane -l + ''; + }; + }; +} diff --git a/modules/nixos/apps/tmux/default.nix b/modules/nixos/apps/tmux/default.nix deleted file mode 100644 index beed85e..0000000 --- a/modules/nixos/apps/tmux/default.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.aa.apps.tmux; - user_cfg = config.home-manager.users.${config.aa.user.name}; -in { - options.aa.apps.tmux = { - enable = lib.options.mkEnableOption "tmux"; - }; - - config = lib.mkIf cfg.enable { - aa.home.extraOptions = { - programs.tmux = { - enable = true; - keyMode = "vi"; - newSession = true; - sensibleOnTop = true; - terminal = "screen-256color"; - - # TOOD: Check if neovim is enabled before config vim integrations - - plugins = [ - { - plugin = pkgs.tmuxPlugins.resurrect; - extraConfig = '' - set -g @resurrect-capture-pane-contents 'on' - set -g @resurrect-strategy-nvim 'session' - ''; - } - - { - plugin = pkgs.tmuxPlugins.continuum; - extraConfig = '' - set -g @continuum-restore 'on' - ''; - } - - { - plugin = - pkgs.tmuxPlugins.mkTmuxPlugin - { - pluginName = "tmux-nerd-font-window-name"; - version = "2.1.1"; - src = pkgs.fetchFromGitHub { - owner = "joshmedeski"; - repo = "tmux-nerd-font-window-name"; - rev = "57961cb0a99b76f20e02639d398c973d81971d05"; - sha256 = "sha256-8P4jFEkcJn/JbdRAC5PCrLAGTJwFxCknllOjkD+PK9w="; - }; - nativeBuildInputs = [pkgs.makeWrapper]; - rtpFilePath = "tmux-nerd-font-window-name.tmux"; - postInstall = '' - wrapProgram $target/bin/tmux-nerd-font-window-name \ - --prefix PATH ${lib.makeBinPath [pkgs.yq-go]} - - # NOTE: I thought the wrapProgram above should make it so this wouldn't be needed - find $target -type f -print0 | xargs -0 sed -i -e 's|yq |${pkgs.yq-go}/bin/yq |g' - ''; - }; - } - - pkgs.tmuxPlugins.vim-tmux-navigator - pkgs.tmuxPlugins.open - ]; - - extraConfig = - '' - # Color fix - # set-option -ga terminal-overrides ",alacritty:Tc,xterm-256color:Tc" - - # Scrolling with mouse wheel scrolls output instead of previous commands - setw -g mouse on - - # 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}" - - # Eye Candy - # set -g @plugin 'mattdavis90/base16-tmux' - # set -g @colors-base16 'darktooth' - - # Smart pane switching with awareness of Vim splits. - # See: https://github.com/christoomey/vim-tmux-navigator - is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ - | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?\\.?g?(view|n?vim?x?)(-wrapped)?(diff)?$'" - bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' - bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' - bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' - bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' - tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' - if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ - "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" - if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ - "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" - - bind-key -T copy-mode-vi 'C-h' select-pane -L - bind-key -T copy-mode-vi 'C-j' select-pane -D - bind-key -T copy-mode-vi 'C-k' select-pane -U - bind-key -T copy-mode-vi 'C-l' select-pane -R - bind-key -T copy-mode-vi 'C-\' select-pane -l - '' - + ( - if config.aa.apps.neovim.enable - then '' - - # Integration with tmuxline.vim - source-file ${user_cfg.xdg.dataHome}/${config.aa.apps.neovim.tmuxThemePath} - '' - else "" - ); - }; - }; - }; -} diff --git a/modules/nixos/suites/development/default.nix b/modules/nixos/suites/development/default.nix index 4d0cb0b..22b7974 100644 --- a/modules/nixos/suites/development/default.nix +++ b/modules/nixos/suites/development/default.nix @@ -1,14 +1,13 @@ { - options, config, lib, pkgs, ... -}: -with lib; let +}: let + inherit (lib) mkIf mkEnableOption; cfg = config.aa.suites.development; in { - options.aa.suites.development = with lib.types; { + options.aa.suites.development = { enable = mkEnableOption "common configuration"; }; @@ -24,7 +23,6 @@ in { apps = { neovim.enable = true; - tmux.enable = true; }; }; diff --git a/systems/x86_64-linux/node/default.nix b/systems/x86_64-linux/node/default.nix index a168208..cb24db0 100644 --- a/systems/x86_64-linux/node/default.nix +++ b/systems/x86_64-linux/node/default.nix @@ -18,8 +18,6 @@ nix.enable = true; nix.useSelfhostedCache = true; - apps.tmux.enable = true; - services.tailscale = { enable = true; configureClientRouting = true;