updated yazi conf. nvim completions and latex
This commit is contained in:
@@ -576,11 +576,11 @@ sort = -r date
|
|||||||
|
|
||||||
[viewer]
|
[viewer]
|
||||||
# pager=less -Rc
|
# pager=less -Rc
|
||||||
pager=pager = bat --style=plain --paging=always
|
pager= bat --style=plain --paging=always
|
||||||
html-unsafe-images=false
|
# html-unsafe-images=false
|
||||||
html-filter=dante
|
# html-filter=dante
|
||||||
image/*=chafa -f kitty -s ${width}x${height}
|
image/*=chafa -f kitty -s ${width}x${height}
|
||||||
text/html=dante
|
text/html= ~/.local/bin/mailhtml2md
|
||||||
application/pdf=zathura
|
application/pdf=zathura
|
||||||
video/*=mpv
|
video/*=mpv
|
||||||
header-layout=From,To,Subject,Date
|
header-layout=From,To,Subject,Date
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
/home/liph/.config/systemd/user/gammastep.service
|
||||||
13
kanata/.config/systemd/user/gammastep.service
Normal file
13
kanata/.config/systemd/user/gammastep.service
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gamma-colour filter (red-shift) for Wayland
|
||||||
|
After=graphical-session.target
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/gammastep -l 47.38:8.54 -t 6000:4000
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
83
kanata/.config/systemd/user/imple
Normal file
83
kanata/.config/systemd/user/imple
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
[m[38:2:144:140:170;48:2:42:39:63m [38:2:109:128:134m [22;1;38:2:144:140:170mwob.service[22m
|
||||||
|
[m 1 [38:2:156:207:216m┆
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[38:2:110:106:134m~
|
||||||
|
[m[22;1;38:2:35:33:54;48:2:234:154:151m NORMAL [22;38:2:234:154:151;48:2:42:39:63m[38:2:224:222:244m wob.service [38:2:57:53:82m[38:2:234:154:151;48:2:57:53:82m Top [22;1;38:2:35:33:54;48:2:234:154:151m 1:1
|
||||||
@@ -1,47 +1,56 @@
|
|||||||
background #282828
|
## name: Rosé Pine Moon
|
||||||
foreground #d4be98
|
## author: mvllow
|
||||||
|
## license: MIT
|
||||||
|
## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine-moon.conf
|
||||||
|
## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist
|
||||||
|
|
||||||
selection_background #d4be98
|
foreground #e0def4
|
||||||
selection_foreground #282828
|
background #232136
|
||||||
|
selection_foreground #e0def4
|
||||||
|
selection_background #44415a
|
||||||
|
|
||||||
cursor #a89984
|
cursor #56526e
|
||||||
cursor_text_color background
|
cursor_text_color #e0def4
|
||||||
|
|
||||||
active_tab_background #282828
|
url_color #c4a7e7
|
||||||
active_tab_foreground #d4be98
|
|
||||||
active_tab_font_style bold
|
|
||||||
inactive_tab_background #282828
|
|
||||||
inactive_tab_foreground #a89984
|
|
||||||
inactive_tab_font_style normal
|
|
||||||
|
|
||||||
# Black
|
active_tab_foreground #e0def4
|
||||||
color0 #665c54
|
active_tab_background #393552
|
||||||
color8 #928374
|
inactive_tab_foreground #6e6a86
|
||||||
|
inactive_tab_background #232136
|
||||||
|
|
||||||
# Red
|
active_border_color #3e8fb0
|
||||||
color1 #ea6962
|
inactive_border_color #44415a
|
||||||
color9 #ea6962
|
|
||||||
|
|
||||||
# Green
|
# black
|
||||||
color2 #a9b665
|
color0 #393552
|
||||||
color10 #a9b665
|
color8 #6e6a86
|
||||||
|
|
||||||
# Yellow
|
# red
|
||||||
color3 #e78a4e
|
color1 #eb6f92
|
||||||
color11 #d8a657
|
color9 #eb6f92
|
||||||
|
|
||||||
# Blue
|
# green
|
||||||
color4 #7daea3
|
color2 #3e8fb0
|
||||||
color12 #7daea3
|
color10 #3e8fb0
|
||||||
|
|
||||||
# Magenta
|
# yellow
|
||||||
color5 #d3869b
|
color3 #f6c177
|
||||||
color13 #d3869b
|
color11 #f6c177
|
||||||
|
|
||||||
# Cyan
|
# blue
|
||||||
color6 #89b482
|
color4 #9ccfd8
|
||||||
color14 #89b482
|
color12 #9ccfd8
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #c4a7e7
|
||||||
|
color13 #c4a7e7
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #ea9a97
|
||||||
|
color14 #ea9a97
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #e0def4
|
||||||
|
color15 #e0def4
|
||||||
|
|
||||||
# White
|
|
||||||
color7 #d4be98
|
|
||||||
color15 #d4be98
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# BEGIN_KITTY_THEME
|
# BEGIN_KITTY_THEME
|
||||||
# Gruvbox Material
|
# Rosé Pine Moon
|
||||||
include current-theme.conf
|
include current-theme.conf
|
||||||
# END_KITTY_THEME
|
# END_KITTY_THEME
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,22 +1,23 @@
|
|||||||
# BEGIN_KITTY_THEME
|
# BEGIN_KITTY_THEME
|
||||||
# Catppuccin-Mocha
|
# Gruvbox Material
|
||||||
include current-theme.conf
|
include current-theme.conf
|
||||||
# END_KITTY_THEME
|
# END_KITTY_THEME
|
||||||
#
|
#
|
||||||
|
shell zsh --login
|
||||||
|
|
||||||
font_family JetBrainsMono Nerd Font
|
font_family JetBrainsMono Nerd Font
|
||||||
bold_font JetBrainsMono Nerd Font Bold
|
bold_font auto
|
||||||
italic_font JetBrainsMono Nerd Font Italic
|
italic_font auto
|
||||||
bold_italic_font JetBrainsMono Nerd Font Bold Italic
|
bold_italic_font auto
|
||||||
|
|
||||||
font_size 12
|
font_size 12
|
||||||
|
|
||||||
# background_opacity 0.95
|
background_opacity 0.90
|
||||||
|
|
||||||
term xterm-256color
|
term xterm-256color
|
||||||
|
|
||||||
# allow_hyperlinks yes
|
allow_hyperlinks yes
|
||||||
|
|
||||||
# copy_on_select yes
|
copy_on_select yes
|
||||||
# paste_actions confirm-if-large
|
paste_actions confirm-if-large
|
||||||
|
|
||||||
|
|||||||
@@ -34,14 +34,14 @@ environment {
|
|||||||
}
|
}
|
||||||
output "eDP-1" {
|
output "eDP-1" {
|
||||||
mode "2880x1800@59.990"
|
mode "2880x1800@59.990"
|
||||||
scale 1.2
|
scale 1.1
|
||||||
position x=0 y=0
|
position x=0 y=0
|
||||||
focus-at-startup
|
focus-at-startup
|
||||||
}
|
}
|
||||||
output "HDMI-A-1" {
|
output "DP-4" {
|
||||||
mode "2560x1440@59.951"
|
mode "2560x1440@59.951"
|
||||||
position x=1645 y=0
|
position x=1645 y=0
|
||||||
scale 1.0
|
scale 0.8
|
||||||
}
|
}
|
||||||
layout {
|
layout {
|
||||||
gaps 2
|
gaps 2
|
||||||
@@ -79,6 +79,7 @@ spawn-at-startup "waybar" "-c" "/home/liph/.config/niri/waybar-niri/config.jsonc
|
|||||||
spawn-at-startup "swaync"
|
spawn-at-startup "swaync"
|
||||||
// spawn-at-startup "kanshi"
|
// spawn-at-startup "kanshi"
|
||||||
spawn-at-startup "swww-daemon"
|
spawn-at-startup "swww-daemon"
|
||||||
|
spawn-at-startup "xwayland-satellite"
|
||||||
spawn-at-startup "kitty"
|
spawn-at-startup "kitty"
|
||||||
spawn-at-startup "librewolf"
|
spawn-at-startup "librewolf"
|
||||||
spawn-at-startup "sh" "-c" "sleep 5 && exec swayidle -w timeout 300 hyprlock timeout 600 'niri msg action power-off-monitors' resume 'niri msg action power-on-monitors' timeout 3600 'systemctl suspend'"
|
spawn-at-startup "sh" "-c" "sleep 5 && exec swayidle -w timeout 300 hyprlock timeout 600 'niri msg action power-off-monitors' resume 'niri msg action power-on-monitors' timeout 3600 'systemctl suspend'"
|
||||||
@@ -140,35 +141,35 @@ window-rule {
|
|||||||
window-rule {
|
window-rule {
|
||||||
match app-id="floating_btop"
|
match app-id="floating_btop"
|
||||||
default-column-width {
|
default-column-width {
|
||||||
proportion 0.5
|
proportion 0.6667
|
||||||
}
|
}
|
||||||
open-floating true
|
open-floating true
|
||||||
}
|
}
|
||||||
window-rule {
|
window-rule {
|
||||||
match app-id="floating_htop"
|
match app-id="floating_htop"
|
||||||
default-column-width {
|
default-column-width {
|
||||||
proportion 0.5
|
proportion 0.6667
|
||||||
}
|
}
|
||||||
open-floating true
|
open-floating true
|
||||||
}
|
}
|
||||||
window-rule {
|
window-rule {
|
||||||
match app-id="floating_bluetui"
|
match app-id="floating_bluetui"
|
||||||
default-column-width {
|
default-column-width {
|
||||||
proportion 0.5
|
proportion 0.6667
|
||||||
}
|
}
|
||||||
open-floating true
|
open-floating true
|
||||||
}
|
}
|
||||||
window-rule {
|
window-rule {
|
||||||
match app-id="floating_pulsemixer"
|
match app-id="floating_pulsemixer"
|
||||||
default-column-width {
|
default-column-width {
|
||||||
proportion 0.5
|
proportion 0.6667
|
||||||
}
|
}
|
||||||
open-floating true
|
open-floating true
|
||||||
}
|
}
|
||||||
window-rule {
|
window-rule {
|
||||||
match app-id="floating_wavemon"
|
match app-id="floating_wavemon"
|
||||||
default-column-width {
|
default-column-width {
|
||||||
proportion 0.5
|
proportion 0.6667
|
||||||
}
|
}
|
||||||
open-floating true
|
open-floating true
|
||||||
}
|
}
|
||||||
@@ -217,6 +218,9 @@ binds {
|
|||||||
Mod+Mod5+R hotkey-overlay-title="Open Bluetui" {
|
Mod+Mod5+R hotkey-overlay-title="Open Bluetui" {
|
||||||
spawn "kitty" "--class" "floating_bluetui" "-e" "bluetui"
|
spawn "kitty" "--class" "floating_bluetui" "-e" "bluetui"
|
||||||
}
|
}
|
||||||
|
Mod+Mod5+T hotkey-overlay-title="Open Wavemon" {
|
||||||
|
spawn "kitty" "--class" "floating_wavemon" "-e" "wavemon"
|
||||||
|
}
|
||||||
// Brightness Controll
|
// Brightness Controll
|
||||||
Mod+Ctrl+0 {
|
Mod+Ctrl+0 {
|
||||||
spawn "sh" "-c" "~/scripts/layer_notify.sh 0"
|
spawn "sh" "-c" "~/scripts/layer_notify.sh 0"
|
||||||
@@ -528,6 +532,10 @@ binds {
|
|||||||
Mod+Shift+4 {
|
Mod+Shift+4 {
|
||||||
spawn "sh" "-c" "grim -g \"$(slurp)\" - | wl-copy && notify-send -t 2000 'Screenshot' 'Area copied to clipboard'"
|
spawn "sh" "-c" "grim -g \"$(slurp)\" - | wl-copy && notify-send -t 2000 'Screenshot' 'Area copied to clipboard'"
|
||||||
}
|
}
|
||||||
|
// area screenshot → annotate in swappy
|
||||||
|
Mod+Shift+5 {
|
||||||
|
spawn "sh" "-c" "grim -g \"$(slurp)\" - | swappy -f -"
|
||||||
|
}
|
||||||
Mod+Escape allow-inhibiting=false {
|
Mod+Escape allow-inhibiting=false {
|
||||||
toggle-keyboard-shortcuts-inhibit
|
toggle-keyboard-shortcuts-inhibit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
],
|
],
|
||||||
"runtime.unicodeName": true,
|
"runtime.unicodeName": true,
|
||||||
"diagnostics.disable": [
|
"diagnostics.disable": [
|
||||||
"undefined-doc-name"
|
"undefined-doc-name",
|
||||||
|
"assign-type-mismatch"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
89
nvim/.config/nvim/after/ftplugin/html.lua
Normal file
89
nvim/.config/nvim/after/ftplugin/html.lua
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
-- after/ftplugin/html.lua (or just :source % once)
|
||||||
|
local port = 8085
|
||||||
|
local root = vim.loop.cwd()
|
||||||
|
local job_id = nil
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("Serve", function()
|
||||||
|
-- kill previous python instance
|
||||||
|
if job_id then
|
||||||
|
vim.fn.jobstop(job_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- one-liner HTTP server + websocket broadcast
|
||||||
|
local script = ([[
|
||||||
|
import http.server, os, subprocess, threading, time, mimetypes, json
|
||||||
|
from http.server import HTTPServer, SimpleHTTPRequestHandler
|
||||||
|
import websockets, asyncio, pathlib
|
||||||
|
|
||||||
|
ROOT = %q
|
||||||
|
PORT = %d
|
||||||
|
clients = set()
|
||||||
|
|
||||||
|
class Handler(SimpleHTTPRequestHandler):
|
||||||
|
def log_message(self, fmt, *args): pass # shut up
|
||||||
|
def do_GET(self):
|
||||||
|
if self.path == '/':
|
||||||
|
self.path = '/index.html'
|
||||||
|
# inject tiny reload script into every HTML
|
||||||
|
if self.path.endswith('.html'):
|
||||||
|
ctype = 'text/html; charset=utf-8'
|
||||||
|
with open(os.path.join(ROOT, self.path.lstrip('/')), 'rb') as f:
|
||||||
|
content = f.read().decode()
|
||||||
|
inject = '<script>let ws=new WebSocket("ws://localhost:%d/ws");ws.onmessage=()=>location.reload()</script>'
|
||||||
|
content = content.replace('</body>', inject .. '</body>')
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-type', ctype)
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(content.encode())
|
||||||
|
else:
|
||||||
|
super().do_GET()
|
||||||
|
|
||||||
|
async def ws_handler(websocket):
|
||||||
|
clients.add(websocket)
|
||||||
|
try:
|
||||||
|
await websocket.wait_closed()
|
||||||
|
finally:
|
||||||
|
clients.remove(websocket)
|
||||||
|
|
||||||
|
async def websocket_main():
|
||||||
|
await websockets.serve(ws_handler, "localhost", %d, path="/ws")
|
||||||
|
|
||||||
|
def broadcast_reload():
|
||||||
|
for c in clients:
|
||||||
|
asyncio.run(c.send("reload"))
|
||||||
|
clients.clear()
|
||||||
|
|
||||||
|
def reload_loop():
|
||||||
|
while True:
|
||||||
|
time.sleep(0.05)
|
||||||
|
try:
|
||||||
|
subprocess.check_call(["inotifywait", "-e", "close_write", "-t", "0", ROOT],
|
||||||
|
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||||
|
broadcast_reload()
|
||||||
|
except: pass # inotify not installed → noop (manual F5 still works)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
threading.Thread(target=reload_loop, daemon=True).start()
|
||||||
|
asyncio.set_event_loop(asyncio.new_event_loop())
|
||||||
|
threading.Thread(target=lambda: asyncio.run(websocket_main()), daemon=True).start()
|
||||||
|
HTTPServer(("", PORT), Handler).serve_forever()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
]]):format(root, port, port, port)
|
||||||
|
|
||||||
|
job_id = vim.fn.jobstart({ "python", "-c", script }, { stdout_buffered = true })
|
||||||
|
vim.fn.jobstart({ "sleep", "0.2" }, {
|
||||||
|
on_exit = function()
|
||||||
|
vim.ui.open(("http://localhost:%d"):format(port))
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.notify("Serving → http://localhost:" .. port, vim.log.levels.INFO)
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("ServeStop", function()
|
||||||
|
if job_id then
|
||||||
|
vim.fn.jobstop(job_id)
|
||||||
|
job_id = nil
|
||||||
|
end
|
||||||
|
end, {})
|
||||||
@@ -5,13 +5,13 @@ local function extract_email(address_string)
|
|||||||
if email then
|
if email then
|
||||||
return email
|
return email
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Match standalone email: "email@example.com"
|
-- Match standalone email: "email@example.com"
|
||||||
email = address_string:match("([%w%._%+-]+@[%w%._%+-]+)")
|
email = address_string:match("([%w%._%+-]+@[%w%._%+-]+)")
|
||||||
if email then
|
if email then
|
||||||
return email
|
return email
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Fallback: return as-is if no pattern matches
|
-- Fallback: return as-is if no pattern matches
|
||||||
return address_string
|
return address_string
|
||||||
end
|
end
|
||||||
@@ -21,14 +21,14 @@ function _G.mail_complete(findstart, base)
|
|||||||
if findstart == 1 then
|
if findstart == 1 then
|
||||||
-- Find start of word
|
-- Find start of word
|
||||||
local line = vim.api.nvim_get_current_line()
|
local line = vim.api.nvim_get_current_line()
|
||||||
local col = vim.fn.col('.')
|
local col = vim.fn.col(".")
|
||||||
local line_to_cursor = line:sub(1, col - 1)
|
local line_to_cursor = line:sub(1, col - 1)
|
||||||
|
|
||||||
-- Only on header lines
|
-- Only on header lines
|
||||||
if not line_to_cursor:match("^%s*[ToCcBcFrom]+:%s*") then
|
if not line_to_cursor:match("^%s*[ToCcBcFrom]+:%s*") then
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Find start of current address
|
-- Find start of current address
|
||||||
local start = line_to_cursor:reverse():find("[%s,]")
|
local start = line_to_cursor:reverse():find("[%s,]")
|
||||||
if start then
|
if start then
|
||||||
@@ -42,10 +42,10 @@ function _G.mail_complete(findstart, base)
|
|||||||
if not handle then
|
if not handle then
|
||||||
return {}
|
return {}
|
||||||
end
|
end
|
||||||
|
|
||||||
local result = handle:read("*a")
|
local result = handle:read("*a")
|
||||||
handle:close()
|
handle:close()
|
||||||
|
|
||||||
local matches = {}
|
local matches = {}
|
||||||
for address in result:gmatch("[^\r\n]+") do
|
for address in result:gmatch("[^\r\n]+") do
|
||||||
if address ~= "" then
|
if address ~= "" then
|
||||||
@@ -54,21 +54,21 @@ function _G.mail_complete(findstart, base)
|
|||||||
table.insert(matches, clean_email)
|
table.insert(matches, clean_email)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return matches
|
return matches
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Set omnifunc
|
-- Set omnifunc
|
||||||
vim.bo.omnifunc = 'v:lua.mail_complete'
|
vim.bo.omnifunc = "v:lua.mail_complete"
|
||||||
|
|
||||||
-- Map Tab to trigger completion on header lines
|
-- Map Tab to trigger completion on header lines
|
||||||
vim.keymap.set('i', '<Tab>', function()
|
vim.keymap.set("i", "<Tab>", function()
|
||||||
local line = vim.api.nvim_get_current_line()
|
local line = vim.api.nvim_get_current_line()
|
||||||
if line:match("^%s*[ToCcBcFrom]+:%s*") then
|
if line:match("^%s*[ToCcBcFrom]+:%s*") then
|
||||||
return '<C-x><C-o>'
|
return "<C-x><C-o>"
|
||||||
else
|
else
|
||||||
return '<Tab>'
|
return "<Tab>"
|
||||||
end
|
end
|
||||||
end, { expr = true, buffer = true })
|
end, { expr = true, buffer = true })
|
||||||
|
|
||||||
@@ -80,10 +80,10 @@ local function pick_email()
|
|||||||
vim.notify("Could not query abook", vim.log.levels.ERROR)
|
vim.notify("Could not query abook", vim.log.levels.ERROR)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local addresses = {}
|
local addresses = {}
|
||||||
local display_addresses = {}
|
local display_addresses = {}
|
||||||
|
|
||||||
for line in handle:lines() do
|
for line in handle:lines() do
|
||||||
if line ~= "" then
|
if line ~= "" then
|
||||||
local clean_email = extract_email(line)
|
local clean_email = extract_email(line)
|
||||||
@@ -93,12 +93,12 @@ local function pick_email()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
handle:close()
|
handle:close()
|
||||||
|
|
||||||
if #addresses == 0 then
|
if #addresses == 0 then
|
||||||
vim.notify("No addresses in abook", vim.log.levels.WARN)
|
vim.notify("No addresses in abook", vim.log.levels.WARN)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Use vim.ui.select (works with fzf-lua if installed)
|
-- Use vim.ui.select (works with fzf-lua if installed)
|
||||||
vim.ui.select(display_addresses, {
|
vim.ui.select(display_addresses, {
|
||||||
prompt = "Select recipient:",
|
prompt = "Select recipient:",
|
||||||
@@ -114,15 +114,13 @@ local function pick_email()
|
|||||||
local new_line = line:sub(1, col) .. email .. line:sub(col + 1)
|
local new_line = line:sub(1, col) .. email .. line:sub(col + 1)
|
||||||
vim.api.nvim_set_current_line(new_line)
|
vim.api.nvim_set_current_line(new_line)
|
||||||
-- Move cursor after inserted text
|
-- Move cursor after inserted text
|
||||||
vim.api.nvim_win_set_cursor(0, {row, col + #email})
|
vim.api.nvim_win_set_cursor(0, { row, col + #email })
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Map Ctrl+f to pick email (Option 3)
|
-- Map Ctrl+f to pick email (Option 3)
|
||||||
vim.keymap.set('i', '<C-f>', pick_email, { buffer = true, desc = "Pick email address with fzf" })
|
vim.keymap.set("i", "<C-f>", pick_email, { buffer = true, desc = "Pick email address with fzf" })
|
||||||
|
|
||||||
-- Optional: Map Ctrl+a for Tab completion manually (in case Tab doesn't work)
|
-- Optional: Map Ctrl+a for Tab completion manually (in case Tab doesn't work)
|
||||||
vim.keymap.set('i', '<C-a>', '<C-x><C-o>', { buffer = true, desc = "Trigger address completion" })
|
vim.keymap.set("i", "<C-a>", "<C-x><C-o>", { buffer = true, desc = "Trigger address completion" })
|
||||||
```
|
|
||||||
im.keymap.set("i", "<C-a>", "<C-x><C-o>", { buffer = true, desc = "Trigger address completion" })
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||||
"LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" },
|
"LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" },
|
||||||
"R.nvim": { "branch": "main", "commit": "80268b5a66ad48e308513cb0ebccc16d5e1e7d5a" },
|
"R.nvim": { "branch": "main", "commit": "659dc18aba2d2b799c04efbce66a15ea87bd6ec6" },
|
||||||
"barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" },
|
"barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" },
|
||||||
"catppuccin": { "branch": "main", "commit": "beaf41a30c26fd7d6c386d383155cbd65dd554cd" },
|
"catppuccin": { "branch": "main", "commit": "beaf41a30c26fd7d6c386d383155cbd65dd554cd" },
|
||||||
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
||||||
@@ -10,7 +10,8 @@
|
|||||||
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
|
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
|
||||||
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
|
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
|
||||||
"cmp-r": { "branch": "main", "commit": "70bfe8f4c062acc10266e24825439c009a0b1b89" },
|
"cmp-r": { "branch": "main", "commit": "70bfe8f4c062acc10266e24825439c009a0b1b89" },
|
||||||
"cmp-tabnine": { "branch": "main", "commit": "c0167cdc86c15e782c5461ee62aebee89231c2ed" },
|
"cmp-vimtex": { "branch": "master", "commit": "5283bf9108ef33d41e704027b9ef22437ce7a15b" },
|
||||||
|
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||||
"conform.nvim": { "branch": "master", "commit": "c2526f1cde528a66e086ab1668e996d162c75f4f" },
|
"conform.nvim": { "branch": "master", "commit": "c2526f1cde528a66e086ab1668e996d162c75f4f" },
|
||||||
"dashboard-nvim": { "branch": "master", "commit": "0775e567b6c0be96d01a61795f7b64c1758262f6" },
|
"dashboard-nvim": { "branch": "master", "commit": "0775e567b6c0be96d01a61795f7b64c1758262f6" },
|
||||||
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
|
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
|
||||||
@@ -19,14 +20,15 @@
|
|||||||
"everforest": { "branch": "master", "commit": "b03a03148c8b34c24c96960b93da9c8883d11f54" },
|
"everforest": { "branch": "master", "commit": "b03a03148c8b34c24c96960b93da9c8883d11f54" },
|
||||||
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
|
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
|
||||||
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
||||||
"fzf-lua": { "branch": "main", "commit": "c86b72c62b01d2242cafa45fb0d1fc3bf66e6a2b" },
|
"fzf-lua": { "branch": "main", "commit": "fb8c50ba62a0daa433b7ac2b78834f318322b879" },
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "1ce96a464fdbc24208e24c117e2021794259005d" },
|
"gitsigns.nvim": { "branch": "main", "commit": "31217271a7314c343606acb4072a94a039a19fb5" },
|
||||||
"grapple.nvim": { "branch": "main", "commit": "b41ddfc1c39f87f3d1799b99c2f0f1daa524c5f7" },
|
"grapple.nvim": { "branch": "main", "commit": "b41ddfc1c39f87f3d1799b99c2f0f1daa524c5f7" },
|
||||||
"gruvbox-mat": { "branch": "master", "commit": "790afe9dd085aa04eccd1da3626c5fa05c620e53" },
|
"gruvbox-mat": { "branch": "master", "commit": "790afe9dd085aa04eccd1da3626c5fa05c620e53" },
|
||||||
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
||||||
"kanagawa.nvim": { "branch": "master", "commit": "aef7f5cec0a40dbe7f3304214850c472e2264b10" },
|
"kanagawa.nvim": { "branch": "master", "commit": "aef7f5cec0a40dbe7f3304214850c472e2264b10" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||||
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
||||||
|
"live-preview.nvim": { "branch": "main", "commit": "f056b4b859d54595afce53e67129f7684380d3ba" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
||||||
"luvit-meta": { "branch": "main", "commit": "0ea4ff636c5bb559ffa78108561d0976f4de9682" },
|
"luvit-meta": { "branch": "main", "commit": "0ea4ff636c5bb559ffa78108561d0976f4de9682" },
|
||||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "ae609525ddf01c153c39305730b1791800ffe4fe" },
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "ae609525ddf01c153c39305730b1791800ffe4fe" },
|
||||||
@@ -41,20 +43,22 @@
|
|||||||
"nvim-cmp": { "branch": "main", "commit": "da88697d7f45d16852c6b2769dc52387d1ddc45f" },
|
"nvim-cmp": { "branch": "main", "commit": "da88697d7f45d16852c6b2769dc52387d1ddc45f" },
|
||||||
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
|
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
|
||||||
"nvim-lint": { "branch": "master", "commit": "bcd1a44edbea8cd473af7e7582d3f7ffc60d8e81" },
|
"nvim-lint": { "branch": "master", "commit": "bcd1a44edbea8cd473af7e7582d3f7ffc60d8e81" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "0480b120318ec8bab27b530ffab6ee76a8c4d806" },
|
"nvim-lspconfig": { "branch": "master", "commit": "f4e9d367d4e067d7a5fabc9fd3f1349b291eb718" },
|
||||||
"nvim-navic": { "branch": "master", "commit": "f5eba192f39b453675d115351808bd51276d9de5" },
|
"nvim-navic": { "branch": "master", "commit": "f5eba192f39b453675d115351808bd51276d9de5" },
|
||||||
"nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
|
"nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
|
||||||
"nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
|
"nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
|
||||||
"nvim-surround": { "branch": "main", "commit": "1098d7b3c34adcfa7feb3289ee434529abd4afd1" },
|
"nvim-surround": { "branch": "main", "commit": "1098d7b3c34adcfa7feb3289ee434529abd4afd1" },
|
||||||
"nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
|
"nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
|
||||||
"nvim-treesitter": { "branch": "main", "commit": "70a9fecaf5aeae70c765d4c51a8038165a91aa06" },
|
"nvim-treesitter": { "branch": "main", "commit": "9f2dad22ef8bb14fd1e0a3aa8859cdc88170668b" },
|
||||||
"nvim-treesitter-textobjects": { "branch": "main", "commit": "a0e182ae21fda68c59d1f36c9ed45600aef50311" },
|
"nvim-treesitter-textobjects": { "branch": "main", "commit": "a0e182ae21fda68c59d1f36c9ed45600aef50311" },
|
||||||
"nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" },
|
"nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" },
|
||||||
|
"nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
|
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
|
||||||
"obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" },
|
"obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" },
|
||||||
"onedark-warm": { "branch": "master", "commit": "213c23ae45a04797572242568d5d51937181792d" },
|
"onedark-warm": { "branch": "master", "commit": "213c23ae45a04797572242568d5d51937181792d" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||||
"portal.nvim": { "branch": "main", "commit": "77d9d53fec945bfa407d5fd7120f1b4f117450ed" },
|
"portal.nvim": { "branch": "main", "commit": "77d9d53fec945bfa407d5fd7120f1b4f117450ed" },
|
||||||
|
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
|
||||||
"rainbow-delimiters.nvim": { "branch": "master", "commit": "d6b802552cbe7d643a3b6b31f419c248d1f1e220" },
|
"rainbow-delimiters.nvim": { "branch": "master", "commit": "d6b802552cbe7d643a3b6b31f419c248d1f1e220" },
|
||||||
"render-markdown.nvim": { "branch": "main", "commit": "48b4175dbca8439d30c1f52231cbe5a712c8f9d9" },
|
"render-markdown.nvim": { "branch": "main", "commit": "48b4175dbca8439d30c1f52231cbe5a712c8f9d9" },
|
||||||
"rose-pine": { "branch": "main", "commit": "cf2a288696b03d0934da713d66c6d71557b5c997" },
|
"rose-pine": { "branch": "main", "commit": "cf2a288696b03d0934da713d66c6d71557b5c997" },
|
||||||
@@ -62,9 +66,11 @@
|
|||||||
"sonokai": { "branch": "master", "commit": "b023c5280b16fe2366f5e779d8d2756b3e5ee9c3" },
|
"sonokai": { "branch": "master", "commit": "b023c5280b16fe2366f5e779d8d2756b3e5ee9c3" },
|
||||||
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
||||||
"telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
|
"telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
|
||||||
|
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
|
||||||
|
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
|
||||||
"tokyonight": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
|
"tokyonight": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
|
||||||
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
|
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
|
||||||
"vimtex": { "branch": "master", "commit": "f707368022cdb851716be0d2970b90599c84a6a6" },
|
"vimtex": { "branch": "master", "commit": "95b93a24740f7b89dd8331326b41bdd1337d79f6" },
|
||||||
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
|
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
|
||||||
"yazi.nvim": { "branch": "main", "commit": "b3df5d00bbf5cd862b853993135598f12b2eb3b5" }
|
"yazi.nvim": { "branch": "main", "commit": "a3fe7b5855254974837c23c915865478b0d54534" }
|
||||||
}
|
}
|
||||||
|
|||||||
65
nvim/.config/nvim/lua/plugins.inactive/completions_1.lua
Normal file
65
nvim/.config/nvim/lua/plugins.inactive/completions_1.lua
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
-- completions.lua: Provides intelligent code completion via LSP or snippet engines.
|
||||||
|
-- completion.lua (nvim-cmp + LuaSnip)
|
||||||
|
return {
|
||||||
|
------------------------------------------------------------------
|
||||||
|
-- 1. Snippet engine & pre-made snippets
|
||||||
|
------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
"L3MON4D3/LuaSnip",
|
||||||
|
version = "v2.*",
|
||||||
|
build = "make install_jsregexp",
|
||||||
|
dependencies = { "rafamadriz/friendly-snippets" },
|
||||||
|
},
|
||||||
|
------------------------------------------------------------------
|
||||||
|
-- 2. Core completion engine + standard sources
|
||||||
|
------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
"hrsh7th/nvim-cmp",
|
||||||
|
dependencies = {
|
||||||
|
"hrsh7th/cmp-nvim-lsp",
|
||||||
|
"hrsh7th/cmp-buffer",
|
||||||
|
"hrsh7th/cmp-path",
|
||||||
|
"hrsh7th/cmp-cmdline",
|
||||||
|
"hrsh7th/cmp-nvim-lua",
|
||||||
|
"micangl/cmp-vimtex",
|
||||||
|
},
|
||||||
|
------------------------------------------------------------------
|
||||||
|
-- 3. nvim-cmp setup
|
||||||
|
------------------------------------------------------------------
|
||||||
|
config = function()
|
||||||
|
local cmp = require("cmp")
|
||||||
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
cmp.setup({
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
require("luasnip").lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
completion = cmp.config.window.bordered(),
|
||||||
|
documentation = cmp.config.window.bordered(),
|
||||||
|
},
|
||||||
|
mapping = cmp.mapping.preset.insert({
|
||||||
|
["<Tab>"] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }),
|
||||||
|
["<S-Tab>"] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }),
|
||||||
|
["<CR>"] = cmp.mapping.confirm({ select = true }),
|
||||||
|
["<C-e>"] = cmp.mapping.abort(),
|
||||||
|
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
||||||
|
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
||||||
|
}),
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = "vimtex" },
|
||||||
|
{ name = "nvim_lsp" },
|
||||||
|
{ name = "luasnip" },
|
||||||
|
{ name = "nvim_lua" },
|
||||||
|
}, {
|
||||||
|
{ name = "buffer" },
|
||||||
|
{ name = "path" },
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
-- cmd-line completion
|
||||||
|
cmp.setup.cmdline({ "/", "?" }, { sources = { { name = "buffer" } } })
|
||||||
|
cmp.setup.cmdline(":", { sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } }) })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
92
nvim/.config/nvim/lua/plugins.inactive/dap.lua
Normal file
92
nvim/.config/nvim/lua/plugins.inactive/dap.lua
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
-- lua/plugins/dap.lua
|
||||||
|
return {
|
||||||
|
{ "mfussenegger/nvim-dap" }, -- core debugger client
|
||||||
|
{ "rcarriga/nvim-dap-ui", dependencies = { "mfussenegger/nvim-dap" } },
|
||||||
|
|
||||||
|
-- Adapter bridge (Mason downloads the compiled server for us)
|
||||||
|
{
|
||||||
|
"mxsdev/nvim-dap-vscode-js",
|
||||||
|
dependencies = { "mfussenegger/nvim-dap" },
|
||||||
|
config = function()
|
||||||
|
local mason_js = vim.fn.stdpath "data"
|
||||||
|
.. "/mason/packages/js-debug-adapter" -- Mason path
|
||||||
|
require("dap-vscode-js").setup {
|
||||||
|
node_path = "node", -- node binary
|
||||||
|
debugger_path = mason_js, -- root dir of js-debug
|
||||||
|
adapters = { "pwa-node","pwa-chrome","pwa-msedge","node-terminal" }
|
||||||
|
}
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Ensure js-debug-adapter is present (Mason does the download)
|
||||||
|
{
|
||||||
|
"williamboman/mason.nvim",
|
||||||
|
cmd = { "Mason" },
|
||||||
|
config = true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"williamboman/mason-lspconfig.nvim", -- pull Mason registry
|
||||||
|
opts = function(_, o)
|
||||||
|
o.ensure_installed = o.ensure_installed or {}
|
||||||
|
vim.list_extend(o.ensure_installed, { "js-debug-adapter" })
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Optional key-maps (adapt to your taste)
|
||||||
|
{
|
||||||
|
"mfussenegger/nvim-dap",
|
||||||
|
keys = {
|
||||||
|
{ "<F5>", function() require("dap").continue() end, desc="Start / Continue" },
|
||||||
|
{ "<F9>", function() require("dap").toggle_breakpoint() end, desc="Toggle BP" },
|
||||||
|
{ "<F10>", function() require("dap").step_over() end, desc="Step over" },
|
||||||
|
{ "<F11>", function() require("dap").step_into() end, desc="Step into" },
|
||||||
|
{ "<S-F11>",function() require("dap").step_out() end, desc="Step out" },
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Debugger UI (optional)
|
||||||
|
{
|
||||||
|
"rcarriga/nvim-dap-ui",
|
||||||
|
opts = {},
|
||||||
|
keys = {
|
||||||
|
{ "<leader>du", function() require("dapui").toggle() end, desc="Dap-UI" },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- -------------------------------------------------------------
|
||||||
|
-- Launch / attach configurations
|
||||||
|
-- -------------------------------------------------------------
|
||||||
|
local dap = require "dap"
|
||||||
|
|
||||||
|
dap.configurations.javascript = {
|
||||||
|
-- 1. Run current file with node
|
||||||
|
{
|
||||||
|
name = "Launch Node file",
|
||||||
|
type = "pwa-node",
|
||||||
|
request = "launch",
|
||||||
|
program = "${file}",
|
||||||
|
cwd = "${workspaceFolder}",
|
||||||
|
stopOnEntry = false,
|
||||||
|
},
|
||||||
|
-- 2. Attach to an existing node process (started with --inspect)
|
||||||
|
{
|
||||||
|
name = "Attach to node process",
|
||||||
|
type = "pwa-node",
|
||||||
|
request = "attach",
|
||||||
|
processId = require("dap.utils").pick_process
|
||||||
|
},
|
||||||
|
-- 3. Launch Chrome and attach to page
|
||||||
|
{
|
||||||
|
name = "Launch Chrome & attach",
|
||||||
|
type = "pwa-chrome",
|
||||||
|
request = "launch",
|
||||||
|
url = "http://localhost:8080",
|
||||||
|
webRoot = "${workspaceFolder}",
|
||||||
|
userDataDir = false -- reuse your normal profile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- share same configs for TS
|
||||||
|
dap.configurations.typescript = dap.configurations.javascript
|
||||||
|
dap.configurations.typescriptreact = dap.configurations.javascript
|
||||||
71
nvim/.config/nvim/lua/plugins.inactive/emmet.lua
Normal file
71
nvim/.config/nvim/lua/plugins.inactive/emmet.lua
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
return {
|
||||||
|
"olimorris/emmet-ls",
|
||||||
|
ft = {
|
||||||
|
"html",
|
||||||
|
"htm",
|
||||||
|
"css",
|
||||||
|
"scss",
|
||||||
|
"sass",
|
||||||
|
"less",
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"vue",
|
||||||
|
"svelte",
|
||||||
|
"php",
|
||||||
|
"xml",
|
||||||
|
"xsl",
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- Enable snippet support
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
|
||||||
|
-- Set up emmet-ls using the new method
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = {
|
||||||
|
"html",
|
||||||
|
"htm",
|
||||||
|
"css",
|
||||||
|
"scss",
|
||||||
|
"sass",
|
||||||
|
"less",
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"vue",
|
||||||
|
"svelte",
|
||||||
|
"php",
|
||||||
|
"xml",
|
||||||
|
"xsl",
|
||||||
|
},
|
||||||
|
callback = function(args)
|
||||||
|
vim.lsp.start({
|
||||||
|
name = "emmet-ls",
|
||||||
|
cmd = { "emmet-ls", "--stdio" },
|
||||||
|
root_dir = vim.fs.dirname(vim.fs.find({ ".git" }, { upward = true })[1]),
|
||||||
|
capabilities = capabilities,
|
||||||
|
filetypes = {
|
||||||
|
"html",
|
||||||
|
"htm",
|
||||||
|
"css",
|
||||||
|
"scss",
|
||||||
|
"sass",
|
||||||
|
"less",
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"vue",
|
||||||
|
"svelte",
|
||||||
|
"php",
|
||||||
|
"xml",
|
||||||
|
"xsl",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
17
nvim/.config/nvim/lua/plugins.inactive/noice.lua
Normal file
17
nvim/.config/nvim/lua/plugins.inactive/noice.lua
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
-- noice.lua: Replaces default UI messages with polished, keyboard-friendly notifications.
|
||||||
|
|
||||||
|
return { -- lazy.nvim
|
||||||
|
{
|
||||||
|
"folke/noice.nvim",
|
||||||
|
event = "VeryLazy",
|
||||||
|
opts = {},
|
||||||
|
dependencies = {
|
||||||
|
-- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
|
||||||
|
"MunifTanjim/nui.nvim",
|
||||||
|
-- OPTIONAL:
|
||||||
|
-- `nvim-notify` is only needed, if you want to use the notification view.
|
||||||
|
-- If not available, we use `mini` as the fallback
|
||||||
|
"rcarriga/nvim-notify",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
-- ~/.config/nvim/lua/plugins/nvim-ufo.lua
|
||||||
return {
|
return {
|
||||||
"kevinhwang91/nvim-ufo",
|
"kevinhwang91/nvim-ufo",
|
||||||
dependencies = "kevinhwang91/promise-async",
|
dependencies = "kevinhwang91/promise-async",
|
||||||
@@ -26,13 +27,14 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
local ufo = require("ufo")
|
require("ufo").setup({
|
||||||
ufo.setup({
|
provider_selector = function(_, filetype)
|
||||||
provider_selector = function(bufnr, filetype, buftype)
|
-- File-types that constantly throw UfoFallbackException → skip TS
|
||||||
-- prefer LSP, fall back to treesitter
|
local noisy = { "html", "css", "json", "yaml", "txt", "md" }
|
||||||
return { "lsp", "treesitter" }
|
if vim.tbl_contains(noisy, filetype) then
|
||||||
|
return { "lsp", "indent" } -- 2 providers max → no warning
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
fold_virt_text_handler = ufo.handler, -- default virtual text
|
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
88
nvim/.config/nvim/lua/plugins.inactive/vimtex.lua
Normal file
88
nvim/.config/nvim/lua/plugins.inactive/vimtex.lua
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
-- vimtex.lua: Full LaTeX editing support (compiling, viewing, and syntax).
|
||||||
|
|
||||||
|
return {
|
||||||
|
"lervag/vimtex",
|
||||||
|
ft = "tex",
|
||||||
|
config = function()
|
||||||
|
-- PDF viewer
|
||||||
|
vim.g.vimtex_view_method = "zathura"
|
||||||
|
|
||||||
|
-- Compiler settings
|
||||||
|
vim.g.vimtex_compiler_latexmk = {
|
||||||
|
continuous = 1,
|
||||||
|
callback = 1,
|
||||||
|
options = {
|
||||||
|
"-pdf",
|
||||||
|
"-shell-escape",
|
||||||
|
"-verbose",
|
||||||
|
"-file-line-error",
|
||||||
|
"-synctex=1",
|
||||||
|
"-interaction=nonstopmode",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
-- Concealment (makes LaTeX prettier to read)
|
||||||
|
vim.g.vimtex_syntax_conceal = {
|
||||||
|
accents = 1,
|
||||||
|
math_symbols = 1,
|
||||||
|
math_fracs = 1,
|
||||||
|
math_super_sub = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.g.vimtex_toc_config = {
|
||||||
|
name = "TOC",
|
||||||
|
layers = { "content", "todo", "include" },
|
||||||
|
split_width = 25,
|
||||||
|
todo_sorted = 0,
|
||||||
|
show_help = 1,
|
||||||
|
show_numbers = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Don't open quickfix window automatically
|
||||||
|
vim.g.vimtex_quickfix_mode = 0
|
||||||
|
|
||||||
|
-- kenable folding
|
||||||
|
vim.g.vimtex_fold_enabled = 1
|
||||||
|
|
||||||
|
-- What to fold (customize as needed)
|
||||||
|
vim.g.vimtex_fold_types = {
|
||||||
|
envs = {
|
||||||
|
enabled = 1,
|
||||||
|
whitelist = {}, -- Empty = all environments
|
||||||
|
blacklist = {},
|
||||||
|
},
|
||||||
|
sections = {
|
||||||
|
enabled = 1,
|
||||||
|
sections = {
|
||||||
|
"%(add)?part",
|
||||||
|
"%(chapter|%(sub)*section|%(sub)?paragraph)",
|
||||||
|
"appendix",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
items = {
|
||||||
|
enabled = 0, -- Don't fold individual list items
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Disable some features for better performance (optional)
|
||||||
|
vim.g.vimtex_indent_enabled = 1
|
||||||
|
vim.g.vimtex_syntax_enabled = 1
|
||||||
|
|
||||||
|
vim.g.vimtex_syntax_conceal = {
|
||||||
|
accents = 1,
|
||||||
|
ligatures = 1,
|
||||||
|
cites = 1,
|
||||||
|
fancy = 1,
|
||||||
|
spacing = 1,
|
||||||
|
greek = 1,
|
||||||
|
math_bounds = 1,
|
||||||
|
math_delimiters = 1,
|
||||||
|
math_fracs = 1,
|
||||||
|
math_super_sub = 1,
|
||||||
|
math_symbols = 1,
|
||||||
|
sections = 0,
|
||||||
|
styles = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.opt.conceallevel = 2
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
-- completions.lua: Provides intelligent code completion via LSP or snippet engines.
|
-- completions.lua: Provides intelligent code completion via LSP or snippet engines.
|
||||||
-- completion.lua (nvim-cmp + LuaSnip)
|
-- completion.lua (nvim-cmp + LuaSnip)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
-- 1. Snippet engine & pre-made snippets
|
-- 1. Snippet engine & pre-made snippets
|
||||||
@@ -9,8 +10,14 @@ return {
|
|||||||
version = "v2.*",
|
version = "v2.*",
|
||||||
build = "make install_jsregexp",
|
build = "make install_jsregexp",
|
||||||
dependencies = { "rafamadriz/friendly-snippets" },
|
dependencies = { "rafamadriz/friendly-snippets" },
|
||||||
|
config = function()
|
||||||
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
require("luasnip.loaders.from_lua").load({
|
||||||
|
paths = { vim.fn.stdpath("config") .. "/snippets" },
|
||||||
|
})
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
------------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
-- 2. Core completion engine + standard sources
|
-- 2. Core completion engine + standard sources
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
@@ -21,43 +28,59 @@ return {
|
|||||||
"hrsh7th/cmp-path",
|
"hrsh7th/cmp-path",
|
||||||
"hrsh7th/cmp-cmdline",
|
"hrsh7th/cmp-cmdline",
|
||||||
"hrsh7th/cmp-nvim-lua",
|
"hrsh7th/cmp-nvim-lua",
|
||||||
|
"micangl/cmp-vimtex",
|
||||||
|
"saadparwaiz1/cmp_luasnip",
|
||||||
},
|
},
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
-- 3. nvim-cmp setup
|
-- 3. nvim-cmp setup
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
config = function()
|
config = function()
|
||||||
local cmp = require("cmp")
|
local cmp = require("cmp")
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
local luasnip = require("luasnip")
|
||||||
|
|
||||||
cmp.setup({
|
cmp.setup({
|
||||||
snippet = {
|
snippet = {
|
||||||
expand = function(args)
|
expand = function(args)
|
||||||
require("luasnip").lsp_expand(args.body)
|
luasnip.lsp_expand(args.body) -- Correctly calls LuaSnip [3]
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
window = {
|
|
||||||
completion = cmp.config.window.bordered(),
|
|
||||||
documentation = cmp.config.window.bordered(),
|
|
||||||
},
|
|
||||||
mapping = cmp.mapping.preset.insert({
|
mapping = cmp.mapping.preset.insert({
|
||||||
["<Tab>"] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }),
|
|
||||||
["<S-Tab>"] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }),
|
|
||||||
["<CR>"] = cmp.mapping.confirm({ select = true }),
|
|
||||||
["<C-e>"] = cmp.mapping.abort(),
|
|
||||||
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
||||||
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
||||||
|
["<C-Space>"] = cmp.mapping.complete(),
|
||||||
|
["<CR>"] = cmp.mapping.confirm({ select = true }),
|
||||||
|
|
||||||
|
-- Fix: Tab now handles expansion and jumping
|
||||||
|
["<Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
elseif luasnip.expand_or_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, { "i", "s" }),
|
||||||
|
|
||||||
|
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
elseif luasnip.jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, { "i", "s" }),
|
||||||
}),
|
}),
|
||||||
sources = cmp.config.sources({
|
sources = cmp.config.sources({
|
||||||
{ name = "nvim_lsp" },
|
{ name = "luasnip", priority = 1000 }, -- Priority 2: Standard Snippets
|
||||||
{ name = "luasnip" },
|
{ name = "nvim_lsp", priority = 750 }, -- Priority 1: LSP (Snippets)
|
||||||
{ name = "nvim_lua" },
|
{ name = "vimtex", priority = 500 }, -- Priority 3: Vimtex (Text/Commands)
|
||||||
|
{ name = "nvim_lua", priority = 250 },
|
||||||
}, {
|
}, {
|
||||||
{ name = "buffer" },
|
{ name = "buffer" },
|
||||||
{ name = "path" },
|
{ name = "path" },
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
-- cmd-line completion
|
|
||||||
cmp.setup.cmdline({ "/", "?" }, { sources = { { name = "buffer" } } })
|
|
||||||
cmp.setup.cmdline(":", { sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } }) })
|
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,15 +77,15 @@ return {
|
|||||||
key_hl = "Number",
|
key_hl = "Number",
|
||||||
action = "ObsidianQuickSwitch",
|
action = "ObsidianQuickSwitch",
|
||||||
},
|
},
|
||||||
-- {
|
{
|
||||||
-- icon = " ",
|
icon = " ",
|
||||||
-- icon_hl = "Title",
|
icon_hl = "Title",
|
||||||
-- desc = "Projects (SPC fp) ", -- Note: shows keymap
|
desc = "Projects (SPC fp) ", -- Note: shows keymap
|
||||||
-- desc_hl = "String",
|
desc_hl = "String",
|
||||||
-- key = "p",
|
key = "p",
|
||||||
-- key_hl = "Number",
|
key_hl = "Number",
|
||||||
-- action = "Telescope projections", -- Will lazy-load when pressed
|
action = "Telescope projections", -- Will lazy-load when pressed
|
||||||
-- },
|
},
|
||||||
{
|
{
|
||||||
icon = " ",
|
icon = " ",
|
||||||
icon_hl = "Title",
|
icon_hl = "Title",
|
||||||
|
|||||||
26
nvim/.config/nvim/lua/plugins/live-preview.lua
Normal file
26
nvim/.config/nvim/lua/plugins/live-preview.lua
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
-- ~/.config/nvim/lua/plugins/live-preview.lua
|
||||||
|
return {
|
||||||
|
"brianhuster/live-preview.nvim",
|
||||||
|
dev = false,
|
||||||
|
cmd = { "LivePreview", "LivePreviewStop" },
|
||||||
|
keys = {
|
||||||
|
{ "<leader>lp", "<cmd>LivePreview<CR>", desc = "Start live HTML preview" },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require("live-preview").setup({
|
||||||
|
port = 3027, -- local server port
|
||||||
|
browser = "default", -- system browser
|
||||||
|
dynamic_root = true, -- serve from the project root
|
||||||
|
autokill = false, -- keep server alive when you leave nvim
|
||||||
|
})
|
||||||
|
|
||||||
|
-- (optional) auto-save on change so the browser refreshes
|
||||||
|
vim.o.autowriteall = true
|
||||||
|
vim.api.nvim_create_autocmd({ "InsertLeavePre", "TextChanged" }, {
|
||||||
|
pattern = "*.{html,htm,css,js,md}",
|
||||||
|
callback = function()
|
||||||
|
vim.cmd("silent! write")
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -95,7 +95,7 @@ return {
|
|||||||
language = "en-US",
|
language = "en-US",
|
||||||
enabled = { "latex", "tex", "bib", "markdown", "mail", "text" },
|
enabled = { "latex", "tex", "bib", "markdown", "mail", "text" },
|
||||||
checkFrequency = "save", -- Only check when you save, not on every keystroke
|
checkFrequency = "save", -- Only check when you save, not on every keystroke
|
||||||
diagnosticSeverity = "hint", -- Less intrusive
|
diagnosticSeverity = "warning", -- Less intrusive
|
||||||
completionEnabled = true,
|
completionEnabled = true,
|
||||||
additionalRules = {
|
additionalRules = {
|
||||||
enablePickyRules = true,
|
enablePickyRules = true,
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ return {
|
|||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
"lua_ls",
|
"lua_ls",
|
||||||
"pyright",
|
"pyright",
|
||||||
|
"emmet_ls",
|
||||||
"bashls",
|
"bashls",
|
||||||
"ts_ls",
|
"ts_ls",
|
||||||
"solargraph",
|
"solargraph",
|
||||||
|
|||||||
@@ -1,18 +1,32 @@
|
|||||||
-- noice.lua: Replaces default UI messages with polished, keyboard-friendly notifications.
|
-- noice.lua: Replaces default UI messages with polished, keyboard-friendly notifications.
|
||||||
|
|
||||||
return { -- lazy.nvim
|
return {
|
||||||
{
|
{
|
||||||
"folke/noice.nvim",
|
"folke/noice.nvim",
|
||||||
event = "VeryLazy",
|
event = "VeryLazy",
|
||||||
opts = {
|
opts = {
|
||||||
-- add any options here
|
cmdline = {
|
||||||
|
view = "cmdline_popup",
|
||||||
|
opts = { border = { style = "rounded", padding = { 0, 1 } } },
|
||||||
|
},
|
||||||
|
messages = {
|
||||||
|
view = "notify",
|
||||||
|
view_opts = { border = { style = "rounded", padding = { 0, 1 } } },
|
||||||
|
},
|
||||||
|
popupmenu = {
|
||||||
|
backend = "nui",
|
||||||
|
nui = { border = { style = "rounded", padding = { 0, 1 } } },
|
||||||
|
},
|
||||||
|
lsp = {
|
||||||
|
hover = { opts = { border = { style = "rounded", padding = { 0, 1 } } } },
|
||||||
|
signature = { opts = { border = { style = "rounded", padding = { 0, 1 } } } },
|
||||||
|
},
|
||||||
|
presets = {
|
||||||
|
lsp_doc_border = true, -- adds border to hover/signature automatically
|
||||||
|
},
|
||||||
},
|
},
|
||||||
dependencies = {
|
dependencies = {
|
||||||
-- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
|
|
||||||
"MunifTanjim/nui.nvim",
|
"MunifTanjim/nui.nvim",
|
||||||
-- OPTIONAL:
|
|
||||||
-- `nvim-notify` is only needed, if you want to use the notification view.
|
|
||||||
-- If not available, we use `mini` as the fallback
|
|
||||||
"rcarriga/nvim-notify",
|
"rcarriga/nvim-notify",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ return {
|
|||||||
opts = {
|
opts = {
|
||||||
workspaces = {
|
workspaces = {
|
||||||
{
|
{
|
||||||
name = "personal",
|
name = "liph",
|
||||||
path = "/mnt/flash1/podman/nextcloud/config/obsidian/vaults/Phil/",
|
path = "/mnt/flash1/podman/nextcloud/config/obsidian/vaults",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
68
nvim/.config/nvim/lua/plugins/todo-comments.lua
Normal file
68
nvim/.config/nvim/lua/plugins/todo-comments.lua
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
return {
|
||||||
|
"folke/todo-comments.nvim",
|
||||||
|
event = "VeryLazy", -- start only after UI is ready
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
opts = {
|
||||||
|
signs = true, -- show icons in the sign column
|
||||||
|
sign_priority = 10,
|
||||||
|
keywords = {
|
||||||
|
FIX = { icon = " ", color = "error", alt = { "FIXME", "BUG", "FIXIT", "ISSUE" } },
|
||||||
|
TODO = { icon = " ", color = "info", alt = { "todo" } },
|
||||||
|
HACK = { icon = " ", color = "warning", alt = { "hack" } },
|
||||||
|
WARN = { icon = " ", color = "warning", alt = { "WARNING", "XXX" } },
|
||||||
|
PERF = { icon = " ", color = "#e6645a", alt = { "OPTIM", "PERFORMANCE", "OPTIMIZE" } },
|
||||||
|
NOTE = { icon = " ", color = "hint", alt = { "INFO", "NOTE" } },
|
||||||
|
TEST = { icon = "⏲ ", color = "test", alt = { "TESTING", "PASSED", "FAILED" } },
|
||||||
|
},
|
||||||
|
merge_keywords = true, -- merge with default list above
|
||||||
|
highlight = {
|
||||||
|
before = "", -- "fg" or "bg" or ""
|
||||||
|
keyword = "wide", -- "fg", "bg", "wide" or ""
|
||||||
|
after = "fg", -- "fg" or "bg" or ""
|
||||||
|
pattern = [[.*<(KEYWORDS)\s*:]],
|
||||||
|
comments_only = true, -- highlight only inside comments
|
||||||
|
max_line_len = 400,
|
||||||
|
exclude = {}, -- list of filetypes to exclude
|
||||||
|
},
|
||||||
|
colors = {
|
||||||
|
error = { "DiagnosticError", "#e6645a" },
|
||||||
|
warning = { "DiagnosticWarn", "#ff9e64" },
|
||||||
|
info = { "DiagnosticInfo", "#7aa2f7" },
|
||||||
|
hint = { "DiagnosticHint", "#9ece6a" },
|
||||||
|
test = { "#d4ae5b" },
|
||||||
|
},
|
||||||
|
search = {
|
||||||
|
command = "rg",
|
||||||
|
args = {
|
||||||
|
"--color=never",
|
||||||
|
"--no-heading",
|
||||||
|
"--with-filename",
|
||||||
|
"--line-number",
|
||||||
|
"--column",
|
||||||
|
},
|
||||||
|
pattern = [[\b(KEYWORDS):]], -- ripgrep regex
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
-- navigation between todo-comments
|
||||||
|
{
|
||||||
|
"]t",
|
||||||
|
function()
|
||||||
|
require("todo-comments").jump_next()
|
||||||
|
end,
|
||||||
|
desc = "Next todo comment",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"[t",
|
||||||
|
function()
|
||||||
|
require("todo-comments").jump_prev()
|
||||||
|
end,
|
||||||
|
desc = "Previous todo comment",
|
||||||
|
},
|
||||||
|
-- telescope / fzf-lua live search
|
||||||
|
{ "<leader>st", "<cmd>TodoTelescope<CR>", desc = "Todo comments (Telescope)" },
|
||||||
|
{ "<leader>sT", "<cmd>TodoFzfLua<CR>", desc = "Todo comments (FzfLua)" },
|
||||||
|
-- Trouble.nvim integration
|
||||||
|
{ "<leader>xt", "<cmd>TodoTrouble<CR>", desc = "Todo comments (Trouble)" },
|
||||||
|
},
|
||||||
|
}
|
||||||
59
nvim/.config/nvim/lua/plugins/toggleterm.lua
Normal file
59
nvim/.config/nvim/lua/plugins/toggleterm.lua
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
return {
|
||||||
|
"akinsho/toggleterm.nvim",
|
||||||
|
version = "*",
|
||||||
|
cmd = { "ToggleTerm", "TermExec" },
|
||||||
|
keys = {
|
||||||
|
-- normal terminal (horizontal split)
|
||||||
|
{ "<C-t>", "<cmd>ToggleTerm direction=horizontal<CR>", desc = "Toggle horizontal terminal" },
|
||||||
|
-- floating terminal
|
||||||
|
{ "<C-f>", "<cmd>ToggleTerm direction=float<CR>", desc = "Toggle floating terminal" },
|
||||||
|
-- vertical terminal
|
||||||
|
{ "<leader>tv", "<cmd>ToggleTerm direction=vertical size=60<CR>", desc = "Toggle vertical terminal" },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
size = function(term)
|
||||||
|
if term.direction == "horizontal" then
|
||||||
|
return 15
|
||||||
|
elseif term.direction == "vertical" then
|
||||||
|
return vim.o.columns * 0.4
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
open_mapping = [[<C-t>]],
|
||||||
|
shading_factor = 2,
|
||||||
|
direction = "horizontal",
|
||||||
|
float_opts = {
|
||||||
|
border = "rounded",
|
||||||
|
width = math.floor(vim.o.columns * 0.9),
|
||||||
|
height = math.floor(vim.o.lines * 0.9),
|
||||||
|
winblend = 0,
|
||||||
|
},
|
||||||
|
highlights = {
|
||||||
|
FloatBorder = { link = "FloatBorder" },
|
||||||
|
},
|
||||||
|
persist_size = true,
|
||||||
|
persist_mode = true,
|
||||||
|
shell = vim.o.shell,
|
||||||
|
auto_scroll = true,
|
||||||
|
close_on_exit = true,
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require("toggleterm").setup(opts)
|
||||||
|
|
||||||
|
-- send escape to leave terminal mode
|
||||||
|
vim.keymap.set("t", "<Esc>", [[<C-\><C-n>]])
|
||||||
|
|
||||||
|
-- quick access to lazygit (requires lazygit binary)
|
||||||
|
vim.keymap.set("n", "<leader>gg", function()
|
||||||
|
local Terminal = require("toggleterm.terminal").Terminal
|
||||||
|
local lazygit = Terminal:new({
|
||||||
|
cmd = "lazygit",
|
||||||
|
direction = "float",
|
||||||
|
hidden = true,
|
||||||
|
on_open = function(t)
|
||||||
|
vim.api.nvim_buf_set_keymap(t.bufnr, "t", "<Esc>", [[<C-\><C-n>]], { noremap = true, silent = true })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
lazygit:toggle()
|
||||||
|
end, { desc = "LazyGit floating window" })
|
||||||
|
end,
|
||||||
|
}
|
||||||
61
nvim/.config/nvim/lua/plugins/ufo.lua
Normal file
61
nvim/.config/nvim/lua/plugins/ufo.lua
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
return {
|
||||||
|
"kevinhwang91/nvim-ufo",
|
||||||
|
dependencies = "kevinhwang91/promise-async",
|
||||||
|
event = { "BufReadPost", "BufNewFile" },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"zR",
|
||||||
|
function()
|
||||||
|
require("ufo").openAllFolds()
|
||||||
|
end,
|
||||||
|
desc = "Ufo: open all folds",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"zM",
|
||||||
|
function()
|
||||||
|
require("ufo").closeAllFolds()
|
||||||
|
end,
|
||||||
|
desc = "Ufo: close all folds",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"zr",
|
||||||
|
function()
|
||||||
|
require("ufo").openFoldsExceptKinds()
|
||||||
|
end,
|
||||||
|
desc = "Ufo: open outer folds",
|
||||||
|
},
|
||||||
|
|
||||||
|
------------------------------------------------------------------
|
||||||
|
-- 1. Close everything *outside* the current fold hierarchy
|
||||||
|
------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
"zX",
|
||||||
|
function()
|
||||||
|
require("ufo").closeAllFolds() -- close every fold
|
||||||
|
vim.cmd("normal! l") -- ONE right press
|
||||||
|
vim.cmd("normal! zo") -- open fold under cursor
|
||||||
|
vim.cmd("normal! zz") -- keep it centred
|
||||||
|
end,
|
||||||
|
desc = "Close folds outside current (+1 right)",
|
||||||
|
},
|
||||||
|
------------------------------------------------------------------
|
||||||
|
-- 3. helpers you already had
|
||||||
|
------------------------------------------------------------------
|
||||||
|
{ "zt", "za", desc = "Toggle fold under cursor" },
|
||||||
|
},
|
||||||
|
|
||||||
|
config = function()
|
||||||
|
require("ufo").setup({
|
||||||
|
foldlevel = 99,
|
||||||
|
foldlevelstart = 99,
|
||||||
|
provider_selector = function(_, ft)
|
||||||
|
-- Silence the fallback spam by skipping Treesitter for noisy types
|
||||||
|
local noisy = { "html", "css", "json", "yaml", "txt", "markdown", "zsh" }
|
||||||
|
if vim.tbl_contains(noisy, ft) then
|
||||||
|
return { "lsp", "indent" } -- max 2 providers
|
||||||
|
end
|
||||||
|
return { "lsp" }
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ return {
|
|||||||
config = function()
|
config = function()
|
||||||
-- PDF viewer
|
-- PDF viewer
|
||||||
vim.g.vimtex_view_method = "zathura"
|
vim.g.vimtex_view_method = "zathura"
|
||||||
|
|
||||||
-- Compiler settings
|
-- Compiler settings
|
||||||
vim.g.vimtex_compiler_latexmk = {
|
vim.g.vimtex_compiler_latexmk = {
|
||||||
continuous = 1,
|
continuous = 1,
|
||||||
@@ -27,7 +26,6 @@ return {
|
|||||||
math_fracs = 1,
|
math_fracs = 1,
|
||||||
math_super_sub = 1,
|
math_super_sub = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.g.vimtex_toc_config = {
|
vim.g.vimtex_toc_config = {
|
||||||
name = "TOC",
|
name = "TOC",
|
||||||
layers = { "content", "todo", "include" },
|
layers = { "content", "todo", "include" },
|
||||||
@@ -36,13 +34,10 @@ return {
|
|||||||
show_help = 1,
|
show_help = 1,
|
||||||
show_numbers = 1,
|
show_numbers = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Don't open quickfix window automatically
|
-- Don't open quickfix window automatically
|
||||||
vim.g.vimtex_quickfix_mode = 0
|
vim.g.vimtex_quickfix_mode = 0
|
||||||
|
-- Enable folding
|
||||||
-- kenable folding
|
|
||||||
vim.g.vimtex_fold_enabled = 1
|
vim.g.vimtex_fold_enabled = 1
|
||||||
|
|
||||||
-- What to fold (customize as needed)
|
-- What to fold (customize as needed)
|
||||||
vim.g.vimtex_fold_types = {
|
vim.g.vimtex_fold_types = {
|
||||||
envs = {
|
envs = {
|
||||||
@@ -62,11 +57,11 @@ return {
|
|||||||
enabled = 0, -- Don't fold individual list items
|
enabled = 0, -- Don't fold individual list items
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Disable some features for better performance (optional)
|
-- Disable some features for better performance (optional)
|
||||||
vim.g.vimtex_indent_enabled = 1
|
vim.g.vimtex_indent_enabled = 1
|
||||||
vim.g.vimtex_syntax_enabled = 1
|
vim.g.vimtex_syntax_enabled = 1
|
||||||
|
|
||||||
|
-- Enhanced concealment settings - ADD THESE OPTIONS
|
||||||
vim.g.vimtex_syntax_conceal = {
|
vim.g.vimtex_syntax_conceal = {
|
||||||
accents = 1,
|
accents = 1,
|
||||||
ligatures = 1,
|
ligatures = 1,
|
||||||
@@ -83,6 +78,44 @@ return {
|
|||||||
styles = 1,
|
styles = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Set conceal level (2 = moderate concealment)
|
||||||
vim.opt.conceallevel = 2
|
vim.opt.conceallevel = 2
|
||||||
|
|
||||||
|
-- KEYBINDS FOR UNFOLDING AND CONCEALMENT TOGGLE
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "tex",
|
||||||
|
callback = function()
|
||||||
|
-- Toggle all folds open/close
|
||||||
|
vim.keymap.set("n", "<leader>fo", "zR", { buffer = true, desc = "Open all folds" })
|
||||||
|
vim.keymap.set("n", "<leader>fc", "zM", { buffer = true, desc = "Close all folds" })
|
||||||
|
|
||||||
|
-- Toggle concealment (show/hide LaTeX commands)
|
||||||
|
vim.keymap.set("n", "<leader>tc", function()
|
||||||
|
if vim.opt.conceallevel:get() == 0 then
|
||||||
|
vim.opt.conceallevel = 2
|
||||||
|
print("Concealment enabled")
|
||||||
|
else
|
||||||
|
vim.opt.conceallevel = 0
|
||||||
|
print("Concealment disabled")
|
||||||
|
end
|
||||||
|
end, { buffer = true, desc = "Toggle concealment" })
|
||||||
|
|
||||||
|
-- Alternative: Quick toggle for specific vimtex concealment
|
||||||
|
vim.keymap.set("n", "<leader>tv", function()
|
||||||
|
if vim.g.vimtex_syntax_conceal_enabled == 1 then
|
||||||
|
vim.g.vimtex_syntax_conceal_enabled = 0
|
||||||
|
print("VimTeX concealment disabled")
|
||||||
|
else
|
||||||
|
vim.g.vimtex_syntax_conceal_enabled = 1
|
||||||
|
print("VimTeX concealment enabled")
|
||||||
|
end
|
||||||
|
end, { buffer = true, desc = "Toggle vimtex conceal" })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- -- You can also add global keybinds if preferred
|
||||||
|
-- vim.keymap.set("n", "<leader>lt", "<cmd>VimtexTocToggle<cr>", { desc = "LaTeX TOC" })
|
||||||
|
-- vim.keymap.set("n", "<leader>lc", "<cmd>VimtexCompile<cr>", { desc = "LaTeX compile" })
|
||||||
|
-- vim.keymap.set("n", "<leader>lv", "<cmd>VimtexView<cr>", { desc = "LaTeX view" })
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
70
nvim/.config/nvim/lua/snippetse/tex.lua
Normal file
70
nvim/.config/nvim/lua/snippetse/tex.lua
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
local ls = require("luasnip")
|
||||||
|
local s = ls.snippet
|
||||||
|
local t = ls.text_node
|
||||||
|
local i = ls.insert_node
|
||||||
|
local fmt = require("luasnip.extras.fmt").fmt
|
||||||
|
|
||||||
|
ls.add_snippets("tex", {
|
||||||
|
|
||||||
|
-- \beg → full figure environment
|
||||||
|
s(
|
||||||
|
"beg",
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
\begin{{{}}}{}
|
||||||
|
{}
|
||||||
|
\end{{{}}}]],
|
||||||
|
{
|
||||||
|
i(1, "environment"),
|
||||||
|
i(2, ""),
|
||||||
|
i(3, ""),
|
||||||
|
-- mirror node 1 so \end matches \begin automatically
|
||||||
|
require("luasnip.extras").rep(1),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
-- fig → full figure block
|
||||||
|
s(
|
||||||
|
"fig",
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
\begin{{figure}}[htbp]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width={}]{{{}}
|
||||||
|
\caption{{{}}}
|
||||||
|
\label{{fig:{}}}
|
||||||
|
\end{{figure}}]],
|
||||||
|
{
|
||||||
|
i(1, "0.8\\textwidth"),
|
||||||
|
i(2, "file"),
|
||||||
|
i(3, "caption"),
|
||||||
|
i(4, "label"),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
-- eq → equation
|
||||||
|
s(
|
||||||
|
"eq",
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
\begin{{equation}}
|
||||||
|
{}
|
||||||
|
\end{{equation}}]],
|
||||||
|
{ i(1, "") }
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
-- ali → align
|
||||||
|
s(
|
||||||
|
"ali",
|
||||||
|
fmt(
|
||||||
|
[[
|
||||||
|
\begin{{align}}
|
||||||
|
{} &= {} \\
|
||||||
|
\end{{align}}]],
|
||||||
|
{ i(1, ""), i(2, "") }
|
||||||
|
)
|
||||||
|
),
|
||||||
|
})
|
||||||
@@ -17,6 +17,32 @@ vim.keymap.set("n", "<c-l>", ":wincmd l<CR>")
|
|||||||
vim.keymap.set("n", "<leader>h", ":nohlsearch<CR>")
|
vim.keymap.set("n", "<leader>h", ":nohlsearch<CR>")
|
||||||
vim.wo.number = true
|
vim.wo.number = true
|
||||||
|
|
||||||
-- In your keybindings file
|
-- latex pdf compile and live preview
|
||||||
vim.keymap.set("n", "<leader>lc", ":!pdflatex %<CR>", { desc = "Compile LaTeX" })
|
-- vimtex already provides these — just map them to your preferred keys
|
||||||
vim.keymap.set("n", "<leader>lv", ":!zathura %:r.pdf &<CR>", { desc = "View PDF" })
|
vim.keymap.set("n", "<leader>lc", "<cmd>VimtexCompile<CR>", { desc = "Compile LaTeX (toggle)" })
|
||||||
|
vim.keymap.set("n", "<leader>lv", "<cmd>VimtexView<CR>", { desc = "View PDF in Zathura" })
|
||||||
|
vim.keymap.set("n", "<leader>le", "<cmd>VimtexErrors<CR>", { desc = "Show errors" })
|
||||||
|
vim.keymap.set("n", "<leader>lk", "<cmd>VimtexStop<CR>", { desc = "Stop compiler" })
|
||||||
|
vim.keymap.set("n", "<leader>lK", "<cmd>VimtexStopAll<CR>", { desc = "Stop all compilers" })
|
||||||
|
vim.keymap.set("n", "<leader>lx", "<cmd>VimtexClean<CR>", { desc = "Clean aux files" })
|
||||||
|
vim.keymap.set("n", "<leader>lt", "<cmd>VimtexTocToggle<CR>", { desc = "Toggle TOC" })
|
||||||
|
-- vim.keymap.set("n", "<leader>lc", ":!pdflatex %<CR>", { desc = "Compile LaTeX" })
|
||||||
|
-- vim.keymap.set("n", "<leader>lv", ":!zathura %:r.pdf &<CR>", { desc = "View PDF" })
|
||||||
|
-- vim.g.vimtex_fold_enabled = 1
|
||||||
|
-- vim.g.vimtex_fold_types = {
|
||||||
|
-- sections = {
|
||||||
|
-- parse_levels = 1,
|
||||||
|
-- sections = { "section", "subsection", "subsubsection" },
|
||||||
|
-- },
|
||||||
|
-- envs = {
|
||||||
|
-- blacklist = { "document" },
|
||||||
|
-- },
|
||||||
|
-- }
|
||||||
|
-- -- vimtex knows these environment names and will expand them fully
|
||||||
|
-- vim.g.vimtex_complete_enabled = 1
|
||||||
|
-- vim.g.vimtex_complete_close_braces = 1
|
||||||
|
|
||||||
|
vim.o.foldcolumn = "1" -- small gutter with +/- signs
|
||||||
|
vim.o.foldlevel = 99 -- start with all folds open
|
||||||
|
vim.o.foldlevelstart = 99
|
||||||
|
vim.o.foldtext = "" -- use default line
|
||||||
|
|||||||
0
scripts/scripts/a.out
Normal file
0
scripts/scripts/a.out
Normal file
5
scripts/scripts/email2vcf.sh
Executable file
5
scripts/scripts/email2vcf.sh
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
# Convert your aerc/maildir to vCards
|
||||||
|
em2vcf /mnt/flash1/mail-server/mail/maildir/ \
|
||||||
|
--output-folder ~/.contacts_mail/ \
|
||||||
|
--no-duplicates \
|
||||||
|
--overwrite
|
||||||
43
scripts/scripts/maildir2vcf.sh
Executable file
43
scripts/scripts/maildir2vcf.sh
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# ~/.local/bin/maildir2vcf
|
||||||
|
import email, os, sys, pathlib, fileinput
|
||||||
|
|
||||||
|
MAILDIR = pathlib.Path.home()/ "Mail" # ← change if your mail sits elsewhere
|
||||||
|
OUTDIR = pathlib.Path.home()/ ".contacts_mail"
|
||||||
|
OUTDIR.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
seen = set() # de-duplicate on lower-case e-mail
|
||||||
|
|
||||||
|
def vcard(name, mail):
|
||||||
|
safe_name = name.replace(";", " ").strip() or "No Name"
|
||||||
|
safe_mail = mail.strip().lower()
|
||||||
|
if safe_mail in seen: # already exported
|
||||||
|
return
|
||||||
|
seen.add(safe_mail)
|
||||||
|
fn = OUTDIR/f"{safe_mail}.vcf"
|
||||||
|
fn.write_text(f"""\
|
||||||
|
BEGIN:VCARD
|
||||||
|
VERSION:3.0
|
||||||
|
FN:{safe_name}
|
||||||
|
EMAIL:{safe_mail}
|
||||||
|
END:VCARD
|
||||||
|
""")
|
||||||
|
|
||||||
|
def addresses_from_msg(path):
|
||||||
|
with open(path, "rb") as f:
|
||||||
|
msg = email.message_from_binary_file(f)
|
||||||
|
for hdr in ("From", "To", "Cc", "Bcc"):
|
||||||
|
for addr in email.utils.getaddresses(msg.get_all(hdr, [])):
|
||||||
|
name, mail = addr
|
||||||
|
if "@" in mail:
|
||||||
|
vcard(name, mail)
|
||||||
|
|
||||||
|
# walk cur/ + new/ (typical Maildir layout)
|
||||||
|
for sub in ("cur", "new"):
|
||||||
|
for root, _, files in os.walk(MAILDIR/sub):
|
||||||
|
for file in files:
|
||||||
|
if file.startswith("."):
|
||||||
|
continue
|
||||||
|
addresses_from_msg(pathlib.Path(root)/file)
|
||||||
|
|
||||||
|
print("Exported", len(seen), "unique addresses →", OUTDIR)
|
||||||
0
scripts/scripts/newfile.vcf
Normal file
0
scripts/scripts/newfile.vcf
Normal file
Submodule yazi/.config/yazi/flavors/dracula.yazi deleted from 1b1a8d1083
21
yazi/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE
Normal file
21
yazi/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Mintass
|
||||||
|
|
||||||
|
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.
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 Rosé Pine
|
||||||
|
|
||||||
|
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.
|
||||||
36
yazi/.config/yazi/flavors/rose-pine-moon.yazi/README.md
Normal file
36
yazi/.config/yazi/flavors/rose-pine-moon.yazi/README.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<div align="center">
|
||||||
|
<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 align="center">
|
||||||
|
Rosé Pine Moon Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
## 👀 Preview
|
||||||
|
|
||||||
|
<img src="preview.png" width="600" />
|
||||||
|
|
||||||
|
## 🎨 Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ya pkg add Mintass/rose-pine-moon
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚙️ Usage
|
||||||
|
|
||||||
|
To set it as your dark flavor, change the content of your `theme.toml` to:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[flavor]
|
||||||
|
dark = "rose-pine-moon"
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
|
||||||
|
|
||||||
|
See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
|
||||||
|
|
||||||
|
## 📜 License
|
||||||
|
|
||||||
|
The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
|
||||||
|
|
||||||
|
Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
|
||||||
253
yazi/.config/yazi/flavors/rose-pine-moon.yazi/flavor.toml
Normal file
253
yazi/.config/yazi/flavors/rose-pine-moon.yazi/flavor.toml
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
# vim:fileencoding=utf-8:foldmethod=marker
|
||||||
|
|
||||||
|
# : App {{{
|
||||||
|
|
||||||
|
[app]
|
||||||
|
overall = { bg = "#232136" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Manager {{{
|
||||||
|
|
||||||
|
[mgr]
|
||||||
|
cwd = { fg = "#9ccfd8" }
|
||||||
|
|
||||||
|
# Find
|
||||||
|
find_keyword = { fg = "#f6c177", bold = true, italic = true, underline = true }
|
||||||
|
find_position = { fg = "#c4a7e7", bg = "reset", bold = true, italic = true }
|
||||||
|
|
||||||
|
# Symlink
|
||||||
|
symlink_target = { italic = true }
|
||||||
|
|
||||||
|
# Marker
|
||||||
|
marker_copied = { fg = "#3e8fb0", bg = "#3e8fb0" }
|
||||||
|
marker_cut = { fg = "#eb6f92", bg = "#eb6f92" }
|
||||||
|
marker_marked = { fg = "#ea9a97", bg = "#ea9a97" }
|
||||||
|
marker_selected = { fg = "#f6c177", bg = "#f6c177" }
|
||||||
|
|
||||||
|
# Count
|
||||||
|
count_copied = { fg = "#e0def4", bg = "#3e8fb0" }
|
||||||
|
count_cut = { fg = "#e0def4", bg = "#eb6f92" }
|
||||||
|
count_selected = { fg = "#232136", bg = "#f6c177" }
|
||||||
|
|
||||||
|
# Border
|
||||||
|
border_symbol = "│"
|
||||||
|
border_style = { fg = "#56526e" }
|
||||||
|
|
||||||
|
# Highlighting
|
||||||
|
syntect_theme = ""
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Tabs {{{
|
||||||
|
|
||||||
|
[tabs]
|
||||||
|
active = { fg = "#e0def4", bg = "#3e8fb0", bold = true }
|
||||||
|
inactive = { fg = "#3e8fb0", bg = "#e0def4" }
|
||||||
|
|
||||||
|
# Separator
|
||||||
|
sep_inner = { open = "", close = "" }
|
||||||
|
sep_outer = { open = "", close = "" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Mode {{{
|
||||||
|
|
||||||
|
[mode]
|
||||||
|
normal_main = { fg = "#232136", bg = "#9ccfd8", bold = true }
|
||||||
|
normal_alt = { fg = "#232136", bg = "#e0def4", bold = true }
|
||||||
|
|
||||||
|
# Select mode
|
||||||
|
select_main = { fg = "#232136", bg = "#eb6f92", bold = true }
|
||||||
|
select_alt = { fg = "#232136", bg = "#e0def4", bold = true }
|
||||||
|
|
||||||
|
# Unset mode
|
||||||
|
unset_main = { fg = "#232136", bg = "#eb6f92", bold = true }
|
||||||
|
unset_alt = { fg = "#232136", bg = "#e0def4", bold = true }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Indicator of hovered file {{{
|
||||||
|
|
||||||
|
[indicator]
|
||||||
|
parent = { reversed = true }
|
||||||
|
current = { reversed = true }
|
||||||
|
preview = { underline = true }
|
||||||
|
padding = { open = "", close = "" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Status bar {{{
|
||||||
|
|
||||||
|
[status]
|
||||||
|
overall = { bg = "#232136" }
|
||||||
|
sep_left = { open = "", close = "" }
|
||||||
|
sep_right = { open = "", close = "" }
|
||||||
|
|
||||||
|
# Permissions
|
||||||
|
perm_sep = { fg = "#6e6a86" }
|
||||||
|
perm_type = { fg = "#c4a7e7" }
|
||||||
|
perm_read = { fg = "#f6c177" }
|
||||||
|
perm_write = { fg = "#eb6f92" }
|
||||||
|
perm_exec = { fg = "#9ccfd8" }
|
||||||
|
|
||||||
|
# Progress
|
||||||
|
progress_label = { fg = "#e0def4", bold = true }
|
||||||
|
progress_normal = { fg = "#3e8fb0", bg = "#2a283e" }
|
||||||
|
progress_error = { fg = "#eb6f92", bg = "#2a283e" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Which {{{
|
||||||
|
|
||||||
|
[which]
|
||||||
|
cols = 3
|
||||||
|
mask = { bg = "#2a273f" }
|
||||||
|
cand = { fg = "#9ccfd8" }
|
||||||
|
rest = { fg = "#6e6a86" }
|
||||||
|
desc = { fg = "#f6c177" }
|
||||||
|
separator = " "
|
||||||
|
separator_style = { fg = "#6e6a86" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Confirmation {{{
|
||||||
|
|
||||||
|
[confirm]
|
||||||
|
border = { fg = "#56526e" }
|
||||||
|
title = { fg = "#eb6f92", bold = true }
|
||||||
|
body = { fg = "#e0def4" }
|
||||||
|
list = { fg = "#e0def4" }
|
||||||
|
btn_yes = { fg = "#232136", bg = "#3e8fb0", bold = true }
|
||||||
|
btn_no = { fg = "#232136", bg = "#e0def4", bold = true }
|
||||||
|
btn_labels = [ " [y]es ", " (n)o " ]
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Spotter {{{
|
||||||
|
|
||||||
|
[spot]
|
||||||
|
border = { fg = "#56526e" }
|
||||||
|
title = { fg = "#9ccfd8", bold = true }
|
||||||
|
|
||||||
|
# Table
|
||||||
|
tbl_col = { fg = "#9ccfd8" }
|
||||||
|
tbl_cell = { fg = "#232136", bg = "#f6c177", bold = true }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Notification {{{
|
||||||
|
|
||||||
|
[notify]
|
||||||
|
title_info = { fg = "#3e8fb0" }
|
||||||
|
title_warn = { fg = "#f6c177" }
|
||||||
|
title_error = { fg = "#eb6f92" }
|
||||||
|
|
||||||
|
# Icons
|
||||||
|
icon_info = ""
|
||||||
|
icon_warn = ""
|
||||||
|
icon_error = ""
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Picker {{{
|
||||||
|
|
||||||
|
[pick]
|
||||||
|
border = { fg = "#3e8fb0" }
|
||||||
|
active = { fg = "#c4a7e7", bold = true }
|
||||||
|
inactive = { fg = "#908caa" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Input {{{
|
||||||
|
|
||||||
|
[input]
|
||||||
|
border = { fg = "#3e8fb0" }
|
||||||
|
title = { bold = true }
|
||||||
|
value = { fg = "#e0def4" }
|
||||||
|
selected = { reversed = true }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Completion {{{
|
||||||
|
|
||||||
|
[cmp]
|
||||||
|
border = { fg = "#3e8fb0" }
|
||||||
|
active = { bg = "#e0def4", fg = "#232136", bold = true }
|
||||||
|
inactive = { fg = "#908caa" }
|
||||||
|
|
||||||
|
# Icons
|
||||||
|
icon_file = ""
|
||||||
|
icon_folder = ""
|
||||||
|
icon_command = ""
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Task manager {{{
|
||||||
|
|
||||||
|
[tasks]
|
||||||
|
border = { fg = "#3e8fb0" }
|
||||||
|
title = { bold = true }
|
||||||
|
hovered = { fg = "#c4a7e7", bold = true, reversed = true }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : Help menu {{{
|
||||||
|
|
||||||
|
[help]
|
||||||
|
on = { fg = "#9ccfd8" }
|
||||||
|
run = { fg = "#c4a7e7" }
|
||||||
|
desc = { fg = "#f6c177" }
|
||||||
|
hovered = { reversed = true, bold = true }
|
||||||
|
footer = { fg = "#232136", bg = "#e0def4" }
|
||||||
|
|
||||||
|
# : }}}
|
||||||
|
|
||||||
|
|
||||||
|
# : File-specific styles {{{
|
||||||
|
|
||||||
|
[filetype]
|
||||||
|
rules = [
|
||||||
|
# Images
|
||||||
|
{ mime = "image/*", fg = "#c4a7e7" },
|
||||||
|
|
||||||
|
# Media
|
||||||
|
{ mime = "{audio,video}/*", fg = "#f6c177" },
|
||||||
|
|
||||||
|
# Archives
|
||||||
|
{ mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#eb6f92" },
|
||||||
|
|
||||||
|
# Documents
|
||||||
|
{ mime = "application/{pdf,doc,rtf}", fg = "#ea9a97" },
|
||||||
|
|
||||||
|
# Empty files
|
||||||
|
# { mime = "inode/empty", fg = "#eb6f92" },
|
||||||
|
|
||||||
|
# Special files
|
||||||
|
{ url = "*", is = "orphan", fg = "#232136", bg = "#eb6f92" },
|
||||||
|
{ url = "*", is = "exec", fg = "#9ccfd8" },
|
||||||
|
|
||||||
|
# Dummy files
|
||||||
|
{ url = "*", is = "dummy", fg = "#232136", bg = "#eb6f92" },
|
||||||
|
{ url = "*/", is = "dummy", fg = "#232136", bg = "#eb6f92" },
|
||||||
|
|
||||||
|
# Fallback
|
||||||
|
{ url = "*", fg = "#e0def4" },
|
||||||
|
{ url = "*/", fg = "#3e8fb0" }
|
||||||
|
]
|
||||||
|
|
||||||
|
# : }}}
|
||||||
BIN
yazi/.config/yazi/flavors/rose-pine-moon.yazi/preview.png
Normal file
BIN
yazi/.config/yazi/flavors/rose-pine-moon.yazi/preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 985 KiB |
316
yazi/.config/yazi/flavors/rose-pine-moon.yazi/tmtheme.xml
Normal file
316
yazi/.config/yazi/flavors/rose-pine-moon.yazi/tmtheme.xml
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Rosé Pine Moon</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>background</key>
|
||||||
|
<string>#232136</string>
|
||||||
|
<key>caret</key>
|
||||||
|
<string>#56526e</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#e0def4</string>
|
||||||
|
<key>invisibles</key>
|
||||||
|
<string>#2a273f</string>
|
||||||
|
<key>lineHighlight</key>
|
||||||
|
<string>#2a283e</string>
|
||||||
|
<key>selection</key>
|
||||||
|
<string>#6e6a86</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Comment</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>comment</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>italic</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#908caa</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>String</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>string, punctuation.definition.string</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#f6c177</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Number</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>constant.numeric</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#f6c177</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Built-in constant</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>constant.language</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#f6c177</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>User-defined constant</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>constant.character, constant.other</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#f6c177</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Variable</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>variable</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>italic</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#e0def4</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Keyword</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>keyword</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#3e8fb0</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Storage</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>storage</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string></string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#9ccfd8</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Storage type</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>storage.type</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string></string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#9ccfd8</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Class name</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>entity.name.class</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#3e8fb0</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Inherited class</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>entity.other.inherited-class</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>italic </string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#3e8fb0</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Function name</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>entity.name.function</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>italic</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#ea9a97</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Function argument</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>variable.parameter</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string></string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#c4a7e7</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Tag name</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>entity.name.tag</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#3e8fb0</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Tag attribute</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>entity.other.attribute-name</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string></string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#c4a7e7</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Library function</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>support.function</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#ea9a97</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Library constant</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>support.constant</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#f6c177</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Library class/type</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>support.type, support.class</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#9ccfd8</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Library variable</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>support.other.variable</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string>bold</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#eb6f92</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Invalid</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>invalid</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>background</key>
|
||||||
|
<string>#eb6f92</string>
|
||||||
|
<key>fontStyle</key>
|
||||||
|
<string></string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#e0def4</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Invalid deprecated</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>invalid.deprecated</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>background</key>
|
||||||
|
<string>#c4a7e7</string>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#e0def4</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>Punctuation, Operators</string>
|
||||||
|
<key>scope</key>
|
||||||
|
<string>punctuation, keyword.operator</string>
|
||||||
|
<key>settings</key>
|
||||||
|
<dict>
|
||||||
|
<key>foreground</key>
|
||||||
|
<string>#908caa</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>colorSpaceName</key>
|
||||||
|
<string>sRGB</string>
|
||||||
|
<key>semanticClass</key>
|
||||||
|
<string>theme.dark.rosé-pine-moon</string>
|
||||||
|
<key>author</key>
|
||||||
|
<string>arrrgi</string>
|
||||||
|
<key>comment</key>
|
||||||
|
<string>All natural pine, faux fur and a bit of soho vibes for the classy minimalist</string>
|
||||||
|
<key>uuid</key>
|
||||||
|
<string>CC28B8FB-96BA-43EB-B71F-5AA3D3EBB0BB</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -93,7 +93,7 @@ require("recycle-bin"):setup({
|
|||||||
trash_dir = "~/.local/share/Trash/",
|
trash_dir = "~/.local/share/Trash/",
|
||||||
})
|
})
|
||||||
|
|
||||||
-- require("omp"):setup({ config = "/home/liph/.config/yazi/omp/omp.toml" })
|
require("omp"):setup({ config = "/home/liph/.config/yazi/omp/omp.toml" })
|
||||||
|
|
||||||
require("mime-ext"):setup({
|
require("mime-ext"):setup({
|
||||||
-- with_files = {
|
-- with_files = {
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ pwd = "osc7"
|
|||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
[palette]
|
[palette]
|
||||||
gb_bright_path = "#89b4fa"
|
gb_bright_path = "#9ccdf8"
|
||||||
gb_bright_git = "#f9e2af"
|
gb_bright_git = "#f6c177"
|
||||||
gb_dark0_hard = "#1d2021"
|
gb_dark0_hard = "#3e7fb0"
|
||||||
gb_faded_green = "#79740e"
|
gb_faded_green = "#79740e"
|
||||||
gb_faded_red = "#9d0006"
|
gb_faded_red = "#ea9a97"
|
||||||
gb_text = "#ebdbb2"
|
gb_text = "#c4a7e7"
|
||||||
|
|
||||||
[var]
|
[var]
|
||||||
user = ""
|
user = ""
|
||||||
@@ -19,12 +19,19 @@ ssh = "🌐"
|
|||||||
type = "prompt"
|
type = "prompt"
|
||||||
alignment = "left"
|
alignment = "left"
|
||||||
|
|
||||||
# [[blocks.segments]]
|
[[blocks.segments]]
|
||||||
# template = "{{ if .Root }}# {{ else }}{{ end }}{{ .UserName }}{{ if .SSHSession }} {{.Var.ssh}}{{ end }} "
|
template = '{{ .HostName }} '
|
||||||
# foreground = "p:gb_text"
|
foreground = 'p:gb_text'
|
||||||
# background = "transparent"
|
background = 'transparent'
|
||||||
# type = "session"
|
type = 'text'
|
||||||
# style = "plain"
|
style = 'plain'
|
||||||
|
|
||||||
|
[[blocks.segments]]
|
||||||
|
template = '{{ .UserName }} '
|
||||||
|
foreground = 'p:gb_text'
|
||||||
|
background = 'transparent'
|
||||||
|
type = 'text'
|
||||||
|
style = 'plain'
|
||||||
|
|
||||||
# [blocks.segments.properties]
|
# [blocks.segments.properties]
|
||||||
# cache_duration = "none"
|
# cache_duration = "none"
|
||||||
@@ -41,7 +48,7 @@ style = "full"
|
|||||||
enable_hyperlink = true
|
enable_hyperlink = true
|
||||||
|
|
||||||
[[blocks.segments]]
|
[[blocks.segments]]
|
||||||
template = "{{ .HEAD }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}{{ if .Staging.Changed }} {{ .Staging.String }}{{ end }} "
|
template = ' {{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} <cyan>{{ if gt .Behind 0 }}⇣{{ end }}{{ if gt .Ahead 0 }}⇡{{ end }}</>'
|
||||||
foreground = "p:gb_bright_git"
|
foreground = "p:gb_bright_git"
|
||||||
background = "transparent"
|
background = "transparent"
|
||||||
type = "git"
|
type = "git"
|
||||||
|
|||||||
@@ -137,3 +137,8 @@ hash = "5cfd9b2bd3f8ec4e3245e3426a967f82"
|
|||||||
use = "yazi-rs/flavors:catppuccin-mocha"
|
use = "yazi-rs/flavors:catppuccin-mocha"
|
||||||
rev = "4a1802a"
|
rev = "4a1802a"
|
||||||
hash = "b951d27afe197d154f6da9683b46c5f8"
|
hash = "b951d27afe197d154f6da9683b46c5f8"
|
||||||
|
|
||||||
|
[[flavor.deps]]
|
||||||
|
use = "Mintass/rose-pine-moon"
|
||||||
|
rev = "94385fe"
|
||||||
|
hash = "edbe0dfb5db8ff37281dba62adc7e750"
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
{"\\x73\\x74\\x79\\x6C\\x65\\x73\\x2E\\x63\\x73\\x73":["\\x31"]}
|
||||||
@@ -1,72 +1,4 @@
|
|||||||
# Gruvbox Material Dark theme for Yazi
|
[flavor]
|
||||||
# Based on https://github.com/sainnhe/gruvbox-material
|
dark = "rose-pine-moon"
|
||||||
|
# or "rose-pine-moon"
|
||||||
[manager]
|
# or light = "rose-pine-dawn"
|
||||||
cwd = { fg = "#d8a657" } # yellow
|
|
||||||
|
|
||||||
# Hovered
|
|
||||||
hovered = { fg = "#282828", bg = "#a9b665" } # green background
|
|
||||||
preview_hovered = { underline = true }
|
|
||||||
|
|
||||||
# Find
|
|
||||||
find_keyword = { fg = "#282828", bg = "#d8a657" } # yellow
|
|
||||||
find_position = { fg = "#282828", bg = "#7daea3" } # aqua
|
|
||||||
|
|
||||||
# Marker
|
|
||||||
marker_copied = { fg = "#a9b665", bg = "#a9b665" } # green
|
|
||||||
marker_cut = { fg = "#ea6962", bg = "#ea6962" } # red
|
|
||||||
marker_marked = { fg = "#7daea3", bg = "#7daea3" } # aqua
|
|
||||||
marker_selected = { fg = "#d8a657", bg = "#d8a657" } # yellow
|
|
||||||
|
|
||||||
# Tab
|
|
||||||
tab_active = { fg = "#282828", bg = "#a9b665" } # green
|
|
||||||
tab_inactive = { fg = "#d4be98", bg = "#3c3836" } # fg on bg1
|
|
||||||
tab_width = 1
|
|
||||||
|
|
||||||
# Count
|
|
||||||
count_copied = { fg = "#282828", bg = "#a9b665" } # green
|
|
||||||
count_cut = { fg = "#282828", bg = "#ea6962" } # red
|
|
||||||
count_selected = { fg = "#282828", bg = "#7daea3" } # aqua
|
|
||||||
|
|
||||||
# Border
|
|
||||||
border_symbol = "│"
|
|
||||||
border_style = { fg = "#504945" } # bg2
|
|
||||||
|
|
||||||
# Syntect theme for preview
|
|
||||||
syntect_theme = "~/.config/yazi/Gruvbox-Material-Dark.tmTheme"
|
|
||||||
|
|
||||||
[status]
|
|
||||||
separator_open = ""
|
|
||||||
separator_close = ""
|
|
||||||
separator_style = { fg = "#504945", bg = "#504945" } # bg2
|
|
||||||
|
|
||||||
# Mode
|
|
||||||
mode_normal = { fg = "#282828", bg = "#7daea3", bold = true } # aqua
|
|
||||||
mode_select = { fg = "#282828", bg = "#d8a657", bold = true } # yellow
|
|
||||||
mode_unset = { fg = "#282828", bg = "#ea6962", bold = true } # red
|
|
||||||
|
|
||||||
# Progress
|
|
||||||
progress_label = { fg = "#d4be98", bold = true } # fg
|
|
||||||
progress_normal = { fg = "#7daea3", bg = "#3c3836" } # aqua on bg1
|
|
||||||
progress_error = { fg = "#ea6962", bg = "#3c3836" } # red on bg1
|
|
||||||
|
|
||||||
# Permissions
|
|
||||||
permissions_t = { fg = "#a9b665" } # green
|
|
||||||
permissions_r = { fg = "#d8a657" } # yellow
|
|
||||||
permissions_w = { fg = "#ea6962" } # red
|
|
||||||
permissions_x = { fg = "#7daea3" } # aqua
|
|
||||||
permissions_s = { fg = "#504945" } # bg2
|
|
||||||
|
|
||||||
[input]
|
|
||||||
border = { fg = "#7daea3" } # aqua
|
|
||||||
title = { fg = "#d4be98" } # fg
|
|
||||||
value = { fg = "#d4be98" } # fg
|
|
||||||
selected = { reversed = true }
|
|
||||||
|
|
||||||
[select]
|
|
||||||
border = { fg = "#7daea3" } # aqua
|
|
||||||
active = { fg = "#d8a657" } # yellow
|
|
||||||
inactive = { fg = "#7c6f64" } # bg3
|
|
||||||
|
|
||||||
[completion]
|
|
||||||
border = { fg = "#7daea3" } # aqua
|
|
||||||
|
|||||||
@@ -108,8 +108,7 @@ alias lsm='sudo mount /dev/'
|
|||||||
alias lsu='sudo umount /mount/'
|
alias lsu='sudo umount /mount/'
|
||||||
|
|
||||||
# streamrip
|
# streamrip
|
||||||
alias ripp='cd ~/streamrip/ && rip search tidal album'
|
alias ripp='rip search tidal album'
|
||||||
alias rip='pyenv exec rip'
|
|
||||||
alias ripc='nvim ~/.config/streamrip/config.toml'
|
alias ripc='nvim ~/.config/streamrip/config.toml'
|
||||||
|
|
||||||
# paru
|
# paru
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# java jdk adaption
|
||||||
|
export JDK_TOOL_OPTIONS="-Djdk.xml.totalEntitySizeLimit=0"
|
||||||
# FZF
|
# FZF
|
||||||
export FZF_CTRL_T_OPTS="--preview 'bat -n --color=always --line-range :500 {}'"
|
export FZF_CTRL_T_OPTS="--preview 'bat -n --color=always --line-range :500 {}'"
|
||||||
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"
|
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"
|
||||||
|
|||||||
Reference in New Issue
Block a user