chore: Sync with remote
This commit is contained in:
commit
ce7c8d0a6d
73 changed files with 1643 additions and 5139 deletions
3
.config/discord/settings.json
Normal file
3
.config/discord/settings.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"SKIP_HOST_UPDATE": true
|
||||||
|
}
|
11
.config/discordcanary/settings.json
Normal file
11
.config/discordcanary/settings.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"openasar": {
|
||||||
|
"setup": true,
|
||||||
|
"noTyping": true,
|
||||||
|
"css": "@import url(\"https://luckfire.github.io/amoled-cord/src/amoled-cord.css\");"
|
||||||
|
},
|
||||||
|
"chromiumSwitches": {},
|
||||||
|
"IS_MAXIMIZED": true,
|
||||||
|
"IS_MINIMIZED": false,
|
||||||
|
"trayBalloonShown": true
|
||||||
|
}
|
142
.config/eww/eww.scss
Normal file
142
.config/eww/eww.scss
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
// vi: et ts=4 sw=4
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
font-family: 'monospace';
|
||||||
|
font-size: 16px;
|
||||||
|
font-feature-settings: 'tnum';
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
// >> bg
|
||||||
|
$bg-100: #434758;
|
||||||
|
$bg-300: #2A3039;
|
||||||
|
$bg-500: #0E1418; // base
|
||||||
|
|
||||||
|
$bg-radius: 8px;
|
||||||
|
$bg-margin: 4px;
|
||||||
|
// << bg
|
||||||
|
|
||||||
|
$blue-500: #1CA2DA;
|
||||||
|
|
||||||
|
/** tooltip!! **/
|
||||||
|
tooltip {
|
||||||
|
.background {
|
||||||
|
background-color: #0f0f17;
|
||||||
|
font-size: 18;
|
||||||
|
border-radius: 10px;
|
||||||
|
color: #bfc9db;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
margin: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tray menu { /* SysTray popup */
|
||||||
|
background-color: $bg-300;
|
||||||
|
border-radius: $bg-radius;
|
||||||
|
|
||||||
|
separator {
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
menuitem {
|
||||||
|
padding: 2px 8px;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
margin-top: $bg-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: $bg-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: $blue-500;
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
// -gtk-icon-size: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bar {
|
||||||
|
background: $bg-500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle {
|
||||||
|
.clock label {
|
||||||
|
background: $bg-300;
|
||||||
|
margin: $bg-margin 0px;
|
||||||
|
padding: 0 13px;
|
||||||
|
border-radius: $bg-radius;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.end .tray {
|
||||||
|
|
||||||
|
widget {
|
||||||
|
> image {
|
||||||
|
background: $bg-300;
|
||||||
|
margin: $bg-margin 0px;
|
||||||
|
padding: 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover > image {
|
||||||
|
background: $bg-100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
widget:first-child > image {
|
||||||
|
border-top-left-radius: $bg-radius;
|
||||||
|
border-bottom-left-radius: $bg-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
widget:last-child > image {
|
||||||
|
border-top-right-radius: $bg-radius;
|
||||||
|
border-bottom-right-radius: $bg-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
// > label:first-child {
|
||||||
|
// padding-right: 16px;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// label:last-child {
|
||||||
|
// margin-right: 12px;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// box label:last-child {
|
||||||
|
// margin-left: 12px;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces {
|
||||||
|
button:first-child label {
|
||||||
|
border-top-left-radius: $bg-radius;
|
||||||
|
border-bottom-left-radius: $bg-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:last-child label {
|
||||||
|
border-top-right-radius: $bg-radius;
|
||||||
|
border-bottom-right-radius: $bg-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
min-height: 13px;
|
||||||
|
|
||||||
|
label {
|
||||||
|
background: $bg-300;
|
||||||
|
margin: $bg-margin 0px;
|
||||||
|
padding: 0 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover label {
|
||||||
|
background: $bg-100;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active label {
|
||||||
|
background: #1CA2DA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
57
.config/eww/eww.yuck
Normal file
57
.config/eww/eww.yuck
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
;; Variables
|
||||||
|
(defvar dtfull true)
|
||||||
|
|
||||||
|
;; Listeners
|
||||||
|
(deflisten active-workspace
|
||||||
|
`stdbuf -oL ./scripts/hypr/workspace-active-listener`)
|
||||||
|
|
||||||
|
(deflisten workspace-list :initial "[1]"
|
||||||
|
`stdbuf -oL ./scripts/hypr/workspace-list-listener`)
|
||||||
|
|
||||||
|
(deflisten datetime :initial "{}"
|
||||||
|
`stdbuf -oL ./scripts/datetime-listener`)
|
||||||
|
|
||||||
|
;; Windows
|
||||||
|
(defwindow bar
|
||||||
|
:monitor 0
|
||||||
|
:stacking "fg"
|
||||||
|
:exclusive true
|
||||||
|
:geometry (geometry :width "100%" :height "28px" :anchor "top center")
|
||||||
|
(bar))
|
||||||
|
|
||||||
|
(defwidget bar []
|
||||||
|
(centerbox
|
||||||
|
(start)
|
||||||
|
(middle)
|
||||||
|
(end)))
|
||||||
|
|
||||||
|
(defwidget start []
|
||||||
|
(workspaces))
|
||||||
|
|
||||||
|
(defwidget middle []
|
||||||
|
(box :class "middle"
|
||||||
|
(clock)))
|
||||||
|
|
||||||
|
(defwidget end []
|
||||||
|
(box :halign "end"
|
||||||
|
:class "end"
|
||||||
|
:space-evenly false
|
||||||
|
(systray :class "tray" :icon-size "16")))
|
||||||
|
|
||||||
|
(defwidget workspaces []
|
||||||
|
(box :class "workspaces"
|
||||||
|
:space-evenly false
|
||||||
|
(for id in workspace-list
|
||||||
|
(button :class {active-workspace == id ? "active" : ""}
|
||||||
|
:onclick `hyprctl dispatch workspace ${id}`
|
||||||
|
id))))
|
||||||
|
|
||||||
|
(defwidget clock []
|
||||||
|
(eventbox :class "clock" :onclick `eww update dtfull=${!dtfull}`
|
||||||
|
(label :text {dtfull ? datetime.full : datetime.date})))
|
||||||
|
|
||||||
|
(defwidget pair [icon text]
|
||||||
|
(box :width 70
|
||||||
|
:space-evenly false
|
||||||
|
(label :text icon)
|
||||||
|
(label :text text)))
|
8
.config/eww/scripts/datetime-listener
Executable file
8
.config/eww/scripts/datetime-listener
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
date +"full='%a, %d %b %Y • %H:%M %Z' date='%Y-%m-%d'" \
|
||||||
|
| xargs jo
|
||||||
|
date +%s.%N | dc -e "? d 1 + 1 / r - p" | xargs sleep
|
||||||
|
done
|
4
.config/eww/scripts/hypr/hyprland-getsocket
Executable file
4
.config/eww/scripts/hypr/hyprland-getsocket
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
tmp=/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock
|
||||||
|
[ -f $tmp ] && echo $tmp || echo $XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock
|
7
.config/eww/scripts/hypr/workspace-active-listener
Executable file
7
.config/eww/scripts/hypr/workspace-active-listener
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# REF: https://github.com/Mango0x45/dotfiles/blob/d62026673b0b833f27b85f8a551cb646ae2bd751/.config/eww/scripts/active-workspace-listener
|
||||||
|
|
||||||
|
readonly IPC=$(./scripts/hypr/hyprland-getsocket)
|
||||||
|
|
||||||
|
hyprctl -j activeworkspace | jq -r '.name'
|
||||||
|
socat -u UNIX-CONNECT:"$IPC" - | sed -n 's/^workspace>>//p'
|
22
.config/eww/scripts/hypr/workspace-list-listener
Executable file
22
.config/eww/scripts/hypr/workspace-list-listener
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# REF: https://github.com/Mango0x45/dotfiles/blob/d620266/.config/eww/scripts/workspace-list-listener
|
||||||
|
|
||||||
|
readonly IPC=$(./scripts/hypr/hyprland-getsocket)
|
||||||
|
|
||||||
|
ws="`hyprctl -j workspaces | jq -r 'sort_by(.id) | .[] | .name'`"
|
||||||
|
jo -a $ws
|
||||||
|
|
||||||
|
socat -u UNIX-CONNECT:"$IPC" - \
|
||||||
|
| stdbuf -oL grep -E '^(create|destroy)workspace>>' \
|
||||||
|
| while IFS='>>' read -r e _ n
|
||||||
|
do
|
||||||
|
case "$e" in
|
||||||
|
c*)
|
||||||
|
ws="`printf '%s\n%s\n' "$ws" $n | sort -n`"
|
||||||
|
;;
|
||||||
|
d*)
|
||||||
|
ws="`echo "$ws" | grep -v "^$n$"`"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
jo -a $ws
|
||||||
|
done
|
|
@ -1,15 +1,17 @@
|
||||||
|
exec-once = /usr/lib/polkit-kde-authentication-agent-1
|
||||||
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 = xrdb ${XDG_CONFIG_HOME:-$HOME/.config}/Xresources
|
exec-once = xrdb ${XDG_CONFIG_HOME:-$HOME/.config}/Xresources
|
||||||
exec-once = waybar
|
exec-once = eww-launch
|
||||||
exec-once = unclutter
|
exec-once = unclutter
|
||||||
exec-once = dunst
|
exec-once = dunst
|
||||||
exec-once = numlockx
|
exec-once = numlockx
|
||||||
exec-once = lxpolkit
|
exec-once = lxpolkit
|
||||||
exec-once = nitrogen --restore
|
|
||||||
exec-once = fcitx5 -d
|
exec-once = fcitx5 -d
|
||||||
|
exec-once = xsettingsd &
|
||||||
#exec-once = mpvpaper -vs -o "no-audio loop" VGA-1 /home/ziro/my\ Files/Wallpaper/HoloLive/Torii\ Gate/Torii\ Gate.webm &
|
#exec-once = mpvpaper -vs -o "no-audio loop" VGA-1 /home/ziro/my\ Files/Wallpaper/HoloLive/Torii\ Gate/Torii\ Gate.webm &
|
||||||
|
exec-once = swww query || sleep 1; swww init --format xrgb && swww img -t none $HOME/Wallpaper/HoloLive/Torii\ Gate/Torii\ Gate.gif
|
||||||
|
|
||||||
monitor=,preferred,auto,auto
|
monitor=,preferred,auto,1
|
||||||
|
|
||||||
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||||
input {
|
input {
|
||||||
|
@ -21,9 +23,7 @@ input {
|
||||||
|
|
||||||
follow_mouse = 1
|
follow_mouse = 1
|
||||||
|
|
||||||
touchpad {
|
natural_scroll = yes
|
||||||
natural_scroll = no
|
|
||||||
}
|
|
||||||
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
}
|
}
|
||||||
|
@ -40,10 +40,12 @@ general {
|
||||||
|
|
||||||
decoration {
|
decoration {
|
||||||
rounding = 5
|
rounding = 5
|
||||||
blur = yes
|
blur {
|
||||||
blur_size = 3
|
enabled = 0
|
||||||
blur_passes = 1
|
size = 3
|
||||||
blur_new_optimizations = on
|
passes = 1
|
||||||
|
new_optimizations = 1
|
||||||
|
}
|
||||||
|
|
||||||
drop_shadow = yes
|
drop_shadow = yes
|
||||||
shadow_range = 4
|
shadow_range = 4
|
||||||
|
@ -91,6 +93,18 @@ master {
|
||||||
# ========================
|
# ========================
|
||||||
#windowrule = unset,^(Spotify)$
|
#windowrule = unset,^(Spotify)$
|
||||||
#windowrule = tile,^(Spotify)$
|
#windowrule = tile,^(Spotify)$
|
||||||
|
# >> Waydroid bullshit
|
||||||
|
windowrulev2 = stayfocused,title:^(XtMapper)$
|
||||||
|
windowrulev2 = noblur,title:^(XtMapper)$
|
||||||
|
windowrulev2 = float,title:^(XtMapper)$
|
||||||
|
windowrulev2 = move 0 28,title:^(XtMapper)$
|
||||||
|
windowrulev2 = rounding 0,title:^(XtMapper)$
|
||||||
|
#windowrulev2 = maxsize 1366 734,title:^(XtMapper)$
|
||||||
|
#windowrulev2 = minsize 1366 734,title:^(XtMapper)$
|
||||||
|
# <<
|
||||||
|
windowrulev2 = noblur,title:^(flameshot)$
|
||||||
|
windowrulev2 = float,title:^(flameshot)$
|
||||||
|
windowrulev2 = noanim,title:^(flameshot)$ # still fading when it closes, but close enough
|
||||||
|
|
||||||
# Alt Key = Mostly for terminals only
|
# Alt Key = Mostly for terminals only
|
||||||
$mainMod = SUPER # Super Key = General MOD for WM
|
$mainMod = SUPER # Super Key = General MOD for WM
|
||||||
|
@ -100,7 +114,17 @@ $spaceMod = SUPER SHIFT # Super + Shift = MOD key(s) that control/modify the Wo
|
||||||
bind = $mainMod, T, exec, kitty
|
bind = $mainMod, T, exec, kitty
|
||||||
bind = $mainMod, Q, killactive,
|
bind = $mainMod, Q, killactive,
|
||||||
bind = $mainMod, B, exec, $BROWSER
|
bind = $mainMod, B, exec, $BROWSER
|
||||||
bind = , Print, exec, grim -g "$(slurp)" - | wl-copy
|
# >> In case flameshot stop working again
|
||||||
|
#bind = , Print, exec, grim -g "$(slurp)" - | wl-copy
|
||||||
|
# <<
|
||||||
|
# >> Commented because flameshot clipboard support for wayland is buggy, probably because they use KDE's clipboard library
|
||||||
|
# I'll be feeding flameshot's raw output to wl-copy for now
|
||||||
|
#bind = , Print, exec, env XDG_CURRENT_DESKTOP="sway" flameshot gui
|
||||||
|
# <<
|
||||||
|
# >> zi-copy is a custom private script
|
||||||
|
# It basically prompt me if I want to upload the result to S3 (using s3cmd) before copying to clipboard or not
|
||||||
|
bind = , Print, exec, env XDG_CURRENT_DESKTOP="sway" flameshot gui --raw | $(zi-copy || wl-copy)
|
||||||
|
# <<
|
||||||
bind = $mainMod, Space, exec, exec `tofi-run` 2>/dev/null
|
bind = $mainMod, Space, exec, exec `tofi-run` 2>/dev/null
|
||||||
bind = $metaMod, Q, exit,
|
bind = $metaMod, Q, exit,
|
||||||
bind = $metaMod, F, togglefloating,
|
bind = $metaMod, F, togglefloating,
|
||||||
|
@ -145,3 +169,27 @@ bind = $mainMod, mouse_up, workspace, e-1
|
||||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
bindm = $mainMod, mouse:272, movewindow
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
env = GDK_BACKEND,wayland,x11
|
||||||
|
env = SDL_VIDEODRIVER,wayland
|
||||||
|
env = CLUTTER_BACKEND,wayland
|
||||||
|
env = MOZ_ENABLE_WAYLAND,1
|
||||||
|
env = MOZ_DISABLE_RDD_SANDBOX,1
|
||||||
|
env = _JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
||||||
|
env = QT_QPA_PLATFORM,wayland
|
||||||
|
env = LIBVA_DRIVER_NAME,nvidia
|
||||||
|
env = GBM_BACKEND,nvidia-drm
|
||||||
|
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||||
|
env = WLR_NO_HARDWARE_CURSORS,1
|
||||||
|
env = __NV_PRIME_RENDER_OFFLOAD,1
|
||||||
|
env = __VK_LAYER_NV_optimus,NVIDIA_only
|
||||||
|
env = PROTON_ENABLE_NGX_UPDATER,1
|
||||||
|
env = NVD_BACKEND,direct
|
||||||
|
env = __GL_GSYNC_ALLOWED,1
|
||||||
|
env = __GL_VRR_ALLOWED,1
|
||||||
|
env = WLR_DRM_NO_ATOMIC,1
|
||||||
|
env = WLR_USE_LIBINPUT,1
|
||||||
|
env = XWAYLAND_NO_GLAMOR,1 # with this you'll need to use gamescope for gaming
|
||||||
|
env = __GL_MaxFramesAllowed,1
|
||||||
|
env = WLR_RENDERER_ALLOW_SOFTWARE,1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
font_family IosevkaNerdFontComplete-Term
|
font_family monospace
|
||||||
bold_font IosevkaNerdFontComplete-Bold
|
bold_font auto
|
||||||
italic_font IosevkaNerdFontComplete-Italic
|
italic_font auto
|
||||||
bold_italic_font auto
|
bold_italic_font auto
|
||||||
font_size 10
|
font_size 10
|
||||||
adjust_line_height 0
|
adjust_line_height 0
|
||||||
|
|
56
.config/mouseless/config.yaml
Normal file
56
.config/mouseless/config.yaml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
# the keyboard devices it reads from, if no devices are specified, it reads from all
|
||||||
|
devices:
|
||||||
|
#- "/dev/input/by-id/usb-SEMICO_USB_Gaming_Keyboard-event-kbd"
|
||||||
|
#- "/dev/input/by-id/usb-1bcf_08a0-event-kbd"
|
||||||
|
|
||||||
|
# this is executed when mouseless starts, e.g. useful for setting the keyboard layout
|
||||||
|
# startCommand: "setxkbmap de"
|
||||||
|
|
||||||
|
# the default speed for mouse movement and scrolling
|
||||||
|
baseMouseSpeed: 750.0
|
||||||
|
baseScrollSpeed: 20.0
|
||||||
|
|
||||||
|
# the time it takes to accelerate to baseMouseSpeed (in ms), 0 to reach top speed immediately
|
||||||
|
mouseAccelerationTime: 200.0
|
||||||
|
# the shape of the acceleration curve, 1.0 is linear, higher values have more time at low speeds
|
||||||
|
mouseAccelerationCurve: 2.0
|
||||||
|
# speed of the mouse when it starts moving
|
||||||
|
startMouseSpeed: 0.0
|
||||||
|
# same for deceleration
|
||||||
|
mouseDecelerationTime: 300.0
|
||||||
|
mouseDecelerationCurve: 3.0
|
||||||
|
|
||||||
|
layers:
|
||||||
|
- name: initial
|
||||||
|
bindings:
|
||||||
|
pause: layer mouse
|
||||||
|
esc: capslock
|
||||||
|
capslock: esc
|
||||||
|
- name: mouse
|
||||||
|
passThrough: true
|
||||||
|
bindings:
|
||||||
|
# quit mouse layer
|
||||||
|
#q: layer initial
|
||||||
|
backspace: layer initial
|
||||||
|
# keep the mouse layer active
|
||||||
|
space: layer game
|
||||||
|
r: reload-config
|
||||||
|
l: move 1 0
|
||||||
|
h: move -1 0
|
||||||
|
j: move 0 1
|
||||||
|
k: move 0 -1
|
||||||
|
rightbrace: scroll up
|
||||||
|
leftbrace: scroll down
|
||||||
|
rightctrl: speed 4.0
|
||||||
|
rightalt: speed 0.2
|
||||||
|
enter: button left
|
||||||
|
backslash: button middle
|
||||||
|
rightshift: button right
|
||||||
|
- name: game
|
||||||
|
passThrough: true
|
||||||
|
bindings:
|
||||||
|
esc: layer initial
|
||||||
|
up: w
|
||||||
|
down: s
|
||||||
|
s: k0
|
||||||
|
w: k6
|
4
.config/npm/npmrc
Normal file
4
.config/npm/npmrc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
prefix=${XDG_DATA_HOME}/npm
|
||||||
|
cache=${XDG_CACHE_HOME}/npm
|
||||||
|
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
|
||||||
|
logs-dir=${XDG_STATE_HOME}/npm/logs
|
23
.config/nvim/init.lua
Normal file
23
.config/nvim/init.lua
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
--========================================--
|
||||||
|
-- ::-----------------------: --
|
||||||
|
-- .--------------------------: --
|
||||||
|
-- :---------------:--------: --
|
||||||
|
-- :------. --
|
||||||
|
-- :------. --
|
||||||
|
-- .------: .::: --
|
||||||
|
-- ------: :----- --
|
||||||
|
-- :------. -----. --
|
||||||
|
-- .------: ... --
|
||||||
|
-- .------: .::. --
|
||||||
|
-- :------. :----: --
|
||||||
|
-- .------. :------. --
|
||||||
|
-- .------: .------. --
|
||||||
|
-- .------: .------: --
|
||||||
|
-- :-------:::::::::::------. --
|
||||||
|
-- :-----------------------: --
|
||||||
|
-- .---------------------: --
|
||||||
|
--========================================--
|
||||||
|
-- null2264's NeoVim Config --
|
||||||
|
--========================================--
|
||||||
|
|
||||||
|
require("null")
|
24
.config/nvim/lazy-lock.json
Normal file
24
.config/nvim/lazy-lock.json
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||||
|
"cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" },
|
||||||
|
"cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" },
|
||||||
|
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
||||||
|
"git-conflict.nvim": { "branch": "main", "commit": "4c8e252b87d54d944c1e56bfb477f78b6fdaf661" },
|
||||||
|
"indent-blankline.nvim": { "branch": "master", "commit": "3d08501caef2329aba5121b753e903904088f7e6" },
|
||||||
|
"lazy.nvim": { "branch": "main", "commit": "bef521ac89c8d423f9d092e37b58e8af0c099309" },
|
||||||
|
"lualine.nvim": { "branch": "master", "commit": "0a5a66803c7407767b799067986b4dc3036e1983" },
|
||||||
|
"neo-tree.nvim": { "branch": "v3.x", "commit": "7aad1bf3f6b849cbf108e02c55ad4d701cb4d33a" },
|
||||||
|
"nui.nvim": { "branch": "main", "commit": "cbd2668414331c10039278f558630ed19b93e69b" },
|
||||||
|
"nvim-cmp": { "branch": "main", "commit": "ce16de5665c766f39c271705b17fff06f7bcb84f" },
|
||||||
|
"nvim-lspconfig": { "branch": "master", "commit": "9266dc26862d8f3556c2ca77602e811472b4c5b8" },
|
||||||
|
"nvim-treesitter": { "branch": "master", "commit": "3e10cffbb2a022cd8e2aaea9f4fffb514065e77c" },
|
||||||
|
"nvim-web-devicons": { "branch": "master", "commit": "b3468391470034353f0e5110c70babb5c62967d3" },
|
||||||
|
"oil.nvim": { "branch": "master", "commit": "e462a3446505185adf063566f5007771b69027a1" },
|
||||||
|
"plenary.nvim": { "branch": "master", "commit": "8aad4396840be7fc42896e3011751b7609ca4119" },
|
||||||
|
"todo-comments.nvim": { "branch": "main", "commit": "a7e39ae9e74f2c8c6dc4eea6d40c3971ae84752d" },
|
||||||
|
"tokyonight.nvim": { "branch": "main", "commit": "9bf9ec53d5e87b025e2404069b71e7ebdc3a13e5" },
|
||||||
|
"tree-sitter-gsp": { "branch": "master", "commit": "1f10ff9a6039a50e2f7be394fc22b1400832cf17" },
|
||||||
|
"vim-commentary": { "branch": "master", "commit": "c4b8f52cbb7142ec239494e5a2c4a512f92c4d07" },
|
||||||
|
"vim-startuptime": { "branch": "master", "commit": "ac2cccb5be617672add1f4f3c0a55ce99ba34e01" },
|
||||||
|
"vim-wakatime": { "branch": "master", "commit": "5d11a253dd1ecabd4612a885175216032d814300" }
|
||||||
|
}
|
30
.config/nvim/lua/null/config.lua
Normal file
30
.config/nvim/lua/null/config.lua
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
local o = vim.opt
|
||||||
|
local g = vim.g
|
||||||
|
|
||||||
|
o.encoding = "utf-8"
|
||||||
|
o.hls = true
|
||||||
|
|
||||||
|
o.number = true
|
||||||
|
o.relativenumber = true
|
||||||
|
o.cursorline = true
|
||||||
|
o.cursorlineopt = "number"
|
||||||
|
|
||||||
|
o.ignorecase = true
|
||||||
|
o.smartcase = true
|
||||||
|
o.mouse = "a"
|
||||||
|
o.splitbelow = true
|
||||||
|
o.splitright = true
|
||||||
|
|
||||||
|
o.list = true
|
||||||
|
-- > Visualize indent trails with dots
|
||||||
|
o.listchars:append("space:⋅")
|
||||||
|
o.listchars:append("trail:⋅")
|
||||||
|
o.listchars:append("tab:▎―")
|
||||||
|
-- > Remove ugly tilde at the end of a file
|
||||||
|
-- > REF: https://vi.stackexchange.com/a/29181
|
||||||
|
o.fillchars:append("eob: ")
|
||||||
|
|
||||||
|
g.mapleader = " "
|
||||||
|
g.guifont = { "Sarasa UI J", ":h16" }
|
||||||
|
|
||||||
|
require("null.remap")
|
6
.config/nvim/lua/null/init.lua
Normal file
6
.config/nvim/lua/null/init.lua
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
-- vim_uni
|
||||||
|
require("null.config")
|
||||||
|
-- vim_plug
|
||||||
|
require("null.plug")
|
||||||
|
-- vim_nix
|
||||||
|
require("null.nix") -- n*x specific stuff
|
8
.config/nvim/lua/null/nix.lua
Normal file
8
.config/nvim/lua/null/nix.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
local o = vim.opt
|
||||||
|
local g = vim.g
|
||||||
|
|
||||||
|
o.undodir = vim.fn.stdpath("data") .. "/null/undo"
|
||||||
|
o.undofile = true
|
||||||
|
o.directory = vim.fn.stdpath("data") .. "/null/swap"
|
||||||
|
o.backupdir = vim.fn.stdpath("data") .. "/null/backup"
|
||||||
|
o.viewdir = vim.fn.stdpath("data") .. "/null/view"
|
3
.config/nvim/lua/null/plug.lua
Normal file
3
.config/nvim/lua/null/plug.lua
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
local util = require("null.util")
|
||||||
|
|
||||||
|
util.getch_lazy_nvim().setup("null.plugins")
|
131
.config/nvim/lua/null/plugins/completion.lua
Normal file
131
.config/nvim/lua/null/plugins/completion.lua
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
lazy = true,
|
||||||
|
config = function ()
|
||||||
|
local lsp = require("lspconfig")
|
||||||
|
lsp.pyright.setup{}
|
||||||
|
-- lsp.jedi_language_server.setup{}
|
||||||
|
lsp.rust_analyzer.setup({
|
||||||
|
settings = {
|
||||||
|
["rust-analyzer"] = {
|
||||||
|
assist = {
|
||||||
|
importGranularity = "module",
|
||||||
|
importPrefix = "by_self",
|
||||||
|
},
|
||||||
|
cargo = {
|
||||||
|
loadOutDirsFromCheck = true
|
||||||
|
},
|
||||||
|
procMacro = {
|
||||||
|
enable = true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hrsh7th/nvim-cmp",
|
||||||
|
event = { "InsertEnter", "CmdlineEnter" },
|
||||||
|
dependencies = {
|
||||||
|
"hrsh7th/cmp-nvim-lsp",
|
||||||
|
"hrsh7th/cmp-buffer",
|
||||||
|
"hrsh7th/cmp-path",
|
||||||
|
"hrsh7th/cmp-cmdline",
|
||||||
|
},
|
||||||
|
config = function ()
|
||||||
|
-- From vimrc, may need clean up
|
||||||
|
local cmp = require("cmp")
|
||||||
|
|
||||||
|
local has_words_before = function()
|
||||||
|
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
||||||
|
end
|
||||||
|
|
||||||
|
cmp.setup({
|
||||||
|
snippet = {
|
||||||
|
-- REQUIRED - you must specify a snippet engine
|
||||||
|
expand = function(args)
|
||||||
|
-- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
|
||||||
|
-- require("luasnip").lsp_expand(args.body) -- For `luasnip` users.
|
||||||
|
-- require("snippy").expand_snippet(args.body) -- For `snippy` users.
|
||||||
|
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
-- completion = cmp.config.window.bordered(),
|
||||||
|
-- documentation = cmp.config.window.bordered(),
|
||||||
|
},
|
||||||
|
mapping = cmp.mapping.preset.insert({
|
||||||
|
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
||||||
|
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
||||||
|
["<C-Space>"] = cmp.mapping.complete(),
|
||||||
|
["<C-e>"] = cmp.mapping.abort(),
|
||||||
|
["<CR>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() and not cmp.confirm() then
|
||||||
|
cmp.abort()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {"i", "s"}),
|
||||||
|
["<Tab>"] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
-- elseif has_words_before() then
|
||||||
|
-- cmp.complete()
|
||||||
|
else
|
||||||
|
fallback() -- The fallback function sends a already mapped key. In this case, it"s probably `<Tab>`.
|
||||||
|
end
|
||||||
|
end, { "i", "s" }),
|
||||||
|
["<S-Tab>"] = cmp.mapping(function()
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
end
|
||||||
|
end, { "i", "s" }),
|
||||||
|
}),
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = "nvim_lsp" },
|
||||||
|
-- { name = "vsnip" }, -- For vsnip users.
|
||||||
|
-- { name = "luasnip" }, -- For luasnip users.
|
||||||
|
-- { name = "ultisnips" }, -- For ultisnips users.
|
||||||
|
-- { name = "snippy" }, -- For snippy users.
|
||||||
|
}, {
|
||||||
|
{ name = "buffer" },
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Set configuration for specific filetype.
|
||||||
|
cmp.setup.filetype("gitcommit", {
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = "cmp_git" }, -- You can specify the `cmp_git` source if you were installed it.
|
||||||
|
}, {
|
||||||
|
{ name = "buffer" },
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Use buffer source for `/` (if you enabled `native_menu`, this won"t work anymore).
|
||||||
|
cmp.setup.cmdline("/", {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = {
|
||||||
|
{ name = "buffer" }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Use cmdline & path source for ":" (if you enabled `native_menu`, this won"t work anymore).
|
||||||
|
cmp.setup.cmdline(":", {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = "path" }
|
||||||
|
}, {
|
||||||
|
{ name = "cmdline" }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Setup lspconfig.
|
||||||
|
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||||
|
require("lspconfig")["pyright"].setup {
|
||||||
|
capabilities = capabilities
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
35
.config/nvim/lua/null/plugins/file-explorer.lua
Normal file
35
.config/nvim/lua/null/plugins/file-explorer.lua
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"nvim-neo-tree/neo-tree.nvim", -- I'll be using oil.nvim, but for better visual I'll keep this
|
||||||
|
keys = {
|
||||||
|
{ "<C-n>", "<cmd>Neotree toggle<cr>", desc = "NeoTree" },
|
||||||
|
},
|
||||||
|
branch = "v3.x",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
"nvim-tree/nvim-web-devicons",
|
||||||
|
"MunifTanjim/nui.nvim",
|
||||||
|
},
|
||||||
|
config = function ()
|
||||||
|
require("neo-tree").setup({
|
||||||
|
close_if_last_window = true,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stevearc/oil.nvim",
|
||||||
|
lazy = false,
|
||||||
|
keys = {
|
||||||
|
{ "-", "<cmd>Oil<cr>", desc = "Oil" },
|
||||||
|
},
|
||||||
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
|
config = function ()
|
||||||
|
require("oil").setup({
|
||||||
|
default_file_explorer = true,
|
||||||
|
keymaps = {
|
||||||
|
["q"] = "actions.close",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
},
|
||||||
|
}
|
86
.config/nvim/lua/null/plugins/init.lua
Normal file
86
.config/nvim/lua/null/plugins/init.lua
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
return {
|
||||||
|
{ "wakatime/vim-wakatime", lazy = false },
|
||||||
|
{
|
||||||
|
-- FIXME: Use my own colourscheme
|
||||||
|
"folke/tokyonight.nvim",
|
||||||
|
lazy = false,
|
||||||
|
priority = 1000,
|
||||||
|
config = function ()
|
||||||
|
require("tokyonight").setup({
|
||||||
|
style = "moon",
|
||||||
|
transparent = true,
|
||||||
|
styles = {
|
||||||
|
sidebars = "transparent"
|
||||||
|
},
|
||||||
|
on_highlights = function (hl, c)
|
||||||
|
hl.CursorLineNr = { fg = c.yellow, bold = true }
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.cmd([[colorscheme tokyonight-moon]])
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-lualine/lualine.nvim",
|
||||||
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
|
config = function ()
|
||||||
|
local _progress = require("lualine.components.progress")
|
||||||
|
local progress = function ()
|
||||||
|
return "☰ " .. _progress()
|
||||||
|
end
|
||||||
|
local _location = require("lualine.components.location")
|
||||||
|
local location = function ()
|
||||||
|
return "" .. _location()
|
||||||
|
end
|
||||||
|
require("lualine").setup {
|
||||||
|
options = {
|
||||||
|
theme = "tokyonight", -- FIXME: Use my own colourscheme
|
||||||
|
-- theme = "zi",
|
||||||
|
section_separators = "",
|
||||||
|
component_separators = "",
|
||||||
|
},
|
||||||
|
extensions = {"neo-tree", "oil", "lazy"},
|
||||||
|
sections = {
|
||||||
|
lualine_a = {"mode"},
|
||||||
|
lualine_b = {"branch", "diff", "diagnostics"},
|
||||||
|
lualine_c = {"filename"},
|
||||||
|
lualine_x = {location},
|
||||||
|
lualine_y = {progress},
|
||||||
|
lualine_z = {"encoding", "fileformat", "filetype"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tpope/vim-commentary", -- shortcut to comment a line
|
||||||
|
keys = {
|
||||||
|
{ "gc", mode = { "n", "v", "i" } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dstein64/vim-startuptime",
|
||||||
|
cmd = "StartupTime", -- Note to self: lazy load on command
|
||||||
|
init = function ()
|
||||||
|
-- Note to self: init is called during startup. Configuration for vim plugins typically should be set in an init function
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
|
main = "ibl",
|
||||||
|
config = function ()
|
||||||
|
require("ibl").setup()
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"folke/todo-comments.nvim",
|
||||||
|
cmd = { "TodoTrouble", "TodoTelescope" },
|
||||||
|
event = "LazyFile",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
config = true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"akinsho/git-conflict.nvim",
|
||||||
|
event = "LazyFile",
|
||||||
|
version = "*",
|
||||||
|
config = true,
|
||||||
|
},
|
||||||
|
}
|
61
.config/nvim/lua/null/plugins/treesitter.lua
Normal file
61
.config/nvim/lua/null/plugins/treesitter.lua
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
require("null.util").lazy_file()
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
build = ":TSUpdate",
|
||||||
|
event = { "LazyFile", "VeryLazy" },
|
||||||
|
opts = {
|
||||||
|
ensure_installed = {
|
||||||
|
"c",
|
||||||
|
"elixir",
|
||||||
|
"fluent",
|
||||||
|
"go",
|
||||||
|
"gsp",
|
||||||
|
"hyprlang",
|
||||||
|
"json5",
|
||||||
|
"julia",
|
||||||
|
-- "latex",
|
||||||
|
"python",
|
||||||
|
"rust",
|
||||||
|
"sxhkdrc",
|
||||||
|
},
|
||||||
|
|
||||||
|
sync_install = false,
|
||||||
|
auto_install = true,
|
||||||
|
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
additional_vim_regex_highlighting = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
config = function (_, opts)
|
||||||
|
local config = require("nvim-treesitter.parsers").get_parser_configs()
|
||||||
|
config.gsp = {
|
||||||
|
install_info = {
|
||||||
|
url = "https://git.sr.ht/~mango/tree-sitter-gsp",
|
||||||
|
files = {"src/parser.c"},
|
||||||
|
},
|
||||||
|
filetype = "gsp",
|
||||||
|
}
|
||||||
|
config.fluent = {
|
||||||
|
install_info = {
|
||||||
|
url = "https://github.com/projectfluent/tree-sitter-fluent", -- local path or git repo
|
||||||
|
files = {"src/parser.c"}, -- note that some parsers also require src/scanner.c or src/scanner.cc
|
||||||
|
},
|
||||||
|
filetype = "fluent", -- if filetype does not match the parser name
|
||||||
|
}
|
||||||
|
vim.filetype.add({
|
||||||
|
extension = { rasi = "rasi" },
|
||||||
|
pattern = {
|
||||||
|
[".*/hypr/.*%.conf"] = "hyprlang",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require("nvim-treesitter.configs").setup(opts)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url = "https://git.sr.ht/~mango/tree-sitter-gsp",
|
||||||
|
fp = "gsp",
|
||||||
|
},
|
||||||
|
}
|
39
.config/nvim/lua/null/remap.lua
Normal file
39
.config/nvim/lua/null/remap.lua
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
-- Loaded by `null.config`
|
||||||
|
local map = require("null.util").map
|
||||||
|
|
||||||
|
-- Map Ctrl+U as U so it can be used as redo
|
||||||
|
map("n", "<C-u>", "U")
|
||||||
|
-- Map U as redo
|
||||||
|
map("n", "U", "<C-r>")
|
||||||
|
|
||||||
|
-- Yank and Put
|
||||||
|
map("n", "<C-y>", '"+y')
|
||||||
|
map("n", "<C-p>", '"+p')
|
||||||
|
map("n", "<C-Y>", '"+y')
|
||||||
|
map("n", "<C-P>", '"+p')
|
||||||
|
|
||||||
|
-- Comment a line like how it is on VSC (using vim-commentary)
|
||||||
|
map("n", "<C-/>", "gcc", { remap = true })
|
||||||
|
map("v", "<C-/>", "gc", { remap = true })
|
||||||
|
map("i", "<C-/>", "<esc>gcc", { remap = true })
|
||||||
|
|
||||||
|
-- Normal command shortcut for VISUAL mode
|
||||||
|
map("v", ".", ":normal .<cr>")
|
||||||
|
|
||||||
|
-- Clear search
|
||||||
|
map("n", "<leader>c", "<cmd>noh<cr>")
|
||||||
|
|
||||||
|
-- Navigate splits
|
||||||
|
map("n", "<C-h>", "<C-w>h")
|
||||||
|
map("n", "<C-j>", "<C-w>j")
|
||||||
|
map("n", "<C-k>", "<C-w>k")
|
||||||
|
map("n", "<C-l>", "<C-w>l")
|
||||||
|
|
||||||
|
-- Ctrl+P or Ctrl+N alternatives
|
||||||
|
-- map("i", "<expr><Up>", vim.fn.pumvisible() == 1 and "<C-n>" or "<Up>")
|
||||||
|
-- map("i", "<expr><Down>", vim.fn.pumvisible() == 1 and "<C-p>" or "<Down>")
|
||||||
|
-- map("i", "<expr><Tab>", vim.fn.pumvisible() == 1 and "<C-n>" or "<Tab>")
|
||||||
|
-- map("i", "<expr><S-Tab>", vim.fn.pumvisible() == 1 and "<C-p>" or "<S-Tab>")
|
||||||
|
|
||||||
|
-- Enter to complete
|
||||||
|
-- map("i", "<expr><cr>", vim.fn.pumvisible() == 1 and "<C-y>" or "<cr>")
|
103
.config/nvim/lua/null/util.lua
Normal file
103
.config/nvim/lua/null/util.lua
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.getch_lazy_nvim() -- Get or Fetch lazy.nvim
|
||||||
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
|
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||||
|
vim.fn.system({
|
||||||
|
"git",
|
||||||
|
"clone",
|
||||||
|
"--filter=blob:none",
|
||||||
|
"https://github.com/folke/lazy.nvim.git",
|
||||||
|
"--branch=stable", -- latest stable release
|
||||||
|
lazypath,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
return require("lazy")
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.map(modes, key, target, opts)
|
||||||
|
local mt = {}
|
||||||
|
|
||||||
|
for mode in modes:gmatch"." do
|
||||||
|
table.insert(mt, mode)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set(mt, key, target, opts or {
|
||||||
|
noremap = true,
|
||||||
|
silent = true,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- <<[LAZY] REF: https://github.com/LazyVim/LazyVim/blob/7a5dbea/lua/lazyvim/util/plugin.lua#L59-L124
|
||||||
|
-- Properly load file based plugins without blocking the UI
|
||||||
|
function M.lazy_file()
|
||||||
|
M.use_lazy_file = M.use_lazy_file and vim.fn.argc(-1) > 0
|
||||||
|
|
||||||
|
-- Add support for the LazyFile event
|
||||||
|
local Event = require("lazy.core.handler.event")
|
||||||
|
|
||||||
|
if M.use_lazy_file then
|
||||||
|
-- We'll handle delayed execution of events ourselves
|
||||||
|
Event.mappings.LazyFile = { id = "LazyFile", event = "User", pattern = "LazyFile" }
|
||||||
|
Event.mappings["User LazyFile"] = Event.mappings.LazyFile
|
||||||
|
else
|
||||||
|
-- Don't delay execution of LazyFile events, but let lazy know about the mapping
|
||||||
|
Event.mappings.LazyFile = { id = "LazyFile", event = { "BufReadPost", "BufNewFile", "BufWritePre" } }
|
||||||
|
Event.mappings["User LazyFile"] = Event.mappings.LazyFile
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local events = {} ---@type {event: string, buf: number, data?: any}[]
|
||||||
|
|
||||||
|
local done = false
|
||||||
|
local function load()
|
||||||
|
if #events == 0 or done then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
done = true
|
||||||
|
vim.api.nvim_del_augroup_by_name("lazy_file")
|
||||||
|
|
||||||
|
---@type table<string,string[]>
|
||||||
|
local skips = {}
|
||||||
|
for _, event in ipairs(events) do
|
||||||
|
skips[event.event] = skips[event.event] or Event.get_augroups(event.event)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_exec_autocmds("User", { pattern = "LazyFile", modeline = false })
|
||||||
|
for _, event in ipairs(events) do
|
||||||
|
if vim.api.nvim_buf_is_valid(event.buf) then
|
||||||
|
Event.trigger({
|
||||||
|
event = event.event,
|
||||||
|
exclude = skips[event.event],
|
||||||
|
data = event.data,
|
||||||
|
buf = event.buf,
|
||||||
|
})
|
||||||
|
if vim.bo[event.buf].filetype then
|
||||||
|
Event.trigger({
|
||||||
|
event = "FileType",
|
||||||
|
buf = event.buf,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.api.nvim_exec_autocmds("CursorMoved", { modeline = false })
|
||||||
|
events = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- schedule wrap so that nested autocmds are executed
|
||||||
|
-- and the UI can continue rendering without blocking
|
||||||
|
load = vim.schedule_wrap(load)
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd(M.lazy_file_events, {
|
||||||
|
group = vim.api.nvim_create_augroup("lazy_file", { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
table.insert(events, event)
|
||||||
|
load()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
-- >>[LAZY]
|
||||||
|
|
||||||
|
return M
|
10
.config/paru/paru.conf
Normal file
10
.config/paru/paru.conf
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[bin]
|
||||||
|
Sudo = doas
|
||||||
|
|
||||||
|
[z]
|
||||||
|
Url = https://github.com/null2264/pkgbuilds/
|
||||||
|
|
||||||
|
[zl]
|
||||||
|
Depth = 2
|
||||||
|
SkipReview
|
||||||
|
Path = /home/ziro/Build/GIT/pkgbuilds/
|
|
@ -1,71 +0,0 @@
|
||||||
function UsernameAtComputer
|
|
||||||
{
|
|
||||||
if (! "$env:ComputerName" -eq "") {
|
|
||||||
$compname = $env:ComputerName
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$compname = "unknown"
|
|
||||||
}
|
|
||||||
if (! "$env:UserName" -eq "") {
|
|
||||||
$username = $env:UserName
|
|
||||||
}
|
|
||||||
if (! "$env:USER" -eq "") {
|
|
||||||
$username = $env:USER
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$username = "unknown"
|
|
||||||
}
|
|
||||||
"`e[35;1m" + $username + "`e[0m`e[1m@" + "`e[35;1m" + $compname
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----- set default color
|
|
||||||
Set-PSReadlineOption -Colors @{ Parameter = "`e[96m"}
|
|
||||||
Set-PSReadlineOption -Colors @{ Operator = "`e[96m"}
|
|
||||||
Set-PSReadlineOption -Colors @{ String = "`e[93m"}
|
|
||||||
|
|
||||||
# ----- Messy function to make it looks like my zsh theme / git support
|
|
||||||
function Git-Status
|
|
||||||
{
|
|
||||||
"$([char]27)[31m"
|
|
||||||
if ((git status --porcelain -b 2>$1 | Select-String -Pattern 'M ') -notmatch 'fatal') {
|
|
||||||
"!"
|
|
||||||
}
|
|
||||||
if ((git status --porcelain -b 2>$1 | Select-String -Pattern '\# ') -notmatch 'fatal') {
|
|
||||||
"⇡"
|
|
||||||
}
|
|
||||||
if ((git status --porcelain -b 2>$1 | Select-String -Pattern '\? ') -notmatch 'fatal') {
|
|
||||||
"?"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function Git-Branch
|
|
||||||
{
|
|
||||||
" $([char]27)[35m " + (git branch --show-current)
|
|
||||||
}
|
|
||||||
function getdir
|
|
||||||
{
|
|
||||||
# ((Get-Location) -replace '[a-zA-Z].\\','~\') # change 'c:/' into '~' (optional)
|
|
||||||
((Get-Location) -replace '/home/[a-zA-Z]*','~') # change '/home/<username>' into '~'
|
|
||||||
}
|
|
||||||
function end_of_prompt
|
|
||||||
{
|
|
||||||
"
|
|
||||||
$([char]27)[32;1m$> $([char]27)[0m"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----- Foreground (the thing that actually shows up)
|
|
||||||
function prompt
|
|
||||||
{
|
|
||||||
if ((git log -n 1 2>$1) -notmatch 'fatal') {
|
|
||||||
"
|
|
||||||
$([char]27)[34;1m" + $env:COMPUTERNAME + "" + (getdir) + (Git-Branch) + " " + ("$(Git-Status)" -replace ' ','') + (end_of_prompt)
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
"
|
|
||||||
$([char]27)[34;1m" + $env:COMPUTERNAME + "" + (getdir) + (end_of_prompt)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----- Aliases
|
|
||||||
New-Alias vim nvim
|
|
||||||
function q{exit}
|
|
|
@ -1 +1 @@
|
||||||
/home/ziro/.config/tdm/extra/hyprland
|
/home/ziro/.config/tdm/sessions/Gamescope
|
|
@ -1,49 +0,0 @@
|
||||||
" vim: filetype=vim
|
|
||||||
" ==============================
|
|
||||||
" ________ ++ ________
|
|
||||||
" /VVVVVVVV\++++ /VVVVVVVV\
|
|
||||||
" \VVVVVVVV/++++++\VVVVVVVV/
|
|
||||||
" |VVVVVV|++++++++/VVVVV/'
|
|
||||||
" |VVVVVV|++++++/VVVVV/'
|
|
||||||
" +|VVVVVV|++++/VVVVV/'+
|
|
||||||
" +++|VVVVVV|++/VVVVV/'+++++
|
|
||||||
"+++++|VVVVVV|/VVVVV/'+++++++++
|
|
||||||
" +++|VVVVVVVVVVV/'+++++++++
|
|
||||||
" +|VVVVVVVVV/'+++++++++
|
|
||||||
" |VVVVVVV/'+++++++++
|
|
||||||
" |VVVVV/'+++++++++
|
|
||||||
" |VVV/'+++++++++
|
|
||||||
" 'V/' ++++++
|
|
||||||
" ++
|
|
||||||
" ==============================
|
|
||||||
" null2264's VIMRC
|
|
||||||
" ==============================
|
|
||||||
" NeoVIM is recommended! This vimrc created inside NeoVIM and not tested on
|
|
||||||
" VIM
|
|
||||||
|
|
||||||
" ----- Sourcing Mapping/Config
|
|
||||||
|
|
||||||
" Automatically source config for the correct OS
|
|
||||||
" NOTE: By default the directory of Windows config will be located on
|
|
||||||
" "C:\_config\vim"
|
|
||||||
if has('win64') || has('win32') || has('win16')
|
|
||||||
" Windows
|
|
||||||
so C:\_config\vim\vim_win
|
|
||||||
" Universal
|
|
||||||
so C:\_config\vim\vim_uni
|
|
||||||
|
|
||||||
" ----- PlugIns
|
|
||||||
if !exists('g:vscode')
|
|
||||||
source C:\_config\vim\vim_plug
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" *nix (Linux/Mac)
|
|
||||||
so ~/.config/vim/vim_nix
|
|
||||||
" Universal
|
|
||||||
so ~/.config/vim/vim_uni
|
|
||||||
|
|
||||||
" ----- PlugIns
|
|
||||||
if !exists('g:vscode')
|
|
||||||
source ~/.config/vim/vim_plug
|
|
||||||
endif
|
|
||||||
endif
|
|
|
@ -1,15 +1,14 @@
|
||||||
// For Arch users: Compile waybar with `-Dexperimental=true` flag!
|
|
||||||
{
|
{
|
||||||
"layer": "top",
|
"layer": "top",
|
||||||
"height": 28, // Waybar height (to be removed for auto height)
|
"height": 28, // Waybar height (to be removed for auto height)
|
||||||
"spacing": 0, // Gaps between modules (4px)
|
"spacing": 0, // Gaps between modules (4px)
|
||||||
"modules-left": ["wlr/workspaces", "custom/media"],
|
"modules-left": ["hyprland/workspaces", "custom/media"],
|
||||||
"modules-center": ["hyprland/window"],
|
"modules-center": ["hyprland/window"],
|
||||||
"modules-right": ["idle_inhibitor", "pulseaudio", "network", "disk", "memory", "temperature", "clock", "tray"],
|
"modules-right": ["idle_inhibitor", "pulseaudio", "network", "disk", "memory", "temperature", "clock", "tray"],
|
||||||
"wlr/workspaces": {
|
"hyprland/workspaces": {
|
||||||
"format": "{icon}",
|
"format": "{id}",
|
||||||
"on-click": "activate",
|
"on-click": "activate",
|
||||||
"sort-by-number": true
|
"sort-by": "number"
|
||||||
},
|
},
|
||||||
"keyboard-state": {
|
"keyboard-state": {
|
||||||
"numlock": true,
|
"numlock": true,
|
||||||
|
|
|
@ -2,5 +2,6 @@
|
||||||
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/xprofile" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/xprofile"
|
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/xprofile" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/xprofile"
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "linux-gnu" ]]; then
|
if [[ "$OSTYPE" == "linux-gnu" ]]; then
|
||||||
exec tdm --xstart
|
# exec tdm --xstart
|
||||||
|
#[[ -n "$XDG_VTNR" && $XDG_VTNR -le 2 ]] && exec tbsm
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -7,7 +7,7 @@ if [[ "$OSTYPE" == "linux-gnu" ]]; then
|
||||||
xset s off -dpms
|
xset s off -dpms
|
||||||
|
|
||||||
# Set cpu-governor to performance (Sometime it still set to powersave)
|
# Set cpu-governor to performance (Sometime it still set to powersave)
|
||||||
cpupower frequency-set -g performance
|
#cpupower frequency-set -g performance
|
||||||
|
|
||||||
# Slow app startup fix (for flatpaks)
|
# Slow app startup fix (for flatpaks)
|
||||||
dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
|
dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
|
||||||
|
|
|
@ -1,157 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST. We use TERM instead of TMUX because TERM
|
|
||||||
# gets passed through ssh.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]]; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]]; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function load_version() {
|
|
||||||
if [ -z ${IMGCAT_BASE64_VERSION+x} ]; then
|
|
||||||
IMGCAT_BASE64_VERSION=$(base64 --version 2>&1)
|
|
||||||
export IMGCAT_BASE64_VERSION
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function b64_encode() {
|
|
||||||
load_version
|
|
||||||
if [[ $IMGCAT_BASE64_VERSION =~ GNU ]]; then
|
|
||||||
# Disable line wrap
|
|
||||||
base64 -w0
|
|
||||||
else
|
|
||||||
base64
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function b64_decode() {
|
|
||||||
load_version
|
|
||||||
if [[ $IMGCAT_BASE64_VERSION =~ fourmilab ]]; then
|
|
||||||
BASE64ARG=-d
|
|
||||||
elif [[ $IMGCAT_BASE64_VERSION =~ GNU ]]; then
|
|
||||||
BASE64ARG=-di
|
|
||||||
else
|
|
||||||
BASE64ARG=-D
|
|
||||||
fi
|
|
||||||
base64 $BASE64ARG
|
|
||||||
}
|
|
||||||
|
|
||||||
# print_image filename inline base64contents print_filename
|
|
||||||
# filename: Filename to convey to client
|
|
||||||
# inline: 0 or 1
|
|
||||||
# base64contents: Base64-encoded contents
|
|
||||||
# print_filename: If non-empty, print the filename
|
|
||||||
# before outputting the image
|
|
||||||
function print_image() {
|
|
||||||
print_osc
|
|
||||||
printf '1337;File='
|
|
||||||
if [[ -n $1 ]]; then
|
|
||||||
printf "name=%s;" "$(printf "%s" "$1" | b64_encode)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "%s" "$3" | b64_decode | wc -c | awk '{printf "size=%d",$1}'
|
|
||||||
printf ";inline=%s" "$2"
|
|
||||||
printf ":"
|
|
||||||
printf "%s" "$3"
|
|
||||||
print_st
|
|
||||||
printf '\n'
|
|
||||||
if [[ -n $4 ]]; then
|
|
||||||
echo "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
echo "ERROR: $*" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage: imgcat [-p] filename ..." 1>&2
|
|
||||||
echo " or: cat filename | imgcat" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_dependency() {
|
|
||||||
if ! (builtin command -V "$1" >/dev/null 2>&1); then
|
|
||||||
echo "imgcat: missing dependency: can't find $1" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
## Main
|
|
||||||
|
|
||||||
if [ -t 0 ]; then
|
|
||||||
has_stdin=f
|
|
||||||
else
|
|
||||||
has_stdin=t
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Show help if no arguments and no stdin.
|
|
||||||
if [ $has_stdin = f ] && [ $# -eq 0 ]; then
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
check_dependency awk
|
|
||||||
check_dependency base64
|
|
||||||
check_dependency wc
|
|
||||||
|
|
||||||
# Look for command line flags.
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-h | --h | --help)
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
-p | --p | --print)
|
|
||||||
print_filename=1
|
|
||||||
;;
|
|
||||||
-u | --u | --url)
|
|
||||||
check_dependency curl
|
|
||||||
encoded_image=$(curl -s "$2" | b64_encode) || (
|
|
||||||
error "No such file or url $2"
|
|
||||||
exit 2
|
|
||||||
)
|
|
||||||
has_stdin=f
|
|
||||||
print_image "$2" 1 "$encoded_image" "$print_filename"
|
|
||||||
set -- "${@:1:1}" "-u" "${@:3}"
|
|
||||||
if [ "$#" -eq 2 ]; then
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
error "Unknown option flag: $1"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [ -r "$1" ]; then
|
|
||||||
has_stdin=f
|
|
||||||
print_image "$1" 1 "$(b64_encode <"$1")" "$print_filename"
|
|
||||||
else
|
|
||||||
error "imgcat: $1: No such file or directory"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
# Read and print stdin
|
|
||||||
if [ $has_stdin = t ]; then
|
|
||||||
print_image "" 1 "$(cat | b64_encode)" ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,80 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [ x"$TERM" = "xscreen" ] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_dependency() {
|
|
||||||
if ! (builtin command -V "$1" > /dev/null 2>& 1); then
|
|
||||||
echo "imgcat: missing dependency: can't find $1" 1>& 2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [ x"$TERM" = "xscreen" ] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function list_file() {
|
|
||||||
fn=$1
|
|
||||||
test -f "$fn" || return 0
|
|
||||||
dims=$(php -r 'if (!is_file($argv[1])) exit(1); $a = getimagesize($argv[1]); if ($a==FALSE) exit(1); else { echo $a[0] . "x" .$a[1]; exit(0); }' -- "$fn")
|
|
||||||
rc=$?
|
|
||||||
if [[ $rc == 0 ]] ; then
|
|
||||||
print_osc
|
|
||||||
printf '1337;File=name='`echo -n "$fn" | base64`";"
|
|
||||||
wc -c -- "$fn" | awk '{printf "size=%d",$1}'
|
|
||||||
printf ";inline=1;height=3;width=3;preserveAspectRatio=true"
|
|
||||||
printf ":"
|
|
||||||
base64 < "$fn"
|
|
||||||
print_st
|
|
||||||
if [ x"$TERM" == "xscreen" ] ; then
|
|
||||||
# This works in plain-old tmux but does the wrong thing in iTerm2's tmux
|
|
||||||
# integration mode. tmux doesn't know that the cursor moves when the
|
|
||||||
# image code is sent, while iTerm2 does. I had to pick one, since
|
|
||||||
# integration mode is undetectable, so I picked the failure mode that at
|
|
||||||
# least produces useful output (there is just too much whitespace in
|
|
||||||
# integration mode). This could be fixed by not moving the cursor while
|
|
||||||
# in integration mode. A better fix would be for tmux to interpret the
|
|
||||||
# image sequence, though.
|
|
||||||
#
|
|
||||||
# tl;dr: If you use tmux in integration mode, replace this with the printf
|
|
||||||
# from the else clause.
|
|
||||||
printf '\033[4C\033[Bx'
|
|
||||||
else
|
|
||||||
printf '\033[A'
|
|
||||||
fi
|
|
||||||
echo -n "$dims "
|
|
||||||
ls -ld -- "$fn"
|
|
||||||
else
|
|
||||||
ls -ld -- "$fn"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_dependency php
|
|
||||||
check_dependency base64
|
|
||||||
check_dependency wc
|
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
for fn in *
|
|
||||||
do
|
|
||||||
list_file "$fn"
|
|
||||||
done < <(ls -ls)
|
|
||||||
else
|
|
||||||
for fn in "$@"
|
|
||||||
do
|
|
||||||
list_file "$fn"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,722 +0,0 @@
|
||||||
#!/usr/bin/env python3.7
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import asyncio
|
|
||||||
import iterm2
|
|
||||||
import logging
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
async def list_sessions(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
for w in a.terminal_windows:
|
|
||||||
for t in w.tabs:
|
|
||||||
sessions = t.sessions
|
|
||||||
for s in sessions:
|
|
||||||
print(s.pretty_str(), end='')
|
|
||||||
print("")
|
|
||||||
print("Buried sessions:")
|
|
||||||
for s in a.buried_sessions:
|
|
||||||
print(s.pretty_str(), end='')
|
|
||||||
|
|
||||||
async def show_hierarchy(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
print(a.pretty_str())
|
|
||||||
|
|
||||||
async def send_text(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
await s.async_send_text(args.text)
|
|
||||||
|
|
||||||
async def create_tab(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
if args.window is not None:
|
|
||||||
window_id = args.window
|
|
||||||
try:
|
|
||||||
window = next(window for window in a.terminal_windows if window.window_id == window_id)
|
|
||||||
tab = await window.async_create_tab(profile=args.profile, command=args.command, index=args.index)
|
|
||||||
except:
|
|
||||||
print("bad window id {}".format(window_id))
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
|
||||||
window = await iterm2.Window.async_create(connection, profile=args.profile, command=args.command)
|
|
||||||
if not window:
|
|
||||||
return
|
|
||||||
tab = window.tabs[0]
|
|
||||||
session = tab.sessions[0]
|
|
||||||
print(session.pretty_str())
|
|
||||||
|
|
||||||
async def split_pane(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
session = await s.async_split_pane(vertical=args.vertical, before=args.before, profile=args.profile)
|
|
||||||
print(session.pretty_str())
|
|
||||||
|
|
||||||
async def get_buffer(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
contents = await s.async_get_screen_contents()
|
|
||||||
for i in range(contents.number_of_lines):
|
|
||||||
line = contents.line(i)
|
|
||||||
print(line.string)
|
|
||||||
|
|
||||||
async def get_prompt(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
result = await iterm2.async_get_last_prompt(connection, s.session_id)
|
|
||||||
print("working_directory: \"{}\"".format(result.working_directory))
|
|
||||||
print("command: \"{}\"".format(result.command))
|
|
||||||
|
|
||||||
def profile_property_type_map():
|
|
||||||
map = {
|
|
||||||
"allow_title_reporting": "bool",
|
|
||||||
"allow_title_setting": "bool",
|
|
||||||
"ambiguous_double_width": "bool",
|
|
||||||
"ansi_0_color": "color",
|
|
||||||
"ansi_10_color": "color",
|
|
||||||
"ansi_11_color": "color",
|
|
||||||
"ansi_12_color": "color",
|
|
||||||
"ansi_13_color": "color",
|
|
||||||
"ansi_14_color": "color",
|
|
||||||
"ansi_15_color": "color",
|
|
||||||
"ansi_1_color": "color",
|
|
||||||
"ansi_2_color": "color",
|
|
||||||
"ansi_3_color": "color",
|
|
||||||
"ansi_4_color": "color",
|
|
||||||
"ansi_5_color": "color",
|
|
||||||
"ansi_6_color": "color",
|
|
||||||
"ansi_7_color": "color",
|
|
||||||
"ansi_8_color": "color",
|
|
||||||
"ansi_9_color": "color",
|
|
||||||
"answerback_string": "str",
|
|
||||||
"application_keypad_allowed": "bool",
|
|
||||||
"ascii_anti_aliased": "bool",
|
|
||||||
"ascii_ligatures": "bool",
|
|
||||||
"background_color": "color",
|
|
||||||
"background_image_is_tiled": "bool",
|
|
||||||
"badge_color": "color",
|
|
||||||
"badge_text": "str",
|
|
||||||
"blend": "float",
|
|
||||||
"blink_allowed": "bool",
|
|
||||||
"blinking_cursor": "bool",
|
|
||||||
"blur": "float",
|
|
||||||
"blur_radius": "float",
|
|
||||||
"bm_growl": "bool",
|
|
||||||
"bold_color": "color",
|
|
||||||
"character_encoding": "int",
|
|
||||||
"close_sessions_on_end": "bool",
|
|
||||||
"cursor_boost": "float",
|
|
||||||
"cursor_color": "color",
|
|
||||||
"cursor_guide_color": "color",
|
|
||||||
"cursor_text_color": "color",
|
|
||||||
"cursor_type": "int",
|
|
||||||
"disable_printing": "bool",
|
|
||||||
"disable_smcup_rmcup": "bool",
|
|
||||||
"disable_window_resizing": "bool",
|
|
||||||
"flashing_bell": "bool",
|
|
||||||
"foreground_color": "color",
|
|
||||||
"horizontal_spacing": "float",
|
|
||||||
"idle_code": "int",
|
|
||||||
"idle_period": "float",
|
|
||||||
"link_color": "color",
|
|
||||||
"minimum_contrast": "float",
|
|
||||||
"mouse_reporting": "bool",
|
|
||||||
"mouse_reporting_allow_mouse_wheel": "bool",
|
|
||||||
"name": "str",
|
|
||||||
"non_ascii_anti_aliased": "bool",
|
|
||||||
"non_ascii_ligatures": "bool",
|
|
||||||
"only_the_default_bg_color_uses_transparency": "bool",
|
|
||||||
"left_option_key_sends": "int",
|
|
||||||
"place_prompt_at_first_column": "bool",
|
|
||||||
"prompt_before_closing": "bool",
|
|
||||||
"reduce_flicker": "bool",
|
|
||||||
"right_option_key_sends": "int",
|
|
||||||
"scrollback_in_alternate_screen": "bool",
|
|
||||||
"scrollback_lines": "int",
|
|
||||||
"scrollback_with_status_bar": "bool",
|
|
||||||
"selected_text_color": "color",
|
|
||||||
"selection_color": "color",
|
|
||||||
"send_bell_alert": "bool",
|
|
||||||
"send_code_when_idle": "bool",
|
|
||||||
"send_idle_alert": "bool",
|
|
||||||
"send_new_output_alert": "bool",
|
|
||||||
"send_session_ended_alert": "bool",
|
|
||||||
"send_terminal_generated_alerts": "bool",
|
|
||||||
"session_close_undo_timeout": "float",
|
|
||||||
"show_mark_indicators": "bool",
|
|
||||||
"silence_bell": "bool",
|
|
||||||
"smart_cursor_color": "color",
|
|
||||||
"smart_cursor_color": "color",
|
|
||||||
"sync_title": "str",
|
|
||||||
"tab_color": "color",
|
|
||||||
"thin_strokes": "int",
|
|
||||||
"transparency": "float",
|
|
||||||
"underline_color": "color",
|
|
||||||
"unicode_normalization": "int",
|
|
||||||
"unicode_version": "int",
|
|
||||||
"unlimited_scrollback": "bool",
|
|
||||||
"use_bold_font": "bool",
|
|
||||||
"use_bright_bold": "bool",
|
|
||||||
"use_cursor_guide": "bool",
|
|
||||||
"use_italic_font": "bool",
|
|
||||||
"use_non_ascii_font": "bool",
|
|
||||||
"use_tab_color": "bool",
|
|
||||||
"use_underline_color": "bool",
|
|
||||||
"vertical_spacing": "float",
|
|
||||||
"visual_bell": "bool",
|
|
||||||
"triggers": "dict",
|
|
||||||
"smart_selection_rules": "list",
|
|
||||||
"semantic_history": "dict",
|
|
||||||
"automatic_profile_switching_rules": "list",
|
|
||||||
"advanced_working_directory_window_setting": "string",
|
|
||||||
"advanced_working_directory_window_directory": "string",
|
|
||||||
"advanced_working_directory_tab_setting": "string",
|
|
||||||
"advanced_working_directory_tab_directory": "string",
|
|
||||||
"advanced_working_directory_pane_setting": "string",
|
|
||||||
"advanced_working_directory_pane_directory": "string",
|
|
||||||
"normal_font": "string",
|
|
||||||
"non_ascii_font": "string",
|
|
||||||
"background_image_location": "string",
|
|
||||||
"key_mappings": "dict",
|
|
||||||
"touchbar_mappings": "dict" }
|
|
||||||
return map
|
|
||||||
|
|
||||||
def profile_properties():
|
|
||||||
return list(profile_property_type_map().keys())
|
|
||||||
|
|
||||||
def profile_property_type(key):
|
|
||||||
return profile_property_type_map()[key]
|
|
||||||
|
|
||||||
async def get_profile_property(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
profile = await s.async_get_profile()
|
|
||||||
if args.keys is not None:
|
|
||||||
keys = args.keys.split(",")
|
|
||||||
else:
|
|
||||||
keys = profile_properties()
|
|
||||||
for prop in keys:
|
|
||||||
fname = prop
|
|
||||||
value = getattr(profile, fname)
|
|
||||||
print("{}: {}".format(prop, value))
|
|
||||||
|
|
||||||
def encode_property_value(key, value):
|
|
||||||
type = profile_property_type(key)
|
|
||||||
if type == "bool":
|
|
||||||
assert value == "true" or value == "false"
|
|
||||||
return value == "true"
|
|
||||||
elif type == "str":
|
|
||||||
return value
|
|
||||||
elif type == "float":
|
|
||||||
return float(value)
|
|
||||||
elif type == "int":
|
|
||||||
return int(value)
|
|
||||||
elif type == "dict" or type == "list":
|
|
||||||
class TypeNotSupportedException(Exception): Pass
|
|
||||||
raise TypeNotSupportedException("this property's type is not supported")
|
|
||||||
elif type == "color":
|
|
||||||
# Accepted values look like: "(0,0,0,255 sRGB)"
|
|
||||||
regex = r"\(([0-9]+), *([0-9]+), *([0-9]+), *([0-9]+) *([A-Za-z]+)\)"
|
|
||||||
match = re.search(regex, value)
|
|
||||||
assert match is not None
|
|
||||||
return iterm2.Color(
|
|
||||||
float(match.group(1)),
|
|
||||||
float(match.group(2)),
|
|
||||||
float(match.group(3)),
|
|
||||||
float(match.group(4)),
|
|
||||||
iterm2.ColorSpace(match.group(5)))
|
|
||||||
|
|
||||||
async def set_profile_property(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
|
|
||||||
encoded_value = encode_property_value(args.key, args.value)
|
|
||||||
profile = await s.async_get_profile()
|
|
||||||
fname = "async_set_" + args.key
|
|
||||||
f = getattr(profile, fname)
|
|
||||||
await f(encoded_value)
|
|
||||||
|
|
||||||
async def read(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
if args.mode == "char":
|
|
||||||
async with iterm2.KeystrokeMonitor(connection) as mon:
|
|
||||||
keystroke = await mon.async_get()
|
|
||||||
print(keystroke)
|
|
||||||
elif args.mode == "line":
|
|
||||||
async with s.get_keystroke_reader() as reader:
|
|
||||||
eol = False
|
|
||||||
line = ""
|
|
||||||
while not eol:
|
|
||||||
k = await reader.get()
|
|
||||||
for e in k:
|
|
||||||
c = e.characters
|
|
||||||
if c == "\r" or c == "\n":
|
|
||||||
eol = True
|
|
||||||
break
|
|
||||||
line += c
|
|
||||||
|
|
||||||
print(line)
|
|
||||||
|
|
||||||
async def get_window_property(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
w = a.get_window_by_id(args.id)
|
|
||||||
if w is None:
|
|
||||||
print("bad window ID")
|
|
||||||
else:
|
|
||||||
if args.name == "frame":
|
|
||||||
frame = await w.async_get_frame()
|
|
||||||
print("{},{},{},{}".format(frame.origin.x,frame.origin.y,frame.size.width,frame.size.height))
|
|
||||||
elif args.name == "fullscreen":
|
|
||||||
print(await w.async_get_fullscreen(connection))
|
|
||||||
|
|
||||||
async def set_window_property(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
w = a.get_window_by_id(args.id)
|
|
||||||
if w is None:
|
|
||||||
print("bad window ID")
|
|
||||||
else:
|
|
||||||
if args.name == "frame":
|
|
||||||
parts = args.value.split(",")
|
|
||||||
frame = iterm2.Frame(iterm2.Point(int(parts[0]), int(parts[1])), iterm2.Size(int(parts[2]), int(parts[3])))
|
|
||||||
await w.async_set_frame(frame)
|
|
||||||
elif args.name == "fullscreen":
|
|
||||||
await w.async_set_fullscreen(args.value == "true")
|
|
||||||
|
|
||||||
async def inject(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
if s is None:
|
|
||||||
print("bad session ID")
|
|
||||||
else:
|
|
||||||
await s.async_inject(args.data.encode())
|
|
||||||
|
|
||||||
async def activate(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
if args.mode == "session":
|
|
||||||
s = a.get_session_by_id(args.id)
|
|
||||||
if s is None:
|
|
||||||
print("bad session ID")
|
|
||||||
else:
|
|
||||||
await s.async_activate()
|
|
||||||
elif args.mode == "tab":
|
|
||||||
t = a.get_tab_by_id(args.id)
|
|
||||||
if t is None:
|
|
||||||
print("bad tab ID")
|
|
||||||
else:
|
|
||||||
await t.async_select()
|
|
||||||
elif args.mode == "window":
|
|
||||||
w = a.get_window_by_id(args.id)
|
|
||||||
if w is None:
|
|
||||||
print("bad window ID")
|
|
||||||
else:
|
|
||||||
await w.async_activate()
|
|
||||||
|
|
||||||
async def activate_app(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
await a.async_activate(raise_all_windows=args.raise_all_windows, ignoring_other_apps=args.ignoring_other_apps)
|
|
||||||
|
|
||||||
async def set_variable(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
if args.session:
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
if s is None:
|
|
||||||
print("bad session ID")
|
|
||||||
return
|
|
||||||
await s.async_set_variable(args.name, args.value)
|
|
||||||
elif args.tab:
|
|
||||||
t = a.get_tab_by_id(args.tab)
|
|
||||||
if t is None:
|
|
||||||
print("bad tab ID")
|
|
||||||
return
|
|
||||||
await t.async_set_variable(args.name, args.value)
|
|
||||||
else:
|
|
||||||
await a.async_set_variable(args.name, args.value)
|
|
||||||
|
|
||||||
async def get_variable(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
if args.session:
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
if s is None:
|
|
||||||
print("bad session ID")
|
|
||||||
return
|
|
||||||
value = await s.async_get_variable(args.name)
|
|
||||||
print(value)
|
|
||||||
elif args.tab:
|
|
||||||
t = a.get_tab_by_id(args.tab)
|
|
||||||
if t is None:
|
|
||||||
print("bad tab ID")
|
|
||||||
return
|
|
||||||
value = await t.async_get_variable(args.name)
|
|
||||||
print(value)
|
|
||||||
else:
|
|
||||||
value = await a.async_get_variable(args.name)
|
|
||||||
print(value)
|
|
||||||
|
|
||||||
async def list_variables(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
if args.session:
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
if s is None:
|
|
||||||
print("bad session ID")
|
|
||||||
return
|
|
||||||
value = await s.async_get_variable("*")
|
|
||||||
for name in value:
|
|
||||||
print(name)
|
|
||||||
elif args.tab:
|
|
||||||
t = a.get_tab_by_id(args.tab)
|
|
||||||
if t is None:
|
|
||||||
print("bad tab ID")
|
|
||||||
return
|
|
||||||
value = await t.async_get_variable("*")
|
|
||||||
for name in value:
|
|
||||||
print(name)
|
|
||||||
else:
|
|
||||||
value = await a.async_get_variable("*")
|
|
||||||
for name in value:
|
|
||||||
print(name)
|
|
||||||
|
|
||||||
async def saved_arrangement(connection, args):
|
|
||||||
if args.window is not None:
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
w = a.get_window_by_id(args.window)
|
|
||||||
if w is None:
|
|
||||||
print("bad window ID")
|
|
||||||
return
|
|
||||||
if args.action == "save":
|
|
||||||
await w.async_save_window_as_arrangement(args.name)
|
|
||||||
elif args.action == "restore":
|
|
||||||
await w.async_restore_window_arrangement(args.name)
|
|
||||||
else:
|
|
||||||
if args.action == "save":
|
|
||||||
await iterm2.Arrangement.async_save(connection, args.name)
|
|
||||||
elif args.action == "restore":
|
|
||||||
await iterm2.Arrangement.async_restore(connection, args.name)
|
|
||||||
|
|
||||||
async def show_focus(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
if a.app_active:
|
|
||||||
print("App is active")
|
|
||||||
w = a.current_terminal_window
|
|
||||||
print("Key window: {}".format(w.window_id))
|
|
||||||
print("")
|
|
||||||
for w in a.terminal_windows:
|
|
||||||
t = a.get_tab_by_id(w.selected_tab_id)
|
|
||||||
print("Selected tab in {}: {}".format(w.window_id, t.tab_id))
|
|
||||||
s = a.get_session_by_id(t.active_session_id)
|
|
||||||
print(" Active session is: {}".format(s.pretty_str()))
|
|
||||||
|
|
||||||
async def list_profiles(connection, args):
|
|
||||||
guids = args.guids.split(",") if args.guids is not None else None
|
|
||||||
properties = args.properties.split(",") if args.properties is not None else None
|
|
||||||
profiles = await iterm2.PartialProfile.async_query(connection, guids=guids, properties=properties)
|
|
||||||
for profile in profiles:
|
|
||||||
keys = list(profile.all_properties.keys())
|
|
||||||
keys.sort()
|
|
||||||
for k in keys:
|
|
||||||
v = profile.all_properties[k]
|
|
||||||
print("{}: {}".format(k, v))
|
|
||||||
print("")
|
|
||||||
|
|
||||||
async def set_grid_size(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
await s.async_set_grid_size(iterm2.Size(args.width, args.height))
|
|
||||||
|
|
||||||
async def list_tmux_connections(connection, args):
|
|
||||||
connections = await iterm2.async_get_tmux_connections(connection)
|
|
||||||
for connection in connections:
|
|
||||||
print("Connection ID: {}\nOwning session: {}".format(connection.connection_id, connection.owning_session))
|
|
||||||
|
|
||||||
async def send_tmux_command(connection, args):
|
|
||||||
connections = await iterm2.async_get_tmux_connections(connection)
|
|
||||||
ids = []
|
|
||||||
for connection in connections:
|
|
||||||
if connection.connection_id == args.connection_id:
|
|
||||||
print(await connection.async_send_command(args.command))
|
|
||||||
return;
|
|
||||||
ids.append(connection.connection_id)
|
|
||||||
print("No connection with id {} found. Have: {}".format(args.connection_id, ", ".join(ids)))
|
|
||||||
|
|
||||||
async def set_tmux_window_visible(connection, args):
|
|
||||||
connections = await iterm2.async_get_tmux_connections(connection)
|
|
||||||
ids = []
|
|
||||||
for connection in connections:
|
|
||||||
if connection.connection_id == args.connection_id:
|
|
||||||
await connection.async_set_tmux_window_visible(args.window_id, args.visible)
|
|
||||||
return;
|
|
||||||
ids.append(connection.connection_id)
|
|
||||||
print("No connection with id {} found. Have: {}".format(args.connection_id, ", ".join(ids)))
|
|
||||||
|
|
||||||
async def sort_tabs(connection, args):
|
|
||||||
app = await iterm2.async_get_app(connection)
|
|
||||||
for w in app.terminal_windows:
|
|
||||||
tabs = w.tabs
|
|
||||||
for t in tabs:
|
|
||||||
t.tab_name = await t.async_get_variable("currentSession.session.name")
|
|
||||||
def tab_name(t):
|
|
||||||
return t.tab_name
|
|
||||||
sorted_tabs = sorted(tabs, key=tab_name)
|
|
||||||
await w.async_set_tabs(sorted_tabs)
|
|
||||||
|
|
||||||
async def list_color_presets(connection, args):
|
|
||||||
presets = await iterm2.ColorPreset.async_get_list(connection)
|
|
||||||
for preset in presets:
|
|
||||||
print(preset)
|
|
||||||
|
|
||||||
async def set_color_preset(connection, args):
|
|
||||||
preset = await iterm2.ColorPreset.async_get(connection, args.preset)
|
|
||||||
profiles = await iterm2.PartialProfile.async_query(connection, properties=['Guid', 'Name'])
|
|
||||||
for partial in profiles:
|
|
||||||
if partial.name == args.profile:
|
|
||||||
profile = await partial.async_get_full_profile()
|
|
||||||
await profile.async_set_color_preset(preset)
|
|
||||||
|
|
||||||
async def monitor_variable(connection, args):
|
|
||||||
if args.session:
|
|
||||||
scope = iterm2.VariableScopes.SESSION
|
|
||||||
identifier = args.session
|
|
||||||
elif args.tab:
|
|
||||||
scope = iterm2.VariableScopes.TAB
|
|
||||||
identifier = args.tab
|
|
||||||
elif args.window:
|
|
||||||
scope = iterm2.VariableScopes.WINDOW
|
|
||||||
identifier = args.window
|
|
||||||
elif args.app:
|
|
||||||
scope = iterm2.VariableScopes.APP
|
|
||||||
identifier = ''
|
|
||||||
else:
|
|
||||||
assert False
|
|
||||||
async with iterm2.VariableMonitor(connection, scope, args.name, identifier) as monitor:
|
|
||||||
value = await monitor.async_get()
|
|
||||||
print(f"New value: {value}")
|
|
||||||
|
|
||||||
async def monitor_focus(connection, args):
|
|
||||||
async with iterm2.FocusMonitor(connection) as monitor:
|
|
||||||
update = await monitor.async_get_next_update()
|
|
||||||
print("Update: {}".format(update))
|
|
||||||
|
|
||||||
async def set_cursor_color(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
partial = iterm2.LocalWriteOnlyProfile()
|
|
||||||
r, g, b = list(map(int, args.color.split(",")))
|
|
||||||
c = iterm2.Color(r, g, b)
|
|
||||||
partial.set_cursor_color(c)
|
|
||||||
await s.async_set_profile_properties(partial)
|
|
||||||
|
|
||||||
async def monitor_screen(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
async with s.get_screen_streamer() as streamer:
|
|
||||||
done = False
|
|
||||||
while not done:
|
|
||||||
contents = await streamer.async_get()
|
|
||||||
for i in range(contents.number_of_lines):
|
|
||||||
line = contents.line(i)
|
|
||||||
if args.query in line.string:
|
|
||||||
return
|
|
||||||
|
|
||||||
async def show_selection(connection, args):
|
|
||||||
a = await iterm2.async_get_app(connection)
|
|
||||||
s = a.get_session_by_id(args.session)
|
|
||||||
selection = await s.async_get_selection()
|
|
||||||
for sub in selection.subSelections:
|
|
||||||
print("Sub selection: {}".format(await sub.async_get_string(connection, s.session_id)))
|
|
||||||
print("Text: {}".format(await selection.async_get_string(connection, s.session_id, s.grid_size.width)))
|
|
||||||
|
|
||||||
def make_parser():
|
|
||||||
parser = argparse.ArgumentParser(description='iTerm2 CLI')
|
|
||||||
subparsers = parser.add_subparsers(help='Commands')
|
|
||||||
|
|
||||||
list_sessions_parser = subparsers.add_parser("list-sessions", help="List sessions")
|
|
||||||
list_sessions_parser.set_defaults(func=list_sessions)
|
|
||||||
|
|
||||||
show_hierarchy_parser = subparsers.add_parser("show-hierarchy", help="Show all windows, tabs, and sessions")
|
|
||||||
show_hierarchy_parser.set_defaults(func=show_hierarchy)
|
|
||||||
|
|
||||||
send_text_parser = subparsers.add_parser("send-text", help="Send text as though the user had typed it")
|
|
||||||
send_text_parser.add_argument('session', type=str, help='Session ID')
|
|
||||||
send_text_parser.add_argument("text", type=str, help='Text to send')
|
|
||||||
send_text_parser.set_defaults(func=send_text)
|
|
||||||
|
|
||||||
create_tab_parser = subparsers.add_parser("create-tab", help="Create a new tab or window")
|
|
||||||
create_tab_parser.add_argument('--profile', type=str, nargs='?', help='Profile name')
|
|
||||||
create_tab_parser.add_argument('--window', type=str, nargs='?', help='Window ID')
|
|
||||||
create_tab_parser.add_argument('--index', type=int, nargs='?', help='Desired tab index')
|
|
||||||
create_tab_parser.add_argument('--command', type=str, nargs='?', help='Command')
|
|
||||||
create_tab_parser.set_defaults(func=create_tab)
|
|
||||||
|
|
||||||
split_pane_parser = subparsers.add_parser("split-pane", help="Split a pane into two")
|
|
||||||
split_pane_parser.add_argument('session', type=str, help='Session ID')
|
|
||||||
split_pane_parser.add_argument('--vertical', action='store_true', help='Split vertically?', default=False)
|
|
||||||
split_pane_parser.add_argument('--before', action='store_true', help='Spilt left or above target', default=False)
|
|
||||||
split_pane_parser.add_argument('--profile', type=str, nargs='?', help='Profile name')
|
|
||||||
split_pane_parser.set_defaults(func=split_pane)
|
|
||||||
|
|
||||||
get_buffer_parser = subparsers.add_parser("get-buffer", help="Get screen contents")
|
|
||||||
get_buffer_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
get_buffer_parser.set_defaults(func=get_buffer)
|
|
||||||
|
|
||||||
get_prompt_parser = subparsers.add_parser("get-prompt", help="Get info about prompt, if available. Gives either the current prompt or the last prompt if a command is being run. Requires shell integration for prompt detection.")
|
|
||||||
get_prompt_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
get_prompt_parser.set_defaults(func=get_prompt)
|
|
||||||
|
|
||||||
get_profile_property_parser = subparsers.add_parser("get-profile-property", help="Get a session's profile settings")
|
|
||||||
get_profile_property_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
get_profile_property_parser.add_argument("keys", type=str, nargs='?', help="Comma separated keys. Omit to get all. Valid keys are: " + ", ".join(profile_properties()))
|
|
||||||
get_profile_property_parser.set_defaults(func=get_profile_property)
|
|
||||||
|
|
||||||
set_profile_parser = subparsers.add_parser("set-profile-property", help="Set a session's profile setting")
|
|
||||||
set_profile_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
set_profile_parser.add_argument("key", type=str, help="Key to set. Valid keys are: " + ", ".join(profile_properties()))
|
|
||||||
set_profile_parser.add_argument("value", type=str, help="New value.")
|
|
||||||
set_profile_parser.set_defaults(func=set_profile_property)
|
|
||||||
|
|
||||||
read_parser = subparsers.add_parser("read", help="Wait for a input.")
|
|
||||||
read_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
read_parser.add_argument("mode", type=str, help="What to read", choices=[ "char", "line" ])
|
|
||||||
read_parser.set_defaults(func=read)
|
|
||||||
|
|
||||||
get_window_property_parser = subparsers.add_parser("get-window-property", help="Get a property of a window")
|
|
||||||
get_window_property_parser.add_argument("id", type=str, help="Window ID")
|
|
||||||
get_window_property_parser.add_argument("name", type=str, help="Property name", choices=["frame", "fullscreen"])
|
|
||||||
get_window_property_parser.set_defaults(func=get_window_property)
|
|
||||||
|
|
||||||
set_window_property_parser = subparsers.add_parser("set-window-property", help="Set a property of a window")
|
|
||||||
set_window_property_parser.add_argument("id", type=str, help="Window ID")
|
|
||||||
set_window_property_parser.add_argument("name", type=str, help="Property name", choices=["frame", "fullscreen"])
|
|
||||||
set_window_property_parser.add_argument("value", type=str, help="New value. For frame: x,y,width,height; for fullscreen: true or false")
|
|
||||||
set_window_property_parser.set_defaults(func=set_window_property)
|
|
||||||
|
|
||||||
inject_parser = subparsers.add_parser("inject", help="Inject a string as though it were program output")
|
|
||||||
inject_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
inject_parser.add_argument("data", type=str, help="Data to inject")
|
|
||||||
inject_parser.set_defaults(func=inject)
|
|
||||||
|
|
||||||
activate_parser = subparsers.add_parser("activate", help="Activate a session, tab, or window.")
|
|
||||||
activate_parser.add_argument("mode", type=str, help="What kind of object to activate", choices=["session", "tab", "window"])
|
|
||||||
activate_parser.add_argument("id", type=str, help="ID of object to activate")
|
|
||||||
activate_parser.set_defaults(func=activate)
|
|
||||||
|
|
||||||
activate_app_parser = subparsers.add_parser("activate-app", help="Activate the app")
|
|
||||||
activate_app_parser.add_argument('--raise_all_windows', action='store_true', help='Raise all windows?', default=False)
|
|
||||||
activate_app_parser.add_argument('--ignoring_other_apps', action='store_true', help='Activate ignoring other apps (may steal focus)', default=False)
|
|
||||||
activate_app_parser.set_defaults(func=activate_app)
|
|
||||||
|
|
||||||
set_variable_parser = subparsers.add_parser("set-variable", help="Set a user-defined variable in a session. See Badges documentation for details.")
|
|
||||||
set_variable_parser.add_argument("--session", type=str, nargs='?', help="Session ID")
|
|
||||||
set_variable_parser.add_argument("--tab", type=str, nargs='?', help="Tab ID")
|
|
||||||
set_variable_parser.add_argument("name", type=str, help="Variable name. Starts with \"user.\"")
|
|
||||||
set_variable_parser.add_argument("value", type=str, help="New value")
|
|
||||||
set_variable_parser.set_defaults(func=set_variable)
|
|
||||||
|
|
||||||
get_variable_parser = subparsers.add_parser("get-variable", help="Get a variable in a session. See Badges documentation for details.")
|
|
||||||
get_variable_parser.add_argument("--session", type=str, nargs='?', help="Session ID")
|
|
||||||
get_variable_parser.add_argument("--tab", type=str, nargs='?', help="Tab ID")
|
|
||||||
get_variable_parser.add_argument("name", type=str, help="Variable name. Starts with \"user.\"")
|
|
||||||
get_variable_parser.set_defaults(func=get_variable)
|
|
||||||
|
|
||||||
list_variables_parser = subparsers.add_parser("list-variables", help="Lists variable names available in a session.")
|
|
||||||
list_variables_parser.add_argument("--session", type=str, nargs='?', help="Session ID")
|
|
||||||
list_variables_parser.add_argument("--tab", type=str, nargs='?', help="Tab ID")
|
|
||||||
list_variables_parser.set_defaults(func=list_variables)
|
|
||||||
|
|
||||||
saved_arrangement_parser = subparsers.add_parser("saved-arrangement", help="Saves and restores window arrangements")
|
|
||||||
saved_arrangement_parser.add_argument("action", type=str, help="Action to perform", choices=["save", "restore"])
|
|
||||||
saved_arrangement_parser.add_argument("name", type=str, help="Arrangement name")
|
|
||||||
saved_arrangement_parser.add_argument('--window', type=str, nargs='?', help='Window ID to save/restore to')
|
|
||||||
saved_arrangement_parser.set_defaults(func=saved_arrangement)
|
|
||||||
|
|
||||||
show_focus_parser = subparsers.add_parser("show-focus", help="Show active windows, tabs, and panes")
|
|
||||||
show_focus_parser.set_defaults(func=show_focus)
|
|
||||||
|
|
||||||
list_profiles_parser = subparsers.add_parser("list-profiles", help="List profiles")
|
|
||||||
list_profiles_parser.add_argument("--guids", type=str, nargs='?', help="Comma-delimited list of profiles to list. Omit to get all of them.")
|
|
||||||
list_profiles_parser.add_argument("--properties", type=str, nargs='?', help="Comma-delimited list of properties to request. Omit to get all of them.")
|
|
||||||
list_profiles_parser.set_defaults(func=list_profiles)
|
|
||||||
|
|
||||||
set_grid_size_parser = subparsers.add_parser("set-grid-size", help="Set size of session")
|
|
||||||
set_grid_size_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
set_grid_size_parser.add_argument("width", type=int, help="Width in columns")
|
|
||||||
set_grid_size_parser.add_argument("height", type=int, help="Height in rows")
|
|
||||||
set_grid_size_parser.set_defaults(func=set_grid_size)
|
|
||||||
|
|
||||||
list_tmux_connections_parser = subparsers.add_parser("list-tmux-connections", help="List tmux integration connections")
|
|
||||||
list_tmux_connections_parser.set_defaults(func=list_tmux_connections)
|
|
||||||
|
|
||||||
send_tmux_command_parser = subparsers.add_parser("send-tmux-command", help="Send a tmux command to a tmux integration connection")
|
|
||||||
send_tmux_command_parser.add_argument("connection_id", type=str, help="tmux connection ID")
|
|
||||||
send_tmux_command_parser.add_argument("command", type=str, help="Command to send")
|
|
||||||
send_tmux_command_parser.set_defaults(func=send_tmux_command)
|
|
||||||
|
|
||||||
set_tmux_window_visible_parser = subparsers.add_parser("set-tmux-window-visible", help="Show or hide a tmux integration window (represented as a tab in iTerm2)")
|
|
||||||
set_tmux_window_visible_parser.add_argument("connection_id", type=str, help="tmux connection ID")
|
|
||||||
set_tmux_window_visible_parser.add_argument("window_id", type=str, help="tmux window ID (number)")
|
|
||||||
set_tmux_window_visible_parser.add_argument('--visible', dest='visible', action='store_true')
|
|
||||||
set_tmux_window_visible_parser.add_argument('--no-visible', dest='visible', action='store_false')
|
|
||||||
set_tmux_window_visible_parser.set_defaults(visible=True)
|
|
||||||
set_tmux_window_visible_parser.set_defaults(func=set_tmux_window_visible)
|
|
||||||
|
|
||||||
sort_tabs_parser = subparsers.add_parser("sort-tabs", help="Sort tabs alphabetically by name")
|
|
||||||
sort_tabs_parser.set_defaults(func=sort_tabs)
|
|
||||||
|
|
||||||
list_color_presets_parser = subparsers.add_parser("list-color-presets", help="Lists names of color presets")
|
|
||||||
list_color_presets_parser.set_defaults(func=list_color_presets)
|
|
||||||
|
|
||||||
set_color_preset_parser = subparsers.add_parser("set-color-preset", help="Lists names of color presets")
|
|
||||||
set_color_preset_parser.add_argument("profile", type=str, help="Profile name")
|
|
||||||
set_color_preset_parser.add_argument("preset", type=str, help="Color preset name")
|
|
||||||
set_color_preset_parser.set_defaults(func=set_color_preset)
|
|
||||||
|
|
||||||
monitor_variable_parser = subparsers.add_parser("monitor-variable", help="Monitor changes to a variable")
|
|
||||||
monitor_variable_parser.add_argument("name", type=str, help="variable name")
|
|
||||||
monitor_variable_parser.add_argument('--session', type=str, nargs='?', help='Session ID for the variable scope')
|
|
||||||
monitor_variable_parser.add_argument('--tab', type=str, nargs='?', help='Tab ID for the variable scope')
|
|
||||||
monitor_variable_parser.add_argument('--window', type=str, nargs='?', help='Window ID for the variable scope')
|
|
||||||
monitor_variable_parser.add_argument('--app', action='store_true', help='App scope', default=False)
|
|
||||||
monitor_variable_parser.set_defaults(func=monitor_variable)
|
|
||||||
|
|
||||||
monitor_focus_parser = subparsers.add_parser("monitor-focus", help="Monitor changes to focus")
|
|
||||||
monitor_focus_parser.set_defaults(func=monitor_focus)
|
|
||||||
|
|
||||||
set_cursor_color_parser = subparsers.add_parser("set-cursor-color", help="Set cursor color")
|
|
||||||
set_cursor_color_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
set_cursor_color_parser.add_argument("color", type=str, help="Color as red,green,blue where each value is in 0-255")
|
|
||||||
set_cursor_color_parser.set_defaults(func=set_cursor_color)
|
|
||||||
|
|
||||||
monitor_screen_parser = subparsers.add_parser("monitor-screen", help="Monitor screen contents")
|
|
||||||
monitor_screen_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
monitor_screen_parser.add_argument("query", type=str, help="Stop when this text is seen")
|
|
||||||
monitor_screen_parser.set_defaults(func=monitor_screen)
|
|
||||||
|
|
||||||
show_selection_parser = subparsers.add_parser("show-selection", help="Shows the selected text in a session")
|
|
||||||
show_selection_parser.add_argument("session", type=str, help="Session ID")
|
|
||||||
show_selection_parser.set_defaults(func=show_selection)
|
|
||||||
|
|
||||||
return parser
|
|
||||||
|
|
||||||
def main(argv):
|
|
||||||
logging.basicConfig()
|
|
||||||
|
|
||||||
parser = make_parser()
|
|
||||||
args = parser.parse_args(argv[1:])
|
|
||||||
if "func" not in args:
|
|
||||||
print(parser.format_help())
|
|
||||||
raise argparse.ArgumentTypeError('Missing command')
|
|
||||||
|
|
||||||
async def wrapper(connection):
|
|
||||||
try:
|
|
||||||
await args.func(connection, args)
|
|
||||||
except Exception as e:
|
|
||||||
print(traceback.format_exc())
|
|
||||||
|
|
||||||
iterm2.run_until_complete(wrapper)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
try:
|
|
||||||
main(sys.argv)
|
|
||||||
except Exception as e:
|
|
||||||
print(traceback.format_exc())
|
|
||||||
sys.exit(1)
|
|
|
@ -1,82 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage:" 1>& 2
|
|
||||||
echo " $(basename $0) start" 1>& 2
|
|
||||||
echo " Begin bouncing the dock icon if another app is active" 1>& 2
|
|
||||||
echo " $(basename $0) stop" 1>& 2
|
|
||||||
echo " Stop bouncing the dock icon if another app is active" 1>& 2
|
|
||||||
echo " $(basename $0) once" 1>& 2
|
|
||||||
echo " Bounce the dock icon once if another app is active" 1>& 2
|
|
||||||
echo " $(basename $0) fireworks" 1>& 2
|
|
||||||
echo " Show an explosion animation at the cursor" 1>& 2
|
|
||||||
}
|
|
||||||
|
|
||||||
function start_bounce() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;RequestAttention=1"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
function stop_bounce() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;RequestAttention=0"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
function bounce_once() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;RequestAttention=once"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
function fireworks() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;RequestAttention=fireworks"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
## Main
|
|
||||||
if [[ $# == 0 ]]
|
|
||||||
then
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $1 == start ]]
|
|
||||||
then
|
|
||||||
start_bounce
|
|
||||||
elif [[ $1 == stop ]]
|
|
||||||
then
|
|
||||||
stop_bounce
|
|
||||||
elif [[ $1 == once ]]
|
|
||||||
then
|
|
||||||
bounce_once
|
|
||||||
elif [[ $1 == fireworks ]]
|
|
||||||
then
|
|
||||||
fireworks
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,81 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# Make sure stdin and stdout are a tty.
|
|
||||||
if [ ! -t 0 ] ; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ ! -t 1 ] ; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Read some bytes from stdin. Pass the number of bytes to read as the first argument.
|
|
||||||
function read_bytes()
|
|
||||||
{
|
|
||||||
numbytes=$1
|
|
||||||
dd bs=1 count=$numbytes 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function read_dsr() {
|
|
||||||
# Reading response to DSR.
|
|
||||||
dsr=""
|
|
||||||
spam=$(read_bytes 2)
|
|
||||||
byte=$(read_bytes 1)
|
|
||||||
while [ "${byte}" != "n" ]; do
|
|
||||||
dsr=${dsr}${byte}
|
|
||||||
byte=$(read_bytes 1)
|
|
||||||
done
|
|
||||||
echo ${dsr}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Extract the terminal name from DSR 1337
|
|
||||||
function terminal {
|
|
||||||
echo -n "$1" | sed -e 's/ .*//'
|
|
||||||
}
|
|
||||||
|
|
||||||
# Extract the version number from DSR 1337
|
|
||||||
function version {
|
|
||||||
echo -n "$1" | sed -e 's/.* //'
|
|
||||||
}
|
|
||||||
|
|
||||||
trap clean_up EXIT
|
|
||||||
_STTY=$(stty -g) ## Save current terminal setup
|
|
||||||
|
|
||||||
function clean_up() {
|
|
||||||
stty "$_STTY" ## Restore terminal settings
|
|
||||||
}
|
|
||||||
|
|
||||||
# Enter raw mode and turn off echo so the terminal and I can chat quietly.
|
|
||||||
stty -echo -icanon raw
|
|
||||||
|
|
||||||
# Support for the extension first appears in this version of iTerm2:
|
|
||||||
MIN_VERSION=2.9.20160304
|
|
||||||
if [ $# -eq 1 ]; then
|
|
||||||
MIN_VERSION=$1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Send iTerm2-proprietary code. Other terminals ought to ignore it (but are
|
|
||||||
# free to use it respectfully). The response won't start with a 0 so we can
|
|
||||||
# distinguish it from the response to DSR 5. It should contain the terminal's
|
|
||||||
# name followed by a space followed by its version number and be terminated
|
|
||||||
# with an n.
|
|
||||||
echo -n '[1337n'
|
|
||||||
|
|
||||||
# Report device status. Responds with esc [ 0 n. All terminals support this. We
|
|
||||||
# do this because if the terminal will not respond to iTerm2's custom escape
|
|
||||||
# sequence, we can still read from stdin without blocking indefinitely.
|
|
||||||
echo -n '[5n'
|
|
||||||
|
|
||||||
version_string=$(read_dsr)
|
|
||||||
if [ "${version_string}" != "0" -a "${version_string}" != "3" ]; then
|
|
||||||
# Already read DSR 1337. Read DSR 5 and throw it away.
|
|
||||||
dsr=$(read_dsr)
|
|
||||||
else
|
|
||||||
# Terminal didn't respond to the DSR 1337. The response we read is from DSR 5.
|
|
||||||
version_string=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract the terminal name and version number from the response.
|
|
||||||
version=$(version "${version_string}")
|
|
||||||
term=$(terminal "${version_string}")
|
|
||||||
|
|
||||||
# Check if they match what we're looking for. This becomes the return code of the script.
|
|
||||||
test "$term" = ITERM2 -a \( "$version" \> "$MIN_VERSION" -o "$version" = "$MIN_VERSION" \)
|
|
|
@ -1,78 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
trap clean_up EXIT
|
|
||||||
trap clean_up INT
|
|
||||||
|
|
||||||
inosc=0
|
|
||||||
|
|
||||||
function clean_up() {
|
|
||||||
if [[ $inosc == 1 ]]
|
|
||||||
then
|
|
||||||
print_st
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage: $(basename $0)" 1>& 2
|
|
||||||
echo " Copies to clipboard from standard input" 1>& 2
|
|
||||||
echo " $(basename $0) filename" 1>& 2
|
|
||||||
echo " Copies to clipboard from file" 1>& 2
|
|
||||||
}
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Look for command line flags.
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-h|--h|--help)
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
error "Unknown option flag: $1"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [ -r "$1" ] ; then
|
|
||||||
data=$(base64 < "$1")
|
|
||||||
print_osc
|
|
||||||
inosc=1
|
|
||||||
printf '1337;Copy=:%s' "$data"
|
|
||||||
print_st
|
|
||||||
inosc=0
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
error "it2copy: $1: No such file or directory"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
data=$(base64)
|
|
||||||
print_osc
|
|
||||||
inosc=1
|
|
||||||
printf '1337;Copy=:%s' "$data"
|
|
||||||
print_st
|
|
||||||
inosc=0
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
if [ $# -lt 1 ]; then
|
|
||||||
echo "Usage: $(basename $0) file ..."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
function load_version() {
|
|
||||||
if [ -z ${IT2DL_BASE64_VERSION+x} ]; then
|
|
||||||
export IT2DL_BASE64_VERSION=$(base64 --version 2>&1)
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function b64_encode() {
|
|
||||||
load_version
|
|
||||||
if [[ "$IT2DL_BASE64_VERSION" =~ GNU ]]; then
|
|
||||||
# Disable line wrap
|
|
||||||
base64 -w0
|
|
||||||
else
|
|
||||||
base64
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for fn in "$@"
|
|
||||||
do
|
|
||||||
if [ -r "$fn" ] ; then
|
|
||||||
[ -d "$fn" ] && { echo "$fn is a directory"; continue; }
|
|
||||||
printf '\033]1337;File=name=%s;' $(echo -n "$fn" | b64_encode)
|
|
||||||
wc -c "$fn" | awk '{printf "size=%d",$1}'
|
|
||||||
printf ":"
|
|
||||||
base64 < "$fn"
|
|
||||||
printf '\a'
|
|
||||||
else
|
|
||||||
echo File $fn does not exist or is not readable.
|
|
||||||
fi
|
|
||||||
done
|
|
|
@ -1,95 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]" >& 2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\" >& 2
|
|
||||||
else
|
|
||||||
printf "\a" >& 2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage:" 1>& 2
|
|
||||||
echo " $(basename $0) name" 1>& 2
|
|
||||||
}
|
|
||||||
|
|
||||||
# Read some bytes from stdin. Pass the number of bytes to read as the first argument.
|
|
||||||
function read_bytes() {
|
|
||||||
numbytes=$1
|
|
||||||
dd bs=1 count=$numbytes 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
# read_until c
|
|
||||||
# Returns bytes read from stdin up to but not including the fist one equal to c
|
|
||||||
function read_until() {
|
|
||||||
result=""
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
b=$(read_bytes 1)
|
|
||||||
if [[ $b == $1 ]]
|
|
||||||
then
|
|
||||||
echo "$result"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
result="$result$b"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
## Main
|
|
||||||
if [[ $# != 1 ]]
|
|
||||||
then
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! test -t 1
|
|
||||||
then
|
|
||||||
echo "Standard error not a terminal"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
trap clean_up EXIT
|
|
||||||
_STTY=$(stty -g) ## Save current terminal setup
|
|
||||||
|
|
||||||
function clean_up() {
|
|
||||||
stty "$_STTY" ## Restore terminal settings
|
|
||||||
}
|
|
||||||
|
|
||||||
# Enter raw mode and turn off echo so the terminal and I can chat quietly.
|
|
||||||
stty -echo -icanon raw
|
|
||||||
|
|
||||||
print_osc
|
|
||||||
printf "1337;ReportVariable=%s" "$(printf "%s" "$1" | base64)" >& 2
|
|
||||||
print_st
|
|
||||||
|
|
||||||
VERSION=$(base64 --version 2>&1)
|
|
||||||
if [[ "$VERSION" =~ fourmilab ]]; then
|
|
||||||
BASE64ARG=-d
|
|
||||||
elif [[ "$VERSION" =~ GNU ]]; then
|
|
||||||
BASE64ARG=-di
|
|
||||||
else
|
|
||||||
BASE64ARG=-D
|
|
||||||
fi
|
|
||||||
|
|
||||||
ignore=$(read_bytes 1)
|
|
||||||
name=$(read_until )
|
|
||||||
re='^]1337;ReportVariable=(.*)'
|
|
||||||
if [[ $name =~ $re ]]
|
|
||||||
then
|
|
||||||
printf "%s" $(base64 $BASE64ARG <<< ${BASH_REMATCH[1]})
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# This script sets iTerm2 user-defined variables describing the state of the git
|
|
||||||
# repo in the current directory.
|
|
||||||
#
|
|
||||||
# For more information on the status bar, see:
|
|
||||||
# https://www.iterm2.com/3.3/documentation-status-bar.html
|
|
||||||
#
|
|
||||||
# Installation instructions for this script:
|
|
||||||
#
|
|
||||||
# bash: Place this in .bashrc.
|
|
||||||
# --------------------------------------------------------------------------------------
|
|
||||||
# function iterm2_print_user_vars() {
|
|
||||||
# it2git
|
|
||||||
# }
|
|
||||||
|
|
||||||
# fish: Place this in ~/.config/fish/config.fish after the line
|
|
||||||
# "source ~/.iterm2_shell_integration.fish".
|
|
||||||
# --------------------------------------------------------------------------------------
|
|
||||||
# function iterm2_print_user_vars
|
|
||||||
# it2git
|
|
||||||
# end
|
|
||||||
|
|
||||||
# tcsh: Place this in .tcshrc
|
|
||||||
# --------------------------------------------------------------------------------------
|
|
||||||
# alias get_current_branch "bash -c '((git branch 2> /dev/null) | grep \* | cut -c3-)'"
|
|
||||||
# alias _iterm2_user_defined_vars 'it2git'
|
|
||||||
|
|
||||||
# zsh:Place this in .zshrc after "source /Users/georgen/.iterm2_shell_integration.zsh".
|
|
||||||
# --------------------------------------------------------------------------------------
|
|
||||||
# iterm2_print_user_vars() {
|
|
||||||
# it2git
|
|
||||||
# }
|
|
||||||
|
|
||||||
GIT_BINARY=/usr/bin/git
|
|
||||||
|
|
||||||
dirty() {
|
|
||||||
# Outputs "dirty" or "clean"
|
|
||||||
OUTPUT=$("$GIT_BINARY" status --porcelain --ignore-submodules -unormal 2>/dev/null)
|
|
||||||
if (($?)); then
|
|
||||||
echo "clean"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if [ -z "$OUTPUT" ]; then
|
|
||||||
echo "clean"
|
|
||||||
else
|
|
||||||
echo "dirty"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
counts() {
|
|
||||||
OUTPUT=$("$GIT_BINARY" rev-list --left-right --count HEAD...@'{u}' 2>/dev/null)
|
|
||||||
if (($?)); then
|
|
||||||
echo "error"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
echo "$OUTPUT"
|
|
||||||
}
|
|
||||||
|
|
||||||
branch() {
|
|
||||||
OUTPUT=$("$GIT_BINARY" symbolic-ref -q --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)
|
|
||||||
if (($?)); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
echo "$OUTPUT"
|
|
||||||
}
|
|
||||||
|
|
||||||
adds() {
|
|
||||||
"${GIT_BINARY}" ls-files --others --exclude-standard | wc -l
|
|
||||||
}
|
|
||||||
|
|
||||||
deletes() {
|
|
||||||
"${GIT_BINARY}" ls-files --deleted --exclude-standard | wc -l
|
|
||||||
}
|
|
||||||
function iterm2_begin_osc {
|
|
||||||
printf "\033]"
|
|
||||||
}
|
|
||||||
|
|
||||||
function iterm2_end_osc {
|
|
||||||
printf "\007"
|
|
||||||
}
|
|
||||||
|
|
||||||
function iterm2_set_user_var() {
|
|
||||||
iterm2_begin_osc
|
|
||||||
printf "1337;SetUserVar=%s=%s" "$1" $(printf "%s" "$2" | base64 | tr -d '\n')
|
|
||||||
iterm2_end_osc
|
|
||||||
}
|
|
||||||
|
|
||||||
git_poll () {
|
|
||||||
DIRECTORY="$1"
|
|
||||||
cd "$DIRECTORY"
|
|
||||||
DIRTY=$(dirty)
|
|
||||||
COUNTS=$(counts)
|
|
||||||
PUSH_COUNT=$(cut -f1 <<< "$COUNTS")
|
|
||||||
PULL_COUNT=$(cut -f2 <<< "$COUNTS")
|
|
||||||
BRANCH=$(branch)
|
|
||||||
|
|
||||||
iterm2_set_user_var gitBranch "$BRANCH"
|
|
||||||
iterm2_set_user_var gitDirty "$DIRTY"
|
|
||||||
iterm2_set_user_var gitPushCount "$PUSH_COUNT"
|
|
||||||
iterm2_set_user_var gitPullCount "$PULL_COUNT"
|
|
||||||
iterm2_set_user_var gitAdds "$ADDS"
|
|
||||||
iterm2_set_user_var gitDeletes "$DELETES"
|
|
||||||
}
|
|
||||||
|
|
||||||
"$GIT_BINARY" rev-parse --git-dir 2>/dev/null >/dev/null
|
|
||||||
if (($?)); then
|
|
||||||
iterm2_set_user_var gitBranch ""
|
|
||||||
iterm2_set_user_var gitDirty ""
|
|
||||||
iterm2_set_user_var gitPushCount ""
|
|
||||||
iterm2_set_user_var gitPullCount ""
|
|
||||||
iterm2_set_user_var gitAdds ""
|
|
||||||
iterm2_set_user_var gitDeletes ""
|
|
||||||
else
|
|
||||||
git_poll "$PWD"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
|
@ -1,170 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_b64_version() {
|
|
||||||
if [[ -z "${BASE64_VERSION+x}" ]]; then
|
|
||||||
BASE64_VERSION=$(base64 --version 2>&1)
|
|
||||||
export BASE64_VERSION
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function b64_encode() {
|
|
||||||
get_b64_version
|
|
||||||
if [[ $BASE64_VERSION =~ GNU ]]; then
|
|
||||||
# Disable line wrap
|
|
||||||
base64 -w0
|
|
||||||
else
|
|
||||||
base64
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function b64_decode() {
|
|
||||||
get_b64_version
|
|
||||||
if [[ $BASE64_VERSION =~ fourmilab ]]; then
|
|
||||||
BASE64_ARG=-d
|
|
||||||
elif [[ $BASE64_VERSION =~ GNU ]]; then
|
|
||||||
BASE64_ARG=-di
|
|
||||||
else
|
|
||||||
BASE64_ARG=-D
|
|
||||||
fi
|
|
||||||
base64 $BASE64_ARG
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
errcho "ERROR: $*"
|
|
||||||
}
|
|
||||||
|
|
||||||
function errcho() {
|
|
||||||
echo "$@" >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
errcho
|
|
||||||
errcho "Usage: it2profile -s profile_name"
|
|
||||||
errcho " it2profile -g"
|
|
||||||
errcho
|
|
||||||
errcho "Change iTerm2 session profile on the fly"
|
|
||||||
errcho
|
|
||||||
errcho "Options:"
|
|
||||||
errcho
|
|
||||||
errcho " -s Set current iTerm2 session profile to specified profile name"
|
|
||||||
errcho " empty string refers to profile marked as Default"
|
|
||||||
errcho " -g Get current iTerm2 session profile name"
|
|
||||||
errcho " -r Reset to the session initial profile"
|
|
||||||
errcho
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_dependency() {
|
|
||||||
if ! (builtin command -V "$1" >/dev/null 2>&1); then
|
|
||||||
error "missing dependency: can't find $1"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# get_profile / set_profile
|
|
||||||
#
|
|
||||||
# These functions uses POSIX standard synonym for the controlling terminal
|
|
||||||
# associated with the current process group - /dev/tty. It is useful for programs
|
|
||||||
# that wish to be sure of writing or reading data from the terminal
|
|
||||||
# no matter how STDIN/STDOUT/STDERR has been redirected.
|
|
||||||
#
|
|
||||||
# get_profile uses iTerm2 Session Context variable "profileName" to
|
|
||||||
# get currently active profile name.
|
|
||||||
#
|
|
||||||
function get_profile() {
|
|
||||||
trap 'cleanup' EXIT
|
|
||||||
stty -f /dev/tty -echo 2&> /dev/null || stty -F /dev/tty -echo
|
|
||||||
exec 9<> /dev/tty
|
|
||||||
print_osc >&9
|
|
||||||
printf "1337;ReportVariable=cHJvZmlsZU5hbWU=" >&9
|
|
||||||
print_st >&9
|
|
||||||
read -r -t 5 -d $'\a' iterm_response <&9
|
|
||||||
exec 9>&-
|
|
||||||
stty -f /dev/tty -echo 2&> /dev/null || stty -F /dev/tty -echo
|
|
||||||
[[ "$iterm_response" =~ ReportVariable= ]] || {
|
|
||||||
error "Failed to read response from iTerm2"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
echo "$(b64_decode <<< ${iterm_response#*=})"
|
|
||||||
}
|
|
||||||
|
|
||||||
function cleanup() {
|
|
||||||
stty -f /dev/tty echo 2&> /dev/null || stty -F /dev/tty echo
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_profile() {
|
|
||||||
exec 9> /dev/tty
|
|
||||||
print_osc >&9
|
|
||||||
printf '1337;SetProfile=%s' "$1" >&9
|
|
||||||
print_st >&9
|
|
||||||
exec 9>&-
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show help if no arguments
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
check_dependency stty
|
|
||||||
check_dependency base64
|
|
||||||
|
|
||||||
# Process command line arguments
|
|
||||||
case "$1" in
|
|
||||||
-h|--h|--help)
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
-s|--s|--set)
|
|
||||||
[[ $# -eq 2 ]] || {
|
|
||||||
error "-s option requires exactly 1 argument - profile name"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
set_profile "$2"
|
|
||||||
;;
|
|
||||||
-g|--g|--get)
|
|
||||||
[[ $# -eq 1 ]] || {
|
|
||||||
error "-g option does not accept any argument"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
get_profile
|
|
||||||
;;
|
|
||||||
-r|--r|--reset)
|
|
||||||
[[ $# -eq 1 ]] || {
|
|
||||||
error "-r option does not accept any argument"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
set_profile "${ITERM_PROFILE:-}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
error "Unknown option: $1"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,116 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
open=0
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# set_color key rgb
|
|
||||||
function set_color() {
|
|
||||||
print_osc
|
|
||||||
printf '1337;SetColors=%s=%s' "$1" "$2"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
echo "ERROR: $*" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
if [ $open = 1 ]; then
|
|
||||||
print_st
|
|
||||||
fi
|
|
||||||
echo "Usage"
|
|
||||||
echo ""
|
|
||||||
echo "1) To set a specific color to an RGB value:"
|
|
||||||
echo " it2setcolor name color [name color...]" 1>& 2
|
|
||||||
echo "For example:"
|
|
||||||
echo " it2setcolor fg fff"
|
|
||||||
echo ""
|
|
||||||
echo "name is one of:"
|
|
||||||
echo " fg bg bold link selbg selfg curbg curfg underline tab"
|
|
||||||
echo " black red green yellow blue magenta cyan white"
|
|
||||||
echo " br_black br_red br_green br_yellow br_blue br_magenta br_cyan br_white"
|
|
||||||
echo ""
|
|
||||||
echo "color is of the format:"
|
|
||||||
echo " RGB (three hex digits, like fff)"
|
|
||||||
echo " RRGGBB (six hex digits, like f0f0f0)"
|
|
||||||
echo " cs:RGB (cs is a color space name)"
|
|
||||||
echo " cs:RRGGBB (cs is a color space name)"
|
|
||||||
echo ""
|
|
||||||
echo " The color space names accepted in the color are:"
|
|
||||||
echo " srgb (sRGB, the default if none is specified)"
|
|
||||||
echo " rgb (Apple's old device-independent colorspace)"
|
|
||||||
echo " p3 (Apple's fancy large-gamut colorspace)"
|
|
||||||
echo ""
|
|
||||||
echo "2) To switch to a named color preset:"
|
|
||||||
echo " it2setcolor preset name"
|
|
||||||
echo "For example:"
|
|
||||||
echo " it2setcolor preset 'Light Background'"
|
|
||||||
echo ""
|
|
||||||
echo "3) To reset the current tab's color to the system default:"
|
|
||||||
echo " it2setcolor tab default"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show help if no arguments and no stdin.
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Look for command line flags.
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-h|--h|--help)
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
error "Unknown option flag: $1"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [ $# -lt 2 ]; then
|
|
||||||
show_help
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if [ $open = 0 ]; then
|
|
||||||
open=1
|
|
||||||
print_osc
|
|
||||||
printf '1337;SetColors='
|
|
||||||
else
|
|
||||||
printf ","
|
|
||||||
fi
|
|
||||||
# name is not checked for validity because we'd like this to work with future colors, too.
|
|
||||||
printf "%s=%s" "$1" "$2"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ $open = 1 ]; then
|
|
||||||
print_st
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
|
@ -1,123 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage:" 1>& 2
|
|
||||||
echo " $(basename $0) set Fn Label" 1>& 2
|
|
||||||
echo " Where n is a value from 1 to 20" 1>& 2
|
|
||||||
echo " $(basename $0) set status Label" 1>& 2
|
|
||||||
echo " Sets the touch bar status button's label" 1>& 2
|
|
||||||
echo " $(basename $0) push [name]" 1>& 2
|
|
||||||
echo " Saves the current labels with an optional name. Resets labels to their default value, unless name begins with a "." character." 1>& 2
|
|
||||||
echo " $(basename $0) pop [name]" 1>& 2
|
|
||||||
echo " If name is given, all key labels up to and including the one with the matching name are popped." 1>& 2
|
|
||||||
echo "" 1>& 2
|
|
||||||
echo "Example:" 1>& 2
|
|
||||||
echo "#!/bin/bash" 1>& 2
|
|
||||||
echo "# Wrapper script for mc that sets function key labels" 1>& 2
|
|
||||||
echo "NAME=mc_\$RANDOM" 1>& 2
|
|
||||||
echo "# Save existing labels" 1>& 2
|
|
||||||
echo "$(basename $0) push \$NAME" 1>& 2
|
|
||||||
echo "$(basename $0) set F1 Help" 1>& 2
|
|
||||||
echo "$(basename $0) set F2 Menu" 1>& 2
|
|
||||||
echo "$(basename $0) set F3 View" 1>& 2
|
|
||||||
echo "$(basename $0) set F4 Edit" 1>& 2
|
|
||||||
echo "$(basename $0) set F5 Copy" 1>& 2
|
|
||||||
echo "$(basename $0) set F6 Move" 1>& 2
|
|
||||||
echo "$(basename $0) set F7 Mkdir" 1>& 2
|
|
||||||
echo "$(basename $0) set F8 Del" 1>& 2
|
|
||||||
echo "$(basename $0) set F9 Menu" 1>& 2
|
|
||||||
echo "$(basename $0) set F10 Quit" 1>& 2
|
|
||||||
echo "$(basename $0) set F11 Menu" 1>& 2
|
|
||||||
echo "$(basename $0) set F13 View" 1>& 2
|
|
||||||
echo "$(basename $0) set F14 Edit" 1>& 2
|
|
||||||
echo "$(basename $0) set F15 Copy" 1>& 2
|
|
||||||
echo "$(basename $0) set F16 Move" 1>& 2
|
|
||||||
echo "$(basename $0) set F17 Find" 1>& 2
|
|
||||||
echo "mc" 1>& 2
|
|
||||||
echo "# Restore labels to their previous state" 1>& 2
|
|
||||||
echo "$(basename $0) pop \$NAME" 1>& 2
|
|
||||||
}
|
|
||||||
|
|
||||||
## Main
|
|
||||||
if [[ $# == 0 ]]
|
|
||||||
then
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $1 == set ]]
|
|
||||||
then
|
|
||||||
if [[ $# != 3 ]]
|
|
||||||
then
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
print_osc
|
|
||||||
printf "1337;SetKeyLabel=%s=%s" "$2" "$3"
|
|
||||||
print_st
|
|
||||||
elif [[ $1 == push ]]
|
|
||||||
then
|
|
||||||
if [[ $# == 1 ]]
|
|
||||||
then
|
|
||||||
print_osc
|
|
||||||
printf "1337;PushKeyLabels"
|
|
||||||
print_st
|
|
||||||
elif [[ $# == 2 ]]
|
|
||||||
then
|
|
||||||
if [[ $2 == "" ]]
|
|
||||||
then
|
|
||||||
echo "Name must not be empty" 1>& 2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
print_osc
|
|
||||||
printf "1337;PushKeyLabels=%s" "$2"
|
|
||||||
print_st
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif [[ $1 == pop ]]
|
|
||||||
then
|
|
||||||
if [[ $# == 1 ]]
|
|
||||||
then
|
|
||||||
print_osc
|
|
||||||
printf "1337;PopKeyLabels"
|
|
||||||
print_st
|
|
||||||
elif [[ $# == 2 ]]
|
|
||||||
then
|
|
||||||
if [[ $2 == "" ]]
|
|
||||||
then
|
|
||||||
echo "Name must not be empty" 1>& 2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
print_osc
|
|
||||||
printf "1337;PopKeyLabels=%s" "$2"
|
|
||||||
print_st
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
|
@ -1,401 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
tips = [
|
|
||||||
{
|
|
||||||
"title": "Shell Integration",
|
|
||||||
"body": "The big new feature of iTerm2 version 3 is Shell Integration. Click “Learn More” for all the details.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Timestamps",
|
|
||||||
"body": "“View > Show Timestamps” shows the time (and date, if appropriate) when each line was last modified."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Password Manager",
|
|
||||||
"body": "Did you know iTerm2 has a password manager? Open it with “Window > Password Manager.” You can define a Trigger to open it for you at a password prompt in “Prefs > Profiles > Advanced > Triggers.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Open Quickly",
|
|
||||||
"body": "You can quickly search through your sessions with “View > Open Quickly” (⇧⌘O). You can type a query and sessions whose name, badge, current hostname, current user name, recent commands, and recent working directories match will be surfaced. It works best with Shell Integration so the user name, hostname, command, and directories can be known even while sshed.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Undo Close",
|
|
||||||
"body": "If you close a session, tab, or window by accident you can undo it with “Edit > Undo” (⌘Z). By default you have five seconds to undo, but you can adjust that timeout in “Prefs > Profiles > Session.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Annotations",
|
|
||||||
"body": "Want to mark up your scrollback history? Right click on a selection and choose “Annotate Selection” to add a personal note to it. Use “View > Show Annotations” to show or hide them, and look in “Edit > Marks and Annotations” for more things you can do."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Copy with Styles",
|
|
||||||
"body": "Copy a selection with ⌥⌘C to include styles such as colors and fonts. You can make this the default action for Copy in “Prefs > Advanced.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Inline Images",
|
|
||||||
"body": "iTerm2 can display images (even animated GIFs) inline.",
|
|
||||||
"url": "https://iterm2.com/images.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Automatic Profile Switching",
|
|
||||||
"body": "Automatic Profile Switching changes the current profile when the username, hostname, or directory changes. Set it up in “Prefs > Profiles > Advanced.” It requires Shell Integration to be installed.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Captured Output",
|
|
||||||
"body": "iTerm2 can act like an IDE using the Captured Output feature. When it sees text matching a regular expression you define, like compiler errors, it shows the matching lines in the Toolbelt. You can click to jump to the line in your terminal and double-click to perform an action like opening an editor to the line with the error.",
|
|
||||||
"url": "https://iterm2.com/captured_output.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Badges",
|
|
||||||
"body": "You can display a status message in the top right of your session in the background. It’s called a “Badge.” If you install Shell Integration you can include info like user name, hostname, current directory, and more.",
|
|
||||||
"url": "https://iterm2.com/badges.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Dynamic Profiles",
|
|
||||||
"body": "Dynamic Profiles let you store your profiles as one or more JSON files. It’s great for batch creating and editing profiles.",
|
|
||||||
"url": "https://iterm2.com/dynamic-profiles.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Advanced Paste",
|
|
||||||
"body": "“Edit > Paste Special > Advanced Paste” lets you preview and edit text before you paste. You get to tweak options, like how to handle control codes, or even to base-64 encode before pasting."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Zoom",
|
|
||||||
"body": "Ever wanted to focus on a block of lines without distraction, or limit Find to a single command’s output? Select the lines and choose “View > Zoom In on Selection.” The session’s contents will be temporarily replaced with the selection. Press “esc” to unzoom."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Semantic History",
|
|
||||||
"body": "The “Semantic History” feature allows you to ⌘-click on a file or URL to open it."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tmux Integration",
|
|
||||||
"body": "If you use tmux, try running “tmux -CC” to get iTerm2’s tmux integration mode. The tmux windows show up as native iTerm2 windows, and you can use iTerm2’s keyboard shortcuts. It even works over ssh!",
|
|
||||||
"url": "https://gitlab.com/gnachman/iterm2/wikis/TmuxIntegration"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Triggers",
|
|
||||||
"body": "iTerm2 can automatically perform actions you define when text matching a regular expression is received. For example, you can highlight text or show an alert box. Set it up in “Prefs > Profiles > Advanced > Triggers.”",
|
|
||||||
"url": "https://www.iterm2.com/documentation-triggers.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Smart Selection",
|
|
||||||
"body": "Quadruple click to perform Smart Selection. It figures out if you’re selecting a URL, filename, email address, etc. based on prioritized regular expressions.",
|
|
||||||
"url": "https://www.iterm2.com/smartselection.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Instant Replay",
|
|
||||||
"body": "Press ⌥⌘B to step back in time in a terminal window. Use arrow keys to go frame by frame. Hold ⇧ and press arrow keys to go faster."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Hotkey Window",
|
|
||||||
"body": "You can have a terminal window open with a keystroke, even while in other apps. Click “Create a Dedicated Hotkey Window” in “Prefs > Keys.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Hotkey Window",
|
|
||||||
"body": "Hotkey windows can stay open after losing focus. Turn it on in “Window > Pin Hotkey Window.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Cursor Guide",
|
|
||||||
"body": "The cursor guide is a horizontal line that follows your cursor. You can turn it on in “Prefs > Profiles > Colors” or toggle it with the ⌥⌘; shortcut."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration: Alerts",
|
|
||||||
"body": "The Shell Integration feature lets you ask to be alerted (⌥⌘A) when a long-running command completes.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Cursor Blink Rate",
|
|
||||||
"body": "You can configure how quickly the cursor blinks in “Prefs > Advanced.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration: Navigation",
|
|
||||||
"body": "The Shell Integration feature lets you navigate among shell prompts with ⇧⌘↑ and ⇧⌘↓.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration: Status",
|
|
||||||
"body": "The Shell Integration feature puts a blue arrow next to your shell prompt. If you run a command that fails, it turns red. Right click on it to get the running time and status.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration: Selection",
|
|
||||||
"body": "With Shell Integration installed, you can select the output of the last command with ⇧⌘A.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Bells",
|
|
||||||
"body": "The dock icon shows a count of the number of bells rung and notifications posted since the app was last active."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration: Downloads",
|
|
||||||
"body": "If you install Shell Integration on a machine you ssh to, you can right click on a filename (for example, in the output of “ls”) and choose “Download with scp” to download the file.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Find Your Cursor",
|
|
||||||
"body": "Press ⌘/ to locate your cursor. It’s fun!"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Customize Smart Selection",
|
|
||||||
"body": "You can edit Smart Selection regular expressions in “Prefs > Profiles > Advanced > Smart Selection.”",
|
|
||||||
"url": "https://www.iterm2.com/smartselection.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Smart Selection Actions",
|
|
||||||
"body": "Assign an action to a Smart Selection rule in “Prefs > Profiles > Advanced > Smart Selection > Edit Actions.” They go in the context menu and override semantic history on ⌘-click.",
|
|
||||||
"url": "https://www.iterm2.com/smartselection.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Visual Bell",
|
|
||||||
"body": "If you want the visual bell to flash the whole screen instead of show a bell icon, you can turn that on in “Prefs > Advanced.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tab Menu",
|
|
||||||
"body": "Right click on a tab to change its color, close tabs after it, or to close all other tabs."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tags",
|
|
||||||
"body": "You can assign tags to your profiles, and by clicking “Tags>” anywhere you see a list of profiles you can browse those tags."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tag Hierarchy",
|
|
||||||
"body": "If you put a slash in a profile’s tag, that implicitly defines a hierarchy. You can see it in the Profiles menu as nested submenus."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Downloads",
|
|
||||||
"body": "iTerm2 can download files by base-64 encoding them. Click “Learn More” to download a shell script that makes it easy.",
|
|
||||||
"url": "https://iterm2.com/download.sh"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Command Completion",
|
|
||||||
"body": "If you install Shell Integration, ⇧⌘; helps you complete commands. It remembers the commands you’ve run on each host that has Shell Integration installed. It knows how often that command was run and how recently to help make the best suggestions.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Recent Directories",
|
|
||||||
"body": "iTerm2 remembers which directories you use the most on each host that has Shell Integration installed. There’s a Toolbelt tool to browse them, and ⌥⌘/ gives you a popup sorted by frequency and recency of use.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Favorite Directories",
|
|
||||||
"body": "If you have Shell Integration installed, you can “star” a directory to keep it always at the bottom of the Recent Directories tool in the Toolbelt. Right click and choose “Toggle Star.”",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration History",
|
|
||||||
"body": "Install Shell Integration and turn on “Prefs > General > Save copy/paste and command history to disk” to remember command history per host across restarts of iTerm2.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Paste File as Base64",
|
|
||||||
"body": "Copy a file to the pasteboard in Finder and then use “Edit > Paste Special > Paste File Base64-Encoded” for easy uploads of binary files. Use ”base64 -D” (or -d on Linux) on the remote host to decode it."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Split Panes",
|
|
||||||
"body": "You can split a tab into multiple panes with ⌘D and ⇧⌘D."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Adjust Split Panes",
|
|
||||||
"body": "Resize split panes with the keyboard using ^⌘-Arrow Key."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Move Cursor",
|
|
||||||
"body": "Hold ⌥ and click to move your cursor. It works best with Shell Integration installed (to avoid sending up/down arrow keys to your shell).",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Edge Windows",
|
|
||||||
"body": "You can tell your profile to create windows that are attached to one edge of the screen in “Prefs > Profiles > Window.” You can resize them by dragging the edges."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tab Color",
|
|
||||||
"body": "You can assign colors to tabs in “Prefs > Profiles > Colors,” or in the View menu."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Rectangular Selection",
|
|
||||||
"body": "Hold ⌥⌘ while dragging to make a rectangular selection."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Multiple Selection",
|
|
||||||
"body": "Hold ⌘ while dragging to make multiple discontinuous selections."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Dragging Panes",
|
|
||||||
"body": "Hold ⇧⌥⌘ and drag a session into another session to create or change split panes."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Cursor Boost",
|
|
||||||
"body": "Adjust Cursor Boost in “Prefs > Profiles > Colors” to make all colors more muted, except the cursor. Use a bright white cursor and it pops!"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Minimum Contrast",
|
|
||||||
"body": "Adjust “Minimum Contrast” in “Prefs > Profiles > Colors” to ensure text is always legible regardless of text/background color combination."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tabs",
|
|
||||||
"body": "Normally, new tabs appear at the end of the tab bar. There’s a setting in “Prefs > Advanced” to place them next to your current tab."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Base Conversion",
|
|
||||||
"body": "Right-click on a number and the context menu shows it converted to hex or decimal as appropriate."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Saved Searches",
|
|
||||||
"body": "In “Prefs > Keys” you can assign a keystroke to a search for a regular expression with the “Find Regular Expression…” action."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Find URLs",
|
|
||||||
"body": "Search for URLs using “Edit > Find > Find URLs.” Navigate search results with ⌘G and ⇧⌘G. Open the current selection with ⌥⌘O."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Triggers",
|
|
||||||
"body": "The “instant” checkbox in a Trigger allows it to fire while the cursor is on the same line as the text that matches your regular expression."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Soft Boundaries",
|
|
||||||
"body": "Turn on “Edit > Selection Respects Soft Boundaries” to recognize split pane dividers in programs like vi, emacs, and tmux so you can select multiple lines of text."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Select Without Dragging",
|
|
||||||
"body": "Single click where you want to start a selection and ⇧-click where you want it to end to select text without dragging."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Smooth Window Resizing",
|
|
||||||
"body": "Hold ^ while resizing a window and it won’t snap to the character grid: you can make it any size you want."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Pasting Tabs",
|
|
||||||
"body": "If you paste text containing tabs, you’ll be asked if you want to convert them to spaces. It’s handy at the shell prompt to avoid triggering filename completion."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Bell Silencing",
|
|
||||||
"body": "Did you know? If the bell rings too often, you’ll be asked if you’d like to silence it temporarily. iTerm2 cares about your comfort."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Profile Search",
|
|
||||||
"body": "Every list of profiles has a search field (e.g., in ”Prefs > Profiles.”) You can use various operators to restrict your search query. Click “Learn More” for all the details.",
|
|
||||||
"url": "https://iterm2.com/search_syntax.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Color Schemes",
|
|
||||||
"body": "The online color gallery features over one hundred beautiful color schemes you can download.",
|
|
||||||
"url": "https://www.iterm2.com/colorgallery"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "ASCII/Non-Ascii Fonts",
|
|
||||||
"body": "You can have a separate font for ASCII versus non-ASCII text. Enable it in “Prefs > Profiles > Text.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Coprocesses",
|
|
||||||
"body": "A coprocess is a job, such as a shell script, that has a special relationship with a particular iTerm2 session. All output in a terminal window (that is, what you see on the screen) is also input to the coprocess. All output from the coprocess acts like text that the user is typing at the keyboard.",
|
|
||||||
"url": "https://iterm2.com/coprocesses.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Touch Bar Customization",
|
|
||||||
"body": "You can customize the touch bar by selecting “View > Customize Touch Bar.” You can add a tab bar for full-screen mode, a user-customizable status button, and you can even define your own touch bar buttons in Prefs > Keys. There’s also a new shell integration tool to customize touch bar function key labels."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Ligatures",
|
|
||||||
"body": "If you use a font that supports ligatures, you can enable ligature support in Prefs > Profiles > Text."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Floating Hotkey Window",
|
|
||||||
"body": "New in 3.1: You can configure your hotkey window to appear over other apps’ full screen windows. Turn on “Floating Window” in “Prefs > Profiles > Keys > Customize Hotkey Window.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Multiple Hotkey Windows",
|
|
||||||
"body": "New in 3.1: You can have multiple hotkey windows. Each profile can have one or more hotkeys."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Double-Tap Hotkey",
|
|
||||||
"body": "New in 3.1: You can configure a hotkey window to open on double-tap of a modifier in “Prefs > Profiles > Keys > Customize Hotkey Window.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Buried Sessions",
|
|
||||||
"body": "You can “bury” a session with “Session > Bury Session.” It remains hidden until you restore it by selecting it from “Session > Buried Sessions > Your session.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Python API",
|
|
||||||
"body": "You can add custom behavior to iTerm2 using the Python API.",
|
|
||||||
"url": "https://iterm2.com/python-api"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Status Bar",
|
|
||||||
"body": "You can add a configurable status bar to your terminal windows.",
|
|
||||||
"url": "https://iterm2.com/3.3/documentation-status-bar.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Minimal Theme",
|
|
||||||
"body": "Try the “Minimal” and “Compact” themes to reduce visual clutter. You can set it in “Prefs > Appearance > General.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Session Titles",
|
|
||||||
"body": "You can configure which elements are present in session titles in “Prefs > Profiles > General > Title.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Tab Icons",
|
|
||||||
"body": "Tabs can show an icon indicating the current application. Configure it in “Prefs > Profiles > General > Icon.”"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Drag Window by Tab",
|
|
||||||
"body": "Hold ⌥ while dragging a tab to move the window. This is useful in the Compact and Minimal themes, which have a very small area for dragging the window."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Composer",
|
|
||||||
"body": "Press ⇧⌘. to open the Composer. It gives you a scratchpad to edit a command before sending it to the shell."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Shell Integration: Uploads",
|
|
||||||
"body": "If you install Shell Integration on a machine you ssh to, you can drag-drop from Finder into the remote host by holding ⌥ while dragging. The destination directory is determined by where you drop the file in the terminal window: run cd foo, then drop the file below the cd command, and the file will go into the foo directory.",
|
|
||||||
"url": "https://iterm2.com/shell_integration.html"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
home = os.getenv("XDG_DATA_HOME")
|
|
||||||
if not home:
|
|
||||||
home = "~"
|
|
||||||
|
|
||||||
RCFILE = os.path.expanduser(os.path.join(home, '.it2totd'))
|
|
||||||
|
|
||||||
def last_index():
|
|
||||||
try:
|
|
||||||
with open(RCFILE) as f:
|
|
||||||
lines = f.readlines()
|
|
||||||
return int(lines[0].rstrip())
|
|
||||||
except:
|
|
||||||
return -1
|
|
||||||
|
|
||||||
def print_tip(i):
|
|
||||||
def dcs(args):
|
|
||||||
return "\x1bP" + ";".join(args)
|
|
||||||
|
|
||||||
def osc(args):
|
|
||||||
term = os.getenv("TERM")
|
|
||||||
if term.startswith("screen"):
|
|
||||||
return dcs(["tmux", "\x1b\x1b]"]) + ";".join(args) + "\a\x1b\\"
|
|
||||||
else:
|
|
||||||
return "\x1b]" + ";".join(args) + "\x1b\\"
|
|
||||||
|
|
||||||
tip = tips[i]
|
|
||||||
print(f'iTerm2 tip - {tip["title"]}:')
|
|
||||||
print(tip["body"])
|
|
||||||
if "url" in tip:
|
|
||||||
print("Learn more: " + osc(["8", "", tip["url"]]) + tip["url"] + osc(["8", "", ""]))
|
|
||||||
|
|
||||||
def save_index(i):
|
|
||||||
with open(RCFILE, "w") as f:
|
|
||||||
f.write(str(i))
|
|
||||||
|
|
||||||
i = last_index() + 1
|
|
||||||
if i >= len(tips) and len(sys.argv) > 1 and sys.argv[1] == "-w":
|
|
||||||
i = 0
|
|
||||||
|
|
||||||
if i < len(tips):
|
|
||||||
print_tip(i)
|
|
||||||
save_index(i)
|
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
trap clean_up EXIT
|
|
||||||
_STTY=$(stty -g) ## Save current terminal setup
|
|
||||||
stty -echo ## Turn off echo
|
|
||||||
|
|
||||||
function clean_up() {
|
|
||||||
stty "$_STTY" ## Restore terminal settings
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage: $(basename $0) [destination [tar flags]]" 1>& 2
|
|
||||||
echo " If given, the destination specifies the directory to place downloaded files."
|
|
||||||
echo " Further options are passed through to tar. See your system's manpage for tar for details."
|
|
||||||
}
|
|
||||||
|
|
||||||
function bad_input() {
|
|
||||||
echo "Bad input: %1" 1>& 2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
function die() {
|
|
||||||
echo "Fatal error: $1" 1>& 2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
function read_base64_stanza() {
|
|
||||||
value=""
|
|
||||||
while read line;
|
|
||||||
do
|
|
||||||
if [ "$line" == "" ]; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
printf "%s" "$line"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
function decode() {
|
|
||||||
VERSION=$(base64 --version 2>&1)
|
|
||||||
if [[ "$VERSION" =~ fourmilab ]]; then
|
|
||||||
BASE64ARG=-d
|
|
||||||
elif [[ "$VERSION" =~ GNU ]]; then
|
|
||||||
BASE64ARG=-di
|
|
||||||
else
|
|
||||||
BASE64ARG=-D
|
|
||||||
fi
|
|
||||||
|
|
||||||
base64 "$BASE64ARG" <<< "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function send_request_for_upload() {
|
|
||||||
print_osc
|
|
||||||
printf '1337;RequestUpload=format=tgz' ""
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
location="$PWD"
|
|
||||||
if [[ $# > 0 ]]
|
|
||||||
then
|
|
||||||
location="$1"
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
send_request_for_upload
|
|
||||||
read status
|
|
||||||
|
|
||||||
if [[ $status == ok ]]
|
|
||||||
then
|
|
||||||
data=$(read_base64_stanza)
|
|
||||||
clean_up
|
|
||||||
decode "$data" | tar -x -z -C "$location" -f - $* 1>& 2
|
|
||||||
elif [[ $status == abort ]]
|
|
||||||
then
|
|
||||||
echo "Upload aborted" 1>& 2
|
|
||||||
else
|
|
||||||
die "Unknown status: $status" 1>& 2
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
|
||||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
|
||||||
# only accepts ESC backslash for ST.
|
|
||||||
function print_osc() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\033Ptmux;\033\033]"
|
|
||||||
else
|
|
||||||
printf "\033]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# More of the tmux workaround described above.
|
|
||||||
function print_st() {
|
|
||||||
if [[ $TERM == screen* ]] ; then
|
|
||||||
printf "\a\033\\"
|
|
||||||
else
|
|
||||||
printf "\a"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_help() {
|
|
||||||
echo "Usage:" 1>& 2
|
|
||||||
echo " $(basename $0) set 8" 1>& 2
|
|
||||||
echo " $(basename $0) set 9" 1>& 2
|
|
||||||
echo " $(basename $0) push [name]" 1>& 2
|
|
||||||
echo " Saves the current version with an optional name." 1>& 2
|
|
||||||
echo " $(basename $0) pop [name]" 1>& 2
|
|
||||||
echo " If name is given, all versions up to and including the one with the matching name are popped." 1>& 2
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_version() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;UnicodeVersion=$1"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
function push_version() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;UnicodeVersion=push $1"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
function pop_version() {
|
|
||||||
print_osc
|
|
||||||
printf "1337;UnicodeVersion=pop $1"
|
|
||||||
print_st
|
|
||||||
}
|
|
||||||
|
|
||||||
## Main
|
|
||||||
if [[ $# == 0 ]]
|
|
||||||
then
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $1 == set ]]
|
|
||||||
then
|
|
||||||
if [[ $# != 2 ]]
|
|
||||||
then
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
set_version $2
|
|
||||||
elif [[ $1 == push ]]
|
|
||||||
then
|
|
||||||
if [[ $# == 1 ]]
|
|
||||||
then
|
|
||||||
push_version ""
|
|
||||||
elif [[ $# == 2 ]]
|
|
||||||
then
|
|
||||||
if [[ $2 == "" ]]
|
|
||||||
then
|
|
||||||
echo "Name must not be empty" 1>& 2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
push_version "$2"
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif [[ $1 == pop ]]
|
|
||||||
then
|
|
||||||
if [[ $# == 1 ]]
|
|
||||||
then
|
|
||||||
pop_version ""
|
|
||||||
elif [[ $# == 2 ]]
|
|
||||||
then
|
|
||||||
if [[ $2 == "" ]]
|
|
||||||
then
|
|
||||||
echo "Name must not be empty" 1>& 2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
pop_version "$2"
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,179 +0,0 @@
|
||||||
# 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 2
|
|
||||||
# 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, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
|
|
||||||
if [[ -o interactive ]]; then
|
|
||||||
if [ "${ITERM_ENABLE_SHELL_INTEGRATION_WITH_TMUX-}""$TERM" != "screen" -a "${ITERM_SHELL_INTEGRATION_INSTALLED-}" = "" -a "$TERM" != linux -a "$TERM" != dumb ]; then
|
|
||||||
ITERM_SHELL_INTEGRATION_INSTALLED=Yes
|
|
||||||
ITERM2_SHOULD_DECORATE_PROMPT="1"
|
|
||||||
# Indicates start of command output. Runs just before command executes.
|
|
||||||
iterm2_before_cmd_executes() {
|
|
||||||
if [ "$TERM_PROGRAM" = "iTerm.app" ]; then
|
|
||||||
printf "\033]133;C;\r\007"
|
|
||||||
else
|
|
||||||
printf "\033]133;C;\007"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
iterm2_set_user_var() {
|
|
||||||
printf "\033]1337;SetUserVar=%s=%s\007" "$1" $(printf "%s" "$2" | base64 | tr -d '\n')
|
|
||||||
}
|
|
||||||
|
|
||||||
# Users can write their own version of this method. It should call
|
|
||||||
# iterm2_set_user_var but not produce any other output.
|
|
||||||
# e.g., iterm2_set_user_var currentDirectory $PWD
|
|
||||||
# Accessible in iTerm2 (in a badge now, elsewhere in the future) as
|
|
||||||
# \(user.currentDirectory).
|
|
||||||
whence -v iterm2_print_user_vars > /dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
iterm2_print_user_vars() {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
iterm2_print_state_data() {
|
|
||||||
local _iterm2_hostname="${iterm2_hostname-}"
|
|
||||||
if [ -z "${iterm2_hostname:-}" ]; then
|
|
||||||
_iterm2_hostname=$(hostname -f 2>/dev/null)
|
|
||||||
fi
|
|
||||||
printf "\033]1337;RemoteHost=%s@%s\007" "$USER" "${_iterm2_hostname-}"
|
|
||||||
printf "\033]1337;CurrentDir=%s\007" "$PWD"
|
|
||||||
iterm2_print_user_vars
|
|
||||||
}
|
|
||||||
|
|
||||||
# Report return code of command; runs after command finishes but before prompt
|
|
||||||
iterm2_after_cmd_executes() {
|
|
||||||
printf "\033]133;D;%s\007" "$STATUS"
|
|
||||||
iterm2_print_state_data
|
|
||||||
}
|
|
||||||
|
|
||||||
# Mark start of prompt
|
|
||||||
iterm2_prompt_mark() {
|
|
||||||
printf "\033]133;A\007"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Mark end of prompt
|
|
||||||
iterm2_prompt_end() {
|
|
||||||
printf "\033]133;B\007"
|
|
||||||
}
|
|
||||||
|
|
||||||
# There are three possible paths in life.
|
|
||||||
#
|
|
||||||
# 1) A command is entered at the prompt and you press return.
|
|
||||||
# The following steps happen:
|
|
||||||
# * iterm2_preexec is invoked
|
|
||||||
# * PS1 is set to ITERM2_PRECMD_PS1
|
|
||||||
# * ITERM2_SHOULD_DECORATE_PROMPT is set to 1
|
|
||||||
# * The command executes (possibly reading or modifying PS1)
|
|
||||||
# * iterm2_precmd is invoked
|
|
||||||
# * ITERM2_PRECMD_PS1 is set to PS1 (as modified by command execution)
|
|
||||||
# * PS1 gets our escape sequences added to it
|
|
||||||
# * zsh displays your prompt
|
|
||||||
# * You start entering a command
|
|
||||||
#
|
|
||||||
# 2) You press ^C while entering a command at the prompt.
|
|
||||||
# The following steps happen:
|
|
||||||
# * (iterm2_preexec is NOT invoked)
|
|
||||||
# * iterm2_precmd is invoked
|
|
||||||
# * iterm2_before_cmd_executes is called since we detected that iterm2_preexec was not run
|
|
||||||
# * (ITERM2_PRECMD_PS1 and PS1 are not messed with, since PS1 already has our escape
|
|
||||||
# sequences and ITERM2_PRECMD_PS1 already has PS1's original value)
|
|
||||||
# * zsh displays your prompt
|
|
||||||
# * You start entering a command
|
|
||||||
#
|
|
||||||
# 3) A new shell is born.
|
|
||||||
# * PS1 has some initial value, either zsh's default or a value set before this script is sourced.
|
|
||||||
# * iterm2_precmd is invoked
|
|
||||||
# * ITERM2_SHOULD_DECORATE_PROMPT is initialized to 1
|
|
||||||
# * ITERM2_PRECMD_PS1 is set to the initial value of PS1
|
|
||||||
# * PS1 gets our escape sequences added to it
|
|
||||||
# * Your prompt is shown and you may begin entering a command.
|
|
||||||
#
|
|
||||||
# Invariants:
|
|
||||||
# * ITERM2_SHOULD_DECORATE_PROMPT is 1 during and just after command execution, and "" while the prompt is
|
|
||||||
# shown and until you enter a command and press return.
|
|
||||||
# * PS1 does not have our escape sequences during command execution
|
|
||||||
# * After the command executes but before a new one begins, PS1 has escape sequences and
|
|
||||||
# ITERM2_PRECMD_PS1 has PS1's original value.
|
|
||||||
iterm2_decorate_prompt() {
|
|
||||||
# This should be a raw PS1 without iTerm2's stuff. It could be changed during command
|
|
||||||
# execution.
|
|
||||||
ITERM2_PRECMD_PS1="$PS1"
|
|
||||||
ITERM2_SHOULD_DECORATE_PROMPT=""
|
|
||||||
|
|
||||||
# Add our escape sequences just before the prompt is shown.
|
|
||||||
# Use ITERM2_SQUELCH_MARK for people who can't mdoify PS1 directly, like powerlevel9k users.
|
|
||||||
# This is gross but I had a heck of a time writing a correct if statetment for zsh 5.0.2.
|
|
||||||
local PREFIX=""
|
|
||||||
if [[ $PS1 == *"$(iterm2_prompt_mark)"* ]]; then
|
|
||||||
PREFIX=""
|
|
||||||
elif [[ "${ITERM2_SQUELCH_MARK-}" != "" ]]; then
|
|
||||||
PREFIX=""
|
|
||||||
else
|
|
||||||
PREFIX="%{$(iterm2_prompt_mark)%}"
|
|
||||||
fi
|
|
||||||
PS1="$PREFIX$PS1%{$(iterm2_prompt_end)%}"
|
|
||||||
ITERM2_DECORATED_PS1="$PS1"
|
|
||||||
}
|
|
||||||
|
|
||||||
iterm2_precmd() {
|
|
||||||
local STATUS="$?"
|
|
||||||
if [ -z "${ITERM2_SHOULD_DECORATE_PROMPT-}" ]; then
|
|
||||||
# You pressed ^C while entering a command (iterm2_preexec did not run)
|
|
||||||
iterm2_before_cmd_executes
|
|
||||||
if [ "$PS1" != "${ITERM2_DECORATED_PS1-}" ]; then
|
|
||||||
# PS1 changed, perhaps in another precmd. See issue 9938.
|
|
||||||
ITERM2_SHOULD_DECORATE_PROMPT="1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
iterm2_after_cmd_executes "$STATUS"
|
|
||||||
|
|
||||||
if [ -n "$ITERM2_SHOULD_DECORATE_PROMPT" ]; then
|
|
||||||
iterm2_decorate_prompt
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is not run if you press ^C while entering a command.
|
|
||||||
iterm2_preexec() {
|
|
||||||
# Set PS1 back to its raw value prior to executing the command.
|
|
||||||
PS1="$ITERM2_PRECMD_PS1"
|
|
||||||
ITERM2_SHOULD_DECORATE_PROMPT="1"
|
|
||||||
iterm2_before_cmd_executes
|
|
||||||
}
|
|
||||||
|
|
||||||
# If hostname -f is slow on your system set iterm2_hostname prior to
|
|
||||||
# sourcing this script. We know it is fast on macOS so we don't cache
|
|
||||||
# it. That lets us handle the hostname changing like when you attach
|
|
||||||
# to a VPN.
|
|
||||||
if [ -z "${iterm2_hostname-}" ]; then
|
|
||||||
if [ "$(uname)" != "Darwin" ]; then
|
|
||||||
iterm2_hostname=`hostname -f 2>/dev/null`
|
|
||||||
# Some flavors of BSD (i.e. NetBSD and OpenBSD) don't have the -f option.
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
iterm2_hostname=`hostname`
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
[[ -z ${precmd_functions-} ]] && precmd_functions=()
|
|
||||||
precmd_functions=($precmd_functions iterm2_precmd)
|
|
||||||
|
|
||||||
[[ -z ${preexec_functions-} ]] && preexec_functions=()
|
|
||||||
preexec_functions=($preexec_functions iterm2_preexec)
|
|
||||||
|
|
||||||
iterm2_print_state_data
|
|
||||||
printf "\033]1337;ShellIntegrationVersion=13;shell=zsh\007"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
alias imgcat=${ZDOTDIR}/.iterm2/imgcat;alias imgls=${ZDOTDIR}/.iterm2/imgls;alias it2api=${ZDOTDIR}/.iterm2/it2api;alias it2attention=${ZDOTDIR}/.iterm2/it2attention;alias it2check=${ZDOTDIR}/.iterm2/it2check;alias it2copy=${ZDOTDIR}/.iterm2/it2copy;alias it2dl=${ZDOTDIR}/.iterm2/it2dl;alias it2getvar=${ZDOTDIR}/.iterm2/it2getvar;alias it2git=${ZDOTDIR}/.iterm2/it2git;alias it2setcolor=${ZDOTDIR}/.iterm2/it2setcolor;alias it2setkeylabel=${ZDOTDIR}/.iterm2/it2setkeylabel;alias it2tip=${ZDOTDIR}/.iterm2/it2tip;alias it2ul=${ZDOTDIR}/.iterm2/it2ul;alias it2universion=${ZDOTDIR}/.iterm2/it2universion;alias it2profile=${ZDOTDIR}/.iterm2/it2profile
|
|
File diff suppressed because it is too large
Load diff
|
@ -5,10 +5,10 @@
|
||||||
#fi
|
#fi
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||||
bash /usr/bin/tdm
|
[[ ! $DISPLAY && -n "$XDG_VTNR" && $XDG_VTNR -le 2 ]] && bash /usr/bin/tbsm
|
||||||
|
|
||||||
[[ -f ~/.zshrc ]] && . ~/.zshrc
|
[[ -f ~/.zshrc ]] && . ~/.zshrc
|
||||||
[ ! -s ~/.config/mpd/pid ] && mpd
|
#[ ! -s ~/.config/mpd/pid ] && mpd
|
||||||
|
|
||||||
export PATH="$HOME/.poetry/bin:$PATH"
|
export PATH="$HOME/.poetry/bin:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
# -- XDG
|
# -- XDG
|
||||||
export XDG_CACHE_HOME="$HOME/.cache"
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
export XDG_DATA_HOME="$HOME/.local/share"
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
export XDG_STATE_HOME="$HOME/.local/state"
|
||||||
export XDG_CONFIG_HOME="$HOME/.config"
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
export ZI_BINARY_HOME="$HOME/.local/bin"
|
||||||
|
export ZI_SCRIPTS_HOME="$ZI_BINARY_HOME/scripts"
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"
|
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"
|
||||||
|
@ -24,27 +27,40 @@ else
|
||||||
export ANDROID_AVD_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android/.android/avd"
|
export ANDROID_AVD_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android/.android/avd"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# -- Wayland
|
||||||
|
if [[ "$XDG_SESSION_TYPE" == "wayland" ]]; then
|
||||||
|
export MOZ_ENABLE_WAYLAND=1
|
||||||
|
fi
|
||||||
|
|
||||||
# -- Python
|
# -- Python
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
export PYTHONNOUSERSITE=1
|
export PYTHONNOUSERSITE=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# -- Path
|
# -- Path
|
||||||
|
export BUN_INSTALL="$HOME/.bun"
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
export PYTHONPATH="$HOME/Library/Python/3.10/lib:$PYTHONPATH"
|
export PYTHONPATH="$HOME/Library/Python/3.10/lib:$PYTHONPATH"
|
||||||
LOCAL_PATH=$(du "$HOME/.local/bin/" | cut -f2 > /tmp/path && paste -sd ':' /tmp/path)
|
LOCAL_PATH=$(du "$ZI_BINARY_HOME" -d 1 | cut -f2 > /tmp/ENV_PATH && paste -sd ':' /tmp/ENV_PATH)
|
||||||
LOCAL_PATH="$HOME/.rd/bin:$HOME/Library/Python/3.10/bin:$LOCAL_PATH"
|
LOCAL_PATH="$HOME/.rd/bin:$HOME/Library/Python/3.10/bin:$LOCAL_PATH"
|
||||||
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
|
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
|
||||||
LOCAL_PATH="$(du "$HOME/.local/bin/" | cut -f2 | paste -sd ':')${PATH:+:${PATH}}"
|
LOCAL_PATH=$(du "$ZI_BINARY_HOME" -d 1 | cut -f2 | paste -sd ':')
|
||||||
fi
|
fi
|
||||||
PATH="$HOME/.pub-cache/bin:$HOME/.local/share/go/bin:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_AVD_HOME:$HOME/.local/share/npm/bin:$HOME/.local/share/cargo/bin:$LOCAL_PATH${PATH:+:${PATH}}"
|
PATH="$BUN_INSTALL/bin:$HOME/.pub-cache/bin:$HOME/.local/share/go/bin:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_AVD_HOME:$HOME/.local/share/npm/bin:$HOME/.local/share/cargo/bin:$ZI_SCRIPTS_HOME/bin:$LOCAL_PATH${PATH:+:${PATH}}"
|
||||||
# export RUST_SRC_PATH=$(rustc --print sysroot)/lib/rustlib/src/rust/library
|
# export RUST_SRC_PATH=$(rustc --print sysroot)/lib/rustlib/src/rust/library
|
||||||
|
|
||||||
# -- IBus stuff (IME)
|
# -- IBus stuff (IME)
|
||||||
export GTK_IM_MODULE="ibus"
|
if [[ "$XDG_SESSION_TYPE" != "wayland" ]]; then
|
||||||
export QT_IM_MODULE="ibus"
|
export GTK_IM_MODULE="ibus"
|
||||||
export GLFW_IM_MODULE="ibus"
|
export QT_IM_MODULE="ibus"
|
||||||
export XMODIFIERS=@im="ibus"
|
export GLFW_IM_MODULE="ibus"
|
||||||
|
export XMODIFIERS=@im="ibus"
|
||||||
|
else
|
||||||
|
unset GTK_IM_MODULE
|
||||||
|
unset QT_IM_MODULE
|
||||||
|
unset GLFW_IM_MODULE
|
||||||
|
unset XMODIFIERS
|
||||||
|
fi
|
||||||
|
|
||||||
# -- rootless docker
|
# -- rootless docker
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
@ -53,6 +69,14 @@ elif [[ "$OSTYPE" == "linux-gnu" ]]; then
|
||||||
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
|
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# -- Proxy
|
||||||
|
# export HTTP_PROXY="127.0.0.1:8080"
|
||||||
|
# export HTTPS_PROXY="$HTTP_PROXY"
|
||||||
|
# export FTP_PROXY="$HTTP_PROXY"
|
||||||
|
# export http_proxy="$HTTP_PROXY"
|
||||||
|
# export https_proxy="$HTTP_PROXY"
|
||||||
|
# export ftp_proxy="$HTTP_PROXY"
|
||||||
|
|
||||||
# -- DEFAULT
|
# -- DEFAULT
|
||||||
export QT_QPA_PLATFORMTHEME="qt5ct"
|
export QT_QPA_PLATFORMTHEME="qt5ct"
|
||||||
if [[ -n $SSH_CONNECTION ]]; then
|
if [[ -n $SSH_CONNECTION ]]; then
|
||||||
|
@ -62,17 +86,17 @@ else
|
||||||
export VISUAL="nvim"
|
export VISUAL="nvim"
|
||||||
export EDITOR="nvim"
|
export EDITOR="nvim"
|
||||||
fi
|
fi
|
||||||
export BROWSER="librewolf"
|
export BROWSER="pulse-browser"
|
||||||
export TERMINAL="kitty"
|
export TERMINAL="kitty"
|
||||||
export READER="zathura"
|
export READER="zathura"
|
||||||
export HTTPS="localhost:9050"
|
export HTTPS="localhost:9050"
|
||||||
export GOOGLE_APPLICATION_CREDENTIALS="$HOME/Downloads/youtube-9ab71578c563.json"
|
export GOOGLE_APPLICATION_CREDENTIALS="$HOME/Downloads/youtube-9ab71578c563.json"
|
||||||
# vim/nvim as manpager
|
# vim/nvim as manpager
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "linux-gnu" ]]; then
|
# if [[ "$OSTYPE" == "linux-gnu" ]]; then
|
||||||
export MANPAGER="nvimpager"
|
# export MANPAGER="nvimpager"
|
||||||
# export MANPAGER="/bin/sh -c \"col -b | vim --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
|
# export MANPAGER="/bin/sh -c \"col -b | vim --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
# -- Wine problem workaround
|
# -- Wine problem workaround
|
||||||
# - NOTE to self: this will prevent some (probably wine issue) games from launching
|
# - NOTE to self: this will prevent some (probably wine issue) games from launching
|
||||||
|
@ -88,191 +112,40 @@ export MESA_GLSL_VERSION_OVERRIDE=460
|
||||||
# export SUDO_ASKPASS="/bin/dmenu-askpass"
|
# export SUDO_ASKPASS="/bin/dmenu-askpass"
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
# cleaning up
|
# >> [XDG]
|
||||||
|
# Clean up
|
||||||
export PARALLEL_HOME="$XDG_CONFIG_HOME/parallel"
|
export PARALLEL_HOME="$XDG_CONFIG_HOME/parallel"
|
||||||
export SCRIPTS="$HOME/.scripts"
|
# export SCRIPTS="$HOME/.scripts"
|
||||||
export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority"
|
export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority"
|
||||||
export KODI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/kodi"
|
export KODI_DATA="$XDG_DATA_HOME/kodi"
|
||||||
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass"
|
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass"
|
||||||
export WGETRC="$XDG_CONFIG_HOME/wgetrc"
|
export WGETRC="$XDG_CONFIG_HOME/wgetrc"
|
||||||
export MPLAYER_HOME="$XDG_CONFIG_HOME/mplayer"
|
export MPLAYER_HOME="$XDG_CONFIG_HOME/mplayer"
|
||||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
|
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
|
||||||
export WINEPREFIX="$XDG_DATA_HOME/wineprefixes/default"
|
export WINEPREFIX="$XDG_DATA_HOME/wineprefixes/default"
|
||||||
export ADB_VENDOR_KEY="$XDG_CONFIG_HOME/android"
|
export ADB_VENDOR_KEY="$XDG_CONFIG_HOME/android"
|
||||||
export CARGO_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/cargo"
|
export CARGO_HOME="$XDG_DATA_HOME/cargo"
|
||||||
export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go"
|
export GOPATH="$XDG_DATA_HOME/go"
|
||||||
export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0"
|
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc-2.0"
|
||||||
export PYTHONSTARTUP="${XDG_CONFIG_HOME:-$HOME/.config}/python/pyrc"
|
# export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pyrc"
|
||||||
|
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
|
||||||
|
unset SSH_AGENT_PID
|
||||||
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"
|
||||||
|
export PYENV_ROOT="$XDG_DATA_HOME/pyenv"
|
||||||
|
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
|
||||||
|
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
|
||||||
|
export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle"
|
||||||
|
export PKG_CACHE_PATH="$XDG_DATA_HOME/pkg-cache"
|
||||||
|
|
||||||
# vimrc (this will init/source ~/.config/vim/vimrc instead of ~/.vimrc)
|
# Fixes
|
||||||
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'
|
[ -d $XDG_CONFIG_HOME ] || mkdir -p $XDG_CONFIG_HOME
|
||||||
|
[ -f $WGETRC ] || touch $WGETRC # wget will fail to run without this file
|
||||||
|
[ -d $GNUPGHOME ] || mkdir -p $GNUPGHOME
|
||||||
|
[ -d $WAKATIME_HOME ] || mkdir -p $WAKATIME_HOME
|
||||||
|
[ -d $WINEPREFIX ] || mkdir -p $WINEPREFIX
|
||||||
|
# << [XDG]
|
||||||
|
|
||||||
# Path to oh-my-zsh installation
|
# zsh
|
||||||
export ZSH="${XDG_DATA_HOME:-$HOME/.local/share}/oh-my-zsh"
|
export ZSH_PLUGINS="${XDG_DATA_HOME:-$HOME/.local/share}/zsh/plugins"
|
||||||
export ZSH_CUSTOM="$ZSH/custom"
|
|
||||||
export ZSH_PLUGINS="$ZSH_CUSTOM/plugins"
|
|
||||||
|
|
||||||
# -- LF
|
[ -f ${XDG_CONFIG_HOME:-$HOME/.config}/zsh/include/lf ] && source ${XDG_CONFIG_HOME:-$HOME/.config}/zsh/include/lf
|
||||||
# icon for lf
|
|
||||||
export LF_ICONS="\
|
|
||||||
tw=:\
|
|
||||||
st=:\
|
|
||||||
ow=:\
|
|
||||||
dt=:\
|
|
||||||
di=:\
|
|
||||||
fi=:\
|
|
||||||
ln=:\
|
|
||||||
or=:\
|
|
||||||
ex=:\
|
|
||||||
*.c=:\
|
|
||||||
*.cc=:\
|
|
||||||
*.clj=:\
|
|
||||||
*.coffee=:\
|
|
||||||
*.cpp=:\
|
|
||||||
*.css=:\
|
|
||||||
*.d=:\
|
|
||||||
*.dart=:\
|
|
||||||
*.erl=:\
|
|
||||||
*.exs=:\
|
|
||||||
*.fs=:\
|
|
||||||
*.go=:\
|
|
||||||
*.h=:\
|
|
||||||
*.hh=:\
|
|
||||||
*.hpp=:\
|
|
||||||
*.hs=:\
|
|
||||||
*.html=:\
|
|
||||||
*.java=:\
|
|
||||||
*.jl=:\
|
|
||||||
*.js=:\
|
|
||||||
*.json=:\
|
|
||||||
*.lua=:\
|
|
||||||
*.md=:\
|
|
||||||
*.php=:\
|
|
||||||
*.pl=:\
|
|
||||||
*.pro=:\
|
|
||||||
*.py=:\
|
|
||||||
*.rb=:\
|
|
||||||
*.rs=:\
|
|
||||||
*.scala=:\
|
|
||||||
*.ts=:\
|
|
||||||
*.vim=:\
|
|
||||||
*.cmd=:\
|
|
||||||
*.ps1=:\
|
|
||||||
*.sh=:\
|
|
||||||
*.bash=:\
|
|
||||||
*.zsh=:\
|
|
||||||
*.fish=:\
|
|
||||||
*.tar=:\
|
|
||||||
*.tgz=:\
|
|
||||||
*.arc=:\
|
|
||||||
*.arj=:\
|
|
||||||
*.taz=:\
|
|
||||||
*.lha=:\
|
|
||||||
*.lz4=:\
|
|
||||||
*.lzh=:\
|
|
||||||
*.lzma=:\
|
|
||||||
*.tlz=:\
|
|
||||||
*.txz=:\
|
|
||||||
*.tzo=:\
|
|
||||||
*.t7z=:\
|
|
||||||
*.zip=:\
|
|
||||||
*.z=:\
|
|
||||||
*.dz=:\
|
|
||||||
*.gz=:\
|
|
||||||
*.lrz=:\
|
|
||||||
*.lz=:\
|
|
||||||
*.lzo=:\
|
|
||||||
*.xz=:\
|
|
||||||
*.zst=:\
|
|
||||||
*.tzst=:\
|
|
||||||
*.bz2=:\
|
|
||||||
*.bz=:\
|
|
||||||
*.tbz=:\
|
|
||||||
*.tbz2=:\
|
|
||||||
*.tz=:\
|
|
||||||
*.deb=:\
|
|
||||||
*.rpm=:\
|
|
||||||
*.jar=:\
|
|
||||||
*.war=:\
|
|
||||||
*.ear=:\
|
|
||||||
*.sar=:\
|
|
||||||
*.rar=:\
|
|
||||||
*.alz=:\
|
|
||||||
*.ace=:\
|
|
||||||
*.zoo=:\
|
|
||||||
*.cpio=:\
|
|
||||||
*.7z=:\
|
|
||||||
*.rz=:\
|
|
||||||
*.cab=:\
|
|
||||||
*.wim=:\
|
|
||||||
*.swm=:\
|
|
||||||
*.dwm=:\
|
|
||||||
*.esd=:\
|
|
||||||
*.jpg=:\
|
|
||||||
*.jpeg=:\
|
|
||||||
*.mjpg=:\
|
|
||||||
*.mjpeg=:\
|
|
||||||
*.gif=:\
|
|
||||||
*.bmp=:\
|
|
||||||
*.pbm=:\
|
|
||||||
*.pgm=:\
|
|
||||||
*.ppm=:\
|
|
||||||
*.tga=:\
|
|
||||||
*.xbm=:\
|
|
||||||
*.xpm=:\
|
|
||||||
*.tif=:\
|
|
||||||
*.tiff=:\
|
|
||||||
*.png=:\
|
|
||||||
*.svg=:\
|
|
||||||
*.svgz=:\
|
|
||||||
*.mng=:\
|
|
||||||
*.pcx=:\
|
|
||||||
*.mov=:\
|
|
||||||
*.mpg=:\
|
|
||||||
*.mpeg=:\
|
|
||||||
*.m2v=:\
|
|
||||||
*.mkv=:\
|
|
||||||
*.webm=:\
|
|
||||||
*.ogm=:\
|
|
||||||
*.mp4=:\
|
|
||||||
*.m4v=:\
|
|
||||||
*.mp4v=:\
|
|
||||||
*.vob=:\
|
|
||||||
*.qt=:\
|
|
||||||
*.nuv=:\
|
|
||||||
*.wmv=:\
|
|
||||||
*.asf=:\
|
|
||||||
*.rm=:\
|
|
||||||
*.rmvb=:\
|
|
||||||
*.flc=:\
|
|
||||||
*.avi=:\
|
|
||||||
*.fli=:\
|
|
||||||
*.flv=:\
|
|
||||||
*.gl=:\
|
|
||||||
*.dl=:\
|
|
||||||
*.xcf=:\
|
|
||||||
*.xwd=:\
|
|
||||||
*.yuv=:\
|
|
||||||
*.cgm=:\
|
|
||||||
*.emf=:\
|
|
||||||
*.ogv=:\
|
|
||||||
*.ogx=:\
|
|
||||||
*.aac=:\
|
|
||||||
*.au=:\
|
|
||||||
*.flac=:\
|
|
||||||
*.m4a=:\
|
|
||||||
*.mid=:\
|
|
||||||
*.midi=:\
|
|
||||||
*.mka=:\
|
|
||||||
*.mp3=:\
|
|
||||||
*.mpc=:\
|
|
||||||
*.ogg=:\
|
|
||||||
*.ra=:\
|
|
||||||
*.wav=:\
|
|
||||||
*.oga=:\
|
|
||||||
*.opus=:\
|
|
||||||
*.spx=:\
|
|
||||||
*.xspf=:\
|
|
||||||
*.pdf=:\
|
|
||||||
*.nix=:\
|
|
||||||
"
|
|
||||||
|
|
|
@ -9,9 +9,10 @@
|
||||||
# rateUSD | sed 's/^/ /g'
|
# rateUSD | sed 's/^/ /g'
|
||||||
|
|
||||||
setopt auto_cd # auto cd if directory
|
setopt auto_cd # auto cd if directory
|
||||||
|
__CONFIG_DIR=${XDG_CONFIG_HOME:-$HOME/.config}
|
||||||
|
|
||||||
# highlight on tab (completion)
|
# highlight on tab (completion)
|
||||||
[ -f ~/.config/zsh/completion ] && source ~/.config/zsh/completion
|
[ -f $__CONFIG_DIR/zsh/include/completion ] && source $__CONFIG_DIR/zsh/include/completion
|
||||||
# zstyle ':completion:*:*:git:*' script /usr/local/etc/bash_completion.d/git-completion.bash
|
# zstyle ':completion:*:*:git:*' script /usr/local/etc/bash_completion.d/git-completion.bash
|
||||||
# fpath=(/usr/local/share/zsh-completions $fpath)
|
# fpath=(/usr/local/share/zsh-completions $fpath)
|
||||||
# autoload -U compinit && compinit -u
|
# autoload -U compinit && compinit -u
|
||||||
|
@ -19,16 +20,16 @@ setopt auto_cd # auto cd if directory
|
||||||
# zstyle ':completion:*' menu select
|
# zstyle ':completion:*' menu select
|
||||||
|
|
||||||
# Alias
|
# Alias
|
||||||
[ -f ~/.config/zsh/aliases ] && source ~/.config/zsh/aliases
|
[ -f $__CONFIG_DIR/zsh/include/aliases ] && source $__CONFIG_DIR/zsh/include/aliases
|
||||||
|
|
||||||
# Theme
|
# Theme
|
||||||
[ -f ~/.config/zsh/theme ] && source ~/.config/zsh/theme
|
[ -f $__CONFIG_DIR/zsh/include/theme ] && source $__CONFIG_DIR/zsh/include/theme
|
||||||
|
|
||||||
# opam
|
# opam
|
||||||
test -r /home/ziro/.opam/opam-init/init.zsh && . /home/ziro/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true
|
test -r /home/ziro/.opam/opam-init/init.zsh && . /home/ziro/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true
|
||||||
|
|
||||||
# History in cache directory
|
# History in cache directory
|
||||||
HISTFILE=~/.cache/zsh/zsh_history
|
HISTFILE=${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zsh_history
|
||||||
HISTSIZE=1000
|
HISTSIZE=1000
|
||||||
SAVEHIST=1000
|
SAVEHIST=1000
|
||||||
|
|
||||||
|
@ -38,18 +39,27 @@ bindkey -v
|
||||||
export KEYTIMEOUT=1
|
export KEYTIMEOUT=1
|
||||||
|
|
||||||
# Keybindings
|
# Keybindings
|
||||||
[ -f ~/.config/zsh/keybinds ] && source ~/.config/zsh/keybinds
|
[ -f $__CONFIG_DIR/zsh/include/keybinds ] && source $__CONFIG_DIR/zsh/include/keybinds
|
||||||
|
|
||||||
# ----- Plugins
|
# [[ Plugins
|
||||||
ZSH_PLUGINS="$XDG_DATA_HOME/zsh/plugins"
|
ZSH_PLUGINS="$XDG_DATA_HOME/zsh/plugins"
|
||||||
|
|
||||||
# source $ZSH/oh-my-zsh.sh
|
[ ! -d $ZSH_PLUGINS ] && mkdir -p $ZSH_PLUGINS
|
||||||
# emulate -R zsh -c 'source $ZSH_PLUGINS/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh'
|
|
||||||
# eval $(thefuck --alias) # thefuck - fix your stupid typo :)
|
# >> INSTALL: #!/bin/zsh
|
||||||
source $ZSH_PLUGINS/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null
|
# cd $ZSH_PLUGINS && git clone <plugin repo git url>
|
||||||
source $ZSH_PLUGINS/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh 2>/dev/null
|
# << INSTALL
|
||||||
#source $ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
|
|
||||||
#source $ZSH_CUSTOM/plugins/fsh/fast-syntax-highlighting.plugin.zsh
|
# >> ENABLED: silently fail if not installed
|
||||||
|
source $ZSH_PLUGINS/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null # https://github.com/zdharma-continuum/fast-syntax-highlighting
|
||||||
|
source $ZSH_PLUGINS/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh 2>/dev/null # https://github.com/zsh-users/zsh-autosuggestions
|
||||||
|
#source $ZSH_CUSTOM/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh 2>/dev/null # https://github.com/zsh-users/zsh-syntax-highlighting
|
||||||
|
# << ENABLED
|
||||||
|
|
||||||
|
# ]] Plugins
|
||||||
|
|
||||||
|
# bun completions
|
||||||
|
[ -s "/home/ziro/.bun/_bun" ] && source "/home/ziro/.bun/_bun"
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
test -e "${ZDOTDIR}/.iterm2_shell_integration.zsh" && source "${ZDOTDIR}/.iterm2_shell_integration.zsh"
|
test -e "${ZDOTDIR}/.iterm2_shell_integration.zsh" && source "${ZDOTDIR}/.iterm2_shell_integration.zsh"
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
||||||
# i need sudo to launch emulator
|
|
||||||
alias pixelemu="sudo $HOME/Library/Android/sdk/emulator/emulator @Pixel_2_API_28"
|
|
||||||
alias mbrew="sudo -H -u maintenance -g staff brew"
|
|
||||||
fi
|
|
||||||
|
|
||||||
alias punten='doas'
|
|
||||||
#sudo + vim without sacrificing config
|
|
||||||
alias sudovim='sudoedit'
|
|
||||||
alias doasvim='doasedit'
|
|
||||||
|
|
||||||
#switch to pgsql user
|
|
||||||
alias pg='doas -u postgres'
|
|
||||||
|
|
||||||
#mysql with color
|
|
||||||
# alias mysql=$(echo -e 'mysql --prompt="\x1B[34m\\d\x1B[32m \n>\x1B[0m "')
|
|
||||||
|
|
||||||
#vim
|
|
||||||
alias nano=nvim
|
|
||||||
alias vim=nvim
|
|
||||||
alias vimsudo='sudoedit /etc/sudoers'
|
|
||||||
alias vimdoas='doasedit /etc/sudoers'
|
|
||||||
alias vi=nvim
|
|
||||||
alias v=nvim
|
|
||||||
|
|
||||||
#emacs
|
|
||||||
alias emacs="emacs -nw"
|
|
||||||
|
|
||||||
#mutt
|
|
||||||
alias mutt="neomutt"
|
|
||||||
|
|
||||||
#curl
|
|
||||||
alias weather='curl wttr.in'
|
|
||||||
|
|
||||||
#install
|
|
||||||
alias p='doas pacman'
|
|
||||||
alias a='paru'
|
|
||||||
|
|
||||||
#ripper
|
|
||||||
alias yt='yt-dlp --add-metadata'
|
|
||||||
alias yta='yt-dlp --add-metadata -x --audio-format'
|
|
||||||
alias xreload='xrdb $HOME/.config/Xresources'
|
|
||||||
|
|
||||||
#clean up
|
|
||||||
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
|
|
||||||
|
|
||||||
#shortcuts
|
|
||||||
alias ytv='youtube-viewer'
|
|
||||||
alias gravit="$HOME/my\ Files/Gravit/GravitDesigner.AppImage"
|
|
||||||
alias redoom="$HOME/doom refresh"
|
|
||||||
alias rvim='doas vim'
|
|
||||||
alias py='python'
|
|
||||||
alias cls='clear'
|
|
||||||
alias classprop='xprop WM_CLASS'
|
|
||||||
alias storagelist='lsblk -f'
|
|
||||||
alias ..='cd ..'
|
|
||||||
alias ...='cd ../..'
|
|
||||||
alias ....='cd ../../..'
|
|
||||||
alias .....='cd ../../../..'
|
|
||||||
alias q='exit'
|
|
||||||
|
|
||||||
#ls stuff
|
|
||||||
alias l='exa --color=always --group-directories-first' # my preferred listing
|
|
||||||
alias ls='exa --color=always --group-directories-first' # my preferred listing
|
|
||||||
alias la='exa -a --color=always --group-directories-first' # all files and dirs
|
|
||||||
alias ll='exa -l --color=always --group-directories-first' # long format
|
|
||||||
alias lla='exa -al --color=always --group-directories-first' # long format
|
|
||||||
alias lt='exa -aT --color=always --group-directories-first' # tree listing
|
|
||||||
|
|
||||||
alias md='mkdir -p'
|
|
||||||
alias rd='rmdir'
|
|
||||||
|
|
||||||
alias reUSD='rm -rf /tmp/rate.html /tmp/rateUSD.txt'
|
|
||||||
#alias mpv='mpv --geometry=1280x720'
|
|
||||||
|
|
||||||
#config shortcuts
|
|
||||||
alias cfvim='vim $XDG_CONFIG_HOME/vim/vimrc'
|
|
||||||
alias cfvimplug='vim $XDG_CONFIG_HOME/vim/vim_plug'
|
|
||||||
alias cfvimnix='vim $XDG_CONFIG_HOME/vim/vim_nix'
|
|
||||||
alias cfvimwin='vim $XDG_CONFIG_HOME/vim/vim_win'
|
|
||||||
alias cfvimuni='vim $XDG_CONFIG_HOME/vim/vim_uni'
|
|
||||||
alias cfbash='vim $HOME/.bashrc'
|
|
||||||
alias cfzsh='vim $XDG_CONFIG_HOME/zsh/.zshrc'
|
|
||||||
alias cfxres='vim $XDG_CONFIG_HOME/Xresources'
|
|
||||||
alias cfbsp='vim $XDG_CONFIG_HOME/bspwm/bspwmrc'
|
|
||||||
alias cfqtile='vim $XDG_CONFIG_HOME/qtile/config.py'
|
|
||||||
alias cfpoly='vim $XDG_CONFIG_HOME/polybar/config'
|
|
||||||
alias cfkeys='vim $XDG_CONFIG_HOME/sxhkd/sxhkdrc'
|
|
||||||
alias cfalias='vim $XDG_CONFIG_HOME/zsh/aliases'
|
|
||||||
alias cfbind='vim $XDG_CONFIG_HOME/zsh/keybinds'
|
|
||||||
alias cfprofile='vim $XDG_CONFIG_HOME/zsh/.zprofile'
|
|
||||||
alias cfxprofile='vim $XDG_CONFIG_HOME/xprofile'
|
|
||||||
alias cfcompt='vim $XDG_CONFIG_HOME/picom/picom.conf'
|
|
||||||
alias cfenv='vim $XDG_CONFIG_HOME/zsh/.zshenv'
|
|
||||||
alias cfmutt='vim $XDG_CONFIG_HOME/mutt/muttrc'
|
|
||||||
alias cfnews='vim $XDG_CONFIG_HOME/newsboat/urls'
|
|
||||||
|
|
||||||
#more shortcuts
|
|
||||||
alias htop='htop -t'
|
|
||||||
alias rm='rm -i'
|
|
||||||
alias mv='mv -i'
|
|
||||||
alias cp='cp -i'
|
|
||||||
alias mntfd='doas mount -o gid=users,fmask=113,dmask=002'
|
|
||||||
alias umntfd='doas umount'
|
|
||||||
alias cmatrix='unimatrix -n -s 96 -l "o"'
|
|
||||||
alias s='cd $HOME/.local/bin/scripts;ls'
|
|
||||||
|
|
||||||
#folder shortcut
|
|
||||||
alias cdclg='cd "$HOME/my Files/Kuliah/"'
|
|
||||||
alias cdwine='cd "$HOME/.local/share/wineprefixes/"'
|
|
||||||
|
|
||||||
#Git Aliases
|
|
||||||
alias gaa='git add -A'
|
|
||||||
alias gci='git commit'
|
|
||||||
alias gca='git commit --all'
|
|
||||||
alias gr='git rm'
|
|
||||||
alias gR='git restore'
|
|
||||||
alias gs='git status'
|
|
||||||
alias gp='git push'
|
|
||||||
alias gP='git pull'
|
|
||||||
alias gcl='git clone'
|
|
||||||
alias config='/usr/bin/git --git-dir=$HOME/dotfiles/ --work-tree=$HOME'
|
|
||||||
|
|
||||||
alias qn='vim $HOME/Documents/QuickNote'
|
|
||||||
|
|
||||||
alias docx2pdf='lowriter --convert-to pdf'
|
|
||||||
|
|
||||||
alias mirror-update='curl -s "https://archlinux.org/mirrorlist/?country=ID&country=SG&country=US&protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 5 -'
|
|
||||||
alias center-pfetch="printf '\n'; pfetch | sed '\$d' | center -l"
|
|
||||||
[ "$TERM" = "xterm-kitty" ] && alias ssh="kitty +kitten ssh"
|
|
1
.config/zsh/aliases
Symbolic link
1
.config/zsh/aliases
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
include/aliases
|
|
@ -1,75 +0,0 @@
|
||||||
# vim: filetype=zsh
|
|
||||||
zstyle ':completion:*:*:git:*' script /usr/local/etc/bash_completion.d/git-completion.bash
|
|
||||||
fpath=(/usr/local/share/zsh-completions $fpath)
|
|
||||||
|
|
||||||
autoload -Uz compinit
|
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
||||||
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
|
|
||||||
compinit -u # homebrew moment, not recommended but whatever
|
|
||||||
else
|
|
||||||
compinit
|
|
||||||
fi
|
|
||||||
|
|
||||||
zmodload -i zsh/complist
|
|
||||||
zstyle ':completion:*' menu select
|
|
||||||
|
|
||||||
# case insensitive (all), partial-word and substring completion
|
|
||||||
if [[ "$CASE_SENSITIVE" = true ]]; then
|
|
||||||
zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*'
|
|
||||||
else
|
|
||||||
if [[ "$HYPHEN_INSENSITIVE" = true ]]; then
|
|
||||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*'
|
|
||||||
else
|
|
||||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
unset CASE_SENSITIVE HYPHEN_INSENSITIVE
|
|
||||||
|
|
||||||
# Complete . and .. special directories
|
|
||||||
zstyle ':completion:*' special-dirs true
|
|
||||||
|
|
||||||
zstyle ':completion:*' list-colors ''
|
|
||||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01'
|
|
||||||
|
|
||||||
if [[ "$OSTYPE" = solaris* ]]; then
|
|
||||||
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm"
|
|
||||||
else
|
|
||||||
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# disable named-directories autocompletion
|
|
||||||
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories
|
|
||||||
|
|
||||||
# Use caching so that commands like apt and dpkg complete are useable
|
|
||||||
zstyle ':completion:*' use-cache yes
|
|
||||||
zstyle ':completion:*' cache-path $ZSH_CACHE_DIR
|
|
||||||
|
|
||||||
# Don't complete uninteresting users
|
|
||||||
zstyle ':completion:*:*:*:users' ignored-patterns \
|
|
||||||
adm amanda apache at avahi avahi-autoipd beaglidx bin cacti canna \
|
|
||||||
clamav daemon dbus distcache dnsmasq dovecot fax ftp games gdm \
|
|
||||||
gkrellmd gopher hacluster haldaemon halt hsqldb ident junkbust kdm \
|
|
||||||
ldap lp mail mailman mailnull man messagebus mldonkey mysql nagios \
|
|
||||||
named netdump news nfsnobody nobody nscd ntp nut nx obsrun openvpn \
|
|
||||||
operator pcap polkitd postfix postgres privoxy pulse pvm quagga radvd \
|
|
||||||
rpc rpcuser rpm rtkit scard shutdown squid sshd statd svn sync tftp \
|
|
||||||
usbmux uucp vcsa wwwrun xfs '_*'
|
|
||||||
|
|
||||||
# ... unless we really want to.
|
|
||||||
zstyle '*' single-ignored show
|
|
||||||
|
|
||||||
if [[ $COMPLETION_WAITING_DOTS = true ]]; then
|
|
||||||
expand-or-complete-with-dots() {
|
|
||||||
# toggle line-wrapping off and back on again
|
|
||||||
[[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti rmam
|
|
||||||
print -Pn "%{%F{red}......%f%}"
|
|
||||||
[[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti smam
|
|
||||||
|
|
||||||
zle expand-or-complete
|
|
||||||
zle redisplay
|
|
||||||
}
|
|
||||||
zle -N expand-or-complete-with-dots
|
|
||||||
bindkey "^I" expand-or-complete-with-dots
|
|
||||||
fi
|
|
||||||
|
|
1
.config/zsh/completion
Symbolic link
1
.config/zsh/completion
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
include/completion
|
1
.config/zsh/dotfiles
Symbolic link
1
.config/zsh/dotfiles
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
include/dotfiles
|
136
.config/zsh/include/aliases
Normal file
136
.config/zsh/include/aliases
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
# i need sudo to launch emulator
|
||||||
|
alias pixelemu="sudo $HOME/Library/Android/sdk/emulator/emulator @Pixel_2_API_28"
|
||||||
|
alias mbrew="sudo -H -u maintenance -g staff brew"
|
||||||
|
fi
|
||||||
|
|
||||||
|
alias punten='doas'
|
||||||
|
#sudo + vim without sacrificing config
|
||||||
|
alias sudovim='sudoedit'
|
||||||
|
alias doasvim='doasedit'
|
||||||
|
|
||||||
|
#switch to pgsql user
|
||||||
|
alias pg='doas -u postgres'
|
||||||
|
|
||||||
|
#mysql with color
|
||||||
|
# alias mysql=$(echo -e 'mysql --prompt="\x1B[34m\\d\x1B[32m \n>\x1B[0m "')
|
||||||
|
|
||||||
|
#vim
|
||||||
|
alias nano=nvim
|
||||||
|
alias vim=nvim
|
||||||
|
alias vimsudo='sudoedit /etc/sudoers'
|
||||||
|
alias vimdoas='doasedit /etc/sudoers'
|
||||||
|
alias vi=nvim
|
||||||
|
alias v=nvim
|
||||||
|
|
||||||
|
#emacs
|
||||||
|
alias emacs="emacs -nw"
|
||||||
|
|
||||||
|
#mutt
|
||||||
|
alias mutt="neomutt"
|
||||||
|
|
||||||
|
#curl
|
||||||
|
alias weather='curl wttr.in'
|
||||||
|
|
||||||
|
#install
|
||||||
|
alias p='doas pacman'
|
||||||
|
alias a='paru'
|
||||||
|
|
||||||
|
#ripper
|
||||||
|
alias yt='yt-dlp --add-metadata'
|
||||||
|
alias yta='yt-dlp --add-metadata -x --audio-format'
|
||||||
|
alias xreload='xrdb $HOME/.config/Xresources'
|
||||||
|
|
||||||
|
#clean up
|
||||||
|
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
|
||||||
|
|
||||||
|
#shortcuts
|
||||||
|
alias ytv='youtube-viewer'
|
||||||
|
alias gravit="$HOME/my\ Files/Gravit/GravitDesigner.AppImage"
|
||||||
|
alias redoom="$HOME/doom refresh"
|
||||||
|
alias rvim='doas vim'
|
||||||
|
alias py='python'
|
||||||
|
alias cls='clear'
|
||||||
|
alias classprop='xprop WM_CLASS'
|
||||||
|
alias storagelist='lsblk -f'
|
||||||
|
alias ..='cd ..'
|
||||||
|
alias ...='cd ../..'
|
||||||
|
alias ....='cd ../../..'
|
||||||
|
alias .....='cd ../../../..'
|
||||||
|
alias q='exit'
|
||||||
|
|
||||||
|
#ls stuff
|
||||||
|
alias l='exa --color=always --group-directories-first' # my preferred listing
|
||||||
|
alias ls='exa --color=always --group-directories-first' # my preferred listing
|
||||||
|
alias la='exa -a --color=always --group-directories-first' # all files and dirs
|
||||||
|
alias ll='exa -l --color=always --group-directories-first' # long format
|
||||||
|
alias lla='exa -al --color=always --group-directories-first' # long format
|
||||||
|
alias lt='exa -aT --color=always --group-directories-first' # tree listing
|
||||||
|
|
||||||
|
alias md='mkdir -p'
|
||||||
|
alias rd='rmdir'
|
||||||
|
|
||||||
|
alias reUSD='rm -rf /tmp/rate.html /tmp/rateUSD.txt'
|
||||||
|
#alias mpv='mpv --geometry=1280x720'
|
||||||
|
|
||||||
|
#config shortcuts
|
||||||
|
alias config='cd ${DOTFILES:-$HOME/Build/GIT/dotfiles}'
|
||||||
|
alias cfg='config'
|
||||||
|
alias cfvim='vim $XDG_CONFIG_HOME/nvim/init.lua'
|
||||||
|
alias cfvimplug='vim $XDG_CONFIG_HOME/nvim/lua/null/plugins/'
|
||||||
|
alias cfvimnix='vim $XDG_CONFIG_HOME/nvim/lua/null/nix.lua'
|
||||||
|
alias cfvimuni='vim $XDG_CONFIG_HOME/nvim/lua/null/config.lua'
|
||||||
|
alias cfbash='vim $HOME/.bashrc'
|
||||||
|
alias cfzsh='vim $XDG_CONFIG_HOME/zsh/.zshrc'
|
||||||
|
alias cfxres='vim $XDG_CONFIG_HOME/Xresources'
|
||||||
|
alias cfbsp='vim $XDG_CONFIG_HOME/bspwm/bspwmrc'
|
||||||
|
alias cfqtile='vim $XDG_CONFIG_HOME/qtile/config.py'
|
||||||
|
alias cfpoly='vim $XDG_CONFIG_HOME/polybar/config'
|
||||||
|
alias cfkeys='vim $XDG_CONFIG_HOME/sxhkd/sxhkdrc'
|
||||||
|
alias cfalias='vim $XDG_CONFIG_HOME/zsh/aliases'
|
||||||
|
alias cfbind='vim $XDG_CONFIG_HOME/zsh/keybinds'
|
||||||
|
alias cfprofile='vim $XDG_CONFIG_HOME/zsh/.zprofile'
|
||||||
|
alias cfxprofile='vim $XDG_CONFIG_HOME/xprofile'
|
||||||
|
alias cfcompt='vim $XDG_CONFIG_HOME/picom/picom.conf'
|
||||||
|
alias cfenv='vim $XDG_CONFIG_HOME/zsh/.zshenv'
|
||||||
|
alias cfmutt='vim $XDG_CONFIG_HOME/mutt/muttrc'
|
||||||
|
alias cfnews='vim $XDG_CONFIG_HOME/newsboat/urls'
|
||||||
|
|
||||||
|
#more shortcuts
|
||||||
|
alias htop='htop -t'
|
||||||
|
alias rm='rm -i'
|
||||||
|
alias mv='mv -i'
|
||||||
|
alias cp='cp -i'
|
||||||
|
alias mntfd='doas mount -o gid=users,fmask=113,dmask=002'
|
||||||
|
alias umntfd='doas umount'
|
||||||
|
alias cmatrix='unimatrix -n -s 96 -l "o"'
|
||||||
|
alias s='cd $HOME/.local/bin/scripts;ls'
|
||||||
|
|
||||||
|
#folder shortcut
|
||||||
|
alias cdclg='cd "$HOME/my Files/Kuliah/"'
|
||||||
|
alias cdwine='cd "$HOME/.local/share/wineprefixes/"'
|
||||||
|
|
||||||
|
#Git Aliases
|
||||||
|
alias cdgit='cd $HOME/Build/GIT'
|
||||||
|
alias gaa='git add -A'
|
||||||
|
alias gci='git commit'
|
||||||
|
alias gca='git commit --all'
|
||||||
|
alias gr='git rm'
|
||||||
|
alias gR='git restore'
|
||||||
|
alias gs='git status'
|
||||||
|
alias gp='git push'
|
||||||
|
alias gP='git pull'
|
||||||
|
alias gcl='git clone'
|
||||||
|
#alias config='/usr/bin/git --git-dir=$HOME/dotfiles/ --work-tree=$HOME'
|
||||||
|
|
||||||
|
alias qn='vim $HOME/Documents/QuickNote'
|
||||||
|
|
||||||
|
alias docx2pdf='lowriter --convert-to pdf'
|
||||||
|
|
||||||
|
alias mirror-update='curl -s "https://archlinux.org/mirrorlist/?country=ID&country=SG&country=US&protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 5 -'
|
||||||
|
alias center-pfetch="printf '\n'; pfetch | sed '\$d' | center -l"
|
||||||
|
[ "$TERM" = "xterm-kitty" ] && alias ssh="kitty +kitten ssh"
|
||||||
|
|
||||||
|
alias neofetch='fastfetch'
|
76
.config/zsh/include/completion
Normal file
76
.config/zsh/include/completion
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
# vim: filetype=zsh
|
||||||
|
zstyle ':completion:*:*:git:*' script /usr/local/etc/bash_completion.d/git-completion.bash
|
||||||
|
fpath=(/usr/local/share/zsh-completions $fpath)
|
||||||
|
|
||||||
|
autoload -Uz compinit
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
|
||||||
|
compinit -u # homebrew moment, not recommended but whatever
|
||||||
|
else
|
||||||
|
compinit
|
||||||
|
fi
|
||||||
|
|
||||||
|
zmodload -i zsh/complist
|
||||||
|
zstyle ':completion:*' menu select
|
||||||
|
|
||||||
|
# case insensitive (all), partial-word and substring completion
|
||||||
|
if [[ "$CASE_SENSITIVE" = true ]]; then
|
||||||
|
zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*'
|
||||||
|
else
|
||||||
|
if [[ "$HYPHEN_INSENSITIVE" = true ]]; then
|
||||||
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}' 'r:|=*' 'l:|=* r:|=*'
|
||||||
|
else
|
||||||
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
unset CASE_SENSITIVE HYPHEN_INSENSITIVE
|
||||||
|
|
||||||
|
# Complete . and .. special directories
|
||||||
|
zstyle ':completion:*' special-dirs true
|
||||||
|
|
||||||
|
zstyle ':completion:*' list-colors ''
|
||||||
|
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01'
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" = solaris* ]]; then
|
||||||
|
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm"
|
||||||
|
else
|
||||||
|
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# disable named-directories autocompletion
|
||||||
|
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||||
|
|
||||||
|
# Use caching so that commands like apt and dpkg complete are useable
|
||||||
|
zstyle ':completion:*' use-cache yes
|
||||||
|
zstyle ':completion:*' cache-path $ZSH_CACHE_DIR
|
||||||
|
|
||||||
|
# Don't complete uninteresting users
|
||||||
|
zstyle ':completion:*:*:*:users' ignored-patterns \
|
||||||
|
adm amanda apache at avahi avahi-autoipd beaglidx bin cacti canna \
|
||||||
|
clamav daemon dbus distcache dnsmasq dovecot fax ftp games gdm \
|
||||||
|
gkrellmd gopher hacluster haldaemon halt hsqldb ident junkbust kdm \
|
||||||
|
ldap lp mail mailman mailnull man messagebus mldonkey mysql nagios \
|
||||||
|
named netdump news nfsnobody nobody nscd ntp nut nx obsrun openvpn \
|
||||||
|
operator pcap polkitd postfix postgres privoxy pulse pvm quagga radvd \
|
||||||
|
rpc rpcuser rpm rtkit scard shutdown squid sshd statd svn sync tftp \
|
||||||
|
usbmux uucp vcsa wwwrun xfs '_*'
|
||||||
|
|
||||||
|
# ... unless we really want to.
|
||||||
|
zstyle '*' single-ignored show
|
||||||
|
|
||||||
|
if [[ $COMPLETION_WAITING_DOTS = true ]]; then
|
||||||
|
expand-or-complete-with-dots() {
|
||||||
|
# toggle line-wrapping off and back on again
|
||||||
|
[[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti rmam
|
||||||
|
print -Pn "%{%F{red}......%f%}"
|
||||||
|
[[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti smam
|
||||||
|
|
||||||
|
zle expand-or-complete
|
||||||
|
zle redisplay
|
||||||
|
}
|
||||||
|
zle -N expand-or-complete-with-dots
|
||||||
|
bindkey "^I" expand-or-complete-with-dots
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -s "/usr/share/zsh/site-functions/_pass" ] && zstyle ':completion:*' "/usr/share/zsh/site-functions/_pass"
|
5
.config/zsh/include/dotfiles
Normal file
5
.config/zsh/include/dotfiles
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
export DOTFILES=""
|
||||||
|
|
||||||
|
[ ! $DOTFILES ] && unset DOTFILES
|
45
.config/zsh/include/keybinds
Normal file
45
.config/zsh/include/keybinds
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#!/bin/env zsh
|
||||||
|
# create a zkbd compatible hash;
|
||||||
|
# to add other keys to this hash, see: man 5 terminfo
|
||||||
|
typeset -g -A key
|
||||||
|
|
||||||
|
key[Home]="${terminfo[khome]}"
|
||||||
|
key[End]="${terminfo[kend]}"
|
||||||
|
key[Insert]="${terminfo[kich1]}"
|
||||||
|
key[Backspace]="${terminfo[kbs]}"
|
||||||
|
key[Delete]="${terminfo[kdch1]}"
|
||||||
|
key[Up]="${terminfo[kcuu1]}"
|
||||||
|
key[Down]="${terminfo[kcud1]}"
|
||||||
|
key[Left]="${terminfo[kcub1]}"
|
||||||
|
key[Right]="${terminfo[kcuf1]}"
|
||||||
|
key[PageUp]="${terminfo[kpp]}"
|
||||||
|
key[PageDown]="${terminfo[knp]}"
|
||||||
|
key[Shift-Tab]="${terminfo[kcbt]}"
|
||||||
|
|
||||||
|
# setup key accordingly
|
||||||
|
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
|
||||||
|
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
|
||||||
|
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
|
||||||
|
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
|
||||||
|
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
|
||||||
|
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history
|
||||||
|
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history
|
||||||
|
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
|
||||||
|
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
|
||||||
|
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
|
||||||
|
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
|
||||||
|
[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete
|
||||||
|
|
||||||
|
# Finally, make sure the terminal is in application mode, when zle is
|
||||||
|
# active. Only then are the values from $terminfo valid.
|
||||||
|
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
|
||||||
|
autoload -Uz add-zle-hook-widget
|
||||||
|
function zle_application_mode_start { echoti smkx }
|
||||||
|
function zle_application_mode_stop { echoti rmkx }
|
||||||
|
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
|
||||||
|
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
|
||||||
|
fi
|
||||||
|
|
||||||
|
bindkey -v '^[[3~' delete-char
|
||||||
|
bindkey '^ ' autosuggest-accept
|
||||||
|
|
163
.config/zsh/include/lf
Normal file
163
.config/zsh/include/lf
Normal file
|
@ -0,0 +1,163 @@
|
||||||
|
#!/bin/sh
|
||||||
|
export LF_ICONS="\
|
||||||
|
tw=:\
|
||||||
|
st=:\
|
||||||
|
ow=:\
|
||||||
|
dt=:\
|
||||||
|
di=:\
|
||||||
|
fi=:\
|
||||||
|
ln=:\
|
||||||
|
or=:\
|
||||||
|
ex=:\
|
||||||
|
*.c=:\
|
||||||
|
*.cc=:\
|
||||||
|
*.clj=:\
|
||||||
|
*.coffee=:\
|
||||||
|
*.cpp=:\
|
||||||
|
*.css=:\
|
||||||
|
*.d=:\
|
||||||
|
*.dart=:\
|
||||||
|
*.erl=:\
|
||||||
|
*.exs=:\
|
||||||
|
*.fs=:\
|
||||||
|
*.go=:\
|
||||||
|
*.h=:\
|
||||||
|
*.hh=:\
|
||||||
|
*.hpp=:\
|
||||||
|
*.hs=:\
|
||||||
|
*.html=:\
|
||||||
|
*.java=:\
|
||||||
|
*.jl=:\
|
||||||
|
*.js=:\
|
||||||
|
*.json=:\
|
||||||
|
*.lua=:\
|
||||||
|
*.md=:\
|
||||||
|
*.php=:\
|
||||||
|
*.pl=:\
|
||||||
|
*.pro=:\
|
||||||
|
*.py=:\
|
||||||
|
*.rb=:\
|
||||||
|
*.rs=:\
|
||||||
|
*.scala=:\
|
||||||
|
*.ts=:\
|
||||||
|
*.vim=:\
|
||||||
|
*.cmd=:\
|
||||||
|
*.ps1=:\
|
||||||
|
*.sh=:\
|
||||||
|
*.bash=:\
|
||||||
|
*.zsh=:\
|
||||||
|
*.fish=:\
|
||||||
|
*.tar=:\
|
||||||
|
*.tgz=:\
|
||||||
|
*.arc=:\
|
||||||
|
*.arj=:\
|
||||||
|
*.taz=:\
|
||||||
|
*.lha=:\
|
||||||
|
*.lz4=:\
|
||||||
|
*.lzh=:\
|
||||||
|
*.lzma=:\
|
||||||
|
*.tlz=:\
|
||||||
|
*.txz=:\
|
||||||
|
*.tzo=:\
|
||||||
|
*.t7z=:\
|
||||||
|
*.zip=:\
|
||||||
|
*.z=:\
|
||||||
|
*.dz=:\
|
||||||
|
*.gz=:\
|
||||||
|
*.lrz=:\
|
||||||
|
*.lz=:\
|
||||||
|
*.lzo=:\
|
||||||
|
*.xz=:\
|
||||||
|
*.zst=:\
|
||||||
|
*.tzst=:\
|
||||||
|
*.bz2=:\
|
||||||
|
*.bz=:\
|
||||||
|
*.tbz=:\
|
||||||
|
*.tbz2=:\
|
||||||
|
*.tz=:\
|
||||||
|
*.deb=:\
|
||||||
|
*.rpm=:\
|
||||||
|
*.jar=:\
|
||||||
|
*.war=:\
|
||||||
|
*.ear=:\
|
||||||
|
*.sar=:\
|
||||||
|
*.rar=:\
|
||||||
|
*.alz=:\
|
||||||
|
*.ace=:\
|
||||||
|
*.zoo=:\
|
||||||
|
*.cpio=:\
|
||||||
|
*.7z=:\
|
||||||
|
*.rz=:\
|
||||||
|
*.cab=:\
|
||||||
|
*.wim=:\
|
||||||
|
*.swm=:\
|
||||||
|
*.dwm=:\
|
||||||
|
*.esd=:\
|
||||||
|
*.jpg=:\
|
||||||
|
*.jpeg=:\
|
||||||
|
*.mjpg=:\
|
||||||
|
*.mjpeg=:\
|
||||||
|
*.gif=:\
|
||||||
|
*.bmp=:\
|
||||||
|
*.pbm=:\
|
||||||
|
*.pgm=:\
|
||||||
|
*.ppm=:\
|
||||||
|
*.tga=:\
|
||||||
|
*.xbm=:\
|
||||||
|
*.xpm=:\
|
||||||
|
*.tif=:\
|
||||||
|
*.tiff=:\
|
||||||
|
*.png=:\
|
||||||
|
*.svg=:\
|
||||||
|
*.svgz=:\
|
||||||
|
*.mng=:\
|
||||||
|
*.pcx=:\
|
||||||
|
*.mov=:\
|
||||||
|
*.mpg=:\
|
||||||
|
*.mpeg=:\
|
||||||
|
*.m2v=:\
|
||||||
|
*.mkv=:\
|
||||||
|
*.webm=:\
|
||||||
|
*.ogm=:\
|
||||||
|
*.mp4=:\
|
||||||
|
*.m4v=:\
|
||||||
|
*.mp4v=:\
|
||||||
|
*.vob=:\
|
||||||
|
*.qt=:\
|
||||||
|
*.nuv=:\
|
||||||
|
*.wmv=:\
|
||||||
|
*.asf=:\
|
||||||
|
*.rm=:\
|
||||||
|
*.rmvb=:\
|
||||||
|
*.flc=:\
|
||||||
|
*.avi=:\
|
||||||
|
*.fli=:\
|
||||||
|
*.flv=:\
|
||||||
|
*.gl=:\
|
||||||
|
*.dl=:\
|
||||||
|
*.xcf=:\
|
||||||
|
*.xwd=:\
|
||||||
|
*.yuv=:\
|
||||||
|
*.cgm=:\
|
||||||
|
*.emf=:\
|
||||||
|
*.ogv=:\
|
||||||
|
*.ogx=:\
|
||||||
|
*.aac=:\
|
||||||
|
*.au=:\
|
||||||
|
*.flac=:\
|
||||||
|
*.m4a=:\
|
||||||
|
*.mid=:\
|
||||||
|
*.midi=:\
|
||||||
|
*.mka=:\
|
||||||
|
*.mp3=:\
|
||||||
|
*.mpc=:\
|
||||||
|
*.ogg=:\
|
||||||
|
*.ra=:\
|
||||||
|
*.wav=:\
|
||||||
|
*.oga=:\
|
||||||
|
*.opus=:\
|
||||||
|
*.spx=:\
|
||||||
|
*.xspf=:\
|
||||||
|
*.pdf=:\
|
||||||
|
*.nix=:\
|
||||||
|
"
|
61
.config/zsh/include/theme
Normal file
61
.config/zsh/include/theme
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/env zsh
|
||||||
|
autoload -Uz vcs_info
|
||||||
|
precmd_vcs_info() { vcs_info }
|
||||||
|
precmd_functions+=( precmd_vcs_info )
|
||||||
|
setopt prompt_subst
|
||||||
|
zstyle ':vcs_info:*' stagedstr 'M'
|
||||||
|
zstyle ':vcs_info:*' unstagedstr '!'
|
||||||
|
zstyle ':vcs_info:*' check-for-changes true
|
||||||
|
zstyle ':vcs_info:git:*' formats '%F{5} %b %F{1}%c%u %f'
|
||||||
|
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
|
||||||
|
zstyle ':vcs_info:*' enable git
|
||||||
|
+vi-git-untracked() {
|
||||||
|
|
||||||
|
# git status ahead
|
||||||
|
if [[ $(git status --porcelain -b | grep '^## [^ ]\+ .*ahead') ]]; then
|
||||||
|
hook_com[unstaged]+='%F{1}⇡%f'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# git untracked
|
||||||
|
if [ $(git rev-parse --is-inside-work-tree 2> /dev/null) = 'true' ] && \
|
||||||
|
[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') = 1 ] ; then
|
||||||
|
hook_com[unstaged]+='%F{1}?%f'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function zle-line-init zle-keymap-select {
|
||||||
|
PS1="
|
||||||
|
%B%F{blue}%~ \$vcs_info_msg_0_
|
||||||
|
%F{green}${${KEYMAP/vicmd/N }/(main|viins)/}$>%f%b "
|
||||||
|
PS2="%B%F{blue}?>%f%b "
|
||||||
|
# RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}"
|
||||||
|
# RPS2=$RPS1
|
||||||
|
|
||||||
|
if [[ ${KEYMAP} == vicmd ]] ||
|
||||||
|
[[ $1 = 'block' ]]; then
|
||||||
|
echo -ne '\e[1 q'
|
||||||
|
|
||||||
|
elif [[ ${KEYMAP} == main ]] ||
|
||||||
|
[[ ${KEYMAP} == viins ]] ||
|
||||||
|
[[ ${KEYMAP} = '' ]] ||
|
||||||
|
[[ $1 = 'beam' ]]; then
|
||||||
|
echo -ne '\e[5 q'
|
||||||
|
fi
|
||||||
|
|
||||||
|
zle reset-prompt
|
||||||
|
}
|
||||||
|
zle -N zle-line-init
|
||||||
|
zle -N zle-keymap-select
|
||||||
|
|
||||||
|
_fix_cursor() {
|
||||||
|
echo -ne '\e[5 q'
|
||||||
|
}
|
||||||
|
|
||||||
|
precmd () {
|
||||||
|
RPROMPT="" # for some reason path added to RPROMPT in macOS, I have no idea where it's coming from
|
||||||
|
vcs_info
|
||||||
|
_fix_cursor
|
||||||
|
}
|
||||||
|
#RPROMPT=\$vcs_info_msg_0_
|
||||||
|
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#60C0FF,bold,underline"
|
||||||
|
ZSH_AUTOSUGGEST_HISTORY_IGNORE="ls *,cd *"
|
|
@ -1,45 +0,0 @@
|
||||||
#!/bin/env zsh
|
|
||||||
# create a zkbd compatible hash;
|
|
||||||
# to add other keys to this hash, see: man 5 terminfo
|
|
||||||
typeset -g -A key
|
|
||||||
|
|
||||||
key[Home]="${terminfo[khome]}"
|
|
||||||
key[End]="${terminfo[kend]}"
|
|
||||||
key[Insert]="${terminfo[kich1]}"
|
|
||||||
key[Backspace]="${terminfo[kbs]}"
|
|
||||||
key[Delete]="${terminfo[kdch1]}"
|
|
||||||
key[Up]="${terminfo[kcuu1]}"
|
|
||||||
key[Down]="${terminfo[kcud1]}"
|
|
||||||
key[Left]="${terminfo[kcub1]}"
|
|
||||||
key[Right]="${terminfo[kcuf1]}"
|
|
||||||
key[PageUp]="${terminfo[kpp]}"
|
|
||||||
key[PageDown]="${terminfo[knp]}"
|
|
||||||
key[Shift-Tab]="${terminfo[kcbt]}"
|
|
||||||
|
|
||||||
# setup key accordingly
|
|
||||||
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
|
|
||||||
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
|
|
||||||
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
|
|
||||||
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
|
|
||||||
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
|
|
||||||
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history
|
|
||||||
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history
|
|
||||||
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
|
|
||||||
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
|
|
||||||
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
|
|
||||||
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
|
|
||||||
[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete
|
|
||||||
|
|
||||||
# Finally, make sure the terminal is in application mode, when zle is
|
|
||||||
# active. Only then are the values from $terminfo valid.
|
|
||||||
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
|
|
||||||
autoload -Uz add-zle-hook-widget
|
|
||||||
function zle_application_mode_start { echoti smkx }
|
|
||||||
function zle_application_mode_stop { echoti rmkx }
|
|
||||||
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
|
|
||||||
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
|
|
||||||
fi
|
|
||||||
|
|
||||||
bindkey -v '^[[3~' delete-char
|
|
||||||
bindkey '^ ' autosuggest-accept
|
|
||||||
|
|
1
.config/zsh/keybinds
Symbolic link
1
.config/zsh/keybinds
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
include/keybinds
|
|
@ -1,61 +0,0 @@
|
||||||
#!/bin/env zsh
|
|
||||||
autoload -Uz vcs_info
|
|
||||||
precmd_vcs_info() { vcs_info }
|
|
||||||
precmd_functions+=( precmd_vcs_info )
|
|
||||||
setopt prompt_subst
|
|
||||||
zstyle ':vcs_info:*' stagedstr 'M'
|
|
||||||
zstyle ':vcs_info:*' unstagedstr '!'
|
|
||||||
zstyle ':vcs_info:*' check-for-changes true
|
|
||||||
zstyle ':vcs_info:git:*' formats '%F{5} %b %F{1}%c%u %f'
|
|
||||||
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
|
|
||||||
zstyle ':vcs_info:*' enable git
|
|
||||||
+vi-git-untracked() {
|
|
||||||
|
|
||||||
# git status ahead
|
|
||||||
if [[ $(git status --porcelain -b | grep '^## [^ ]\+ .*ahead') ]]; then
|
|
||||||
hook_com[unstaged]+='%F{1}⇡%f'
|
|
||||||
fi
|
|
||||||
|
|
||||||
# git untracked
|
|
||||||
if [ $(git rev-parse --is-inside-work-tree 2> /dev/null) = 'true' ] && \
|
|
||||||
[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') = 1 ] ; then
|
|
||||||
hook_com[unstaged]+='%F{1}?%f'
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function zle-line-init zle-keymap-select {
|
|
||||||
PS1="
|
|
||||||
%B%F{blue}%~ \$vcs_info_msg_0_
|
|
||||||
%F{green}${${KEYMAP/vicmd/N }/(main|viins)/}$>%f%b "
|
|
||||||
PS2="%B%F{blue}?>%f%b "
|
|
||||||
# RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}"
|
|
||||||
# RPS2=$RPS1
|
|
||||||
|
|
||||||
if [[ ${KEYMAP} == vicmd ]] ||
|
|
||||||
[[ $1 = 'block' ]]; then
|
|
||||||
echo -ne '\e[1 q'
|
|
||||||
|
|
||||||
elif [[ ${KEYMAP} == main ]] ||
|
|
||||||
[[ ${KEYMAP} == viins ]] ||
|
|
||||||
[[ ${KEYMAP} = '' ]] ||
|
|
||||||
[[ $1 = 'beam' ]]; then
|
|
||||||
echo -ne '\e[5 q'
|
|
||||||
fi
|
|
||||||
|
|
||||||
zle reset-prompt
|
|
||||||
}
|
|
||||||
zle -N zle-line-init
|
|
||||||
zle -N zle-keymap-select
|
|
||||||
|
|
||||||
_fix_cursor() {
|
|
||||||
echo -ne '\e[5 q'
|
|
||||||
}
|
|
||||||
|
|
||||||
precmd () {
|
|
||||||
RPROMPT="" # for some reason path added to RPROMPT in macOS, I have no idea where it's coming from
|
|
||||||
vcs_info
|
|
||||||
_fix_cursor
|
|
||||||
}
|
|
||||||
#RPROMPT=\$vcs_info_msg_0_
|
|
||||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#60C0FF,bold,underline"
|
|
||||||
ZSH_AUTOSUGGEST_HISTORY_IGNORE="ls *,cd *"
|
|
1
.config/zsh/theme
Symbolic link
1
.config/zsh/theme
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
include/theme
|
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.config/discordcanary/**
|
||||||
|
!.config/discordcanary/settings.json
|
||||||
|
|
||||||
|
.config/zsh/**
|
||||||
|
!.config/zsh/.zprofile
|
||||||
|
!.config/zsh/.zshenv
|
||||||
|
!.config/zsh/.zshrc
|
||||||
|
!.config/zsh/aliases
|
||||||
|
!.config/zsh/completion
|
||||||
|
!.config/zsh/dotfiles
|
||||||
|
!.config/zsh/keybinds
|
||||||
|
!.config/zsh/theme
|
||||||
|
!.config/zsh/include/
|
||||||
|
!.config/zsh/include/**
|
25
.local/bin/setup-dotfiles
Executable file
25
.local/bin/setup-dotfiles
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
printf "Experimental script! Run it anyway? (y/N) "
|
||||||
|
read choice
|
||||||
|
[ "$choice" = "y" ] || exit 1
|
||||||
|
|
||||||
|
[ ! $1 ] && >&2 echo "Usage: setup-dotfiles [PATH]" && exit 1
|
||||||
|
|
||||||
|
cd $1 || { >&2 echo "Invalid path" && exit 1 }
|
||||||
|
|
||||||
|
git status 2>/dev/null || { >&2 echo "Directory is not a git directory!" && exit 1 }
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
export DOTFILES="${PWD}"
|
||||||
|
|
||||||
|
[ ! \$DOTFILES ] && unset DOTFILES
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "##############################################################"
|
||||||
|
echo "# Please replace ~/.config/zsh/dotfiles with the code above. #"
|
||||||
|
echo "# TIPS: Run 'setup-dotfiles > ~/.config/zsh/dotfiles' #"
|
||||||
|
echo "##############################################################"
|
48
README.md
48
README.md
|
@ -14,41 +14,42 @@ I'm still working on cleaning up some mess.
|
||||||
<img align="right" width="55%" src='https://raw.githubusercontent.com/null2264/null2264/master/assets/newSetup.png'></img>
|
<img align="right" width="55%" src='https://raw.githubusercontent.com/null2264/null2264/master/assets/newSetup.png'></img>
|
||||||
My Setup:
|
My Setup:
|
||||||
|
|
||||||
- **WM**: bspwm / DWM*ʳ*
|
- **WM**: Hyprland
|
||||||
- **OS**: Arch Linux / macOS 12.x (Monterey)*ᵖ*
|
- **OS**: Arch Linux / macOS 13.x (Ventura)[^mac]
|
||||||
- **Shell**: zsh
|
- **Shell**: zsh
|
||||||
- **Terminal**: st*ʳ* / kitty / iTerm2
|
- **Terminal**: kitty / iTerm2
|
||||||
- **Editor**: Neovim / vim
|
- **Editor**: Neovim / VSCode / IDEA
|
||||||
- **File Manager**: Thunar / lf
|
- **File Manager**: Thunar / Nautilus / lf
|
||||||
- **Launcher**: rofi / dmenu / Sol
|
- **Launcher**: tofi / Alfred
|
||||||
- **Browser**: Librewolf / Brave
|
- **Browser**: Pulse
|
||||||
|
|
||||||
*info*: *ʳ* = *in separate repo*; *ᵖ* = *partially work*
|
[^mac]: macOS support is partially working
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
Currently there's no automatic installer for my dotfiles.
|
|
||||||
|
|
||||||
~~I'm working on Luke Smith's LARBS fork to be able to install my dotfiles~~ (Too lazy lol)
|
> [!WARNING]
|
||||||
|
> This section is still WIP!
|
||||||
|
|
||||||
|
First time setup only: run `setup-dotfiles <dotfiles path> > ~/.config/zsh/dotfiles`, e.g. `setup-dotfiles ~/Build/GIT/dotfiles > ~/.config/zsh/dotfiles`.
|
||||||
|
|
||||||
## Recommended Project/Software
|
## Recommended Project/Software
|
||||||
- LARBS
|
- TBSM
|
||||||
- Console-TDM
|
- Fonts
|
||||||
- Nerd Fonts
|
- Iosevka + Sarasa Gothic
|
||||||
- Iosevka
|
|
||||||
- Fira
|
- Fira
|
||||||
- Sarasa Font
|
- Feather / Lucide / Phosphor (for Icons)
|
||||||
- Feather / Lucide (Font)
|
- kitty
|
||||||
- st (st-zi build)
|
|
||||||
- Tiling WM
|
- Tiling WM
|
||||||
- Qtile
|
- Qtile (Linux - X11)
|
||||||
- BSPWM
|
- BSPWM (Linux - X11)
|
||||||
- DWM
|
- DWM (Linux - X11)
|
||||||
- yabai
|
- Hyprland (Linux - Wayland)
|
||||||
|
- yabai (macOS)
|
||||||
- [dortania](https://github.com/dortania) (A great hackintosh guide)
|
- [dortania](https://github.com/dortania) (A great hackintosh guide)
|
||||||
|
|
||||||
## Tips
|
## Tips
|
||||||
|
|
||||||
### Small guide for my dwm hotkeys
|
### Small guide for my tiling WM hotkeys
|
||||||
- MODKey (Super/Win Key): Window Manager
|
- MODKey (Super/Win Key): Window Manager
|
||||||
- Alt/Option: Terminal
|
- Alt/Option: Terminal
|
||||||
- Ctrl/: Most program inside terminal
|
- Ctrl/: Most program inside terminal
|
||||||
|
@ -61,6 +62,3 @@ Add this to `/etc/zsh/zshenv` (**macOS**: `/etc/zshenv`)
|
||||||
|
|
||||||
export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh"
|
export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh"
|
||||||
```
|
```
|
||||||
|
|
||||||
### For winders peeps
|
|
||||||
Set $PROFILE environment variable to your powershell config file path (ex: $PROFILE='$HOME/.config/powershell/profile.ps1')
|
|
||||||
|
|
|
@ -14,7 +14,11 @@ else
|
||||||
set viminfo+='1000,n$XDG_DATA_HOME/nvim/nviminfo
|
set viminfo+='1000,n$XDG_DATA_HOME/nvim/nviminfo
|
||||||
endif
|
endif
|
||||||
set runtimepath=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after
|
set runtimepath=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after
|
||||||
let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc"
|
if !has('nvim')
|
||||||
|
let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc"
|
||||||
|
else
|
||||||
|
let $MYVIMRC="$XDG_CONFIG_HOME/nvim/init.lua"
|
||||||
|
endif
|
||||||
|
|
||||||
" ----- Mutt
|
" ----- Mutt
|
||||||
au BufRead /tmp/mutt-* set tw=72
|
au BufRead /tmp/mutt-* set tw=72
|
|
@ -96,6 +96,11 @@ Plug 'GutenYe/json5.vim'
|
||||||
" --- Project Fluent support
|
" --- Project Fluent support
|
||||||
Plug 'projectfluent/fluent.vim'
|
Plug 'projectfluent/fluent.vim'
|
||||||
|
|
||||||
|
" --- AIO solution for highlighting
|
||||||
|
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
|
||||||
|
|
||||||
|
Plug 'https://git.sr.ht/~mango/tree-sitter-gsp'
|
||||||
|
|
||||||
call plug#end()
|
call plug#end()
|
||||||
|
|
||||||
" ======================
|
" ======================
|
||||||
|
@ -408,3 +413,6 @@ lua <<EOF
|
||||||
capabilities = capabilities
|
capabilities = capabilities
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
" --- TSTree
|
||||||
|
lua require'nvim-treesitter.configs'.setup{highlight={enable=true}}
|
|
@ -6,11 +6,12 @@
|
||||||
" ----- Vim Initial Config
|
" ----- Vim Initial Config
|
||||||
set encoding=utf-8
|
set encoding=utf-8
|
||||||
set hls
|
set hls
|
||||||
set number relativenumber
|
set number relativenumber " -- converted
|
||||||
set ignorecase
|
set ignorecase
|
||||||
set smartcase
|
set smartcase
|
||||||
set mouse=a
|
set mouse=a
|
||||||
set background=dark
|
set background=dark
|
||||||
|
set ffs=unix
|
||||||
" set complete+=kspell
|
" set complete+=kspell
|
||||||
" set completeopt=menuone,longest
|
" set completeopt=menuone,longest
|
||||||
" set list lcs=trail:·,tab:··\|,nbsp:·
|
" set list lcs=trail:·,tab:··\|,nbsp:·
|
||||||
|
@ -22,9 +23,10 @@ hi Folded ctermbg=Black
|
||||||
set fillchars=eob:\
|
set fillchars=eob:\
|
||||||
syntax on
|
syntax on
|
||||||
filetype indent plugin on
|
filetype indent plugin on
|
||||||
|
" -- converted
|
||||||
map <C-n> :NERDTreeToggle<CR>
|
map <C-n> :NERDTreeToggle<CR>
|
||||||
let mapleader=" "
|
let mapleader=" " " -- converted
|
||||||
set guifont=Iosevka:h15
|
set guifont=Iosevka:h15 " -- converted
|
||||||
|
|
||||||
" ----- Folding stuff
|
" ----- Folding stuff
|
||||||
set foldnestmax=10
|
set foldnestmax=10
|
||||||
|
@ -36,22 +38,22 @@ set foldlevel=1
|
||||||
autocmd FileType python setlocal foldmethod=indent
|
autocmd FileType python setlocal foldmethod=indent
|
||||||
|
|
||||||
" ----- Mapping
|
" ----- Mapping
|
||||||
" Norm but in shortcut
|
" Norm but in shortcut -- converted
|
||||||
vnoremap . :normal .<CR>
|
vnoremap . :normal .<CR>
|
||||||
|
|
||||||
" Map ctrl + u as U
|
" Map ctrl + u as U -- converted
|
||||||
noremap <C-u> U
|
noremap <C-u> U
|
||||||
|
|
||||||
" Map U as redo (ctrl + r)
|
" Map U as redo (ctrl + r) -- converted
|
||||||
noremap U <C-r>
|
noremap U <C-r>
|
||||||
|
|
||||||
" Yank and Put to/from clipboard/primary
|
" Yank and Put to/from clipboard/primary -- converted
|
||||||
noremap <C-y> "+y
|
noremap <C-y> "+y
|
||||||
noremap <C-p> "+p
|
noremap <C-p> "+p
|
||||||
noremap <C-Y> "+y
|
noremap <C-Y> "+y
|
||||||
noremap <C-P> "+P
|
noremap <C-P> "+P
|
||||||
|
|
||||||
" Shortcut to comment a line
|
" Shortcut to comment a line -- converted
|
||||||
map <C-/> gcc
|
map <C-/> gcc
|
||||||
vmap <C-/> gc
|
vmap <C-/> gc
|
||||||
imap <C-/> <esc>gc
|
imap <C-/> <esc>gc
|
||||||
|
@ -90,7 +92,7 @@ augroup END
|
||||||
" ----- indent for corresponding extension
|
" ----- indent for corresponding extension
|
||||||
autocmd BufEnter *.py set ai sw=4 ts=4 sta et fo=croql
|
autocmd BufEnter *.py set ai sw=4 ts=4 sta et fo=croql
|
||||||
" in C files, tabs looks like 4 spaces, but it's actually tabs
|
" in C files, tabs looks like 4 spaces, but it's actually tabs
|
||||||
autocmd BufEnter *.c set ai sw=4 ts=4 sta noet fo=croql
|
autocmd Filetype c set ai sw=4 ts=4 sta noet fo=croql
|
||||||
autocmd BufEnter *.md set ai sw=3 ts=3 sta et fo=croql
|
autocmd BufEnter *.md set ai sw=3 ts=3 sta et fo=croql
|
||||||
autocmd Filetype html* set ai sw=4 ts=4 sta et fo=croql
|
autocmd Filetype html* set ai sw=4 ts=4 sta et fo=croql
|
||||||
autocmd Filetype *css set ai sw=4 ts=4 sta et fo=croql
|
autocmd Filetype *css set ai sw=4 ts=4 sta et fo=croql
|
37
archive/vim/vimrc
Executable file
37
archive/vim/vimrc
Executable file
|
@ -0,0 +1,37 @@
|
||||||
|
" vim: filetype=vim
|
||||||
|
"
|
||||||
|
" ========================================
|
||||||
|
" ::-----------------------:
|
||||||
|
" .--------------------------:
|
||||||
|
" :---------------:--------:
|
||||||
|
" :------.
|
||||||
|
" :------.
|
||||||
|
" .------: .:::
|
||||||
|
" ------: :-----
|
||||||
|
" :------. -----.
|
||||||
|
" .------: ...
|
||||||
|
" .------: .::.
|
||||||
|
" :------. :----:
|
||||||
|
" .------. :------.
|
||||||
|
" .------: .------.
|
||||||
|
" .------: .------:
|
||||||
|
" :-------:::::::::::------.
|
||||||
|
" :-----------------------:
|
||||||
|
" .---------------------:
|
||||||
|
" ========================================
|
||||||
|
" null2264's NeoVim Config
|
||||||
|
" ========================================
|
||||||
|
|
||||||
|
if !has('nvim') || !has('win64') || !has('win32') || !has('win16')
|
||||||
|
let $ZVIM_CONFIG_DIR = "~/.config/vim"
|
||||||
|
let $ZVIM_OS_TYPE = "nix"
|
||||||
|
|
||||||
|
so $ZVIM_CONFIG_DIR/vim_$ZVIM_OS_TYPE
|
||||||
|
so $ZVIM_CONFIG_DIR/vim_uni
|
||||||
|
|
||||||
|
if !exists('g:vscode')
|
||||||
|
source $ZVIM_CONFIG_DIR/vim_plug
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
echoerr "Only NeoVim on POSIX OS is supported!"
|
||||||
|
endif
|
Loading…
Add table
Add a link
Reference in a new issue