Compare commits

...

2 commits

Author SHA1 Message Date
Јован Ђокић-Шумарац f677f6a545 update 2025-01-18 20:14:02 +01:00
Јован Ђокић-Шумарац 32e5c173ed update 2025-01-18 20:12:19 +01:00
431 changed files with 26296 additions and 1390 deletions

View file

@ -1,7 +1,6 @@
[bonsai] [bonsai]
source = imaps://brk%40bonsai.cool:panda@mail.bonsai.cool source = maildir://~/mail/bonsai/
outgoing = smtps://brk%40bonsai.cool:panda@mail.bonsai.cool outgoing = /home/brk/bin/msmtpq
default = INBOX default = INBOX
from = Jovan Djokic-Sumarac <brk@bonsai.cool> from = Jovan Djokic-Sumarac <brk@bonsai.cool>
cache-headers = true
copy-to = Sent copy-to = Sent

View file

@ -8,7 +8,7 @@
# title=foot # title=foot
# locked-title=no # locked-title=no
font = 0xProto Nerd Font:size=12,Noto Sans CJK JP:size=12 font = 0xProto Nerd Font:size=12,FiraCode Nerd Font:size=12,Noto Sans CJK JP:size=12
# font-bold=<bold variant of regular font> # font-bold=<bold variant of regular font>
# font-italic=<italic variant of regular font> # font-italic=<italic variant of regular font>

View file

@ -1,31 +0,0 @@
decoration {
rounding=12
multisample_edges=1
active_opacity=1
inactive_opacity=1
blur=1
blur_size=3
blur_passes=1
blur_new_optimizations = true
drop_shadow=true
shadow_range=20
shadow_render_power = 3
}
bezier=slow,0,0.85,0.3,1
bezier=overshot,0.7,0.6,0.1,1.1
animations {
enabled=1
bezier=overshot,0.13,0.99,0.29,1.1
animation=windows,1,4,overshot,slide
animation=border,1,10,default
animation=fade,1,10,default
animation=workspaces,1,6,overshot,slide
}

View file

@ -1,44 +0,0 @@
input {
kb_layout=us,rs
kb_variant=,yz
kb_options=caps:escape,grp:menu_toggle
follow_mouse=1
numlock_by_default=1
repeat_rate=50
repeat_delay=300
}
general {
sensitivity=2
gaps_in=10
gaps_out=20
layout=master
col.active_border = rgba(ee111166) rgba(11ee1166) rgba(1111ee66) 45deg
col.inactive_border = rgba(00000000)
border_size=3
no_border_on_floating=true
}
gestures {
workspace_swipe=true
workspace_swipe_fingers=3
}
misc {
enable_swallow=1
swallow_regex=^(alacritty)$
}

View file

@ -1,67 +0,0 @@
# some nice mouse binds
bindm=SUPER,mouse:272,movewindow
bindm=SUPER,mouse:273,resizewindow
# example binds
bind=SUPER,Return,exec,footclient
bind=SUPER,W,exec,chromium --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy --ozone-platform-hint=auto
bind=SUPER,Escape,exec,powermenu-v
bind=SUPER,Q,killactive,
bind=SUPER,Space,fullscreen,1
bind=SUPERSHIFT,Space,fullscreen,0
bind=SUPERSHIFT,Q,exit,
bind=SUPER,E,exec,footclient --title nmtuiterm -e nmtuidelay
bind=SUPER,R,exec,footclient --title lfterm -e lf "$(cat .cache/lfdir)"
bind=SUPER,F,togglefloating,
bind=SUPER,D,exec,tmenu
bind=SUPERSHIFT,D,exec,tmenu -d
bind=SUPER,left,movefocus,l
bind=SUPER,right,movefocus,r
bind=SUPER,up,movefocus,u
bind=SUPER,down,movefocus,d
bind=SUPER,1,workspace,1
bind=SUPER,2,workspace,2
bind=SUPER,3,workspace,3
bind=SUPER,4,workspace,4
bind=SUPER,5,workspace,5
bind=SUPER,6,workspace,6
bind=SUPERSHIFT,1,movetoworkspace,1
bind=SUPERSHIFT,2,movetoworkspace,2
bind=SUPERSHIFT,3,movetoworkspace,3
bind=SUPERSHIFT,4,movetoworkspace,4
bind=SUPERSHIFT,5,movetoworkspace,5
bind=SUPERSHIFT,6,movetoworkspace,6
bind=SUPER,mouse_down,workspace,e+1
bind=SUPER,mouse_up,workspace,e-1
bind=SUPERSHIFT,R,forcerendererreload
bind=SUPER,S,togglespecialworkspace
bind=SUPERSHIFT,S,movetoworkspace,special
bind=SUPER,Tab,cyclenext
bind=,F4,exec,pamixer --toggle-mute
bind=,F2,exec,volctl --down
bind=,F3,exec,volctl --up
bind=,F7,exec,lightctl --down
bind=,F8,exec,lightctl --up
bind=,XF86AudioPlay,exec,playerctl play-pause
bind=,XF86Audiostop,exec,playerctl stop
bind=,XF86AudioNext,exec,playerctl next
bind=,XF86AudioPrev,exec,playerctl previous

View file

@ -1,3 +0,0 @@
monitor=eDP-1,1920x1080@60,1920x0,1
monitor=HDMI-A-1,1920x1080@165,0x0,1
monitor=HDMI-A-1,transform,0

View file

@ -1,6 +0,0 @@
windowrule=float,title:^(pulsemixerterm)$
windowrule=float,title:^(nmtuiterm)$
windowrule=workspace special silent,title:^(scratchpad)$
windowrule=workspace 2,class:^(chromium)$
windowrule=workspace 6,class:^(ferdium)$
windowrule=workspace 4,class:^(org.pwmt.zathura)$

View file

@ -1,25 +0,0 @@
# WALLPAPER
#exec-once=mpvpaper -vs -o "no-audio loop --speed=0.4" eDP-1 ~/.config/wall.webm
#exec-once=swaybg -m fill -i hdd/wallpapers/berk/berserker_armor_devouring.png
# STUFF
exec-once=/usr/bin/polkit-dumb-agent
exec-once=hyprpaper
exec-once=salut
exec-once=mkfifo /tmp/wobpipe
exec-once=tail -f /tmp/wobpipe | wob
exec-once=waybar
exec-once=tuf-tray
exec-once=foot --server
# WM go brrr?
exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once=rgb-borders

View file

