mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-03 03:37:36 +00:00
chore(config): update desktop bindings, tmux keybindings, and MIME associations
This commit is contained in:
1 parent
4768ec30f8
commit
2974f6eb5b
5 files changed
+116
-135
No files matched your search
@@ -94,3 +94,5 @@ end
|
|||||||
|
|
||||||
# Set up keybindings
|
# Set up keybindings
|
||||||
bind "?" _atuin_ai_question_mark
|
bind "?" _atuin_ai_question_mark
|
||||||
|
|
||||||
|
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv fish)"
|
||||||
@@ -123,8 +123,10 @@ o.bind("SUPER + CTRL + J", "Next workspace", hl.dsp.focus({ workspace = "e+1" })
|
|||||||
o.bind("SUPER + CTRL + K", "Previous workspace", hl.dsp.focus({ workspace = "e-1" }))
|
o.bind("SUPER + CTRL + K", "Previous workspace", hl.dsp.focus({ workspace = "e-1" }))
|
||||||
|
|
||||||
-- Scratch workspaces. Omarchy's SUPER + S is taken by the region screenshot
|
-- Scratch workspaces. Omarchy's SUPER + S is taken by the region screenshot
|
||||||
-- below, so the main toggle lands on SUPER + CTRL + S, with SUPER + A (free
|
-- below, so the main toggle (kitty/herdr) lands on SUPER + CTRL + S, with
|
||||||
-- in Omarchy) as the home-row alias. SUPER + ALT + S (send window to the
|
-- SUPER + A (free in Omarchy) as the home-row alias. Claude Desktop has its
|
||||||
|
-- own scratch workspace on SUPER + SHIFT + A and SUPER + C (the latter
|
||||||
|
-- replaces Omarchy's universal copy). SUPER + ALT + S (send window to the
|
||||||
-- scratchpad) is still the Omarchy default and needs no line.
|
-- scratchpad) is still the Omarchy default and needs no line.
|
||||||
--
|
--
|
||||||
-- All of them go through ~/.local/bin/omarchy-toggle-scratch rather than the
|
-- All of them go through ~/.local/bin/omarchy-toggle-scratch rather than the
|
||||||
@@ -136,7 +138,11 @@ o.bind("SUPER + CTRL + K", "Previous workspace", hl.dsp.focus({ workspace = "e-1
|
|||||||
-- under SUPER + CTRL + ALT + E / M in the Applications block below.
|
-- under SUPER + CTRL + ALT + E / M in the Applications block below.
|
||||||
hl.unbind("SUPER + CTRL + S") -- was: share menu
|
hl.unbind("SUPER + CTRL + S") -- was: share menu
|
||||||
o.bind("SUPER + CTRL + S", "Toggle scratch workspace", "omarchy-toggle-scratch scratchpad")
|
o.bind("SUPER + CTRL + S", "Toggle scratch workspace", "omarchy-toggle-scratch scratchpad")
|
||||||
o.bind("SUPER + A", "Toggle scratch workspace", "omarchy-toggle-scratch scratchpad")
|
o.bind("SUPER + A", "Toggle Herdr scratch workspace", "omarchy-toggle-scratch scratchpad")
|
||||||
|
hl.unbind("SUPER + SHIFT + A") -- was: ChatGPT web app
|
||||||
|
o.bind("SUPER + SHIFT + A", "Toggle Claude scratch workspace", "omarchy-toggle-scratch claude")
|
||||||
|
hl.unbind("SUPER + C") -- was: universal copy
|
||||||
|
o.bind("SUPER + C", "Toggle Claude scratch workspace", "omarchy-toggle-scratch claude")
|
||||||
|
|
||||||
-- Workspaces 1 to 5 on the home row of the left half: ALT to focus,
|
-- Workspaces 1 to 5 on the home row of the left half: ALT to focus,
|
||||||
-- ALT + SHIFT to send the window there. No Omarchy default uses ALT with a
|
-- ALT + SHIFT to send the window there. No Omarchy default uses ALT with a
|
||||||
|
|||||||
@@ -50,9 +50,10 @@ o.window([[^tldraw-offline$]], { workspace = "5", fullscreen = true })
|
|||||||
-- them; "silent" leaves the reveal to the script. Under the master layout the
|
-- them; "silent" leaves the reveal to the script. Under the master layout the
|
||||||
-- first window to appear takes the master slot; the rest stack beside it.
|
-- first window to appear takes the master slot; the rest stack beside it.
|
||||||
--
|
--
|
||||||
-- SUPER + A / SUPER + CTRL + S: Claude Desktop + kitty/herdr, Studio Display.
|
-- SUPER + A / SUPER + CTRL + S: kitty/herdr; SUPER + SHIFT + A: Claude
|
||||||
o.window([[^com\.anthropic\.Claude$]], { workspace = "special:scratchpad silent" })
|
-- Desktop. Each alone on its own workspace, Studio Display.
|
||||||
o.window([[^kitty-herdr$]], { workspace = "special:scratchpad silent" })
|
o.window([[^kitty-herdr$]], { workspace = "special:scratchpad silent" })
|
||||||
|
o.window([[^com\.anthropic\.Claude$]], { workspace = "special:claude silent" })
|
||||||
-- SUPER + CTRL + ALT + E / M: Fastmail and Beeper, each alone on the
|
-- SUPER + CTRL + ALT + E / M: Fastmail and Beeper, each alone on the
|
||||||
-- focused monitor.
|
-- focused monitor.
|
||||||
o.window([[^com\.fastmail\.Fastmail$]], { workspace = "special:fastmail silent" })
|
o.window([[^com\.fastmail\.Fastmail$]], { workspace = "special:fastmail silent" })
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ x-scheme-handler/folo=folo.desktop
|
|||||||
x-scheme-handler/tldraw-offline=tldraw-offline.desktop
|
x-scheme-handler/tldraw-offline=tldraw-offline.desktop
|
||||||
x-scheme-handler/notion=notion.desktop
|
x-scheme-handler/notion=notion.desktop
|
||||||
inode/directory=com.thisisgm.flea.desktop
|
inode/directory=com.thisisgm.flea.desktop
|
||||||
|
x-scheme-handler/fastmail=com.fastmail.Fastmail.desktop
|
||||||
|
|
||||||
[Added Associations]
|
[Added Associations]
|
||||||
x-scheme-handler/http=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop;
|
x-scheme-handler/http=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop;
|
||||||
|
|||||||
+101
-130
@@ -1,135 +1,106 @@
|
|||||||
# ── Plugins ──────────────────────────────────────────────────────────────
|
# Prefix
|
||||||
set -g @plugin 'tmux-plugins/tpm'
|
set -g prefix C-Space
|
||||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
set -g prefix2 C-b
|
||||||
set -g @plugin 'vaaleyard/tmux-dotbar'
|
bind -N "Send prefix" C-Space send-prefix
|
||||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
||||||
set -g @plugin 'joshmedeski/tmux-nerd-font-window-name'
|
|
||||||
set -g @plugin 'omerxx/tmux-sessionx'
|
|
||||||
set -g @plugin 'tmux-plugins/tmux-continuum' # keep last
|
|
||||||
set -g @plugin 'eduwass/tmux-palette'
|
|
||||||
|
|
||||||
# ── Kitty compatibility ──────────────────────────────────────────────────
|
# Config and help
|
||||||
set-option -g renumber-windows on
|
bind -N "Reload configuration" q source-file ~/.config/tmux/tmux.conf \; display "Configuration reloaded"
|
||||||
|
bind -N "Show Tmux keybindings" ? display-popup -E -w 80% -h 70% -T "Tmux keybindings" "omarchy-menu-tmux-keybindings --print | less -R"
|
||||||
|
|
||||||
|
# Vi mode for copy
|
||||||
|
setw -g mode-keys vi
|
||||||
|
bind -N "Begin selection" -T copy-mode-vi v send -X begin-selection
|
||||||
|
bind -N "Copy selection" -T copy-mode-vi y send -X copy-selection-and-cancel
|
||||||
|
|
||||||
|
# Pane Controls
|
||||||
|
bind -N "Split pane vertically" -n M-Enter split-window -v -c "#{pane_current_path}"
|
||||||
|
bind -N "Split pane horizontally" -n M-S-Enter split-window -h -c "#{pane_current_path}"
|
||||||
|
bind -N "Kill pane" -n M-Escape kill-pane
|
||||||
|
|
||||||
|
bind -N "Split pane vertically" h split-window -v -c "#{pane_current_path}"
|
||||||
|
bind -N "Split pane horizontally" v split-window -h -c "#{pane_current_path}"
|
||||||
|
bind -N "Kill pane" x kill-pane
|
||||||
|
|
||||||
|
bind -N "Focus pane left" -n C-M-Left select-pane -L
|
||||||
|
bind -N "Focus pane right" -n C-M-Right select-pane -R
|
||||||
|
bind -N "Focus pane up" -n C-M-Up select-pane -U
|
||||||
|
bind -N "Focus pane down" -n C-M-Down select-pane -D
|
||||||
|
|
||||||
|
bind -N "Resize pane left" -n C-M-S-Left resize-pane -L 5
|
||||||
|
bind -N "Resize pane down" -n C-M-S-Down resize-pane -D 5
|
||||||
|
bind -N "Resize pane up" -n C-M-S-Up resize-pane -U 5
|
||||||
|
bind -N "Resize pane right" -n C-M-S-Right resize-pane -R 5
|
||||||
|
|
||||||
|
# Window navigation
|
||||||
|
bind -N "Rename window" r command-prompt -I "#W" "rename-window -- '%%'"
|
||||||
|
bind -N "Create window" c new-window -c "#{pane_current_path}"
|
||||||
|
bind -N "Kill window" k kill-window
|
||||||
|
|
||||||
|
bind -N "Switch to window 1" -n M-1 select-window -t 1
|
||||||
|
bind -N "Switch to window 2" -n M-2 select-window -t 2
|
||||||
|
bind -N "Switch to window 3" -n M-3 select-window -t 3
|
||||||
|
bind -N "Switch to window 4" -n M-4 select-window -t 4
|
||||||
|
bind -N "Switch to window 5" -n M-5 select-window -t 5
|
||||||
|
bind -N "Switch to window 6" -n M-6 select-window -t 6
|
||||||
|
bind -N "Switch to window 7" -n M-7 select-window -t 7
|
||||||
|
bind -N "Switch to window 8" -n M-8 select-window -t 8
|
||||||
|
bind -N "Switch to window 9" -n M-9 select-window -t 9
|
||||||
|
|
||||||
|
bind -N "Previous window" -n M-Left select-window -t -1
|
||||||
|
bind -N "Next window" -n M-Right select-window -t +1
|
||||||
|
bind -N "Move window left" -n M-S-Left swap-window -t -1 \; select-window -t -1
|
||||||
|
bind -N "Move window right" -n M-S-Right swap-window -t +1 \; select-window -t +1
|
||||||
|
|
||||||
|
# Session controls
|
||||||
|
bind -N "Rename session" R command-prompt -I "#S" "rename-session -- '%%'"
|
||||||
|
bind -N "Create session" C new-session -c "#{pane_current_path}"
|
||||||
|
bind -N "Kill session" K kill-session
|
||||||
|
bind -N "Previous session" P switch-client -p
|
||||||
|
bind -N "Next session" N switch-client -n
|
||||||
|
|
||||||
|
bind -N "Previous session" -n M-Up switch-client -p
|
||||||
|
bind -N "Next session" -n M-Down switch-client -n
|
||||||
|
|
||||||
|
# General
|
||||||
|
set -g default-terminal "tmux-256color"
|
||||||
|
set -ag terminal-overrides ",*:RGB"
|
||||||
|
set -g mouse on
|
||||||
set -g base-index 1
|
set -g base-index 1
|
||||||
setw -g pane-base-index 1
|
setw -g pane-base-index 1
|
||||||
set -g default-terminal "tmux-256color"
|
set -g renumber-windows on
|
||||||
set -ga terminal-overrides ",xterm-kitty:Tc"
|
set -g history-limit 50000
|
||||||
set -as terminal-features ",xterm-kitty:RGB:usstyle:hyperlinks:clipboard:extkeys"
|
set -g escape-time 0
|
||||||
set -g extended-keys always
|
set -g focus-events on
|
||||||
set -gq extended-keys-format csi-u
|
set -g set-clipboard on
|
||||||
set-option -g status-position top
|
set -g allow-passthrough on
|
||||||
|
setw -g aggressive-resize on
|
||||||
|
set -g detach-on-destroy off
|
||||||
|
set -g extended-keys on
|
||||||
|
set -g extended-keys-format csi-u
|
||||||
|
set -ag terminal-features "xterm-kitty:extkeys"
|
||||||
|
set -as terminal-features ",*:clipboard"
|
||||||
|
set -sg escape-time 10
|
||||||
|
|
||||||
# ── Status bar ─────────────────────────────────────────────────────────────────
|
# Status bar
|
||||||
# Dotbar
|
set -g status-position top
|
||||||
set -g @tmux-dotbar-position top
|
set -g status-interval 5
|
||||||
set -g @tmux-dotbar-session-position "right"
|
set -g status-left-length 30
|
||||||
set -g @tmux-dotbar-rounded true
|
set -g status-right-length 50
|
||||||
set -g @tmux-dotbar-bg "#0B0E14"
|
set -g window-status-separator ""
|
||||||
set -g @tmux-dotbar-fg "#475266"
|
set -gw automatic-rename on
|
||||||
set -g @tmux-dotbar-fg-current "#BFBDB6"
|
set -gw automatic-rename-format '#{b:pane_current_path}'
|
||||||
set -g @tmux-dotbar-fg-session "#565B66"
|
set -g set-titles on
|
||||||
set -g @tmux-dotbar-fg-prefix "#95E6CB"
|
set -g set-titles-string '#h:#W'
|
||||||
set -g @tmux-dotbar-justify "absolute-centre"
|
|
||||||
set -g @tmux-dotbar-left "true"
|
|
||||||
set -g @tmux-dotbar-right "false"
|
|
||||||
set -g @tmux-dotbar-session-position "left"
|
|
||||||
set -g @tmux-dotbar-session-text " "
|
|
||||||
set -g @tmux-dotbar-status-right-text " %H:%M "
|
|
||||||
set -g @tmux-dotbar-window-status-format " #W "
|
|
||||||
set -g @tmux-dotbar-window-status-separator " • "
|
|
||||||
set -g @tmux-dotbar-maximized-icon ""
|
|
||||||
set -g @tmux-dotbar-show-maximized-icon-for-all-tabs false
|
|
||||||
set -g @tmux-dotbar-bold-status false
|
|
||||||
set -g @tmux-dotbar-bold-current-window false
|
|
||||||
set -g @tmux-dotbar-ssh-enabled true
|
|
||||||
set -g @tmux-dotbar-ssh-icon ''
|
|
||||||
set -g @tmux-dotbar-ssh-icon-only false
|
|
||||||
|
|
||||||
# Styling
|
# Theme
|
||||||
set -g status-style fg=default,bg=default
|
set -g status-style "bg=default,fg=default"
|
||||||
set -g popup-style 'bg=default'
|
set -g status-left "#[fg=black,bg=blue,bold] #S #[bg=default] "
|
||||||
set -g popup-border-style 'bg=default,fg=#5c5c66'
|
set -g status-right "#[fg=blue]#{?pane_in_mode,COPY ,}#{?client_prefix,PREFIX ,}#{?window_zoomed_flag,ZOOM ,}#[fg=brightblack]#h "
|
||||||
set -g popup-border-lines rounded
|
set -g window-status-format "#[fg=brightblack] #I:#W "
|
||||||
set -g @sessionx-additional-options "--color 'bg:-1,bg+:-1,gutter:-1,border:-1,preview-bg:-1'"
|
set -g window-status-current-format "#[fg=blue,bold] #I:#W "
|
||||||
|
set -g pane-border-style "fg=brightblack"
|
||||||
# Kitty graphics protocol passthrough (yazi / image preview)
|
set -g pane-active-border-style "fg=blue"
|
||||||
set -g allow-passthrough on
|
set -g message-style "bg=default,fg=blue"
|
||||||
set -ga update-environment TERM
|
set -g message-command-style "bg=default,fg=blue"
|
||||||
set -ga update-environment TERM_PROGRAM
|
set -g mode-style "bg=blue,fg=black"
|
||||||
|
setw -g clock-mode-colour blue
|
||||||
# ── Clipboard (Wayland / Niri) ───────────────────────────────────────────
|
|
||||||
set -g set-clipboard on # OSC 52 — covers ssh'd sessions
|
|
||||||
set -g mouse on
|
|
||||||
setw -g mode-keys vi
|
|
||||||
bind -T copy-mode-vi v send -X begin-selection
|
|
||||||
bind -T copy-mode-vi y send -X copy-pipe-and-cancel "wl-copy"
|
|
||||||
bind -T copy-mode-vi Y send -X copy-pipe-and-cancel "wl-copy" \; send -X cancel
|
|
||||||
bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "wl-copy"
|
|
||||||
|
|
||||||
# ── Sessions ─────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
set -g @resurrect-strategy-nvim 'session'
|
|
||||||
set -g @resurrect-capture-pane-contents 'on'
|
|
||||||
set -g @resurrect-processes 'ssh psql mysql sqlite3 purple lazygit lazydocker "claude->claude --continue" opencode'
|
|
||||||
set -g @continuum-save-interval '10'
|
|
||||||
set -g @continuum-restore 'off' # restore is owned by kitty-tmux launcher
|
|
||||||
set -g @sessionx-bind 'o'
|
|
||||||
set -g @sessionx-zoxide-mode 'on'
|
|
||||||
|
|
||||||
# ── Titles → Niri active window ──────────────────────────────────────────
|
|
||||||
|
|
||||||
set-option -g set-titles on
|
|
||||||
set-option -g set-titles-string "#T (#S)"
|
|
||||||
set-option -g status-interval 1
|
|
||||||
set-window-option -g automatic-rename on
|
|
||||||
|
|
||||||
# ── QoL ──────────────────────────────────────────────────────────────────
|
|
||||||
set -g history-limit 50000
|
|
||||||
set -g base-index 1
|
|
||||||
setw -g pane-base-index 1
|
|
||||||
set -g renumber-windows on
|
|
||||||
|
|
||||||
# ── Keybinds ─────────────────────────────────────────────────────────────
|
|
||||||
bind -n S-Enter send-keys Escape '[13;2u'
|
|
||||||
# New window: on @ssh_host sessions (set by the Vicinae tmux-sessions
|
|
||||||
# extension) connect to the same remote; otherwise inherit the local cwd.
|
|
||||||
# The remote host is read at runtime — tmux does NOT format-expand a
|
|
||||||
# new-window shell-command, so "#{@ssh_host}" there would be taken literally.
|
|
||||||
bind-key t if-shell -F '#{@ssh_host}' \
|
|
||||||
'new-window "ssh $(tmux show-options -v @ssh_host)"' \
|
|
||||||
'new-window -c "#{pane_current_path}"'
|
|
||||||
bind-key [ previous-window
|
|
||||||
bind-key ] next-window
|
|
||||||
bind-key H previous-window
|
|
||||||
bind-key L next-window
|
|
||||||
set -g @palette-key 'C-Space' # optional, default: C-Space (no-prefix)
|
|
||||||
set -g @palette-find-pane-key 'M-f' # optional, no binding by default
|
|
||||||
set -g @palette-move-pane-key 'M-m' # optional, no binding by default
|
|
||||||
|
|
||||||
|
|
||||||
# Splits inherit cwd (kitty super+t / super+n land here)
|
|
||||||
# vsplit: new pane right at 35% width · hsplit: new pane below at 25% height
|
|
||||||
bind % split-window -h -l 30% -c "#{pane_current_path}"
|
|
||||||
bind '"' split-window -v -l 25% -c "#{pane_current_path}"
|
|
||||||
|
|
||||||
# Copy-mode entry (default prefix+[ is rebound above)
|
|
||||||
bind Escape copy-mode
|
|
||||||
|
|
||||||
# ── Pane navigation: ctrl+hjkl, no prefix ────────────────────────────────
|
|
||||||
# Vim-aware: if the pane runs (n)vim, forward the key so vim handles its
|
|
||||||
# own window movement (pair with vim-tmux-navigator in AstroNvim).
|
|
||||||
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'"
|
|
||||||
bind -n C-h if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
|
|
||||||
bind -n C-j if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
|
|
||||||
bind -n C-k if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
|
|
||||||
bind -n C-l if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
|
|
||||||
# Same nav from inside copy-mode
|
|
||||||
bind -T copy-mode-vi C-h select-pane -L
|
|
||||||
bind -T copy-mode-vi C-j select-pane -D
|
|
||||||
bind -T copy-mode-vi C-k select-pane -U
|
|
||||||
bind -T copy-mode-vi C-l select-pane -R
|
|
||||||
# Clear-screen escape hatch (C-l is consumed above)
|
|
||||||
bind C-l send-keys C-l
|
|
||||||
|
|
||||||
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
|
||||||
run '~/.tmux/plugins/tpm/tpm'
|
|
||||||
Reference in new issue
Block a user