1
0
Fork 0
mirror of https://github.com/LnL7/nix-darwin.git synced 2024-12-14 11:57:34 +00:00

add basic options for programs.tmux

This commit is contained in:
Daiderd Jordan 2016-10-21 23:32:03 +02:00
parent e968db6224
commit 4a7514f2ea
No known key found for this signature in database
GPG key ID: D02435D05B810C96
3 changed files with 92 additions and 12 deletions

View file

@ -9,6 +9,7 @@ let
[ config
./modules/system.nix
./modules/environment.nix
./modules/tmux.nix
<nixpkgs/nixos/modules/system/etc/etc.nix>
];
};
@ -48,21 +49,15 @@ let
environment.shellAliases.ls = "ls -G";
environment.etc."tmux.conf".text = ''
set -g default-command "reattach-to-user-namespace -l $SHELL"
set -g default-terminal "screen-256color"
source-file ${config.system.build.setTmuxOptions}
set -g status-bg black
set -g status-fg white
set -g base-index 1
set -g renumber-windows on
setw -g mode-keys vi
bind c new-window -c '#{pane_current_path}'
bind % split-window -v -c '#{pane_current_path}'
bind '"' split-window -h -c '#{pane_current_path}'
'';
programs.tmux.enableSensible = true;
programs.tmux.enableVim = true;
environment.etc."zshrc".text = ''
autoload -U compinit && compinit
autoload -U promptinit && promptinit

View file

@ -39,6 +39,7 @@ in {
};
environment.variables = mkOption {
type = types.attrsOf (types.loeOf types.str);
default = {};
description = ''
A set of environment variables used in the global environment.
@ -47,7 +48,6 @@ in {
strings. The latter is concatenated, interspersed with colon
characters.
'';
type = types.attrsOf (types.loeOf types.str);
apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else v);
};

85
modules/tmux.nix Normal file
View file

@ -0,0 +1,85 @@
{ config, lib, pkgs, ... }:
with lib;
let
inherit (pkgs) stdenv;
cfg = config.programs.tmux;
tmuxConfigs =
mapAttrsToList (n: v: "${v}") cfg.text;
in {
options = {
programs.tmux.enableSensible = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
Enable sensible configuration options.
'';
};
programs.tmux.enableVim = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
Enable vim style keybindings for copy mode, and navigation of panes.
'';
};
programs.tmux.text = mkOption {
internal = true;
type = types.attrsOf types.str;
default = {};
};
};
config = {
system.build.setTmuxOptions = pkgs.writeText "set-tmux-options"
(concatStringsSep "\n" tmuxConfigs);
programs.tmux.text.sensible = mkIf cfg.enableSensible (''
set -g default-terminal "screen-256color"
setw -g aggressive-resize on
set -g base-index 1
set -g renumber-windows on
bind 0 set -g status
set -g status-keys emacs
set -s escape-time 0
bind c new-window -c '#{pane_current_path}'
bind % split-window -v -c '#{pane_current_path}'
bind '"' split-window -h -c '#{pane_current_path}'
# TODO: make these interactive
bind C new-session
bind S switch-client -l
# set -g status-utf8 on
# set -g utf8 on
'' + optionalString stdenv.isDarwin ''
set -g default-command "reattach-to-user-namespace -l $SHELL"
'');
programs.tmux.text.vim = mkIf cfg.enableVim ''
setw -g mode-keys vi
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind s split-window -v -c '#{pane_current_path}'
bind v split-window -h -c '#{pane_current_path}'
'';
};
}