@ -1,176 +0,0 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor = HDMI-A-1, 2560x1440@75, 0x0, 1,# transform,1
monitor = DP-1, 1920x1080@165, 2560x0, 1
monitor = eDP-1, 1920x1080@120, 3480x0, 1
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox
# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf
# Set programs that you use
$terminal = kitty
$fileManager = dolphin
$menu = wofi --show drun
# Some default env vars.
env = XCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
touchpad {
natural_scroll = no
}
sensitivity = 0 # -1.0 to 1.0, 0 means no modification.
}
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 5
gaps_out = 20
border_size = 2
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
layout = dwindle
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
rounding = 10
blur {
enabled = true
size = 3
passes = 1
}
drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
}
animations {
enabled = yes
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = yes # you probably want this
}
master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_is_master = true
}
gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = off
}
misc {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
device {
name = epic-mouse-v1
sensitivity = -0.5
}
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, Q, exec, $terminal
bind = $mainMod, C, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

View file

@ -8,7 +8,7 @@ general {
listener { listener {
timeout = 300 # in seconds timeout = 300 # in seconds
on-timeout = hyprlock # command to run when timeout has passed on-timeout = syslock # command to run when timeout has passed
on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired. on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired.
} }

View file

@ -4,28 +4,26 @@
# who cares? \ o Y o / # who cares? \ o Y o /
# put the \ \__ __/ / # put the \ \__ __/ /
# tranny on the '.__'-'__.' # tranny on the '.__'-'__.'
# choping block ''' # chopping block '''
source = ~/.config/hypr/monitors.conf source = ~/.config/hypr/slices/monitors.conf
source = ~/.config/hypr/general.conf source = ~/.config/hypr/slices/general.conf
source = ~/.config/hypr/decoration.conf source = ~/.config/hypr/slices/decoration.conf
source = ~/.config/hypr/rules.conf source = ~/.config/hypr/slices/rules.conf
source = ~/.config/hypr/keybinds.conf source = ~/.config/hypr/slices/keybinds.conf
source = ~/.config/hypr/workspaces.conf source = ~/.config/hypr/slices/workspaces.conf
source = ~/.config/hypr/env.conf source = ~/.config/hypr/slices/env.conf
# STARTUP # STARTUP
exec-once = dunst exec-once = dunst
exec-once = foot --server exec-once = foot --server
exec-once = avizo-service exec-once = syshud
exec-once = avizo-client
exec-once = waybar exec-once = waybar
exec-once = hyprpaper # exec-once = wl-paste --watch cliphist store
exec-once = ~/bin/xdg-portal-hyprland
exec-once = wl-paste --watch cliphist store
exec-once = hypridle
exec-once = wayland-pipewire-idle-inhibit exec-once = wayland-pipewire-idle-inhibit
exec-once = hyprsunset -t 5000
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = ~/bin/xdg-portal-hyprland

View file

@ -1,7 +1,5 @@
preload = /home/brk/pics/guts_stars.jpg preload = /home/brk/pics/lll/japan_sunset.png
wallpaper = eDP-1,/home/brk/pics/guts_stars.jpg wallpaper = ,/home/brk/pics/lll/japan_sunset.png
wallpaper = DP-1,/home/brk/pics/guts_stars.jpg
wallpaper = HDMI-A-1,/home/brk/pics/guts_stars.jpg
ipc = off ipc = off

View file

@ -1,23 +0,0 @@
# MONITOR LAYOUT
#
# monitor = HDMI-A-1, 2560x1440@75, 0x0, 1.0, bitdepth, 10
# monitor = DP-1, disabled
# monitor = eDP-1, disabled
#
# monitor=HDMI-A-1,2560x1440@75,1920x0,1.0,bitdepth,10
# monitor=eDP-1,1920x1080@120,0x0,1.0,bitdepth,10
# monitor=DP-1,1920x1080@165,4480x0,1.0,bitdepth,10
# monitor = eDP-1, 1920x1080@120, 0x0, 1.0, bitdepth, 10
# monitor = HDMI-A-1, 2560x1440@75, 1920x0, 1.0
# monitor = DP-1, 1920x1080@165, 4480x0, 1.0, bitdepth, 10
monitor = eDP-1, disabled
monitor = HDMI-A-1, 2560x1440@75, 0x0, 1.0
monitor = DP-1, 1920x1080@165, 2560x0, 1.0, bitdepth, 10
#monitor = HDMI-A-1, disabled # 1920x1080@60, 0x0, 1
#monitor = eDP-1, disabled
#monitor = HDMI-A-1, 3840x2160@60, 0x0, 1
#monitor = eDP-1, 1920x1080@120, 3840x0, 1

View file

@ -1,62 +0,0 @@
# RULES
windowrule=float,title:^(iwgtk)$
windowrule=center,title:^(iwgtk)$
windowrule=size 45% 60%,title:^(iwgtk)$
windowrule=float,title:^(Torrent Options)$
windowrule=center,title:^(Torrent Options)$
windowrule=size 45% 60%,title:^(Torrent Options)$
windowrule=float,title:^(Picture-in-Picture)$
windowrule=center,title:^(Picture-in-Picture)$
windowrule=size 60% 60%,title:^(Picture-in-Picture)$
windowrule=float,title:^(connterm)$
windowrule=center,title:^(connterm)$
windowrule=size 45% 60%,title:^(connterm)$
windowrule=float,title:^(blueterm)$
windowrule=center,title:^(blueterm)$
windowrule=size 45% 60%,title:^(blueterm)$
windowrule=float,title:^(btoppy)$
windowrule=center,title:^(btoppy)$
windowrule=size 75% 65%,title:^(btoppy)$
windowrule=float,class:^(steam)$
windowrule=center,class:^(steam)$
windowrule=size 95% 90%,class:^(steam)$
windowrule=float,title:^(pavucontrol)$
windowrule=center,title:^(pavucontrol)$
windowrule=size 30% 60%,title:^(pavucontrol)$
windowrule=workspace special silent,title:^(scratchpad)$
windowrule = float, file_progress
windowrule = float, confirm
windowrule = float, dialog
windowrule = float, download
windowrule = float, notification
windowrule = float, error
windowrule = float, splash
windowrule = float, confirmreset
windowrule = float, title:Open File
windowrule = float, title:branchdialog
windowrule = float, Lxappearance
windowrule = float, Rofi
windowrule = float, pavucontrol
windowrule = animation none,Rofi
layerrule = blur, fuzzel
layerrule = blur, waybar
layerrule = blur, avizo

View file

@ -1,21 +0,0 @@
bind=SUPER,1,workspace,1
bind=SUPER,2,workspace,2
bind=SUPER,3,workspace,3
bind=SUPER,4,workspace,4
bind=SUPER,5,workspace,5
bind=SUPER,6,workspace,6
bind=SUPER,7,workspace,7
bind=SUPER,8,workspace,8
bind=SUPER,9,workspace,9
bind=SUPER,0,workspace,10
bind=SUPERSHIFT,1,movetoworkspace,1
bind=SUPERSHIFT,2,movetoworkspace,2
bind=SUPERSHIFT,3,movetoworkspace,3
bind=SUPERSHIFT,4,movetoworkspace,4
bind=SUPERSHIFT,5,movetoworkspace,5
bind=SUPERSHIFT,6,movetoworkspace,6
bind=SUPERSHIFT,7,movetoworkspace,7
bind=SUPERSHIFT,8,movetoworkspace,8
bind=SUPERSHIFT,9,movetoworkspace,9
bind=SUPERSHIFT,0,movetoworkspace,10

View file

@ -1,20 +0,0 @@
bind=SUPER,1,split-workspace,1
bind=SUPER,2,split-workspace,2
bind=SUPER,3,split-workspace,3
bind=SUPER,4,split-workspace,4
bind=SUPER,5,split-workspace,5
bind=SUPER,6,split-workspace,6
bind=SUPER,7,split-workspace,7
bind=SUPER,8,split-workspace,8
bind=SUPER,9,split-workspace,9
bind=SUPER,0,split-workspace,10
bind=SUPERSHIFT,1,split-movetoworkspace,1
bind=SUPERSHIFT,2,split-movetoworkspace,2
bind=SUPERSHIFT,3,split-movetoworkspace,3
bind=SUPERSHIFT,4,split-movetoworkspace,4
bind=SUPERSHIFT,5,split-movetoworkspace,5
bind=SUPERSHIFT,6,split-movetoworkspace,6
bind=SUPERSHIFT,7,split-movetoworkspace,7
bind=SUPERSHIFT,8,split-movetoworkspace,8
bind=SUPERSHIFT,9,split-movetoworkspace,9
bind=SUPERSHIFT,0,split-movetoworkspace,10

View file

@ -1,16 +1,8 @@
# DECORATION # DECORATION
decoration { decoration {
active_opacity = 1
inactive_opacity = 1
rounding = 0
blur { blur {
enabled = false enabled = false
new_optimizations = true
xray = false
passes = 3
} }
} }

View file

@ -1,7 +1,7 @@
env = XDG_CURRENT_DESKTOP, Hyprland env = XDG_CURRENT_DESKTOP, Hyprland
env = XDG_SESSION_TYPE, wayland env = XDG_SESSION_TYPE, wayland
env = XDG_SESSION_DESKTOP, Hyprland env = XDG_SESSION_DESKTOP, Hyprland
exec-once = dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # exec-once = dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
env = LIBVA_DRIVER_NAME, nvidia env = LIBVA_DRIVER_NAME, nvidia
env = __GLX_VENDOR_LIBRARY_NAME, nvidia env = __GLX_VENDOR_LIBRARY_NAME, nvidia
@ -28,3 +28,8 @@ env = BROWSER, chromium
env = TERM, footclient env = TERM, footclient
env = EDITOR, nvim env = EDITOR, nvim
env = _JAVA_AWT_WM_NONREPARENTING, 1 env = _JAVA_AWT_WM_NONREPARENTING, 1
env = NVD_BACKEND, direct
env = ELECTRON_OZONE_PLATFORM_HINT, wayland
env = AQ_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0

View file

@ -4,7 +4,7 @@
input { input {
kb_layout = us,rs kb_layout = us,rs
kb_variant = ,yz kb_variant = ,yz
kb_options = caps:escape,grp:menu_toggle kb_options = caps:escape,grp:win_space_toggle
follow_mouse = 1 follow_mouse = 1
@ -21,24 +21,31 @@ input {
tap-and-drag = true tap-and-drag = true
disable_while_typing = true disable_while_typing = true
} }
}
$LAPTOP_KB_ENABLED = true
device {
name = at-translated-set-2-keyboard
enabled = $LAPTOP_KB_ENABLED
} }
cursor { cursor {
allow_dumb_copy = true use_cpu_buffer = true
} }
general { general {
col.inactive_border = 0xff45475a col.inactive_border = 0xff45475a
col.active_border = rgba(cba6f7ff) rgba(89b4faff) rgba(94e2d5ff) 10deg col.active_border = rgba(cba6f7ff) rgba(89b4faff) rgba(94e2d5ff) 10deg
gaps_in = 7 gaps_in = 7
gaps_out = 15 gaps_out = 14
layout = dwindle layout = dwindle
border_size = 0 border_size = 0
resize_on_border = true
no_border_on_floating = true
allow_tearing = false
} }
@ -49,20 +56,14 @@ gestures {
misc { misc {
vfr = true
vrr = 1 vrr = 1
swallow_regex = ^(kitty)$ swallow_regex = ^(Alacritty|kitty|footclient|com.mitchellh.ghostty)$
enable_swallow = 1 enable_swallow = 1
disable_hyprland_logo = true disable_hyprland_logo = true
} }
xwayland {
enabled = true
master {
no_gaps_when_only = false
} }
dwindle {
no_gaps_when_only = false
}

View file

@ -1,25 +1,25 @@
# KEYBINDS # KEYBINDS
$terminal = footclient
bind = SUPER, N, exec, neovide -- -c "Telescope oldfiles" $browser = brave
bind = SUPER, Q, killactive bind = SUPER, Q, killactive
bind = SUPER, Space, fullscreen, 1 bind = CTRL, Space, fullscreen, 1
bind = SUPERSHIFT, Space, fullscreen, 0 bind = CTRLSHIFT, Space, fullscreen, 0
bind = SUPERSHIFT, Q, exit bind = SUPERSHIFT, Q, exit
bind = SUPER, F, fakefullscreen
bind = SUPERSHIFT, F, togglefloating bind = SUPERSHIFT, F, togglefloating
bind = SUPER, Return, exec, footclient bind = SUPER, Return, exec, $terminal
bind = SUPER, W, exec, firefox-nightly bind = SUPER, W, exec, $browser
bind = SUPER, R, exec, footclient -e yazi bind = SUPER, R, exec, $terminal -e yazi
bind = SUPER, D, exec, fuzzel bind = SUPER, D, exec, fuzzel
bind = SUPER, L, exec, hyprlock
bind = SUPER, V, exec, clippy bind = SUPER, V, exec, clippy
bind = SUPER, B, exec, killall -SIGUSR1 waybar bind = SUPER, B, exec, killall -SIGUSR1 waybar
bind = SUPERSHIFT, B, exec, killall -SIGUSR2 waybar bind = SUPERSHIFT, B, exec, killall -SIGUSR2 waybar
bind = CTRLSHIFT, Escape, exec, footclient --title btoppy -e btop bind = CTRLSHIFT, Escape, exec, $terminal --title=btoppy -e btop
bind = SUPER, P, exec, $terminal --title=pulsemixer -e pulsemixer
bind = SUPER, End, exec, syspower
bind = SUPER, E, exec, iwgtk bind = SUPER, E, exec, iwgtk
bind = SUPER, C, exec, /usr/bin/discord --enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform=wayland bind = SUPER, C, exec, /usr/bin/discord --enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform=wayland
bind = SUPERSHIFT, E, exec, footclient --title blueterm -e bluetuith bind = SUPERSHIFT, E, exec, $terminal --title=blueterm -e bluetuith
bind = SUPER, S, exec, grimblast copy area bind = SUPER, S, exec, grimblast copy area
@ -31,10 +31,10 @@ bind = SUPERCTRL, 2, focusmonitor, HDMI-A-1
bind = SUPERCTRL, 3, focusmonitor, DP-1 bind = SUPERCTRL, 3, focusmonitor, DP-1
bind=SUPER,h,movefocus,l bind = SUPER, H, movefocus, l
bind=SUPER,l,movefocus,r bind = SUPER, L, movefocus, r
bind=SUPER,k,movefocus,u bind = SUPER, K, movefocus, u
bind=SUPER,j,movefocus,d bind = SUPER, , movefocus, d

View file

@ -0,0 +1,19 @@
# MONITOR LAYOUT
bindl = , switch:on:[Lid Switch], exec, hyprctl keyword monitor "eDP-1, disable"
bindl = , switch:off:[Lid Switch], exec, hyprctl keyword monitor "eDP-1, preffered, auto, 1"
# ON OFF OFF
# monitor = eDP-1, preffered, auto, 1
# monitor = HDMI-A-1, disabled
# monitor = DP-1, disabled
# ON ON ON
monitor = HDMI-A-1, 2560x1440@75, 0x0, 1
monitor = eDP-1, preffered, auto-left, 1
monitor = DP-1, 1920x1080@165, auto-right, 1
# OFF ON ON
# monitor = eDP-1, disabled
# monitor = HDMI-A-1, 2560x1440@75, auto, 1
# monitor = DP-1, 1920x1080@165, auto-right, 1

View file

@ -0,0 +1,67 @@
# RULES
windowrulev2=float,title:iwgtk
windowrulev2=center,title:iwgtk
windowrulev2=size 45% 60%,title:iwgtk
windowrulev2=float, title:pulsemixer
windowrulev2=center, title:pulsemixer
windowrulev2=size 45% 60%, title:pulsemixer
windowrulev2=float,title:Torrent Options
windowrulev2=center,title:Torrent Options
windowrulev2=size 45% 60%,title:Torrent Options
windowrulev2=float,title:Picture-in-Picture
windowrulev2=center,title:Picture-in-Picture
windowrulev2=size 60% 60%,title:Picture-in-Picture
windowrulev2=float,title:connterm
windowrulev2=center,title:connterm
windowrulev2=size 45% 60%,title:connterm
windowrulev2=float,title:blueterm
windowrulev2=center,title:blueterm
windowrulev2=size 45% 60%,title:blueterm
windowrulev2=float,title:btoppy
windowrulev2=center,title:btoppy
windowrulev2=size 75% 65%,title:btoppy
windowrulev2=float,class:steam
windowrulev2=center,class:steam
windowrulev2=size 95% 90%,class:steam
windowrulev2=float,title:pavucontrol
windowrulev2=center,title:pavucontrol
windowrulev2=size 30% 60%,title:pavucontrol
windowrulev2=workspace special silent,title:scratchpad
windowrule = float, file_progress
windowrule = float, confirm
windowrule = float, dialog
windowrule = float, download
windowrule = float, notification
windowrule = float, error
windowrule = float, splash
windowrule = float, confirmreset
windowrule = float, title:Open File
windowrule = float, title:branchdialog
windowrule = float, Lxappearance
windowrule = float, Rofi
windowrule = float, pavucontrol
windowrule = animation none,Rofi
layerrule = blur, fuzzel
layerrule = blur, waybar
layerrule = blur, avizo

View file

@ -1,5 +1,12 @@
# Workspace stuff # Workspace stuff
workspace = w[tv1], gapsout:0, gapsin:0
workspace = f[1], gapsout:0, gapsin:0
windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
# workspace = 1, monitor:HDMI-1-A, default:true # workspace = 1, monitor:HDMI-1-A, default:true
# workspace = 2, monitor:HDMI-1-A # workspace = 2, monitor:HDMI-1-A

View file

@ -1,21 +0,0 @@
bind=SUPER,1,workspace,1
bind=SUPER,2,workspace,2
bind=SUPER,3,workspace,3
bind=SUPER,4,workspace,4
bind=SUPER,5,workspace,5
bind=SUPER,6,workspace,6
bind=SUPER,7,workspace,7
bind=SUPER,8,workspace,8
bind=SUPER,9,workspace,9
bind=SUPER,0,workspace,10
bind=SUPERSHIFT,1,movetoworkspace,1
bind=SUPERSHIFT,2,movetoworkspace,2
bind=SUPERSHIFT,3,movetoworkspace,3
bind=SUPERSHIFT,4,movetoworkspace,4
bind=SUPERSHIFT,5,movetoworkspace,5
bind=SUPERSHIFT,6,movetoworkspace,6
bind=SUPERSHIFT,7,movetoworkspace,7
bind=SUPERSHIFT,8,movetoworkspace,8
bind=SUPERSHIFT,9,movetoworkspace,9
bind=SUPERSHIFT,0,movetoworkspace,10

View file

@ -1,5 +1,6 @@
# vim: syntax=config # vim: syntax=config
sub-auto=fuzzy
sub-file-paths=**
########### ###########
# General # # General #
@ -17,7 +18,7 @@ use-filedir-conf # look for additional config files in th
autofit-larger=100%x95% # resize window in case it's larger than W%xH% of the screen autofit-larger=100%x95% # resize window in case it's larger than W%xH% of the screen
cursor-autohide-fs-only # don't autohide the cursor in window mode, only fullscreen cursor-autohide-fs-only # don't autohide the cursor in window mode, only fullscreen
input-media-keys=no # enable/disable OSX media keys input-media-keys=no # enable/disable OSX media keys
cursor-autohide=yes cursor-autohide=1
force-seekable=yes force-seekable=yes
screenshot-format=png screenshot-format=png
@ -41,9 +42,9 @@ ytdl-format=bestvideo[height<=?1080][fps<=?30][vcodec!=?vp9][protocol!=http_dash
# Cache # # Cache #
######### #########
cache=no cache=yes
demuxer-max-bytes=3GiB demuxer-max-bytes=1GiB
demuxer-max-back-bytes=2GiB demuxer-max-back-bytes=1GiB
############# #############
@ -51,7 +52,7 @@ demuxer-max-back-bytes=2GiB
############# #############
osd-level=1 # enable osd and display --osd-status-msg on interaction osd-level=1 # enable osd and display --osd-status-msg on interaction
osd-duration=2500 # hide the osd after x ms osd-duration=250 # hide the osd after x ms
osd-status-msg='${time-pos} / ${duration}${?percent-pos: (${percent-pos}%)}${?frame-drop-count:${!frame-drop-count==0: Dropped: ${frame-drop-count}}}\n${?chapter:Chapter: ${chapter}}' osd-status-msg='${time-pos} / ${duration}${?percent-pos: (${percent-pos}%)}${?frame-drop-count:${!frame-drop-count==0: Dropped: ${frame-drop-count}}}\n${?chapter:Chapter: ${chapter}}'
osd-font='Source Sans Pro' osd-font='Source Sans Pro'
@ -81,7 +82,7 @@ sub-file-paths-append=subtitles
embeddedfonts=yes # use embedded fonts for SSA/ASS subs embeddedfonts=yes # use embedded fonts for SSA/ASS subs
sub-fix-timing=no # do not try to fix gaps (which might make it worse in some cases) sub-fix-timing=no # do not try to fix gaps (which might make it worse in some cases)
sub-ass-force-style=Kerning=yes # allows you to override style parameters of ASS scripts sub-ass-style-overrides=Kerning=yes # allows you to override style parameters of ASS scripts
sub-use-margins sub-use-margins
sub-ass-force-margins sub-ass-force-margins
@ -129,7 +130,7 @@ tscale=oversample # [sharp] oversample <-> linear (triangle
# "yes" is currently bugged: https://github.com/mpv-player/mpv/issues/4988 # "yes" is currently bugged: https://github.com/mpv-player/mpv/issues/4988
#icc-profile-auto #icc-profile-auto
#icc-force-contrast=1000 # silence some warning because the profile is bad #icc-force-contrast=1000 # silence some warning because the profile is bad
hwdec=no hwdec=yes
[high-quality] [high-quality]
profile-desc=cond:is_high(get('width', 0), get('height', 0), get('estimated-vf-fps', 0)) profile-desc=cond:is_high(get('width', 0), get('height', 0), get('estimated-vf-fps', 0))

View file

@ -0,0 +1,280 @@
--[[
fuzzydir / by sibwaf / https://github.com/sibwaf/mpv-scripts
Allows using "**" wildcards in sub-file-paths and audio-file-paths
so you don't have to specify all the possible directory names.
Basically, allows you to do this and never have the need to edit any paths ever again:
audio-file-paths = **
sub-file-paths = **
MIT license - do whatever you want, but I'm not responsible for any possible problems.
Please keep the URL to the original repository. Thanks!
]]
--[[
Configuration:
# enabled
Determines whether the script is enabled or not
# max_search_depth
Determines the max depth of recursive search, should be >= 1
Examples for "sub-file-paths = **":
"max_search_depth = 1" => mpv will be able to find [xyz.ass, subs/xyz.ass]
"max_search_depth = 2" => mpv will be able to find [xyz.ass, subs/xyz.ass, subs/moresubs/xyz.ass]
Please be careful when setting this value too high as it can result in awful performance or even stack overflow
# discovery_threshold
fuzzydir will skip paths which contain more than discovery_threshold directories in them
This is done to keep at least some garbage from getting into *-file-paths properties in case of big collections:
- dir1 <- will be ignored on opening video.mp4 as it's probably unrelated to the file
- ...
- dir999 <- will be ignored
- video.mp4
Use 0 to disable this behavior completely
# use_powershell
fuzzydir will use PowerShell to traverse directories when it's available
Can be faster in some cases, but can also be significantly slower
]]
local msg = require 'mp.msg'
local utils = require 'mp.utils'
local options = require 'mp.options'
o = {
enabled = true,
max_search_depth = 3,
discovery_threshold = 10,
use_powershell = false,
}
options.read_options(o, _, function() end)
----------
local default_audio_paths = mp.get_property_native("options/audio-file-paths")
local default_sub_paths = mp.get_property_native("options/sub-file-paths")
function foreach(list, action)
for _, item in pairs(list) do
action(item)
end
end
function starts_with(str, prefix)
return string.sub(str, 1, string.len(prefix)) == prefix
end
function ends_with(str, suffix)
return suffix == "" or string.sub(str, -string.len(suffix)) == suffix
end
function add_all(to, from)
for index, element in pairs(from) do
table.insert(to, element)
end
end
function contains(t, e)
for index, element in pairs(t) do
if element == e then
return true
end
end
return false
end
function normalize(path)
if path == "." then
return ""
end
if starts_with(path, "./") or starts_with(path, ".\\") then
path = string.sub(path, 3, -1)
end
if ends_with(path, "/") or ends_with(path, "\\") then
path = string.sub(path, 1, -2)
end
return path
end
function call_command(command)
local command_string = ""
for _, part in pairs(command) do
command_string = command_string .. part .. " "
end
msg.trace("Calling external command:", command_string)
local process = mp.command_native({
name = "subprocess",
playback_only = false,
capture_stdout = true,
capture_stderr = true,
args = command,
})
if process.status ~= 0 then
msg.verbose("External command failed with status " .. process.status .. ": " .. command_string)
if process.stderr ~= "" then
msg.debug(process.stderr)
end
return nil
end
local result = {}
for line in string.gmatch(process.stdout, "([^\r\n]+)") do
table.insert(result, line)
end
return result
end
-- Platform-dependent optimization
local powershell_version = nil
if o.use_powershell then
powershell_version = call_command({
"powershell",
"-NoProfile",
"-Command",
"$Host.Version.Major",
})
end
if powershell_version ~= nil then
powershell_version = tonumber(powershell_version[1])
end
if powershell_version == nil then
powershell_version = -1
end
msg.debug("PowerShell version", powershell_version)
function fast_readdir(path)
if powershell_version >= 3 then
msg.trace("Scanning", path, "with PowerShell")
result = call_command({
"powershell",
"-NoProfile",
"-Command",
[[
$dirs = Get-ChildItem -LiteralPath ]] .. string.format("%q", path) .. [[ -Directory
foreach($dir in $dirs) {
$u8clip = [System.Text.Encoding]::UTF8.GetBytes($dir.Name)
[Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length)
Write-Host ""
} ]],
})
msg.trace("Finished scanning", path, "with PowerShell")
return result
end
msg.trace("Scanning", path, "with default readdir")
result = utils.readdir(path, "dirs")
msg.trace("Finished scanning", path, "with default readdir")
return result
end
-- Platform-dependent optimization end
function traverse(search_path, current_path, level, cache)
local full_path = utils.join_path(search_path, current_path)
if level > o.max_search_depth then
msg.trace("Traversed too deep, skipping scan for", full_path)
return {}
end
if cache[full_path] ~= nil then
msg.trace("Returning from cache for", full_path)
return cache[full_path]
end
local result = {}
local discovered_paths = fast_readdir(full_path)
if discovered_paths == nil then
-- noop
msg.debug("Unable to scan " .. full_path .. ", skipping")
elseif o.discovery_threshold > 0 and #discovered_paths > o.discovery_threshold then
-- noop
msg.debug("Too many directories in " .. full_path .. ", skipping")
else
for _, discovered_path in pairs(discovered_paths) do
local new_path = utils.join_path(current_path, discovered_path)
table.insert(result, new_path)
add_all(result, traverse(search_path, new_path, level + 1, cache))
end
end
cache[full_path] = result
return result
end
function explode(raw_paths, search_path, cache)
local result = {}
for _, raw_path in pairs(raw_paths) do
local parent, leftover = utils.split_path(raw_path)
if leftover == "**" then
msg.trace("Expanding wildcard for", raw_path)
table.insert(result, parent)
add_all(result, traverse(search_path, parent, 1, cache))
else
msg.trace("Path", raw_path, "doesn't have a wildcard, keeping as-is")
table.insert(result, raw_path)
end
end
local normalized = {}
for index, path in pairs(result) do
local normalized_path = normalize(path)
if not contains(normalized, normalized_path) and normalized_path ~= "" then
table.insert(normalized, normalized_path)
end
end
return normalized
end
function explode_all()
if not o.enabled then return end
msg.debug("max_search_depth = ".. o.max_search_depth .. ", discovery_threshold = " .. o.discovery_threshold)
local video_path = mp.get_property("path")
local search_path, _ = utils.split_path(video_path)
msg.debug("search_path = " .. search_path)
local cache = {}
foreach(default_audio_paths, function(it) msg.debug("audio-file-paths:", it) end)
local audio_paths = explode(default_audio_paths, search_path, cache)
foreach(audio_paths, function(it) msg.debug("Adding to audio-file-paths:", it) end)
mp.set_property_native("options/audio-file-paths", audio_paths)
msg.verbose("Done expanding audio-file-paths")
foreach(default_sub_paths, function(it) msg.debug("sub-file-paths:", it) end)
local sub_paths = explode(default_sub_paths, search_path, cache)
foreach(sub_paths, function(it) msg.debug("Adding to sub-file-paths:", it) end)
mp.set_property_native("options/sub-file-paths", sub_paths)
msg.verbose("Done expanding sub-file-paths")
msg.debug("Done expanding paths")
end
mp.add_hook("on_load", 50, explode_all)

View file

@ -0,0 +1,124 @@
--[[
Automatically look for a fonts directory to use with `sub-fonts-dir`.
This mpv Lua script will automatically use the `sub-fonts-dir` option (to
override the default `~~/fonts` location) if it find a `Fonts` directory
alongside the currently playing file. (The name of the directory is
matched case-insensitively.)
**NOTE:** The `sub-fonts-dir` option has been submitted as part of [PR
#9856](https://github.com/mpv-player/mpv/pull/9856). Until it is merged
upstream, you will have to download and compile the [mpv
source](https://github.com/mpv-player/mpv) yourself.
USAGE:
Simply drop this script in your scripts configuration directory (usually
`~/.config/mpv/scripts/`).
REQUIREMENTS:
This script requires a version of mpv that includes the `sub-fonts-dir`
option.
NOTES:
- Any `--sub-fonts-dir` option passed on the command-line will override
this script.
- When going through a playlist, `sub-fonts-dir` will be dynamically
updated for each individual file.
- This script will output some additional information on higher verbosity
levels (`-v`). To increase the verbosity for this script only, use
`--msg-level=sub_fonts_dir_auto=v` (or `=debug` for more output).
AUTHOR:
Frédéric Brière (fbriere@fbriere.net)
Licensed under the GNU General Public License, version 2 or later.
--]]
local utils = require 'mp.utils'
local msg = require 'mp.msg'
-- msg.trace() was added in 0.28.0 -- define it ourselves if it's missing
if msg.trace == nil then
msg.trace = function(...) return mp.log("trace", ...) end
end
-- Directory name we are looking for (case-insensitive)
local FONTS_DIR_NAME = "Fonts"
-- Option name that we want to set
local OPTION_NAME = "sub-fonts-dir"
-- Make sure this option is available in this version of mpv
do
local _, err = mp.get_property(OPTION_NAME)
if err then
msg.error(string.format("This version of mpv does not support the %s option", OPTION_NAME))
return
end
end
-- Whether a path is a directory
local function isdir(path)
return utils.readdir(path .. "/.") ~= nil
end
-- Set an option's value for this file, without overriding the command-line
local function set_option(name, value)
if not mp.get_property_bool(string.format("option-info/%s/set-from-commandline", name)) then
msg.verbose(string.format("Setting %s to %q", name, value))
mp.set_property(string.format("file-local-options/%s", name), value)
else
msg.debug(string.format("Option %s was set on command-line -- leaving it as-is", name))
end
end
-- Find a "Fonts" directory under a single path
local function find_fonts_dir(path)
local entries = utils.readdir(path, "dirs")
if entries == nil then
-- mpv will throw an error message soon enough, no need to intervene
return
end
msg.trace(string.format("Iterating over directories under %q", path))
for _, entry in ipairs(entries) do
msg.trace("Candidate directory:", entry)
if entry:lower() == FONTS_DIR_NAME:lower() then
msg.trace("Match found")
return utils.join_path(path, entry)
end
end
msg.trace("No match found")
end
-- "on_load" hook callback for when a file is about to be loaded.
local function on_load()
local path = mp.get_property("path")
if isdir(path) then
msg.debug("Playing 'file' is actually a directory -- skipping")
return
end
local path_dir = utils.split_path(path)
-- Cosmetic nitpicking: That trailing "/" just looks annoying to me
path_dir = path_dir:gsub("(.)/+$", "%1")
msg.debug(string.format("Searching %q for fonts directory", path_dir))
local fonts_dir = find_fonts_dir(path_dir)
if fonts_dir then
msg.debug("Found fonts directory:", fonts_dir)
set_option(OPTION_NAME, fonts_dir)
end
end
mp.add_hook("on_load", 50, on_load)

12
.config/msmtp/config Normal file
View file

@ -0,0 +1,12 @@
defaults
tls on
account brk
auth on
host mail.bonsai.cool
port 587
user brk
from brk@bonsai.cool
passwordeval gopass show -o bonsai/mail
account default: brk

@ -1 +1 @@
Subproject commit ca0d4faec420a99de6141fccbdcad0ecc085d1ff Subproject commit 1776bc8edcc5cc6da250133e9153d1229f75d610

View file

@ -11,6 +11,7 @@ settings:
colors.webpage.darkmode.enabled: colors.webpage.darkmode.enabled:
global: false global: false
content.notifications.enabled: content.notifications.enabled:
https://www.facebook.com: true
https://www.netflix.com: true https://www.netflix.com: true
content.register_protocol_handler: content.register_protocol_handler:
https://mail.proton.me#mailto=%25s: true https://mail.proton.me#mailto=%25s: true

View file

@ -193,8 +193,8 @@ c.tabs.show = 'multiple'
# Setting default page for when opening new tabs or new windows with # Setting default page for when opening new tabs or new windows with
# commands like :open -t and :open -w . # commands like :open -t and :open -w .
c.url.default_page = 'google.com' c.url.default_page = 'bonsai.cool'
c.url.start_pages = 'google.com' c.url.start_pages = 'bonsai.cool'
# Search engines which can be used via the address bar. Maps a search # Search engines which can be used via the address bar. Maps a search
# engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}` # engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}`
@ -214,10 +214,10 @@ c.url.start_pages = 'google.com'
# the search engine name to the search term, e.g. `:open google # the search engine name to the search term, e.g. `:open google
# qutebrowser`. # qutebrowser`.
# Type: Dict # Type: Dict
c.url.searchengines = {'DEFAULT': 'https://google.com/search?q={}', c.url.searchengines = {'DEFAULT': "https://search.bonsai.cool/search?q={}",
'am': 'https://www.amazon.com/s?k={}', 'am': 'https://www.amazon.com/s?k={}',
'aw': 'https://wiki.archlinux.org/?search={}', 'aw': 'https://wiki.archlinux.org/?search={}',
'goog': 'https://www.google.com/search?q={}', 'g': 'https://www.google.com/search?q={}',
'hoog': 'https://hoogle.haskell.org/?hoogle={}', 'hoog': 'https://hoogle.haskell.org/?hoogle={}',
're': 'https://www.reddit.com/r/{}', 're': 'https://www.reddit.com/r/{}',
'ub': 'https://www.urbandictionary.com/define.php?term={}', 'ub': 'https://www.urbandictionary.com/define.php?term={}',

View file

@ -1,91 +1,31 @@
{ [{
"height": 35,
"layer": "top", "layer": "top",
"position": "top", "output": "HDMI-A-1",
"modules-left": ["hyprland/workspaces"], "width": 10,
"modules-center": [], "position": "left",
"modules-right": ["cpu", "temperature", "battery", "network", "clock"], "reload_style_on_change": true,
"modules-left": ["cpu", "temperature", ],
"modules-center": ["hyprland/workspaces"],
"modules-right": ["network", "clock"],
"wlr/workspaces": { "hyprland/workspaces": {
"disable-scroll": true,
"active-only": false, "active-only": false,
"all-outputs": false,
"on-click": "activate", "on-click": "activate",
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1",
},
"custom/bar" : {
"interval" : "once",
"format" : "▊",
"tooltip" : false
},
"custom/launcher": {
"interval": "once",
"format": "",
"tooltip": false
},
"custom/pkgs": {
"interval": "once",
"format": "{}",
"exec" : "hyprctl version -j | jq '.tag' -r | cut -d'-' -f1"
},
"custom/audio_idle_inhibitor": {
"format": "{icon}",
"exec": "sway-audio-idle-inhibit --dry-print-both-waybar",
"exec-if": "which sway-audio-idle-inhibit",
"return-type": "json",
"format-icons": {
"output": "",
"input": "",
"output-input": " ",
"none": ""
}
},
"custom/cpu": {
"interval": "once",
"format": "",
}, },
"cpu": { "cpu": {
"interval": 1, "interval": 1,
"format": " \t{usage}%", "format": "{usage}%",
"max-length": 10, "max-length": 4,
"min-length": 4 "min-length": 4
}, },
"custom/temp": {
"interval": "once",
"format": "",
},
"temperature": { "temperature": {
"hwmon-path-abs": "/sys/devices/platform/coretemp.0/hwmon", "hwmon-path-abs": "/sys/devices/platform/coretemp.0/hwmon",
"input-filename": "temp1_input", "input-filename": "temp1_input",
"format": "{temperatureC}°C", "format": "{temperatureC}°",
}, },
"backlight": {
"format": "{icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""],
"on-scroll-up": "light -A 1",
"on-scroll-down": "light -U 1"
},
"pulseaudio": { "pulseaudio": {
"format": "{icon}", "format": "{icon}",
"format-bluetooth": "{icon} {volume}% {format_source}", "format-bluetooth": "{icon} {volume}% {format_source}",
@ -104,24 +44,10 @@
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle" "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle"
}, },
"custom/net": {
"interval": "once",
"format": "󰤨",
},
"network": { "network": {
"format-wifi": "󰤨 {essid}", "format-wifi": "󰤨 ",
"format-ethernet": "󰈀 ", "format-ethernet": "󰈀 ",
"format-disconnected": "󰌙 ", "format-disconnected": "󰌙 ",
"max-length" : 20
},
"custom/bat" : {
"interval" : "once",
"format" : ""
}, },
"battery": { "battery": {
@ -133,24 +59,175 @@
"critical": 15 "critical": 15
}, },
"max-length": 20, "max-length": 20,
"format": " {icon} {capacity}%", "format": "{icon}",
"format-warning": " {icon} {capacity}%", "format-warning": "󰂃",
"format-critical": " {icon} {capacity}%", "format-critical": "󰂃",
"format-charging": " {icon} {capacity}%", "format-charging": "󰂄",
"format-plugged": " {icon} {capacity}%", "format-plugged": "󰂄",
"format-alt": " {icon} {time} ", "format-alt": " {icon} {time} ",
"format-full": "", "format-full": "",
"format-icons": [" ", " ", " ", " ", " "] "format-icons": ["󰁺", "󰁽", "󰁿", "󰂁", "󰁹"]
},
"custom/clock" : {
"format" : "󱑓"
}, },
"clock": { "clock": {
"format-alt": "<span> </span> {:%a %b %d}", "format-alt": "<span> </span> {:%a %b %d}",
"format": "󱑓 {:%H:%M}" "format": "{:%H\n%M}"
},
},
{
"layer": "top",
"output": "DP-1",
"width": 10,
"position": "right",
"reload_style_on_change": true,
"modules-left": ["cpu", "temperature", ],
"modules-center": ["hyprland/workspaces"],
"modules-right": ["network", "clock"],
"hyprland/workspaces": {
"active-only": false,
"on-click": "activate",
},
"cpu": {
"interval": 1,
"format": "{usage}%",
"max-length": 4,
"min-length": 4
},
"temperature": {
"hwmon-path-abs": "/sys/devices/platform/coretemp.0/hwmon",
"input-filename": "temp1_input",
"format": "{temperatureC}°",
},
"pulseaudio": {
"format": "{icon}",
"format-bluetooth": "{icon} {volume}% {format_source}",
"format-bluetooth-muted": "x {icon} {format_source}",
"format-muted": "婢",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click-right": "pavucontrol",
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle"
},
"network": {
"format-wifi": "󰤨 ",
"format-ethernet": "󰈀 ",
"format-disconnected": "󰌙 ",
},
"battery": {
"bat": "BAT0",
"adapter": "ADP0",
"interval": 60,
"states": {
"warning": 30,
"critical": 15
},
"max-length": 20,
"format": "{icon}",
"format-warning": "󰂃",
"format-critical": "󰂃",
"format-charging": "󰂄",
"format-plugged": "󰂄",
"format-alt": " {icon} {time} ",
"format-full": "",
"format-icons": ["󰁺", "󰁽", "󰁿", "󰂁", "󰁹"]
}, },
} "clock": {
"format-alt": "<span> </span> {:%a %b %d}",
"format": "{:%H\n%M}"
},
},
{
"layer": "top",
"output": "eDP-1",
"width": 10,
"position": "left",
"reload_style_on_change": true,
"modules-left": ["cpu", "temperature", ],
"modules-center": ["hyprland/workspaces"],
"modules-right": ["battery", "network", "clock"],
"hyprland/workspaces": {
"active-only": false,
"on-click": "activate",
},
"cpu": {
"interval": 1,
"format": "{usage}%",
"max-length": 4,
"min-length": 4
},
"temperature": {
"hwmon-path-abs": "/sys/devices/platform/coretemp.0/hwmon",
"input-filename": "temp1_input",
"format": "{temperatureC}°",
},
"pulseaudio": {
"format": "{icon}",
"format-bluetooth": "{icon} {volume}% {format_source}",
"format-bluetooth-muted": "x {icon} {format_source}",
"format-muted": "婢",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click-right": "pavucontrol",
"on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle"
},
"network": {
"format-wifi": "󰤨 ",
"format-ethernet": "󰈀 ",
"format-disconnected": "󰌙 ",
},
"battery": {
"bat": "BAT0",
"adapter": "ADP0",
"interval": 60,
"states": {
"warning": 30,
"critical": 15
},
"max-length": 20,
"format": "{icon}",
"format-warning": "󰂃",
"format-critical": "󰂃",
"format-charging": "󰂄",
"format-plugged": "󰂄",
"format-alt": " {icon} {time} ",
"format-full": "",
"format-icons": ["󰁺", "󰁽", "󰁿", "󰂁", "󰁹"]
},
"clock": {
"format-alt": "<span> </span> {:%a %b %d}",
"format": "{:%H\n%M}"
},
},
]

View file

@ -3,34 +3,49 @@
/* margin: top right bottom left */ /* margin: top right bottom left */
/* Spacing outside the element */ /* Spacing outside the element */
/* padding: top right bottom left */
/* Spacing inside the element */ /* Spacing inside the element */
* { * {
font-family: FiraCode Mono Nerd Font; font-family: FiraCode Mono Nerd Font;
font-size: 15px; font-size: 13px;
min-height: 0;
margin: 0px;
padding: 2px 0px;
border-radius: 6px;
} }
#clock,
#battery,
#cpu,
#temperature,
#backlight,
#network,
#pulseaudio {
color: @crust;
font-family: FiraCode Mono Nerd Font;
font-size: 13px;
min-height: 0;
margin: 4px;
padding: 6px 1px;
background: #1B1B1B;
}
window#waybar { window#waybar {
background-color: #0A0A0A; background-color: #070707;
color: @text; color: @text;
transition-property: background-color; transition-property: background-color;
transition-duration: 0.5s; transition-duration: 0.5s;
border-radius: 0px;
transition-duration: .5s; transition-duration: .5s;
margin: 16px 16px; border-radius: 0px;
margin: 0px;
padding: 0px;
} }
window#waybar.hidden {
opacity: 0.2;
}
#workspaces button { #workspaces button {
color: #A9A1E1; color: #A9A1E1;
background: #191919; background: #1B1B1B;
border-radius: 8px;
padding: 0px 10px 0px 10px;
margin: 10px 5px 10px 5px;
transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out;
} }
@ -40,183 +55,36 @@ window#waybar.hidden {
} }
#workspaces button.active { #workspaces button.active {
color: #A9A1E1; color: #1B1B1B;
background: #141414; background: #A9A1E1;
border-bottom: 2px solid #A9A1E1; padding: 0px;
border-radius: 8px; margin: 7px;
padding: 0px 10px 0px 10px;
margin: 10px 5px 10px 5px;
}
#custom-launcher,
#clock,
#battery,
#cpu,
#temperature,
#backlight,
#network,
#pulseaudio,
#custom-dunst,
#custom-powermenu{
padding: 20px 20px;
margin: 7px 0px 10px 0px;
border-radius: 10px;
color: @crust;
}
#window,
#custom-audio_idle_inhibitor {
padding: 0px 15px 0px 10px;
margin: 7px 0px 10px 10px;
background-color: #C678DD;
color: @joksi-bg;
border-radius: 10px;
font-size: 20px;
}
#custom-launcher {
padding: 0px 15px 0px 10px;
margin: 7px 0px 10px 10px;
background-color: #C678DD;
color: @joksi-bg;
border-radius: 10px 0px 0px 10px;
font-size: 20px;
}
#custom-pkgs {
padding: 0px 15px 0px 10px;
margin: 7px 0px 10px 0px;
background-color: @joksi-bg;
color: #C678DD;
border-radius: 0px 10px 10px 0px;
}
#custom-cpu {
background-color: #51AFEF;
color: @joksi-bg;
border-radius: 10px 0px 0px 10px;
padding: 0px 10px 0px 10px;
margin: 7px 0px 10px 10px;
font-size: 20px;
} }
#cpu { #cpu {
background: #141414;
color: #51AFEF; color: #51AFEF;
border-radius: 8px 0px 0px 8px;
border-bottom: 2px solid #51AFEF;
padding: 0px 10px 0px 10px;
margin: 10px 0px 10px 0px;
} }
#custom-temp {
background: #141414;
color: @joksi-bg;
border-radius: 10px 0px 0px 10px;
padding: 0px 10px 0px 10px;
margin: 7px 0px 10px 10px;
font-size: 20px;
}
#temperature { #temperature {
background: #141414;
color: #51AFEF; color: #51AFEF;
border-bottom: 2px solid #51AFEF;
border-radius: 0px 8px 8px 0px;
padding: 0px 10px 0px 10px;
margin: 10px 5px 10px 0px;
} }
#backlight {
background-color: #CCCCCC;
padding: 0px 10px 0px 10px;
border-radius: 10px 0px 0px 10px;
}
#pulseaudio { #pulseaudio {
background-color: @joksi-bg; background-color: @joksi-bg;
color:#A9A1E1; color: #A9A1E1;
padding: 0px 10px 0px 10px;
border-radius: 10px 0px 0px 10px;
}
#custom-net {
background-color: #A9A1E1;
color: @joksi-bg;
border-radius: 10px 0px 0px 10px;
padding: 0px 15px 0px 10px;
margin: 7px 0px 10px 10px;
font-size: 20px;
} }
#network { #network {
color: #A9A1E1; color: #A9A1E1;
background: #141414;
border-bottom: 2px solid #A9A1E1;
border-radius: 8px;
padding: 0px 5px 0px 5px;
margin: 10px 5px 10px 5px;
font-size: 15px;
} }
#custom-bat {
background-color: #EC5F67;
color: @joksi-bg;
border-radius: 10px 0px 0px 10px;
padding: 0px 15px 0px 10px;
margin: 7px 0px 10px 10px;
font-size: 20px;
}
#battery { #battery {
background-color: @joksi-bg; background-color: @joksi-bg;
color: #EC5F67; color: #EC5F67;
border-radius: 0px 10px 10px 0px;
padding: 0px 10px 0px 10px;
margin: 7px 0px 10px 0px;
}
#custom-clock {
color: @joksi-bg;
background-color: #98BE65;
font-size: 20px;
border-bottom: 2px solid #98BE65;
border-radius: 0px;
padding: 0px 15px 0px 10px;
margin: 7px 0px 10px 10px;
} }
#clock { #clock {
padding: 0px 10px 0px 10px;
margin: 10px 5px 10px 5px;
color: #98BE65; color: #98BE65;
border-bottom: 2px solid #98BE65;
border-radius: 8px;
background: #141414;
} }

