tmux/fish
This commit is contained in:
parent
bdaefa4d5c
commit
02bd57490f
2 changed files with 295 additions and 293 deletions
|
|
@ -5,257 +5,256 @@ inputs@{ machine, ... }:
|
|||
inherit inputs;
|
||||
requirements = [ "cli" ];
|
||||
home-config =
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
{ config
|
||||
, pkgs
|
||||
, lib
|
||||
, ...
|
||||
}:
|
||||
with builtins;
|
||||
with lib.attrsets;
|
||||
let
|
||||
scripts = (import ./scripts.nix) pkgs;
|
||||
aliases = with scripts; {
|
||||
"cp-mov" = cp-media "mov" "movies";
|
||||
"cp-ser" = cp-media "ser" "shows";
|
||||
"cp-ani" = cp-media "ani" "anime";
|
||||
"ragdoll" = ragdoll;
|
||||
"dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm";
|
||||
"p" = builtins.trace calc calc;
|
||||
"s" = "systemctl";
|
||||
"j" = "journalctl";
|
||||
"ju" = "journalctl -u";
|
||||
"jfu" = "journalctl -fu";
|
||||
"ls" = "${pkgs.eza}/bin/eza --git";
|
||||
"ll" = "${pkgs.eza}/bin/eza --git";
|
||||
"lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
|
||||
"open" = "${pkgs.xdg-utils}/bin/xdg-open";
|
||||
"cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy";
|
||||
"cat" = "${pkgs.bat}/bin/bat";
|
||||
with builtins;
|
||||
with lib.attrsets;
|
||||
let
|
||||
scripts = (import ./scripts.nix) pkgs;
|
||||
aliases = with scripts; {
|
||||
"cp-mov" = cp-media "mov" "movies";
|
||||
"cp-ser" = cp-media "ser" "shows";
|
||||
"cp-ani" = cp-media "ani" "anime";
|
||||
"ragdoll" = ragdoll;
|
||||
"dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm";
|
||||
"p" = builtins.trace calc calc;
|
||||
"s" = "systemctl";
|
||||
"j" = "journalctl";
|
||||
"ju" = "journalctl -u";
|
||||
"jfu" = "journalctl -fu";
|
||||
"ls" = "${pkgs.eza}/bin/eza --git";
|
||||
"ll" = "${pkgs.eza}/bin/eza --git";
|
||||
"lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
|
||||
"open" = "${pkgs.xdg-utils}/bin/xdg-open";
|
||||
"cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy";
|
||||
"cat" = "${pkgs.bat}/bin/bat";
|
||||
|
||||
# "pull" = "${pkgs.git}/bin/git pull";
|
||||
# "push" = "${pkgs.git}/bin/git push";
|
||||
# "commit" = "${pkgs.git}/bin/git commit";
|
||||
# "add" = "${pkgs.git}/bin/git add";
|
||||
# "patch" = "${pkgs.git}/bin/git add -p";
|
||||
# "amend" = "${pkgs.git}/bin/git commit --amend";
|
||||
# "log" = "${pkgs.git}/bin/git log --all --graph --decorate";
|
||||
# "st" = "${pkgs.git}/bin/git status";
|
||||
# "checkout" = "${pkgs.git}/bin/git checkout";
|
||||
# "rebase" = "${pkgs.git}/bin/git rebase";
|
||||
# "stash" = "${pkgs.git}/bin/git stash";
|
||||
# "pull" = "${pkgs.git}/bin/git pull";
|
||||
# "push" = "${pkgs.git}/bin/git push";
|
||||
# "commit" = "${pkgs.git}/bin/git commit";
|
||||
# "add" = "${pkgs.git}/bin/git add";
|
||||
# "patch" = "${pkgs.git}/bin/git add -p";
|
||||
# "amend" = "${pkgs.git}/bin/git commit --amend";
|
||||
# "log" = "${pkgs.git}/bin/git log --all --graph --decorate";
|
||||
# "st" = "${pkgs.git}/bin/git status";
|
||||
# "checkout" = "${pkgs.git}/bin/git checkout";
|
||||
# "rebase" = "${pkgs.git}/bin/git rebase";
|
||||
# "stash" = "${pkgs.git}/bin/git stash";
|
||||
|
||||
"edit" = "jj edit";
|
||||
"old" = "jj edit @-";
|
||||
"new" = "jj edit @+";
|
||||
"rebase" = "jj rebase";
|
||||
"pull" = "jj git fetch; jj catchup";
|
||||
"msg" = "jj describe -m";
|
||||
"branch" = "jj bookmark set";
|
||||
"stat" = "jj status";
|
||||
"push" = "jj git push";
|
||||
"edit" = "jj edit";
|
||||
"old" = "jj edit @-";
|
||||
"new" = "jj edit @+";
|
||||
"rebase" = "jj rebase";
|
||||
"pull" = "jj git fetch; jj catchup";
|
||||
"msg" = "jj describe -m";
|
||||
"branch" = "jj bookmark set";
|
||||
"stat" = "jj status";
|
||||
"push" = "jj git push";
|
||||
|
||||
"tidy" = "x test tidy --bless";
|
||||
"ui" = "x test tests/ui/";
|
||||
"tidy" = "x test tidy --bless";
|
||||
"ui" = "x test tests/ui/";
|
||||
|
||||
"f" = "nautilus --no-desktop . &";
|
||||
};
|
||||
# extracting any compressed format
|
||||
extract = ''
|
||||
function extract -a file -d "decompress a file"
|
||||
if not test -f $file
|
||||
echo "'$file' is not a valid file"
|
||||
return 1
|
||||
end
|
||||
switch $file
|
||||
# tar can automatically figure out how to decompress
|
||||
case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
|
||||
case '*.bz2'; bunzip2 $file; end
|
||||
case '*.rar'; unrar e $file; end
|
||||
case '*.gz'; gunzip $file; end
|
||||
case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
|
||||
case '*.Z'; uncompress $file; end
|
||||
case '*.7z'; 7z x $file; end
|
||||
case '*';
|
||||
echo "'$file' cannot be extracted"
|
||||
"f" = "nautilus --no-desktop . &";
|
||||
};
|
||||
# extracting any compressed format
|
||||
extract = ''
|
||||
function extract -a file -d "decompress a file"
|
||||
if not test -f $file
|
||||
echo "'$file' is not a valid file"
|
||||
return 1
|
||||
end
|
||||
switch $file
|
||||
# tar can automatically figure out how to decompress
|
||||
case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
|
||||
case '*.bz2'; bunzip2 $file; end
|
||||
case '*.rar'; unrar e $file; end
|
||||
case '*.gz'; gunzip $file; end
|
||||
case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
|
||||
case '*.Z'; uncompress $file; end
|
||||
case '*.7z'; 7z x $file; end
|
||||
case '*';
|
||||
echo "'$file' cannot be extracted"
|
||||
return 1
|
||||
end
|
||||
end
|
||||
end
|
||||
'';
|
||||
in
|
||||
{
|
||||
programs = {
|
||||
atuin = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
'';
|
||||
in
|
||||
{
|
||||
programs = {
|
||||
atuin = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
|
||||
settings = {
|
||||
filter_mode_shell_up_key_binding = "workspace";
|
||||
exit_mode = "return-original";
|
||||
inline_height = 20;
|
||||
workspaces = true;
|
||||
settings = {
|
||||
filter_mode_shell_up_key_binding = "workspace";
|
||||
exit_mode = "return-original";
|
||||
inline_height = 20;
|
||||
workspaces = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
zoxide = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
zoxide = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
direnv = {
|
||||
enable = true;
|
||||
# enableFishIntegration = lib.mkDefault true;
|
||||
};
|
||||
direnv = {
|
||||
enable = true;
|
||||
# enableFishIntegration = lib.mkDefault true;
|
||||
};
|
||||
|
||||
fzf = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
fzf = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
fish = {
|
||||
enable = true;
|
||||
shellAliases = aliases;
|
||||
plugins = with pkgs.fishPlugins; [
|
||||
{
|
||||
name = "bang-bang";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "oh-my-fish";
|
||||
repo = "plugin-bang-bang";
|
||||
rev = "ec991b80ba7d4dda7a962167b036efc5c2d79419";
|
||||
hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=";
|
||||
fish = {
|
||||
enable = true;
|
||||
shellAliases = aliases;
|
||||
plugins = with pkgs.fishPlugins; [
|
||||
{
|
||||
name = "bang-bang";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "oh-my-fish";
|
||||
repo = "plugin-bang-bang";
|
||||
rev = "ec991b80ba7d4dda7a962167b036efc5c2d79419";
|
||||
hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "tide";
|
||||
inherit (tide) src;
|
||||
}
|
||||
{
|
||||
name = "sponge";
|
||||
inherit (sponge) src;
|
||||
}
|
||||
{
|
||||
name = "autopair";
|
||||
inherit (autopair) src;
|
||||
}
|
||||
];
|
||||
|
||||
functions = {
|
||||
fish_jj_prompt = {
|
||||
body = ''
|
||||
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null
|
||||
return 1
|
||||
end
|
||||
|
||||
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T '
|
||||
separate(
|
||||
" ",
|
||||
bookmarks.join(", "),
|
||||
change_id.shortest(),
|
||||
commit_id.shortest(),
|
||||
if(conflict, "conflict"),
|
||||
if(empty, "empty"),
|
||||
if(divergent, "divergent"),
|
||||
if(hidden, "hidden"),
|
||||
)
|
||||
'
|
||||
'';
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "tide";
|
||||
inherit (tide) src;
|
||||
}
|
||||
{
|
||||
name = "sponge";
|
||||
inherit (sponge) src;
|
||||
}
|
||||
{
|
||||
name = "autopair";
|
||||
inherit (autopair) src;
|
||||
}
|
||||
];
|
||||
|
||||
functions = {
|
||||
fish_jj_prompt = {
|
||||
body = ''
|
||||
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null
|
||||
return 1
|
||||
end
|
||||
_tide_item_jj = {
|
||||
body = ''
|
||||
set -l _tide_item_jj_color $_tide_location_color
|
||||
echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
|
||||
'';
|
||||
};
|
||||
|
||||
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T '
|
||||
separate(
|
||||
" ",
|
||||
bookmarks.join(", "),
|
||||
change_id.shortest(),
|
||||
commit_id.shortest(),
|
||||
if(conflict, "conflict"),
|
||||
if(empty, "empty"),
|
||||
if(divergent, "divergent"),
|
||||
if(hidden, "hidden"),
|
||||
)
|
||||
'
|
||||
'';
|
||||
_tide_item_git = {
|
||||
body = ''
|
||||
if not test -d .jj
|
||||
fish_git_prompt '%s'
|
||||
end
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
_tide_item_jj = {
|
||||
body = ''
|
||||
set -l _tide_item_jj_color $_tide_location_color
|
||||
echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
|
||||
'';
|
||||
};
|
||||
interactiveShellInit = ''
|
||||
fish_vi_key_bindings
|
||||
|
||||
_tide_item_git = {
|
||||
body = ''
|
||||
if not test -d .jj
|
||||
fish_git_prompt '%s'
|
||||
end
|
||||
'';
|
||||
};
|
||||
bind \e\[3\;5~ kill-word
|
||||
bind \cH backward-kill-word
|
||||
bind \cV beginning-of-line
|
||||
bind \f end-of-line
|
||||
|
||||
bind -M insert \e\[3\;5~ kill-word
|
||||
bind -M insert \cH backward-kill-word
|
||||
bind -M insert \cV beginning-of-line
|
||||
bind -M insert \f end-of-line
|
||||
|
||||
bind \cl 'clear; commandline -f repaint'
|
||||
bind -M insert \cl 'clear; commandline -f repaint'
|
||||
|
||||
set -g sponge_successful_exit_codes 0
|
||||
set -g sponge_allow_previously_successful false
|
||||
set -g sponge_delay 10
|
||||
|
||||
${config.programs.jujutsu.package}/bin/jj util completion fish | source
|
||||
|
||||
# if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
|
||||
# set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
|
||||
# if test $tide_item_jj_idx
|
||||
# set tide_left_prompt_items \
|
||||
# $tide_left_prompt_items[1..$tide_item_jj_idx] \
|
||||
# jj \
|
||||
# $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
|
||||
# end
|
||||
# end
|
||||
|
||||
function t
|
||||
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
|
||||
end
|
||||
|
||||
function temp
|
||||
t $argv
|
||||
end
|
||||
|
||||
function rs
|
||||
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
|
||||
cargo init . --bin --name $(basename "$PWD")
|
||||
vim src/main.rs
|
||||
end
|
||||
|
||||
fish_add_path "$HOME/.cargo/bin"
|
||||
fish_add_path "$HOME/.local/bin"
|
||||
fish_add_path "$HOME/Documents/scripts"
|
||||
fish_add_path "$HOME/.nix-profile/bin"
|
||||
|
||||
function fish_greeting
|
||||
${pkgs.blahaj}/bin/blahaj -s
|
||||
echo "mrow! This is $(uname -n) and ur $(whoami) :3"
|
||||
end
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
fish_vi_key_bindings
|
||||
|
||||
bind \e\[3\;5~ kill-word
|
||||
bind \cH backward-kill-word
|
||||
bind \cV beginning-of-line
|
||||
bind \f end-of-line
|
||||
|
||||
bind -M insert \e\[3\;5~ kill-word
|
||||
bind -M insert \cH backward-kill-word
|
||||
bind -M insert \cV beginning-of-line
|
||||
bind -M insert \f end-of-line
|
||||
|
||||
bind \cl 'clear; commandline -f repaint'
|
||||
bind -M insert \cl 'clear; commandline -f repaint'
|
||||
|
||||
set -g sponge_successful_exit_codes 0
|
||||
set -g sponge_allow_previously_successful false
|
||||
set -g sponge_delay 10
|
||||
|
||||
${config.programs.jujutsu.package}/bin/jj util completion fish | source
|
||||
|
||||
# if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
|
||||
# set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
|
||||
# if test $tide_item_jj_idx
|
||||
# set tide_left_prompt_items \
|
||||
# $tide_left_prompt_items[1..$tide_item_jj_idx] \
|
||||
# jj \
|
||||
# $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
|
||||
# end
|
||||
# end
|
||||
|
||||
function t
|
||||
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
|
||||
end
|
||||
|
||||
function temp
|
||||
t $argv
|
||||
end
|
||||
|
||||
function rs
|
||||
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
|
||||
cargo init . --bin --name $(basename "$PWD")
|
||||
vim src/main.rs
|
||||
end
|
||||
|
||||
fish_add_path "$HOME/.cargo/bin"
|
||||
fish_add_path "$HOME/.local/bin"
|
||||
fish_add_path "$HOME/Documents/scripts"
|
||||
fish_add_path "$HOME/.nix-profile/bin"
|
||||
|
||||
function fish_greeting
|
||||
${pkgs.blahaj}/bin/blahaj -s
|
||||
echo "mrow! This is $(uname -n) and ur $(whoami) :3"
|
||||
end
|
||||
home.activation = {
|
||||
setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
setupTide() {
|
||||
${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${
|
||||
lib.cli.toGNUCommandLineShell { } {
|
||||
auto = true;
|
||||
style = "Lean";
|
||||
prompt_colors = "True color";
|
||||
show_time = "No";
|
||||
lean_prompt_height = "Two lines";
|
||||
prompt_connection = "Disconnected";
|
||||
prompt_spacing = "Compact";
|
||||
icons = "Few icons";
|
||||
transient = "Yes";
|
||||
}
|
||||
}"} >/dev/null 2>&1
|
||||
}
|
||||
setupTide
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
home.activation = {
|
||||
setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
setupTide() {
|
||||
${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${
|
||||
lib.cli.toGNUCommandLineShell { } {
|
||||
auto = true;
|
||||
style = "Lean";
|
||||
prompt_colors = "True color";
|
||||
show_time = "No";
|
||||
lean_prompt_height = "Two lines";
|
||||
prompt_connection = "Disconnected";
|
||||
prompt_spacing = "Compact";
|
||||
icons = "Few icons";
|
||||
transient = "Yes";
|
||||
}
|
||||
}"} >/dev/null 2>&1
|
||||
}
|
||||
setupTide
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,30 +14,33 @@ inputs@{ machine, ... }:
|
|||
|
||||
shortcut = "k";
|
||||
|
||||
plugins = with pkgs; [
|
||||
{
|
||||
plugin = tmuxPlugins.mkTmuxPlugin {
|
||||
pluginName = "suspend";
|
||||
version = "1a2f806";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "MunifTanjim";
|
||||
repo = "tmux-suspend";
|
||||
rev = "1a2f806666e0bfed37535372279fa00d27d50d14";
|
||||
sha256 = "0j7vjrwc7gniwkv1076q3wc8ccwj42zph5wdmsm9ibz6029wlmzv";
|
||||
plugins =
|
||||
with pkgs;
|
||||
with tmuxPlugins;
|
||||
[
|
||||
{
|
||||
plugin = mkTmuxPlugin {
|
||||
pluginName = "suspend";
|
||||
version = "1a2f806";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "MunifTanjim";
|
||||
repo = "tmux-suspend";
|
||||
rev = "1a2f806666e0bfed37535372279fa00d27d50d14";
|
||||
sha256 = "0j7vjrwc7gniwkv1076q3wc8ccwj42zph5wdmsm9ibz6029wlmzv";
|
||||
};
|
||||
};
|
||||
};
|
||||
extraConfig = ''
|
||||
set -g @suspend_key 'F11'
|
||||
'';
|
||||
}
|
||||
{
|
||||
plugin = tmuxPlugins.mode-indicator;
|
||||
}
|
||||
];
|
||||
extraConfig = ''
|
||||
set -g @suspend_key 'F11'
|
||||
'';
|
||||
}
|
||||
{
|
||||
plugin = mode-indicator;
|
||||
}
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
# unbind every single normal keybinding
|
||||
unbind-key -a
|
||||
unbind -a
|
||||
|
||||
# for special characters to work right
|
||||
# like <C-_>
|
||||
|
|
@ -62,36 +65,36 @@ inputs@{ machine, ... }:
|
|||
set -s set-clipboard on
|
||||
|
||||
# get back normal terminal emulator bindings
|
||||
bind-key -n S-PPage copy-mode -u
|
||||
bind-key -T copy-mode -n S-NPage send-keys -X page-down
|
||||
bind -n S-PPage copy-mode -u
|
||||
bind -T copy-mode -n S-NPage send-keys -X page-down
|
||||
|
||||
# don't scroll to end when copying with mouse
|
||||
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe
|
||||
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe
|
||||
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe
|
||||
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe
|
||||
bind -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
bind -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
|
||||
|
||||
# window control
|
||||
bind t new-window -c "#{pane_current_path}"
|
||||
bind-key Tab next-window
|
||||
bind-key BTab previous-window
|
||||
bind Tab next-window
|
||||
bind BTab previous-window
|
||||
set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})"
|
||||
set -g renumber-windows on
|
||||
bind-key Q confirm-before -p "kill-window #W? (y/n)" kill-window
|
||||
bind Q confirm-before -p "kill-window #W? (y/n)" kill-window
|
||||
bind A last-window
|
||||
|
||||
bind-key 1 select-window -t :0
|
||||
bind-key 2 select-window -t :1
|
||||
bind-key 3 select-window -t :2
|
||||
bind-key 4 select-window -t :3
|
||||
bind-key 5 select-window -t :4
|
||||
bind-key 6 select-window -t :5
|
||||
bind-key 7 select-window -t :6
|
||||
bind-key 8 select-window -t :7
|
||||
bind-key 9 select-window -t :8
|
||||
bind-key 0 select-window -t :9
|
||||
bind 1 select-window -t :0
|
||||
bind 2 select-window -t :1
|
||||
bind 3 select-window -t :2
|
||||
bind 4 select-window -t :3
|
||||
bind 5 select-window -t :4
|
||||
bind 6 select-window -t :5
|
||||
bind 7 select-window -t :6
|
||||
bind 8 select-window -t :7
|
||||
bind 9 select-window -t :8
|
||||
bind 0 select-window -t :9
|
||||
|
||||
# pane control
|
||||
bind h select-pane -L
|
||||
|
|
@ -110,40 +113,41 @@ inputs@{ machine, ... }:
|
|||
bind S-Down split-window -v -c "#{pane_current_path}"
|
||||
bind S-Up split-window -h -b -c "#{pane_current_path}"
|
||||
bind S-Right split-window -v -b -c "#{pane_current_path}"
|
||||
bind-key -r -T prefix M-h resize-pane -L 5
|
||||
bind-key -r -T prefix M-j resize-pane -D 5
|
||||
bind-key -r -T prefix M-k resize-pane -U 5
|
||||
bind-key -r -T prefix M-l resize-pane -R 5
|
||||
bind -r -T prefix M-h resize-pane -L 5
|
||||
bind -r -T prefix M-j resize-pane -D 5
|
||||
bind -r -T prefix M-k resize-pane -U 5
|
||||
bind -r -T prefix M-l resize-pane -R 5
|
||||
bind x swap-pane -D
|
||||
bind z resize-pane -Z
|
||||
|
||||
# double-click ^k (or lshift with kanata) for previous pane like ^w in vim
|
||||
bind -r ^k select-pane -l
|
||||
bind-key q confirm-before -p "kill-pane #P? (y/n)" kill-pane
|
||||
bind q confirm-before -p "kill-pane #P? (y/n)" kill-pane
|
||||
|
||||
# bind-key o choose-tree -wZ
|
||||
# bind-key O choose-tree -sZ
|
||||
# bind o choose-tree -wZ
|
||||
# bind O choose-tree -sZ
|
||||
|
||||
# get back command mode and some other basics...
|
||||
bind : command-prompt
|
||||
bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded"
|
||||
bind-key ? list-keys
|
||||
bind ? list-keys
|
||||
|
||||
# Scroll oin man etc
|
||||
tmux_commands_with_legacy_scroll="nano less more man git"
|
||||
|
||||
bind-key -T root WheelUpPane \
|
||||
bind -T root WheelUpPane \
|
||||
if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \
|
||||
'send -Mt=' \
|
||||
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
|
||||
"send -t= Up" "copy-mode -et="'
|
||||
|
||||
bind-key -T root WheelDownPane \
|
||||
bind -T root WheelDownPane \
|
||||
if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \
|
||||
'send -Mt=' \
|
||||
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
|
||||
"send -t= Down" "send -Mt="'
|
||||
|
||||
bind-key -T copy-mode-vi ] \
|
||||
bind -T copy-mode-vi ] \
|
||||
send-keys -X clear-selection \; \
|
||||
send-keys -X search-forward "--> " \; \
|
||||
send-keys -X next-word \; \
|
||||
|
|
@ -151,7 +155,7 @@ inputs@{ machine, ... }:
|
|||
send-keys -X jump-forward ":" \; \
|
||||
send-keys -X jump-to-forward ":" \;
|
||||
|
||||
bind-key -T copy-mode-vi [ \
|
||||
bind -T copy-mode-vi [ \
|
||||
send-keys -X clear-selection \; \
|
||||
send-keys -X start-of-line \; \
|
||||
send-keys -X search-backward "--> " \; \
|
||||
|
|
@ -160,8 +164,8 @@ inputs@{ machine, ... }:
|
|||
send-keys -X jump-forward ":" \; \
|
||||
send-keys -X jump-to-forward ":" \;
|
||||
|
||||
bind-key [ copy-mode \; send-keys [
|
||||
bind-key ] copy-mode \; send-keys ]
|
||||
bind [ copy-mode \; send-keys [
|
||||
bind ] copy-mode \; send-keys ]
|
||||
|
||||
# f: file search
|
||||
# unbound: git files
|
||||
|
|
@ -171,32 +175,31 @@ inputs@{ machine, ... }:
|
|||
# M-i: ips
|
||||
# include line and column numbers in file search
|
||||
# rebind `f` so we can reuse it here
|
||||
bind-key -T prefix C-f command-prompt { find-window -Z "%%" }
|
||||
bind -T prefix C-f command-prompt { find-window -Z "%%" }
|
||||
# jyn is so sorry, and so am I now
|
||||
# https://github.com/jyn514/dotfiles/blob/65be3c004113290f41f858f4d7f1a6799fabab19/config/tmux.conf#L203-L212
|
||||
# see `search-regex.sh` for wtf this means
|
||||
# TODO: include shell variable names
|
||||
bind-key f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
|
||||
bind f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
|
||||
# urls
|
||||
bind-key u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*'
|
||||
bind u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*'
|
||||
# hashes
|
||||
bind-key g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]'
|
||||
bind g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]'
|
||||
# ips
|
||||
bind-key M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
|
||||
bind M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
|
||||
|
||||
bind-key -T copy-mode-vi o send-keys -X copy-pipe \
|
||||
bind -T copy-mode-vi o send-keys -X copy-pipe \
|
||||
'cd #{pane_current_path}; xargs -I {} echo "echo {}" | bash | xargs ${../nvim/editor-hax.py} xdg-open-proxy' \; \
|
||||
if -F "#{alternate_on}" { send-keys -X cancel }
|
||||
# save the buffer, then open an editor in the current pane
|
||||
bind-key -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \
|
||||
bind -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \
|
||||
'tmux send-keys "C-q"; xargs -I {} tmux send-keys "vim {}"; tmux send-keys "C-m"'
|
||||
# search for the highlighted text
|
||||
bind-key -T copy-mode-vi s send-keys -X copy-pipe \
|
||||
bind -T copy-mode-vi s send-keys -X copy-pipe \
|
||||
"cd #{pane_current_path}; xargs -I {} open 'https://www.google.com/search?q={}'" \; \
|
||||
if -F "#{alternate_on}" { send-keys -X cancel }
|
||||
# save buffer and retype into the shell
|
||||
bind-key -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p
|
||||
|
||||
bind -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue