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:
@@ -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",
|
||||
"from": {
|
||||
@@ -731,25 +750,6 @@
|
||||
"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": [
|
||||
{
|
||||
"mouse_key": {
|
||||
"x": -345
|
||||
"x": -750
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -793,7 +793,7 @@
|
||||
"to": [
|
||||
{
|
||||
"mouse_key": {
|
||||
"y": 345
|
||||
"y": 750
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -814,7 +814,7 @@
|
||||
"to": [
|
||||
{
|
||||
"mouse_key": {
|
||||
"y": -345
|
||||
"y": -750
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -835,7 +835,7 @@
|
||||
"to": [
|
||||
{
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"from": {
|
||||
@@ -1437,7 +1412,7 @@
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"shell_command": "open -a 'iTerm'"
|
||||
"shell_command": "open -a 'kitty'"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1464,9 +1439,10 @@
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "t",
|
||||
"key_code": "s",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"left_command",
|
||||
"right_command",
|
||||
"right_control",
|
||||
"right_shift",
|
||||
@@ -1476,7 +1452,7 @@
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"shell_command": "open -a 'Visual Studio Code'"
|
||||
"shell_command": "open -a Spotify"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1496,7 +1472,7 @@
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"shell_command": "open -a 'Typora'"
|
||||
"shell_command": "open -a Transmission"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1522,7 +1498,26 @@
|
||||
{
|
||||
"type": "basic",
|
||||
"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": {
|
||||
"mandatory": [
|
||||
"left_command",
|
||||
@@ -1535,7 +1530,7 @@
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"shell_command": "open -a 'Dictionary'"
|
||||
"shell_command": "open -a 'Mail'"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1554,10 +1549,30 @@
|
||||
},
|
||||
"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",
|
||||
"from": {
|
||||
@@ -1629,7 +1644,7 @@
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"shell_command": "open -a 'Google Chrome'"
|
||||
"shell_command": "open -a 'ChatGPT'"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"profiles": [
|
||||
{
|
||||
"name": "Default profile",
|
||||
"selected": true,
|
||||
"virtual_hid_keyboard": { "keyboard_type_v2": "iso" }
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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
@@ -1,47 +1,50 @@
|
||||
background #3b3c35
|
||||
foreground #fdfff1
|
||||
# vim:ft=kitty
|
||||
|
||||
cursor #fdfff1
|
||||
cursor_text_color #000000
|
||||
selection_foreground #3b3c35
|
||||
selection_background #fdfff1
|
||||
## name: Tokyo Night Moon
|
||||
## license: MIT
|
||||
## author: Folke Lemaitre
|
||||
## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_moon.conf
|
||||
|
||||
# dull black
|
||||
color0 #3b3c35
|
||||
# light black
|
||||
color8 #6e7066
|
||||
|
||||
# dull red
|
||||
color1 #f82570
|
||||
# light red
|
||||
color9 #f82570
|
||||
background #222436
|
||||
foreground #c8d3f5
|
||||
selection_background #2d3f76
|
||||
selection_foreground #c8d3f5
|
||||
url_color #4fd6be
|
||||
cursor #c8d3f5
|
||||
cursor_text_color #222436
|
||||
|
||||
# dull green
|
||||
color2 #a6e12d
|
||||
# light green
|
||||
color10 #a6e12d
|
||||
# Tabs
|
||||
active_tab_background #82aaff
|
||||
active_tab_foreground #1e2030
|
||||
inactive_tab_background #2f334d
|
||||
inactive_tab_foreground #545c7e
|
||||
#tab_bar_background #1b1d2b
|
||||
|
||||
# yellow
|
||||
color3 #e4db73
|
||||
# light yellow
|
||||
color11 #e4db73
|
||||
# Windows
|
||||
active_border_color #82aaff
|
||||
inactive_border_color #2f334d
|
||||
|
||||
# blue
|
||||
color4 #fc961f
|
||||
# light blue
|
||||
color12 #fc961f
|
||||
# normal
|
||||
color0 #1b1d2b
|
||||
color1 #ff757f
|
||||
color2 #c3e88d
|
||||
color3 #ffc777
|
||||
color4 #82aaff
|
||||
color5 #c099ff
|
||||
color6 #86e1fc
|
||||
color7 #828bb8
|
||||
|
||||
# magenta
|
||||
color5 #ae81ff
|
||||
# light magenta
|
||||
color13 #ae81ff
|
||||
# bright
|
||||
color8 #444a73
|
||||
color9 #ff8d94
|
||||
color10 #c7fb6d
|
||||
color11 #ffd8ab
|
||||
color12 #9ab8ff
|
||||
color13 #caabff
|
||||
color14 #b2ebff
|
||||
color15 #c8d3f5
|
||||
|
||||
# cyan
|
||||
color6 #66d9ee
|
||||
# light cyan
|
||||
color14 #66d9ee
|
||||
|
||||
# dull white
|
||||
color7 #fdfff1
|
||||
# bright white
|
||||
color15 #fdfff1
|
||||
# extended colors
|
||||
color16 #ff966c
|
||||
color17 #c53b53
|
||||
|
||||
@@ -30,7 +30,7 @@ map ctrl+shift+u input_unicode_character
|
||||
map ctrl+home resize_window reset
|
||||
|
||||
# Text Selection & Search
|
||||
map ctrl+shift+f show_scrollback
|
||||
map ctrl+shift+o show_scrollback
|
||||
map ctrl+shift+h show_last_command_output
|
||||
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
|
||||
|
||||
# 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>l set_background_opacity -0.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
|
||||
map alt+s send_text all ß
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Font Configuration
|
||||
font_family MesloGS NF
|
||||
font_family MesloLGS NF
|
||||
bold_font auto
|
||||
italic_font auto
|
||||
bold_italic_font auto
|
||||
@@ -7,7 +7,7 @@ font_size 15
|
||||
|
||||
# Font rendering improvements
|
||||
disable_ligatures never
|
||||
font_features MesloGSNF +calt +liga
|
||||
font_features MesloLGSNF +calt +liga
|
||||
text_composition_strategy platform
|
||||
undercurl_style thin-sparse
|
||||
|
||||
@@ -41,7 +41,7 @@ background_blur 3
|
||||
|
||||
# macOS Specific
|
||||
hide_window_decorations yes
|
||||
macos_titlebar_color background
|
||||
# macos_titlebar_color background
|
||||
macos_option_as_alt yes
|
||||
macos_window_resizable yes
|
||||
|
||||
@@ -58,7 +58,7 @@ include ./keymap.conf
|
||||
macos_show_window_title_in none
|
||||
|
||||
# BEGIN_KITTY_THEME
|
||||
# Monokai Classic
|
||||
# Catppuccin-Macchiato
|
||||
include current-theme.conf
|
||||
# END_KITTY_THEME
|
||||
|
||||
@@ -76,21 +76,19 @@ touch_scroll_multiplier 1.0
|
||||
|
||||
# URL Handling
|
||||
detect_urls yes
|
||||
url_color #0087bd
|
||||
# url_color #0087bd
|
||||
url_style curly
|
||||
open_url_with default
|
||||
copy_on_select no
|
||||
strip_trailing_spaces never
|
||||
|
||||
# Selection
|
||||
rectangle_select_modifiers ctrl+alt
|
||||
terminal_select_modifiers shift
|
||||
select_by_word_characters @-./_~?&=%+#
|
||||
|
||||
# Advanced Features
|
||||
allow_hyperlinks yes
|
||||
shell_integration enabled
|
||||
term xterm-256color
|
||||
# term xterm-256color
|
||||
# Fixed backspace mapping
|
||||
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
|
||||
|
||||
# Notifications
|
||||
enable_notifications yes
|
||||
notify_on_cmd_finish invisible 30.0
|
||||
|
||||
# Ask for confirmation on program close (Cmd+Q) but not on tab close
|
||||
|
||||
@@ -15,15 +15,31 @@ return {
|
||||
"okuuva/auto-save.nvim",
|
||||
version = "v1.*",
|
||||
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 = {
|
||||
enabled = true,
|
||||
execution_message = {
|
||||
enabled = false,
|
||||
},
|
||||
trigger_events = {
|
||||
immediate_save = { "BufLeave", "FocusLost" },
|
||||
defer_save = { "InsertLeave", "TextChanged" },
|
||||
cancel_defered_save = { "InsertEnter" },
|
||||
cancel_deferred_save = { "InsertEnter" },
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -40,6 +56,7 @@ return {
|
||||
-- Git integration
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
opts = {
|
||||
signs = {
|
||||
add = { text = "│" },
|
||||
@@ -56,11 +73,50 @@ return {
|
||||
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
|
||||
{ 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
|
||||
{
|
||||
"junegunn/fzf",
|
||||
@@ -71,12 +127,12 @@ return {
|
||||
{ "junegunn/fzf.vim" },
|
||||
|
||||
-- Productivity
|
||||
{ "numToStr/Comment.nvim", opts = {} },
|
||||
{ "windwp/nvim-autopairs", opts = {} },
|
||||
{ "tpope/vim-surround" },
|
||||
{ "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
|
||||
{ "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
|
||||
{ "tpope/vim-surround", event = "VeryLazy" },
|
||||
|
||||
-- Tmux navigation
|
||||
{ "christoomey/vim-tmux-navigator" },
|
||||
-- -- Tmux navigation
|
||||
-- { "christoomey/vim-tmux-navigator" },
|
||||
|
||||
-- LaTeX
|
||||
{ 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
|
||||
{ "SidOfc/mkdx" },
|
||||
{ "SidOfc/mkdx", ft = "markdown" },
|
||||
{
|
||||
"MeanderingProgrammer/render-markdown.nvim",
|
||||
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,
|
||||
},
|
||||
|
||||
@@ -205,6 +221,7 @@ return {
|
||||
{
|
||||
"lukas-reineke/indent-blankline.nvim",
|
||||
main = "ibl",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
opts = {},
|
||||
},
|
||||
|
||||
|
||||
@@ -1,67 +1,66 @@
|
||||
local colors = {
|
||||
bg = "none",
|
||||
fg = "#ebdbb2",
|
||||
yellow = "#fabd2f",
|
||||
cyan = "#8ec07c",
|
||||
darkblue = "#458588",
|
||||
green = "#b8bb26",
|
||||
orange = "#fe8019",
|
||||
violet = "#d3869b",
|
||||
magenta = "#d3869b",
|
||||
blue = "#83a598",
|
||||
red = "#fb4934",
|
||||
grey = "#504945",
|
||||
black = "#282828",
|
||||
white = "#fbf1c7",
|
||||
darkgrey = "#3c3836",
|
||||
lightgrey = "#665c54",
|
||||
base = "#1e1e2e",
|
||||
surface0 = "#313244",
|
||||
surface1 = "#45475a",
|
||||
overlay0 = "#6c7086",
|
||||
text = "#cdd6f4",
|
||||
subtext = "#a6adc8",
|
||||
crust = "#11111b",
|
||||
mauve = "#cba6f7",
|
||||
blue = "#89b4fa",
|
||||
green = "#a6e3a1",
|
||||
red = "#f38ba8",
|
||||
yellow = "#f9e2af",
|
||||
peach = "#fab387",
|
||||
lavender = "#b4befe",
|
||||
cyan = "#94e2d5",
|
||||
}
|
||||
|
||||
local theme = {
|
||||
normal = {
|
||||
a = { fg = colors.black, bg = colors.blue, gui = "bold" },
|
||||
b = { fg = colors.blue, bg = colors.grey },
|
||||
c = { fg = colors.white, bg = colors.darkgrey },
|
||||
x = { fg = colors.white, bg = colors.darkgrey },
|
||||
y = { fg = colors.blue, bg = colors.grey },
|
||||
z = { fg = colors.black, bg = colors.blue, gui = "bold" },
|
||||
a = { fg = colors.crust, bg = colors.mauve, gui = "bold" },
|
||||
b = { fg = colors.mauve, bg = colors.surface1 },
|
||||
c = { fg = colors.text, bg = colors.base },
|
||||
x = { fg = colors.text, bg = colors.base },
|
||||
y = { fg = colors.mauve, bg = colors.surface1 },
|
||||
z = { fg = colors.crust, bg = colors.mauve, gui = "bold" },
|
||||
},
|
||||
insert = {
|
||||
a = { fg = colors.black, bg = colors.green, gui = "bold" },
|
||||
b = { fg = colors.green, bg = colors.grey },
|
||||
c = { fg = colors.white, bg = colors.darkgrey },
|
||||
x = { fg = colors.white, bg = colors.darkgrey },
|
||||
y = { fg = colors.green, bg = colors.grey },
|
||||
z = { fg = colors.black, bg = colors.green, gui = "bold" },
|
||||
a = { fg = colors.crust, bg = colors.green, gui = "bold" },
|
||||
b = { fg = colors.green, bg = colors.surface1 },
|
||||
c = { fg = colors.text, bg = colors.base },
|
||||
x = { fg = colors.text, bg = colors.base },
|
||||
y = { fg = colors.green, bg = colors.surface1 },
|
||||
z = { fg = colors.crust, bg = colors.green, gui = "bold" },
|
||||
},
|
||||
visual = {
|
||||
a = { fg = colors.black, bg = colors.magenta, gui = "bold" },
|
||||
b = { fg = colors.magenta, bg = colors.grey },
|
||||
c = { fg = colors.white, bg = colors.darkgrey },
|
||||
x = { fg = colors.white, bg = colors.darkgrey },
|
||||
y = { fg = colors.magenta, bg = colors.grey },
|
||||
z = { fg = colors.black, bg = colors.magenta, gui = "bold" },
|
||||
a = { fg = colors.crust, bg = colors.lavender, gui = "bold" },
|
||||
b = { fg = colors.lavender, bg = colors.surface1 },
|
||||
c = { fg = colors.text, bg = colors.base },
|
||||
x = { fg = colors.text, bg = colors.base },
|
||||
y = { fg = colors.lavender, bg = colors.surface1 },
|
||||
z = { fg = colors.crust, bg = colors.lavender, gui = "bold" },
|
||||
},
|
||||
replace = {
|
||||
a = { fg = colors.black, bg = colors.red, gui = "bold" },
|
||||
b = { fg = colors.red, bg = colors.grey },
|
||||
c = { fg = colors.white, bg = colors.darkgrey },
|
||||
x = { fg = colors.white, bg = colors.darkgrey },
|
||||
y = { fg = colors.red, bg = colors.grey },
|
||||
z = { fg = colors.black, bg = colors.red, gui = "bold" },
|
||||
a = { fg = colors.crust, bg = colors.red, gui = "bold" },
|
||||
b = { fg = colors.red, bg = colors.surface1 },
|
||||
c = { fg = colors.text, bg = colors.base },
|
||||
x = { fg = colors.text, bg = colors.base },
|
||||
y = { fg = colors.red, bg = colors.surface1 },
|
||||
z = { fg = colors.crust, bg = colors.red, gui = "bold" },
|
||||
},
|
||||
command = {
|
||||
a = { fg = colors.black, bg = colors.yellow, gui = "bold" },
|
||||
b = { fg = colors.yellow, bg = colors.grey },
|
||||
c = { fg = colors.white, bg = colors.darkgrey },
|
||||
x = { fg = colors.white, bg = colors.darkgrey },
|
||||
y = { fg = colors.yellow, bg = colors.grey },
|
||||
z = { fg = colors.black, bg = colors.yellow, gui = "bold" },
|
||||
a = { fg = colors.crust, bg = colors.yellow, gui = "bold" },
|
||||
b = { fg = colors.yellow, bg = colors.surface1 },
|
||||
c = { fg = colors.text, bg = colors.base },
|
||||
x = { fg = colors.text, bg = colors.base },
|
||||
y = { fg = colors.yellow, bg = colors.surface1 },
|
||||
z = { fg = colors.crust, bg = colors.yellow, gui = "bold" },
|
||||
},
|
||||
inactive = {
|
||||
a = { fg = colors.white, bg = colors.darkgrey },
|
||||
b = { fg = colors.white, bg = colors.darkgrey },
|
||||
c = { fg = colors.white, bg = colors.darkgrey },
|
||||
a = { fg = colors.subtext, bg = colors.base },
|
||||
b = { fg = colors.subtext, bg = colors.base },
|
||||
c = { fg = colors.subtext, bg = colors.base },
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -4,16 +4,16 @@ vim.opt.shiftwidth = 4 -- Number of spaces for indentation
|
||||
vim.opt.expandtab = true -- Use spaces instead of tabs
|
||||
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 CursorColumn guibg=#504945]]) -- Slightly darker for the column
|
||||
vim.cmd([[highlight CursorLine guibg=#313244]]) -- Catppuccin surface0
|
||||
vim.cmd([[highlight CursorColumn guibg=#45475a]]) -- Catppuccin surface1
|
||||
|
||||
vim.cmd([[set incsearch ]]) -- Enables incremental search
|
||||
vim.cmd([[set hlsearch ]]) -- Highlights search results
|
||||
vim.cmd([[set ignorecase]]) -- Case insensitive search
|
||||
vim.cmd([[set smartcase ]]) -- Case sensitive if uppercase letters are used
|
||||
|
||||
-- Coloscheme
|
||||
vim.cmd([[colorscheme gruvbox]])
|
||||
-- Colorscheme
|
||||
vim.cmd([[colorscheme catppuccin-mocha]])
|
||||
|
||||
vim.cmd([[set spelllang=en]])
|
||||
|
||||
|
||||
@@ -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'
|
||||
1
tmux/plugins/tmux-urlview
Submodule
1
tmux/plugins/tmux-urlview
Submodule
Submodule tmux/plugins/tmux-urlview added at b84c876cff
@@ -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 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"
|
||||
set -g window-status-format " #[fg=#a6adc8]#I #[fg=#a6adc8]#W "
|
||||
set -g window-status-current-style "fg=#1e1e2e,bg=#74c7ec,bold"
|
||||
set -g window-status-current-format " #[fg=#1e1e2e,bg=#74c7ec,bold]#I #[fg=#1e1e2e,bg=#74c7ec,bold]#W "
|
||||
# Pane borders
|
||||
set -g pane-border-style "fg=#313244"
|
||||
set -g pane-active-border-style "fg=#cba6f7,bold"
|
||||
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 "
|
||||
set -g status-right "#[fg=#a6adc8]#{pane_current_command} #[fg=#a6adc8]| #[fg=#cdd6f4]%H:%M #[fg=#a6adc8]| #[fg=#cdd6f4]%a %d %b "
|
||||
# Message styling
|
||||
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 ""
|
||||
|
||||
# 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
|
||||
|
||||
5
tmux/themes/tmuxline.tmux
Normal file
5
tmux/themes/tmuxline.tmux
Normal 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
|
||||
154
tmux/tmux.conf
154
tmux/tmux.conf
@@ -1,5 +1,5 @@
|
||||
# ============================================
|
||||
# TMUX CONFIGURATION - CLEAN GRUVBOX
|
||||
# TMUX CONFIGURATION
|
||||
# ============================================
|
||||
|
||||
# ============================================
|
||||
@@ -10,16 +10,16 @@
|
||||
set -g allow-passthrough on
|
||||
set -ga update-environment TERM
|
||||
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 -as terminal-features ",xterm-256color:RGB,tmux-256color:RGB"
|
||||
|
||||
# Shell configuration
|
||||
set -g default-shell /bin/zsh
|
||||
set -g default-command /bin/zsh
|
||||
|
||||
# Environment variables for proper shell integration
|
||||
set -ga update-environment KITTY_WINDOW_ID
|
||||
set -ga update-environment KITTY_PID
|
||||
# KITTY_WINDOW_ID and KITTY_PID intentionally NOT passed through
|
||||
# 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 ZDOTDIR
|
||||
|
||||
@@ -53,8 +53,8 @@ set -g display-panes-time 2000
|
||||
# Show messages longer
|
||||
set -g display-time 2000
|
||||
|
||||
# Aggressive resize for multiple clients
|
||||
setw -g aggressive-resize on
|
||||
# Resize to largest attached client
|
||||
set -g window-size largest
|
||||
|
||||
# ============================================
|
||||
# VI-LIKE KEYBINDINGS
|
||||
@@ -64,12 +64,7 @@ setw -g aggressive-resize on
|
||||
setw -g mode-keys vi
|
||||
set -g status-keys vi
|
||||
|
||||
# Smart pane switching with awareness of Vim splits
|
||||
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'
|
||||
# Smart pane switching with vim awareness handled by vim-tmux-navigator plugin
|
||||
|
||||
# Vi-like pane resizing
|
||||
bind -r H resize-pane -L 5
|
||||
@@ -89,18 +84,17 @@ bind Escape copy-mode
|
||||
# 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 s split-window -v -c "#{pane_current_path}"
|
||||
unbind '"'
|
||||
unbind %
|
||||
bind % split-window -h -c "#{pane_current_path}"
|
||||
bind '"' split-window -v -c "#{pane_current_path}"
|
||||
|
||||
# New window in current path
|
||||
bind c new-window -c "#{pane_current_path}"
|
||||
|
||||
# Quick pane cycling
|
||||
bind -r C-h select-window -t :-
|
||||
# bind -r C-l select-window -t :+
|
||||
|
||||
# Kill pane without confirmation
|
||||
bind x kill-pane
|
||||
@@ -111,12 +105,6 @@ bind X kill-window
|
||||
# Toggle zoom
|
||||
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
|
||||
bind S choose-tree -sZ -O name
|
||||
|
||||
@@ -132,61 +120,48 @@ set -g mouse on
|
||||
# Don't jump to bottom when mouse selecting
|
||||
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
|
||||
bind-key -T copy-mode-vi MouseDown1Pane select-pane
|
||||
bind-key -T copy-mode MouseDown1Pane select-pane
|
||||
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
|
||||
|
||||
# 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-format "#[fg=#ebdbb2] #P #[fg=#928374]| #[fg=#83a598]#{pane_current_command} #[fg=#928374]| #[fg=#bdae93]#{pane_current_path}"
|
||||
|
||||
# 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
|
||||
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
|
||||
|
||||
# Activity monitoring
|
||||
set -g monitor-activity on
|
||||
@@ -198,48 +173,31 @@ set -g monitor-bell on
|
||||
set -g visual-bell off
|
||||
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-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
|
||||
bind-key -T prefix 1 select-window -t :=1
|
||||
bind-key -T prefix 2 select-window -t :=2
|
||||
bind-key -T prefix 3 select-window -t :=3
|
||||
bind-key -T prefix 4 select-window -t :=4
|
||||
bind-key -T prefix 5 select-window -t :=5
|
||||
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
|
||||
# Three-way toggle: top → bottom → hidden → top
|
||||
bind b if -F "#{==:#{status},off}" \
|
||||
"set -g status on ; set -g status-position top ; set -g pane-border-status top" \
|
||||
"if -F '#{==:#{status-position},top}' \
|
||||
'set -g status-position bottom' \
|
||||
'set -g status off ; set -g pane-border-status off'"
|
||||
|
||||
# Theme switcher (Prefix + Shift+1/2/3 => !/@/#)
|
||||
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
|
||||
# Reload config
|
||||
bind r source-file ~/.config/tmux/tmux.conf \; display-message " Config reloaded!"
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom)
|
||||
|
||||
@@ -104,6 +104,48 @@ keymap = [
|
||||
# Filter
|
||||
{ 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
|
||||
{ on = "/", run = "find --smart", desc = "Find next 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", "w" ], run = "cd \"~/Documents/JKU/Work\"", desc = "Goto Work(local)" },
|
||||
{ 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", "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", "a", "<Space>" ], run = "cd /Volumes/TNHOME/home/AK127132", desc = "Goto AK127132" },
|
||||
{ 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", "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", "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", "b" ], run = "cd \"/Volumes/ipec/intern/05_Institutsbesprechungen\"", desc = "Goto Institutsbesprechungen" },
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -1,22 +1,17 @@
|
||||
[[plugin.deps]]
|
||||
use = "yazi-rs/plugins:jump-to-char"
|
||||
rev = "c0ad8a3"
|
||||
hash = "30fc0b37f03a597b92d387268319450f"
|
||||
rev = "eaf6920"
|
||||
hash = "ce67445ebb1bf3d97b8e44f50904b2c5"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "Reledia/glow"
|
||||
rev = "2da96e3"
|
||||
hash = "f9ee1436e3b853508d87f7d49dce56e6"
|
||||
rev = "bd3eaa5"
|
||||
hash = "92b5c58159a51c567f82b618cee2b78"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "yazi-rs/plugins:smart-enter"
|
||||
rev = "2ad42fa"
|
||||
rev = "b886025"
|
||||
hash = "56fdabc96fc1f4d53c96eb884b02a5be"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "yazi-rs/plugins:git"
|
||||
rev = "2ad42fa"
|
||||
hash = "e01006bfb38951ea89031bd918b20dbb"
|
||||
|
||||
[flavor]
|
||||
deps = []
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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 }
|
||||
@@ -1,5 +1,8 @@
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
|
||||
2
yazi/plugins/glow.yazi/main.lua
Normal file → Executable file
2
yazi/plugins/glow.yazi/main.lua
Normal file → Executable file
@@ -5,7 +5,7 @@ function M:peek(job)
|
||||
local preview_width = 55
|
||||
|
||||
local child = Command("glow")
|
||||
:args({
|
||||
:arg({
|
||||
"--style",
|
||||
"dark",
|
||||
"--width",
|
||||
|
||||
@@ -21,7 +21,7 @@ run = "plugin 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
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
--- @since 25.5.28
|
||||
--- @since 25.5.31
|
||||
|
||||
local AVAILABLE_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."
|
||||
|
||||
|
||||
@@ -7,6 +7,12 @@ play = [
|
||||
{ run = 'open -a IINA "$@"', orphan = true, for = "unix", desc='IINA'}
|
||||
]
|
||||
|
||||
[image]
|
||||
renderer = "kitty"
|
||||
|
||||
[preview]
|
||||
max_width = 1000
|
||||
max_height = 1000
|
||||
# [mgr]
|
||||
# ratio = [2, 6, 5] # left, center, right pane width ratios
|
||||
|
||||
@@ -14,3 +20,4 @@ play = [
|
||||
prepend_previewers = [
|
||||
{ name = "*.md", run = "glow" },
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user