View file

@ -1,300 +0,0 @@
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/keymap.json"
[manager]
keymap = [
{ on = [ "<Esc>" ], exec = "escape", desc = "Exit visual mode, clear selected, or cancel search" },
{ on = [ "q" ], exec = "quit", desc = "Exit the process" },
{ on = [ "Q" ], exec = "quit --no-cwd-file", desc = "Exit the process without writing cwd-file" },
{ on = [ "<C-q>" ], exec = "close", desc = "Close the current tab, or quit if it is last tab" },
{ on = [ "<C-z>" ], exec = "suspend", desc = "Suspend the process" },
# Navigation
{ on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "K" ], exec = "arrow -5", desc = "Move cursor up 5 lines" },
{ on = [ "J" ], exec = "arrow 5", desc = "Move cursor down 5 lines" },
{ on = [ "<S-Up>" ], exec = "arrow -5", desc = "Move cursor up 5 lines" },
{ on = [ "<S-Down>" ], exec = "arrow 5", desc = "Move cursor down 5 lines" },
{ on = [ "<C-u>" ], exec = "arrow -50%", desc = "Move cursor up half page" },
{ on = [ "<C-d>" ], exec = "arrow 50%", desc = "Move cursor down half page" },
{ on = [ "<C-b>" ], exec = "arrow -100%", desc = "Move cursor up one page" },
{ on = [ "<C-f>" ], exec = "arrow 100%", desc = "Move cursor down one page" },
{ on = [ "<C-PageUp>" ], exec = "arrow -50%", desc = "Move cursor up half page" },
{ on = [ "<C-PageDown>" ], exec = "arrow 50%", desc = "Move cursor down half page" },
{ on = [ "<PageUp>" ], exec = "arrow -100%", desc = "Move cursor up one page" },
{ on = [ "<PageDown>" ], exec = "arrow 100%", desc = "Move cursor down one page" },
{ on = [ "h" ], exec = [ "escape --visual", "leave" ], desc = "Go back to the parent directory" },
{ on = [ "l" ], exec = [ "escape --visual", "enter" ], desc = "Enter the child directory" },
{ on = [ "H" ], exec = "back", desc = "Go back to the previous directory" },
{ on = [ "L" ], exec = "forward", desc = "Go forward to the next directory" },
{ on = [ "<A-k>" ], exec = "seek -5", desc = "Seek up 5 units in the preview" },
{ on = [ "<A-j>" ], exec = "seek 5", desc = "Seek down 5 units in the preview" },
{ on = [ "<A-PageUp>" ], exec = "seek -5", desc = "Seek up 5 units in the preview" },
{ on = [ "<A-PageDown>" ], exec = "seek 5", desc = "Seek down 5 units in the preview" },
{ on = [ "<Up>" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "<Down>" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "<Left>" ], exec = "leave", desc = "Go back to the parent directory" },
{ on = [ "<Right>" ], exec = "enter", desc = "Enter the child directory" },
{ on = [ "g", "g" ], exec = "arrow -99999999", desc = "Move cursor to the top" },
{ on = [ "G" ], exec = "arrow 99999999", desc = "Move cursor to the bottom" },
# Selection
{ on = [ "<Space>" ], exec = [ "select --state=none", "arrow 1" ], desc = "Toggle the current selection state" },
{ on = [ "v" ], exec = "visual_mode", desc = "Enter visual mode (selection mode)" },
{ on = [ "V" ], exec = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
{ on = [ "<C-a>" ], exec = "select_all --state=true", desc = "Select all files" },
{ on = [ "<C-r>" ], exec = "select_all --state=none", desc = "Inverse selection of all files" },
# Operation
{ on = [ "o" ], exec = [ "escape --visual", "open" ], desc = "Open the selected files" },
{ on = [ "O" ], exec = [ "escape --visual", "open --interactive" ], desc = "Open the selected files interactively" },
{ on = [ "<Enter>" ], exec = [ "escape --visual", "open" ], desc = "Open the selected files" },
{ on = [ "<C-Enter>" ], exec = [ "escape --visual", "open --interactive" ], desc = "Open the selected files interactively" },
{ on = [ "y" ], exec = [ "escape --visual", "yank" ], desc = "Copy the selected files" },
{ on = [ "Y" ], exec = "unyank", desc = "Cancel the yank status of files" },
{ on = [ "x" ], exec = [ "escape --visual", "yank --cut" ], desc = "Cut the selected files" },
{ on = [ "p" ], exec = "paste", desc = "Paste the files" },
{ on = [ "P" ], exec = "paste --force", desc = "Paste the files (overwrite if the destination exists)" },
{ on = [ "-" ], exec = "link", desc = "Symlink the absolute path of files" },
{ on = [ "_" ], exec = "link --relative", desc = "Symlink the relative path of files" },
{ on = [ "d" ], exec = [ "escape --visual", "remove --permanently" ], desc = "Permanently delete the files" },
{ on = [ "D" ], exec = [ "escape --visual", "remove --permanently" ], desc = "Permanently delete the files" },
{ on = [ "a" ], exec = "create", desc = "Create a file or directory (ends with / for directories)" },
{ on = [ "r" ], exec = [ "escape --visual", "rename --cursor=before_ext" ], desc = "Rename a file or directory" },
{ on = [ ";" ], exec = [ "escape --visual", "shell" ], desc = "Run a shell command" },
{ on = [ ":" ], exec = [ "escape --visual", "shell --block" ], desc = "Run a shell command (block the UI until the command finishes)" },
{ on = [ "." ], exec = "hidden toggle", desc = "Toggle the visibility of hidden files" },
{ on = [ "s" ], exec = "search fd", desc = "Search files by name using fd" },
{ on = [ "S" ], exec = "search rg", desc = "Search files by content using ripgrep" },
{ on = [ "<C-s>" ], exec = "search none", desc = "Cancel the ongoing search" },
{ on = [ "z" ], exec = "jump zoxide", desc = "Jump to a directory using zoxide" },
{ on = [ "Z" ], exec = "jump fzf", desc = "Jump to a directory, or reveal a file using fzf" },
# Linemode
{ on = [ "m", "s" ], exec = "linemode size", desc = "Set linemode to size" },
{ on = [ "m", "p" ], exec = "linemode permissions", desc = "Set linemode to permissions" },
{ on = [ "m", "m" ], exec = "linemode mtime", desc = "Set linemode to mtime" },
{ on = [ "m", "n" ], exec = "linemode none", desc = "Set linemode to none" },
# Copy
{ on = [ "c", "c" ], exec = [ "escape --visual", "copy path" ], desc = "Copy the absolute path" },
{ on = [ "c", "d" ], exec = [ "escape --visual", "copy dirname" ], desc = "Copy the path of the parent directory" },
{ on = [ "c", "f" ], exec = [ "escape --visual", "copy filename" ], desc = "Copy the name of the file" },
{ on = [ "c", "n" ], exec = [ "escape --visual", "copy name_without_ext" ], desc = "Copy the name of the file without the extension" },
# Filter
{ on = [ "f" ], exec = "filter --smart", desc = "Filter the files" },
# Find
{ on = [ "/" ], exec = "find --smart", desc = "Find next file" },
{ on = [ "?" ], exec = "find --previous --smart", desc = "Find previous file" },
{ on = [ "n" ], exec = "find_arrow", desc = "Go to next found file" },
{ on = [ "N" ], exec = "find_arrow --previous", desc = "Go to previous found file" },
# Sorting
{ on = [ ",", "m" ], exec = "sort modified --dir-first", desc = "Sort by modified time" },
{ on = [ ",", "M" ], exec = "sort modified --reverse --dir-first", desc = "Sort by modified time (reverse)" },
{ on = [ ",", "c" ], exec = "sort created --dir-first", desc = "Sort by created time" },
{ on = [ ",", "C" ], exec = "sort created --reverse --dir-first", desc = "Sort by created time (reverse)" },
{ on = [ ",", "e" ], exec = "sort extension --dir-first", desc = "Sort by extension" },
{ on = [ ",", "E" ], exec = "sort extension --reverse --dir-first", desc = "Sort by extension (reverse)" },
{ on = [ ",", "a" ], exec = "sort alphabetical --dir-first", desc = "Sort alphabetically" },
{ on = [ ",", "A" ], exec = "sort alphabetical --reverse --dir-first", desc = "Sort alphabetically (reverse)" },
{ on = [ ",", "n" ], exec = "sort natural --dir-first", desc = "Sort naturally" },
{ on = [ ",", "N" ], exec = "sort natural --reverse --dir-first", desc = "Sort naturally (reverse)" },
{ on = [ ",", "s" ], exec = "sort size --dir-first", desc = "Sort by size" },
{ on = [ ",", "S" ], exec = "sort size --reverse --dir-first", desc = "Sort by size (reverse)" },
# Tabs
{ on = [ "t" ], exec = "tab_create --current", desc = "Create a new tab using the current path" },
{ on = [ "1" ], exec = "tab_switch 0", desc = "Switch to the first tab" },
{ on = [ "2" ], exec = "tab_switch 1", desc = "Switch to the second tab" },
{ on = [ "3" ], exec = "tab_switch 2", desc = "Switch to the third tab" },
{ on = [ "4" ], exec = "tab_switch 3", desc = "Switch to the fourth tab" },
{ on = [ "5" ], exec = "tab_switch 4", desc = "Switch to the fifth tab" },
{ on = [ "6" ], exec = "tab_switch 5", desc = "Switch to the sixth tab" },
{ on = [ "7" ], exec = "tab_switch 6", desc = "Switch to the seventh tab" },
{ on = [ "8" ], exec = "tab_switch 7", desc = "Switch to the eighth tab" },
{ on = [ "9" ], exec = "tab_switch 8", desc = "Switch to the ninth tab" },
{ on = [ "[" ], exec = "tab_switch -1 --relative", desc = "Switch to the previous tab" },
{ on = [ "]" ], exec = "tab_switch 1 --relative", desc = "Switch to the next tab" },
{ on = [ "{" ], exec = "tab_swap -1", desc = "Swap the current tab with the previous tab" },
{ on = [ "}" ], exec = "tab_swap 1", desc = "Swap the current tab with the next tab" },
# Tasks
{ on = [ "w" ], exec = "tasks_show", desc = "Show the tasks manager" },
# Goto
{ on = [ "g", "h" ], exec = "cd ~", desc = "Go to the home directory" },
{ on = [ "g", "c" ], exec = "cd ~/.config", desc = "Go to the config directory" },
{ on = [ "g", "d" ], exec = "cd ~/Downloads", desc = "Go to the downloads directory" },
{ on = [ "g", "t" ], exec = "cd /tmp", desc = "Go to the temporary directory" },
{ on = [ "g", "<Space>" ], exec = "cd --interactive", desc = "Go to a directory interactively" },
# Help
{ on = [ "~" ], exec = "help", desc = "Open help" },
]
[tasks]
keymap = [
{ on = [ "<Esc>" ], exec = "close", desc = "Hide the task manager" },
{ on = [ "<C-q>" ], exec = "close", desc = "Hide the task manager" },
{ on = [ "w" ], exec = "close", desc = "Hide the task manager" },
{ on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "<Up>" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "<Down>" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "<Enter>" ], exec = "inspect", desc = "Inspect the task" },
{ on = [ "x" ], exec = "cancel", desc = "Cancel the task" },
{ on = [ "~" ], exec = "help", desc = "Open help" }
]
[select]
keymap = [
{ on = [ "<C-q>" ], exec = "close", desc = "Cancel selection" },
{ on = [ "<Esc>" ], exec = "close", desc = "Cancel selection" },
{ on = [ "<Enter>" ], exec = "close --submit", desc = "Submit the selection" },
{ on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "K" ], exec = "arrow -5", desc = "Move cursor up 5 lines" },
{ on = [ "J" ], exec = "arrow 5", desc = "Move cursor down 5 lines" },
{ on = [ "<Up>" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "<Down>" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "<S-Up>" ], exec = "arrow -5", desc = "Move cursor up 5 lines" },
{ on = [ "<S-Down>" ], exec = "arrow 5", desc = "Move cursor down 5 lines" },
{ on = [ "~" ], exec = "help", desc = "Open help" }
]
[input]
keymap = [
{ on = [ "<C-q>" ], exec = "close", desc = "Cancel input" },
{ on = [ "<Enter>" ], exec = "close --submit", desc = "Submit the input" },
{ on = [ "<Esc>" ], exec = "escape", desc = "Go back the normal mode, or cancel input" },
# Mode
{ on = [ "i" ], exec = "insert", desc = "Enter insert mode" },
{ on = [ "a" ], exec = "insert --append", desc = "Enter append mode" },
{ on = [ "I" ], exec = [ "move -999", "insert" ], desc = "Move to the BOL, and enter insert mode" },
{ on = [ "A" ], exec = [ "move 999", "insert --append" ], desc = "Move to the EOL, and enter append mode" },
{ on = [ "v" ], exec = "visual", desc = "Enter visual mode" },
{ on = [ "V" ], exec = [ "move -999", "visual", "move 999" ], desc = "Enter visual mode and select all" },
# Character-wise movement
{ on = [ "h" ], exec = "move -1", desc = "Move back a character" },
{ on = [ "l" ], exec = "move 1", desc = "Move forward a character" },
{ on = [ "<Left>" ], exec = "move -1", desc = "Move back a character" },
{ on = [ "<Right>" ], exec = "move 1", desc = "Move forward a character" },
{ on = [ "<C-b>" ], exec = "move -1", desc = "Move back a character" },
{ on = [ "<C-f>" ], exec = "move 1", desc = "Move forward a character" },
# Word-wise movement
{ on = [ "b" ], exec = "backward", desc = "Move back to the start of the current or previous word" },
{ on = [ "w" ], exec = "forward", desc = "Move forward to the start of the next word" },
{ on = [ "e" ], exec = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
{ on = [ "<A-b>" ], exec = "backward", desc = "Move back to the start of the current or previous word" },
{ on = [ "<A-f>" ], exec = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
# Line-wise movement
{ on = [ "0" ], exec = "move -999", desc = "Move to the BOL" },
{ on = [ "$" ], exec = "move 999", desc = "Move to the EOL" },
{ on = [ "<C-a>" ], exec = "move -999", desc = "Move to the BOL" },
{ on = [ "<C-e>" ], exec = "move 999", desc = "Move to the EOL" },
{ on = [ "<Home>" ], exec = "move -999", desc = "Move to the BOL" },
{ on = [ "<End>" ], exec = "move 999", desc = "Move to the EOL" },
# Delete
{ on = [ "<Backspace>" ], exec = "backspace", desc = "Delete the character before the cursor" },
{ on = [ "<Delete>" ], exec = "backspace --under", desc = "Delete the character under the cursor" },
{ on = [ "<C-h>" ], exec = "backspace", desc = "Delete the character before the cursor" },
{ on = [ "<C-d>" ], exec = "backspace --under", desc = "Delete the character under the cursor" },
# Kill
{ on = [ "<C-u>" ], exec = "kill bol", desc = "Kill backwards to the BOL" },
{ on = [ "<C-k>" ], exec = "kill eol", desc = "Kill forwards to the EOL" },
{ on = [ "<C-w>" ], exec = "kill backward", desc = "Kill backwards to the start of the current word" },
{ on = [ "<A-d>" ], exec = "kill forward", desc = "Kill forwards to the end of the current word" },
# Cut/Yank/Paste
{ on = [ "d" ], exec = "delete --cut", desc = "Cut the selected characters" },
{ on = [ "D" ], exec = [ "delete --cut", "move 999" ], desc = "Cut until the EOL" },
{ on = [ "c" ], exec = "delete --cut --insert", desc = "Cut the selected characters, and enter insert mode" },
{ on = [ "C" ], exec = [ "delete --cut --insert", "move 999" ], desc = "Cut until the EOL, and enter insert mode" },
{ on = [ "x" ], exec = [ "delete --cut", "move 1 --in-operating" ], desc = "Cut the current character" },
{ on = [ "y" ], exec = "yank", desc = "Copy the selected characters" },
{ on = [ "p" ], exec = "paste", desc = "Paste the copied characters after the cursor" },
{ on = [ "P" ], exec = "paste --before", desc = "Paste the copied characters before the cursor" },
# Undo/Redo
{ on = [ "u" ], exec = "undo", desc = "Undo the last operation" },
{ on = [ "<C-r>" ], exec = "redo", desc = "Redo the last operation" },
# Help
{ on = [ "~" ], exec = "help", desc = "Open help" }
]
[completion]
keymap = [
{ on = [ "<C-q>" ], exec = "close", desc = "Cancel completion" },
{ on = [ "<Tab>" ], exec = "close --submit", desc = "Submit the completion" },
{ on = [ "<Enter>" ], exec = [ "close --submit", "close_input --submit" ], desc = "Submit the completion and input" },
{ on = [ "<A-k>" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "<A-j>" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "<Up>" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "<Down>" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "~" ], exec = "help", desc = "Open help" }
]
[help]
keymap = [
{ on = [ "<Esc>" ], exec = "escape", desc = "Clear the filter, or hide the help" },
{ on = [ "q" ], exec = "close", desc = "Exit the process" },
{ on = [ "<C-q>" ], exec = "close", desc = "Hide the help" },
# Navigation
{ on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "K" ], exec = "arrow -5", desc = "Move cursor up 5 lines" },
{ on = [ "J" ], exec = "arrow 5", desc = "Move cursor down 5 lines" },
{ on = [ "<Up>" ], exec = "arrow -1", desc = "Move cursor up" },
{ on = [ "<Down>" ], exec = "arrow 1", desc = "Move cursor down" },
{ on = [ "<S-Up>" ], exec = "arrow -5", desc = "Move cursor up 5 lines" },
{ on = [ "<S-Down>" ], exec = "arrow 5", desc = "Move cursor down 5 lines" },
# Filtering
{ on = [ "/" ], exec = "filter", desc = "Apply a filter for the help items" },
]

View file

@ -1,145 +0,0 @@
# vim:fileencoding=utf-8:foldmethod=marker
# : Manager {{{
[manager]
cwd = { fg = "#81c8be" }
# Hovered
hovered = { fg = "#303446", bg = "#8caaee" }
preview_hovered = { underline = true }
# Find
find_keyword = { fg = "#e5c890", italic = true }
find_position = { fg = "#f4b8e4", bg = "reset", italic = true }
# Marker
marker_selected = { fg = "#a6d189", bg = "#a6d189" }
marker_copied = { fg = "#e5c890", bg = "#e5c890" }
marker_cut = { fg = "#e78284", bg = "#e78284" }
# Tab
tab_active = { fg = "#303446", bg = "#8caaee" }
tab_inactive = { fg = "#c6d0f5", bg = "#51576d" }
tab_width = 1
# Border
border_symbol = "│"
border_style = { fg = "#838ba7" }
# Highlighting
syntect_theme = "~/.config/yazi/Catppuccin-frappe.tmTheme"
# : }}}
# : Status {{{
[status]
separator_open = ""
separator_close = ""
separator_style = { fg = "#51576d", bg = "#51576d" }
# Mode
mode_normal = { fg = "#303446", bg = "#8caaee", bold = true }
mode_select = { fg = "#303446", bg = "#a6d189", bold = true }
mode_unset = { fg = "#303446", bg = "#eebebe", bold = true }
# Progress
progress_label = { fg = "#ffffff", bold = true }
progress_normal = { fg = "#8caaee", bg = "#51576d" }
progress_error = { fg = "#e78284", bg = "#51576d" }
# Permissions
permissions_t = { fg = "#8caaee" }
permissions_r = { fg = "#e5c890" }
permissions_w = { fg = "#e78284" }
permissions_x = { fg = "#a6d189" }
permissions_s = { fg = "#838ba7" }
# : }}}
# : Input {{{
[input]
border = { fg = "#8caaee" }
title = {}
value = {}
selected = { reversed = true }
# : }}}
# : Select {{{
[select]
border = { fg = "#8caaee" }
active = { fg = "#f4b8e4" }
inactive = {}
# : }}}
# : Tasks {{{
[tasks]
border = { fg = "#8caaee" }
title = {}
hovered = { underline = true }
# : }}}
# : Which {{{
[which]
mask = { bg = "#414559" }
cand = { fg = "#81c8be" }
rest = { fg = "#949cbb" }
desc = { fg = "#f4b8e4" }
separator = "  "
separator_style = { fg = "#626880" }
# : }}}
# : Help {{{
[help]
on = { fg = "#f4b8e4" }
exec = { fg = "#81c8be" }
desc = { fg = "#949cbb" }
hovered = { bg = "#626880", bold = true }
footer = { fg = "#51576d", bg = "#c6d0f5" }
# : }}}
# : File-specific styles {{{
[filetype]
rules = [
# Images
{ mime = "image/*", fg = "#81c8be" },
# Videos
{ mime = "video/*", fg = "#e5c890" },
{ mime = "audio/*", fg = "#e5c890" },
# Archives
{ mime = "application/zip", fg = "#f4b8e4" },
{ mime = "application/gzip", fg = "#f4b8e4" },
{ mime = "application/x-tar", fg = "#f4b8e4" },
{ mime = "application/x-bzip", fg = "#f4b8e4" },
{ mime = "application/x-bzip2", fg = "#f4b8e4" },
{ mime = "application/x-7z-compressed", fg = "#f4b8e4" },
{ mime = "application/x-rar", fg = "#f4b8e4" },
# Fallback
{ name = "*", fg = "#c6d0f5" },
{ name = "*/", fg = "#8caaee" }
]
# : }}}

202
.config/yazi/yazi.toml Executable file → Normal file
View file

@ -3,21 +3,26 @@
"$schema" = "https://yazi-rs.github.io/schemas/yazi.json" "$schema" = "https://yazi-rs.github.io/schemas/yazi.json"
[manager] [manager]
ratio = [ 1, 2, 3 ] ratio = [ 1, 4, 3 ]
sort_by = "alphabetical" sort_by = "alphabetical"
sort_sensitive = true sort_sensitive = false
sort_reverse = false sort_reverse = false
sort_dir_first = true sort_dir_first = true
linemode = "size" sort_translit = false
linemode = "none"
show_hidden = false show_hidden = false
show_symlink = true show_symlink = true
scrolloff = 5 scrolloff = 5
mouse_events = [ "click", "scroll" ]
title_format = "Yazi: {cwd}"
[preview] [preview]
tab_size = 4 wrap = "no"
max_width = 900 tab_size = 2
max_width = 600
max_height = 900 max_height = 900
cache_dir = "" cache_dir = ""
image_delay = 30
image_filter = "triangle" image_filter = "triangle"
image_quality = 75 image_quality = 75
sixel_fraction = 15 sixel_fraction = 15
@ -26,116 +31,132 @@ ueberzug_offset = [ 0, 0, 0, 0 ]
[opener] [opener]
edit = [ edit = [
{ exec = '${EDITOR:=nvim} "$@"', desc = "$EDITOR", block = true, for = "unix" }, { run = '${EDITOR:-vi} "$@"', desc = "$EDITOR", block = true, for = "unix" },
{ exec = 'code "%*"', orphan = true, for = "windows" }, { run = 'code %*', orphan = true, desc = "code", for = "windows" },
{ run = 'code -w %*', block = true, desc = "code (block)", for = "windows" },
] ]
open = [ open = [
{ exec = 'xdg-open "$@"', desc = "Open", for = "linux" }, { run = 'xdg-open "$1"', desc = "Open", for = "linux" },
{ exec = 'open "$@"', desc = "Open", for = "macos" }, { run = 'open "$@"', desc = "Open", for = "macos" },
{ exec = 'start "" "%1"', orphan = true, desc = "Open", for = "windows" } { run = 'start "" "%1"', orphan = true, desc = "Open", for = "windows" },
] ]
reveal = [ reveal = [
{ exec = 'open -R "$1"', desc = "Reveal", for = "macos" }, { run = 'xdg-open "$(dirname "$1")"', desc = "Reveal", for = "linux" },
{ exec = 'explorer /select, "%1"', orphan = true, desc = "Reveal", for = "windows" }, { run = 'open -R "$1"', desc = "Reveal", for = "macos" },
{ exec = '''exiftool "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show EXIF", for = "unix" }, { run = 'explorer /select,"%1"', orphan = true, desc = "Reveal", for = "windows" },
{ run = '''exiftool "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show EXIF", for = "unix" },
] ]
extract = [ extract = [
{ exec = 'unar "$1"', desc = "Extract here", for = "unix" }, { run = 'ya pub extract --list "$@"', desc = "Extract here", for = "unix" },
{ exec = 'unar "%1"', desc = "Extract here", for = "windows" }, { run = 'ya pub extract --list %*', desc = "Extract here", for = "windows" },
] ]
play = [ play = [
{ exec = 'mpv "$@"', orphan = true, for = "unix" }, { run = 'mpv --force-window "$@"', orphan = true, for = "unix" },
{ exec = 'mpv "%1"', orphan = true, for = "windows" }, { run = 'mpv --force-window %*', orphan = true, for = "windows" },
{ exec = '''mediainfo "$1"; echo "Press enter to exit"; read''', block = true, desc = "Show media info", for = "unix" }, { run = '''mediainfo "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show media info", for = "unix" },
] ]
imv = [ { exec = 'imv "$@"', orphan = true, for = "unix"} ]
zathura = [ { exec = 'zathura "$@"', orphan = true, for = "unix"} ]
[open] [open]
rules = [ rules = [
# Folder
{ name = "*/", use = [ "edit", "open", "reveal" ] }, { name = "*/", use = [ "edit", "open", "reveal" ] },
# Text
{ mime = "text/*", use = [ "edit", "reveal" ] }, { mime = "text/*", use = [ "edit", "reveal" ] },
{ mime = "image/vnd.djvu", use = [ "zathura" ] }, # Image
{ mime = "image/vnd.djvu+multipage", use = [ "zathura" ] }, { mime = "image/*", use = [ "open", "reveal" ] },
{ mime = "image/*", use = [ "imv" ] }, # Media
{ mime = "video/*", use = [ "play", "reveal" ] }, { mime = "{audio,video}/*", use = [ "play", "reveal" ] },
{ mime = "audio/*", use = [ "play", "reveal" ] }, # Archive
{ mime = "inode/x-empty", use = [ "edit", "reveal" ] }, { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", use = [ "extract", "reveal" ] },
# JSON
{ mime = "application/json", use = [ "edit", "reveal" ] }, { mime = "application/{json,ndjson}", use = [ "edit", "reveal" ] },
{ mime = "application/pdf", use = [ "zathura" ] },
{ mime = "*/javascript", use = [ "edit", "reveal" ] }, { mime = "*/javascript", use = [ "edit", "reveal" ] },
# Empty file
{ mime = "application/zip", use = [ "extract", "reveal" ] }, { mime = "inode/empty", use = [ "edit", "reveal" ] },
{ mime = "application/gzip", use = [ "extract", "reveal" ] }, # Fallback
{ mime = "application/x-tar", use = [ "extract", "reveal" ] }, { name = "*", use = [ "open", "reveal" ] },
{ mime = "application/x-bzip", use = [ "extract", "reveal" ] },
{ mime = "application/x-bzip2", use = [ "extract", "reveal" ] },
{ mime = "application/x-7z-compressed", use = [ "extract", "reveal" ] },
{ mime = "application/x-rar", use = [ "extract", "reveal" ] },
{ mime = "application/xz", use = [ "extract", "reveal" ] },
{ mime = "*", use = [ "open", "reveal" ] },
] ]
[tasks] [tasks]
micro_workers = 20 micro_workers = 10
macro_workers = 40 macro_workers = 10
bizarre_retry = 5 bizarre_retry = 3
image_alloc = 536870912 # 512MB image_alloc = 536870912 # 512MB
image_bound = [ 0, 0 ] image_bound = [ 0, 0 ]
suppress_preload = false suppress_preload = false
[plugin] [plugin]
preloaders = [ fetchers = [
{ name = "*", cond = "!mime", exec = "mime", multi = true, prio = "high" }, # Mimetype
{ id = "mime", name = "*", run = "mime", if = "!mime", prio = "high" },
]
spotters = [
{ name = "*/", run = "folder" },
# Code
{ mime = "text/*", run = "code" },
{ mime = "*/{xml,javascript,wine-extension-ini}", run = "code" },
# Image # Image
{ mime = "image/vnd.djvu", exec = "noop" }, { mime = "image/{avif,hei?,jxl,svg+xml}", run = "magick" },
{ mime = "image/*", exec = "image" }, { mime = "image/*", run = "image" },
# Video # Video
{ mime = "video/*", exec = "video" }, { mime = "video/*", run = "video" },
# Fallback
{ name = "*", run = "file" },
]
preloaders = [
# Image
{ mime = "image/{avif,hei?,jxl,svg+xml}", run = "magick" },
{ mime = "image/*", run = "image" },
# Video
{ mime = "video/*", run = "video" },
# PDF # PDF
{ mime = "application/pdf", exec = "pdf" }, { mime = "application/pdf", run = "pdf" },
# Font
{ mime = "font/*", run = "font" },
{ mime = "application/ms-opentype", run = "font" },
] ]
previewers = [ previewers = [
{ name = "*/", exec = "folder", sync = true }, { name = "*/", run = "folder", sync = true },
# Code # Code
{ mime = "text/*", exec = "code" }, { mime = "text/*", run = "code" },
{ mime = "*/xml", exec = "code" }, { mime = "*/{xml,javascript,wine-extension-ini}", run = "code" },
{ mime = "*/javascript", exec = "code" },
{ mime = "*/x-wine-extension-ini", exec = "code" },
# JSON # JSON
{ mime = "application/json", exec = "json" }, { mime = "application/{json,ndjson}", run = "json" },
# Image # Image
{ mime = "image/vnd.djvu", exec = "noop" }, { mime = "image/{avif,hei?,jxl,svg+xml}", run = "magick" },
{ mime = "image/*", exec = "image" }, { mime = "image/*", run = "image" },
# Video # Video
{ mime = "video/*", exec = "video" }, { mime = "video/*", run = "video" },
# PDF # PDF
{ mime = "application/pdf", exec = "pdf" }, { mime = "application/pdf", run = "pdf" },
# Archive # Archive
{ mime = "application/zip", exec = "archive" }, { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", run = "archive" },
{ mime = "application/gzip", exec = "archive" }, { mime = "application/{debian*-package,redhat-package-manager,rpm,android.package-archive}", run = "archive" },
{ mime = "application/x-tar", exec = "archive" }, { name = "*.{AppImage,appimage}", run = "archive" },
{ mime = "application/x-bzip", exec = "archive" }, # Virtual Disk / Disk Image
{ mime = "application/x-bzip2", exec = "archive" }, { mime = "application/{iso9660-image,qemu-disk,ms-wim,apple-diskimage}", run = "archive" },
{ mime = "application/x-7z-compressed", exec = "archive" }, { mime = "application/virtualbox-{vhd,vhdx}", run = "archive" },
{ mime = "application/x-rar", exec = "archive" }, { name = "*.{img,fat,ext,ext2,ext3,ext4,squashfs,ntfs,hfs,hfsx}", run = "archive" },
{ mime = "application/xz", exec = "archive" }, # Font
{ mime = "font/*", run = "font" },
{ mime = "application/ms-opentype", run = "font" },
# Empty file
{ mime = "inode/empty", run = "empty" },
# Fallback # Fallback
{ name = "*", exec = "file" }, { name = "*", run = "file" },
] ]
[input] [input]
cursor_blink = false
# cd # cd
cd_title = "Change directory:" cd_title = "Change directory:"
cd_origin = "top-center" cd_origin = "top-center"
cd_offset = [ 0, 2, 50, 3 ] cd_offset = [ 0, 2, 50, 3 ]
# create # create
create_title = "Create:" create_title = [ "Create:", "Create (dir):" ]
create_origin = "top-center" create_origin = "top-center"
create_offset = [ 0, 2, 50, 3 ] create_offset = [ 0, 2, 50, 3 ]
@ -144,16 +165,6 @@ rename_title = "Rename:"
rename_origin = "hovered" rename_origin = "hovered"
rename_offset = [ 0, 1, 50, 3 ] rename_offset = [ 0, 1, 50, 3 ]
# trash
trash_title = "Move {n} selected file{s} to trash? (y/N)"
trash_origin = "top-center"
trash_offset = [ 0, 2, 50, 3 ]
# delete
delete_title = "Delete {n} selected file{s} permanently? (y/N)"
delete_origin = "top-center"
delete_offset = [ 0, 2, 50, 3 ]
# filter # filter
filter_title = "Filter:" filter_title = "Filter:"
filter_origin = "top-center" filter_origin = "top-center"
@ -174,17 +185,30 @@ shell_title = [ "Shell:", "Shell (block):" ]
shell_origin = "top-center" shell_origin = "top-center"
shell_offset = [ 0, 2, 50, 3 ] shell_offset = [ 0, 2, 50, 3 ]
[confirm]
# trash
trash_title = "Trash {n} selected file{s}?"
trash_origin = "center"
trash_offset = [ 0, 0, 70, 20 ]
# delete
delete_title = "Permanently delete {n} selected file{s}?"
delete_origin = "center"
delete_offset = [ 0, 0, 70, 20 ]
# overwrite # overwrite
overwrite_title = "Overwrite an existing file? (y/N)" overwrite_title = "Overwrite file?"
overwrite_origin = "top-center" overwrite_content = "Will overwrite the following file:"
overwrite_offset = [ 0, 2, 50, 3 ] overwrite_origin = "center"
overwrite_offset = [ 0, 0, 50, 15 ]
# quit # quit
quit_title = "{n} task{s} running, sure to quit? (y/N)" quit_title = "Quit?"
quit_origin = "top-center" quit_content = "The following task is still running, are you sure you want to quit?"
quit_offset = [ 0, 2, 50, 3 ] quit_origin = "center"
quit_offset = [ 0, 0, 50, 15 ]
[select] [pick]
open_title = "Open with:" open_title = "Open with:"
open_origin = "hovered" open_origin = "hovered"
open_offset = [ 0, 1, 50, 7 ] open_offset = [ 0, 1, 50, 7 ]
@ -193,6 +217,4 @@ open_offset = [ 0, 1, 50, 7 ]
sort_by = "none" sort_by = "none"
sort_sensitive = false sort_sensitive = false
sort_reverse = false sort_reverse = false
sort_translit = false
[log]
enabled = false

View file

@ -1,5 +1,3 @@
abbr -g "aur"="sudo aura"
abbr -g "aura"="sudo aura"
abbr -g "cat"="bat" abbr -g "cat"="bat"
abbr -g "neo"="nvim +'Telescope oldfiles'" abbr -g "neo"="nvim +'Telescope oldfiles'"
abbr -g "mann"="nvim +'Telescope man_pages'" abbr -g "mann"="nvim +'Telescope man_pages'"

View file

@ -84,3 +84,10 @@
[rebase] [rebase]
updateRefs = true updateRefs = true
[init]
defaultBranch = master
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process

20
.mbsyncrc Normal file
View file

@ -0,0 +1,20 @@
IMAPStore bonsai-remote
Host mail.bonsai.cool
Port 993
User brk@bonsai.cool
PassCmd "gopass show -o bonsai/mail"
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
MaildirStore bonsai-local
Path ~/mail/bonsai/
Inbox ~/mail/bonsai/INBOX
Subfolders Verbatim
Channel bonsai
Far :bonsai-remote:
Near :bonsai-local:
Create Both
Expunge Both
Patterns % !Archive
SyncState *

27
.zshrc
View file

@ -95,6 +95,7 @@ compdef _directories md
# Define aliases. # Define aliases.
alias tree='tree -a -I .git' alias tree='tree -a -I .git'
alias ls='exa -1 --icons=always --group-directories-first' alias ls='exa -1 --icons=always --group-directories-first'
alias pacman='aura'
# Add flags to existing aliases. # Add flags to existing aliases.
# Set shell options: http://zsh.sourceforge.net/Doc/Release/Options.html. # Set shell options: http://zsh.sourceforge.net/Doc/Release/Options.html.
@ -109,11 +110,23 @@ autoload -Uz compinit
zstyle ':completion:*' menu select zstyle ':completion:*' menu select
fpath+=~/.zfunc fpath+=~/.zfunc
kat=" # kat="
l、 # l、
(゚、 。 # (゚、 。
l ~ヽ_ # l ~ヽ_
じしf_,) # じしf_,)
" # "
#
# printf $kat
eval "$(zoxide init zsh --cmd cd)"
echo $kat # bun completions
[ -s "/home/brk/.bun/_bun" ] && source "/home/brk/.bun/_bun"
# bun
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
if uwsm check may-start && uwsm select; then
exec uwsm start default
fi

69
bin/1337x Executable file
View file

@ -0,0 +1,69 @@
#!/usr/bin/bash
# 1337x.to, if this domain is blocked for you try to use 1377x.to or 1337xx.to.
clear
mkdir -p $HOME/.cache/1337x
query=$*
baseurl="https://1337x.to"
cachedir="$HOME/.cache/1337x"
query="$(sed 's/ /+/g' <<<$query)"
# This is where default database can be chaned ie. Television, Movies, Music etc.
# See https://1337x.to/ for a list of query strings.
# curl -s https://www.1377x.to/category-search/$query/TV/1/ > $cachedir/tmp.html
# curl -s https://www.1377x.to/category-search/$query/Music/1/ > $cachedir/tmp.html
curl -s https://1337x.to/category-search/$query/Movies/1/ > $cachedir/tmp.html
# Get Titles
grep -o '<a href="/torrent/.*</a>' $cachedir/tmp.html |
sed 's/<[^>]*>//g' > $cachedir/titles.bw
result_count=$(wc -l $cachedir/titles.bw | awk '{print $1}')
if [ "$result_count" -lt 1 ]; then
notify-send "No Result found. Please try diffrent query."
exit 0
fi
# Seeders and Leechers
grep -o '<td class="coll-2 seeds.*</td>\|<td class="coll-3 leeches.*</td>' $cachedir/tmp.html |
sed 's/<[^>]*>//g' | sed 'N;s/\n/ /' > $cachedir/seedleech.bw
# Size
grep -o '<td class="coll-4 size.*</td>' $cachedir/tmp.html |
sed 's/<span class="seeds">.*<\/span>//g' |
sed -e 's/<[^>]*>//g' > $cachedir/size.bw
# Links
grep -E '/torrent/' $cachedir/tmp.html |
sed -E 's#.*(/torrent/.*)/">.*/#\1#' |
sed 's/td>//g' > $cachedir/links.bw
# Clearning up some data to display.
sed 's/\./ /g; s/\-/ /g' $cachedir/titles.bw |
sed 's/[^A-Za-z0-9 ]//g' | tr -s " " > $cachedir/tmp && mv $cachedir/tmp $cachedir/titles.bw
awk '{print NR " - ["$0"]"}' $cachedir/size.bw > $cachedir/tmp && mv $cachedir/tmp $cachedir/size.bw
awk '{print "[S:"$1 ", L:"$2"]" }' $cachedir/seedleech.bw > $cachedir/tmp && mv $cachedir/tmp $cachedir/seedleech.bw
# Getting the line number.
LINE=$(paste -d\ $cachedir/size.bw $cachedir/seedleech.bw $cachedir/titles.bw |
fzf -i |
cut -d\- -f1 |
awk '{$1=$1; print}')
url=$(head -n $LINE $cachedir/links.bw 2> /dev/null | tail -n +$LINE 2> /dev/null)
fullURL="${baseurl}${url}/"
# Requesting page for magnet link.
curl -s $fullURL > $cachedir/tmp.html
magnet=$(grep -Po "magnet:\?xt=urn:btih:[a-zA-Z0-9]*" $cachedir/tmp.html | head -n 1 2> /dev/null)
if [[ $magnet == '' ]]; then
exit 0
fi
# Default username:password passed by default.
transmission-remote -n transmission:transmission --add "$magnet" && notify-send "Torrent added to queue."

BIN
bin/bin/ghostty Executable file

Binary file not shown.

1
bin/die Executable file
View file

@ -0,0 +1 @@
doas poweroff

7
bin/fix-hyprland Executable file
View file

@ -0,0 +1,7 @@
#!/usr/bin/env bash
sleep 1
killall -9 -e xdg-desktop-portal-hyprland
killall -9 xdg-desktop-portal
/usr/lib/xdg-desktop-portal-hyprland &
sleep 1
/usr/lib/xdg-desktop-portal &

30
bin/msmtp-queue Executable file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env bash
##--------------------------------------------------------------
##
## msmtp-queue : wrapper script for msmtpq
## to expose the management functions
## for the msmtp queue
## Copyright (C) 2011 Chris Gianniotis
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or, at
## your option, any later version.
##
##--------------------------------------------------------------
## msmtp-queue
## is only a wrapper
## it invokes the queue management functions of msmtpq
## by calling it as msmtpq --q-mgmt
##
## all configuration and documentation is in the msmtpq script
## note that for 'special circumstances'
## e.g. embedded systems, etc.
## where the msmtpq script itself is not on the path
## change the below line to be
## exec /path/to/msmtpq --q-mgmt
exec msmtpq --q-mgmt "$1"

486
bin/msmtpq Executable file
View file

@ -0,0 +1,486 @@
#!/usr/bin/env bash
##--------------------------------------------------------------
##
## msmtpq : queue funtions to both use & manage the msmtp queue,
## as it was defined by Martin Lambers
## Copyright (C) 2008, 2009, 2010, 2011 Chris Gianniotis
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or, at
## your option, any later version.
##
##--------------------------------------------------------------
## msmtpq is meant to be used by an email client - in 'sendmail' mode
## for this purpose, it is invoked directly as 'msmtpq'
## it is also meant to be used to maintain the msmtp queue
## evoked by the wrapper script 'msmtp-queue'
## (which calls this script as msmtpq --q-mgmt)
## there is a queue log file, distinct from the msmtp log,
## for all events & operations on the msmtp queue
## that is defined below
## (mutt users, using msmtpq in 'sendmail' mode,
## should make at least the following two settings in their .muttrc
## set sendmail = /path/to/msmtpq
## set sendmail_wait = -1
##
## please see the msmtp man page and docs for further mutt settings
## and optimisations
## )
## msmtpq now uses the following environment variables :
## EMAIL_CONN_NOTEST if set will suppress any testing for a connection
## EMAIL_CONN_TEST if unset or =p will use a ping test (debian.org) for a connection
## if =P will use a fast ping test (8.8.8.8) for a connection
## if =n will use netcat (nc) to test for a connection
## if =s will use bash sockets to test for a connection
## EMAIL_QUEUE_QUIET if set will cause suppression of messages and 'chatter'
## two essential patches by Philipp Hartwig
## 19 Oct 2011 & 27 Oct 2011
##--------------------------------------------------------------
## the msmtp queue contains unique filenames of the following form :
## two files for each mail in the queue
##
## creates new unique filenames of the form :
## MLF: ccyy-mm-dd-hh.mm.ss[-x].mail -- mail file
## MSF: ccyy-mm-dd-hh.mm.ss[-x].msmtp -- msmtp command line file
## where x is a consecutive number only appended for uniqueness
## if more than one mail per second is sent
##--------------------------------------------------------------
dsp() { local L ; for L ; do [ -n "$L" ] && echo " $L" || echo ; done ; }
err() { dsp '' "$@" '' ; exit 1 ; }
## ======================================================================================
## !!! please define or confirm the following three vars !!!
## !!! before using the msmtpq or msmtp-queue scripts !!!
## ======================================================================================
##
## only if necessary (in unusual circumstances - e.g. embedded systems),
## enter the location of the msmtp executable (no quotes !!)
## e.g. ( MSMTP=/path/to/msmtp )
MSMTP=msmtp
#[ -x "$MSMTP" ] || \
# log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]" # if not found - complain ; quit
##
## set the queue var to the location of the msmtp queue directory
## if the queue dir doesn't yet exist, better to create it (0700)
## before using this routine
## e.g. ( mkdir msmtp.queue )
## ( chmod 0700 msmtp.queue )
##
## the queue dir - modify this to reflect where you'd like it to be (no quotes !!)
Q=~/.msmtp.queue
[ -d "$Q" ] || \
err '' "msmtpq : can't find msmtp queue directory [ $Q ]" '' # if not present - complain ; quit
##
## set the queue log file var to the location of the msmtp queue log file
## where it is or where you'd like it to be
## ( note that the LOG setting could be the same as the )
## ( 'logfile' setting in .msmtprc - but there may be )
## ( some advantage in keeping the two logs separate )
## if you don't want the log at all unset (comment out) this var
## LOG=~/log/msmtp.queue.log --> #LOG=~/log/msmtp.queue.log
## (doing so would be inadvisable under most conditions, however)
##
## the queue log file - modify (or comment out) to taste (but no quotes !!)
LOG=~/log/msmtp.queue.log
## ======================================================================================
umask 077 # set secure permissions on created directories and files
declare -i CNT # a count of mail(s) currently in the queue
declare -a Q_LST # queue list array ; used selecting a mail (to send or remove)
## do ; test this !
#for sig in INT TERM EXIT; do
# trap "rm -f \"\$TMPFILE\"; [[ $sig == EXIT ]] || kill -$sig $$" $sig
#done
trap on_exit INT TERM EXIT # run 'on_exit' on exit
on_exit() {
[ -n "$LKD" ] && lock_queue -u 2>/dev/null # unlock the queue on exit if the lock was set here
}
#
## ----------------------------------- common functions
#
## make an entry to the queue log file, possibly an error
## (log queue changes only ; not interactive chatter)
## usage : log [ -e errcode ] msg [ msg ... ]
## opts : -e <exit code> an error ; log msg & terminate w/prejudice
## display msg to user, as well
log() {
local ARG RC PFX="$('date' +'%Y %d %b %H:%M:%S')"
# time stamp prefix - "2008 13 Mar 03:59:45 "
if [ "$1" = '-e' ] ; then # there's an error exit code
RC="$2" # take it
shift 2 # shift opt & its arg off
fi
[ -z "$EMAIL_QUEUE_QUIET" ] && dsp "$@" # display msg to user, as well as logging it
if [ -n "$LOG" ] ; then # log is defined and in use
for ARG ; do # each msg line out
[ -n "$ARG" ] && \
echo "$PFX : $ARG" >> "$LOG" # line has content ; send it to log
done
fi
if [ -n "$RC" ] ; then # an error ; leave w/error return
[ -n "$LKD" ] && lock_queue -u # unlock here (if locked)
[ -n "$LOG" ] && \
echo " exit code = $RC" >> "$LOG" # logging ok ; send exit code to log
exit $RC # exit w/return code
fi
}
## write/remove queue lockfile for a queue op
lock_queue() { # <-- '-u' to remove lockfile
local LOK="${Q}/.lock" # lock file name
local -i MAX=240 SEC=0 # max seconds to gain a lock ; seconds waiting
if [ -z "$1" ] ; then # lock queue
## Philipp Hartwig patch #2
'mkdir' "$LOK" 2>/dev/null && LKD='t'
while [ -z "$LKD" ] && (( SEC < MAX )) ; do # lock file present
sleep 1 # wait a second
(( ++SEC )) # accumulate seconds
'mkdir' "$LOK" 2>/dev/null && LKD='t' # make lockdir ; lock queue ; set flag
done # try again while locked for MAX secs
[ -z "$LKD" ] && \
err '' "cannot use queue $Q : waited $MAX seconds for"\
" lockdir [ $LOK ] to vanish ; giving up"\
'if you are certain that no other instance of this script'\
" is running, then 'rmdir' the lock dir manually" '' # lock file still there, give up
elif [ "$1" = '-u' ] ; then # unlock queue
'rmdir' "$LOK" # remove the lock
unset LKD # unset flag
fi
}
## test whether system is connected
## returns t/f (0/1)
connect_test() {
if [ -z "$EMAIL_CONN_TEST" ] || \
[ "$EMAIL_CONN_TEST" = 'p' ] ; then # use ping test (default)
# verify net connection - ping ip address of debian.org
# would ping -qnc2 -w4 be better ?
# would ping -qnc1 -w10 or -w20 be better ?
ping -qnc1 -w4 debian.org >/dev/null 2>&1 || return 1
elif [ "$EMAIL_CONN_TEST" = 'P' ] ; then # use quicker ping test
# I personally think that including a DNS lookup
# is a better connection test but some
# have found the above test too slow
ping -qnc1 -w4 8.8.8.8 >/dev/null 2>&1 || return 1
elif [ "$EMAIL_CONN_TEST" = 'n' ] ; then # use netcat (nc) test
# must, of course, have netcat (nc) installed
which nc >/dev/null 2>&1 || \
log -e 1 "msmtpq : can't find netcat executable [ nc ]" # if not found - complain ; quit
'nc' -vz www.debian.org 80 || return 1
elif [ "$EMAIL_CONN_TEST" = 's' ] ; then # use sh sockets test
# note that this does not work on debian systems
# where bash opened sockets are suppressed for security reasons
# this should be ok for single user systems (including embedded systems)
# test whether this is supported on your system before using
exec 3<>/dev/udp/debian.org/80 || return 1 # open socket on site ; use dns
exec 3<&- ; exec 3>&- # close socket
fi
return 0
}
#
## ----------------------------------- functions for queue management
## ----------------------------------- queue maintenance mode - (msmtp-queue)
#
## show queue maintenance functions
usage() { # <-- error msg
dsp ''\
'usage : msmtp-queue functions' ''\
' msmtp-queue < op >'\
' ops : -r run (flush) mail queue - all mail in queue'\
' -R send selected individual mail(s) in queue'\
' -d display (list) queue contents (<-- default)'\
' -p purge individual mail(s) from queue'\
' -a purge all mail in queue'\
' -h this helpful blurt' ''\
' ( one op only ; any others ignored )' ''
[ -z "$1" ] && exit 0 || { dsp "$@" '' ; exit 1 ; }
}
## get user [y/n] acknowledgement
ok() {
local R YN='Y/n' # default to yes
[ "$1" = '-n' ] && \
{ YN='y/N' ; shift ; } # default to no ; change prompt ; shift off spec
dsp "$@"
while true ; do
echo -n " ok [${YN}] ..: "
read R
case $R in
y|Y) return 0 ;;
n|N) return 1 ;;
'') [ "$YN" = 'Y/n' ] && return 0 || return 1 ;;
*) echo 'yYnN<cr> only please' ;;
esac
done
}
## send a queued mail out via msmtp
send_queued_mail() { # <-- mail id
local FQP="${Q}/${1}" # fully qualified path name
local -i RC=0 # for msmtp exit code
if [ -f "${FQP}.msmtp" ] ; then # corresponding .msmtp file found
[ -z "$EMAIL_CONN_NOTEST" ] && { # connection test
connect_test || \
log "mail [ $2 ] [ $1 ] from queue ; couldn't be sent - host not connected"
}
if $MSMTP $(< "${FQP}.msmtp") < "${FQP}.mail" ; then # this mail goes out the door
log "mail [ $2 ] [ $1 ] from queue ; send was successful ; purged from queue" # good news to user
'rm' -f ${FQP}.* # nuke both queue mail files
ALT='t' # set queue changed flag
else # send was unsuccessful
RC=$? # take msmtp exit code
log "mail [ $2 ] [ $1 ] from queue ; send failed ; msmtp rc = $RC" # bad news ...
fi
return $RC # func returns exit code
else # corresponding MSF file not found
log "preparing to send .mail file [ $1 ] [ ${FQP}.mail ] but"\
" corresponding .msmtp file [ ${FQP}.msmtp ] was not found in queue"\
' skipping this mail ; this is worth looking into' # give user the bad news
fi # (but allow continuation)
}
## run (flush) queue
run_queue() { # <- 'sm' mode # run queue
local M LST="$('ls' $Q/*.mail 2>/dev/null)" # list of mails in queue
local -i NDX=0
if [ -n "$LST" ] ; then # something in queue
for M in $LST ; do # process all mails
((NDX++))
send_queued_mail "$(basename $M .mail)" "$NDX" # send mail - pass {id} only
done
else # queue is empty
[ -z "$1" ] && \
dsp '' 'mail queue is empty (nothing to send)' ''
fi # inform user (if not running in sendmail mode)
}
## display queue contents
display_queue() { # <-- { 'purge' | 'send' } (op label) ; { 'rec' } (record array of mail ids)
local M ID LST="$('ls' ${Q}/*.mail 2>/dev/null)" # list of mail ids in queue
CNT=0
if [ -n "$LST" ] ; then # list has contents (any mails in queue)
for M in $LST ; do # cycle through each
ID="$(basename $M .mail)" # take mail id from filename
((CNT++))
dsp '' "mail num=[ $CNT ] id=[ $ID ]" # show mail id ## patch in
'egrep' -s --colour -h '(^From:|^To:|^Subject:)' "$M" # show mail info
[ -n "$2" ] && Q_LST[$CNT]="$ID" # bang mail id into array (note 1-based array indexing)
done
echo
else # no mails ; no contents
[ -z "$1" ] && \
dsp '' 'no mail in queue' '' || \
dsp '' "mail queue is empty (nothing to $1)" '' # inform user
exit 0
fi
}
## delete all mail in queue, after confirmation
purge_queue() {
display_queue 'purge' # show queue contents
if ok -n 'remove (purge) all mail from the queue' ; then
lock_queue # lock here
'rm' -f "$Q"/*.*
log 'msmtp queue purged (all mail)'
lock_queue -u # unlock here
else
dsp '' 'nothing done ; queue is untouched' ''
fi
}
## select a single mail from queue ; delete it or send it
## select by mail index (position in queue) or mail id
select_mail() { # <-- < 'purge' | 'send' >
local OK ID # mail id
local -i I NDX # mail index (position in queue)
while true ; do # purge an individual mail from queue
display_queue "$1" 'rec' # show queue contents ; make mail ids array
## allow selection also by mail index
if [ $CNT -eq 1 ] ; then # only one mail in queue ; take its id
NDX=1
ID="${Q_LST[1]}"
else # more than one mail ; select its id
while true ; do # get mail id
OK='t' # optimistic to a fault
dsp "enter mail number or id to $1" # <-- num or file name (only, no suff)
echo -n ' ( <cr> alone to exit ) ..: '
read ID
[ -n "$ID" ] || return # entry made - or say good bye
if [ "${ID:4:1}" != '-' ] ; then # mail id *not* entered ; test index num
for (( I=0 ; I<${#ID} ; I++ )) ; do # test index number
if [[ "${ID:${I}:1}" < '0' || \
"${ID:${I}:1}" > '9' ]] ; then
dsp '' "[ $ID ] is neither a valid mail id"\
'nor a valid mail number' ''
unset OK
fi
done
[ -z "$OK" ] && continue # format not ok (not all nums)
NDX=$ID
if [ $NDX -lt 1 ] || [ $NDX -gt $CNT ] ; then # test number range (1 - $CNT)
dsp '' "[ $NDX ] is out of range as a mail number"\
"validity is from 1 to $CNT"
continue # try again
fi
ID="${Q_LST[$NDX]}" # format & range were ok ; use it
break # valid mail selection
else # mail id entered
for (( NDX=1 ; NDX<=${#Q_LST[*]} ; NDX++ )) ; do # find entered id in queue list
[ "$ID" = "${Q_LST[$NDX]}" ] && break
done
[ $NDX -le ${#Q_LST[*]} ] && \
break || \
dsp '' "mail [ $ID ] not found ; invalid id" # mail selection valid (found) or
fi # fell through (not found) complain
done # and ask again
fi
if ok '' "$1 :"\
" mail num=[ $NDX ]"\
" id=[ $ID ]" '' ; then # confirm mail op
if [ "$1" = 'purge' ] ; then # purging
lock_queue # lock here
'rm' -f "$Q"/"$ID".* # msmtp - nukes single mail (both files) in queue
log "mail [ $ID ] purged from queue" # log op
lock_queue -u # unlock here
ALT='t' # mark that a queue alteration has taken place
else # sending
lock_queue # lock here
send_queued_mail "$ID" "$NDX" # send out the mail
lock_queue -u # unlock here
fi
else # user opts out
dsp '' 'nothing done to this queued email' # soothe user
[ $CNT -eq 1 ] && break # single mail ; user opted out
fi
dsp '' "--------------------------------------------------"
done
if [ -n "$ALT" ] ; then # queue was changed
dsp '' 'done' ''
else # queue is untouched
dsp '' 'nothing done ; queue is untouched' ''
fi
}
#
## ----------------------------------- functions for directly sending mail
## ----------------------------------- 'sendmail' mode - (msmtpq)
#
## ('sendmail' mode only)
## make base filename id for queue
make_id() {
local -i INC # increment counter for (possible) base fqp name collision
ID="$(date +%Y-%m-%d-%H.%M.%S)" # make filename id for queue (global
FQP="${Q}/$ID" # make fully qualified pathname vars)
## Philipp Hartwig patch #1
if [ -f "${FQP}.mail" -o -f "${FQP}.msmtp" ] ; then # ensure fqp name is unique
INC=1 # initial increment
while [ -f "${FQP}-${INC}.mail" -o -f "${FQP}-${INC}.msmtp" ] ; do # fqp name w/incr exists
(( ++INC )) # bump increment
done
ID="${ID}-${INC}" # unique ; set id
FQP="${FQP}-${INC}" # unique ; set fqp name
fi
}
## ('sendmail' mode only)
## enqueue a mail
enqueue_mail() { # <-- all mail args ; mail text via TMP
if echo "$@" > "${FQP}.msmtp" ; then # write msmtp command line to queue .msmtp file
log "enqueued mail as : [ $ID ] ( $* ) : successful" # (queue .mail file is already there)
else # write failed ; bomb
log -e "$?" "queueing - writing msmtp cmd line { $* }"\
" to [ ${ID}.msmtp ] : failed"
fi
}
## ('sendmail' mode only)
## send a mail (if possible, otherwise enqueue it)
## if send is successful, msmtp will also log it (if enabled in ~/.msmtprc)
send_mail() { # <-- all mail args ; mail text via TMP
[ -z "$EMAIL_CONN_NOTEST" ] && { # connection test
connect_test || {
log "mail for [ $* ] : couldn't be sent - host not connected"
enqueue_mail "$@" # enqueue the mail
}
}
if $MSMTP "$@" < "${FQP}.mail" > /dev/null ; then # send mail using queue .mail fil
log "mail for [ $* ] : send was successful" # log it
'rm' -f ${FQP}.* # remove all queue mail files .mail & .msmtp file
run_queue 'sm' # run/flush any other mails in queue
else # send failed - the mail stays in the queue
log "mail for [ $* ] : send was unsuccessful ; msmtp exit code was $?"\
"enqueued mail as : [ $ID ] ( $* )" # (queue .mail file is already there)
fi
}
#
## -- entry point
#
if [ ! "$1" = '--q-mgmt' ] ; then # msmtpq - sendmail mode
lock_queue # lock here
make_id # make base queue filename id for this mail
# write mail body text to queue .mail file
cat > "${FQP}.mail" || \
log -e "$?" "creating mail body file [ ${FQP}.mail ] : failed" # test for error
# write msmtp command line to queue .msmtp file
echo "$@" > "${FQP}.msmtp" || \
log -e "$?" "creating msmtp cmd line file { $* }"\
" to [ ${ID}.msmtp ] : failed" # test for error
send_mail "$@" # send the mail if possible, queue it if not
lock_queue -u # unlock here
else # msmtp-queue - queue management mode
shift # trim off first (--q-mgmt) arg
OP=${1:1} # trim off first char of OP arg
case "$OP" in # sort ops ; run according to spec
r) lock_queue
run_queue
lock_queue -u ;; # run (flush) the queue
R) select_mail send ;; # send individual mail(s) in queue
d|'') display_queue ;; # display (list) all mail in queue (default)
p) select_mail purge ;; # purge individual mail(s) from queue
a) purge_queue ;; # purge all mail in queue
h) usage ;; # show help
*) usage "[ -$OP ] is an unknown msmtp-queue option" ;;
esac
fi
exit 0

8
bin/secret.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
gopass show -o "$1" "$2"
# wait until the password is available
while [ $? != 0 ]; do
gopass show -o "$1" "$2"
done

View file

@ -0,0 +1,16 @@
[Desktop Entry]
Name=Ghostty
Type=Application
Comment=A terminal emulator
Exec=ghostty
Icon=com.mitchellh.ghostty
Categories=System;TerminalEmulator;
Keywords=terminal;tty;pty;
StartupNotify=true
Terminal=false
Actions=new-window;
X-GNOME-UsesNotifications=true
[Desktop Action new-window]
Name=New Window
Exec=ghostty

View file

@ -0,0 +1,440 @@
# -o nospace requires we add back a space when a completion is finished
# and not part of a --key= completion
addSpaces() {
for idx in "${!COMPREPLY[@]}"; do
[ -n "${COMPREPLY[idx]}" ] && COMPREPLY[idx]="${COMPREPLY[idx]} ";
done
}
_fonts() {
local IFS=$'\n'
mapfile -t COMPREPLY < <( compgen -P '"' -S '"' -W "$($ghostty +list-fonts | grep '^[A-Z]' )" -- "$cur")
}
_themes() {
local IFS=$'\n'
mapfile -t COMPREPLY < <( compgen -P '"' -S '"' -W "$($ghostty +list-themes | sed -E 's/^(.*) \(.*$/\1/')" -- "$cur")
}
_files() {
mapfile -t COMPREPLY < <( compgen -o filenames -f -- "$cur" )
for i in "${!COMPREPLY[@]}"; do
if [[ -d "${COMPREPLY[i]}" ]]; then
COMPREPLY[i]="${COMPREPLY[i]}/";
fi
if [[ -f "${COMPREPLY[i]}" ]]; then
COMPREPLY[i]="${COMPREPLY[i]} ";
fi
done
}
_dirs() {
mapfile -t COMPREPLY < <( compgen -o dirnames -d -- "$cur" )
for i in "${!COMPREPLY[@]}"; do
if [[ -d "${COMPREPLY[i]}" ]]; then
COMPREPLY[i]="${COMPREPLY[i]}/";
fi
done
if [[ "${#COMPREPLY[@]}" == 0 && -d "$cur" ]]; then
COMPREPLY=( "$cur " )
fi
}
config="--help"
config+=" --version"
config+=" --font-family="
config+=" --font-family-bold="
config+=" --font-family-italic="
config+=" --font-family-bold-italic="
config+=" --font-style="
config+=" --font-style-bold="
config+=" --font-style-italic="
config+=" --font-style-bold-italic="
config+=" --font-synthetic-style="
config+=" --font-feature="
config+=" --font-size="
config+=" --font-variation="
config+=" --font-variation-bold="
config+=" --font-variation-italic="
config+=" --font-variation-bold-italic="
config+=" --font-codepoint-map="
config+=" '--font-thicken '"
config+=" --adjust-cell-width="
config+=" --adjust-cell-height="
config+=" --adjust-font-baseline="
config+=" --adjust-underline-position="
config+=" --adjust-underline-thickness="
config+=" --adjust-strikethrough-position="
config+=" --adjust-strikethrough-thickness="
config+=" --adjust-overline-position="
config+=" --adjust-overline-thickness="
config+=" --adjust-cursor-thickness="
config+=" --adjust-box-thickness="
config+=" --grapheme-width-method="
config+=" --freetype-load-flags="
config+=" --theme="
config+=" --background="
config+=" --foreground="
config+=" --selection-foreground="
config+=" --selection-background="
config+=" '--selection-invert-fg-bg '"
config+=" --minimum-contrast="
config+=" --palette="
config+=" --cursor-color="
config+=" '--cursor-invert-fg-bg '"
config+=" --cursor-opacity="
config+=" --cursor-style="
config+=" '--cursor-style-blink '"
config+=" --cursor-text="
config+=" '--cursor-click-to-move '"
config+=" '--mouse-hide-while-typing '"
config+=" --mouse-shift-capture="
config+=" --mouse-scroll-multiplier="
config+=" --background-opacity="
config+=" --background-blur-radius="
config+=" --unfocused-split-opacity="
config+=" --unfocused-split-fill="
config+=" --command="
config+=" --initial-command="
config+=" '--wait-after-command '"
config+=" --abnormal-command-exit-runtime="
config+=" --scrollback-limit="
config+=" --link="
config+=" '--link-url '"
config+=" '--fullscreen '"
config+=" --title="
config+=" --class="
config+=" --x11-instance-name="
config+=" --working-directory="
config+=" --keybind="
config+=" --window-padding-x="
config+=" --window-padding-y="
config+=" '--window-padding-balance '"
config+=" --window-padding-color="
config+=" '--window-vsync '"
config+=" '--window-inherit-working-directory '"
config+=" '--window-inherit-font-size '"
config+=" '--window-decoration '"
config+=" --window-title-font-family="
config+=" --window-theme="
config+=" --window-colorspace="
config+=" --window-height="
config+=" --window-width="
config+=" --window-save-state="
config+=" '--window-step-resize '"
config+=" --window-new-tab-position="
config+=" --resize-overlay="
config+=" --resize-overlay-position="
config+=" --resize-overlay-duration="
config+=" '--focus-follows-mouse '"
config+=" --clipboard-read="
config+=" --clipboard-write="
config+=" '--clipboard-trim-trailing-spaces '"
config+=" '--clipboard-paste-protection '"
config+=" '--clipboard-paste-bracketed-safe '"
config+=" --image-storage-limit="
config+=" --copy-on-select="
config+=" --click-repeat-interval="
config+=" --config-file="
config+=" '--config-default-files '"
config+=" '--confirm-close-surface '"
config+=" '--quit-after-last-window-closed '"
config+=" --quit-after-last-window-closed-delay="
config+=" '--initial-window '"
config+=" --quick-terminal-position="
config+=" --quick-terminal-screen="
config+=" --quick-terminal-animation-duration="
config+=" --shell-integration="
config+=" --shell-integration-features="
config+=" --osc-color-report-format="
config+=" '--vt-kam-allowed '"
config+=" --custom-shader="
config+=" --custom-shader-animation="
config+=" --macos-non-native-fullscreen="
config+=" --macos-titlebar-style="
config+=" --macos-titlebar-proxy-icon="
config+=" --macos-option-as-alt="
config+=" '--macos-window-shadow '"
config+=" '--macos-auto-secure-input '"
config+=" '--macos-secure-input-indication '"
config+=" --linux-cgroup="
config+=" --linux-cgroup-memory-limit="
config+=" --linux-cgroup-processes-limit="
config+=" '--linux-cgroup-hard-fail '"
config+=" --gtk-single-instance="
config+=" '--gtk-titlebar '"
config+=" --gtk-tabs-location="
config+=" --adw-toolbar-style="
config+=" '--gtk-wide-tabs '"
config+=" '--gtk-adwaita '"
config+=" '--desktop-notifications '"
config+=" '--bold-is-bright '"
config+=" --term="
config+=" --enquiry-response="
config+=" --auto-update="
config+=" --auto-update-channel="
_handleConfig() {
case "$prev" in
--font-family) _fonts ;;
--font-family-bold) _fonts ;;
--font-family-italic) _fonts ;;
--font-family-bold-italic) _fonts ;;
--font-style) return ;;
--font-style-bold) return ;;
--font-style-italic) return ;;
--font-style-bold-italic) return ;;
--font-synthetic-style) mapfile -t COMPREPLY < <( compgen -W "bold no-bold italic no-italic bold-italic no-bold-italic" -- "$cur" ); addSpaces ;;
--font-feature) return ;;
--font-size) return ;;
--font-variation) return ;;
--font-variation-bold) return ;;
--font-variation-italic) return ;;
--font-variation-bold-italic) return ;;
--font-codepoint-map) return ;;
--font-thicken) return ;;
--adjust-cell-width) return ;;
--adjust-cell-height) return ;;
--adjust-font-baseline) return ;;
--adjust-underline-position) return ;;
--adjust-underline-thickness) return ;;
--adjust-strikethrough-position) return ;;
--adjust-strikethrough-thickness) return ;;
--adjust-overline-position) return ;;
--adjust-overline-thickness) return ;;
--adjust-cursor-thickness) return ;;
--adjust-box-thickness) return ;;
--grapheme-width-method) mapfile -t COMPREPLY < <( compgen -W "legacy unicode" -- "$cur" ); addSpaces ;;
--freetype-load-flags) mapfile -t COMPREPLY < <( compgen -W "hinting no-hinting force-autohint no-force-autohint monochrome no-monochrome autohint no-autohint" -- "$cur" ); addSpaces ;;
--theme) _themes ;;
--background) return ;;
--foreground) return ;;
--selection-foreground) return ;;
--selection-background) return ;;
--selection-invert-fg-bg) return ;;
--minimum-contrast) return ;;
--palette) return ;;
--cursor-color) return ;;
--cursor-invert-fg-bg) return ;;
--cursor-opacity) return ;;
--cursor-style) mapfile -t COMPREPLY < <( compgen -W "bar block underline block_hollow" -- "$cur" ); addSpaces ;;
--cursor-style-blink) return ;;
--cursor-text) return ;;
--cursor-click-to-move) return ;;
--mouse-hide-while-typing) return ;;
--mouse-shift-capture) mapfile -t COMPREPLY < <( compgen -W "false true always never" -- "$cur" ); addSpaces ;;
--mouse-scroll-multiplier) return ;;
--background-opacity) return ;;
--background-blur-radius) return ;;
--unfocused-split-opacity) return ;;
--unfocused-split-fill) return ;;
--command) return ;;
--initial-command) return ;;
--wait-after-command) return ;;
--abnormal-command-exit-runtime) return ;;
--scrollback-limit) return ;;
--link) return ;;
--link-url) return ;;
--fullscreen) return ;;
--title) return ;;
--class) return ;;
--x11-instance-name) return ;;
--working-directory) _dirs ;;
--keybind) return ;;
--window-padding-x) return ;;
--window-padding-y) return ;;
--window-padding-balance) return ;;
--window-padding-color) mapfile -t COMPREPLY < <( compgen -W "background extend extend-always" -- "$cur" ); addSpaces ;;
--window-vsync) return ;;
--window-inherit-working-directory) return ;;
--window-inherit-font-size) return ;;
--window-decoration) return ;;
--window-title-font-family) return ;;
--window-theme) mapfile -t COMPREPLY < <( compgen -W "auto system light dark ghostty" -- "$cur" ); addSpaces ;;
--window-colorspace) mapfile -t COMPREPLY < <( compgen -W "srgb display-p3" -- "$cur" ); addSpaces ;;
--window-height) return ;;
--window-width) return ;;
--window-save-state) mapfile -t COMPREPLY < <( compgen -W "default never always" -- "$cur" ); addSpaces ;;
--window-step-resize) return ;;
--window-new-tab-position) mapfile -t COMPREPLY < <( compgen -W "current end" -- "$cur" ); addSpaces ;;
--resize-overlay) mapfile -t COMPREPLY < <( compgen -W "always never after-first" -- "$cur" ); addSpaces ;;
--resize-overlay-position) mapfile -t COMPREPLY < <( compgen -W "center top-left top-center top-right bottom-left bottom-center bottom-right" -- "$cur" ); addSpaces ;;
--resize-overlay-duration) return ;;
--focus-follows-mouse) return ;;
--clipboard-read) mapfile -t COMPREPLY < <( compgen -W "allow deny ask" -- "$cur" ); addSpaces ;;
--clipboard-write) mapfile -t COMPREPLY < <( compgen -W "allow deny ask" -- "$cur" ); addSpaces ;;
--clipboard-trim-trailing-spaces) return ;;
--clipboard-paste-protection) return ;;
--clipboard-paste-bracketed-safe) return ;;
--image-storage-limit) return ;;
--copy-on-select) mapfile -t COMPREPLY < <( compgen -W "false true clipboard" -- "$cur" ); addSpaces ;;
--click-repeat-interval) return ;;
--config-file) _files ;;
--config-default-files) return ;;
--confirm-close-surface) return ;;
--quit-after-last-window-closed) return ;;
--quit-after-last-window-closed-delay) return ;;
--initial-window) return ;;
--quick-terminal-position) mapfile -t COMPREPLY < <( compgen -W "top bottom left right" -- "$cur" ); addSpaces ;;
--quick-terminal-screen) mapfile -t COMPREPLY < <( compgen -W "main mouse macos-menu-bar" -- "$cur" ); addSpaces ;;
--quick-terminal-animation-duration) return ;;
--shell-integration) mapfile -t COMPREPLY < <( compgen -W "none detect bash elvish fish zsh" -- "$cur" ); addSpaces ;;
--shell-integration-features) mapfile -t COMPREPLY < <( compgen -W "cursor no-cursor sudo no-sudo title no-title" -- "$cur" ); addSpaces ;;
--osc-color-report-format) mapfile -t COMPREPLY < <( compgen -W "none 8-bit 16-bit" -- "$cur" ); addSpaces ;;
--vt-kam-allowed) return ;;
--custom-shader) _files ;;
--custom-shader-animation) mapfile -t COMPREPLY < <( compgen -W "false true always" -- "$cur" ); addSpaces ;;
--macos-non-native-fullscreen) mapfile -t COMPREPLY < <( compgen -W "false true visible-menu" -- "$cur" ); addSpaces ;;
--macos-titlebar-style) mapfile -t COMPREPLY < <( compgen -W "native transparent tabs hidden" -- "$cur" ); addSpaces ;;
--macos-titlebar-proxy-icon) mapfile -t COMPREPLY < <( compgen -W "visible hidden" -- "$cur" ); addSpaces ;;
--macos-option-as-alt) return ;;
--macos-window-shadow) return ;;
--macos-auto-secure-input) return ;;
--macos-secure-input-indication) return ;;
--linux-cgroup) mapfile -t COMPREPLY < <( compgen -W "never always single-instance" -- "$cur" ); addSpaces ;;
--linux-cgroup-memory-limit) return ;;
--linux-cgroup-processes-limit) return ;;
--linux-cgroup-hard-fail) return ;;
--gtk-single-instance) mapfile -t COMPREPLY < <( compgen -W "desktop false true" -- "$cur" ); addSpaces ;;
--gtk-titlebar) return ;;
--gtk-tabs-location) mapfile -t COMPREPLY < <( compgen -W "top bottom left right hidden" -- "$cur" ); addSpaces ;;
--adw-toolbar-style) mapfile -t COMPREPLY < <( compgen -W "flat raised raised-border" -- "$cur" ); addSpaces ;;
--gtk-wide-tabs) return ;;
--gtk-adwaita) return ;;
--desktop-notifications) return ;;
--bold-is-bright) return ;;
--term) return ;;
--enquiry-response) return ;;
--auto-update) mapfile -t COMPREPLY < <( compgen -W "off check download" -- "$cur" ); addSpaces ;;
--auto-update-channel) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$config" -- "$cur" ) ;;
esac
return 0
}
list_fonts="--family= --style= '--bold ' '--italic ' --help"
list_keybinds="'--default ' '--docs ' '--plain ' --help"
list_themes="'--path ' '--plain ' --help"
list_actions="'--docs ' --help"
show_config="'--default ' '--changes-only ' '--docs ' --help"
validate_config="--config-file= --help"
_handleActions() {
case "${COMP_WORDS[1]}" in
+list-fonts)
case $prev in
--family) return;;
--style) return;;
--bold) return ;;
--italic) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$list_fonts" -- "$cur" ) ;;
esac
;;
+list-keybinds)
case $prev in
--default) return ;;
--docs) return ;;
--plain) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$list_keybinds" -- "$cur" ) ;;
esac
;;
+list-themes)
case $prev in
--path) return ;;
--plain) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$list_themes" -- "$cur" ) ;;
esac
;;
+list-actions)
case $prev in
--docs) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$list_actions" -- "$cur" ) ;;
esac
;;
+show-config)
case $prev in
--default) return ;;
--changes-only) return ;;
--docs) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$show_config" -- "$cur" ) ;;
esac
;;
+validate-config)
case $prev in
--config-file) return ;;
*) mapfile -t COMPREPLY < <( compgen -W "$validate_config" -- "$cur" ) ;;
esac
;;
*) mapfile -t COMPREPLY < <( compgen -W "--help" -- "$cur" ) ;;
esac
return 0
}
topLevel="-e"
topLevel+=" --help"
topLevel+=" --version"
topLevel+=" +list-fonts"
topLevel+=" +list-keybinds"
topLevel+=" +list-themes"
topLevel+=" +list-colors"
topLevel+=" +list-actions"
topLevel+=" +show-config"
topLevel+=" +validate-config"
topLevel+=" +crash-report"
_ghostty() {
cur=""; prev=""; prevWasEq=false; COMPREPLY=()
ghostty="$1"
# script assumes default COMP_WORDBREAKS of roughly $' \t\n"\'><=;|&(:'
# if = is missing this script will degrade to matching on keys only.
# eg: --key=
# this can be improved if needed see: https://github.com/ghostty-org/ghostty/discussions/2994
if [ "$2" = "=" ]; then cur=""
else cur="$2"
fi
if [ "$3" = "=" ]; then prev="${COMP_WORDS[COMP_CWORD-2]}"; prevWasEq=true;
else prev="${COMP_WORDS[COMP_CWORD-1]}"
fi
# current completion is double quoted add a space so the curor progresses
if [[ "$2" == \"*\" ]]; then
COMPREPLY=( "$cur " );
return;
fi
case "$COMP_CWORD" in
1)
case "${COMP_WORDS[1]}" in
-e | --help | --version) return 0 ;;
--*) _handleConfig ;;
*) mapfile -t COMPREPLY < <( compgen -W "${topLevel}" -- "$cur" ); addSpaces ;;
esac
;;
*)
case "$prev" in
-e | --help | --version) return 0 ;;
*)
if [[ "=" != "${COMP_WORDS[COMP_CWORD]}" && $prevWasEq != true ]]; then
# must be completing with a space after the key eg: '--<key> '
# clear out prev so we don't run any of the key specific completions
prev=""
fi
case "${COMP_WORDS[1]}" in
--*) _handleConfig ;;
+*) _handleActions ;;
esac
;;
esac
;;
esac
return 0
}
complete -o nospace -o bashdefault -F _ghostty ghostty

View file

@ -0,0 +1,17 @@
%YAML 1.2
---
# See http://www.sublimetext.com/docs/syntax.html
name: Ghostty Config
file_extensions:
- ghostty
scope: source.ghostty
contexts:
main:
# Comments
- match: '^\s*#.*$'
scope: comment.line.number-sign.ghostty
# Keywords
- match: '\b(font-family|font-family-bold|font-family-italic|font-family-bold-italic|font-style|font-style-bold|font-style-italic|font-style-bold-italic|font-synthetic-style|font-feature|font-size|font-variation|font-variation-bold|font-variation-italic|font-variation-bold-italic|font-codepoint-map|font-thicken|adjust-cell-width|adjust-cell-height|adjust-font-baseline|adjust-underline-position|adjust-underline-thickness|adjust-strikethrough-position|adjust-strikethrough-thickness|adjust-overline-position|adjust-overline-thickness|adjust-cursor-thickness|adjust-box-thickness|grapheme-width-method|freetype-load-flags|theme|background|foreground|selection-foreground|selection-background|selection-invert-fg-bg|minimum-contrast|palette|cursor-color|cursor-invert-fg-bg|cursor-opacity|cursor-style|cursor-style-blink|cursor-text|cursor-click-to-move|mouse-hide-while-typing|mouse-shift-capture|mouse-scroll-multiplier|background-opacity|background-blur-radius|unfocused-split-opacity|unfocused-split-fill|command|initial-command|wait-after-command|abnormal-command-exit-runtime|scrollback-limit|link|link-url|fullscreen|title|class|x11-instance-name|working-directory|keybind|window-padding-x|window-padding-y|window-padding-balance|window-padding-color|window-vsync|window-inherit-working-directory|window-inherit-font-size|window-decoration|window-title-font-family|window-theme|window-colorspace|window-height|window-width|window-save-state|window-step-resize|window-new-tab-position|resize-overlay|resize-overlay-position|resize-overlay-duration|focus-follows-mouse|clipboard-read|clipboard-write|clipboard-trim-trailing-spaces|clipboard-paste-protection|clipboard-paste-bracketed-safe|image-storage-limit|copy-on-select|click-repeat-interval|config-file|config-default-files|confirm-close-surface|quit-after-last-window-closed|quit-after-last-window-closed-delay|initial-window|quick-terminal-position|quick-terminal-screen|quick-terminal-animation-duration|shell-integration|shell-integration-features|osc-color-report-format|vt-kam-allowed|custom-shader|custom-shader-animation|macos-non-native-fullscreen|macos-titlebar-style|macos-titlebar-proxy-icon|macos-option-as-alt|macos-window-shadow|macos-auto-secure-input|macos-secure-input-indication|linux-cgroup|linux-cgroup-memory-limit|linux-cgroup-processes-limit|linux-cgroup-hard-fail|gtk-single-instance|gtk-titlebar|gtk-tabs-location|adw-toolbar-style|gtk-wide-tabs|gtk-adwaita|desktop-notifications|bold-is-bright|term|enquiry-response|auto-update|auto-update-channel)\b'
scope: keyword.other.ghostty

View file

@ -0,0 +1,150 @@
set -l commands "+list-fonts +list-keybinds +list-themes +list-colors +list-actions +show-config +validate-config +crash-report"
complete -c ghostty -f
complete -c ghostty -s e -l help -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l version -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-family -r -f -a "(ghostty +list-fonts | grep '^[A-Z]')"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-family-bold -r -f -a "(ghostty +list-fonts | grep '^[A-Z]')"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-family-italic -r -f -a "(ghostty +list-fonts | grep '^[A-Z]')"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-family-bold-italic -r -f -a "(ghostty +list-fonts | grep '^[A-Z]')"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-style -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-style-bold -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-style-italic -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-style-bold-italic -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-synthetic-style -r -f -a "bold no-bold italic no-italic bold-italic no-bold-italic"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-feature -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-size -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-variation -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-variation-bold -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-variation-italic -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-variation-bold-italic -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-codepoint-map -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l font-thicken -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-cell-width -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-cell-height -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-font-baseline -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-underline-position -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-underline-thickness -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-strikethrough-position -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-strikethrough-thickness -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-overline-position -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-overline-thickness -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-cursor-thickness -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adjust-box-thickness -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l grapheme-width-method -r -f -a "legacy unicode"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l freetype-load-flags -r -f -a "hinting no-hinting force-autohint no-force-autohint monochrome no-monochrome autohint no-autohint"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l theme -r -f -a "(ghostty +list-themes | sed -E 's/^(.*) \(.*\$/\1/')"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l background -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l foreground -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l selection-foreground -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l selection-background -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l selection-invert-fg-bg -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l minimum-contrast -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l palette -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-color -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-invert-fg-bg -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-opacity -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-style -r -f -a "bar block underline block_hollow"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-style-blink -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-text -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l cursor-click-to-move -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l mouse-hide-while-typing -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l mouse-shift-capture -r -f -a "false true always never"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l mouse-scroll-multiplier -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l background-opacity -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l background-blur-radius -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l unfocused-split-opacity -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l unfocused-split-fill -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l command -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l initial-command -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l wait-after-command -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l abnormal-command-exit-runtime -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l scrollback-limit -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l link -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l link-url -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l fullscreen -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l title -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l class -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l x11-instance-name -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l working-directory -r -f -k -a "(__fish_complete_directories)"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l keybind -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-padding-x -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-padding-y -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-padding-balance -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-padding-color -r -f -a "background extend extend-always"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-vsync -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-inherit-working-directory -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-inherit-font-size -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-decoration -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-title-font-family -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-theme -r -f -a "auto system light dark ghostty"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-colorspace -r -f -a "srgb display-p3"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-height -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-width -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-save-state -r -f -a "default never always"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-step-resize -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l window-new-tab-position -r -f -a "current end"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l resize-overlay -r -f -a "always never after-first"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l resize-overlay-position -r -f -a "center top-left top-center top-right bottom-left bottom-center bottom-right"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l resize-overlay-duration -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l focus-follows-mouse -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l clipboard-read -r -f -a "allow deny ask"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l clipboard-write -r -f -a "allow deny ask"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l clipboard-trim-trailing-spaces -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l clipboard-paste-protection -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l clipboard-paste-bracketed-safe -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l image-storage-limit -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l copy-on-select -r -f -a "false true clipboard"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l click-repeat-interval -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l config-file -r -F
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l config-default-files -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l confirm-close-surface -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l quit-after-last-window-closed -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l quit-after-last-window-closed-delay -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l initial-window -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l quick-terminal-position -r -f -a "top bottom left right"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l quick-terminal-screen -r -f -a "main mouse macos-menu-bar"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l quick-terminal-animation-duration -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l shell-integration -r -f -a "none detect bash elvish fish zsh"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l shell-integration-features -r -f -a "cursor no-cursor sudo no-sudo title no-title"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l osc-color-report-format -r -f -a "none 8-bit 16-bit"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l vt-kam-allowed -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l custom-shader -r -F
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l custom-shader-animation -r -f -a "false true always"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-non-native-fullscreen -r -f -a "false true visible-menu"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-titlebar-style -r -f -a "native transparent tabs hidden"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-titlebar-proxy-icon -r -f -a "visible hidden"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-option-as-alt -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-window-shadow -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-auto-secure-input -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l macos-secure-input-indication -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l linux-cgroup -r -f -a "never always single-instance"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l linux-cgroup-memory-limit -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l linux-cgroup-processes-limit -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l linux-cgroup-hard-fail -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l gtk-single-instance -r -f -a "desktop false true"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l gtk-titlebar -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l gtk-tabs-location -r -f -a "top bottom left right hidden"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l adw-toolbar-style -r -f -a "flat raised raised-border"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l gtk-wide-tabs -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l gtk-adwaita -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l desktop-notifications -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l bold-is-bright -f -a "true false"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l term -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l enquiry-response -r -f
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l auto-update -r -f -a "off check download"
complete -c ghostty -n "not __fish_seen_subcommand_from $commands" -l auto-update-channel -r -f
complete -c ghostty -n "string match -q -- '+*' (commandline -pt)" -f -a "+list-fonts +list-keybinds +list-themes +list-colors +list-actions +show-config +validate-config +crash-report"
complete -c ghostty -n "__fish_seen_subcommand_from +list-fonts" -l family -r -f
complete -c ghostty -n "__fish_seen_subcommand_from +list-fonts" -l style -r -f
complete -c ghostty -n "__fish_seen_subcommand_from +list-fonts" -l bold -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-fonts" -l italic -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-keybinds" -l default -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-keybinds" -l docs -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-keybinds" -l plain -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-themes" -l path -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-themes" -l plain -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +list-actions" -l docs -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +show-config" -l default -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +show-config" -l changes-only -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +show-config" -l docs -f -a "true false"
complete -c ghostty -n "__fish_seen_subcommand_from +validate-config" -l config-file -r -F

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,386 @@
# bash-preexec.sh -- Bash support for ZSH-like 'preexec' and 'precmd' functions.
# https://github.com/rcaloras/bash-preexec
#
#
# 'preexec' functions are executed before each interactive command is
# executed, with the interactive command as its argument. The 'precmd'
# function is executed before each prompt is displayed.
#
# Author: Ryan Caloras (ryan@bashhub.com)
# Forked from Original Author: Glyph Lefkowitz
#
# V0.5.0
#
# General Usage:
#
# 1. Source this file at the end of your bash profile so as not to interfere
# with anything else that's using PROMPT_COMMAND.
#
# 2. Add any precmd or preexec functions by appending them to their arrays:
# e.g.
# precmd_functions+=(my_precmd_function)
# precmd_functions+=(some_other_precmd_function)
#
# preexec_functions+=(my_preexec_function)
#
# 3. Consider changing anything using the DEBUG trap or PROMPT_COMMAND
# to use preexec and precmd instead. Preexisting usages will be
# preserved, but doing so manually may be less surprising.
#
# Note: This module requires two Bash features which you must not otherwise be
# using: the "DEBUG" trap, and the "PROMPT_COMMAND" variable. If you override
# either of these after bash-preexec has been installed it will most likely break.
# Tell shellcheck what kind of file this is.
# shellcheck shell=bash
# Make sure this is bash that's running and return otherwise.
# Use POSIX syntax for this line:
if [ -z "${BASH_VERSION-}" ]; then
return 1;
fi
# We only support Bash 3.1+.
# Note: BASH_VERSINFO is first available in Bash-2.0.
if [[ -z "${BASH_VERSINFO-}" ]] || (( BASH_VERSINFO[0] < 3 || (BASH_VERSINFO[0] == 3 && BASH_VERSINFO[1] < 1) )); then
return 1
fi
# Avoid duplicate inclusion
if [[ -n "${bash_preexec_imported:-}" || -n "${__bp_imported:-}" ]]; then
return 0
fi
bash_preexec_imported="defined"
# WARNING: This variable is no longer used and should not be relied upon.
# Use ${bash_preexec_imported} instead.
# shellcheck disable=SC2034
__bp_imported="${bash_preexec_imported}"
# Should be available to each precmd and preexec
# functions, should they want it. $? and $_ are available as $? and $_, but
# $PIPESTATUS is available only in a copy, $BP_PIPESTATUS.
# TODO: Figure out how to restore PIPESTATUS before each precmd or preexec
# function.
__bp_last_ret_value="$?"
BP_PIPESTATUS=("${PIPESTATUS[@]}")
__bp_last_argument_prev_command="$_"
__bp_inside_precmd=0
__bp_inside_preexec=0
# Initial PROMPT_COMMAND string that is removed from PROMPT_COMMAND post __bp_install
__bp_install_string=$'__bp_trap_string="$(trap -p DEBUG)"\ntrap - DEBUG\n__bp_install'
# Fails if any of the given variables are readonly
# Reference https://stackoverflow.com/a/4441178
__bp_require_not_readonly() {
local var
for var; do
if ! ( unset "$var" 2> /dev/null ); then
echo "bash-preexec requires write access to ${var}" >&2
return 1
fi
done
}
# Remove ignorespace and or replace ignoreboth from HISTCONTROL
# so we can accurately invoke preexec with a command from our
# history even if it starts with a space.
__bp_adjust_histcontrol() {
local histcontrol
histcontrol="${HISTCONTROL:-}"
histcontrol="${histcontrol//ignorespace}"
# Replace ignoreboth with ignoredups
if [[ "$histcontrol" == *"ignoreboth"* ]]; then
histcontrol="ignoredups:${histcontrol//ignoreboth}"
fi;
export HISTCONTROL="$histcontrol"
}
# This variable describes whether we are currently in "interactive mode";
# i.e. whether this shell has just executed a prompt and is waiting for user
# input. It documents whether the current command invoked by the trace hook is
# run interactively by the user; it's set immediately after the prompt hook,
# and unset as soon as the trace hook is run.
__bp_preexec_interactive_mode=""
# These arrays are used to add functions to be run before, or after, prompts.
declare -a precmd_functions
declare -a preexec_functions
# Trims leading and trailing whitespace from $2 and writes it to the variable
# name passed as $1
__bp_trim_whitespace() {
local var=${1:?} text=${2:-}
text="${text#"${text%%[![:space:]]*}"}" # remove leading whitespace characters
text="${text%"${text##*[![:space:]]}"}" # remove trailing whitespace characters
printf -v "$var" '%s' "$text"
}
# Trims whitespace and removes any leading or trailing semicolons from $2 and
# writes the resulting string to the variable name passed as $1. Used for
# manipulating substrings in PROMPT_COMMAND
__bp_sanitize_string() {
local var=${1:?} text=${2:-} sanitized
__bp_trim_whitespace sanitized "$text"
sanitized=${sanitized%;}
sanitized=${sanitized#;}
__bp_trim_whitespace sanitized "$sanitized"
printf -v "$var" '%s' "$sanitized"
}
# This function is installed as part of the PROMPT_COMMAND;
# It sets a variable to indicate that the prompt was just displayed,
# to allow the DEBUG trap to know that the next command is likely interactive.
__bp_interactive_mode() {
__bp_preexec_interactive_mode="on";
}
# This function is installed as part of the PROMPT_COMMAND.
# It will invoke any functions defined in the precmd_functions array.
__bp_precmd_invoke_cmd() {
# Save the returned value from our last command, and from each process in
# its pipeline. Note: this MUST be the first thing done in this function.
# BP_PIPESTATUS may be unused, ignore
# shellcheck disable=SC2034
__bp_last_ret_value="$?" BP_PIPESTATUS=("${PIPESTATUS[@]}")
# Don't invoke precmds if we are inside an execution of an "original
# prompt command" by another precmd execution loop. This avoids infinite
# recursion.
if (( __bp_inside_precmd > 0 )); then
return
fi
local __bp_inside_precmd=1
# Invoke every function defined in our function array.
local precmd_function
for precmd_function in "${precmd_functions[@]}"; do
# Only execute this function if it actually exists.
# Test existence of functions with: declare -[Ff]
if type -t "$precmd_function" 1>/dev/null; then
__bp_set_ret_value "$__bp_last_ret_value" "$__bp_last_argument_prev_command"
# Quote our function invocation to prevent issues with IFS
"$precmd_function"
fi
done
__bp_set_ret_value "$__bp_last_ret_value"
}
# Sets a return value in $?. We may want to get access to the $? variable in our
# precmd functions. This is available for instance in zsh. We can simulate it in bash
# by setting the value here.
__bp_set_ret_value() {
return ${1:+"$1"}
}
__bp_in_prompt_command() {
local prompt_command_array IFS=$'\n;'
read -rd '' -a prompt_command_array <<< "${PROMPT_COMMAND[*]:-}"
local trimmed_arg
__bp_trim_whitespace trimmed_arg "${1:-}"
local command trimmed_command
for command in "${prompt_command_array[@]:-}"; do
__bp_trim_whitespace trimmed_command "$command"
if [[ "$trimmed_command" == "$trimmed_arg" ]]; then
return 0
fi
done
return 1
}
# This function is installed as the DEBUG trap. It is invoked before each
# interactive prompt display. Its purpose is to inspect the current
# environment to attempt to detect if the current command is being invoked
# interactively, and invoke 'preexec' if so.
__bp_preexec_invoke_exec() {
# Save the contents of $_ so that it can be restored later on.
# https://stackoverflow.com/questions/40944532/bash-preserve-in-a-debug-trap#40944702
__bp_last_argument_prev_command="${1:-}"
# Don't invoke preexecs if we are inside of another preexec.
if (( __bp_inside_preexec > 0 )); then
return
fi
local __bp_inside_preexec=1
# Checks if the file descriptor is not standard out (i.e. '1')
# __bp_delay_install checks if we're in test. Needed for bats to run.
# Prevents preexec from being invoked for functions in PS1
if [[ ! -t 1 && -z "${__bp_delay_install:-}" ]]; then
return
fi
if [[ -n "${COMP_POINT:-}" || -n "${READLINE_POINT:-}" ]]; then
# We're in the middle of a completer or a keybinding set up by "bind
# -x". This obviously can't be an interactively issued command.
return
fi
if [[ -z "${__bp_preexec_interactive_mode:-}" ]]; then
# We're doing something related to displaying the prompt. Let the
# prompt set the title instead of me.
return
else
# If we're in a subshell, then the prompt won't be re-displayed to put
# us back into interactive mode, so let's not set the variable back.
# In other words, if you have a subshell like
# (sleep 1; sleep 2)
# You want to see the 'sleep 2' as a set_command_title as well.
if [[ 0 -eq "${BASH_SUBSHELL:-}" ]]; then
__bp_preexec_interactive_mode=""
fi
fi
if __bp_in_prompt_command "${BASH_COMMAND:-}"; then
# If we're executing something inside our prompt_command then we don't
# want to call preexec. Bash prior to 3.1 can't detect this at all :/
__bp_preexec_interactive_mode=""
return
fi
local this_command
this_command=$(
export LC_ALL=C
HISTTIMEFORMAT='' builtin history 1 | sed '1 s/^ *[0-9][0-9]*[* ] //'
)
# Sanity check to make sure we have something to invoke our function with.
if [[ -z "$this_command" ]]; then
return
fi
# Invoke every function defined in our function array.
local preexec_function
local preexec_function_ret_value
local preexec_ret_value=0
for preexec_function in "${preexec_functions[@]:-}"; do
# Only execute each function if it actually exists.
# Test existence of function with: declare -[fF]
if type -t "$preexec_function" 1>/dev/null; then
__bp_set_ret_value "${__bp_last_ret_value:-}"
# Quote our function invocation to prevent issues with IFS
"$preexec_function" "$this_command"
preexec_function_ret_value="$?"
if [[ "$preexec_function_ret_value" != 0 ]]; then
preexec_ret_value="$preexec_function_ret_value"
fi
fi
done
# Restore the last argument of the last executed command, and set the return
# value of the DEBUG trap to be the return code of the last preexec function
# to return an error.
# If `extdebug` is enabled a non-zero return value from any preexec function
# will cause the user's command not to execute.
# Run `shopt -s extdebug` to enable
__bp_set_ret_value "$preexec_ret_value" "$__bp_last_argument_prev_command"
}
__bp_install() {
# Exit if we already have this installed.
if [[ "${PROMPT_COMMAND[*]:-}" == *"__bp_precmd_invoke_cmd"* ]]; then
return 1;
fi
trap '__bp_preexec_invoke_exec "$_"' DEBUG
# Preserve any prior DEBUG trap as a preexec function
local prior_trap
# we can't easily do this with variable expansion. Leaving as sed command.
# shellcheck disable=SC2001
prior_trap=$(sed "s/[^']*'\(.*\)'[^']*/\1/" <<<"${__bp_trap_string:-}")
unset __bp_trap_string
if [[ -n "$prior_trap" ]]; then
eval '__bp_original_debug_trap() {
'"$prior_trap"'
}'
preexec_functions+=(__bp_original_debug_trap)
fi
# Adjust our HISTCONTROL Variable if needed.
#
# GHOSTTY: Don't modify HISTCONTROL. This hack is only needed to improve the
# accuracy of the command argument passed to the preexec functions, and we
# don't use that argument in our bash shell integration script (and nor does
# the __bp_original_debug_trap function above, which is the only other active
# preexec function).
#__bp_adjust_histcontrol
# Issue #25. Setting debug trap for subshells causes sessions to exit for
# backgrounded subshell commands (e.g. (pwd)& ). Believe this is a bug in Bash.
#
# Disabling this by default. It can be enabled by setting this variable.
if [[ -n "${__bp_enable_subshells:-}" ]]; then
# Set so debug trap will work be invoked in subshells.
set -o functrace > /dev/null 2>&1
shopt -s extdebug > /dev/null 2>&1
fi;
local existing_prompt_command
# Remove setting our trap install string and sanitize the existing prompt command string
existing_prompt_command="${PROMPT_COMMAND:-}"
# Edge case of appending to PROMPT_COMMAND
existing_prompt_command="${existing_prompt_command//$__bp_install_string/:}" # no-op
existing_prompt_command="${existing_prompt_command//$'\n':$'\n'/$'\n'}" # remove known-token only
existing_prompt_command="${existing_prompt_command//$'\n':;/$'\n'}" # remove known-token only
__bp_sanitize_string existing_prompt_command "$existing_prompt_command"
if [[ "${existing_prompt_command:-:}" == ":" ]]; then
existing_prompt_command=
fi
# Install our hooks in PROMPT_COMMAND to allow our trap to know when we've
# actually entered something.
PROMPT_COMMAND='__bp_precmd_invoke_cmd'
PROMPT_COMMAND+=${existing_prompt_command:+$'\n'$existing_prompt_command}
if (( BASH_VERSINFO[0] > 5 || (BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 1) )); then
PROMPT_COMMAND+=('__bp_interactive_mode')
else
# shellcheck disable=SC2179 # PROMPT_COMMAND is not an array in bash <= 5.0
PROMPT_COMMAND+=$'\n__bp_interactive_mode'
fi
# Add two functions to our arrays for convenience
# of definition.
precmd_functions+=(precmd)
preexec_functions+=(preexec)
# Invoke our two functions manually that were added to $PROMPT_COMMAND
__bp_precmd_invoke_cmd
__bp_interactive_mode
}
# Sets an installation string as part of our PROMPT_COMMAND to install
# after our session has started. This allows bash-preexec to be included
# at any point in our bash profile.
__bp_install_after_session_init() {
# bash-preexec needs to modify these variables in order to work correctly
# if it can't, just stop the installation
__bp_require_not_readonly PROMPT_COMMAND HISTCONTROL HISTTIMEFORMAT || return
local sanitized_prompt_command
__bp_sanitize_string sanitized_prompt_command "${PROMPT_COMMAND:-}"
if [[ -n "$sanitized_prompt_command" ]]; then
# shellcheck disable=SC2178 # PROMPT_COMMAND is not an array in bash <= 5.0
PROMPT_COMMAND=${sanitized_prompt_command}$'\n'
fi;
# shellcheck disable=SC2179 # PROMPT_COMMAND is not an array in bash <= 5.0
PROMPT_COMMAND+=${__bp_install_string}
}
# Run our install so long as we're not delaying it.
if [[ -z "${__bp_delay_install:-}" ]]; then
__bp_install_after_session_init
fi;

View file

@ -0,0 +1,176 @@
# This is originally based on the recommended bash integration from
# the semantic prompts proposal as well as some logic from Kitty's
# bash integration.
#
# I'm not a bash expert so this probably has some major issues but for
# my simple bash usage this is working. If a bash expert wants to
# improve this please do!
# We need to be in interactive mode and we need to have the Ghostty
# resources dir set which also tells us we're running in Ghostty.
if [[ "$-" != *i* ]] ; then builtin return; fi
if [ -z "$GHOSTTY_RESOURCES_DIR" ]; then builtin return; fi
# When automatic shell integration is active, we need to manually
# load the normal bash startup files based on the injected state.
if [ -n "$GHOSTTY_BASH_INJECT" ]; then
builtin declare ghostty_bash_inject="$GHOSTTY_BASH_INJECT"
builtin unset GHOSTTY_BASH_INJECT ENV
# At this point, we're in POSIX mode and rely on the injected
# flags to guide is through the rest of the startup sequence.
# POSIX mode was requested by the user so there's nothing
# more to do that optionally source their original $ENV.
# No other startup files are read, per the standard.
if [[ "$ghostty_bash_inject" == *"--posix"* ]]; then
if [ -n "$GHOSTTY_BASH_ENV" ]; then
builtin source "$GHOSTTY_BASH_ENV"
builtin export ENV="$GHOSTTY_BASH_ENV"
fi
else
# Restore bash's default 'posix' behavior. Also reset 'inherit_errexit',
# which doesn't happen as part of the 'posix' reset.
builtin set +o posix
builtin shopt -u inherit_errexit 2>/dev/null
# Unexport HISTFILE if it was set by the shell integration code.
if [[ -n "$GHOSTTY_BASH_UNEXPORT_HISTFILE" ]]; then
builtin export -n HISTFILE
builtin unset GHOSTTY_BASH_UNEXPORT_HISTFILE
fi
# Manually source the startup files, respecting the injected flags like
# --norc and --noprofile that we parsed with the shell integration code.
#
# See also: run_startup_files() in shell.c in the Bash source code
if builtin shopt -q login_shell; then
if [[ $ghostty_bash_inject != *"--noprofile"* ]]; then
[ -r /etc/profile ] && builtin source "/etc/profile"
for rcfile in "$HOME/.bash_profile" "$HOME/.bash_login" "$HOME/.profile"; do
[ -r "$rcfile" ] && { builtin source "$rcfile"; break; }
done
fi
else
if [[ $ghostty_bash_inject != *"--norc"* ]]; then
# The location of the system bashrc is determined at bash build
# time via -DSYS_BASHRC and can therefore vary across distros:
# Arch, Debian, Ubuntu use /etc/bash.bashrc
# Fedora uses /etc/bashrc sourced from ~/.bashrc instead of SYS_BASHRC
# Void Linux uses /etc/bash/bashrc
# Nixos uses /etc/bashrc
for rcfile in /etc/bash.bashrc /etc/bash/bashrc /etc/bashrc; do
[ -r "$rcfile" ] && { builtin source "$rcfile"; break; }
done
if [[ -z "$GHOSTTY_BASH_RCFILE" ]]; then GHOSTTY_BASH_RCFILE="$HOME/.bashrc"; fi
[ -r "$GHOSTTY_BASH_RCFILE" ] && builtin source "$GHOSTTY_BASH_RCFILE"
fi
fi
fi
builtin unset GHOSTTY_BASH_ENV GHOSTTY_BASH_RCFILE
builtin unset ghostty_bash_inject rcfile
fi
# Import bash-preexec, safe to do multiple times
builtin source "$GHOSTTY_RESOURCES_DIR/shell-integration/bash/bash-preexec.sh"
# This is set to 1 when we're executing a command so that we don't
# send prompt marks multiple times.
_ghostty_executing=""
_ghostty_last_reported_cwd=""
function __ghostty_get_current_command() {
builtin local last_cmd
# shellcheck disable=SC1007
last_cmd=$(HISTTIMEFORMAT= builtin history 1)
last_cmd="${last_cmd#*[[:digit:]]*[[:space:]]}" # remove leading history number
last_cmd="${last_cmd#"${last_cmd%%[![:space:]]*}"}" # remove remaining leading whitespace
builtin printf "\e]2;%s\a" "${last_cmd//[[:cntrl:]]}" # remove any control characters
}
function __ghostty_precmd() {
local ret="$?"
if test "$_ghostty_executing" != "0"; then
_GHOSTTY_SAVE_PS0="$PS0"
_GHOSTTY_SAVE_PS1="$PS1"
_GHOSTTY_SAVE_PS2="$PS2"
# Marks
PS1=$PS1'\[\e]133;B\a\]'
PS2=$PS2'\[\e]133;B\a\]'
# bash doesn't redraw the leading lines in a multiline prompt so
# mark the last line as a secondary prompt (k=s) to prevent the
# preceding lines from being erased by ghostty after a resize.
if [[ "${PS1}" == *"\n"* || "${PS1}" == *$'\n'* ]]; then
PS1=$PS1'\[\e]133;A;k=s\a\]'
fi
# Cursor
if test "$GHOSTTY_SHELL_INTEGRATION_NO_CURSOR" != "1"; then
PS1=$PS1'\[\e[5 q\]'
PS0=$PS0'\[\e[0 q\]'
fi
# Sudo
if [[ "$GHOSTTY_SHELL_INTEGRATION_NO_SUDO" != "1" ]] && [[ -n "$TERMINFO" ]]; then
# Wrap `sudo` command to ensure Ghostty terminfo is preserved
# shellcheck disable=SC2317
sudo() {
builtin local sudo_has_sudoedit_flags="no"
for arg in "$@"; do
# Check if argument is '-e' or '--edit' (sudoedit flags)
if [[ "$arg" == "-e" || $arg == "--edit" ]]; then
sudo_has_sudoedit_flags="yes"
builtin break
fi
# Check if argument is neither an option nor a key-value pair
if [[ "$arg" != -* && "$arg" != *=* ]]; then
builtin break
fi
done
if [[ "$sudo_has_sudoedit_flags" == "yes" ]]; then
builtin command sudo "$@";
else
builtin command sudo TERMINFO="$TERMINFO" "$@";
fi
}
fi
if [[ "$GHOSTTY_SHELL_INTEGRATION_NO_TITLE" != 1 ]]; then
# Command and working directory
# shellcheck disable=SC2016
PS0=$PS0'$(__ghostty_get_current_command)'
PS1=$PS1'\[\e]2;$PWD\a\]'
fi
fi
if test "$_ghostty_executing" != ""; then
# End of current command. Report its status.
builtin printf "\e]133;D;%s;aid=%s\a" "$ret" "$BASHPID"
fi
# unfortunately bash provides no hooks to detect cwd changes
# in particular this means cwd reporting will not happen for a
# command like cd /test && cat. PS0 is evaluated before cd is run.
if [[ "$_ghostty_last_reported_cwd" != "$PWD" ]]; then
_ghostty_last_reported_cwd="$PWD"
builtin printf "\e]7;kitty-shell-cwd://%s%s\a" "$HOSTNAME" "$PWD"
fi
# Fresh line and start of prompt.
builtin printf "\e]133;A;aid=%s\a" "$BASHPID"
_ghostty_executing=0
}
function __ghostty_preexec() {
PS0="$_GHOSTTY_SAVE_PS0"
PS1="$_GHOSTTY_SAVE_PS1"
PS2="$_GHOSTTY_SAVE_PS2"
builtin printf "\e]133;C;\a"
_ghostty_executing=1
}
preexec_functions+=(__ghostty_preexec)
precmd_functions+=(__ghostty_precmd)

View file

@ -0,0 +1,123 @@
{
fn restore-xdg-dirs {
use str
var integration-dir = $E:GHOSTTY_SHELL_INTEGRATION_XDG_DIR
var xdg-dirs = [(str:split ':' $E:XDG_DATA_DIRS)]
var len = (count $xdg-dirs)
var index = $nil
range $len | each {|dir-index|
if (eq $xdg-dirs[$dir-index] $integration-dir) {
set index = $dir-index
break
}
}
if (eq $nil $index) { return } # will appear as an error
if (== 0 $index) {
set xdg-dirs = $xdg-dirs[1..]
} elif (== (- $len 1) $index) {
set xdg-dirs = $xdg-dirs[0..(- $len 1)]
} else {
# no builtin function for this : )
set xdg-dirs = [ (take $index $xdg-dirs) (drop (+ 1 $index) $xdg-dirs) ]
}
if (== 0 (count $xdg-dirs)) {
unset-env XDG_DATA_DIRS
} else {
set-env XDG_DATA_DIRS (str:join ':' $xdg-dirs)
}
unset-env GHOSTTY_SHELL_INTEGRATION_XDG_DIR
}
if (and (has-env GHOSTTY_SHELL_INTEGRATION_XDG_DIR) (has-env XDG_DATA_DIRS)) {
restore-xdg-dirs
}
}
{
# helper used by `mark-*` functions
fn set-prompt-state {|new| set-env __ghostty_prompt_state $new }
fn mark-prompt-start {
if (not-eq prompt-start (constantly $E:__ghostty_prompt_state)) {
printf "\e]133;D\a"
}
set-prompt-state 'prompt-start'
printf "\e]133;A\a"
}
fn mark-output-start {|_|
set-prompt-state 'pre-exec'
printf "\e]133;C\a"
}
fn mark-output-end {|cmd-info|
set-prompt-state 'post-exec'
var exit-status = 0
# in case of error: retrieve exit status,
# unless does not exist (= builtin function failure), then default to 1
if (not-eq $nil $cmd-info[error]) {
set exit-status = 1
if (has-key $cmd-info[error] reason) {
if (has-key $cmd-info[error][reason] exit-status) {
set exit-status = $cmd-info[error][reason][exit-status]
}
}
}
printf "\e]133;D;"$exit-status"\a"
}
fn report-pwd {
printf "\e]7;file://%s%s\a" (hostname) (pwd)
}
fn sudo-with-terminfo {|@args|
var sudoedit = $false
for arg $args {
use str
if (str:has-prefix $arg -) {
if (has-value [e -edit] $arg[1..]) {
set sudoedit = $true
break
}
continue
}
if (not (has-value $arg =)) { break }
}
if (not $sudoedit) { set args = [ TERMINFO=$E:TERMINFO $@args ] }
command sudo $@args
}
defer {
mark-prompt-start
report-pwd
}
set edit:before-readline = (conj $edit:before-readline $mark-prompt-start~)
set edit:after-readline = (conj $edit:after-readline $mark-output-start~)
set edit:after-command = (conj $edit:after-command $mark-output-end~)
var no-title = (eq 1 $E:GHOSTTY_SHELL_INTEGRATION_NO_TITLE)
var no-cursor = (eq 1 $E:GHOSTTY_SHELL_INTEGRATION_NO_CURSOR)
var no-sudo = (eq 1 $E:GHOSTTY_SHELL_INTEGRATION_NO_SUDO)
if (not $no-title) {
set after-chdir = (conj $after-chdir {|_| report-pwd })
}
if (not $no-cursor) {
fn beam { printf "\e[5 q" }
fn block { printf "\e[0 q" }
set edit:before-readline = (conj $edit:before-readline $beam~)
set edit:after-readline = (conj $edit:after-readline {|_| block })
}
if (and (not $no-sudo) (not-eq "" $E:TERMINFO) (eq file (type -t sudo))) {
edit:add-var sudo~ $sudo-with-terminfo~
}
}

View file

@ -0,0 +1,135 @@
# This shell script aims to be written in a way where it can't really fail
# or all failure scenarios are handled, so that we never leave the shell in
# a weird state. If you find a way to break this, please report a bug!
function ghostty_restore_xdg_data_dir -d "restore the original XDG_DATA_DIR value"
# If we don't have our own data dir then we don't need to do anything.
if not set -q GHOSTTY_SHELL_INTEGRATION_XDG_DIR
return
end
# If the data dir isn't set at all then we don't need to do anything.
if not set -q XDG_DATA_DIRS
return
end
# We need to do this so that XDG_DATA_DIRS turns into an array.
set --function --path xdg_data_dirs "$XDG_DATA_DIRS"
# If our data dir is in the list then remove it.
if set --function index (contains --index "$GHOSTTY_SHELL_INTEGRATION_XDG_DIR" $xdg_data_dirs)
set --erase --function xdg_data_dirs[$index]
end
# Re-export our data dir
if set -q xdg_data_dirs[1]
set --global --export --unpath XDG_DATA_DIRS "$xdg_data_dirs"
else
set --erase --global XDG_DATA_DIRS
end
set --erase GHOSTTY_SHELL_INTEGRATION_XDG_DIR
end
function ghostty_exit -d "exit the shell integration setup"
functions -e ghostty_restore_xdg_data_dir
functions -e ghostty_exit
exit 0
end
# We always try to restore the XDG data dir
ghostty_restore_xdg_data_dir
# If we aren't interactive or we've already run, don't run.
status --is-interactive || ghostty_exit
# We do the full setup on the first prompt render. We do this so that other
# shell integrations that setup the prompt and modify things are able to run
# first. We want to run _last_.
function __ghostty_setup --on-event fish_prompt -d "Setup ghostty integration"
functions -e __ghostty_setup
# Check if we are setting cursors
set --local no_cursor "$GHOSTTY_SHELL_INTEGRATION_NO_CURSOR"
if test -z $no_cursor
# Change the cursor to a beam on prompt.
function __ghostty_set_cursor_beam --on-event fish_prompt -d "Set cursor shape"
echo -en "\e[5 q"
end
function __ghostty_reset_cursor --on-event fish_preexec -d "Reset cursor shape"
echo -en "\e[0 q"
end
end
# Check if we are setting sudo
set --local no_sudo "$GHOSTTY_SHELL_INTEGRATION_NO_SUDO"
# When using sudo shell integration feature, ensure $TERMINFO is set
# and `sudo` is not already a function or alias
if test -z $no_sudo
and test -n "$TERMINFO"; and test "file" = (type -t sudo 2> /dev/null; or echo "x")
# Wrap `sudo` command to ensure Ghostty terminfo is preserved
function sudo -d "Wrap sudo to preserve terminfo"
set --local sudo_has_sudoedit_flags "no"
for arg in $argv
# Check if argument is '-e' or '--edit' (sudoedit flags)
if string match -q -- "-e" "$arg"; or string match -q -- "--edit" "$arg"
set --local sudo_has_sudoedit_flags "yes"
break
end
# Check if argument is neither an option nor a key-value pair
if not string match -r -q -- "^-" "$arg"; and not string match -r -q -- "=" "$arg"
break
end
end
if test "$sudo_has_sudoedit_flags" = "yes"
command sudo $argv
else
command sudo TERMINFO="$TERMINFO" $argv
end
end
end
# Setup prompt marking
function __ghostty_mark_prompt_start --on-event fish_prompt --on-event fish_cancel --on-event fish_posterror
# If we never got the output end event, then we need to send it now.
if test "$__ghostty_prompt_state" != prompt-start
echo -en "\e]133;D\a"
end
set --global __ghostty_prompt_state prompt-start
echo -en "\e]133;A\a"
end
function __ghostty_mark_output_start --on-event fish_preexec
set --global __ghostty_prompt_state pre-exec
echo -en "\e]133;C\a"
end
function __ghostty_mark_output_end --on-event fish_postexec
set --global __ghostty_prompt_state post-exec
echo -en "\e]133;D;$status\a"
end
# Report pwd. This is actually built-in to fish but only for terminals
# that match an allowlist and that isn't us.
function __update_cwd_osc --on-variable PWD -d 'Notify capable terminals when $PWD changes'
if status --is-command-substitution || set -q INSIDE_EMACS
return
end
printf \e\]7\;file://%s%s\a $hostname (string escape --style=url $PWD)
end
# Enable fish to handle reflow because Ghostty clears the prompt on resize.
set --global fish_handle_reflow 1
# Initial calls for first prompt
if test -z $no_cursor
__ghostty_set_cursor_beam
end
__ghostty_mark_prompt_start
__update_cwd_osc
end
ghostty_exit

View file

@ -0,0 +1,60 @@
# Based on (started as) a copy of Kitty's zsh integration. Kitty is
# distributed under GPLv3, so this file is also distributed under GPLv3.
# The license header is reproduced below:
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This file can get sourced with aliases enabled. To avoid alias expansion
# we quote everything that can be quoted. Some aliases will still break us
# though.
# Restore the original ZDOTDIR value.
if [[ -n "${GHOSTTY_ZSH_ZDOTDIR+X}" ]]; then
'builtin' 'export' ZDOTDIR="$GHOSTTY_ZSH_ZDOTDIR"
'builtin' 'unset' 'GHOSTTY_ZSH_ZDOTDIR'
else
'builtin' 'unset' 'ZDOTDIR'
fi
# Use try-always to have the right error code.
{
# Zsh treats empty $ZDOTDIR as if it was "/". We do the same.
#
# Source the user's zshenv before sourcing ghostty.zsh because the former
# might set fpath and other things without which ghostty.zsh won't work.
#
# Use typeset in case we are in a function with warn_create_global in
# effect. Unlikely but better safe than sorry.
'builtin' 'typeset' _ghostty_file=${ZDOTDIR-~}"/.zshenv"
# Zsh ignores unreadable rc files. We do the same.
# Zsh ignores rc files that are directories, and so does source.
[[ ! -r "$_ghostty_file" ]] || 'builtin' 'source' '--' "$_ghostty_file"
} always {
if [[ -o 'interactive' ]]; then
'builtin' 'autoload' '--' 'is-at-least'
'is-at-least' "5.1" || {
builtin echo "ZSH ${ZSH_VERSION} is too old for ghostty shell integration" > /dev/stderr
return
}
# ${(%):-%x} is the path to the current file.
# On top of it we add :A:h to get the directory.
'builtin' 'typeset' _ghostty_file="${${(%):-%x}:A:h}"/ghostty-integration
if [[ -r "$_ghostty_file" ]]; then
'builtin' 'autoload' '-Uz' '--' "$_ghostty_file"
"${_ghostty_file:t}"
'builtin' 'unfunction' '--' "${_ghostty_file:t}"
fi
fi
'builtin' 'unset' '_ghostty_file'
}

View file

@ -0,0 +1,316 @@
# Based on (started as) a copy of Kitty's zsh integration. Kitty is
# distributed under GPLv3, so this file is also distributed under GPLv3.
# The license header is reproduced below:
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Enables integration between zsh and ghostty.
#
# This is an autoloadable function. It's invoked automatically in shells
# directly spawned by Ghostty but not in any other shells. For example, running
# `exec zsh`, `sudo -E zsh`, `tmux`, or plain `zsh` will create a shell where
# ghostty-integration won't automatically run. Zsh users who want integration with
# Ghostty in all shells should add the following lines to their .zshrc:
#
# if [[ -n $GHOSTTY_RESOURCES_DIR ]]; then
# "$GHOSTTY_RESOURCES_DIR"/shell-integration/zsh/ghostty-integration
# fi
#
# Implementation note: We can assume that alias expansion is disabled in this
# file, so no need to quote defensively. We still have to defensively prefix all
# builtins with `builtin` to avoid accidentally invoking user-defined functions.
# We avoid `function` reserved word as an additional defensive measure.
# Note that updating options with `builtin emulate -L zsh` affects the global options
# if it's called outside of a function. So nearly all code has to be in functions.
_entrypoint() {
builtin emulate -L zsh -o no_warn_create_global -o no_aliases
[[ -o interactive ]] || builtin return 0 # non-interactive shell
(( ! $+_ghostty_state )) || builtin return 0 # already initialized
# 0: no OSC 133 [AC] marks have been written yet.
# 1: the last written OSC 133 C has not been closed with D yet.
# 2: none of the above.
builtin typeset -gi _ghostty_state
# Attempt to create a writable file descriptor to the TTY so that we can print
# to the TTY later even when STDOUT is redirected. This code is fairly subtle.
#
# - It's tempting to do `[[ -t 1 ]] && exec {_ghostty_state}>&1` but we cannot do this
# because it'll create a file descriptor >= 10 without O_CLOEXEC. This file
# descriptor will leak to child processes.
# - If we do `exec {3}>&1`, the file descriptor won't leak to the child processes
# but it'll still leak if the current process is replaced with another. In
# addition, it'll break user code that relies on fd 3 being available.
# - Zsh doesn't expose dup3, which would have allowed us to copy STDOUT with
# O_CLOEXEC. The only way to create a file descriptor with O_CLOEXEC is via
# sysopen.
# - `zmodload zsh/system` and `sysopen -o cloexec -wu _ghostty_fd -- /dev/tty` can
# fail with an error message to STDERR (the latter can happen even if /dev/tty
# is writable), hence the redirection of STDERR. We do it for the whole block
# for performance reasons (redirections are slow).
# - We must open the file descriptor right here rather than in _ghostty_deferred_init
# because there are broken zsh plugins out there that run `exec {fd}< <(cmd)`
# and then close the file descriptor more than once while suppressing errors.
# This could end up closing our file descriptor if we opened it in
# _ghostty_deferred_init.
typeset -gi _ghostty_fd
{
builtin zmodload zsh/system && (( $+builtins[sysopen] )) && {
{ [[ -w $TTY ]] && builtin sysopen -o cloexec -wu _ghostty_fd -- $TTY } ||
{ [[ -w /dev/tty ]] && builtin sysopen -o cloexec -wu _ghostty_fd -- /dev/tty }
}
} 2>/dev/null || (( _ghostty_fd = 1 ))
# Defer initialization so that other zsh init files can be configure
# the integration.
builtin typeset -ag precmd_functions
precmd_functions+=(_ghostty_deferred_init)
}
_ghostty_deferred_init() {
builtin emulate -L zsh -o no_warn_create_global -o no_aliases
# The directory where ghostty-integration is located: /../shell-integration/zsh.
builtin local self_dir="${functions_source[_ghostty_deferred_init]:A:h}"
# Enable semantic markup with OSC 133.
_ghostty_precmd() {
builtin local -i cmd_status=$?
builtin emulate -L zsh -o no_warn_create_global -o no_aliases
# Don't write OSC 133 D when our precmd handler is invoked from zle.
# Some plugins do that to update prompt on cd.
if ! builtin zle; then
# This code works incorrectly in the presence of a precmd or chpwd
# hook that prints. For example, sindresorhus/pure prints an empty
# line on precmd and marlonrichert/zsh-snap prints $PWD on chpwd.
# We'll end up writing our OSC 133 D mark too late.
#
# Another failure mode is when the output of a command doesn't end
# with LF and prompst_sp is set (it is by default). In this case
# we'll incorrectly state that '%' from prompt_sp is a part of the
# command's output.
if (( _ghostty_state == 1 )); then
# The last written OSC 133 C has not been closed with D yet.
# Close it and supply status.
builtin print -nu $_ghostty_fd '\e]133;D;'$cmd_status'\a'
(( _ghostty_state = 2 ))
elif (( _ghostty_state == 2 )); then
# There might be an unclosed OSC 133 C. Close that.
builtin print -nu $_ghostty_fd '\e]133;D\a'
fi
fi
builtin local mark1=$'%{\e]133;A\a%}'
if [[ -o prompt_percent ]]; then
builtin typeset -g precmd_functions
if [[ ${precmd_functions[-1]} == _ghostty_precmd ]]; then
# This is the best case for us: we can add our marks to PS1 and
# PS2. This way our marks will be printed whenever zsh
# redisplays prompt: on reset-prompt, on SIGWINCH, and on
# SIGCHLD if notify is set. Themes that update prompt
# asynchronously from a `zle -F` handler might still remove our
# marks. Oh well.
builtin local mark2=$'%{\e]133;A;k=s\a%}'
# Add marks conditionally to avoid a situation where we have
# several marks in place. These conditions can have false
# positives and false negatives though.
#
# - False positive (with prompt_percent): PS1="%(?.$mark1.)"
# - False negative (with prompt_subst): PS1='$mark1'
[[ $PS1 == *$mark1* ]] || PS1=${mark1}${PS1}
# PS2 mark is needed when clearing the prompt on resize
[[ $PS2 == *$mark2* ]] || PS2=${mark2}${PS2}
(( _ghostty_state = 2 ))
else
# If our precmd hook is not the last, we cannot rely on prompt
# changes to stick, so we don't even try. At least we can move
# our hook to the end to have better luck next time. If there is
# another piece of code that wants to take this privileged
# position, this won't work well. We'll break them as much as
# they are breaking us.
precmd_functions=(${precmd_functions:#_ghostty_precmd} _ghostty_precmd)
# Plugins that invoke precmd hooks from zle do that before zle
# is trashed. This means that the cursor is in the middle of
# BUFFER and we cannot print our mark there. Prompt might
# already have a mark, so the following reset-prompt will write
# it. If it doesn't, there is nothing we can do.
if ! builtin zle; then
builtin print -rnu $_ghostty_fd -- $mark1[3,-3]
(( _ghostty_state = 2 ))
fi
fi
elif ! builtin zle; then
# Without prompt_percent we cannot patch prompt. Just print the
# mark, except when we are invoked from zle. In the latter case we
# cannot do anything.
builtin print -rnu $_ghostty_fd -- $mark1[3,-3]
(( _ghostty_state = 2 ))
fi
}
_ghostty_preexec() {
builtin emulate -L zsh -o no_warn_create_global -o no_aliases
# This can potentially break user prompt. Oh well. The robustness of
# this code can be improved in the case prompt_subst is set because
# it'll allow us distinguish (not perfectly but close enough) between
# our own prompt, user prompt, and our own prompt with user additions on
# top. We cannot force prompt_subst on the user though, so we would
# still need this code for the no_prompt_subst case.
PS1=${PS1//$'%{\e]133;A\a%}'}
PS2=${PS2//$'%{\e]133;A;k=s\a%}'}
# This will work incorrectly in the presence of a preexec hook that
# prints. For example, if MichaelAquilina/zsh-you-should-use installs
# its preexec hook before us, we'll incorrectly mark its output as
# belonging to the command (as if the user typed it into zle) rather
# than command output.
builtin print -nu $_ghostty_fd '\e]133;C\a'
(( _ghostty_state = 1 ))
}
# Enable reporting current working dir to terminal. Ghostty supports
# the kitty-shell-cwd format.
_ghostty_report_pwd() { builtin print -nu $_ghostty_fd '\e]7;kitty-shell-cwd://'"$HOST""$PWD"'\a'; }
chpwd_functions=(${chpwd_functions[@]} "_ghostty_report_pwd")
# An executed program could change cwd and report the changed cwd, so also report cwd at each new prompt
# as in this case chpwd_functions is insufficient. chpwd_functions is still needed for things like: cd x && something
functions[_ghostty_precmd]+="
_ghostty_report_pwd"
_ghostty_report_pwd
if [[ "$GHOSTTY_SHELL_INTEGRATION_NO_TITLE" != 1 ]]; then
# Enable terminal title changes.
functions[_ghostty_precmd]+="
builtin print -rnu $_ghostty_fd \$'\\e]2;'\"\${(%):-%(4~|…/%3~|%~)}\"\$'\\a'"
functions[_ghostty_preexec]+="
builtin print -rnu $_ghostty_fd \$'\\e]2;'\"\${(V)1}\"\$'\\a'"
fi
if [[ "$GHOSTTY_SHELL_INTEGRATION_NO_CURSOR" != 1 ]]; then
# Enable cursor shape changes depending on the current keymap.
# This implementation leaks blinking block cursor into external commands
# executed from zle. For example, users of fzf-based widgets may find
# themselves with a blinking block cursor within fzf.
_ghostty_zle_line_init _ghostty_zle_line_finish _ghostty_zle_keymap_select() {
case ${KEYMAP-} in
# Blinking block cursor.
vicmd|visual) builtin print -nu "$_ghostty_fd" '\e[1 q';;
# Blinking bar cursor.
*) builtin print -nu "$_ghostty_fd" '\e[5 q';;
esac
}
# Restore the blinking default shape before executing an external command
functions[_ghostty_preexec]+="
builtin print -rnu $_ghostty_fd \$'\\e[0 q'"
fi
# Sudo
if [[ "$GHOSTTY_SHELL_INTEGRATION_NO_SUDO" != "1" ]] && [[ -n "$TERMINFO" ]]; then
# Wrap `sudo` command to ensure Ghostty terminfo is preserved
sudo() {
builtin local sudo_has_sudoedit_flags="no"
for arg in "$@"; do
# Check if argument is '-e' or '--edit' (sudoedit flags)
if [[ "$arg" == "-e" || $arg == "--edit" ]]; then
sudo_has_sudoedit_flags="yes"
builtin break
fi
# Check if argument is neither an option nor a key-value pair
if [[ "$arg" != -* && "$arg" != *=* ]]; then
builtin break
fi
done
if [[ "$sudo_has_sudoedit_flags" == "yes" ]]; then
builtin command sudo "$@";
else
builtin command sudo TERMINFO="$TERMINFO" "$@";
fi
}
fi
# Some zsh users manually run `source ~/.zshrc` in order to apply rc file
# changes to the current shell. This is a terrible practice that breaks many
# things, including our shell integration. For example, Oh My Zsh and Prezto
# (both very popular among zsh users) will remove zle-line-init and
# zle-line-finish hooks if .zshrc is manually sourced. Prezto will also remove
# zle-keymap-select.
#
# Another common (and much more robust) way to apply rc file changes to the
# current shell is `exec zsh`. This will remove our integration from the shell
# unless it's explicitly invoked from .zshrc. This is not an issue with
# `exec zsh` but rather with our implementation of automatic shell integration.
# In the ideal world we would use add-zle-hook-widget to hook zle-line-init
# and similar widget. This breaks user configs though, so we have do this
# horrible thing instead.
builtin local hook func widget orig_widget flag
for hook in line-init line-finish keymap-select; do
func=_ghostty_zle_${hook/-/_}
(( $+functions[$func] )) || builtin continue
widget=zle-$hook
if [[ $widgets[$widget] == user:azhw:* &&
$+functions[add-zle-hook-widget] -eq 1 ]]; then
# If the widget is already hooked by add-zle-hook-widget at the top
# level, add our hook at the end. We MUST do it this way. We cannot
# just wrap the widget ourselves in this case because it would
# trigger bugs in add-zle-hook-widget.
add-zle-hook-widget $hook $func
else
if (( $+widgets[$widget] )); then
# There is a widget but it's not from add-zle-hook-widget. We
# can rename the original widget, install our own and invoke
# the original when we are called.
#
# Note: The leading dot is to work around bugs in
# zsh-syntax-highlighting.
orig_widget=._ghostty_orig_$widget
builtin zle -A $widget $orig_widget
if [[ $widgets[$widget] == user:* ]]; then
# No -w here to preserve $WIDGET within the original widget.
flag=
else
flag=w
fi
functions[$func]+="
builtin zle $orig_widget -N$flag -- \"\$@\""
fi
builtin zle -N $widget $func
fi
done
if (( $+functions[_ghostty_preexec] )); then
builtin typeset -ag preexec_functions
preexec_functions+=(_ghostty_preexec)
fi
builtin typeset -ag precmd_functions
if (( $+functions[_ghostty_precmd] )); then
precmd_functions=(${precmd_functions:/_ghostty_deferred_init/_ghostty_precmd})
_ghostty_precmd
else
precmd_functions=(${precmd_functions:#_ghostty_deferred_init})
fi
# Unfunction _ghostty_deferred_init to save memory. Don't unfunction
# ghostty-integration though because decent public functions aren't supposed to
# to unfunction themselves when invoked. Unfunctioning is done by calling code.
builtin unfunction _ghostty_deferred_init
}
_entrypoint

View file

@ -0,0 +1,21 @@
palette = 0=#090300
palette = 1=#db2d20
palette = 2=#01a252
palette = 3=#fded02
palette = 4=#01a0e4
palette = 5=#a16a94
palette = 6=#b5e4f4
palette = 7=#a5a2a2
palette = 8=#5c5855
palette = 9=#e8bbd0
palette = 10=#3a3432
palette = 11=#4a4543
palette = 12=#807d7c
palette = 13=#d6d5d4
palette = 14=#cdab53
palette = 15=#f7f7f7
background = f7f7f7
foreground = 4a4543
cursor-color = 4a4543
selection-background = a5a2a2
selection-foreground = 4a4543

View file

@ -0,0 +1,21 @@
palette = 0=#090300
palette = 1=#db2d20
palette = 2=#01a252
palette = 3=#fded02
palette = 4=#01a0e4
palette = 5=#a16a94
palette = 6=#b5e4f4
palette = 7=#a5a2a2
palette = 8=#5c5855
palette = 9=#e8bbd0
palette = 10=#3a3432
palette = 11=#4a4543
palette = 12=#807d7c
palette = 13=#d6d5d4
palette = 14=#cdab53
palette = 15=#f7f7f7
background = 090300
foreground = a5a2a2
cursor-color = a5a2a2
selection-background = 4a4543
selection-foreground = a5a2a2

View file

@ -0,0 +1,21 @@
palette = 0=#191919
palette = 1=#aa342e
palette = 2=#4b8c0f
palette = 3=#dbba00
palette = 4=#1370d3
palette = 5=#c43ac3
palette = 6=#008eb0
palette = 7=#bebebe
palette = 8=#454545
palette = 9=#f05b50
palette = 10=#95dc55
palette = 11=#ffe763
palette = 12=#60a4ec
palette = 13=#e26be2
palette = 14=#60b6cb
palette = 15=#f7f7f7
background = 102040
foreground = dddddd
cursor-color = 007acc
selection-background = bfdbfe
selection-foreground = 000000

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#cd0000
palette = 2=#00cd00
palette = 3=#cdcd00
palette = 4=#1093f5
palette = 5=#cd00cd
palette = 6=#00cdcd
palette = 7=#faebd7
palette = 8=#404040
palette = 9=#ff0000
palette = 10=#00ff00
palette = 11=#ffff00
palette = 12=#11b5f6
palette = 13=#ff00ff
palette = 14=#00ffff
palette = 15=#ffffff
background = 111416
foreground = eeeeec
cursor-color = bbbbbb
selection-background = eeeeec
selection-foreground = 333333

View file

@ -0,0 +1,21 @@
palette = 0=#040404
palette = 1=#d84a33
palette = 2=#5da602
palette = 3=#eebb6e
palette = 4=#417ab3
palette = 5=#e5c499
palette = 6=#bdcfe5
palette = 7=#dbded8
palette = 8=#685656
palette = 9=#d76b42
palette = 10=#99b52c
palette = 11=#ffb670
palette = 12=#97d7ef
palette = 13=#aa7900
palette = 14=#bdcfe5
palette = 15=#e4d5c7
background = 040404
foreground = feffff
cursor-color = feffff
selection-background = 606060
selection-foreground = ffffff

View file

@ -0,0 +1,21 @@
palette = 0=#050404
palette = 1=#bd0013
palette = 2=#4ab118
palette = 3=#e7741e
palette = 4=#0f4ac6
palette = 5=#665993
palette = 6=#70a598
palette = 7=#f8dcc0
palette = 8=#4e7cbf
palette = 9=#fc5f5a
palette = 10=#9eff6e
palette = 11=#efc11a
palette = 12=#1997c6
palette = 13=#9b5953
palette = 14=#c8faf4
palette = 15=#f6f5fb
background = 1f1d45
foreground = f8dcc0
cursor-color = efbf38
selection-background = 706b4e
selection-foreground = f3d9c4

View file

@ -0,0 +1,21 @@
palette = 0=#151515
palette = 1=#ac4142
palette = 2=#7e8e50
palette = 3=#e5b567
palette = 4=#6c99bb
palette = 5=#9f4e85
palette = 6=#7dd6cf
palette = 7=#d0d0d0
palette = 8=#505050
palette = 9=#ac4142
palette = 10=#7e8e50
palette = 11=#e5b567
palette = 12=#6c99bb
palette = 13=#9f4e85
palette = 14=#7dd6cf
palette = 15=#f5f5f5
background = 212121
foreground = d0d0d0
cursor-color = d0d0d0
selection-background = 303030
selection-foreground = d0d0d0

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#aa3731
palette = 2=#448c27
palette = 3=#cb9000
palette = 4=#325cc0
palette = 5=#7a3e9d
palette = 6=#0083b2
palette = 7=#f7f7f7
palette = 8=#777777
palette = 9=#f05050
palette = 10=#60cb00
palette = 11=#ffbc5d
palette = 12=#007acc
palette = 13=#e64ce6
palette = 14=#00aacb
palette = 15=#f7f7f7
background = f7f7f7
foreground = 000000
cursor-color = 007acc
selection-background = bfdbfe
selection-foreground = 000000

View file

@ -0,0 +1,21 @@
palette = 0=#112616
palette = 1=#7f2b27
palette = 2=#2f7e25
palette = 3=#717f24
palette = 4=#2f6a7f
palette = 5=#47587f
palette = 6=#327f77
palette = 7=#647d75
palette = 8=#3c4812
palette = 9=#e08009
palette = 10=#18e000
palette = 11=#bde000
palette = 12=#00aae0
palette = 13=#0058e0
palette = 14=#00e0c4
palette = 15=#73fa91
background = 0f1610
foreground = 637d75
cursor-color = 73fa91
selection-background = 1d4125
selection-foreground = 73fa91

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#cd3131
palette = 2=#05bc79
palette = 3=#e5e512
palette = 4=#2472c8
palette = 5=#bc3fbc
palette = 6=#0fa8cd
palette = 7=#e5e5e5
palette = 8=#666666
palette = 9=#cd3131
palette = 10=#05bc79
palette = 11=#e5e512
palette = 12=#2472c8
palette = 13=#bc3fbc
palette = 14=#0fa8cd
palette = 15=#e5e5e5
background = 262a33
foreground = e5e5e5
cursor-color = f8f8f0
selection-background = 5a5c62
selection-foreground = ece7e7

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#c91b00
palette = 2=#00c200
palette = 3=#c7c400
palette = 4=#0225c7
palette = 5=#ca30c7
palette = 6=#00c5c7
palette = 7=#c7c7c7
palette = 8=#686868
palette = 9=#ff6e67
palette = 10=#5ffa68
palette = 11=#fffc67
palette = 12=#6871ff
palette = 13=#ff77ff
palette = 14=#60fdff
palette = 15=#ffffff
background = 2c2b2b
foreground = d5a200
cursor-color = c7c7c7
selection-background = 6b5b02
selection-foreground = 67e000

View file

@ -0,0 +1,21 @@
palette = 0=#1a1a1a
palette = 1=#cc372e
palette = 2=#26a439
palette = 3=#cdac08
palette = 4=#0869cb
palette = 5=#9647bf
palette = 6=#479ec2
palette = 7=#98989d
palette = 8=#464646
palette = 9=#ff453a
palette = 10=#32d74b
palette = 11=#ffd60a
palette = 12=#0a84ff
palette = 13=#bf5af2
palette = 14=#76d6ff
palette = 15=#ffffff
background = 1e1e1e
foreground = ffffff
cursor-color = 98989d
selection-background = 3f638b
selection-foreground = ffffff

View file

@ -0,0 +1,21 @@
palette = 0=#232323
palette = 1=#ff000f
palette = 2=#8ce10b
palette = 3=#ffb900
palette = 4=#008df8
palette = 5=#6d43a6
palette = 6=#00d8eb
palette = 7=#ffffff
palette = 8=#444444
palette = 9=#ff2740
palette = 10=#abe15b
palette = 11=#ffd242
palette = 12=#0092ff
palette = 13=#9a5feb
palette = 14=#67fff0
palette = 15=#ffffff
background = 0e1019
foreground = fffaf4
cursor-color = ff0018
selection-background = 002a3b
selection-foreground = ffffff

View file

@ -0,0 +1,21 @@
palette = 0=#3d352a
palette = 1=#cd5c5c
palette = 2=#86af80
palette = 3=#e8ae5b
palette = 4=#6495ed
palette = 5=#deb887
palette = 6=#b0c4de
palette = 7=#bbaa99
palette = 8=#554444
palette = 9=#cc5533
palette = 10=#88aa22
palette = 11=#ffa75d
palette = 12=#87ceeb
palette = 13=#996600
palette = 14=#b0c4de
palette = 15=#ddccbb
background = 1c1c1c
foreground = ddeedd
cursor-color = e2bbef
selection-background = 4d4d4d
selection-foreground = ffffff

View file

@ -0,0 +1,21 @@
palette = 0=#202746
palette = 1=#c94922
palette = 2=#ac9739
palette = 3=#c08b30
palette = 4=#3d8fd1
palette = 5=#6679cc
palette = 6=#22a2c9
palette = 7=#979db4
palette = 8=#6b7394
palette = 9=#c76b29
palette = 10=#293256
palette = 11=#5e6687
palette = 12=#898ea4
palette = 13=#dfe2f1
palette = 14=#9c637a
palette = 15=#f5f7ff
background = 202746
foreground = 979db4
cursor-color = 979db4
selection-background = 5e6687
selection-foreground = 979db4

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#fd5ff1
palette = 2=#87c38a
palette = 3=#ffd7b1
palette = 4=#85befd
palette = 5=#b9b6fc
palette = 6=#85befd
palette = 7=#e0e0e0
palette = 8=#000000
palette = 9=#fd5ff1
palette = 10=#94fa36
palette = 11=#f5ffa8
palette = 12=#96cbfe
palette = 13=#b9b6fc
palette = 14=#85befd
palette = 15=#e0e0e0
background = 161719
foreground = c5c8c6
cursor-color = d0d0d0
selection-background = 444444
selection-foreground = c5c8c6

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#de3e35
palette = 2=#3f953a
palette = 3=#d2b67c
palette = 4=#2f5af3
palette = 5=#950095
palette = 6=#3f953a
palette = 7=#bbbbbb
palette = 8=#000000
palette = 9=#de3e35
palette = 10=#3f953a
palette = 11=#d2b67c
palette = 12=#2f5af3
palette = 13=#a00095
palette = 14=#3f953a
palette = 15=#ffffff
background = f9f9f9
foreground = 2a2c33
cursor-color = bbbbbb
selection-background = ededed
selection-foreground = 2a2c33

View file

@ -0,0 +1,21 @@
palette = 0=#23262e
palette = 1=#f0266f
palette = 2=#8fd46d
palette = 3=#ffe66d
palette = 4=#0321d7
palette = 5=#ee5d43
palette = 6=#03d6b8
palette = 7=#c74ded
palette = 8=#292e38
palette = 9=#f92672
palette = 10=#8fd46d
palette = 11=#ffe66d
palette = 12=#03d6b8
palette = 13=#ee5d43
palette = 14=#03d6b8
palette = 15=#c74ded
background = 23262e
foreground = ffca28
cursor-color = ee5d43
selection-background = 292e38
selection-foreground = 00e8c6

View file

@ -0,0 +1,21 @@
palette = 0=#191e2a
palette = 1=#ed8274
palette = 2=#a6cc70
palette = 3=#fad07b
palette = 4=#6dcbfa
palette = 5=#cfbafa
palette = 6=#90e1c6
palette = 7=#c7c7c7
palette = 8=#686868
palette = 9=#f28779
palette = 10=#bae67e
palette = 11=#ffd580
palette = 12=#73d0ff
palette = 13=#d4bfff
palette = 14=#95e6cb
palette = 15=#ffffff
background = 1f2430
foreground = cbccc6
cursor-color = ffcc66
selection-background = 33415e
selection-foreground = cbccc6

View file

@ -0,0 +1,21 @@
palette = 0=#17141f
palette = 1=#ff6b7f
palette = 2=#00bd9c
palette = 3=#e6c62f
palette = 4=#22e8df
palette = 5=#dc396a
palette = 6=#56b6c2
palette = 7=#f1f1f1
palette = 8=#495162
palette = 9=#fe9ea1
palette = 10=#98c379
palette = 11=#f9e46b
palette = 12=#91fff4
palette = 13=#da70d6
palette = 14=#bcf3ff
palette = 15=#ffffff
background = 191323
foreground = cccccc
cursor-color = e07d13
selection-background = 220525
selection-foreground = f4f4f4

View file

@ -0,0 +1,21 @@
palette = 0=#1b1d1e
palette = 1=#e6dc44
palette = 2=#c8be46
palette = 3=#f4fd22
palette = 4=#737174
palette = 5=#747271
palette = 6=#62605f
palette = 7=#c6c5bf
palette = 8=#505354
palette = 9=#fff78e
palette = 10=#fff27d
palette = 11=#feed6c
palette = 12=#919495
palette = 13=#9a9a9d
palette = 14=#a3a3a6
palette = 15=#dadbd6
background = 1b1d1e
foreground = 6f6f6f
cursor-color = fcef0c
selection-background = 4d504c
selection-foreground = f0e04a

View file

@ -0,0 +1,21 @@
palette = 0=#20111b
palette = 1=#be100e
palette = 2=#858162
palette = 3=#eaa549
palette = 4=#426a79
palette = 5=#97522c
palette = 6=#989a9c
palette = 7=#968c83
palette = 8=#5e5252
palette = 9=#be100e
palette = 10=#858162
palette = 11=#eaa549
palette = 12=#426a79
palette = 13=#97522c
palette = 14=#989a9c
palette = 15=#d5ccba
background = d5ccba
foreground = 45373c
cursor-color = 45373c
selection-background = 968c83
selection-foreground = 45373c

View file

@ -0,0 +1,21 @@
palette = 0=#20111b
palette = 1=#be100e
palette = 2=#858162
palette = 3=#eaa549
palette = 4=#426a79
palette = 5=#97522c
palette = 6=#989a9c
palette = 7=#968c83
palette = 8=#5e5252
palette = 9=#be100e
palette = 10=#858162
palette = 11=#eaa549
palette = 12=#426a79
palette = 13=#97522c
palette = 14=#989a9c
palette = 15=#d5ccba
background = 20111b
foreground = 968c83
cursor-color = 968c83
selection-background = 45373c
selection-foreground = 968c83

View file

@ -0,0 +1,21 @@
palette = 0=#573d26
palette = 1=#be2d26
palette = 2=#6ba18a
palette = 3=#e99d2a
palette = 4=#5a86ad
palette = 5=#ac80a6
palette = 6=#74a6ad
palette = 7=#e0dbb7
palette = 8=#9b6c4a
palette = 9=#e84627
palette = 10=#95d8ba
palette = 11=#d0d150
palette = 12=#b8d3ed
palette = 13=#d19ecb
palette = 14=#93cfd7
palette = 15=#fff9d5
background = 2a1f1d
foreground = e0dbb7
cursor-color = 573d26
selection-background = 563c27
selection-foreground = e0dbbb

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#b87a7a
palette = 2=#7ab87a
palette = 3=#b8b87a
palette = 4=#7a7ab8
palette = 5=#b87ab8
palette = 6=#7ab8b8
palette = 7=#d9d9d9
palette = 8=#262626
palette = 9=#dbbdbd
palette = 10=#bddbbd
palette = 11=#dbdbbd
palette = 12=#bdbddb
palette = 13=#dbbddb
palette = 14=#bddbdb
palette = 15=#ffffff
background = 0d1926
foreground = d9e6f2
cursor-color = d9e6f2
selection-background = c1ddff
selection-foreground = 000000

View file

@ -0,0 +1,21 @@
palette = 0=#101116
palette = 1=#ff5680
palette = 2=#00ff9c
palette = 3=#fffc58
palette = 4=#00b0ff
palette = 5=#d57bff
palette = 6=#76c1ff
palette = 7=#c7c7c7
palette = 8=#686868
palette = 9=#ff6e67
palette = 10=#5ffa68
palette = 11=#fffc67
palette = 12=#6871ff
palette = 13=#d682ec
palette = 14=#60fdff
palette = 15=#ffffff
background = 101116
foreground = 00a2ff
cursor-color = 76ff9f
selection-background = c1deff
selection-foreground = 000000

View file

@ -0,0 +1,21 @@
palette = 0=#0a4c62
palette = 1=#99246e
palette = 2=#5cb1b3
palette = 3=#eab9a8
palette = 4=#90a5bd
palette = 5=#9d54a7
palette = 6=#7e83cc
palette = 7=#f0e8d6
palette = 8=#201637
palette = 9=#c87272
palette = 10=#0a6c7e
palette = 11=#7a3188
palette = 12=#39173d
palette = 13=#bc94b7
palette = 14=#5e6071
palette = 15=#0a6c7e
background = 1c0c28
foreground = babab9
cursor-color = fcfad6
selection-background = 606060
selection-foreground = ffffff

View file

@ -0,0 +1,21 @@
palette = 0=#292d3e
palette = 1=#ff8288
palette = 2=#b4e88d
palette = 3=#f4d69f
palette = 4=#82aaff
palette = 5=#e9c1ff
palette = 6=#89ebff
palette = 7=#d0d0d0
palette = 8=#434758
palette = 9=#ff8b92
palette = 10=#ddffa7
palette = 11=#ffe585
palette = 12=#9cc4ff
palette = 13=#ddb0f6
palette = 14=#a3f7ff
palette = 15=#ffffff
background = 006984
foreground = c5f2ff
cursor-color = ffcc00
selection-background = 2baeca
selection-foreground = eceff1

View file

@ -0,0 +1,21 @@
palette = 0=#41444d
palette = 1=#fc2f52
palette = 2=#25a45c
palette = 3=#ff936a
palette = 4=#3476ff
palette = 5=#7a82da
palette = 6=#4483aa
palette = 7=#cdd4e0
palette = 8=#8f9aae
palette = 9=#ff6480
palette = 10=#3fc56b
palette = 11=#f9c859
palette = 12=#10b1fe
palette = 13=#ff78f8
palette = 14=#5fb9bc
palette = 15=#ffffff
background = 282c34
foreground = b9c0cb
cursor-color = ffcc00
selection-background = b9c0ca
selection-foreground = 272b33

View file

@ -0,0 +1,21 @@
palette = 0=#373a41
palette = 1=#d52753
palette = 2=#23974a
palette = 3=#df631c
palette = 4=#275fe4
palette = 5=#823ff1
palette = 6=#27618d
palette = 7=#babbc2
palette = 8=#676a77
palette = 9=#ff6480
palette = 10=#3cbc66
palette = 11=#c5a332
palette = 12=#0099e1
palette = 13=#ce33c0
palette = 14=#6d93bb
palette = 15=#d3d3d3
background = f9f9f9
foreground = 373a41
cursor-color = f32759
selection-background = daf0ff
selection-foreground = 373a41

View file

@ -0,0 +1,21 @@
palette = 0=#4f4f4f
palette = 1=#ff6c60
palette = 2=#a8ff60
palette = 3=#ffffb6
palette = 4=#96cbfe
palette = 5=#ff73fd
palette = 6=#c6c5fe
palette = 7=#eeeeee
palette = 8=#7c7c7c
palette = 9=#ffb6b0
palette = 10=#ceffac
palette = 11=#ffffcc
palette = 12=#b5dcff
palette = 13=#ff9cfe
palette = 14=#dfdffe
palette = 15=#ffffff
background = 0000a4
foreground = ffff4e
cursor-color = ffa560
selection-background = a4a4a4
selection-foreground = 0000a4

View file

@ -0,0 +1,21 @@
palette = 0=#31363b
palette = 1=#ed1515
palette = 2=#11d116
palette = 3=#f67400
palette = 4=#1d99f3
palette = 5=#9b59b6
palette = 6=#1abc9c
palette = 7=#eff0f1
palette = 8=#7f8c8d
palette = 9=#c0392b
palette = 10=#1cdc9a
palette = 11=#fdbc4b
palette = 12=#3daee9
palette = 13=#8e44ad
palette = 14=#16a085
palette = 15=#fcfcfc
background = 31363b
foreground = eff0f1
cursor-color = eff0f1
selection-background = eff0f1
selection-foreground = 31363b

View file

@ -0,0 +1,21 @@
palette = 0=#191919
palette = 1=#ff355b
palette = 2=#b7e876
palette = 3=#ffc251
palette = 4=#76d4ff
palette = 5=#ba76e7
palette = 6=#6cbfb5
palette = 7=#c2c8d7
palette = 8=#191919
palette = 9=#ff355b
palette = 10=#b7e876
palette = 11=#ffc251
palette = 12=#76d5ff
palette = 13=#ba76e7
palette = 14=#6cbfb5
palette = 15=#c2c8d7
background = 191919
foreground = b3c9d7
cursor-color = f34b00
selection-background = b3c9d7
selection-foreground = 191919

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#da4939
palette = 2=#519f50
palette = 3=#ffd24a
palette = 4=#6d9cbe
palette = 5=#d0d0ff
palette = 6=#6e9cbe
palette = 7=#ffffff
palette = 8=#323232
palette = 9=#ff7b6b
palette = 10=#83d182
palette = 11=#ffff7c
palette = 12=#9fcef0
palette = 13=#ffffff
palette = 14=#a0cef0
palette = 15=#ffffff
background = 2b2b2b
foreground = e6e1dc
cursor-color = ffffff
selection-background = 5a647e
selection-foreground = e6e1dc

View file

@ -0,0 +1,21 @@
palette = 0=#1f1f1f
palette = 1=#f81118
palette = 2=#2dc55e
palette = 3=#ecba0f
palette = 4=#2a84d2
palette = 5=#4e5ab7
palette = 6=#1081d6
palette = 7=#d6dbe5
palette = 8=#d6dbe5
palette = 9=#de352e
palette = 10=#1dd361
palette = 11=#f3bd09
palette = 12=#1081d6
palette = 13=#5350b9
palette = 14=#0f7ddb
palette = 15=#ffffff
background = 131313
foreground = d6dbe5
cursor-color = b9b9b9
selection-background = 1f1f1f
selection-foreground = d6dbe5

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#bb0000
palette = 2=#00bb00
palette = 3=#bbbb00
palette = 4=#0000bb
palette = 5=#bb00bb
palette = 6=#00bbbb
palette = 7=#bbbbbb
palette = 8=#555555
palette = 9=#ff5555
palette = 10=#55ff55
palette = 11=#ffff55
palette = 12=#5555ff
palette = 13=#ff55ff
palette = 14=#55ffff
palette = 15=#ffffff
background = 000000
foreground = bbbbbb
cursor-color = bbbbbb
selection-background = b5d5ff
selection-foreground = 000000

View file

@ -0,0 +1,21 @@
palette = 0=#000000
palette = 1=#bb0000
palette = 2=#00bb00
palette = 3=#bbbb00
palette = 4=#0000bb
palette = 5=#bb00bb
palette = 6=#00bbbb
palette = 7=#bbbbbb
palette = 8=#555555
palette = 9=#ff5555
palette = 10=#55ff55
palette = 11=#ffff55
palette = 12=#5555ff
palette = 13=#ff55ff
palette = 14=#55ffff
palette = 15=#ffffff
background = ffffff
foreground = 000000
cursor-color = 000000
selection-background = b5d5ff
selection-foreground = 000000

View file

@ -0,0 +1,21 @@
palette = 0=#4f4f4f
palette = 1=#ff6c60
palette = 2=#a8ff60
palette = 3=#ffffb6
palette = 4=#96cbfe
palette = 5=#ff73fd
palette = 6=#c6c5fe
palette = 7=#eeeeee
palette = 8=#7c7c7c
palette = 9=#ffb6b0
palette = 10=#ceffac
palette = 11=#ffffcc
palette = 12=#b5dcff
palette = 13=#ff9cfe
palette = 14=#dfdffe
palette = 15=#ffffff
background = 000000
foreground = bbbbbb
cursor-color = ffa560
selection-background = 363983
selection-foreground = f2f2f2

View file

@ -0,0 +1,21 @@
palette = 0=#073642
palette = 1=#dc322f
palette = 2=#859900
palette = 3=#b58900
palette = 4=#268bd2
palette = 5=#d33682
palette = 6=#2aa198
palette = 7=#eee8d5
palette = 8=#002b36
palette = 9=#cb4b16
palette = 10=#586e75
palette = 11=#657b83
palette = 12=#839496
palette = 13=#6c71c4
palette = 14=#93a1a1
palette = 15=#fdf6e3
background = 002b36
foreground = 839496
cursor-color = 839496
selection-background = 073642
selection-foreground = 93a1a1

Some files were not shown because too many files have changed in this diff Show more