refactor: switch to catppuccin mocha across tmux and neovim

- tmux: hand-rolled catppuccin theme, three-way status bar toggle, plugin cleanup
- nvim: switch colorscheme to catppuccin-mocha, update lualine colors
- nvim: add tmuxline.vim for tmux statusline generation
- kitty: fix MesloLGS NF font typo, remove deprecated config keys

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Thomas Naderer
2026-03-01 15:44:29 +01:00
parent 2229f7741b
commit 82fc23530d
26 changed files with 1236 additions and 2404 deletions

View File

@@ -675,6 +675,25 @@
} }
] ]
}, },
{
"type": "basic",
"from": {
"key_code": "p",
"modifiers": {
"mandatory": [
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"key_code": "page_down"
}
]
},
{ {
"type": "basic", "type": "basic",
"from": { "from": {
@@ -731,25 +750,6 @@
"key_code": "end" "key_code": "end"
} }
] ]
},
{
"type": "basic",
"from": {
"key_code": "p",
"modifiers": {
"mandatory": [
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"key_code": "page_down"
}
]
} }
] ]
}, },
@@ -772,7 +772,7 @@
"to": [ "to": [
{ {
"mouse_key": { "mouse_key": {
"x": -345 "x": -750
} }
} }
] ]
@@ -793,7 +793,7 @@
"to": [ "to": [
{ {
"mouse_key": { "mouse_key": {
"y": 345 "y": 750
} }
} }
] ]
@@ -814,7 +814,7 @@
"to": [ "to": [
{ {
"mouse_key": { "mouse_key": {
"y": -345 "y": -750
} }
} }
] ]
@@ -835,7 +835,7 @@
"to": [ "to": [
{ {
"mouse_key": { "mouse_key": {
"x": 345 "x": 750
} }
} }
] ]
@@ -1152,29 +1152,6 @@
} }
] ]
}, },
{
"type": "basic",
"from": {
"key_code": "a",
"modifiers": {
"mandatory": [
"left_command",
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"key_code": "up_arrow",
"modifiers": [
"left_control"
]
}
]
},
{ {
"type": "basic", "type": "basic",
"from": { "from": {
@@ -1268,28 +1245,6 @@
} }
] ]
}, },
{
"type": "basic",
"from": {
"key_code": "z",
"modifiers": {
"mandatory": [
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"key_code": "z",
"modifiers": [
"left_control"
]
}
]
},
{ {
"type": "basic", "type": "basic",
"from": { "from": {
@@ -1402,6 +1357,26 @@
} }
] ]
}, },
{
"type": "basic",
"from": {
"key_code": "e",
"modifiers": {
"mandatory": [
"left_command",
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"shell_command": "open -a 'Microsoft Excel'"
}
]
},
{ {
"type": "basic", "type": "basic",
"from": { "from": {
@@ -1437,7 +1412,7 @@
}, },
"to": [ "to": [
{ {
"shell_command": "open -a 'iTerm'" "shell_command": "open -a 'kitty'"
} }
] ]
}, },
@@ -1464,9 +1439,10 @@
{ {
"type": "basic", "type": "basic",
"from": { "from": {
"key_code": "t", "key_code": "s",
"modifiers": { "modifiers": {
"mandatory": [ "mandatory": [
"left_command",
"right_command", "right_command",
"right_control", "right_control",
"right_shift", "right_shift",
@@ -1476,7 +1452,7 @@
}, },
"to": [ "to": [
{ {
"shell_command": "open -a 'Visual Studio Code'" "shell_command": "open -a Spotify"
} }
] ]
}, },
@@ -1496,7 +1472,7 @@
}, },
"to": [ "to": [
{ {
"shell_command": "open -a 'Typora'" "shell_command": "open -a Transmission"
} }
] ]
}, },
@@ -1522,7 +1498,26 @@
{ {
"type": "basic", "type": "basic",
"from": { "from": {
"key_code": "d", "key_code": "a",
"modifiers": {
"mandatory": [
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"shell_command": "open -a 'Alfred'"
}
]
},
{
"type": "basic",
"from": {
"key_code": "a",
"modifiers": { "modifiers": {
"mandatory": [ "mandatory": [
"left_command", "left_command",
@@ -1535,7 +1530,7 @@
}, },
"to": [ "to": [
{ {
"shell_command": "open -a 'Dictionary'" "shell_command": "open -a 'Mail'"
} }
] ]
}, },
@@ -1554,10 +1549,30 @@
}, },
"to": [ "to": [
{ {
"shell_command": "open -b com.runningwithcrayons.Alfred-3" "shell_command": "open -a 'Zen Browser'"
} }
] ]
}, },
{
"type": "basic",
"from": {
"key_code": "z",
"modifiers": {
"mandatory": [
"right_command",
"right_control",
"right_shift",
"right_option"
]
}
},
"to": [
{
"shell_command": "open -a 'zoom.us'"
}
]
},
{ {
"type": "basic", "type": "basic",
"from": { "from": {
@@ -1629,7 +1644,7 @@
}, },
"to": [ "to": [
{ {
"shell_command": "open -a 'Google Chrome'" "shell_command": "open -a 'ChatGPT'"
} }
] ]
} }

View File

@@ -1,9 +0,0 @@
{
"profiles": [
{
"name": "Default profile",
"selected": true,
"virtual_hid_keyboard": { "keyboard_type_v2": "iso" }
}
]
}

View File

@@ -1,86 +0,0 @@
{
"profiles": [
{
"complex_modifications": {
"rules": [
{
"description": "Left ctrl + hjkl to arrow keys Vim",
"manipulators": [
{
"from": {
"key_code": "h",
"modifiers": {
"mandatory": ["left_control"],
"optional": ["any"]
}
},
"to": [{ "key_code": "left_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "j",
"modifiers": {
"mandatory": ["left_control"],
"optional": ["any"]
}
},
"to": [{ "key_code": "down_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "k",
"modifiers": {
"mandatory": ["left_control"],
"optional": ["any"]
}
},
"to": [{ "key_code": "up_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "l",
"modifiers": {
"mandatory": ["left_control"],
"optional": ["any"]
}
},
"to": [{ "key_code": "right_arrow" }],
"type": "basic"
}
]
}
]
},
"devices": [
{
"identifiers": { "is_keyboard": true },
"simple_modifications": [
{
"from": { "key_code": "caps_lock" },
"to": [{ "key_code": "escape" }]
}
]
},
{
"identifiers": {
"is_keyboard": true,
"product_id": 620,
"vendor_id": 76
},
"simple_modifications": [
{
"from": { "key_code": "caps_lock" },
"to": [{ "key_code": "escape" }]
}
]
}
],
"name": "Default profile",
"selected": true,
"virtual_hid_keyboard": { "keyboard_type_v2": "iso" }
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,47 +1,50 @@
background #3b3c35 # vim:ft=kitty
foreground #fdfff1
cursor #fdfff1 ## name: Tokyo Night Moon
cursor_text_color #000000 ## license: MIT
selection_foreground #3b3c35 ## author: Folke Lemaitre
selection_background #fdfff1 ## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_moon.conf
# dull black
color0 #3b3c35
# light black
color8 #6e7066
# dull red background #222436
color1 #f82570 foreground #c8d3f5
# light red selection_background #2d3f76
color9 #f82570 selection_foreground #c8d3f5
url_color #4fd6be
cursor #c8d3f5
cursor_text_color #222436
# dull green # Tabs
color2 #a6e12d active_tab_background #82aaff
# light green active_tab_foreground #1e2030
color10 #a6e12d inactive_tab_background #2f334d
inactive_tab_foreground #545c7e
#tab_bar_background #1b1d2b
# yellow # Windows
color3 #e4db73 active_border_color #82aaff
# light yellow inactive_border_color #2f334d
color11 #e4db73
# blue # normal
color4 #fc961f color0 #1b1d2b
# light blue color1 #ff757f
color12 #fc961f color2 #c3e88d
color3 #ffc777
color4 #82aaff
color5 #c099ff
color6 #86e1fc
color7 #828bb8
# magenta # bright
color5 #ae81ff color8 #444a73
# light magenta color9 #ff8d94
color13 #ae81ff color10 #c7fb6d
color11 #ffd8ab
color12 #9ab8ff
color13 #caabff
color14 #b2ebff
color15 #c8d3f5
# cyan # extended colors
color6 #66d9ee color16 #ff966c
# light cyan color17 #c53b53
color14 #66d9ee
# dull white
color7 #fdfff1
# bright white
color15 #fdfff1

View File

@@ -30,7 +30,7 @@ map ctrl+shift+u input_unicode_character
map ctrl+home resize_window reset map ctrl+home resize_window reset
# Text Selection & Search # Text Selection & Search
map ctrl+shift+f show_scrollback map ctrl+shift+o show_scrollback
map ctrl+shift+h show_last_command_output map ctrl+shift+h show_last_command_output
map cmd+f launch --type=overlay --stdin-source=@screen_scrollback /usr/bin/less +G -R map cmd+f launch --type=overlay --stdin-source=@screen_scrollback /usr/bin/less +G -R
@@ -40,6 +40,13 @@ map cmd+minus change_font_size all -2.0
map cmd+0 change_font_size all 0 map cmd+0 change_font_size all 0
# Background Opacity # Background Opacity
# Fast opacity controls
map cmd+alt+up set_background_opacity +0.05
map cmd+alt+down set_background_opacity -0.05
map cmd+alt+t remote_control set-background-opacity --toggle 0.85
map cmd+alt+backspace set_background_opacity default
# Prefix-based opacity controls (existing)
map ctrl+shift+a>m set_background_opacity +0.1 map ctrl+shift+a>m set_background_opacity +0.1
map ctrl+shift+a>l set_background_opacity -0.1 map ctrl+shift+a>l set_background_opacity -0.1
map ctrl+shift+a>1 set_background_opacity 1 map ctrl+shift+a>1 set_background_opacity 1
@@ -57,4 +64,3 @@ map ctrl+shift+g show_last_command_output
# German character mappings # German character mappings
map alt+s send_text all ß map alt+s send_text all ß

View File

@@ -1,5 +1,5 @@
# Font Configuration # Font Configuration
font_family MesloGS NF font_family MesloLGS NF
bold_font auto bold_font auto
italic_font auto italic_font auto
bold_italic_font auto bold_italic_font auto
@@ -7,7 +7,7 @@ font_size 15
# Font rendering improvements # Font rendering improvements
disable_ligatures never disable_ligatures never
font_features MesloGSNF +calt +liga font_features MesloLGSNF +calt +liga
text_composition_strategy platform text_composition_strategy platform
undercurl_style thin-sparse undercurl_style thin-sparse
@@ -41,7 +41,7 @@ background_blur 3
# macOS Specific # macOS Specific
hide_window_decorations yes hide_window_decorations yes
macos_titlebar_color background # macos_titlebar_color background
macos_option_as_alt yes macos_option_as_alt yes
macos_window_resizable yes macos_window_resizable yes
@@ -58,7 +58,7 @@ include ./keymap.conf
macos_show_window_title_in none macos_show_window_title_in none
# BEGIN_KITTY_THEME # BEGIN_KITTY_THEME
# Monokai Classic # Catppuccin-Macchiato
include current-theme.conf include current-theme.conf
# END_KITTY_THEME # END_KITTY_THEME
@@ -76,21 +76,19 @@ touch_scroll_multiplier 1.0
# URL Handling # URL Handling
detect_urls yes detect_urls yes
url_color #0087bd # url_color #0087bd
url_style curly url_style curly
open_url_with default open_url_with default
copy_on_select no copy_on_select no
strip_trailing_spaces never strip_trailing_spaces never
# Selection # Selection
rectangle_select_modifiers ctrl+alt
terminal_select_modifiers shift
select_by_word_characters @-./_~?&=%+# select_by_word_characters @-./_~?&=%+#
# Advanced Features # Advanced Features
allow_hyperlinks yes allow_hyperlinks yes
shell_integration enabled shell_integration enabled
term xterm-256color # term xterm-256color
# Fixed backspace mapping # Fixed backspace mapping
map backspace send_text all \x7f map backspace send_text all \x7f
@@ -110,7 +108,6 @@ clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-
clipboard_max_size 64 clipboard_max_size 64
# Notifications # Notifications
enable_notifications yes
notify_on_cmd_finish invisible 30.0 notify_on_cmd_finish invisible 30.0
# Ask for confirmation on program close (Cmd+Q) but not on tab close # Ask for confirmation on program close (Cmd+Q) but not on tab close

View File

@@ -15,15 +15,31 @@ return {
"okuuva/auto-save.nvim", "okuuva/auto-save.nvim",
version = "v1.*", version = "v1.*",
event = { "InsertLeave", "TextChanged" }, event = { "InsertLeave", "TextChanged" },
init = function()
local group = vim.api.nvim_create_augroup("autosave_message", { clear = true })
vim.api.nvim_create_autocmd("User", {
pattern = "AutoSaveWritePost",
group = group,
callback = function(opts)
local saved_buffer = opts.data and opts.data.saved_buffer
if not saved_buffer then
return
end
local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(saved_buffer), ":t")
if filename == "" then
filename = "[No Name]"
end
vim.notify("AutoSave: " .. filename, vim.log.levels.INFO, { title = "auto-save.nvim" })
end,
})
end,
opts = { opts = {
enabled = true, enabled = true,
execution_message = {
enabled = false,
},
trigger_events = { trigger_events = {
immediate_save = { "BufLeave", "FocusLost" }, immediate_save = { "BufLeave", "FocusLost" },
defer_save = { "InsertLeave", "TextChanged" }, defer_save = { "InsertLeave", "TextChanged" },
cancel_defered_save = { "InsertEnter" }, cancel_deferred_save = { "InsertEnter" },
}, },
}, },
}, },
@@ -40,6 +56,7 @@ return {
-- Git integration -- Git integration
{ {
"lewis6991/gitsigns.nvim", "lewis6991/gitsigns.nvim",
event = { "BufReadPre", "BufNewFile" },
opts = { opts = {
signs = { signs = {
add = { text = "" }, add = { text = "" },
@@ -56,11 +73,50 @@ return {
current_line_blame = false, current_line_blame = false,
} }
}, },
{ "tpope/vim-fugitive" }, {
"tpope/vim-fugitive",
cmd = { "Git", "Gvdiffsplit" },
},
{
"kdheepak/lazygit.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
cmd = {
"LazyGit",
"LazyGitConfig",
"LazyGitCurrentFile",
"LazyGitFilter",
"LazyGitFilterCurrentFile",
},
keys = {
{ "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
},
},
-- Status line -- Status line
{ import = "plugins.lualine" }, { import = "plugins.lualine" },
-- Tmux statusline generator (run :TmuxlineSnapshot ~/.config/tmux/themes/tmuxline.tmux)
{
"edkolev/tmuxline.vim",
cmd = { "Tmuxline", "TmuxlineSnapshot" },
config = function()
vim.g.tmuxline_separators = {
left = "",
left_alt = "",
right = "",
right_alt = "",
space = " ",
}
vim.g.tmuxline_preset = {
a = "#S",
win = "#I #W",
cwin = "#I #W",
y = "%H:%M",
z = "%d %b",
}
end,
},
-- FZF -- FZF
{ {
"junegunn/fzf", "junegunn/fzf",
@@ -71,12 +127,12 @@ return {
{ "junegunn/fzf.vim" }, { "junegunn/fzf.vim" },
-- Productivity -- Productivity
{ "numToStr/Comment.nvim", opts = {} }, { "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
{ "windwp/nvim-autopairs", opts = {} }, { "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
{ "tpope/vim-surround" }, { "tpope/vim-surround", event = "VeryLazy" },
-- Tmux navigation -- -- Tmux navigation
{ "christoomey/vim-tmux-navigator" }, -- { "christoomey/vim-tmux-navigator" },
-- LaTeX -- LaTeX
{ import = "plugins.vimtex" }, { import = "plugins.vimtex" },
@@ -114,22 +170,8 @@ return {
}, },
}, },
-- Leap (motion)
{
"ggandor/leap.nvim",
event = "VeryLazy",
config = function()
require('leap').add_default_mappings()
-- Override default s/S with f/F to avoid conflict with surround
vim.keymap.del({'n', 'x', 'o'}, 's')
vim.keymap.del({'n', 'x', 'o'}, 'S')
vim.keymap.set({'n', 'x', 'o'}, 'f', '<Plug>(leap-forward)')
vim.keymap.set({'n', 'x', 'o'}, 'F', '<Plug>(leap-backward)')
end,
},
-- Markdown -- Markdown
{ "SidOfc/mkdx" }, { "SidOfc/mkdx", ft = "markdown" },
{ {
"MeanderingProgrammer/render-markdown.nvim", "MeanderingProgrammer/render-markdown.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.icons" }, dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.icons" },
@@ -159,32 +201,6 @@ return {
}, },
}, },
}) })
-- Set highlights after ColorScheme event to ensure they persist
vim.api.nvim_create_autocmd("ColorScheme", {
callback = function()
-- Translucent heading backgrounds with alpha blending
vim.api.nvim_set_hl(0, 'RenderMarkdownH1Bg', { bg = '#2d5a7b', fg = 'NONE' })
vim.api.nvim_set_hl(0, 'RenderMarkdownH2Bg', { bg = '#3d5f4e', fg = 'NONE' })
vim.api.nvim_set_hl(0, 'RenderMarkdownH3Bg', { bg = '#5f5e3a', fg = 'NONE' })
vim.api.nvim_set_hl(0, 'RenderMarkdownH4Bg', { bg = '#5f4a3e', fg = 'NONE' })
vim.api.nvim_set_hl(0, 'RenderMarkdownH5Bg', { bg = '#4e4a5f', fg = 'NONE' })
vim.api.nvim_set_hl(0, 'RenderMarkdownH6Bg', { bg = '#4a5e5f', fg = 'NONE' })
-- Bold, colored heading text
vim.api.nvim_set_hl(0, 'RenderMarkdownH1', { fg = '#88c0d0', bold = true })
vim.api.nvim_set_hl(0, 'RenderMarkdownH2', { fg = '#a3be8c', bold = true })
vim.api.nvim_set_hl(0, 'RenderMarkdownH3', { fg = '#ebcb8b', bold = true })
vim.api.nvim_set_hl(0, 'RenderMarkdownH4', { fg = '#d08770', bold = true })
vim.api.nvim_set_hl(0, 'RenderMarkdownH5', { fg = '#b48ead', bold = true })
vim.api.nvim_set_hl(0, 'RenderMarkdownH6', { fg = '#8fbcbb', bold = true })
end,
})
-- Apply highlights immediately
vim.schedule(function()
vim.cmd('doautocmd ColorScheme')
end)
end, end,
}, },
@@ -205,6 +221,7 @@ return {
{ {
"lukas-reineke/indent-blankline.nvim", "lukas-reineke/indent-blankline.nvim",
main = "ibl", main = "ibl",
event = { "BufReadPost", "BufNewFile" },
opts = {}, opts = {},
}, },

View File

@@ -1,67 +1,66 @@
local colors = { local colors = {
bg = "none", base = "#1e1e2e",
fg = "#ebdbb2", surface0 = "#313244",
yellow = "#fabd2f", surface1 = "#45475a",
cyan = "#8ec07c", overlay0 = "#6c7086",
darkblue = "#458588", text = "#cdd6f4",
green = "#b8bb26", subtext = "#a6adc8",
orange = "#fe8019", crust = "#11111b",
violet = "#d3869b", mauve = "#cba6f7",
magenta = "#d3869b", blue = "#89b4fa",
blue = "#83a598", green = "#a6e3a1",
red = "#fb4934", red = "#f38ba8",
grey = "#504945", yellow = "#f9e2af",
black = "#282828", peach = "#fab387",
white = "#fbf1c7", lavender = "#b4befe",
darkgrey = "#3c3836", cyan = "#94e2d5",
lightgrey = "#665c54",
} }
local theme = { local theme = {
normal = { normal = {
a = { fg = colors.black, bg = colors.blue, gui = "bold" }, a = { fg = colors.crust, bg = colors.mauve, gui = "bold" },
b = { fg = colors.blue, bg = colors.grey }, b = { fg = colors.mauve, bg = colors.surface1 },
c = { fg = colors.white, bg = colors.darkgrey }, c = { fg = colors.text, bg = colors.base },
x = { fg = colors.white, bg = colors.darkgrey }, x = { fg = colors.text, bg = colors.base },
y = { fg = colors.blue, bg = colors.grey }, y = { fg = colors.mauve, bg = colors.surface1 },
z = { fg = colors.black, bg = colors.blue, gui = "bold" }, z = { fg = colors.crust, bg = colors.mauve, gui = "bold" },
}, },
insert = { insert = {
a = { fg = colors.black, bg = colors.green, gui = "bold" }, a = { fg = colors.crust, bg = colors.green, gui = "bold" },
b = { fg = colors.green, bg = colors.grey }, b = { fg = colors.green, bg = colors.surface1 },
c = { fg = colors.white, bg = colors.darkgrey }, c = { fg = colors.text, bg = colors.base },
x = { fg = colors.white, bg = colors.darkgrey }, x = { fg = colors.text, bg = colors.base },
y = { fg = colors.green, bg = colors.grey }, y = { fg = colors.green, bg = colors.surface1 },
z = { fg = colors.black, bg = colors.green, gui = "bold" }, z = { fg = colors.crust, bg = colors.green, gui = "bold" },
}, },
visual = { visual = {
a = { fg = colors.black, bg = colors.magenta, gui = "bold" }, a = { fg = colors.crust, bg = colors.lavender, gui = "bold" },
b = { fg = colors.magenta, bg = colors.grey }, b = { fg = colors.lavender, bg = colors.surface1 },
c = { fg = colors.white, bg = colors.darkgrey }, c = { fg = colors.text, bg = colors.base },
x = { fg = colors.white, bg = colors.darkgrey }, x = { fg = colors.text, bg = colors.base },
y = { fg = colors.magenta, bg = colors.grey }, y = { fg = colors.lavender, bg = colors.surface1 },
z = { fg = colors.black, bg = colors.magenta, gui = "bold" }, z = { fg = colors.crust, bg = colors.lavender, gui = "bold" },
}, },
replace = { replace = {
a = { fg = colors.black, bg = colors.red, gui = "bold" }, a = { fg = colors.crust, bg = colors.red, gui = "bold" },
b = { fg = colors.red, bg = colors.grey }, b = { fg = colors.red, bg = colors.surface1 },
c = { fg = colors.white, bg = colors.darkgrey }, c = { fg = colors.text, bg = colors.base },
x = { fg = colors.white, bg = colors.darkgrey }, x = { fg = colors.text, bg = colors.base },
y = { fg = colors.red, bg = colors.grey }, y = { fg = colors.red, bg = colors.surface1 },
z = { fg = colors.black, bg = colors.red, gui = "bold" }, z = { fg = colors.crust, bg = colors.red, gui = "bold" },
}, },
command = { command = {
a = { fg = colors.black, bg = colors.yellow, gui = "bold" }, a = { fg = colors.crust, bg = colors.yellow, gui = "bold" },
b = { fg = colors.yellow, bg = colors.grey }, b = { fg = colors.yellow, bg = colors.surface1 },
c = { fg = colors.white, bg = colors.darkgrey }, c = { fg = colors.text, bg = colors.base },
x = { fg = colors.white, bg = colors.darkgrey }, x = { fg = colors.text, bg = colors.base },
y = { fg = colors.yellow, bg = colors.grey }, y = { fg = colors.yellow, bg = colors.surface1 },
z = { fg = colors.black, bg = colors.yellow, gui = "bold" }, z = { fg = colors.crust, bg = colors.yellow, gui = "bold" },
}, },
inactive = { inactive = {
a = { fg = colors.white, bg = colors.darkgrey }, a = { fg = colors.subtext, bg = colors.base },
b = { fg = colors.white, bg = colors.darkgrey }, b = { fg = colors.subtext, bg = colors.base },
c = { fg = colors.white, bg = colors.darkgrey }, c = { fg = colors.subtext, bg = colors.base },
}, },
} }

View File

@@ -4,16 +4,16 @@ vim.opt.shiftwidth = 4 -- Number of spaces for indentation
vim.opt.expandtab = true -- Use spaces instead of tabs vim.opt.expandtab = true -- Use spaces instead of tabs
vim.opt.cmdheight = 0 -- Hide command line when not in use vim.opt.cmdheight = 0 -- Hide command line when not in use
vim.cmd([[highlight CursorLine guibg=#3c3836]]) -- Darker background for the line vim.cmd([[highlight CursorLine guibg=#313244]]) -- Catppuccin surface0
vim.cmd([[highlight CursorColumn guibg=#504945]]) -- Slightly darker for the column vim.cmd([[highlight CursorColumn guibg=#45475a]]) -- Catppuccin surface1
vim.cmd([[set incsearch ]]) -- Enables incremental search vim.cmd([[set incsearch ]]) -- Enables incremental search
vim.cmd([[set hlsearch ]]) -- Highlights search results vim.cmd([[set hlsearch ]]) -- Highlights search results
vim.cmd([[set ignorecase]]) -- Case insensitive search vim.cmd([[set ignorecase]]) -- Case insensitive search
vim.cmd([[set smartcase ]]) -- Case sensitive if uppercase letters are used vim.cmd([[set smartcase ]]) -- Case sensitive if uppercase letters are used
-- Coloscheme -- Colorscheme
vim.cmd([[colorscheme gruvbox]]) vim.cmd([[colorscheme catppuccin-mocha]])
vim.cmd([[set spelllang=en]]) vim.cmd([[set spelllang=en]])

View File

@@ -1,59 +0,0 @@
# Reset prefix to Ctrl-b
unbind C-a # Unbind any custom prefixes (e.g., Ctrl-a)
set-option -g prefix C-b
bind C-b send-prefix # Ensure Ctrl-b works as the prefix
# Sensible Defaults
set -g mouse on # Enable mouse support
set -g history-limit 10000 # Large scrollback history
setw -g automatic-rename off # Keep pane names static
set -g base-index 1 # Pane numbering starts at 1
setw -g pane-base-index 1 # Pane numbering starts at 1
set-option -g status-keys vi # Use vi-style keybindings
# Status Bar Customization
set -g status off
set -g status-bg black
set -g status-fg white
set -g status-interval 5
# Left: Session name
set -g status-left "#S "
# Right: Time and date
set -g status-right "%H:%M | %d-%b-%Y"
# Window options
setw -g window-status-format " #I:#W "
setw -g window-status-current-format " #I:#W "
setw -g window-status-separator ""
# Key Bindings
bind r source-file ~/.config/tmux/.tmux.conf \; display-message "Config Reloaded"
bind \\ split-window -h # Split panes horizontally
bind - split-window -v # Split panes vertically
bind h select-pane -L # Move between panes
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize panes
bind -r C-h resize-pane -L 5
bind -r C-j resize-pane -D 5
bind -r C-k resize-pane -U 5
bind -r C-l resize-pane -R 5
# Copy Mode
setw -g mode-keys vi # Vi copy mode
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-selection \; send-keys -X cancel
# Plugins (optional)
set -g @plugin 'tmux-plugins/tpm' # Tmux Plugin Manager
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'tmux-plugins/tmux-powerline'
# Initialize plugins
run '/opt/homebrew/opt/tpm/share/tpm/tpm'

Submodule tmux/plugins/tmux-urlview added at b84c876cff

View File

@@ -1,16 +1,28 @@
# Catppuccin theme preset (sleek minimal) # Catppuccin Mocha - powerline style
# Status bar
set -g status-style "bg=#1e1e2e,fg=#cdd6f4" set -g status-style "bg=#1e1e2e,fg=#cdd6f4"
set -g pane-border-style "fg=#a6adc8"
set -g pane-active-border-style "fg=#89b4fa,bold"
set -g message-style "bg=#89b4fa,fg=#1e1e2e,bold"
set -g mode-style "bg=#89b4fa,fg=#1e1e2e,bold"
set -g window-status-style "fg=#a6adc8,bg=#1e1e2e" # Pane borders
set -g window-status-format " #[fg=#a6adc8]#I #[fg=#a6adc8]#W " set -g pane-border-style "fg=#313244"
set -g window-status-current-style "fg=#1e1e2e,bg=#74c7ec,bold" set -g pane-active-border-style "fg=#cba6f7,bold"
set -g window-status-current-format " #[fg=#1e1e2e,bg=#74c7ec,bold]#I #[fg=#1e1e2e,bg=#74c7ec,bold]#W " set -g pane-border-format "#[fg=#cdd6f4] #P #[fg=#6c7086]| #[fg=#89b4fa]#{pane_current_command} #[fg=#6c7086]| #[fg=#a6adc8]#{pane_current_path}"
set -g status-left "#[fg=#89b4fa,bold] #S " # Message styling
set -g status-right "#[fg=#a6adc8]#{pane_current_command} #[fg=#a6adc8]| #[fg=#cdd6f4]%H:%M #[fg=#a6adc8]| #[fg=#cdd6f4]%a %d %b " set -g message-style "bg=#cba6f7,fg=#1e1e2e,bold"
set -g message-command-style "bg=#cba6f7,fg=#1e1e2e,bold"
# Mode styling
set -g mode-style "bg=#cba6f7,fg=#1e1e2e,bold"
# Window tabs - inactive subtle, active with powerline arrows
set -g window-status-style "fg=#6c7086,bg=#1e1e2e"
set -g window-status-format " #[fg=#6c7086]#I #W "
set -g window-status-current-style "fg=#1e1e2e,bg=#cba6f7,bold"
set -g window-status-current-format "#[fg=#cba6f7,bg=#1e1e2e] #[fg=#1e1e2e,bg=#cba6f7,bold] #I #[fg=#cba6f7,bg=#89b4fa] #[fg=#1e1e2e,bg=#89b4fa,bold] #W #[fg=#89b4fa,bg=#1e1e2e,nobold] "
set -g window-status-separator "" set -g window-status-separator ""
# Status bar content
set -g status-left "#[fg=#1e1e2e,bg=#cba6f7,bold] 󰅬 #S #[fg=#cba6f7,bg=#1e1e2e] "
set -g status-right "#[fg=#cba6f7,bg=#1e1e2e]#[fg=#1e1e2e,bg=#cba6f7] %H:%M %d %b "
set -g status-justify left set -g status-justify left

View File

@@ -0,0 +1,5 @@
# This tmux statusbar config was created by tmuxline.vim
# on Sun, 01 Mar 2026
set -g status-style fg=colour#3b4261,bg=colour#1e2030
set -g window-status-current-style fg=colour#828bb8,bg=colour#1e2030

View File

@@ -1,5 +1,5 @@
# ============================================ # ============================================
# TMUX CONFIGURATION - CLEAN GRUVBOX # TMUX CONFIGURATION
# ============================================ # ============================================
# ============================================ # ============================================
@@ -10,16 +10,16 @@
set -g allow-passthrough on set -g allow-passthrough on
set -ga update-environment TERM set -ga update-environment TERM
set -ga update-environment TERM_PROGRAM set -ga update-environment TERM_PROGRAM
set -g default-terminal "xterm-256color" set -g default-terminal "tmux-256color"
set-option -ga terminal-overrides ",xterm-kitty:Tc,*:Tc,*:RGB" set-option -ga terminal-overrides ",xterm-kitty:Tc,*:Tc,*:RGB"
set -as terminal-features ",xterm-256color:RGB,tmux-256color:RGB"
# Shell configuration # Shell configuration
set -g default-shell /bin/zsh
set -g default-command /bin/zsh set -g default-command /bin/zsh
# Environment variables for proper shell integration # Environment variables for proper shell integration
set -ga update-environment KITTY_WINDOW_ID # KITTY_WINDOW_ID and KITTY_PID intentionally NOT passed through
set -ga update-environment KITTY_PID # so Yazi inside tmux doesn't auto-detect Kitty and send kitty graphics protocol
set -ga update-environment XDG_CONFIG_HOME set -ga update-environment XDG_CONFIG_HOME
set -ga update-environment ZDOTDIR set -ga update-environment ZDOTDIR
@@ -53,8 +53,8 @@ set -g display-panes-time 2000
# Show messages longer # Show messages longer
set -g display-time 2000 set -g display-time 2000
# Aggressive resize for multiple clients # Resize to largest attached client
setw -g aggressive-resize on set -g window-size largest
# ============================================ # ============================================
# VI-LIKE KEYBINDINGS # VI-LIKE KEYBINDINGS
@@ -64,12 +64,7 @@ setw -g aggressive-resize on
setw -g mode-keys vi setw -g mode-keys vi
set -g status-keys vi set -g status-keys vi
# Smart pane switching with awareness of Vim splits # Smart pane switching with vim awareness handled by vim-tmux-navigator plugin
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(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'
# Vi-like pane resizing # Vi-like pane resizing
bind -r H resize-pane -L 5 bind -r H resize-pane -L 5
@@ -89,18 +84,17 @@ bind Escape copy-mode
# PANE MANAGEMENT # PANE MANAGEMENT
# ============================================ # ============================================
# Split panes with v and s (vi-like) # Split panes with v and s (vi-like), defaults % and " still work
bind v split-window -h -c "#{pane_current_path}" bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}" bind s split-window -v -c "#{pane_current_path}"
unbind '"' bind % split-window -h -c "#{pane_current_path}"
unbind % bind '"' split-window -v -c "#{pane_current_path}"
# New window in current path # New window in current path
bind c new-window -c "#{pane_current_path}" bind c new-window -c "#{pane_current_path}"
# Quick pane cycling # Quick pane cycling
bind -r C-h select-window -t :- bind -r C-h select-window -t :-
# bind -r C-l select-window -t :+
# Kill pane without confirmation # Kill pane without confirmation
bind x kill-pane bind x kill-pane
@@ -111,12 +105,6 @@ bind X kill-window
# Toggle zoom # Toggle zoom
bind z resize-pane -Z bind z resize-pane -Z
# Flash currently active pane border (helpful when visually lost)
bind Space display-message "Active pane: #P (#{pane_current_command})"
# Synchronize panes with status message
bind y set-window-option synchronize-panes \; display-message "Synchronize panes #{?synchronize-panes,ON,OFF}"
# Quick session switching # Quick session switching
bind S choose-tree -sZ -O name bind S choose-tree -sZ -O name
@@ -132,61 +120,48 @@ set -g mouse on
# Don't jump to bottom when mouse selecting # Don't jump to bottom when mouse selecting
unbind -T copy-mode-vi MouseDragEnd1Pane unbind -T copy-mode-vi MouseDragEnd1Pane
# URL handling - enable clickable URLs
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-urlview'
# Nerd font window name plugin
set -g @plugin 'joshmedeski/tmux-nerd-font-window-name'
# Mouse click behavior - simple pane selection without copy-mode # Mouse click behavior - simple pane selection without copy-mode
bind-key -T copy-mode-vi MouseDown1Pane select-pane bind-key -T copy-mode-vi MouseDown1Pane select-pane
bind-key -T copy-mode MouseDown1Pane select-pane bind-key -T copy-mode MouseDown1Pane select-pane
bind-key -n MouseDown1Pane select-pane -t = bind-key -n MouseDown1Pane select-pane -t =
# ============================================ # ============================================
# GRUVBOX STYLING # PLUGINS
# ============================================
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'laktak/extrakto'
set -g @plugin 'wfxr/tmux-fzf-url'
set -g @plugin 'christoomey/vim-tmux-navigator'
set -g @plugin 'fcsonline/tmux-thumbs'
set -g @plugin 'omerxx/tmux-sessionx'
set -g @plugin 'joshmedeski/tmux-nerd-font-window-name'
# Persist and restore tmux sessions across restarts
set -g @resurrect-capture-pane-contents 'on'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'
# sessionx
set -g @sessionx-bind 'o'
# tmux-thumbs
set -g @thumbs-key 'f'
set -g @thumbs-command 'echo -n {} | pbcopy && tmux display-message "Copied!"'
# ============================================
# STYLING
# ============================================ # ============================================
# Status bar position
set -g status-position top set -g status-position top
# Status bar styling
set -g status-style "bg=#3c3836,fg=#ebdbb2"
set -g status-left-length 100
set -g status-right-length 100
# Pane borders (strong active contrast)
set -g pane-border-style "fg=#3c3836"
set -g pane-active-border-style "fg=#fabd2f,bold"
# Show pane labels on borders for easier focus tracking
set -g pane-border-status top set -g pane-border-status top
set -g pane-border-format "#[fg=#ebdbb2] #P #[fg=#928374]| #[fg=#83a598]#{pane_current_command} #[fg=#928374]| #[fg=#bdae93]#{pane_current_path}" set -g pane-border-format "#[fg=#cdd6f4] #P #[fg=#6c7086]| #[fg=#89b4fa]#{pane_current_command} #[fg=#6c7086]| #[fg=#a6adc8]#{pane_current_path}"
set -g clock-mode-style 24
# Message styling
set -g message-style "bg=#d79921,fg=#282828,bold"
set -g message-command-style "bg=#d79921,fg=#282828,bold"
# Mode styling
set -g mode-style "bg=#d79921,fg=#282828,bold"
# Colorful window status styling
set -g window-status-style "fg=#a89984,bg=#3c3836"
set -g window-status-format "#[fg=#282828,bg=#504945] #I #[fg=#a89984,bg=#3c3836] #W #[fg=#3c3836,bg=default]"
# Current window status (powerline highlight)
set -g window-status-current-style "fg=#282828,bg=#fabd2f,bold"
set -g window-status-current-format "#[fg=#282828,bg=#fabd2f,bold] #I #[fg=#282828,bg=#d79921,bold] #W #[fg=#d79921,bg=default]"
# Status bar content
set -g status-left "#[fg=#282828,bg=#d79921,bold] 󰅬 #S #[fg=#d79921,bg=#3c3836]"
set -g status-right "#[fg=#a89984] %H:%M #[fg=#d79921,bg=#3c3836]#[fg=#282828,bg=#d79921] %d %b "
# Status bar separators
set -g window-status-separator ""
set -g status-justify left
set -g status-interval 1
# Activity monitoring # Activity monitoring
set -g monitor-activity on set -g monitor-activity on
@@ -198,48 +173,31 @@ set -g monitor-bell on
set -g visual-bell off set -g visual-bell off
set -g bell-action any set -g bell-action any
# Clock colors
set -g clock-mode-colour "#d79921"
set -g clock-mode-style 24
# Optionally also dim inactive windows further
set -g window-status-style "fg=#928374,bg=#3c3836"
# ============================================ # ============================================
# TRANSPARENCY SETTINGS # TRANSPARENCY
# ============================================ # ============================================
# Make pane backgrounds transparent
set -g window-style "bg=default" set -g window-style "bg=default"
set -g window-active-style "bg=default" set -g window-active-style "bg=default"
# ============================================ # ============================================
# RELOAD CONFIG # THEME
# ============================================ # ============================================
source-file ~/.config/tmux/themes/gruvbox.tmux source-file ~/.config/tmux/themes/tmuxline.tmux
# Toggle top status bar on/off (Prefix + b) # ============================================
bind b if -F "#{==:#{status},on}" "set -g status off ; set -g pane-border-status off" "set -g status on ; set -g pane-border-status top" # KEYBINDINGS
# ============================================
# Window switching with Prefix + number # Three-way toggle: top → bottom → hidden → top
bind-key -T prefix 1 select-window -t :=1 bind b if -F "#{==:#{status},off}" \
bind-key -T prefix 2 select-window -t :=2 "set -g status on ; set -g status-position top ; set -g pane-border-status top" \
bind-key -T prefix 3 select-window -t :=3 "if -F '#{==:#{status-position},top}' \
bind-key -T prefix 4 select-window -t :=4 'set -g status-position bottom' \
bind-key -T prefix 5 select-window -t :=5 'set -g status off ; set -g pane-border-status off'"
bind-key -T prefix 6 select-window -t :=6
bind-key -T prefix 7 select-window -t :=7
bind-key -T prefix 8 select-window -t :=8
bind-key -T prefix 9 select-window -t :=9
bind-key -T prefix 0 select-window -t :=10
# Theme switcher (Prefix + Shift+1/2/3 => !/@/#) # Reload config
bind ! source-file ~/.config/tmux/themes/gruvbox.tmux
bind @ source-file ~/.config/tmux/themes/catppuccin.tmux
bind '#' source-file ~/.config/tmux/themes/tokyonight.tmux
# Reload config file with message
bind r source-file ~/.config/tmux/tmux.conf \; display-message "󰑓 Config reloaded!" bind r source-file ~/.config/tmux/tmux.conf \; display-message "󰑓 Config reloaded!"
# Initialize TMUX plugin manager (keep this line at the very bottom) # Initialize TMUX plugin manager (keep this line at the very bottom)

View File

@@ -104,6 +104,48 @@ keymap = [
# Filter # Filter
{ on = "f", run = "filter --smart", desc = "Filter files" }, { on = "f", run = "filter --smart", desc = "Filter files" },
# Copy to destination (Ctrl+Y)
{ on = [ "<C-y>", "h" ], run = "shell 'cp -r \"$@\" ~/' --confirm", desc = "Copy to home" },
{ on = [ "<C-y>", "c" ], run = "shell 'cp -r \"$@\" ~/.config/' --confirm", desc = "Copy to ~/.config" },
{ on = [ "<C-y>", "d" ], run = "shell 'cp -r \"$@\" ~/Downloads/' --confirm", desc = "Copy to Downloads" },
{ on = [ "<C-y>", "D" ], run = "shell 'cp -r \"$@\" ~/Documents/' --confirm", desc = "Copy to Documents" },
{ on = [ "<C-y>", "w" ], run = "shell 'cp -r \"$@\" ~/Pictures/Wallpapers/' --confirm", desc = "Copy to Wallpapers" },
# Copy to Torrents subdirs
{ on = [ "<C-y>", "t", "b" ], run = "shell 'cp -r \"$@\" ~/Torrents/Books/' --confirm", desc = "Copy to Torrents/Books" },
{ on = [ "<C-y>", "t", "a" ], run = "shell 'cp -r \"$@\" ~/Torrents/Audiobooks/' --confirm", desc = "Copy to Torrents/Audiobooks" },
{ on = [ "<C-y>", "t", "s" ], run = "shell 'cp -r \"$@\" ~/Torrents/Shows/' --confirm", desc = "Copy to Torrents/Shows" },
{ on = [ "<C-y>", "t", "m" ], run = "shell 'cp -r \"$@\" ~/Torrents/Movies/' --confirm", desc = "Copy to Torrents/Movies" },
# Copy to Obsidian
{ on = [ "<C-y>", "o", "p" ], run = "shell 'cp -r \"$@\" ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Private/' --confirm", desc = "Copy to Obsidian/Private" },
{ on = [ "<C-y>", "o", "w" ], run = "shell 'cp -r \"$@\" ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Work/' --confirm", desc = "Copy to Obsidian/Work" },
# Copy to JKU dirs
{ on = [ "<C-y>", "j", "b" ], run = "shell 'cp -r \"$@\" ~/Documents/JKU/Studium/BWL/' --confirm", desc = "Copy to JKU/BWL" },
{ on = [ "<C-y>", "j", "w" ], run = "shell 'cp -r \"$@\" ~/Documents/JKU/Work/' --confirm", desc = "Copy to JKU/Work" },
# Move to destination (Ctrl+X)
{ on = [ "<C-x>", "h" ], run = "shell 'mv \"$@\" ~/' --confirm", desc = "Move to home" },
{ on = [ "<C-x>", "c" ], run = "shell 'mv \"$@\" ~/.config/' --confirm", desc = "Move to ~/.config" },
{ on = [ "<C-x>", "d" ], run = "shell 'mv \"$@\" ~/Downloads/' --confirm", desc = "Move to Downloads" },
{ on = [ "<C-x>", "D" ], run = "shell 'mv \"$@\" ~/Documents/' --confirm", desc = "Move to Documents" },
{ on = [ "<C-x>", "w" ], run = "shell 'mv \"$@\" ~/Pictures/Wallpapers/' --confirm", desc = "Move to Wallpapers" },
# Move to Torrents subdirs
{ on = [ "<C-x>", "t", "b" ], run = "shell 'mv \"$@\" ~/Torrents/Books/' --confirm", desc = "Move to Torrents/Books" },
{ on = [ "<C-x>", "t", "a" ], run = "shell 'mv \"$@\" ~/Torrents/Audiobooks/' --confirm", desc = "Move to Torrents/Audiobooks" },
{ on = [ "<C-x>", "t", "s" ], run = "shell 'mv \"$@\" ~/Torrents/Shows/' --confirm", desc = "Move to Torrents/Shows" },
{ on = [ "<C-x>", "t", "m" ], run = "shell 'mv \"$@\" ~/Torrents/Movies/' --confirm", desc = "Move to Torrents/Movies" },
# Move to Obsidian
{ on = [ "<C-x>", "o", "p" ], run = "shell 'mv \"$@\" ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Private/' --confirm", desc = "Move to Obsidian/Private" },
{ on = [ "<C-x>", "o", "w" ], run = "shell 'mv \"$@\" ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Work/' --confirm", desc = "Move to Obsidian/Work" },
# Move to JKU dirs
{ on = [ "<C-x>", "j", "b" ], run = "shell 'mv \"$@\" ~/Documents/JKU/Studium/BWL/' --confirm", desc = "Move to JKU/BWL" },
{ on = [ "<C-x>", "j", "w" ], run = "shell 'mv \"$@\" ~/Documents/JKU/Work/' --confirm", desc = "Move to JKU/Work" },
# Find # Find
{ on = "/", run = "find --smart", desc = "Find next file" }, { on = "/", run = "find --smart", desc = "Find next file" },
{ on = "?", run = "find --previous --smart", desc = "Find previous file" }, { on = "?", run = "find --previous --smart", desc = "Find previous file" },
@@ -142,17 +184,24 @@ keymap = [
{ on = [ "g", "j", "b" ], run = "cd \"~/Documents/JKU/Studium/BWL\"", desc = "Goto BWL" }, { on = [ "g", "j", "b" ], run = "cd \"~/Documents/JKU/Studium/BWL\"", desc = "Goto BWL" },
{ on = [ "g", "j", "w" ], run = "cd \"~/Documents/JKU/Work\"", desc = "Goto Work(local)" }, { on = [ "g", "j", "w" ], run = "cd \"~/Documents/JKU/Work\"", desc = "Goto Work(local)" },
{ on = [ "g", "w" ], run = "cd \"~/Pictures/Wallpapers\"", desc = "Goto Wallpapers)" }, { on = [ "g", "w" ], run = "cd \"~/Pictures/Wallpapers\"", desc = "Goto Wallpapers)" },
{ on = [ "g", "o", "p" ], run = "cd ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Privat/", desc = "Goto Obsidian/Privat" }, { on = [ "g", "o", "p" ], run = "cd ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Private/", desc = "Goto Obsidian/Privat" },
{ on = [ "g", "o", "d" ], run = "shell --confirm 'touch $(date +%F).md'", desc = "Create Daily Note in Obsidian" }, { on = [ "g", "o", "d" ], run = "shell --confirm 'touch $(date +%F).md'", desc = "Create Daily Note in Obsidian" },
{ on = [ "g", "o", "w" ], run = "cd ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Work/", desc = "Goto Obsidian/Work" }, { on = [ "g", "o", "w" ], run = "cd ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Work/", desc = "Goto Obsidian/Work" },
#Work Related - Network drive #Work Related - Network drive
{ on = [ "g", "a", "<Space>" ], run = "cd /Volumes/AK127132", desc = "Goto AK127132" }, { on = [ "g", "a", "<Space>" ], run = "cd /Volumes/TNHOME/home/AK127132", desc = "Goto AK127132" },
{ on = [ "g", "a", "z" ], run = "cd /Volumes/AK127132/Zeitaufzeichnung", desc = "Goto Zeitaufzeichnung" }, { on = [ "g", "a", "z" ], run = "cd /Volumes/TNHOME/home/AK127132/Zeitaufzeichnung", desc = "Goto Zeitaufzeichnung" },
{ on = [ "g", "i", "<Space>" ], run = "cd /Volumes/ipec/intern", desc = "Goto Intern" }, { on = [ "g", "i", "<Space>" ], run = "cd /Volumes/ipec/intern", desc = "Goto Intern" },
{ on = [ "g", "p", "b" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P54_EDIH TBI 80 Brückner\"", desc = "Goto Brückner" }, { on = [ "g", "p", "b" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P63_Berndorf Band\"", desc = "Goto Berndorf" },
{ on = [ "g", "p", "s" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P42b_Senoplast SenoSmartCoex\"", desc = "Goto SenoSmartCoex" }, { on = [ "g", "p", "s" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P42b_Senoplast SenoSmartCoex\"", desc = "Goto SenoSmartCoex" },
{ on = [ "g", "p", "n" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P59_EDIH TBI 193 Naku\"", desc = "Goto SenoSmartCoex" }, { on = [ "g", "p", "m" , "<Space>" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL\"", desc = "Goto MoNoQEL" },
{ on = [ "g", "p", "m" , "p" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/02 Projektmanagemant/\"", desc = "Goto MoNoQEL/Projektmanagement" },
{ on = [ "g", "p", "m" , "1" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/03 Arbeitspakete/AP1 Projektmanagement und Dissemination/\"", desc = "Goto MoNoQEL/AP1 Projektmanagemant & Dissemination" },
{ on = [ "g", "p", "m" , "2" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/03 Arbeitspakete/AP2 Grundlagenforschung zu optischen Kontrastmechanismen/\"", desc = "Goto MoNoQEL/AP2 Grundlagenforschung" },
{ on = [ "g", "p", "m" , "3" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/03 Arbeitspakete/AP3 Optimierung hochauflösender OCT-Messtechnik/\"", desc = "Goto MoNoQEL/AP3 OCT-Optimierung" },
{ on = [ "g", "p", "m" , "4" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/03 Arbeitspakete/AP4 KI-gestützte Bildanalyse und Defektklassifizierung/\"", desc = "Goto MoNoQEL/AP4 Bildanalyse" },
{ on = [ "g", "p", "m" , "5" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/03 Arbeitspakete/AP5 Prozessintegration und Inline-Demonstration/\"", desc = "Goto MoNoQEL/AP5 Prozessintegration" },
{ on = [ "g", "p", "m" , "6" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P62_MoNoQEL/03 Arbeitspakete/AP6 Systemvalidierung und Technologietransfer/\"", desc = "Goto MoNoQEL/AP6 Systemvalidierung" },
{ on = [ "g", "i", "p" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen/Projektstatusberichte\"", desc = "Goto Projektstatusberichte" }, { on = [ "g", "i", "p" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen/Projektstatusberichte\"", desc = "Goto Projektstatusberichte" },
{ on = [ "g", "i", "b" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen\"", desc = "Goto Institutsbesprechungen" }, { on = [ "g", "i", "b" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen\"", desc = "Goto Institutsbesprechungen" },

View File

@@ -1,388 +0,0 @@
#. A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/keymap.json"
[manager]
keymap = [
{ on = "<Esc>", run = "escape", desc = "Exit visual mode, clear selected, or cancel search" },
{ on = "<C-[>", run = "escape", desc = "Exit visual mode, clear selected, or cancel search" },
{ on = "q", run = "quit", desc = "Quit the process" },
{ on = "Q", run = "quit --no-cwd-file", desc = "Quit the process without outputting cwd-file" },
{ on = "<C-c>", run = "close", desc = "Close the current tab, or quit if it's last" },
{ on = "<C-z>", run = "suspend", desc = "Suspend the process" },
# Hopping
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<C-u>", run = "arrow -50%", desc = "Move cursor up half page" },
{ on = "<C-d>", run = "arrow 50%", desc = "Move cursor down half page" },
{ on = "<C-b>", run = "arrow -100%", desc = "Move cursor up one page" },
{ on = "<C-f>", run = "arrow 100%", desc = "Move cursor down one page" },
{ on = "<S-PageUp>", run = "arrow -50%", desc = "Move cursor up half page" },
{ on = "<S-PageDown>", run = "arrow 50%", desc = "Move cursor down half page" },
{ on = "<PageUp>", run = "arrow -100%", desc = "Move cursor up one page" },
{ on = "<PageDown>", run = "arrow 100%", desc = "Move cursor down one page" },
{ on = [ "g", "g" ], run = "arrow -99999999", desc = "Move cursor to the top" },
{ on = "G", run = "arrow 99999999", desc = "Move cursor to the bottom" },
# Navigation
{ on = "h", run = "leave", desc = "Go back to the parent directory" },
{ on = "l", run = "enter", desc = "Enter the child directory" },
{ on = "<Left>", run = "leave", desc = "Go back to the parent directory" },
{ on = "<Right>", run = "enter", desc = "Enter the child directory" },
{ on = "H", run = "back", desc = "Go back to the previous directory" },
{ on = "L", run = "forward", desc = "Go forward to the next directory" },
# Toggle
{ on = "<Space>", run = [ "toggle", "arrow 1" ], desc = "Toggle the current selection state" },
{ on = "<C-a>", run = "toggle_all --state=on", desc = "Select all files" },
{ on = "<C-r>", run = "toggle_all", desc = "Invert selection of all files" },
# Visual mode
{ on = "v", run = "visual_mode", desc = "Enter visual mode (selection mode)" },
{ on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
# Seeking
{ on = "K", run = "seek -5", desc = "Seek up 5 units in the preview" },
{ on = "J", run = "seek 5", desc = "Seek down 5 units in the preview" },
# Spotting
{ on = "<Tab>", run = "spot", desc = "Spot hovered file" },
# Operation
{ on = "o", run = "open", desc = "Open selected files" },
{ on = "O", run = "open --interactive", desc = "Open selected files interactively" },
{ on = "<Enter>", run = "open", desc = "Open selected files" },
{ on = "<S-Enter>", run = "open --interactive", desc = "Open selected files interactively" },
{ on = "y", run = "yank", desc = "Yank selected files (copy)" },
{ on = "x", run = "yank --cut", desc = "Yank selected files (cut)" },
{ on = "p", run = "paste", desc = "Paste yanked files" },
{ on = "P", run = "paste --force", desc = "Paste yanked files (overwrite if the destination exists)" },
{ on = "-", run = "link", desc = "Symlink the absolute path of yanked files" },
{ on = "_", run = "link --relative", desc = "Symlink the relative path of yanked files" },
{ on = "<C-->", run = "hardlink", desc = "Hardlink yanked files" },
{ on = "Y", run = "unyank", desc = "Cancel the yank status" },
{ on = "X", run = "unyank", desc = "Cancel the yank status" },
{ on = "d", run = "remove", desc = "Trash selected files" },
{ on = "D", run = "remove --permanently", desc = "Permanently delete selected files" },
{ on = "a", run = "create", desc = "Create a file (ends with / for directories)" },
{ on = "r", run = "rename --cursor=before_ext", desc = "Rename selected file(s)" },
{ on = ";", run = "shell --interactive", desc = "Run a shell command" },
{ on = ":", run = "shell --block --interactive", desc = "Run a shell command (block until finishes)" },
{ on = ".", run = "hidden toggle", desc = "Toggle the visibility of hidden files" },
{ on = "s", run = "search --via=fd", desc = "Search files by name via fd" },
{ on = "S", run = "search --via=rg", desc = "Search files by content via ripgrep" },
{ on = "<C-s>", run = "escape --search", desc = "Cancel the ongoing search" },
{ on = "z", run = "plugin zoxide", desc = "Jump to a directory via zoxide" },
{ on = "Z", run = "plugin fzf", desc = "Jump to a file/directory via fzf" },
# Linemode
{ on = [ "m", "s" ], run = "linemode size", desc = "Linemode: size" },
{ on = [ "m", "p" ], run = "linemode permissions", desc = "Linemode: permissions" },
{ on = [ "m", "b" ], run = "linemode btime", desc = "Linemode: btime" },
{ on = [ "m", "m" ], run = "linemode mtime", desc = "Linemode: mtime" },
{ on = [ "m", "o" ], run = "linemode owner", desc = "Linemode: owner" },
{ on = [ "m", "n" ], run = "linemode none", desc = "Linemode: none" },
# Copy
{ on = [ "c", "c" ], run = "copy path", desc = "Copy the file path" },
{ on = [ "c", "d" ], run = "copy dirname", desc = "Copy the directory path" },
{ on = [ "c", "f" ], run = "copy filename", desc = "Copy the filename" },
{ on = [ "c", "n" ], run = "copy name_without_ext", desc = "Copy the filename without extension" },
# Filter
{ on = "f", run = "filter --smart", desc = "Filter files" },
# Find
{ on = "/", run = "find --smart", desc = "Find next file" },
{ on = "?", run = "find --previous --smart", desc = "Find previous file" },
{ on = "n", run = "find_arrow", desc = "Goto the next found" },
{ on = "N", run = "find_arrow --previous", desc = "Goto the previous found" },
# Sorting
{ on = [ ",", "m" ], run = [ "sort mtime --reverse=no", "linemode mtime" ], desc = "Sort by modified time" },
{ on = [ ",", "M" ], run = [ "sort mtime --reverse", "linemode mtime" ], desc = "Sort by modified time (reverse)" },
{ on = [ ",", "b" ], run = [ "sort btime --reverse=no", "linemode btime" ], desc = "Sort by birth time" },
{ on = [ ",", "B" ], run = [ "sort btime --reverse", "linemode btime" ], desc = "Sort by birth time (reverse)" },
{ on = [ ",", "e" ], run = "sort extension --reverse=no", desc = "Sort by extension" },
{ on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" },
{ on = [ ",", "a" ], run = "sort alphabetical --reverse=no", desc = "Sort alphabetically" },
{ on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" },
{ on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" },
{ on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" },
{ on = [ ",", "s" ], run = [ "sort size --reverse=no", "linemode size" ], desc = "Sort by size" },
{ on = [ ",", "S" ], run = [ "sort size --reverse", "linemode size" ], desc = "Sort by size (reverse)" },
{ on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" },
# Goto
{ on = [ "g", "h" ], run = "cd ~", desc = "Go home" },
{ on = [ "g", "c" ], run = "cd ~/.config", desc = "Goto ~/.config" },
{ on = [ "g", "v" ], run = "cd /Volumes", desc = "Goto /Volumes" },
#Media and Docs
{ on = [ "g", "d" ], run = "cd ~/Downloads", desc = "Goto ~/Downloads" },
{ on = [ "g", "D" ], run = "cd ~/Documents", desc = "Goto ~/Documents" },
{ on = [ "g", "t" , "<Space>" ], run = "cd ~/Torrents", desc = "Goto ~/Torrents" },
{ on = [ "g", "t", "b"], run = "cd ~/Torrents/Books", desc = "Goto Books" },
{ on = [ "g", "t", "a"], run = "cd ~/Torrents/Audiobooks", desc = "Goto Books" },
{ on = [ "g", "t", "s"], run = "cd ~/Torrents/Shows", desc = "Goto Shows" },
{ on = [ "g", "t", "m"], run = "cd ~/Torrents/Movies", desc = "Goto Shows" },
{ on = [ "g", "s" ], run = "cd \"~/Music/Sheet Music/Alto Saxophone\"", desc = "Goto Sax Sheets" },
#Studies
{ on = [ "g", "j", "b" ], run = "cd \"~/Documents/JKU/Studium/BWL\"", desc = "Goto BWL" },
{ on = [ "g", "j", "w" ], run = "cd \"~/Documents/JKU/Work\"", desc = "Goto Work(local)" },
{ on = [ "g", "o", "p" ], run = "cd ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Privat/", desc = "Goto Obsidian/Privat" },
{ on = [ "g", "o", "d" ], run = "shell --confirm 'touch $(date +%F).md'", desc = "Create Daily Note in Obsidian" },
{ on = [ "g", "o", "w" ], run = "cd ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/Work/", desc = "Goto Obsidian/Work" },
#Work Related - Network drive
{ on = [ "g", "a", "<Space>" ], run = "cd /Volumes/AK127132", desc = "Goto AK127132" },
{ on = [ "g", "a", "z" ], run = "cd /Volumes/AK127132/Zeitaufzeichnung", desc = "Goto Zeitaufzeichnung" },
{ on = [ "g", "i", "<Space>" ], run = "cd /Volumes/ipec/intern", desc = "Goto Intern" },
{ on = [ "g", "p", "b" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P54_EDIH TBI 80 Brückner\"", desc = "Goto Brückner" },
{ on = [ "g", "p", "s" ], run = "cd \"/Volumes/ipec/intern/02_Projekte/P42b_Senoplast SenoSmartCoex\"", desc = "Goto SenoSmartCoex" },
{ on = [ "g", "i", "p" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen/Projektstatusberichte\"", desc = "Goto Projektstatusberichte" },
{ on = [ "g", "i", "b" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen\"", desc = "Goto Institutsbesprechungen" },
{ on = [ "g", "<Space>" ], run = "cd --interactive", desc = "Jump interactively" },
{ on = "R", run = "open -a Finder .", desc = "Open current folder in Finder" },
# Tabs
{ on = "t", run = "tab_create --current", desc = "Create a new tab with CWD" },
{ on = "1", run = "tab_switch 0", desc = "Switch to the first tab" },
{ on = "2", run = "tab_switch 1", desc = "Switch to the second tab" },
{ on = "3", run = "tab_switch 2", desc = "Switch to the third tab" },
{ on = "4", run = "tab_switch 3", desc = "Switch to the fourth tab" },
{ on = "5", run = "tab_switch 4", desc = "Switch to the fifth tab" },
{ on = "6", run = "tab_switch 5", desc = "Switch to the sixth tab" },
{ on = "7", run = "tab_switch 6", desc = "Switch to the seventh tab" },
{ on = "8", run = "tab_switch 7", desc = "Switch to the eighth tab" },
{ on = "9", run = "tab_switch 8", desc = "Switch to the ninth tab" },
{ on = "[", run = "tab_switch -1 --relative", desc = "Switch to the previous tab" },
{ on = "]", run = "tab_switch 1 --relative", desc = "Switch to the next tab" },
{ on = "{", run = "tab_swap -1", desc = "Swap current tab with previous tab" },
{ on = "}", run = "tab_swap 1", desc = "Swap current tab with next tab" },
# Tasks
{ on = "w", run = "tasks_show", desc = "Show task manager" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[tasks]
keymap = [
{ on = "<Esc>", run = "close", desc = "Close task manager" },
{ on = "<C-[>", run = "close", desc = "Close task manager" },
{ on = "<C-c>", run = "close", desc = "Close task manager" },
{ on = "w", run = "close", desc = "Close task manager" },
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Enter>", run = "inspect", desc = "Inspect the task" },
{ on = "x", run = "cancel", desc = "Cancel the task" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[spot]
keymap = [
{ on = "<Esc>", run = "close", desc = "Close the spot" },
{ on = "<C-[>", run = "close", desc = "Close the spot" },
{ on = "<C-c>", run = "close", desc = "Close the spot" },
{ on = "<Tab>", run = "close", desc = "Close the spot" },
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "h", run = "swipe -1", desc = "Swipe to the next file" },
{ on = "l", run = "swipe 1", desc = "Swipe to the previous file" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Left>", run = "swipe -1", desc = "Swipe to the next file" },
{ on = "<Right>", run = "swipe 1", desc = "Swipe to the previous file" },
# Copy
{ on = [ "c", "c" ], run = "copy cell", desc = "Copy selected cell" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[pick]
keymap = [
{ on = "<Esc>", run = "close", desc = "Cancel pick" },
{ on = "<C-[>", run = "close", desc = "Cancel pick" },
{ on = "<C-c>", run = "close", desc = "Cancel pick" },
{ on = "<Enter>", run = "close --submit", desc = "Submit the pick" },
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[input]
keymap = [
{ on = "<C-c>", run = "close", desc = "Cancel input" },
{ on = "<Enter>", run = "close --submit", desc = "Submit input" },
{ on = "<Esc>", run = "escape", desc = "Go back the normal mode, or cancel input" },
{ on = "<C-[>", run = "escape", desc = "Go back the normal mode, or cancel input" },
# Mode
{ on = "i", run = "insert", desc = "Enter insert mode" },
{ on = "a", run = "insert --append", desc = "Enter append mode" },
{ on = "I", run = [ "move -999", "insert" ], desc = "Move to the BOL, and enter insert mode" },
{ on = "A", run = [ "move 999", "insert --append" ], desc = "Move to the EOL, and enter append mode" },
{ on = "v", run = "visual", desc = "Enter visual mode" },
{ on = "V", run = [ "move -999", "visual", "move 999" ], desc = "Enter visual mode and select all" },
# Character-wise movement
{ on = "h", run = "move -1", desc = "Move back a character" },
{ on = "l", run = "move 1", desc = "Move forward a character" },
{ on = "<Left>", run = "move -1", desc = "Move back a character" },
{ on = "<Right>", run = "move 1", desc = "Move forward a character" },
{ on = "<C-b>", run = "move -1", desc = "Move back a character" },
{ on = "<C-f>", run = "move 1", desc = "Move forward a character" },
# Word-wise movement
{ on = "b", run = "backward", desc = "Move back to the start of the current or previous word" },
{ on = "w", run = "forward", desc = "Move forward to the start of the next word" },
{ on = "e", run = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
{ on = "<A-b>", run = "backward", desc = "Move back to the start of the current or previous word" },
{ on = "<A-f>", run = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
# Line-wise movement
{ on = "0", run = "move -999", desc = "Move to the BOL" },
{ on = "$", run = "move 999", desc = "Move to the EOL" },
{ on = "<C-a>", run = "move -999", desc = "Move to the BOL" },
{ on = "<C-e>", run = "move 999", desc = "Move to the EOL" },
{ on = "<Home>", run = "move -999", desc = "Move to the BOL" },
{ on = "<End>", run = "move 999", desc = "Move to the EOL" },
# Delete
{ on = "<Backspace>", run = "backspace", desc = "Delete the character before the cursor" },
{ on = "<Delete>", run = "backspace --under", desc = "Delete the character under the cursor" },
{ on = "<C-h>", run = "backspace", desc = "Delete the character before the cursor" },
{ on = "<C-d>", run = "backspace --under", desc = "Delete the character under the cursor" },
# Kill
{ on = "<C-u>", run = "kill bol", desc = "Kill backwards to the BOL" },
{ on = "<C-k>", run = "kill eol", desc = "Kill forwards to the EOL" },
{ on = "<C-w>", run = "kill backward", desc = "Kill backwards to the start of the current word" },
{ on = "<A-d>", run = "kill forward", desc = "Kill forwards to the end of the current word" },
# Cut/Yank/Paste
{ on = "d", run = "delete --cut", desc = "Cut the selected characters" },
{ on = "D", run = [ "delete --cut", "move 999" ], desc = "Cut until the EOL" },
{ on = "c", run = "delete --cut --insert", desc = "Cut the selected characters, and enter insert mode" },
{ on = "C", run = [ "delete --cut --insert", "move 999" ], desc = "Cut until the EOL, and enter insert mode" },
{ on = "x", run = [ "delete --cut", "move 1 --in-operating" ], desc = "Cut the current character" },
{ on = "y", run = "yank", desc = "Copy the selected characters" },
{ on = "p", run = "paste", desc = "Paste the copied characters after the cursor" },
{ on = "P", run = "paste --before", desc = "Paste the copied characters before the cursor" },
# Undo/Redo
{ on = "u", run = "undo", desc = "Undo the last operation" },
{ on = "<C-r>", run = "redo", desc = "Redo the last operation" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[confirm]
keymap = [
{ on = "<Esc>", run = "close", desc = "Cancel the confirm" },
{ on = "<C-[>", run = "close", desc = "Cancel the confirm" },
{ on = "<C-c>", run = "close", desc = "Cancel the confirm" },
{ on = "<Enter>", run = "close --submit", desc = "Submit the confirm" },
{ on = "n", run = "close", desc = "Cancel the confirm" },
{ on = "y", run = "close --submit", desc = "Submit the confirm" },
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[completion]
keymap = [
{ on = "<C-c>", run = "close", desc = "Cancel completion" },
{ on = "<Tab>", run = "close --submit", desc = "Submit the completion" },
{ on = "<Enter>", run = [ "close --submit", "close_input --submit" ], desc = "Submit the completion and input" },
{ on = "<A-k>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<A-j>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<C-p>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<C-n>", run = "arrow 1", desc = "Move cursor down" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F3>", run = "help", desc = "Open help" },
]
[help]
keymap = [
{ on = "<Esc>", run = "escape", desc = "Clear the filter, or hide the help" },
{ on = "<C-[>", run = "escape", desc = "Clear the filter, or hide the help" },
{ on = "<C-c>", run = "close", desc = "Hide the help" },
# Navigation
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
# Filtering
{ on = "f", run = "filter", desc = "Apply a filter for the help items" },
]
[[manager.prepend_keymap]]
on = "f"
run = "plugin jump-to-char"
desc = "Jump to char"

View File

@@ -1,22 +1,17 @@
[[plugin.deps]] [[plugin.deps]]
use = "yazi-rs/plugins:jump-to-char" use = "yazi-rs/plugins:jump-to-char"
rev = "c0ad8a3" rev = "eaf6920"
hash = "30fc0b37f03a597b92d387268319450f" hash = "ce67445ebb1bf3d97b8e44f50904b2c5"
[[plugin.deps]] [[plugin.deps]]
use = "Reledia/glow" use = "Reledia/glow"
rev = "2da96e3" rev = "bd3eaa5"
hash = "f9ee1436e3b853508d87f7d49dce56e6" hash = "92b5c58159a51c567f82b618cee2b78"
[[plugin.deps]] [[plugin.deps]]
use = "yazi-rs/plugins:smart-enter" use = "yazi-rs/plugins:smart-enter"
rev = "2ad42fa" rev = "b886025"
hash = "56fdabc96fc1f4d53c96eb884b02a5be" hash = "56fdabc96fc1f4d53c96eb884b02a5be"
[[plugin.deps]]
use = "yazi-rs/plugins:git"
rev = "2ad42fa"
hash = "e01006bfb38951ea89031bd918b20dbb"
[flavor] [flavor]
deps = [] deps = []

View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 yazi-rs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,75 +0,0 @@
# git.yazi
Show the status of Git file changes as linemode in the file list.
https://github.com/user-attachments/assets/34976be9-a871-4ffe-9d5a-c4cdd0bf4576
## Installation
```sh
ya pkg add yazi-rs/plugins:git
```
## Setup
Add the following to your `~/.config/yazi/init.lua`:
```lua
require("git"):setup()
```
And register it as fetchers in your `~/.config/yazi/yazi.toml`:
```toml
[[plugin.prepend_fetchers]]
id = "git"
name = "*"
run = "git"
[[plugin.prepend_fetchers]]
id = "git"
name = "*/"
run = "git"
```
## Advanced
You can customize the [Style](https://yazi-rs.github.io/docs/plugins/layout#style) of the status sign with:
- `th.git.modified`
- `th.git.added`
- `th.git.untracked`
- `th.git.ignored`
- `th.git.deleted`
- `th.git.updated`
For example:
```lua
-- ~/.config/yazi/init.lua
th.git = th.git or {}
th.git.modified = ui.Style():fg("blue")
th.git.deleted = ui.Style():fg("red"):bold()
```
You can also customize the text of the status sign with:
- `th.git.modified_sign`
- `th.git.added_sign`
- `th.git.untracked_sign`
- `th.git.ignored_sign`
- `th.git.deleted_sign`
- `th.git.updated_sign`
For example:
```lua
-- ~/.config/yazi/init.lua
th.git = th.git or {}
th.git.modified_sign = "M"
th.git.deleted_sign = "D"
```
## License
This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.

View File

@@ -1,228 +0,0 @@
--- @since 25.5.31
local WINDOWS = ya.target_family() == "windows"
-- The code of supported git status,
-- also used to determine which status to show for directories when they contain different statuses
-- see `bubble_up`
local CODES = {
excluded = 100, -- ignored directory
ignored = 6, -- ignored file
untracked = 5,
modified = 4,
added = 3,
deleted = 2,
updated = 1,
unknown = 0,
}
local PATTERNS = {
{ "!$", CODES.ignored },
{ "?$", CODES.untracked },
{ "[MT]", CODES.modified },
{ "[AC]", CODES.added },
{ "D", CODES.deleted },
{ "U", CODES.updated },
{ "[AD][AD]", CODES.updated },
}
local function match(line)
local signs = line:sub(1, 2)
for _, p in ipairs(PATTERNS) do
local path, pattern, code = nil, p[1], p[2]
if signs:find(pattern) then
path = line:sub(4, 4) == '"' and line:sub(5, -2) or line:sub(4)
path = WINDOWS and path:gsub("/", "\\") or path
end
if not path then
elseif path:find("[/\\]$") then
-- Mark the ignored directory as `excluded`, so we can process it further within `propagate_down`
return code == CODES.ignored and CODES.excluded or code, path:sub(1, -2)
else
return code, path
end
end
end
local function root(cwd)
local is_worktree = function(url)
local file, head = io.open(tostring(url)), nil
if file then
head = file:read(8)
file:close()
end
return head == "gitdir: "
end
repeat
local next = cwd:join(".git")
local cha = fs.cha(next)
if cha and (cha.is_dir or is_worktree(next)) then
return tostring(cwd)
end
cwd = cwd.parent
until not cwd
end
local function bubble_up(changed)
local new, empty = {}, Url("")
for path, code in pairs(changed) do
if code ~= CODES.ignored then
local url = Url(path).parent
while url and url ~= empty do
local s = tostring(url)
new[s] = (new[s] or CODES.unknown) > code and new[s] or code
url = url.parent
end
end
end
return new
end
local function propagate_down(excluded, cwd, repo)
local new, rel = {}, cwd:strip_prefix(repo)
for _, path in ipairs(excluded) do
if rel:starts_with(path) then
-- If `cwd` is a subdirectory of an excluded directory, also mark it as `excluded`
new[tostring(cwd)] = CODES.excluded
elseif cwd == repo:join(path).parent then
-- If `path` is a direct subdirectory of `cwd`, mark it as `ignored`
new[path] = CODES.ignored
else
-- Skipping, we only care about `cwd` itself and its direct subdirectories for maximum performance
end
end
return new
end
local add = ya.sync(function(st, cwd, repo, changed)
st.dirs[cwd] = repo
st.repos[repo] = st.repos[repo] or {}
for path, code in pairs(changed) do
if code == CODES.unknown then
st.repos[repo][path] = nil
elseif code == CODES.excluded then
-- Mark the directory with a special value `excluded` so that it can be distinguished during UI rendering
st.dirs[path] = CODES.excluded
else
st.repos[repo][path] = code
end
end
ya.render()
end)
local remove = ya.sync(function(st, cwd)
local repo = st.dirs[cwd]
if not repo then
return
end
ya.render()
st.dirs[cwd] = nil
if not st.repos[repo] then
return
end
for _, r in pairs(st.dirs) do
if r == repo then
return
end
end
st.repos[repo] = nil
end)
local function setup(st, opts)
st.dirs = {} -- Mapping between a directory and its corresponding repository
st.repos = {} -- Mapping between a repository and the status of each of its files
opts = opts or {}
opts.order = opts.order or 1500
local t = th.git or {}
local styles = {
[CODES.ignored] = t.ignored and ui.Style(t.ignored) or ui.Style():fg("darkgray"),
[CODES.untracked] = t.untracked and ui.Style(t.untracked) or ui.Style():fg("magenta"),
[CODES.modified] = t.modified and ui.Style(t.modified) or ui.Style():fg("yellow"),
[CODES.added] = t.added and ui.Style(t.added) or ui.Style():fg("green"),
[CODES.deleted] = t.deleted and ui.Style(t.deleted) or ui.Style():fg("red"),
[CODES.updated] = t.updated and ui.Style(t.updated) or ui.Style():fg("yellow"),
}
local signs = {
[CODES.ignored] = t.ignored_sign or "",
[CODES.untracked] = t.untracked_sign or "?",
[CODES.modified] = t.modified_sign or "",
[CODES.added] = t.added_sign or "",
[CODES.deleted] = t.deleted_sign or "",
[CODES.updated] = t.updated_sign or "",
}
Linemode:children_add(function(self)
local url = self._file.url
local repo = st.dirs[tostring(url.base)]
local code
if repo then
code = repo == CODES.excluded and CODES.ignored or st.repos[repo][tostring(url):sub(#repo + 2)]
end
if not code or signs[code] == "" then
return ""
elseif self._file.is_hovered then
return ui.Line { " ", signs[code] }
else
return ui.Line { " ", ui.Span(signs[code]):style(styles[code]) }
end
end, opts.order)
end
local function fetch(_, job)
local cwd = job.files[1].url.base
local repo = root(cwd)
if not repo then
remove(tostring(cwd))
return true
end
local paths = {}
for _, file in ipairs(job.files) do
paths[#paths + 1] = tostring(file.url)
end
-- stylua: ignore
local output, err = Command("git")
:cwd(tostring(cwd))
:arg({ "--no-optional-locks", "-c", "core.quotePath=", "status", "--porcelain", "-unormal", "--no-renames", "--ignored=matching" })
:arg(paths)
:stdout(Command.PIPED)
:output()
if not output then
return true, Err("Cannot spawn `git` command, error: %s", err)
end
local changed, excluded = {}, {}
for line in output.stdout:gmatch("[^\r\n]+") do
local code, path = match(line)
if code == CODES.excluded then
excluded[#excluded + 1] = path
else
changed[path] = code
end
end
if job.files[1].cha.is_dir then
ya.dict_merge(changed, bubble_up(changed))
end
ya.dict_merge(changed, propagate_down(excluded, cwd, Url(repo)))
-- Reset the status of any files that don't appear in the output of `git status` to `unknown`,
-- so that cleaning up outdated statuses from `st.repos`
for _, path in ipairs(paths) do
local s = path:sub(#repo + 2)
changed[s] = changed[s] or CODES.unknown
end
add(tostring(cwd), repo, changed)
return false
end
return { setup = setup, fetch = fetch }

View File

@@ -1,5 +1,8 @@
# glow.yazi # glow.yazi
>[!WARNING]
>This plugin is now deprecated with the release of [Piper](https://github.com/yazi-rs/plugins/tree/main/piper.yazi#examples)
Plugin for [Yazi](https://github.com/sxyazi/yazi) to preview markdown files with [glow](https://github.com/charmbracelet/glow). To install, run the below mentioned command: Plugin for [Yazi](https://github.com/sxyazi/yazi) to preview markdown files with [glow](https://github.com/charmbracelet/glow). To install, run the below mentioned command:
```bash ```bash

2
yazi/plugins/glow.yazi/main.lua Normal file → Executable file
View File

@@ -5,7 +5,7 @@ function M:peek(job)
local preview_width = 55 local preview_width = 55
local child = Command("glow") local child = Command("glow")
:args({ :arg({
"--style", "--style",
"dark", "dark",
"--width", "--width",

View File

@@ -21,7 +21,7 @@ run = "plugin jump-to-char"
desc = "Jump to char" desc = "Jump to char"
``` ```
Make sure the <kbd>f</kbd> key is not used elsewhere. Note that, the keybindings above are just examples, please tune them up as needed to ensure they don't conflict with your other commands/plugins.
## License ## License

View File

@@ -1,4 +1,4 @@
--- @since 25.5.28 --- @since 25.5.31
local AVAILABLE_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789." local AVAILABLE_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."

View File

@@ -7,6 +7,12 @@ play = [
{ run = 'open -a IINA "$@"', orphan = true, for = "unix", desc='IINA'} { run = 'open -a IINA "$@"', orphan = true, for = "unix", desc='IINA'}
] ]
[image]
renderer = "kitty"
[preview]
max_width = 1000
max_height = 1000
# [mgr] # [mgr]
# ratio = [2, 6, 5] # left, center, right pane width ratios # ratio = [2, 6, 5] # left, center, right pane width ratios
@@ -14,3 +20,4 @@ play = [
prepend_previewers = [ prepend_previewers = [
{ name = "*.md", run = "glow" }, { name = "*.md", run = "glow" },
] ]