Initial commit
This commit is contained in:
3
.Xresources
Normal file
3
.Xresources
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Xft.dpi: 150
|
||||||
|
*.font: Liberation Mono:pixelsize=20:antialias=true:autohint=true;
|
||||||
|
*.alpha: 0.77
|
||||||
146
.config/dircolors/dircolors
Normal file
146
.config/dircolors/dircolors
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
# This file is based on the standard dircolors but with bright colors when using bold font
|
||||||
|
|
||||||
|
TERM xterm*
|
||||||
|
|
||||||
|
# NORMAL 00
|
||||||
|
# FILE 00
|
||||||
|
RESET 0
|
||||||
|
DIR 01;94
|
||||||
|
LINK 01;96
|
||||||
|
MULTIHARDLINK 01;96
|
||||||
|
FIFO 40;33
|
||||||
|
SOCK 01;95
|
||||||
|
DOOR 01;95
|
||||||
|
BLK 40;33;01 # block device driver
|
||||||
|
CHR 40;33;01 # character device driver
|
||||||
|
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
||||||
|
MISSING 00 # ... and the files they point to
|
||||||
|
SETUID 37;41
|
||||||
|
SETGID 30;43
|
||||||
|
CAPABILITY 30;41
|
||||||
|
STICKY_OTHER_WRITABLE 30;42
|
||||||
|
OTHER_WRITABLE 34;42
|
||||||
|
STICKY 37;44
|
||||||
|
EXEC 01;92
|
||||||
|
|
||||||
|
## Archives
|
||||||
|
*.tar 01;91
|
||||||
|
*.tgz 01;91
|
||||||
|
*.arc 01;91
|
||||||
|
*.arj 01;91
|
||||||
|
*.taz 01;91
|
||||||
|
*.lha 01;91
|
||||||
|
*.lz4 01;91
|
||||||
|
*.lzh 01;91
|
||||||
|
*.lzma 01;91
|
||||||
|
*.tlz 01;91
|
||||||
|
*.txz 01;91
|
||||||
|
*.tzo 01;91
|
||||||
|
*.t7z 01;91
|
||||||
|
*.zip 01;91
|
||||||
|
*.z 01;91
|
||||||
|
*.Z 01;91
|
||||||
|
*.dz 01;91
|
||||||
|
*.gz 01;91
|
||||||
|
*.lrz 01;91
|
||||||
|
*.lz 01;91
|
||||||
|
*.lzo 01;91
|
||||||
|
*.xz 01;91
|
||||||
|
*.zst 01;91
|
||||||
|
*.tzst 01;91
|
||||||
|
*.bz2 01;91
|
||||||
|
*.bz 01;91
|
||||||
|
*.tbz 01;91
|
||||||
|
*.tbz2 01;91
|
||||||
|
*.tz 01;91
|
||||||
|
*.deb 01;91
|
||||||
|
*.rpm 01;91
|
||||||
|
*.jar 01;91
|
||||||
|
*.war 01;91
|
||||||
|
*.ear 01;91
|
||||||
|
*.sar 01;91
|
||||||
|
*.rar 01;91
|
||||||
|
*.alz 01;91
|
||||||
|
*.ace 01;91
|
||||||
|
*.zoo 01;91
|
||||||
|
*.cpio 01;91
|
||||||
|
*.7z 01;91
|
||||||
|
*.rz 01;91
|
||||||
|
*.cab 01;91
|
||||||
|
*.wim 01;91
|
||||||
|
*.swm 01;91
|
||||||
|
*.dwm 01;91
|
||||||
|
*.esd 01;91
|
||||||
|
|
||||||
|
## Images
|
||||||
|
*.jpg 01;95
|
||||||
|
*.jpeg 01;95
|
||||||
|
*.mjpg 01;95
|
||||||
|
*.mjpeg 01;95
|
||||||
|
*.gif 01;95
|
||||||
|
*.bmp 01;95
|
||||||
|
*.pbm 01;95
|
||||||
|
*.pgm 01;95
|
||||||
|
*.ppm 01;95
|
||||||
|
*.tga 01;95
|
||||||
|
*.xbm 01;95
|
||||||
|
*.xpm 01;95
|
||||||
|
*.tif 01;95
|
||||||
|
*.tiff 01;95
|
||||||
|
*.png 01;95
|
||||||
|
*.svg 01;95
|
||||||
|
*.svgz 01;95
|
||||||
|
*.mng 01;95
|
||||||
|
*.pcx 01;95
|
||||||
|
|
||||||
|
## Videos
|
||||||
|
*.mov 01;95
|
||||||
|
*.mpg 01;95
|
||||||
|
*.mpeg 01;95
|
||||||
|
*.m2v 01;95
|
||||||
|
*.mkv 01;95
|
||||||
|
*.webm 01;95
|
||||||
|
*.ogm 01;95
|
||||||
|
*.mp4 01;95
|
||||||
|
*.m4v 01;95
|
||||||
|
*.mp4v 01;95
|
||||||
|
*.vob 01;95
|
||||||
|
*.qt 01;95
|
||||||
|
*.nuv 01;95
|
||||||
|
*.wmv 01;95
|
||||||
|
*.asf 01;95
|
||||||
|
*.rm 01;95
|
||||||
|
*.rmvb 01;95
|
||||||
|
*.flc 01;95
|
||||||
|
*.avi 01;95
|
||||||
|
*.fli 01;95
|
||||||
|
*.flv 01;95
|
||||||
|
*.gl 01;95
|
||||||
|
*.dl 01;95
|
||||||
|
*.xcf 01;95
|
||||||
|
*.xwd 01;95
|
||||||
|
*.yuv 01;95
|
||||||
|
*.cgm 01;95
|
||||||
|
*.emf 01;95
|
||||||
|
|
||||||
|
## Audio
|
||||||
|
*.aac 00;36
|
||||||
|
*.au 00;36
|
||||||
|
*.flac 00;36
|
||||||
|
*.m4a 00;36
|
||||||
|
*.mid 00;36
|
||||||
|
*.midi 00;36
|
||||||
|
*.mka 00;36
|
||||||
|
*.mp3 00;36
|
||||||
|
*.mpc 00;36
|
||||||
|
*.ogg 00;36
|
||||||
|
*.ra 00;36
|
||||||
|
*.wav 00;36
|
||||||
|
|
||||||
|
## https://wiki.xiph.org/MIME_Types_and_File_Extensions
|
||||||
|
*.ogv 01;95
|
||||||
|
*.ogx 01;95
|
||||||
|
*.oga 00;36
|
||||||
|
*.opus 00;36
|
||||||
|
*.spx 00;36
|
||||||
|
*.xspf 00;36
|
||||||
15
.config/git/config
Normal file
15
.config/git/config
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[include]
|
||||||
|
path = gitlab.config
|
||||||
|
[includeIf "gitdir:~/Projects/dotfiles-github/"]
|
||||||
|
path = github.config
|
||||||
|
[commit]
|
||||||
|
gpgsign = true
|
||||||
|
[difftool "meld"]
|
||||||
|
path = /usr/bin/meld
|
||||||
|
[submodule]
|
||||||
|
recurse = true
|
||||||
|
[color "status"]
|
||||||
|
added = 076
|
||||||
|
untracked = 014
|
||||||
|
[core]
|
||||||
|
pager = diff-so-fancy | less --tabs=4 -RFX
|
||||||
8
.config/i3/airplane-mode-notify.sh
Executable file
8
.config/i3/airplane-mode-notify.sh
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "$(rfkill -o SOFT --noheadings list wlan)" = "blocked" ]; then
|
||||||
|
notify-send "Airplane mode toggled" "On"
|
||||||
|
else
|
||||||
|
notify-send "Airplane mode toggled" "Off"
|
||||||
|
fi
|
||||||
|
|
||||||
243
.config/i3/config
Normal file
243
.config/i3/config
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
# This file has been auto-generated by i3-config-wizard(1).
|
||||||
|
# It will not be overwritten, so edit it as you like.
|
||||||
|
#
|
||||||
|
# Should you change your keyboard layout some time, delete
|
||||||
|
# this file and re-run i3-config-wizard(1).
|
||||||
|
#
|
||||||
|
|
||||||
|
# i3 config file (v4)
|
||||||
|
#
|
||||||
|
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
||||||
|
|
||||||
|
set $mod Mod4
|
||||||
|
|
||||||
|
# Font for window titles. Will also be used by the bar unless a different font
|
||||||
|
# is used in the bar {} block below.
|
||||||
|
# font pango:monospace 8
|
||||||
|
|
||||||
|
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
||||||
|
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||||
|
font pango:DejaVu Sans Mono 10
|
||||||
|
|
||||||
|
# Before i3 v4.8, we used to recommend this one as the default:
|
||||||
|
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||||
|
# The font above is very space-efficient, that is, it looks good, sharp and
|
||||||
|
# clear in small sizes. However, its unicode glyph coverage is limited, the old
|
||||||
|
# X core fonts rendering does not support right-to-left and this being a bitmap
|
||||||
|
# font, it doesn’t scale on retina/hidpi displays.
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
# set $TERMINAL kitty
|
||||||
|
# bindsym $mod+Return exec i3-sensible-terminal
|
||||||
|
# bindsym $mod+Return exec kitty
|
||||||
|
bindsym $mod+Return exec gnome-terminal --hide-menubar
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
|
||||||
|
# start dmenu (a program launcher)
|
||||||
|
bindsym $mod+Shift+d exec dmenu_run
|
||||||
|
# There also is the (new) i3-dmenu-desktop which only displays applications
|
||||||
|
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
|
||||||
|
# installed.
|
||||||
|
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
|
||||||
|
|
||||||
|
bindsym $mod+d exec rofi -show drun
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
focus_wrapping no
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# split in horizontal orientation
|
||||||
|
bindsym $mod+h split h
|
||||||
|
|
||||||
|
# split in vertical orientation
|
||||||
|
bindsym $mod+v split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+s layout stacking
|
||||||
|
bindsym $mod+w layout tabbed
|
||||||
|
bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace 1
|
||||||
|
bindsym $mod+2 workspace 2
|
||||||
|
bindsym $mod+3 workspace 3
|
||||||
|
bindsym $mod+4 workspace 4
|
||||||
|
bindsym $mod+5 workspace 5
|
||||||
|
bindsym $mod+6 workspace 6
|
||||||
|
bindsym $mod+7 workspace 7
|
||||||
|
bindsym $mod+8 workspace 8
|
||||||
|
bindsym $mod+9 workspace 9
|
||||||
|
bindsym $mod+0 workspace 10
|
||||||
|
|
||||||
|
# move focused container to workspace
|
||||||
|
bindsym $mod+Shift+1 move container to workspace 1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace 2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace 3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace 4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace 5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace 6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace 7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace 8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace 9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace 10
|
||||||
|
|
||||||
|
# move focused container and switch to workspace
|
||||||
|
bindsym Mod1+Shift+1 move container to workspace 1; workspace 1
|
||||||
|
bindsym Mod1+Shift+2 move container to workspace 2; workspace 2
|
||||||
|
bindsym Mod1+Shift+3 move container to workspace 3; workspace 3
|
||||||
|
bindsym Mod1+Shift+4 move container to workspace 4; workspace 4
|
||||||
|
bindsym Mod1+Shift+5 move container to workspace 5; workspace 5
|
||||||
|
bindsym Mod1+Shift+6 move container to workspace 6; workspace 6
|
||||||
|
bindsym Mod1+Shift+7 move container to workspace 7; workspace 7
|
||||||
|
bindsym Mod1+Shift+8 move container to workspace 8; workspace 8
|
||||||
|
bindsym Mod1+Shift+9 move container to workspace 9; workspace 9
|
||||||
|
bindsym Mod1+Shift+0 move container to workspace 10; workspace 10
|
||||||
|
|
||||||
|
# reload the configuration file
|
||||||
|
bindsym $mod+Shift+c reload
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
bindsym $mod+Shift+r restart
|
||||||
|
# exit i3 (logs you out of your X session)
|
||||||
|
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that)
|
||||||
|
mode "resize" {
|
||||||
|
# These bindings trigger as soon as you enter the resize mode
|
||||||
|
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# Set window size to predefined values
|
||||||
|
# firefox anti fingerprinting
|
||||||
|
bindsym p resize set 1920 1080
|
||||||
|
# scratchpad default size
|
||||||
|
bindsym s resize set 1600 900
|
||||||
|
# "fullscreen"
|
||||||
|
bindsym f resize set 3200 1770
|
||||||
|
|
||||||
|
# Move window to center
|
||||||
|
bindsym c move position center
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Caps_Lock mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
bindsym $mod+r mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
# Start i3bar to display a workspace bar (plus the system information i3status
|
||||||
|
# finds out, if available)
|
||||||
|
# bar {
|
||||||
|
# status_command i3blocks
|
||||||
|
# position top
|
||||||
|
# }
|
||||||
|
exec_always --no-startup-id ~/.config/polybar/launch.sh &
|
||||||
|
|
||||||
|
# Touchpad configuration
|
||||||
|
set $touchpad DLL082A:01 06CB:76AF Touchpad
|
||||||
|
exec xinput set-prop "$touchpad" "libinput Tapping Enabled" 1
|
||||||
|
exec xinput set-prop "$touchpad" "libinput Natural Scrolling Enabled" 1
|
||||||
|
exec xinput set-prop "$touchpad" "libinput Accel Speed" 0.45
|
||||||
|
|
||||||
|
# Brightness controls (/etc/X11/xorg.conf necessary)
|
||||||
|
bindsym XF86MonBrightnessDown exec xbacklight -dec 10
|
||||||
|
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
|
||||||
|
|
||||||
|
# Volume controls (see https://faq.i3wm.org/question/125/how-to-change-the-systems-volume.1.html)
|
||||||
|
# Note: just add unmute add the end of the amixer command if the volume keys should unmute
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer -q -D pulse sset Master 5%+
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id amixer -q -D pulse sset Master 5%-
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id amixer -q -D pulse sset Master toggle-mute
|
||||||
|
# volume at startup
|
||||||
|
exec amixer -q -D pulse sset Master mute
|
||||||
|
|
||||||
|
default_border pixel 1
|
||||||
|
hide_edge_borders smart
|
||||||
|
|
||||||
|
# Power
|
||||||
|
bindsym $mod+l exec xset s activate
|
||||||
|
bindsym $mod+p exec ~/.config/rofi/powermenu.sh &
|
||||||
|
exec --no-startup-id xss-lock -l ~/.config/xsecurelock/transfer-sleep-lock.sh &
|
||||||
|
|
||||||
|
# Wallpaper
|
||||||
|
exec feh --bg-scale --no-fehbg ~/Pictures/Wallpapers/tractor-blur.png
|
||||||
|
|
||||||
|
# Notify when toggling airplane mode
|
||||||
|
bindsym XF86RFKill exec --no-startup-id ~/.config/i3/airplane-mode-notify.sh
|
||||||
|
|
||||||
|
# compositor for transparency
|
||||||
|
exec --no-startup-id compton -b
|
||||||
|
|
||||||
|
# scratchpad-terminal
|
||||||
|
for_window [class="Gnome-terminal" title="^scratchpad-terminal$"] \
|
||||||
|
move scratchpad, \
|
||||||
|
sticky enable, \
|
||||||
|
scratchpad show, \
|
||||||
|
resize set 1600 900, \
|
||||||
|
border none, \
|
||||||
|
move position center
|
||||||
|
# show scratchpad-terminal or create one if none exists
|
||||||
|
bindsym $mod+comma exec ~/.config/i3/scratchpad-terminal.sh -s
|
||||||
|
# hide scratchpad-terminal indepedent of where the focus sits
|
||||||
|
bindsym $mod+Shift+comma exec ~/.config/i3/scratchpad-terminal.sh -h
|
||||||
|
|
||||||
|
bindsym $mod+Shift+m move scratchpad
|
||||||
|
bindsym $mod+Shift+s [class="^Spotify$"] scratchpad show
|
||||||
|
bindsym $mod+Shift+t [class="^TelegramDesktop$"] scratchpad show
|
||||||
|
|
||||||
|
# screenshots
|
||||||
|
bindsym --release Print exec gnome-screenshot -i
|
||||||
|
bindsym --release $mod+Print exec gnome-screenshot -a
|
||||||
|
|
||||||
|
# keyboard layout (de layout without dead keys and switched ESC and CAPS_LOCK)
|
||||||
|
exec setxkbmap own
|
||||||
|
|
||||||
|
# Restore GNOME's settings
|
||||||
|
exec --no-startup-id /usr/libexec/gnome-settings-daemon-localeexec
|
||||||
|
|
||||||
|
# Fix a bug in gnome-settings-daemon: http://feeding.cloud.geek.nz/posts/creating-a-modern-tiling-desktop-environment-using-i3/
|
||||||
|
exec --no-startup-id dconf write /org/gnome/settings-daemon/plugins/cursor/active false
|
||||||
|
|
||||||
|
# Launch gnome-keyring
|
||||||
|
exec --no-startup-id gnome-keyring-daemon
|
||||||
|
|
||||||
|
# Focus should not follow mouse
|
||||||
|
# This is sometimes usefull when picking colors on the screen in combination with deactivated dim
|
||||||
|
# focus_follows_mouse no
|
||||||
51
.config/i3/scratchpad-terminal.sh
Executable file
51
.config/i3/scratchpad-terminal.sh
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
exec >/dev/null
|
||||||
|
|
||||||
|
CLASS="Gnome-terminal"
|
||||||
|
NAME="scratchpad-terminal"
|
||||||
|
|
||||||
|
while getopts "hn:s" FLAGS; do
|
||||||
|
case "$FLAGS" in
|
||||||
|
h) HIDE=1;;
|
||||||
|
n) NAME="$OPTARG";;
|
||||||
|
s) SHOW=1;;
|
||||||
|
*) exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(($OPTIND - 1 ))
|
||||||
|
|
||||||
|
TREE="$(i3-msg -t get_tree)"
|
||||||
|
if ! (echo "$TREE" | grep -Po "\"name\":\"${NAME}\".*?floating\":\"[^\"]*\"" \
|
||||||
|
| grep -q '"floating":"user_on"')
|
||||||
|
then
|
||||||
|
EXIST_NOT=1
|
||||||
|
elif (echo "$TREE" | grep -Po '"focused":true.*?name":"[^"]*"' \
|
||||||
|
| grep -q "\"name\":\"${NAME}\"")
|
||||||
|
then
|
||||||
|
FOCUS_ON_PAD=1
|
||||||
|
elif [ ! $EXIST_NOT ] && (echo "$TREE" | grep -Po '"output":"__i3".*?"name":"[^"]*"' \
|
||||||
|
| grep -q "\"name\":\"${NAME}\"")
|
||||||
|
then
|
||||||
|
HIDDEN=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $HIDE ] && [ ! $EXIST_NOT ] && [ ! $HIDDEN ]; then
|
||||||
|
# There is a visible scratchpad-terminal that shall be hidden
|
||||||
|
i3-msg "[class=\"$CLASS\" title=\"^${NAME}$\"] scratchpad show"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $SHOW ]; then
|
||||||
|
if [ $EXIST_NOT ]; then
|
||||||
|
# terminal does not exist yet
|
||||||
|
gnome-terminal --window-with-profile="$NAME" --hide-menubar
|
||||||
|
elif [ $HIDDEN ]; then
|
||||||
|
# terminal is "hidden" in scratchpad
|
||||||
|
i3-msg "[class=\"$CLASS\" title=\"^${NAME}$\"] scratchpad show"
|
||||||
|
elif [ ! $FOCUS_ON_PAD ]; then
|
||||||
|
# terminal is visible but focus lays somewhere else
|
||||||
|
i3-msg "[class=\"$CLASS\" title=\"^${NAME}$\"] scratchpad show, scratchpad show"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
159
.config/polybar/config
Normal file
159
.config/polybar/config
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
; vi: ft=dosini
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
background = #202020
|
||||||
|
background-alt = #444
|
||||||
|
foreground = #fff
|
||||||
|
foreground-alt = #fff
|
||||||
|
primary = #fff
|
||||||
|
secondary = #fff
|
||||||
|
alert = #f00
|
||||||
|
|
||||||
|
[bar/main]
|
||||||
|
monitor = eDP1
|
||||||
|
bottom = false
|
||||||
|
fixed-center = true
|
||||||
|
width = 100%
|
||||||
|
height = 32
|
||||||
|
padding-left = 1
|
||||||
|
padding-right = 1
|
||||||
|
module-margin-left = 1
|
||||||
|
module-margin-right = 2
|
||||||
|
|
||||||
|
modules-left = i3 pulseaudio xbacklight
|
||||||
|
modules-center = datetime
|
||||||
|
modules-right = battery-custom vpn wlan powermenu
|
||||||
|
|
||||||
|
tray-position = right
|
||||||
|
tray-detached = false
|
||||||
|
tray-scale = 1.0
|
||||||
|
|
||||||
|
font-0 = MesloLGS NF:style=Regular:size=18;4
|
||||||
|
; used for the colume ramp
|
||||||
|
font-1 = MesloLGS NF:style=Regular:size=10;2
|
||||||
|
; used for the dots in module/powermenu
|
||||||
|
font-2 = MesloLGS NF:size=18;-2
|
||||||
|
; used for small space in scripts/battery.sh
|
||||||
|
font-3 = MesloLGS NF:size=8
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
line-size = 3
|
||||||
|
line-color = ${colors.primary}
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/i3]
|
||||||
|
type = internal/i3
|
||||||
|
format = <label-state> <label-mode>
|
||||||
|
index-sort = true
|
||||||
|
wrapping-scroll = false
|
||||||
|
|
||||||
|
; focused = Active workspace on focused monitor
|
||||||
|
label-focused = %index%
|
||||||
|
label-focused-background = ${colors.background-alt}
|
||||||
|
label-focused-underline= ${colors.primary}
|
||||||
|
label-focused-padding = 1
|
||||||
|
|
||||||
|
; unfocused = Inactive workspace on any monitor
|
||||||
|
label-unfocused = %index%
|
||||||
|
label-unfocused-padding = ${self.label-focused-padding}
|
||||||
|
|
||||||
|
; visible = Active workspace on unfocused monitor
|
||||||
|
label-visible = %index%
|
||||||
|
label-visible-underline = ${colors.secondary}
|
||||||
|
label-visible-padding = ${self.label-focused-padding}
|
||||||
|
|
||||||
|
; urgent = Workspace with urgency hint set
|
||||||
|
label-urgent = %index%
|
||||||
|
label-urgent-background = ${colors.alert}
|
||||||
|
label-urgent-padding = ${self.label-focused-padding}
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/pulseaudio]
|
||||||
|
type = internal/pulseaudio
|
||||||
|
|
||||||
|
format-volume = <label-volume> <bar-volume>
|
||||||
|
label-volume = VOL: %percentage%%
|
||||||
|
label-muted = VOL: muted
|
||||||
|
bar-volume-width = 10
|
||||||
|
bar-volume-empty = -
|
||||||
|
bar-volume-fill = -
|
||||||
|
bar-volume-indicator = |
|
||||||
|
|
||||||
|
;format-volume = <ramp-volume> <label-volume>
|
||||||
|
;format-volume-font = 2
|
||||||
|
;label-muted = muted
|
||||||
|
;
|
||||||
|
;ramp-volume-0 =
|
||||||
|
;ramp-volume-1 = █
|
||||||
|
;ramp-volume-2 = ██
|
||||||
|
;ramp-volume-3 = ███
|
||||||
|
;ramp-volume-4 = ████
|
||||||
|
;ramp-volume-5 = █████
|
||||||
|
;ramp-volume-6 = ██████
|
||||||
|
;ramp-volume-7 = ███████
|
||||||
|
;ramp-volume-8 = ████████
|
||||||
|
;ramp-volume-9 = █████████
|
||||||
|
;ramp-volume-10 = ██████████
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/xbacklight]
|
||||||
|
type = internal/xbacklight
|
||||||
|
format = <label> <bar>
|
||||||
|
label = BL: %percentage%%
|
||||||
|
bar-width = 10
|
||||||
|
bar-empty = -
|
||||||
|
bar-fill = -
|
||||||
|
bar-indicator = |
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
;#################################################
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/datetime]
|
||||||
|
type = internal/date
|
||||||
|
interval = 1
|
||||||
|
|
||||||
|
date = %Y-%m-%d%
|
||||||
|
time = "%H:%M:%S "
|
||||||
|
|
||||||
|
label = "%date% - %time%"
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
;#################################################
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/battery-custom]
|
||||||
|
type = custom/script
|
||||||
|
exec = ~/.config/polybar/scripts/battery.sh
|
||||||
|
interval = 5
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/vpn]
|
||||||
|
type = custom/script
|
||||||
|
exec = ~/.config/polybar/scripts/running-vpn.sh
|
||||||
|
click-left = ~/.config/polybar/scripts/pub-ipv4.sh &
|
||||||
|
interval = 5
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/wlan]
|
||||||
|
type = internal/network
|
||||||
|
interface = wlp58s0
|
||||||
|
interval = 3
|
||||||
|
|
||||||
|
format-connected = <label-connected>
|
||||||
|
label-connected = %{A1:gnome-terminal -x nmtui connect:} %essid:0:20:...%:%signal%% %{A}
|
||||||
|
|
||||||
|
fomat-disconnected = <label-disconnected>
|
||||||
|
label-disconnected = %{A1:gnome-terminal -x nmtui connect:} %ifname% disconnected %{A}
|
||||||
|
|
||||||
|
;#################################################
|
||||||
|
|
||||||
|
[module/powermenu]
|
||||||
|
type = custom/text
|
||||||
|
content = %{A1:~/.config/rofi/powermenu.sh &:}%{T3}...%{T-}%{A}
|
||||||
|
|
||||||
12
.config/polybar/launch.sh
Executable file
12
.config/polybar/launch.sh
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Terminate already running bar instances
|
||||||
|
killall -q polybar
|
||||||
|
|
||||||
|
# Wait until the processes have been shut down
|
||||||
|
while pgrep -x polybar >/dev/null; do sleep 1; done
|
||||||
|
|
||||||
|
# Launch Polybar
|
||||||
|
polybar -c "$HOME/.config/polybar/config" main &
|
||||||
|
|
||||||
|
echo "Polybar launched..."
|
||||||
27
.config/polybar/scripts/battery.sh
Executable file
27
.config/polybar/scripts/battery.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
## config
|
||||||
|
|
||||||
|
full=80
|
||||||
|
low=20
|
||||||
|
|
||||||
|
############################
|
||||||
|
|
||||||
|
red='%{F#f00}'
|
||||||
|
green='%{F#0f0}'
|
||||||
|
end='%{F-}'
|
||||||
|
# hack to put a little space between the lightning and the percentage
|
||||||
|
smallspace='%{T4} %{T-}'
|
||||||
|
|
||||||
|
bat="$(cat /sys/class/power_supply/BAT0/capacity)"
|
||||||
|
ac="$(cat /sys/class/power_supply/AC/online)"
|
||||||
|
|
||||||
|
# display in red when under $low and no charger is connected
|
||||||
|
[ "$bat" -gt "$low" ] || [ "$ac" -eq 1 ] || color="$red"
|
||||||
|
# display in green when over $full and a charger is connected
|
||||||
|
[ "$bat" -lt "$full" ] || [ "$ac" -eq 0 ] || color="$green"
|
||||||
|
|
||||||
|
prefix=" "
|
||||||
|
[ "$ac" -eq 0 ] || prefix="⚡"
|
||||||
|
|
||||||
|
echo "${color}${prefix}${smallspace}${bat}%"
|
||||||
3
.config/polybar/scripts/pub-ipv4.sh
Executable file
3
.config/polybar/scripts/pub-ipv4.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo $(curl -s https://ipinfo.io/ip)
|
||||||
13
.config/polybar/scripts/running-vpn.sh
Executable file
13
.config/polybar/scripts/running-vpn.sh
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
connection="$(nmcli con show --active | awk '$3 == "vpn" { print $1 }')"
|
||||||
|
if [ -n "$connection" ]; then
|
||||||
|
echo "VPN: $connection"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# [o] is a hack to not grep the grep-command
|
||||||
|
# see: https://stackoverflow.com/questions/9375711/more-elegant-ps-aux-grep-v-grep
|
||||||
|
! ps ax | grep -q "[o]penvpn" || echo -n "VPN"
|
||||||
|
|
||||||
|
echo
|
||||||
95
.config/rofi/config
Normal file
95
.config/rofi/config
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
// vi: ft=css
|
||||||
|
|
||||||
|
configuration {
|
||||||
|
modi: "window,drun";
|
||||||
|
matching: "glob";
|
||||||
|
drun-match-fields: "all";
|
||||||
|
/*display-drun: "Apps";*/
|
||||||
|
/*display-window: "Window";*/
|
||||||
|
show-icons: true;
|
||||||
|
|
||||||
|
// continous scrolling
|
||||||
|
scroll-method: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
lines: 5;
|
||||||
|
columns: 1;
|
||||||
|
background-color: #00000090;
|
||||||
|
// background-color: #00000065;
|
||||||
|
border-color: #00000000;
|
||||||
|
text-color: #EFEFEF;
|
||||||
|
font: "Hack 20";
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 30;
|
||||||
|
width: 40%;
|
||||||
|
height: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scrollbar {
|
||||||
|
handle-color: #00a0e6;
|
||||||
|
border-color: #00a0e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainbox {
|
||||||
|
background-color: #00000000;
|
||||||
|
children: [inputbar, listview];
|
||||||
|
spacing: 10px;
|
||||||
|
/*margin: 20%;*/
|
||||||
|
padding: 7px 0;
|
||||||
|
border: 1px;
|
||||||
|
border-color: @base0D;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#listview {
|
||||||
|
background-color: #00000000;
|
||||||
|
fixed-height: 0;
|
||||||
|
border: 0px;
|
||||||
|
spacing: 5px;
|
||||||
|
scrollbar: true;
|
||||||
|
padding: 10px 10px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element {
|
||||||
|
background-color: #00000000;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 15px;
|
||||||
|
padding: 3 0 3 4 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element selected {
|
||||||
|
background-color: #00a0e6;
|
||||||
|
text-color: #EFEFEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#inputbar {
|
||||||
|
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||||
|
background-color: #00000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#case-indicator {
|
||||||
|
background-color: #00000000;
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
#entry {
|
||||||
|
background-color: #00000000;
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
#prompt {
|
||||||
|
background-color: #00000000;
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#textbox-prompt-colon {
|
||||||
|
background-color: #00000000;
|
||||||
|
expand: false;
|
||||||
|
str: ":";
|
||||||
|
margin: 0px 0.3em 0em 0em ;
|
||||||
|
}
|
||||||
|
|
||||||
95
.config/rofi/config.rasi
Normal file
95
.config/rofi/config.rasi
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
// vi: ft=css
|
||||||
|
|
||||||
|
configuration {
|
||||||
|
modi: "window,drun";
|
||||||
|
matching: "glob";
|
||||||
|
drun-match-fields: "all";
|
||||||
|
/*display-drun: "Apps";*/
|
||||||
|
/*display-window: "Window";*/
|
||||||
|
show-icons: true;
|
||||||
|
|
||||||
|
// continous scrolling
|
||||||
|
scroll-method: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
lines: 5;
|
||||||
|
columns: 1;
|
||||||
|
background-color: #00000090;
|
||||||
|
// background-color: #00000065;
|
||||||
|
border-color: #00000000;
|
||||||
|
text-color: #EFEFEF;
|
||||||
|
font: "Hack 20";
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 30;
|
||||||
|
width: 40%;
|
||||||
|
height: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scrollbar {
|
||||||
|
handle-color: #00a0e6;
|
||||||
|
border-color: #00a0e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainbox {
|
||||||
|
background-color: #00000000;
|
||||||
|
children: [inputbar, listview];
|
||||||
|
spacing: 10px;
|
||||||
|
/*margin: 20%;*/
|
||||||
|
padding: 7px 0;
|
||||||
|
border: 1px;
|
||||||
|
border-color: @base0D;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#listview {
|
||||||
|
background-color: #00000000;
|
||||||
|
fixed-height: 0;
|
||||||
|
border: 0px;
|
||||||
|
spacing: 5px;
|
||||||
|
scrollbar: true;
|
||||||
|
padding: 10px 10px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element {
|
||||||
|
background-color: #00000000;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 15px;
|
||||||
|
padding: 3 0 3 4 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element selected {
|
||||||
|
background-color: #00a0e6;
|
||||||
|
text-color: #EFEFEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#inputbar {
|
||||||
|
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||||
|
background-color: #00000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#case-indicator {
|
||||||
|
background-color: #00000000;
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
#entry {
|
||||||
|
background-color: #00000000;
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
#prompt {
|
||||||
|
background-color: #00000000;
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#textbox-prompt-colon {
|
||||||
|
background-color: #00000000;
|
||||||
|
expand: false;
|
||||||
|
str: ":";
|
||||||
|
margin: 0px 0.3em 0em 0em ;
|
||||||
|
}
|
||||||
|
|
||||||
52
.config/rofi/powermenu.sh
Executable file
52
.config/rofi/powermenu.sh
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Inspired by https://github.com/cramermarius/rofi-menus/blob/master/scripts/powermenu.sh
|
||||||
|
|
||||||
|
# entries with associated commands
|
||||||
|
declare -A entries
|
||||||
|
entries=( [lock]="xset s activate"
|
||||||
|
[logout]="i3-msg exit"
|
||||||
|
[reboot]="systemctl reboot"
|
||||||
|
[shutdown]="systemctl poweroff"
|
||||||
|
[suspend]="systemctl suspend"
|
||||||
|
[suspend (scheduled)]="scheduled_suspend")
|
||||||
|
|
||||||
|
declare -a rofi_args
|
||||||
|
rofi_args=( -no-config
|
||||||
|
-theme /usr/share/rofi/themes/android_notification.rasi
|
||||||
|
-lines ${#entries[@]}
|
||||||
|
-width 12
|
||||||
|
-location 3
|
||||||
|
-yoffset 32
|
||||||
|
-dmenu
|
||||||
|
-no-case-sensitive
|
||||||
|
-p) # has to end with -p!
|
||||||
|
|
||||||
|
function scheduled_suspend {
|
||||||
|
declare -i min=0
|
||||||
|
min=$(rofi "${rofi_args[@]}" "minutes: ")
|
||||||
|
|
||||||
|
# make sure the input was a valid number
|
||||||
|
# side effect: 0 minutes is not possible
|
||||||
|
[ "$min" -ne 0 ] || exit 1
|
||||||
|
|
||||||
|
notify-send "suspend in" "$min minutes"
|
||||||
|
sleep $((min*60)) && systemctl suspend
|
||||||
|
}
|
||||||
|
|
||||||
|
# Choose option over rofi
|
||||||
|
# Note: bash does not keep the order of the keys thus they get sorted
|
||||||
|
chosen="$(printf '%s\n' "${!entries[@]}" | sort | rofi "${rofi_args[@]}" "power: ")"
|
||||||
|
# exit if nothing was selected
|
||||||
|
[ -n "$chosen" ] || exit 1
|
||||||
|
# handle scheduled suspend different
|
||||||
|
[ "$chosen" != "suspend (scheduled)" ] || { ${entries[$chosen]}; exit $?; }
|
||||||
|
|
||||||
|
# Confirm choice
|
||||||
|
yesNo="$(echo -e "yes\nno" | rofi "${rofi_args[@]}" "Are you sure you want to ${chosen}? ")"
|
||||||
|
|
||||||
|
# Exit if "No"
|
||||||
|
[ "$yesNo" == "yes" ] || exit 1
|
||||||
|
|
||||||
|
# Execute
|
||||||
|
${entries[$chosen]}
|
||||||
|
|
||||||
101
.config/rofi/rofi-wifi-menu.sh
Normal file
101
.config/rofi/rofi-wifi-menu.sh
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# from https://github.com/zbaylin/rofi-wifi-menu/blob/master/rofi-wifi-menu.sh
|
||||||
|
|
||||||
|
# Starts a scan of available broadcasting SSIDs
|
||||||
|
# nmcli dev wifi rescan
|
||||||
|
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
FIELDS=SSID,SECURITY
|
||||||
|
POSITION=0
|
||||||
|
YOFF=0
|
||||||
|
XOFF=0
|
||||||
|
FONT="DejaVu Sans Mono 8"
|
||||||
|
|
||||||
|
# if [ -r "$DIR/config" ]; then
|
||||||
|
# source "$DIR/config"
|
||||||
|
# elif [ -r "$HOME/.config/rofi/wifi" ]; then
|
||||||
|
# source "$HOME/.config/rofi/wifi"
|
||||||
|
# else
|
||||||
|
# echo "WARNING: config file not found! Using default values."
|
||||||
|
# fi
|
||||||
|
|
||||||
|
LIST=$(nmcli --fields "$FIELDS" device wifi list | sed '/^--/d')
|
||||||
|
# For some reason rofi always approximates character width 2 short... hmmm
|
||||||
|
RWIDTH=$(($(echo "$LIST" | head -n 1 | awk '{print length($0); }')+2))
|
||||||
|
# Dynamically change the height of the rofi menu
|
||||||
|
LINENUM=$(echo "$LIST" | wc -l)
|
||||||
|
# Gives a list of known connections so we can parse it later
|
||||||
|
KNOWNCON=$(nmcli connection show)
|
||||||
|
# Really janky way of telling if there is currently a connection
|
||||||
|
CONSTATE=$(nmcli -fields WIFI g)
|
||||||
|
|
||||||
|
CURRSSID=$(LANGUAGE=C nmcli -t -f active,ssid dev wifi | awk -F: '$1 ~ /^yes/ {print $2}')
|
||||||
|
|
||||||
|
if [[ ! -z $CURRSSID ]]; then
|
||||||
|
HIGHLINE=$(echo "$(echo "$LIST" | awk -F "[ ]{2,}" '{print $1}' | grep -Fxn -m 1 "$CURRSSID" | awk -F ":" '{print $1}') + 1" | bc )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# HOPEFULLY you won't need this as often as I do
|
||||||
|
# If there are more than 8 SSIDs, the menu will still only have 8 lines
|
||||||
|
if [ "$LINENUM" -gt 8 ] && [[ "$CONSTATE" =~ "enabled" ]]; then
|
||||||
|
LINENUM=8
|
||||||
|
elif [[ "$CONSTATE" =~ "disabled" ]]; then
|
||||||
|
LINENUM=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "$CONSTATE" =~ "enabled" ]]; then
|
||||||
|
TOGGLE="toggle off"
|
||||||
|
elif [[ "$CONSTATE" =~ "disabled" ]]; then
|
||||||
|
TOGGLE="toggle on"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CHENTRY=$(echo -e "$TOGGLE\nmanual\n$LIST" | uniq -u | rofi -dmenu -p "Wi-Fi SSID: " -lines "$LINENUM" -a "$HIGHLINE" -location "$POSITION" -yoffset "$YOFF" -xoffset "$XOFF" -font "$FONT" -width -"$RWIDTH")
|
||||||
|
#echo "$CHENTRY"
|
||||||
|
CHSSID=$(echo "$CHENTRY" | sed 's/\s\{2,\}/\|/g' | awk -F "|" '{print $1}')
|
||||||
|
#echo "$CHSSID"
|
||||||
|
|
||||||
|
# If the user inputs "manual" as their SSID in the start window, it will bring them to this screen
|
||||||
|
if [ "$CHENTRY" = "manual" ] ; then
|
||||||
|
# Manual entry of the SSID and password (if appplicable)
|
||||||
|
MSSID=$(echo "enter the SSID of the network (SSID,password)" | rofi -dmenu -p "Manual Entry: " -font "$FONT" -lines 1)
|
||||||
|
# Separating the password from the entered string
|
||||||
|
MPASS=$(echo "$MSSID" | awk -F "," '{print $2}')
|
||||||
|
|
||||||
|
#echo "$MSSID"
|
||||||
|
#echo "$MPASS"
|
||||||
|
|
||||||
|
# If the user entered a manual password, then use the password nmcli command
|
||||||
|
if [ "$MPASS" = "" ]; then
|
||||||
|
nmcli dev wifi con "$MSSID"
|
||||||
|
else
|
||||||
|
nmcli dev wifi con "$MSSID" password "$MPASS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif [ "$CHENTRY" = "toggle on" ]; then
|
||||||
|
nmcli radio wifi on
|
||||||
|
|
||||||
|
elif [ "$CHENTRY" = "toggle off" ]; then
|
||||||
|
nmcli radio wifi off
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
# If the connection is already in use, then this will still be able to get the SSID
|
||||||
|
if [ "$CHSSID" = "*" ]; then
|
||||||
|
CHSSID=$(echo "$CHENTRY" | sed 's/\s\{2,\}/\|/g' | awk -F "|" '{print $3}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parses the list of preconfigured connections to see if it already contains the chosen SSID. This speeds up the connection process
|
||||||
|
if [[ $(echo "$KNOWNCON" | grep "$CHSSID") = "$CHSSID" ]]; then
|
||||||
|
nmcli con up "$CHSSID"
|
||||||
|
else
|
||||||
|
if [[ "$CHENTRY" =~ "WPA2" ]] || [[ "$CHENTRY" =~ "WEP" ]]; then
|
||||||
|
WIFIPASS=$(echo "if connection is stored, hit enter" | rofi -dmenu -p "password: " -lines 1 -font "$FONT" )
|
||||||
|
fi
|
||||||
|
nmcli dev wifi con "$CHSSID" password "$WIFIPASS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
1
.config/tmux/plugins/tpm
Submodule
1
.config/tmux/plugins/tpm
Submodule
Submodule .config/tmux/plugins/tpm added at 06d41226af
62
.config/tmux/tmux.conf
Normal file
62
.config/tmux/tmux.conf
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
set -g default-terminal "tmux-256color"
|
||||||
|
set -g mouse on
|
||||||
|
|
||||||
|
# Set C-a as new prefix
|
||||||
|
unbind C-b
|
||||||
|
set-option -g prefix C-a
|
||||||
|
bind-key C-a send-prefix
|
||||||
|
|
||||||
|
# Split panes with > and <
|
||||||
|
unbind %
|
||||||
|
bind-key < split-window -v
|
||||||
|
unbind '"'
|
||||||
|
bind-key > split-window -h
|
||||||
|
|
||||||
|
# Change panes with Alt-<arrow>
|
||||||
|
bind -n M-Left select-pane -L
|
||||||
|
bind -n M-Right select-pane -R
|
||||||
|
bind -n M-Up select-pane -U
|
||||||
|
bind -n M-Down select-pane -D
|
||||||
|
|
||||||
|
# Resize panes with Alt-Shift-<arrow>
|
||||||
|
bind -n M-S-Left resize-pane -L
|
||||||
|
|
||||||
|
# Change installation location of plugins
|
||||||
|
set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.config/tmux/plugins/'
|
||||||
|
|
||||||
|
## Plugins
|
||||||
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-continuum'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||||
|
|
||||||
|
# Capture pane content
|
||||||
|
set -g @resurrect-capture-pane-contents 'on'
|
||||||
|
# Change keybindings
|
||||||
|
set -g @resurrect-save 'C-s'
|
||||||
|
set -g @resurrect-restore 'C-s'
|
||||||
|
# Save session every 5 min
|
||||||
|
set -g @continuum-save-interval '5'
|
||||||
|
# Last saved environment is automatically restored when tmux is started.
|
||||||
|
set -g @continuum-restore 'on'
|
||||||
|
|
||||||
|
## Theming (inspired by https://github.com/Who23/dots/blob/21976e76644d8d9261ebdcf61733d2181a1612eb/tmux.conf)
|
||||||
|
set -g status-bg black
|
||||||
|
set -g status-fg white
|
||||||
|
|
||||||
|
# set -g status-right "Continuum status: #{continuum_status}"
|
||||||
|
set -g @prefix_highlight_fg 'black'
|
||||||
|
set -g @prefix_highlight_bg 'yellow'
|
||||||
|
set -g @prefix_highlight_output_prefix ' '
|
||||||
|
set -g @prefix_highlight_output_suffix ' '
|
||||||
|
set -g status-right "#{prefix_highlight}"
|
||||||
|
set -g status-left "#{prefix_highlight}"
|
||||||
|
|
||||||
|
set -g status-justify centre
|
||||||
|
|
||||||
|
set -g window-status-current-format "#[fg=yellow]#[fg=black]#[bg=yellow]#I #W#[fg=yellow]#[bg=black] "
|
||||||
|
set -g window-status-format "#[fg=brightblack]#[fg=white]#[bg=brightblack]#I #W#[fg=brightblack]#[bg=black] "
|
||||||
|
|
||||||
|
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
||||||
|
run -b '~/.config/tmux/plugins/tpm/tpm'
|
||||||
28
.config/vim/autoload/onedark.vim
Normal file
28
.config/vim/autoload/onedark.vim
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
" [onedark.vim](https://github.com/joshdick/onedark.vim/)
|
||||||
|
|
||||||
|
let s:overrides = get(g:, "onedark_color_overrides", {})
|
||||||
|
|
||||||
|
let s:colors = {
|
||||||
|
\ "red": get(s:overrides, "red", { "gui": "#E06C75", "cterm": "204", "cterm16": "1" }),
|
||||||
|
\ "dark_red": get(s:overrides, "dark_red", { "gui": "#BE5046", "cterm": "196", "cterm16": "9" }),
|
||||||
|
\ "green": get(s:overrides, "green", { "gui": "#98C379", "cterm": "114", "cterm16": "2" }),
|
||||||
|
\ "yellow": get(s:overrides, "yellow", { "gui": "#E5C07B", "cterm": "180", "cterm16": "3" }),
|
||||||
|
\ "dark_yellow": get(s:overrides, "dark_yellow", { "gui": "#D19A66", "cterm": "173", "cterm16": "11" }),
|
||||||
|
\ "blue": get(s:overrides, "blue", { "gui": "#61AFEF", "cterm": "39", "cterm16": "4" }),
|
||||||
|
\ "purple": get(s:overrides, "purple", { "gui": "#C678DD", "cterm": "170", "cterm16": "5" }),
|
||||||
|
\ "cyan": get(s:overrides, "cyan", { "gui": "#56B6C2", "cterm": "38", "cterm16": "6" }),
|
||||||
|
\ "white": get(s:overrides, "white", { "gui": "#ABB2BF", "cterm": "145", "cterm16": "7" }),
|
||||||
|
\ "black": get(s:overrides, "black", { "gui": "#282C34", "cterm": "235", "cterm16": "0" }),
|
||||||
|
\ "visual_black": get(s:overrides, "visual_black", { "gui": "NONE", "cterm": "NONE", "cterm16": "0" }),
|
||||||
|
\ "comment_grey": get(s:overrides, "comment_grey", { "gui": "#5C6370", "cterm": "59", "cterm16": "15" }),
|
||||||
|
\ "gutter_fg_grey": get(s:overrides, "gutter_fg_grey", { "gui": "#4B5263", "cterm": "238", "cterm16": "15" }),
|
||||||
|
\ "cursor_grey": get(s:overrides, "cursor_grey", { "gui": "#2C323C", "cterm": "236", "cterm16": "8" }),
|
||||||
|
\ "visual_grey": get(s:overrides, "visual_grey", { "gui": "#3E4452", "cterm": "237", "cterm16": "15" }),
|
||||||
|
\ "menu_grey": get(s:overrides, "menu_grey", { "gui": "#3E4452", "cterm": "237", "cterm16": "8" }),
|
||||||
|
\ "special_grey": get(s:overrides, "special_grey", { "gui": "#3B4048", "cterm": "238", "cterm16": "15" }),
|
||||||
|
\ "vertsplit": get(s:overrides, "vertsplit", { "gui": "#181A1F", "cterm": "59", "cterm16": "15" }),
|
||||||
|
\}
|
||||||
|
|
||||||
|
function! onedark#GetColors()
|
||||||
|
return s:colors
|
||||||
|
endfunction
|
||||||
629
.config/vim/colors/onedark.vim
Normal file
629
.config/vim/colors/onedark.vim
Normal file
@@ -0,0 +1,629 @@
|
|||||||
|
" vim:fdm=marker
|
||||||
|
" Vim Color File
|
||||||
|
" Name: onedark.vim
|
||||||
|
" Maintainer: https://github.com/joshdick/onedark.vim/
|
||||||
|
" License: The MIT License (MIT)
|
||||||
|
" Based On: https://github.com/MaxSt/FlatColor/
|
||||||
|
|
||||||
|
" A companion [vim-airline](https://github.com/bling/vim-airline) theme is available at: https://github.com/joshdick/airline-onedark.vim
|
||||||
|
|
||||||
|
" Color Reference {{{
|
||||||
|
|
||||||
|
" The following colors were measured inside Atom using its built-in inspector.
|
||||||
|
|
||||||
|
" +---------------------------------------------+
|
||||||
|
" | Color Name | RGB | Hex |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Black | rgb(40, 44, 52) | #282c34 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | White | rgb(171, 178, 191) | #abb2bf |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Light Red | rgb(224, 108, 117) | #e06c75 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Dark Red | rgb(190, 80, 70) | #be5046 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Green | rgb(152, 195, 121) | #98c379 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Light Yellow | rgb(229, 192, 123) | #e5c07b |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Dark Yellow | rgb(209, 154, 102) | #d19a66 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Blue | rgb(97, 175, 239) | #61afef |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Magenta | rgb(198, 120, 221) | #c678dd |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Cyan | rgb(86, 182, 194) | #56b6c2 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Gutter Grey | rgb(76, 82, 99) | #4b5263 |
|
||||||
|
" |--------------+--------------------+---------|
|
||||||
|
" | Comment Grey | rgb(92, 99, 112) | #5c6370 |
|
||||||
|
" +---------------------------------------------+
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Initialization {{{
|
||||||
|
|
||||||
|
highlight clear
|
||||||
|
|
||||||
|
if exists("syntax_on")
|
||||||
|
syntax reset
|
||||||
|
endif
|
||||||
|
|
||||||
|
set t_Co=256
|
||||||
|
|
||||||
|
let g:colors_name="onedark"
|
||||||
|
|
||||||
|
" Set to "256" for 256-color terminals, or
|
||||||
|
" set to "16" to use your terminal emulator's native colors
|
||||||
|
" (a 16-color palette for this color scheme is available; see
|
||||||
|
" < https://github.com/joshdick/onedark.vim/blob/master/README.md >
|
||||||
|
" for more information.)
|
||||||
|
if !exists("g:onedark_termcolors")
|
||||||
|
let g:onedark_termcolors = 256
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Not all terminals support italics properly. If yours does, opt-in.
|
||||||
|
if !exists("g:onedark_terminal_italics")
|
||||||
|
let g:onedark_terminal_italics = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
" This function is based on one from FlatColor: https://github.com/MaxSt/FlatColor/
|
||||||
|
" Which in turn was based on one found in hemisu: https://github.com/noahfrederick/vim-hemisu/
|
||||||
|
let s:group_colors = {} " Cache of default highlight group settings, for later reference via `onedark#extend_highlight`
|
||||||
|
function! s:h(group, style, ...)
|
||||||
|
if (a:0 > 0) " Will be true if we got here from onedark#extend_highlight
|
||||||
|
let s:highlight = s:group_colors[a:group]
|
||||||
|
for style_type in ["fg", "bg", "sp"]
|
||||||
|
if (has_key(a:style, style_type))
|
||||||
|
let l:default_style = (has_key(s:highlight, style_type) ? s:highlight[style_type] : { "cterm16": "NONE", "cterm": "NONE", "gui": "NONE" })
|
||||||
|
let s:highlight[style_type] = extend(l:default_style, a:style[style_type])
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
if (has_key(a:style, "gui"))
|
||||||
|
let s:highlight.gui = a:style.gui
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let s:highlight = a:style
|
||||||
|
let s:group_colors[a:group] = s:highlight " Cache default highlight group settings
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:onedark_terminal_italics == 0
|
||||||
|
if has_key(s:highlight, "cterm") && s:highlight["cterm"] == "italic"
|
||||||
|
unlet s:highlight.cterm
|
||||||
|
endif
|
||||||
|
if has_key(s:highlight, "gui") && s:highlight["gui"] == "italic"
|
||||||
|
unlet s:highlight.gui
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:onedark_termcolors == 16
|
||||||
|
let l:ctermfg = (has_key(s:highlight, "fg") ? s:highlight.fg.cterm16 : "NONE")
|
||||||
|
let l:ctermbg = (has_key(s:highlight, "bg") ? s:highlight.bg.cterm16 : "NONE")
|
||||||
|
else
|
||||||
|
let l:ctermfg = (has_key(s:highlight, "fg") ? s:highlight.fg.cterm : "NONE")
|
||||||
|
let l:ctermbg = (has_key(s:highlight, "bg") ? s:highlight.bg.cterm : "NONE")
|
||||||
|
endif
|
||||||
|
|
||||||
|
execute "highlight" a:group
|
||||||
|
\ "guifg=" (has_key(s:highlight, "fg") ? s:highlight.fg.gui : "NONE")
|
||||||
|
\ "guibg=" (has_key(s:highlight, "bg") ? s:highlight.bg.gui : "NONE")
|
||||||
|
\ "guisp=" (has_key(s:highlight, "sp") ? s:highlight.sp.gui : "NONE")
|
||||||
|
\ "gui=" (has_key(s:highlight, "gui") ? s:highlight.gui : "NONE")
|
||||||
|
\ "ctermfg=" . l:ctermfg
|
||||||
|
\ "ctermbg=" . l:ctermbg
|
||||||
|
\ "cterm=" (has_key(s:highlight, "cterm") ? s:highlight.cterm : "NONE")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" public {{{
|
||||||
|
|
||||||
|
function! onedark#set_highlight(group, style)
|
||||||
|
call s:h(a:group, a:style)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! onedark#extend_highlight(group, style)
|
||||||
|
call s:h(a:group, a:style, 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Color Variables {{{
|
||||||
|
|
||||||
|
let s:colors = onedark#GetColors()
|
||||||
|
|
||||||
|
let s:red = s:colors.red
|
||||||
|
let s:dark_red = s:colors.dark_red
|
||||||
|
let s:green = s:colors.green
|
||||||
|
let s:yellow = s:colors.yellow
|
||||||
|
let s:dark_yellow = s:colors.dark_yellow
|
||||||
|
let s:blue = s:colors.blue
|
||||||
|
let s:purple = s:colors.purple
|
||||||
|
let s:cyan = s:colors.cyan
|
||||||
|
let s:white = s:colors.white
|
||||||
|
let s:black = s:colors.black
|
||||||
|
let s:visual_black = s:colors.visual_black " Black out selected text in 16-color visual mode
|
||||||
|
let s:comment_grey = s:colors.comment_grey
|
||||||
|
let s:gutter_fg_grey = s:colors.gutter_fg_grey
|
||||||
|
let s:cursor_grey = s:colors.cursor_grey
|
||||||
|
let s:visual_grey = s:colors.visual_grey
|
||||||
|
let s:menu_grey = s:colors.menu_grey
|
||||||
|
let s:special_grey = s:colors.special_grey
|
||||||
|
let s:vertsplit = s:colors.vertsplit
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Terminal Colors {{{
|
||||||
|
|
||||||
|
let g:terminal_ansi_colors = [
|
||||||
|
\ s:black.gui, s:red.gui, s:green.gui, s:yellow.gui,
|
||||||
|
\ s:blue.gui, s:purple.gui, s:cyan.gui, s:white.gui,
|
||||||
|
\ s:visual_grey.gui, s:dark_red.gui, s:green.gui, s:dark_yellow.gui,
|
||||||
|
\ s:blue.gui, s:purple.gui, s:cyan.gui, s:comment_grey.gui
|
||||||
|
\]
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Syntax Groups (descriptions and ordering from `:h w18`) {{{
|
||||||
|
|
||||||
|
call s:h("Comment", { "fg": s:comment_grey, "gui": "italic", "cterm": "italic" }) " any comment
|
||||||
|
call s:h("Constant", { "fg": s:cyan }) " any constant
|
||||||
|
call s:h("String", { "fg": s:green }) " a string constant: "this is a string"
|
||||||
|
call s:h("Character", { "fg": s:green }) " a character constant: 'c', '\n'
|
||||||
|
call s:h("Number", { "fg": s:dark_yellow }) " a number constant: 234, 0xff
|
||||||
|
call s:h("Boolean", { "fg": s:dark_yellow }) " a boolean constant: TRUE, false
|
||||||
|
call s:h("Float", { "fg": s:dark_yellow }) " a floating point constant: 2.3e10
|
||||||
|
call s:h("Identifier", { "fg": s:red }) " any variable name
|
||||||
|
call s:h("Function", { "fg": s:blue }) " function name (also: methods for classes)
|
||||||
|
call s:h("Statement", { "fg": s:purple }) " any statement
|
||||||
|
call s:h("Conditional", { "fg": s:purple }) " if, then, else, endif, switch, etc.
|
||||||
|
call s:h("Repeat", { "fg": s:purple }) " for, do, while, etc.
|
||||||
|
call s:h("Label", { "fg": s:purple }) " case, default, etc.
|
||||||
|
call s:h("Operator", { "fg": s:purple }) " sizeof", "+", "*", etc.
|
||||||
|
call s:h("Keyword", { "fg": s:red }) " any other keyword
|
||||||
|
call s:h("Exception", { "fg": s:purple }) " try, catch, throw
|
||||||
|
call s:h("PreProc", { "fg": s:yellow }) " generic Preprocessor
|
||||||
|
call s:h("Include", { "fg": s:blue }) " preprocessor #include
|
||||||
|
call s:h("Define", { "fg": s:purple }) " preprocessor #define
|
||||||
|
call s:h("Macro", { "fg": s:purple }) " same as Define
|
||||||
|
call s:h("PreCondit", { "fg": s:yellow }) " preprocessor #if, #else, #endif, etc.
|
||||||
|
call s:h("Type", { "fg": s:yellow }) " int, long, char, etc.
|
||||||
|
call s:h("StorageClass", { "fg": s:yellow }) " static, register, volatile, etc.
|
||||||
|
call s:h("Structure", { "fg": s:yellow }) " struct, union, enum, etc.
|
||||||
|
call s:h("Typedef", { "fg": s:yellow }) " A typedef
|
||||||
|
call s:h("Special", { "fg": s:blue }) " any special symbol
|
||||||
|
call s:h("SpecialChar", {}) " special character in a constant
|
||||||
|
call s:h("Tag", {}) " you can use CTRL-] on this
|
||||||
|
call s:h("Delimiter", {}) " character that needs attention
|
||||||
|
call s:h("SpecialComment", { "fg": s:comment_grey }) " special things inside a comment
|
||||||
|
call s:h("Debug", {}) " debugging statements
|
||||||
|
call s:h("Underlined", { "gui": "underline", "cterm": "underline" }) " text that stands out, HTML links
|
||||||
|
call s:h("Ignore", {}) " left blank, hidden
|
||||||
|
call s:h("Error", { "fg": s:red }) " any erroneous construct
|
||||||
|
call s:h("Todo", { "fg": s:purple }) " anything that needs extra attention; mostly the keywords TODO FIXME and XXX
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Highlighting Groups (descriptions and ordering from `:h highlight-groups`) {{{
|
||||||
|
call s:h("ColorColumn", { "bg": s:cursor_grey }) " used for the columns set with 'colorcolumn'
|
||||||
|
call s:h("Conceal", {}) " placeholder characters substituted for concealed text (see 'conceallevel')
|
||||||
|
call s:h("Cursor", { "fg": s:black, "bg": s:blue }) " the character under the cursor
|
||||||
|
call s:h("CursorIM", {}) " like Cursor, but used when in IME mode
|
||||||
|
call s:h("CursorColumn", { "bg": s:cursor_grey }) " the screen column that the cursor is in when 'cursorcolumn' is set
|
||||||
|
if &diff
|
||||||
|
" Don't change the background color in diff mode
|
||||||
|
call s:h("CursorLine", { "gui": "underline" }) " the screen line that the cursor is in when 'cursorline' is set
|
||||||
|
else
|
||||||
|
call s:h("CursorLine", { "bg": s:cursor_grey }) " the screen line that the cursor is in when 'cursorline' is set
|
||||||
|
endif
|
||||||
|
call s:h("Directory", { "fg": s:blue }) " directory names (and other special names in listings)
|
||||||
|
call s:h("DiffAdd", { "bg": s:green, "fg": s:black }) " diff mode: Added line
|
||||||
|
call s:h("DiffChange", { "fg": s:yellow, "gui": "underline", "cterm": "underline" }) " diff mode: Changed line
|
||||||
|
call s:h("DiffDelete", { "bg": s:red, "fg": s:black }) " diff mode: Deleted line
|
||||||
|
call s:h("DiffText", { "bg": s:yellow, "fg": s:black }) " diff mode: Changed text within a changed line
|
||||||
|
if get(g:, 'onedark_hide_endofbuffer', 0)
|
||||||
|
" If enabled, will style end-of-buffer filler lines (~) to appear to be hidden.
|
||||||
|
call s:h("EndOfBuffer", { "fg": s:black }) " filler lines (~) after the last line in the buffer
|
||||||
|
endif
|
||||||
|
call s:h("ErrorMsg", { "fg": s:red }) " error messages on the command line
|
||||||
|
call s:h("VertSplit", { "fg": s:vertsplit }) " the column separating vertically split windows
|
||||||
|
call s:h("Folded", { "fg": s:comment_grey }) " line used for closed folds
|
||||||
|
call s:h("FoldColumn", {}) " 'foldcolumn'
|
||||||
|
call s:h("SignColumn", {}) " column where signs are displayed
|
||||||
|
call s:h("IncSearch", { "fg": s:yellow, "bg": s:comment_grey }) " 'incsearch' highlighting; also used for the text replaced with ":s///c"
|
||||||
|
call s:h("LineNr", { "fg": s:gutter_fg_grey }) " Line number for ":number" and ":#" commands, and when 'number' or 'relativenumber' option is set.
|
||||||
|
call s:h("CursorLineNr", {}) " Like LineNr when 'cursorline' or 'relativenumber' is set for the cursor line.
|
||||||
|
call s:h("MatchParen", { "fg": s:blue, "gui": "underline" }) " The character under the cursor or just before it, if it is a paired bracket, and its match.
|
||||||
|
call s:h("ModeMsg", {}) " 'showmode' message (e.g., "-- INSERT --")
|
||||||
|
call s:h("MoreMsg", {}) " more-prompt
|
||||||
|
call s:h("NonText", { "fg": s:special_grey }) " '~' and '@' at the end of the window, characters from 'showbreak' and other characters that do not really exist in the text (e.g., ">" displayed when a double-wide character doesn't fit at the end of the line).
|
||||||
|
call s:h("Normal", { "fg": s:white, "bg": s:black }) " normal text
|
||||||
|
call s:h("Pmenu", { "bg": s:menu_grey }) " Popup menu: normal item.
|
||||||
|
call s:h("PmenuSel", { "fg": s:black, "bg": s:blue }) " Popup menu: selected item.
|
||||||
|
call s:h("PmenuSbar", { "bg": s:special_grey }) " Popup menu: scrollbar.
|
||||||
|
call s:h("PmenuThumb", { "bg": s:white }) " Popup menu: Thumb of the scrollbar.
|
||||||
|
call s:h("Question", { "fg": s:purple }) " hit-enter prompt and yes/no questions
|
||||||
|
call s:h("QuickFixLine", { "fg": s:black, "bg": s:yellow }) " Current quickfix item in the quickfix window.
|
||||||
|
call s:h("Search", { "fg": s:black, "bg": s:yellow }) " Last search pattern highlighting (see 'hlsearch'). Also used for similar items that need to stand out.
|
||||||
|
call s:h("SpecialKey", { "fg": s:special_grey }) " Meta and special keys listed with ":map", also for text used to show unprintable characters in the text, 'listchars'. Generally: text that is displayed differently from what it really is.
|
||||||
|
call s:h("SpellBad", { "fg": s:red, "gui": "underline", "cterm": "underline" }) " Word that is not recognized by the spellchecker. This will be combined with the highlighting used otherwise.
|
||||||
|
call s:h("SpellCap", { "fg": s:dark_yellow }) " Word that should start with a capital. This will be combined with the highlighting used otherwise.
|
||||||
|
call s:h("SpellLocal", { "fg": s:dark_yellow }) " Word that is recognized by the spellchecker as one that is used in another region. This will be combined with the highlighting used otherwise.
|
||||||
|
call s:h("SpellRare", { "fg": s:dark_yellow }) " Word that is recognized by the spellchecker as one that is hardly ever used. spell This will be combined with the highlighting used otherwise.
|
||||||
|
call s:h("StatusLine", { "fg": s:white, "bg": s:cursor_grey }) " status line of current window
|
||||||
|
call s:h("StatusLineNC", { "fg": s:comment_grey }) " status lines of not-current windows Note: if this is equal to "StatusLine" Vim will use "^^^" in the status line of the current window.
|
||||||
|
call s:h("StatusLineTerm", { "fg": s:white, "bg": s:cursor_grey }) " status line of current :terminal window
|
||||||
|
call s:h("StatusLineTermNC", { "fg": s:comment_grey }) " status line of non-current :terminal window
|
||||||
|
call s:h("TabLine", { "fg": s:comment_grey }) " tab pages line, not active tab page label
|
||||||
|
call s:h("TabLineFill", {}) " tab pages line, where there are no labels
|
||||||
|
call s:h("TabLineSel", { "fg": s:white }) " tab pages line, active tab page label
|
||||||
|
call s:h("Terminal", { "fg": s:white, "bg": s:black }) " terminal window (see terminal-size-color)
|
||||||
|
call s:h("Title", { "fg": s:green }) " titles for output from ":set all", ":autocmd" etc.
|
||||||
|
call s:h("Visual", { "fg": s:visual_black, "bg": s:visual_grey }) " Visual mode selection
|
||||||
|
call s:h("VisualNOS", { "bg": s:visual_grey }) " Visual mode selection when vim is "Not Owning the Selection". Only X11 Gui's gui-x11 and xterm-clipboard supports this.
|
||||||
|
call s:h("WarningMsg", { "fg": s:yellow }) " warning messages
|
||||||
|
call s:h("WildMenu", { "fg": s:black, "bg": s:blue }) " current match in 'wildmenu' completion
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Termdebug highlighting for Vim 8.1+ {{{
|
||||||
|
|
||||||
|
" See `:h hl-debugPC` and `:h hl-debugBreakpoint`.
|
||||||
|
call s:h("debugPC", { "bg": s:special_grey }) " the current position
|
||||||
|
call s:h("debugBreakpoint", { "fg": s:black, "bg": s:red }) " a breakpoint
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Language-Specific Highlighting {{{
|
||||||
|
|
||||||
|
" CSS
|
||||||
|
call s:h("cssAttrComma", { "fg": s:purple })
|
||||||
|
call s:h("cssAttributeSelector", { "fg": s:green })
|
||||||
|
call s:h("cssBraces", { "fg": s:white })
|
||||||
|
call s:h("cssClassName", { "fg": s:dark_yellow })
|
||||||
|
call s:h("cssClassNameDot", { "fg": s:dark_yellow })
|
||||||
|
call s:h("cssDefinition", { "fg": s:purple })
|
||||||
|
call s:h("cssFontAttr", { "fg": s:dark_yellow })
|
||||||
|
call s:h("cssFontDescriptor", { "fg": s:purple })
|
||||||
|
call s:h("cssFunctionName", { "fg": s:blue })
|
||||||
|
call s:h("cssIdentifier", { "fg": s:blue })
|
||||||
|
call s:h("cssImportant", { "fg": s:purple })
|
||||||
|
call s:h("cssInclude", { "fg": s:white })
|
||||||
|
call s:h("cssIncludeKeyword", { "fg": s:purple })
|
||||||
|
call s:h("cssMediaType", { "fg": s:dark_yellow })
|
||||||
|
call s:h("cssProp", { "fg": s:white })
|
||||||
|
call s:h("cssPseudoClassId", { "fg": s:dark_yellow })
|
||||||
|
call s:h("cssSelectorOp", { "fg": s:purple })
|
||||||
|
call s:h("cssSelectorOp2", { "fg": s:purple })
|
||||||
|
call s:h("cssTagName", { "fg": s:red })
|
||||||
|
|
||||||
|
" Fish Shell
|
||||||
|
call s:h("fishKeyword", { "fg": s:purple })
|
||||||
|
call s:h("fishConditional", { "fg": s:purple })
|
||||||
|
|
||||||
|
" Go
|
||||||
|
call s:h("goDeclaration", { "fg": s:purple })
|
||||||
|
call s:h("goBuiltins", { "fg": s:cyan })
|
||||||
|
call s:h("goFunctionCall", { "fg": s:blue })
|
||||||
|
call s:h("goVarDefs", { "fg": s:red })
|
||||||
|
call s:h("goVarAssign", { "fg": s:red })
|
||||||
|
call s:h("goVar", { "fg": s:purple })
|
||||||
|
call s:h("goConst", { "fg": s:purple })
|
||||||
|
call s:h("goType", { "fg": s:yellow })
|
||||||
|
call s:h("goTypeName", { "fg": s:yellow })
|
||||||
|
call s:h("goDeclType", { "fg": s:cyan })
|
||||||
|
call s:h("goTypeDecl", { "fg": s:purple })
|
||||||
|
|
||||||
|
" HTML (keep consistent with Markdown, below)
|
||||||
|
call s:h("htmlArg", { "fg": s:dark_yellow })
|
||||||
|
call s:h("htmlBold", { "fg": s:dark_yellow, "gui": "bold", "cterm": "bold" })
|
||||||
|
call s:h("htmlEndTag", { "fg": s:white })
|
||||||
|
call s:h("htmlH1", { "fg": s:red })
|
||||||
|
call s:h("htmlH2", { "fg": s:red })
|
||||||
|
call s:h("htmlH3", { "fg": s:red })
|
||||||
|
call s:h("htmlH4", { "fg": s:red })
|
||||||
|
call s:h("htmlH5", { "fg": s:red })
|
||||||
|
call s:h("htmlH6", { "fg": s:red })
|
||||||
|
call s:h("htmlItalic", { "fg": s:purple, "gui": "italic", "cterm": "italic" })
|
||||||
|
call s:h("htmlLink", { "fg": s:cyan, "gui": "underline", "cterm": "underline" })
|
||||||
|
call s:h("htmlSpecialChar", { "fg": s:dark_yellow })
|
||||||
|
call s:h("htmlSpecialTagName", { "fg": s:red })
|
||||||
|
call s:h("htmlTag", { "fg": s:white })
|
||||||
|
call s:h("htmlTagN", { "fg": s:red })
|
||||||
|
call s:h("htmlTagName", { "fg": s:red })
|
||||||
|
call s:h("htmlTitle", { "fg": s:white })
|
||||||
|
|
||||||
|
" JavaScript
|
||||||
|
call s:h("javaScriptBraces", { "fg": s:white })
|
||||||
|
call s:h("javaScriptFunction", { "fg": s:purple })
|
||||||
|
call s:h("javaScriptIdentifier", { "fg": s:purple })
|
||||||
|
call s:h("javaScriptNull", { "fg": s:dark_yellow })
|
||||||
|
call s:h("javaScriptNumber", { "fg": s:dark_yellow })
|
||||||
|
call s:h("javaScriptRequire", { "fg": s:cyan })
|
||||||
|
call s:h("javaScriptReserved", { "fg": s:purple })
|
||||||
|
" https://github.com/pangloss/vim-javascript
|
||||||
|
call s:h("jsArrowFunction", { "fg": s:purple })
|
||||||
|
call s:h("jsClassKeyword", { "fg": s:purple })
|
||||||
|
call s:h("jsClassMethodType", { "fg": s:purple })
|
||||||
|
call s:h("jsDocParam", { "fg": s:blue })
|
||||||
|
call s:h("jsDocTags", { "fg": s:purple })
|
||||||
|
call s:h("jsExport", { "fg": s:purple })
|
||||||
|
call s:h("jsExportDefault", { "fg": s:purple })
|
||||||
|
call s:h("jsExtendsKeyword", { "fg": s:purple })
|
||||||
|
call s:h("jsFrom", { "fg": s:purple })
|
||||||
|
call s:h("jsFuncCall", { "fg": s:blue })
|
||||||
|
call s:h("jsFunction", { "fg": s:purple })
|
||||||
|
call s:h("jsGenerator", { "fg": s:yellow })
|
||||||
|
call s:h("jsGlobalObjects", { "fg": s:yellow })
|
||||||
|
call s:h("jsImport", { "fg": s:purple })
|
||||||
|
call s:h("jsModuleAs", { "fg": s:purple })
|
||||||
|
call s:h("jsModuleWords", { "fg": s:purple })
|
||||||
|
call s:h("jsModules", { "fg": s:purple })
|
||||||
|
call s:h("jsNull", { "fg": s:dark_yellow })
|
||||||
|
call s:h("jsOperator", { "fg": s:purple })
|
||||||
|
call s:h("jsStorageClass", { "fg": s:purple })
|
||||||
|
call s:h("jsSuper", { "fg": s:red })
|
||||||
|
call s:h("jsTemplateBraces", { "fg": s:dark_red })
|
||||||
|
call s:h("jsTemplateVar", { "fg": s:green })
|
||||||
|
call s:h("jsThis", { "fg": s:red })
|
||||||
|
call s:h("jsUndefined", { "fg": s:dark_yellow })
|
||||||
|
" https://github.com/othree/yajs.vim
|
||||||
|
call s:h("javascriptArrowFunc", { "fg": s:purple })
|
||||||
|
call s:h("javascriptClassExtends", { "fg": s:purple })
|
||||||
|
call s:h("javascriptClassKeyword", { "fg": s:purple })
|
||||||
|
call s:h("javascriptDocNotation", { "fg": s:purple })
|
||||||
|
call s:h("javascriptDocParamName", { "fg": s:blue })
|
||||||
|
call s:h("javascriptDocTags", { "fg": s:purple })
|
||||||
|
call s:h("javascriptEndColons", { "fg": s:white })
|
||||||
|
call s:h("javascriptExport", { "fg": s:purple })
|
||||||
|
call s:h("javascriptFuncArg", { "fg": s:white })
|
||||||
|
call s:h("javascriptFuncKeyword", { "fg": s:purple })
|
||||||
|
call s:h("javascriptIdentifier", { "fg": s:red })
|
||||||
|
call s:h("javascriptImport", { "fg": s:purple })
|
||||||
|
call s:h("javascriptMethodName", { "fg": s:white })
|
||||||
|
call s:h("javascriptObjectLabel", { "fg": s:white })
|
||||||
|
call s:h("javascriptOpSymbol", { "fg": s:cyan })
|
||||||
|
call s:h("javascriptOpSymbols", { "fg": s:cyan })
|
||||||
|
call s:h("javascriptPropertyName", { "fg": s:green })
|
||||||
|
call s:h("javascriptTemplateSB", { "fg": s:dark_red })
|
||||||
|
call s:h("javascriptVariable", { "fg": s:purple })
|
||||||
|
|
||||||
|
" JSON
|
||||||
|
call s:h("jsonCommentError", { "fg": s:white })
|
||||||
|
call s:h("jsonKeyword", { "fg": s:red })
|
||||||
|
call s:h("jsonBoolean", { "fg": s:dark_yellow })
|
||||||
|
call s:h("jsonNumber", { "fg": s:dark_yellow })
|
||||||
|
call s:h("jsonQuote", { "fg": s:white })
|
||||||
|
call s:h("jsonMissingCommaError", { "fg": s:red, "gui": "reverse" })
|
||||||
|
call s:h("jsonNoQuotesError", { "fg": s:red, "gui": "reverse" })
|
||||||
|
call s:h("jsonNumError", { "fg": s:red, "gui": "reverse" })
|
||||||
|
call s:h("jsonString", { "fg": s:green })
|
||||||
|
call s:h("jsonStringSQError", { "fg": s:red, "gui": "reverse" })
|
||||||
|
call s:h("jsonSemicolonError", { "fg": s:red, "gui": "reverse" })
|
||||||
|
|
||||||
|
" LESS
|
||||||
|
call s:h("lessVariable", { "fg": s:purple })
|
||||||
|
call s:h("lessAmpersandChar", { "fg": s:white })
|
||||||
|
call s:h("lessClass", { "fg": s:dark_yellow })
|
||||||
|
|
||||||
|
" Markdown (keep consistent with HTML, above)
|
||||||
|
call s:h("markdownBlockquote", { "fg": s:comment_grey })
|
||||||
|
call s:h("markdownBold", { "fg": s:dark_yellow, "gui": "bold", "cterm": "bold" })
|
||||||
|
call s:h("markdownCode", { "fg": s:green })
|
||||||
|
call s:h("markdownCodeBlock", { "fg": s:green })
|
||||||
|
call s:h("markdownCodeDelimiter", { "fg": s:green })
|
||||||
|
call s:h("markdownH1", { "fg": s:red })
|
||||||
|
call s:h("markdownH2", { "fg": s:red })
|
||||||
|
call s:h("markdownH3", { "fg": s:red })
|
||||||
|
call s:h("markdownH4", { "fg": s:red })
|
||||||
|
call s:h("markdownH5", { "fg": s:red })
|
||||||
|
call s:h("markdownH6", { "fg": s:red })
|
||||||
|
call s:h("markdownHeadingDelimiter", { "fg": s:red })
|
||||||
|
call s:h("markdownHeadingRule", { "fg": s:comment_grey })
|
||||||
|
call s:h("markdownId", { "fg": s:purple })
|
||||||
|
call s:h("markdownIdDeclaration", { "fg": s:blue })
|
||||||
|
call s:h("markdownIdDelimiter", { "fg": s:purple })
|
||||||
|
call s:h("markdownItalic", { "fg": s:purple, "gui": "italic", "cterm": "italic" })
|
||||||
|
call s:h("markdownLinkDelimiter", { "fg": s:purple })
|
||||||
|
call s:h("markdownLinkText", { "fg": s:blue })
|
||||||
|
call s:h("markdownListMarker", { "fg": s:red })
|
||||||
|
call s:h("markdownOrderedListMarker", { "fg": s:red })
|
||||||
|
call s:h("markdownRule", { "fg": s:comment_grey })
|
||||||
|
call s:h("markdownUrl", { "fg": s:cyan, "gui": "underline", "cterm": "underline" })
|
||||||
|
|
||||||
|
" Perl
|
||||||
|
call s:h("perlFiledescRead", { "fg": s:green })
|
||||||
|
call s:h("perlFunction", { "fg": s:purple })
|
||||||
|
call s:h("perlMatchStartEnd",{ "fg": s:blue })
|
||||||
|
call s:h("perlMethod", { "fg": s:purple })
|
||||||
|
call s:h("perlPOD", { "fg": s:comment_grey })
|
||||||
|
call s:h("perlSharpBang", { "fg": s:comment_grey })
|
||||||
|
call s:h("perlSpecialString",{ "fg": s:cyan })
|
||||||
|
call s:h("perlStatementFiledesc", { "fg": s:red })
|
||||||
|
call s:h("perlStatementFlow",{ "fg": s:red })
|
||||||
|
call s:h("perlStatementInclude", { "fg": s:purple })
|
||||||
|
call s:h("perlStatementScalar",{ "fg": s:purple })
|
||||||
|
call s:h("perlStatementStorage", { "fg": s:purple })
|
||||||
|
call s:h("perlSubName",{ "fg": s:yellow })
|
||||||
|
call s:h("perlVarPlain",{ "fg": s:blue })
|
||||||
|
|
||||||
|
" PHP
|
||||||
|
call s:h("phpVarSelector", { "fg": s:red })
|
||||||
|
call s:h("phpOperator", { "fg": s:white })
|
||||||
|
call s:h("phpParent", { "fg": s:white })
|
||||||
|
call s:h("phpMemberSelector", { "fg": s:white })
|
||||||
|
call s:h("phpType", { "fg": s:purple })
|
||||||
|
call s:h("phpKeyword", { "fg": s:purple })
|
||||||
|
call s:h("phpClass", { "fg": s:yellow })
|
||||||
|
call s:h("phpUseClass", { "fg": s:white })
|
||||||
|
call s:h("phpUseAlias", { "fg": s:white })
|
||||||
|
call s:h("phpInclude", { "fg": s:purple })
|
||||||
|
call s:h("phpClassExtends", { "fg": s:green })
|
||||||
|
call s:h("phpDocTags", { "fg": s:white })
|
||||||
|
call s:h("phpFunction", { "fg": s:blue })
|
||||||
|
call s:h("phpFunctions", { "fg": s:cyan })
|
||||||
|
call s:h("phpMethodsVar", { "fg": s:dark_yellow })
|
||||||
|
call s:h("phpMagicConstants", { "fg": s:dark_yellow })
|
||||||
|
call s:h("phpSuperglobals", { "fg": s:red })
|
||||||
|
call s:h("phpConstants", { "fg": s:dark_yellow })
|
||||||
|
|
||||||
|
" Ruby
|
||||||
|
call s:h("rubyBlockParameter", { "fg": s:red})
|
||||||
|
call s:h("rubyBlockParameterList", { "fg": s:red })
|
||||||
|
call s:h("rubyClass", { "fg": s:purple})
|
||||||
|
call s:h("rubyConstant", { "fg": s:yellow})
|
||||||
|
call s:h("rubyControl", { "fg": s:purple })
|
||||||
|
call s:h("rubyEscape", { "fg": s:red})
|
||||||
|
call s:h("rubyFunction", { "fg": s:blue})
|
||||||
|
call s:h("rubyGlobalVariable", { "fg": s:red})
|
||||||
|
call s:h("rubyInclude", { "fg": s:blue})
|
||||||
|
call s:h("rubyIncluderubyGlobalVariable", { "fg": s:red})
|
||||||
|
call s:h("rubyInstanceVariable", { "fg": s:red})
|
||||||
|
call s:h("rubyInterpolation", { "fg": s:cyan })
|
||||||
|
call s:h("rubyInterpolationDelimiter", { "fg": s:red })
|
||||||
|
call s:h("rubyInterpolationDelimiter", { "fg": s:red})
|
||||||
|
call s:h("rubyRegexp", { "fg": s:cyan})
|
||||||
|
call s:h("rubyRegexpDelimiter", { "fg": s:cyan})
|
||||||
|
call s:h("rubyStringDelimiter", { "fg": s:green})
|
||||||
|
call s:h("rubySymbol", { "fg": s:cyan})
|
||||||
|
|
||||||
|
" Sass
|
||||||
|
" https://github.com/tpope/vim-haml
|
||||||
|
call s:h("sassAmpersand", { "fg": s:red })
|
||||||
|
call s:h("sassClass", { "fg": s:dark_yellow })
|
||||||
|
call s:h("sassControl", { "fg": s:purple })
|
||||||
|
call s:h("sassExtend", { "fg": s:purple })
|
||||||
|
call s:h("sassFor", { "fg": s:white })
|
||||||
|
call s:h("sassFunction", { "fg": s:cyan })
|
||||||
|
call s:h("sassId", { "fg": s:blue })
|
||||||
|
call s:h("sassInclude", { "fg": s:purple })
|
||||||
|
call s:h("sassMedia", { "fg": s:purple })
|
||||||
|
call s:h("sassMediaOperators", { "fg": s:white })
|
||||||
|
call s:h("sassMixin", { "fg": s:purple })
|
||||||
|
call s:h("sassMixinName", { "fg": s:blue })
|
||||||
|
call s:h("sassMixing", { "fg": s:purple })
|
||||||
|
call s:h("sassVariable", { "fg": s:purple })
|
||||||
|
" https://github.com/cakebaker/scss-syntax.vim
|
||||||
|
call s:h("scssExtend", { "fg": s:purple })
|
||||||
|
call s:h("scssImport", { "fg": s:purple })
|
||||||
|
call s:h("scssInclude", { "fg": s:purple })
|
||||||
|
call s:h("scssMixin", { "fg": s:purple })
|
||||||
|
call s:h("scssSelectorName", { "fg": s:dark_yellow })
|
||||||
|
call s:h("scssVariable", { "fg": s:purple })
|
||||||
|
|
||||||
|
" TeX
|
||||||
|
call s:h("texStatement", { "fg": s:purple })
|
||||||
|
call s:h("texSubscripts", { "fg": s:dark_yellow })
|
||||||
|
call s:h("texSuperscripts", { "fg": s:dark_yellow })
|
||||||
|
call s:h("texTodo", { "fg": s:dark_red })
|
||||||
|
call s:h("texBeginEnd", { "fg": s:purple })
|
||||||
|
call s:h("texBeginEndName", { "fg": s:blue })
|
||||||
|
call s:h("texMathMatcher", { "fg": s:blue })
|
||||||
|
call s:h("texMathDelim", { "fg": s:blue })
|
||||||
|
call s:h("texDelimiter", { "fg": s:dark_yellow })
|
||||||
|
call s:h("texSpecialChar", { "fg": s:dark_yellow })
|
||||||
|
call s:h("texCite", { "fg": s:blue })
|
||||||
|
call s:h("texRefZone", { "fg": s:blue })
|
||||||
|
|
||||||
|
" TypeScript
|
||||||
|
call s:h("typescriptReserved", { "fg": s:purple })
|
||||||
|
call s:h("typescriptEndColons", { "fg": s:white })
|
||||||
|
call s:h("typescriptBraces", { "fg": s:white })
|
||||||
|
|
||||||
|
" XML
|
||||||
|
call s:h("xmlAttrib", { "fg": s:dark_yellow })
|
||||||
|
call s:h("xmlEndTag", { "fg": s:red })
|
||||||
|
call s:h("xmlTag", { "fg": s:red })
|
||||||
|
call s:h("xmlTagName", { "fg": s:red })
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Plugin Highlighting {{{
|
||||||
|
|
||||||
|
" airblade/vim-gitgutter
|
||||||
|
hi link GitGutterAdd SignifySignAdd
|
||||||
|
hi link GitGutterChange SignifySignChange
|
||||||
|
hi link GitGutterDelete SignifySignDelete
|
||||||
|
|
||||||
|
" easymotion/vim-easymotion
|
||||||
|
call s:h("EasyMotionTarget", { "fg": s:red, "gui": "bold", "cterm": "bold" })
|
||||||
|
call s:h("EasyMotionTarget2First", { "fg": s:yellow, "gui": "bold", "cterm": "bold" })
|
||||||
|
call s:h("EasyMotionTarget2Second", { "fg": s:dark_yellow, "gui": "bold", "cterm": "bold" })
|
||||||
|
call s:h("EasyMotionShade", { "fg": s:comment_grey })
|
||||||
|
|
||||||
|
" mhinz/vim-signify
|
||||||
|
call s:h("SignifySignAdd", { "fg": s:green })
|
||||||
|
call s:h("SignifySignChange", { "fg": s:yellow })
|
||||||
|
call s:h("SignifySignDelete", { "fg": s:red })
|
||||||
|
|
||||||
|
" neomake/neomake
|
||||||
|
call s:h("NeomakeWarningSign", { "fg": s:yellow })
|
||||||
|
call s:h("NeomakeErrorSign", { "fg": s:red })
|
||||||
|
call s:h("NeomakeInfoSign", { "fg": s:blue })
|
||||||
|
|
||||||
|
" plasticboy/vim-markdown (keep consistent with Markdown, above)
|
||||||
|
call s:h("mkdDelimiter", { "fg": s:purple })
|
||||||
|
call s:h("mkdHeading", { "fg": s:red })
|
||||||
|
call s:h("mkdLink", { "fg": s:blue })
|
||||||
|
call s:h("mkdUrl", { "fg": s:cyan, "gui": "underline", "cterm": "underline" })
|
||||||
|
|
||||||
|
" tpope/vim-fugitive
|
||||||
|
call s:h("diffAdded", { "fg": s:green })
|
||||||
|
call s:h("diffRemoved", { "fg": s:red })
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Git Highlighting {{{
|
||||||
|
|
||||||
|
call s:h("gitcommitComment", { "fg": s:comment_grey })
|
||||||
|
call s:h("gitcommitUnmerged", { "fg": s:green })
|
||||||
|
call s:h("gitcommitOnBranch", {})
|
||||||
|
call s:h("gitcommitBranch", { "fg": s:purple })
|
||||||
|
call s:h("gitcommitDiscardedType", { "fg": s:red })
|
||||||
|
call s:h("gitcommitSelectedType", { "fg": s:green })
|
||||||
|
call s:h("gitcommitHeader", {})
|
||||||
|
call s:h("gitcommitUntrackedFile", { "fg": s:cyan })
|
||||||
|
call s:h("gitcommitDiscardedFile", { "fg": s:red })
|
||||||
|
call s:h("gitcommitSelectedFile", { "fg": s:green })
|
||||||
|
call s:h("gitcommitUnmergedFile", { "fg": s:yellow })
|
||||||
|
call s:h("gitcommitFile", {})
|
||||||
|
call s:h("gitcommitSummary", { "fg": s:white })
|
||||||
|
call s:h("gitcommitOverflow", { "fg": s:red })
|
||||||
|
hi link gitcommitNoBranch gitcommitBranch
|
||||||
|
hi link gitcommitUntracked gitcommitComment
|
||||||
|
hi link gitcommitDiscarded gitcommitComment
|
||||||
|
hi link gitcommitSelected gitcommitComment
|
||||||
|
hi link gitcommitDiscardedArrow gitcommitDiscardedFile
|
||||||
|
hi link gitcommitSelectedArrow gitcommitSelectedFile
|
||||||
|
hi link gitcommitUnmergedArrow gitcommitUnmergedFile
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Neovim terminal colors {{{
|
||||||
|
|
||||||
|
if has("nvim")
|
||||||
|
let g:terminal_color_0 = s:black.gui
|
||||||
|
let g:terminal_color_1 = s:red.gui
|
||||||
|
let g:terminal_color_2 = s:green.gui
|
||||||
|
let g:terminal_color_3 = s:yellow.gui
|
||||||
|
let g:terminal_color_4 = s:blue.gui
|
||||||
|
let g:terminal_color_5 = s:purple.gui
|
||||||
|
let g:terminal_color_6 = s:cyan.gui
|
||||||
|
let g:terminal_color_7 = s:white.gui
|
||||||
|
let g:terminal_color_8 = s:visual_grey.gui
|
||||||
|
let g:terminal_color_9 = s:dark_red.gui
|
||||||
|
let g:terminal_color_10 = s:green.gui " No dark version
|
||||||
|
let g:terminal_color_11 = s:dark_yellow.gui
|
||||||
|
let g:terminal_color_12 = s:blue.gui " No dark version
|
||||||
|
let g:terminal_color_13 = s:purple.gui " No dark version
|
||||||
|
let g:terminal_color_14 = s:cyan.gui " No dark version
|
||||||
|
let g:terminal_color_15 = s:comment_grey.gui
|
||||||
|
let g:terminal_color_background = g:terminal_color_0
|
||||||
|
let g:terminal_color_foreground = g:terminal_color_7
|
||||||
|
endif
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Must appear at the end of the file to work around this oddity:
|
||||||
|
" https://groups.google.com/forum/#!msg/vim_dev/afPqwAFNdrU/nqh6tOM87QUJ
|
||||||
|
set background=dark
|
||||||
71
.config/vim/vimrc
Normal file
71
.config/vim/vimrc
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
" Keybinds ##########################################################################
|
||||||
|
" Disable arrow keys
|
||||||
|
noremap <Up> ""
|
||||||
|
noremap! <Up> <Esc>
|
||||||
|
noremap <Down> ""
|
||||||
|
noremap! <Down> <Esc>
|
||||||
|
noremap <Left> ""
|
||||||
|
noremap! <Left> <Esc>
|
||||||
|
noremap <Right> ""
|
||||||
|
noremap! <Right> <Esc>
|
||||||
|
" Stop highlighting search result when pressing Return
|
||||||
|
nnoremap <silent> <CR> :nohlsearch<CR><CR>
|
||||||
|
|
||||||
|
" Settings ##########################################################################
|
||||||
|
" hybrid linenumbers
|
||||||
|
set number relativenumber
|
||||||
|
" no timeout when exiting insert-mode (see https://www.johnhawthorn.com/2012/09/vi-escape-delays/)
|
||||||
|
set timeoutlen=1000 ttimeoutlen=0
|
||||||
|
" smart case insensitive search (insens: /copy /Copy\c; sens: /Copy /copy\C)
|
||||||
|
set ignorecase smartcase
|
||||||
|
" Tab size
|
||||||
|
set tabstop=4
|
||||||
|
" Shift the same amount as tabstop
|
||||||
|
set shiftwidth=0
|
||||||
|
" Highlight current line
|
||||||
|
set cursorline
|
||||||
|
" Automatically add leading comment (when pressing o/O or enter in Insert)
|
||||||
|
set formatoptions+=cro
|
||||||
|
" see :help persistent-undo
|
||||||
|
set undofile
|
||||||
|
|
||||||
|
" Aesthetics #######################################################################
|
||||||
|
" use onedark as theme for syntax highlighting
|
||||||
|
syntax on
|
||||||
|
colorscheme onedark
|
||||||
|
" Use 24-bit (true-color) mode
|
||||||
|
if (has("termguicolors"))
|
||||||
|
set termguicolors
|
||||||
|
endif
|
||||||
|
|
||||||
|
" get transparent background of the terminal back
|
||||||
|
" (at least in nvim, i can't get it to work in vanilla)
|
||||||
|
if (has('nvim'))
|
||||||
|
highlight Normal guibg=NONE
|
||||||
|
highlight NonText guibg=NONE
|
||||||
|
endif
|
||||||
|
|
||||||
|
" zshOption is a huge regex that leads to massive lags when scrolling
|
||||||
|
" Be sure to disable it after activating syntax highlighting
|
||||||
|
autocmd filetype zsh syntax clear zshOption
|
||||||
|
|
||||||
|
" change cursor shape depending on mode
|
||||||
|
if (has('nvim'))
|
||||||
|
" reset when exiting
|
||||||
|
autocmd VimLeave * set guicursor=a:ver25
|
||||||
|
else
|
||||||
|
" https://vim.fandom.com/wiki/Change_cursor_shape_in_different_modes
|
||||||
|
" start insert mode - vertical bar
|
||||||
|
let &t_SI = "\<Esc>[5 q"
|
||||||
|
" start replace mode - horizontal/underline bar
|
||||||
|
let &t_SR = "\<Esc>[3 q"
|
||||||
|
" end insert or replace mode - block cursor
|
||||||
|
let &t_EI = "\<Esc>[1 q"
|
||||||
|
|
||||||
|
" Set when entering
|
||||||
|
autocmd VimEnter * silent !echo -ne "\e[2 q"
|
||||||
|
" Reset when exiting
|
||||||
|
" Finally found out how to do that by looking at:
|
||||||
|
" https://github.com/jszakmeister/vim-togglecursor/blob/master/plugin/togglecursor.vim
|
||||||
|
autocmd VimLeave * let &t_te = "\<Esc>[5 q" . &t_te
|
||||||
|
endif
|
||||||
45
.config/vim/xdg.vim
Normal file
45
.config/vim/xdg.vim
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
" XDG Environment For VIM
|
||||||
|
" =======================
|
||||||
|
"
|
||||||
|
" References
|
||||||
|
" ----------
|
||||||
|
"
|
||||||
|
" - http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables
|
||||||
|
" - http://tlvince.com/vim-respect-xdg
|
||||||
|
" - https://wiki.archlinux.org/index.php/XDG_Base_Directory
|
||||||
|
" - https://raw.githubusercontent.com/kaleb/vim-files/master/xdg.vim
|
||||||
|
|
||||||
|
if empty($XDG_CACHE_HOME)
|
||||||
|
let $XDG_CACHE_HOME = '~/.cache'
|
||||||
|
endif
|
||||||
|
if empty($XDG_CONFIG_HOME)
|
||||||
|
let $XDG_CONFIG_HOME = '~/.config'
|
||||||
|
endif
|
||||||
|
if empty($XDG_DATA_HOME)
|
||||||
|
let $XDG_DATA_HOME = '~/.local/share'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !isdirectory($XDG_CACHE_HOME . "/vim/swap")
|
||||||
|
call mkdir($XDG_CACHE_HOME . "/vim/swap", "p")
|
||||||
|
endif
|
||||||
|
set directory=$XDG_CACHE_HOME/vim/swap/
|
||||||
|
|
||||||
|
if !isdirectory($XDG_DATA_HOME . "/vim/backup")
|
||||||
|
call mkdir($XDG_DATA_HOME . "/vim/backup", "p")
|
||||||
|
endif
|
||||||
|
set backupdir=$XDG_DATA_HOME/vim/backup/
|
||||||
|
|
||||||
|
if !isdirectory($XDG_DATA_HOME . "/vim/undo")
|
||||||
|
call mkdir($XDG_DATA_HOME . "/vim/undo", "p")
|
||||||
|
endif
|
||||||
|
set undodir=$XDG_DATA_HOME/vim/undo/
|
||||||
|
|
||||||
|
if (!has('nvim'))
|
||||||
|
set viminfo+=n$XDG_DATA_HOME/vim/viminfo
|
||||||
|
endif
|
||||||
|
|
||||||
|
set runtimepath-=~/.vim
|
||||||
|
set runtimepath^=$XDG_CONFIG_HOME/vim
|
||||||
|
set runtimepath-=~/.vim/after
|
||||||
|
set runtimepath+=$XDG_CONFIG_HOME/vim/after
|
||||||
|
source $XDG_CONFIG_HOME/vim/vimrc
|
||||||
36
.config/xsecurelock/config
Normal file
36
.config/xsecurelock/config
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# specifies the time (in seconds) to wait for response to a prompt by auth_x11 before giving up and
|
||||||
|
# reverting to the screen saver.
|
||||||
|
XSECURELOCK_AUTH_TIMEOUT=10
|
||||||
|
|
||||||
|
# specifies the time (in seconds) before telling X11 to fully blank the screen; a negative value
|
||||||
|
# disables X11 blanking. The time is measured since the closing of the auth window or xsecurelock
|
||||||
|
# startup. Setting this to 0 is rather nonsensical, as key-release events (e.g. from the keystroke
|
||||||
|
# to launch xsecurelock or from pressing escape to close the auth dialog) always wake up the screen.
|
||||||
|
XSECURELOCK_BLANK_TIMEOUT=10
|
||||||
|
|
||||||
|
# create a second full-screen window to obscure window content in case a running compositor unmaps
|
||||||
|
# its own window. Helps with some instances of bad compositor behavior (such as compositor crashes/
|
||||||
|
# restarts, but also compton has been caught at drawing notification icons above the screen locker
|
||||||
|
# when not using the GLX backend), should prevent compositors from unredirecting as it's 1 pixel
|
||||||
|
# smaller than the screen from every side, and should otherwise be harmless, so it's enabled by
|
||||||
|
# default.
|
||||||
|
XSECURELOCK_COMPOSITE_OBSCURER=1
|
||||||
|
|
||||||
|
# the date format to show. Defaults to the locale settings.
|
||||||
|
XSECURELOCK_DATETIME_FORMAT=%F %T
|
||||||
|
|
||||||
|
# time_ shows the current time since the epoch on each keystroke. This may be the most secure mode,
|
||||||
|
# as it gives feedback to keystroke based exclusively on public information, and does not carry
|
||||||
|
# over any state between keystrokes whatsoever - not even some form of randomness.
|
||||||
|
# time_hex: same as time, but in microseconds and hexadecimal. "Because we can".
|
||||||
|
XSECURELOCK_PASSWORD_PROMPT=time_hex
|
||||||
|
|
||||||
|
# whether to show local date and time on the login. Disabled by default.
|
||||||
|
XSECURELOCK_SHOW_DATETIME=1
|
||||||
|
|
||||||
|
# whether to show the hostname on the login screen of auth_x11. Possible values are 0 for not
|
||||||
|
# showing the hostname, 1 for showing the short form, and 2 for showing the long form.
|
||||||
|
XSECURELOCK_SHOW_HOSTNAME=0
|
||||||
|
|
||||||
|
# whether to show the username on the login screen of auth_x11.
|
||||||
|
XSECURELOCK_SHOW_USERNAME=0
|
||||||
57
.config/xsecurelock/transfer-sleep-lock.sh
Executable file
57
.config/xsecurelock/transfer-sleep-lock.sh
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# !Modified! /usr/share/doc/xss-lock/transfer-sleep-lock-generic-delay.sh
|
||||||
|
|
||||||
|
# Example locker script -- demonstrates how to use the --transfer-sleep-lock
|
||||||
|
# option with a fixed delay to give simple lockers a little bit of time to lock
|
||||||
|
# the screen before the system goes the sleep.
|
||||||
|
|
||||||
|
## CONFIGURATION ##############################################################
|
||||||
|
|
||||||
|
# hack: remove space from IFS so that the config can have spaces in the keys
|
||||||
|
# TODO: find a better way to do this (I'm desperate)
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Command to start the locker (should not fork)
|
||||||
|
# Beware the tabs instead of spaces!
|
||||||
|
locker="env $(grep -v '^#\|^$' ~/.config/xsecurelock/config) xsecurelock"
|
||||||
|
|
||||||
|
# Delay in seconds. Note that by default systemd-logind allows a maximum sleep
|
||||||
|
# delay of 5 seconds.
|
||||||
|
sleep_delay=1
|
||||||
|
|
||||||
|
# Run before starting the locker
|
||||||
|
pre_lock() {
|
||||||
|
# mpc pause
|
||||||
|
killall -q compton
|
||||||
|
amixer -q -D pulse sset Master mute
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run after the locker exits
|
||||||
|
post_lock() {
|
||||||
|
compton -b
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
pre_lock
|
||||||
|
|
||||||
|
# kill locker if we get killed
|
||||||
|
trap 'kill %%' TERM INT
|
||||||
|
|
||||||
|
if [[ -e /dev/fd/${XSS_SLEEP_LOCK_FD:--1} ]]; then
|
||||||
|
# lock fd is open, make sure the locker does not inherit a copy
|
||||||
|
$locker {XSS_SLEEP_LOCK_FD}<&- &
|
||||||
|
|
||||||
|
sleep $sleep_delay
|
||||||
|
|
||||||
|
# now close our fd (only remaining copy) to indicate we're ready to sleep
|
||||||
|
exec {XSS_SLEEP_LOCK_FD}<&-
|
||||||
|
else
|
||||||
|
$locker &
|
||||||
|
fi
|
||||||
|
|
||||||
|
wait # for locker to exit
|
||||||
|
|
||||||
|
post_lock
|
||||||
4
.config/zathura/zathurarc
Normal file
4
.config/zathura/zathurarc
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
set recolor true
|
||||||
|
set recolor-lightcolor "#333333"
|
||||||
|
set recolor-darkcolor "#FFFFFF"
|
||||||
|
set default-bg "#252525"
|
||||||
157
.config/zsh/.zshrc
Normal file
157
.config/zsh/.zshrc
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created 2018-11-23
|
||||||
|
|
||||||
|
# echo ${(pl.$LINES..\n.)}
|
||||||
|
|
||||||
|
# Enable Powerlevel10k instant prompt. Should stay at the top of ~/.config/zsh/.zshrc.
|
||||||
|
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||||
|
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export ZSH_CONF="$ZDOTDIR/plugins"
|
||||||
|
|
||||||
|
## set zshoptions
|
||||||
|
# setopt AUTO_CD # cd is not necessary
|
||||||
|
setopt AUTO_CONTINUE # Stopped jobs with 'disown' are automatically sent a CONT signal to make them running.
|
||||||
|
setopt AUTO_PARAM_SLASH # Add a trailing slash when completing directories
|
||||||
|
setopt AUTO_PUSHD # Make cd push the old directory onto the directory stack.
|
||||||
|
setopt NO_AUTO_REMOVE_SLASH # Keeps trailing slash for directories when auto completing.
|
||||||
|
# (Beware: commands will act on the target directory not the symlink with the slash)
|
||||||
|
setopt NO_BEEP # Do not beep on error in ZLE.
|
||||||
|
setopt C_BASES # Output hexadecimal numbers in the standard C format ('16#FF' -> '0xFF').
|
||||||
|
setopt CDABLE_VARS # Enables changing into hashes without the '~'-prefix
|
||||||
|
setopt CHASE_LINKS # Resolve symbolic links to their true values when changing directory.
|
||||||
|
setopt NO_CLOBBER # '>!' or '>|' must be used to truncate a file, and '>>!' or '>>|' to create a file.
|
||||||
|
setopt COMPLETE_IN_WORD # Complete from the cursor rather than from the end of the word
|
||||||
|
setopt CORRECT # Try to correct the spelling of a command
|
||||||
|
setopt CORRECT_ALL # Try to correct the spelling of all arguments
|
||||||
|
export CORRECT_IGNORE_FILE=".*" # Do not offer hidden files as correction
|
||||||
|
setopt EXTENDED_HISTORY # Saves timedata into the history (:<beginning time>:<elapsed seconds>:<command>).
|
||||||
|
setopt EXTENDED_GLOB # Treat the `#', `~' and `^' characters as part of patterns for filename generation, etc.
|
||||||
|
setopt NO_FLOW_CONTROL # Disables output flow control in the shell's editor via start/stop characters (usually ^S/^Q).
|
||||||
|
setopt GLOB_DOTS # Do not require a leading `.' in a filename to be matched explicitly.
|
||||||
|
setopt HIST_IGNORE_DUPS
|
||||||
|
setopt HIST_IGNORE_SPACE # History should ignore commands beginning with a space
|
||||||
|
setopt HIST_VERIFY # perform history expansion and reload line in editing buffer instead of executing it directly
|
||||||
|
setopt INC_APPEND_HISTORY_TIME # enter lines as soon as there ary entered (_time is necessary for <elapsed seconds> of ext_hist)
|
||||||
|
setopt INTERACTIVE_COMMENTS # Allow comments even in interactive shells.
|
||||||
|
setopt NO_MENU_COMPLETE # Do not autoselect the first entry when completing
|
||||||
|
# setopt SHARE_HISTORY # write + read history after every command
|
||||||
|
|
||||||
|
autoload -U select-word-style && select-word-style bash
|
||||||
|
|
||||||
|
## Setup the prompt
|
||||||
|
# use bright version of colors when printing bold
|
||||||
|
if [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/dircolors/dircolors" ]; then
|
||||||
|
eval "$(dircolors -b "${XDG_CONFIG_HOME:-$HOME/.config}/dircolors/dircolors")"
|
||||||
|
else
|
||||||
|
eval "$(dircolors -b)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -r "$ZSH_CONF/powerlevel10k/powerlevel10k.zsh-theme" ]; then
|
||||||
|
source "$ZSH_CONF/powerlevel10k/powerlevel10k.zsh-theme"
|
||||||
|
# run `p10k configure` or edit $ZSH_CONF/p10k.zsh-theme to customize
|
||||||
|
[ ! -r "$ZSH_CONF/p10k.zsh-theme" ] || source "$ZSH_CONF/p10k.zsh-theme"
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Setup zsh completion system
|
||||||
|
[ ! -d "$ZSH_CONF/completion" ] || fpath=("$ZSH_CONF/completion" $fpath)
|
||||||
|
|
||||||
|
autoload -Uz compinit
|
||||||
|
compinit -d "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zcompdump-$ZSH_VERSION"
|
||||||
|
|
||||||
|
zstyle ':completion:*' auto-description 'specify: %d'
|
||||||
|
zstyle ':completion:*' completer _expand _complete _correct _approximate
|
||||||
|
zstyle ':completion:*' format 'Completing %d'
|
||||||
|
zstyle ':completion:*' group-name ''
|
||||||
|
zstyle ':completion:*' menu select=2
|
||||||
|
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
||||||
|
zstyle ':completion:*' list-colors ''
|
||||||
|
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
|
||||||
|
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
|
||||||
|
zstyle ':completion:*' menu select=long
|
||||||
|
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
|
||||||
|
zstyle ':completion:*' use-compctl false
|
||||||
|
zstyle ':completion:*' verbose true
|
||||||
|
|
||||||
|
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
|
||||||
|
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
|
||||||
|
|
||||||
|
zstyle ':completion:*' menu select
|
||||||
|
|
||||||
|
zstyle -e ':completion:*:users' users 'local user; getent passwd | while IFS=: read -rA user; do (( user[3] >= 1000 || user[3] == 0 )) && reply+=($user[1]); done'
|
||||||
|
_comp_options+=(globdots) # Include hidden files
|
||||||
|
|
||||||
|
|
||||||
|
## Load external config files and modules
|
||||||
|
autoload edit-command-line; zle -N edit-command-line
|
||||||
|
autoload zmv
|
||||||
|
# stderred
|
||||||
|
if [ -r "$ZSH_CONF/stderred/build/libstderred.so" ]; then
|
||||||
|
export LD_PRELOAD="$ZSH_CONF/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"
|
||||||
|
export STDERRED_ESC_CODE="$(tput bold && tput setaf 1)"
|
||||||
|
export STDERRED_BLACKLIST="^(git|curl|wget|swipl)$"
|
||||||
|
fi
|
||||||
|
[ ! -r "$ZSH_CONF/functionsPre.zsh" ] || source "$ZSH_CONF/functionsPre.zsh"
|
||||||
|
[ ! -r "$ZSH_CONF/alias.zsh" ] || source "$ZSH_CONF/alias.zsh"
|
||||||
|
[ ! -r "$ZSH_CONF/functionsPost.zsh" ] || source "$ZSH_CONF/functionsPost.zsh"
|
||||||
|
[ ! -r "$ZSH_CONF/transfer.zsh" ] || source "$ZSH_CONF/transfer.zsh"
|
||||||
|
[ ! -r "$ZSH_CONF/zsh-autosuggestions/zsh-autosuggestions.zsh" ] || source "$ZSH_CONF/zsh-autosuggestions/zsh-autosuggestions.zsh"
|
||||||
|
[ ! -r "$ZSH_CONF/completion.zsh" ] || source "$ZSH_CONF/completion.zsh"
|
||||||
|
# [ ! -r "$ZSH_CONF/zsh-async/async.zsh" ] || source "$ZSH_CONF/zsh-async/async.zsh"
|
||||||
|
# async_init
|
||||||
|
### syntax-highlight > history-substring > keys
|
||||||
|
# syntax highlighting
|
||||||
|
if [ -r "$ZSH_CONF/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" ]; then
|
||||||
|
source $ZSH_CONF/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
|
source $ZSH_CONF/zsh-syntax-highlighting.zsh-theme
|
||||||
|
fi
|
||||||
|
# history substr search
|
||||||
|
if [ -r "$ZSH_CONF/zsh-history-substring-search/zsh-history-substring-search.zsh" ]; then
|
||||||
|
source $ZSH_CONF/zsh-history-substring-search/zsh-history-substring-search.zsh
|
||||||
|
HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=true
|
||||||
|
HISTORY_SUBSTRING_SEARCH_FUZZY=true
|
||||||
|
fi
|
||||||
|
[ ! -r "$ZSH_CONF/keys.zsh" ] || source "$ZSH_CONF/keys.zsh"
|
||||||
|
|
||||||
|
## Env variables that have nothing to do with zsh
|
||||||
|
export EDITOR=nvim
|
||||||
|
|
||||||
|
# `sudo nano` won't work without this (?)
|
||||||
|
if [ "$TERM" = "xterm-kitty" ]; then
|
||||||
|
export TERM=xterm-256color
|
||||||
|
fi
|
||||||
|
|
||||||
|
## https://www.tecmint.com/view-colored-man-pages-in-linux/
|
||||||
|
## First seen in Fox Kiesters dotfiles
|
||||||
|
export LESS_TERMCAP_mb=$'\e[1;32m'
|
||||||
|
export LESS_TERMCAP_md=$'\e[1;32m'
|
||||||
|
export LESS_TERMCAP_me=$'\e[0m'
|
||||||
|
export LESS_TERMCAP_se=$'\e[0m'
|
||||||
|
export LESS_TERMCAP_so=$'\E[01;44;33m'
|
||||||
|
export LESS_TERMCAP_ue=$'\e[0m'
|
||||||
|
export LESS_TERMCAP_us=$'\e[1;4;31m'
|
||||||
|
|
||||||
|
## Less clutter in $HOME by enforcing the XDG base directory standard
|
||||||
|
export ATOM_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/atom"
|
||||||
|
export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go"
|
||||||
|
export LESSHISTFILE=-
|
||||||
|
export SQLITE_HISTORY="${XDG_DATA_HOME:-$HOME/.local/share}/sqlite3/sqlite_history"
|
||||||
|
|
||||||
|
export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android"
|
||||||
|
export VIMINIT='let $MYVIMRC="/home/user/.config/vim/xdg.vim" | source $MYVIMRC'
|
||||||
|
|
||||||
|
## Setup asynchronous jobs
|
||||||
|
# async_start_worker msg_completion
|
||||||
|
# async_job msg_completion tg-completion
|
||||||
|
|
||||||
|
## Setup zle
|
||||||
|
zle_highlight=('paste:none')
|
||||||
|
|
||||||
|
## History
|
||||||
|
HISTSIZE=1000000
|
||||||
|
SAVEHIST=1000000
|
||||||
|
HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/zsh/.zsh_history"
|
||||||
|
|
||||||
|
# Finalize Powerlevel10k instant prompt. Should stay at the bottom of ~/.config/zsh/.zshrc.
|
||||||
|
(( ! ${+functions[p10k-instant-prompt-finalize]} )) || p10k-instant-prompt-finalize
|
||||||
103
.config/zsh/plugins/alias.zsh
Normal file
103
.config/zsh/plugins/alias.zsh
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created: 2019-01-16
|
||||||
|
|
||||||
|
## Add fslint-directory to PATH
|
||||||
|
PATH=$PATH:/usr/share/fslint/fslint
|
||||||
|
|
||||||
|
|
||||||
|
## Add flags or shorten commands that I cannot remember
|
||||||
|
alias getclip="xclip -selection c -o"
|
||||||
|
alias setclip="perl -pe 'chomp if eof' | xclip -selection c"
|
||||||
|
alias pdfviewer='evince'
|
||||||
|
alias pdf='launch evince'
|
||||||
|
alias darkpdf='launch zathura'
|
||||||
|
alias geeqie='launch qeeqie'
|
||||||
|
alias grep='grep --color'
|
||||||
|
alias igrep='grep -i'
|
||||||
|
alias emacs-game='emacs -batch -l dunnet'
|
||||||
|
alias trash-restore='restore-trash'
|
||||||
|
alias cp='cp -i'
|
||||||
|
alias mv='mv -i' # --backup=t ??
|
||||||
|
alias rm='rm -I'
|
||||||
|
alias less='less -N'
|
||||||
|
alias lsblk='lsblk -f'
|
||||||
|
alias rd='rmdir'
|
||||||
|
alias md='mkdir -p'
|
||||||
|
alias o='xdg-open'
|
||||||
|
alias p='pwd'
|
||||||
|
alias :q='exit'
|
||||||
|
alias :Q=:q
|
||||||
|
alias update='sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y'
|
||||||
|
alias pdf2text='pdftotext'
|
||||||
|
alias pdf2txt='pdftotext'
|
||||||
|
alias rm='printf "\033[1;031mUse trash!\n\033[0m"; false'
|
||||||
|
alias bat='upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "to full|percentage" | tr -d " " | sed "s/:/: /"'
|
||||||
|
alias battery='bat'
|
||||||
|
alias qrdecode='zbarimg'
|
||||||
|
alias pdfmerge='pdfunite'
|
||||||
|
alias loadhist='fc -RI'
|
||||||
|
alias wget='wget --config=${XDG_CONFIG_HOME:-$HOME/.config}/wget/wgetrc --hsts-file="${XDG_DATA_HOME:-$HOME/.local/share}/wget/wget-hsts"'
|
||||||
|
alias -g G='| grep '
|
||||||
|
alias -g no2='2>/dev/null'
|
||||||
|
alias hex=xxd
|
||||||
|
alias bin='xxd -b -c4 | cut -d" " -f2-5'
|
||||||
|
alias vim=nvim
|
||||||
|
alias vi=nvim
|
||||||
|
alias tmux='tmux -f "$HOME/.config/tmux/tmux.conf"'
|
||||||
|
alias resetCursor='echo -ne "\e[5 q"'
|
||||||
|
alias makeThisScratchpad='echo -ne "\033]0;scratchpad-terminal\007"'
|
||||||
|
alias tmsu='tmsu -D "${XDG_DATA_HOME:-$HOME/.local/share}/tmsu/db"'
|
||||||
|
|
||||||
|
## functions
|
||||||
|
alias trash=_trash_list_default
|
||||||
|
alias nemo=_nemo_wd_default
|
||||||
|
|
||||||
|
## git
|
||||||
|
alias gs='git status --short' # overrides ghostscript
|
||||||
|
alias gits='gs'
|
||||||
|
alias gstat='gs'
|
||||||
|
alias gitstat='gs'
|
||||||
|
alias ga='git add'
|
||||||
|
alias gaa='git add -A'
|
||||||
|
alias gc='git commit -m'
|
||||||
|
alias gpsh='git push'
|
||||||
|
alias gpush='git push'
|
||||||
|
alias gpll='git pull'
|
||||||
|
alias gpull='git pull'
|
||||||
|
alias gdiff='git diff'
|
||||||
|
alias gd='git diff'
|
||||||
|
|
||||||
|
## Navigation
|
||||||
|
alias ls='_ls_show_hidden --color=auto --group-directories-first -p -v'
|
||||||
|
alias sl='ls'
|
||||||
|
alias la='ls -A'
|
||||||
|
alias l='ls -lh --time-style=long-iso'
|
||||||
|
alias ll='l -A'
|
||||||
|
alias cd..='cd ..'
|
||||||
|
alias cd~='cd ~'
|
||||||
|
|
||||||
|
## Hashes for often visited folders
|
||||||
|
hash -d Desktop=$HOME/Desktop/
|
||||||
|
hash -d Documents=$HOME/Documents/
|
||||||
|
hash -d Pictures=$HOME/Pictures/
|
||||||
|
hash -d Downloads=$HOME/Downloads/
|
||||||
|
hash -d Projects=$HOME/Projects/
|
||||||
|
hash -d dot=~Projects/dotfiles/
|
||||||
|
hash -d dots=~dot
|
||||||
|
|
||||||
|
local UNI="$HOME/Documents/uni"
|
||||||
|
hash -d cheat=$HOME/Documents/Cheat\ Sheet/
|
||||||
|
hash -d uni=$UNI/
|
||||||
|
# hash for current/last wise
|
||||||
|
local YEAR=$(date +"%y")
|
||||||
|
if [ -d "$UNI/$YEAR-WiSe" ]; then
|
||||||
|
hash -d wise="$UNI/$YEAR-WiSe/"
|
||||||
|
elif [ -d "$UNI/$(($YEAR - 1))-WiSe" ]; then
|
||||||
|
hash -d wise="$UNI/$(($YEAR - 1))-WiSe/"
|
||||||
|
fi
|
||||||
|
# hash for current/last sose
|
||||||
|
if [ -d "$UNI/$YEAR-SoSe" ]; then
|
||||||
|
hash -d sose="$UNI/$YEAR-SoSe"/
|
||||||
|
elif [ -d "$UNI/$(($YEAR - 1))-SoSe" ]; then
|
||||||
|
hash -d sose="$UNI/$(($YEAR - 1))-SoSe/"
|
||||||
|
fi
|
||||||
10
.config/zsh/plugins/completion.zsh
Normal file
10
.config/zsh/plugins/completion.zsh
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created: 2019-08-18
|
||||||
|
|
||||||
|
## TelegramCLI msg completion
|
||||||
|
function tg-completion() {
|
||||||
|
contactList=( $(telegram-cli -W -C -e "contact_list" | tail -n +9 | head -n -2 | grep -vE "(>>>|<<<|»»»|«««)" | sed 's/ /_/g; s/.*\[K//; s/(/\\(/g; s/)/\\)/g; s/"/\\"/g') )
|
||||||
|
echo '#compdef msg' >! $ZSH_CONF/completion/_msg
|
||||||
|
echo >> $ZSH_CONF/completion/_msg
|
||||||
|
echo '_arguments "1:<Recipient>:('"$contactList[*]"')"' >> $ZSH_CONF/completion/_msg
|
||||||
|
}
|
||||||
43
.config/zsh/plugins/completion/_conf
Normal file
43
.config/zsh/plugins/completion/_conf
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#compdef conf
|
||||||
|
|
||||||
|
## Author: druckdev
|
||||||
|
## Created: 2020-04-19
|
||||||
|
|
||||||
|
local _MAX_DEPTH=2
|
||||||
|
|
||||||
|
local w1="${words[$#words - 1]}"
|
||||||
|
local w2="${words[$#words - 2]}"
|
||||||
|
local w3="${words[$#words - 3]}"
|
||||||
|
|
||||||
|
if [ -z $w2 ]; then # first word to complete
|
||||||
|
# move into config directory
|
||||||
|
pushd -q "${XDG_CONFIG_HOME:-$HOME/.config}/"
|
||||||
|
|
||||||
|
# list all directories
|
||||||
|
local paths="$(find -L *(-/) -maxdepth $_MAX_DEPTH -type d 2>/dev/null | xargs)"
|
||||||
|
# TODO: find in $HOME
|
||||||
|
|
||||||
|
# move back
|
||||||
|
popd -q
|
||||||
|
|
||||||
|
# use list for completion
|
||||||
|
_multi_parts / '('"$paths"')'
|
||||||
|
|
||||||
|
elif [ -z $w3 ]; then # second word to complete
|
||||||
|
# move into chosen config directory
|
||||||
|
if [ -d "${XDG_CONFIG_HOME:-$HOME/.config}/$w1" ]; then
|
||||||
|
pushd -q "${XDG_CONFIG_HOME:-$HOME/.config}/$w1"
|
||||||
|
elif [ -d "$HOME/.$w1" ]; then
|
||||||
|
pushd -q "$HOME/.$w1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check if there are any files here
|
||||||
|
# eval "local $(echo $functions[conf] | grep CONF_PATTERNS= | sed -E 's/\$(\{?)1(\}?)/\$\1w1\2/g; s/^[ \t]*//')"
|
||||||
|
local exist=( *(-.) ) 2>/dev/null
|
||||||
|
|
||||||
|
# complete (symlinks pointing to) files
|
||||||
|
[ -z "$exist" ] || _values "config:" *(-.)
|
||||||
|
|
||||||
|
# move back
|
||||||
|
popd -q
|
||||||
|
fi
|
||||||
320
.config/zsh/plugins/functionsPost.zsh
Normal file
320
.config/zsh/plugins/functionsPost.zsh
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created: 2019-10-27 (originally 2019-08-28 as functions.zsh)
|
||||||
|
|
||||||
|
## change into dir and print accordingly
|
||||||
|
function cl() {
|
||||||
|
cd "$@" && ls
|
||||||
|
}
|
||||||
|
|
||||||
|
## Copy file and append .bkp extension
|
||||||
|
function bkp() {
|
||||||
|
for file in "$@"; do
|
||||||
|
cp -i "$file" "$file.bkp"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
## Launches program and detaches it from the shell
|
||||||
|
function launch() {
|
||||||
|
# eval "$@" ## does not work with special characters?
|
||||||
|
launch_command="$1"
|
||||||
|
shift
|
||||||
|
$launch_command "$@" &>/dev/null & disown
|
||||||
|
}
|
||||||
|
|
||||||
|
## Compares two pdfs based on the result of pdftotext
|
||||||
|
function pdfdiff() {
|
||||||
|
if [[ $# -eq 2 && -r "$1" && -r "$2" ]]; then
|
||||||
|
diff <(pdftotext "$1" -) <(pdftotext "$2" -)
|
||||||
|
else
|
||||||
|
echo "something went wrong" 2>&1
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Gets Passwd from bitwarden and copies it into the clipboard
|
||||||
|
function bwpwd() {
|
||||||
|
if bw "get" "password" "$@" >/dev/null; then
|
||||||
|
bw "get" "password" "$@" | tr -d '\n' | setclip
|
||||||
|
else
|
||||||
|
bw "get" "password" "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## creates directory and changes into it
|
||||||
|
function mkcd () {
|
||||||
|
mkdir "$@" # create directory
|
||||||
|
while [ $# -gt 1 ]; do # shift arguments if mkdir options were used
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
cd "$1"
|
||||||
|
pwd
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Send a message over telegram by using the -e flag
|
||||||
|
function msg() {
|
||||||
|
if [ $# -ge 2 ]; then
|
||||||
|
telegram-cli -W -e "msg $*" | grep -E "${${*/ /.*}//_/ }"
|
||||||
|
# | grep -E "$(echo "$*" | sed 's/ /.*/; s/_/ /g')"
|
||||||
|
else
|
||||||
|
printf "\033[1;31mPlease specify a contact and a message.\n\033[0m" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Execute tg -e command but cuts of the uninteresting parts
|
||||||
|
function tg() {
|
||||||
|
tg="telegram-cli"
|
||||||
|
if [ "$1" = "-e" ]; then
|
||||||
|
shift
|
||||||
|
$tg -N -W -e "$@" | tail -n +9 | head -n -2
|
||||||
|
else
|
||||||
|
$tg -N -W "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Encode and decode qr-codes
|
||||||
|
function qr() {
|
||||||
|
if [[ $# -eq 1 && -r "$1" ]]; then
|
||||||
|
zbarimg "$1"
|
||||||
|
else
|
||||||
|
qrencode "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Edit config file
|
||||||
|
function conf() {
|
||||||
|
# default to vim if no editor is set
|
||||||
|
local CONF_EDITOR=${EDITOR:-vim}
|
||||||
|
|
||||||
|
# parse otions
|
||||||
|
while getopts "e:" opt 2>/dev/null; do
|
||||||
|
case $opt in
|
||||||
|
e) CONF_EDITOR="$OPTARG";;
|
||||||
|
*) printf "\033[1;31mUsage: $0 [-e <editor>] <program>[/subdirs] [<config_file>]\n\033[0m" >&2
|
||||||
|
return 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(($OPTIND - 1 ))
|
||||||
|
|
||||||
|
# CONF_EDITOR=( $(resolve -s $CONF_EDITOR) )
|
||||||
|
|
||||||
|
# conf needs an argument
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
printf "\033[1;31mPlease specify a config.\n\033[0m" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
# search for program name in XDG_CONFIG_HOME and $HOME
|
||||||
|
local CONF_DIR="$(_get_config_dir "$1")"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
printf "\033[1;31mFalling back to $HOME.\n\033[0m" >&2
|
||||||
|
CONF_DIR="$HOME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# open file with specified name if
|
||||||
|
if [ $# -gt 1 ]; then
|
||||||
|
if [ -r "$CONF_DIR/$2" ]; then
|
||||||
|
$CONF_EDITOR "$CONF_DIR/$2"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
printf "\033[1;31mCould not find config file with that name.\n\033[0m" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# possible config-file names + same in hidden
|
||||||
|
local -a CONF_PATTERNS
|
||||||
|
CONF_PATTERNS=(
|
||||||
|
"$1.conf"
|
||||||
|
"$1.config"
|
||||||
|
"${1}rc"
|
||||||
|
"config"
|
||||||
|
"conf"
|
||||||
|
"$1.yml"
|
||||||
|
"$1.yaml"
|
||||||
|
"$1"
|
||||||
|
)
|
||||||
|
|
||||||
|
# check if config file exists
|
||||||
|
for config in $CONF_PATTERNS; do
|
||||||
|
if [ -r "$CONF_DIR/$config" ]; then
|
||||||
|
$CONF_EDITOR "$CONF_DIR/$config"
|
||||||
|
return 0
|
||||||
|
elif [ -r "$CONF_DIR/.$config" ]; then
|
||||||
|
$CONF_EDITOR "$CONF_DIR/.$config"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# if no config was found in a location other than HOME, look again in HOME.
|
||||||
|
# (For cases like default vim with ~/.vim/ and ~/.vimrc)
|
||||||
|
if [ "$CONF_DIR" != "$HOME" ];then
|
||||||
|
for config in $CONF_PATTERNS; do
|
||||||
|
# Only look for hidden files
|
||||||
|
if [ -r "$HOME/.$config" ]; then
|
||||||
|
$CONF_EDITOR "$HOME/.$config"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\033[1;31mCould not find config file.\n\033[0m" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
## Change into config dir
|
||||||
|
function c() {
|
||||||
|
CONF_DIR="$(_get_config_dir $*)"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
cd "$CONF_DIR"
|
||||||
|
else
|
||||||
|
printf "$CONF_DIR" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
## Get config directory
|
||||||
|
function _get_config_dir() {
|
||||||
|
if [ $# -gt 1 ]; then
|
||||||
|
printf "\033[1;31mPlease specify one config.\n\033[0m" >&2
|
||||||
|
return 1
|
||||||
|
elif [ $# -eq 0 ]; then
|
||||||
|
echo "${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||||
|
elif [ -d "${XDG_CONFIG_HOME:-$HOME/.config}/$1" ]; then
|
||||||
|
echo "${XDG_CONFIG_HOME:-$HOME/.config}/$1"
|
||||||
|
elif [ -d "$HOME/.$1" ]; then
|
||||||
|
echo "$HOME/.$1"
|
||||||
|
else
|
||||||
|
printf "\033[1;31mCould not find config home.\n\033[0m" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Function that resolves a command to the end
|
||||||
|
function resolve() {
|
||||||
|
# TODO: comment!!
|
||||||
|
# In script mode only the result and its arguments are printed
|
||||||
|
# The result can then be used directly by other scripts without further
|
||||||
|
# manipulation
|
||||||
|
typeset SCRIPT_MODE VERBOSE_MODE 1>&2
|
||||||
|
while getopts "sv" opt 2>/dev/null; do
|
||||||
|
case $opt in
|
||||||
|
s) SCRIPT_MODE=1;;
|
||||||
|
v) VERBOSE_MODE=1;;
|
||||||
|
*) echo "Unknown flag!" >&2
|
||||||
|
return 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(( $OPTIND - 1 ))
|
||||||
|
|
||||||
|
if (( $SCRIPT_MODE )) && (( $VERBOSE_MODE )); then
|
||||||
|
echo "Script and verbose mode do no work together." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
typeset THIS THIS_COMMAND THIS_ARGUMENTS 1>&2
|
||||||
|
# When receiving a command with arguments, do not differ between
|
||||||
|
# one and multiple arguments.
|
||||||
|
THIS="$*"
|
||||||
|
THIS_COMMAND="${THIS%% *}"
|
||||||
|
# ${THIS%%* } would result in THIS_COMMAND when no arguements are specified.
|
||||||
|
# We want an empty string in this case.
|
||||||
|
THIS_ARGUMENTS="${THIS#${THIS_COMMAND}}"
|
||||||
|
|
||||||
|
# Resolve all aliases
|
||||||
|
while [[ "$(which $THIS_COMMAND | head -n1)" =~ "^${THIS_COMMAND}: aliased to " ]]; do
|
||||||
|
if (( $VERBOSE_MODE )); then
|
||||||
|
echo $THIS_COMMAND$THIS_ARGUMENTS
|
||||||
|
fi
|
||||||
|
THIS="$(which "$THIS_COMMAND" | cut -d' ' -f4-)"
|
||||||
|
THIS_COMMAND="${THIS%% *}"
|
||||||
|
THIS_ARGUMENTS="${THIS#${THIS_COMMAND}}$THIS_ARGUMENTS"
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
command_type="$(type $THIS_COMMAND)"
|
||||||
|
if [[ "$command_type" =~ "^$THIS_COMMAND is a shell function from " ]]; then
|
||||||
|
if (( $SCRIPT_MODE )); then
|
||||||
|
echo -n "$THIS_COMMAND$THIS_ARGUMENTS"
|
||||||
|
return 0
|
||||||
|
elif (( $VERBOSE_MODE )); then
|
||||||
|
echo "$THIS_COMMAND$THIS_ARGUMENTS"
|
||||||
|
else
|
||||||
|
echo "$* is resolved to:\n$THIS_COMMAND$THIS_ARGUMENTS"
|
||||||
|
fi
|
||||||
|
echo -n "${command_type}:"
|
||||||
|
from_file="$(echo $command_type | cut -d' ' -f7-)"
|
||||||
|
# from_file=${command_type##* }
|
||||||
|
grep -En -m1 "(function[ \t]+${THIS_COMMAND}[ \t]*(\(\)|)[ \t]*{|${THIS_COMMAND}[ \t]*\(\)[ \t]*{)" "$from_file" \
|
||||||
|
| cut -d: -f1
|
||||||
|
else
|
||||||
|
if (( $VERBOSE_MODE )); then
|
||||||
|
echo "$THIS_COMMAND$THIS_ARGUMENTS"
|
||||||
|
fi
|
||||||
|
THIS_COMMAND="$(which $THIS_COMMAND)"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "${THIS_COMMAND%% *} not found." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if (( $VERBOSE_MODE )); then
|
||||||
|
echo -n "$THIS_COMMAND"
|
||||||
|
NEXT_STEP="$(file -bh $THIS_COMMAND | cut -d' ' -f4-)"
|
||||||
|
if [ "${NEXT_STEP:0:1}" != '/' ]; then
|
||||||
|
NEXT_STEP="${THIS_COMMAND%/*}/$NEXT_STEP"
|
||||||
|
fi
|
||||||
|
while [[ "$(file -bh $THIS_COMMAND)" =~ "^symbolic link to" && "$NEXT_STEP" != "$THIS_COMMAND" ]]; do
|
||||||
|
THIS_COMMAND=$NEXT_STEP
|
||||||
|
NEXT_STEP="$(file -bh $THIS_COMMAND | cut -d' ' -f4-)"
|
||||||
|
if [ "${NEXT_STEP:0:1}" != '/' ]; then
|
||||||
|
NEXT_STEP="${THIS_COMMAND%/*}/$NEXT_STEP"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "\n$THIS_COMMAND"
|
||||||
|
done
|
||||||
|
echo $THIS_ARGUMENTS
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
THIS_COMMAND="$(realpath $THIS_COMMAND)"
|
||||||
|
if (( $SCRIPT_MODE )); then
|
||||||
|
echo -n "$THIS_COMMAND$THIS_ARGUMENTS"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "$* is resolved to:\n$THIS_COMMAND$THIS_ARGUMENTS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Grep a keyword at the beginning of a line (ignoring whitespace) in a man page
|
||||||
|
function mangrep() {
|
||||||
|
mangrep_file="$1"
|
||||||
|
mangrep_pattern="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
man -P 'less -p "^ *'"${mangrep_pattern}\"" "$@" "${mangrep_file}"
|
||||||
|
unset mangrep_{file,pattern}
|
||||||
|
}
|
||||||
|
|
||||||
|
## Grep in zsh history file
|
||||||
|
function histgrep() {
|
||||||
|
grep "$@" "${HISTFILE:-$HOME/.zsh_history}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function format() {
|
||||||
|
# TODO: respect manual changes made in meld
|
||||||
|
CLANG_FORMAT_FILE="$HOME/Projects/C/.clang.format"
|
||||||
|
FORMAT="{$(sed -E '/^\s*$/d' "$CLANG_FORMAT_FILE" | tr '\n' ',' | sed 's/,$//')}"
|
||||||
|
if [ $# -eq 1 ]; then
|
||||||
|
meld <(clang-format -style="$FORMAT" $1) $1
|
||||||
|
fi
|
||||||
|
echo -n "Are you happy? [yn] "
|
||||||
|
read yn
|
||||||
|
if [ $yn = "y" ]; then
|
||||||
|
clang-format -i -style="$FORMAT" $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function urlenc() {
|
||||||
|
python3 -c "from urllib import parse; print(parse.quote('$@'), end='')"
|
||||||
|
}
|
||||||
|
|
||||||
|
function urldec() {
|
||||||
|
python3 -c "from urllib import parse; print(parse.unquote('$@'), end='')"
|
||||||
|
}
|
||||||
45
.config/zsh/plugins/functionsPre.zsh
Normal file
45
.config/zsh/plugins/functionsPre.zsh
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created: 2019-10-27 (originally 2019-08-28 as functions.zsh)
|
||||||
|
|
||||||
|
## List items in trash if no argument is specified
|
||||||
|
function _trash_list_default() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
trash-list
|
||||||
|
else
|
||||||
|
\trash "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Open nemo in current directory if no argument is specified
|
||||||
|
function _nemo_wd_default() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
\nemo ./
|
||||||
|
else
|
||||||
|
\nemo "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## ls function that prints hidden files when there are no regular files
|
||||||
|
## or if we are in a directory that matches the regex in LS_SHOW_ALL_DIRS
|
||||||
|
function _ls_show_hidden() {
|
||||||
|
# Can be overwritten by settings it before calling
|
||||||
|
LS_SHOW_ALL_DIRS=${LS_SHOW_ALL_DIRS:-"dotfiles|\.config"}
|
||||||
|
|
||||||
|
# if a path is given, target will contain the given directory or the directory in which the
|
||||||
|
# given file is located
|
||||||
|
local target
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [ -d "$arg" ]; then
|
||||||
|
target="$arg"
|
||||||
|
break
|
||||||
|
elif [ -d "${arg%/*}" ]; then
|
||||||
|
target="${arg%/*}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ -z "$(command ls "$@")" || "$( (cd "$target"; pwd) )" =~ "${LS_SHOW_ALL_DIRS:-^$}" ]]; then
|
||||||
|
command ls -A "$@"
|
||||||
|
else
|
||||||
|
command ls "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
75
.config/zsh/plugins/keys.zsh
Normal file
75
.config/zsh/plugins/keys.zsh
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created: 2019-04-17
|
||||||
|
|
||||||
|
## Setup keybindings
|
||||||
|
bindkey -v
|
||||||
|
# no delay when switching into NORMAL
|
||||||
|
export KEYTIMEOUT=1
|
||||||
|
|
||||||
|
## History
|
||||||
|
## Alternatives to check out: {up,down}-line-or-search
|
||||||
|
bindkey '^[[A' history-substring-search-up # up
|
||||||
|
bindkey '^[[B' history-substring-search-down # down
|
||||||
|
bindkey '^R' history-incremental-search-backward
|
||||||
|
|
||||||
|
## Navigation
|
||||||
|
bindkey '^[[Z' reverse-menu-complete # shift-tab
|
||||||
|
bindkey '^K' kill-whole-line # ctrl-K
|
||||||
|
bindkey '^Q' push-input # ctrl-Q
|
||||||
|
bindkey '\e[H' beginning-of-line # home
|
||||||
|
bindkey '\e[F' end-of-line # end
|
||||||
|
bindkey -v '^?' backward-delete-char # normal delete not vim-bac...
|
||||||
|
bindkey '^[[3~' delete-char # map delete key
|
||||||
|
bindkey '^[[1;5D' backward-word # ctrl-left
|
||||||
|
bindkey '^[[1;5C' forward-word # ctrl-right
|
||||||
|
bindkey '^H' backward-kill-word # ctrl-backspace
|
||||||
|
bindkey '^[[3;5~' kill-word # ctrl-delete
|
||||||
|
|
||||||
|
## From https://github.com/nicoulaj/dotfiles/blob/1c7dd1b621bc8bae895bafc438562482ea245d7e/.config/zsh/functions/widgets/rationalize-dots
|
||||||
|
function _expandDots {
|
||||||
|
#[[ $LBUFFER = *.. ]] && LBUFFER+=/.. || LBUFFER+=.
|
||||||
|
setopt localoptions nonomatch
|
||||||
|
local MATCH dir split
|
||||||
|
split=(${(z)LBUFFER})
|
||||||
|
(( $#split > 1 )) && dir=$split[-1] || dir=$split
|
||||||
|
if [[ $LBUFFER =~ '(^|/| | |'$'\n''|\||;|&)\.\.$' ]]; then
|
||||||
|
LBUFFER+=/
|
||||||
|
zle self-insert
|
||||||
|
zle self-insert
|
||||||
|
[[ -e $dir ]] && zle -M ${dir:a:h}
|
||||||
|
elif [[ $LBUFFER[-1] == '.' ]]; then
|
||||||
|
zle self-insert
|
||||||
|
[[ -e $dir ]] && zle -M ${dir:a:h}
|
||||||
|
else
|
||||||
|
zle self-insert
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
#autoload _expandDots
|
||||||
|
zle -N _expandDots
|
||||||
|
bindkey . _expandDots
|
||||||
|
|
||||||
|
## Support selecting with shift and the keyboard
|
||||||
|
## Does not quite work yet
|
||||||
|
shift-arrow() {
|
||||||
|
((REGION_ACTIVE)) || zle set-mark-command
|
||||||
|
zle $1
|
||||||
|
}
|
||||||
|
shift-left() shift-arrow backward-char
|
||||||
|
shift-right() shift-arrow forward-char
|
||||||
|
shift-left-word() shift-arrow backward-word
|
||||||
|
shift-right-word() shift-arrow forward-word
|
||||||
|
toggle-select() zle set-mark-command
|
||||||
|
#select-all()
|
||||||
|
zle -N shift-left
|
||||||
|
zle -N shift-right
|
||||||
|
zle -N shift-left-word
|
||||||
|
zle -N shift-right-word
|
||||||
|
zle -N toggle-select
|
||||||
|
|
||||||
|
bindkey '^[[1;2D' shift-left
|
||||||
|
bindkey '^[[1;2C' shift-right
|
||||||
|
bindkey '^[[1;6D' shift-left-word
|
||||||
|
bindkey '^[[1;6C' shift-right-word
|
||||||
|
|
||||||
|
# bindkey '^S' toggle-select
|
||||||
|
# bindkey '^A' select-all
|
||||||
858
.config/zsh/plugins/p10k.zsh-theme
Normal file
858
.config/zsh/plugins/p10k.zsh-theme
Normal file
@@ -0,0 +1,858 @@
|
|||||||
|
# Generated by Powerlevel10k configuration wizard on 2019-11-06 at 18:34 CET.
|
||||||
|
# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 17238.
|
||||||
|
# Wizard options: nerdfont-complete + powerline, small icons, lean, time, 2 lines,
|
||||||
|
# disconnected, sparse, few icons, concise.
|
||||||
|
# Type `p10k configure` to generate another config.
|
||||||
|
#
|
||||||
|
# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate
|
||||||
|
# your own config based on it.
|
||||||
|
#
|
||||||
|
# Tip: Looking for a nice color? Here's a one-liner to print colormap.
|
||||||
|
#
|
||||||
|
# for i in {0..255}; do print -Pn "%${i}F${(l:3::0:)i}%f " ${${(M)$((i%8)):#7}:+$'\n'}; done
|
||||||
|
|
||||||
|
# Temporarily change options.
|
||||||
|
'builtin' 'local' '-a' 'p10k_config_opts'
|
||||||
|
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
|
||||||
|
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
|
||||||
|
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
|
||||||
|
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
|
||||||
|
|
||||||
|
() {
|
||||||
|
emulate -L zsh
|
||||||
|
setopt no_unset extended_glob
|
||||||
|
zmodload zsh/langinfo
|
||||||
|
if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then
|
||||||
|
local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Unset all configuration options. This allows you to apply configiguration changes without
|
||||||
|
# restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
|
||||||
|
unset -m 'POWERLEVEL9K_*'
|
||||||
|
|
||||||
|
# The list of segments shown on the left. Fill it with the most important segments.
|
||||||
|
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||||
|
# =========================[ Line #1 ]=========================
|
||||||
|
# os_icon # os identifier
|
||||||
|
dir # current directory
|
||||||
|
vcs # git status
|
||||||
|
# =========================[ Line #2 ]=========================
|
||||||
|
newline
|
||||||
|
prompt_char # prompt symbol
|
||||||
|
)
|
||||||
|
|
||||||
|
# The list of segments shown on the right. Fill it with less important segments.
|
||||||
|
# Right prompt on the last prompt line (where you are typing your commands) gets
|
||||||
|
# automatically hidden when the input line reaches it. Right prompt above the
|
||||||
|
# last prompt line gets hidden if it would overlap with left prompt.
|
||||||
|
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
||||||
|
# =========================[ Line #1 ]=========================
|
||||||
|
status # exit code of the last command
|
||||||
|
command_execution_time # duration of the last command
|
||||||
|
background_jobs # presence of background jobs
|
||||||
|
# direnv # direnv status (https://direnv.net/)
|
||||||
|
virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
|
||||||
|
anaconda # conda environment (https://conda.io/)
|
||||||
|
pyenv # python environment (https://github.com/pyenv/pyenv)
|
||||||
|
# nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
|
||||||
|
# nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
|
||||||
|
# nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
|
||||||
|
# node_version # node.js version
|
||||||
|
# go_version # go version (https://golang.org)
|
||||||
|
# rust_version # rustc version (https://www.rust-lang.org)
|
||||||
|
# dotnet_version # .NET version (https://dotnet.microsoft.com)
|
||||||
|
# rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv)
|
||||||
|
# rvm # ruby version from rvm (https://rvm.io)
|
||||||
|
# kubecontext # current kubernetes context (https://kubernetes.io/)
|
||||||
|
# terraform # terraform workspace (https://www.terraform.io)
|
||||||
|
# aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
|
||||||
|
# aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
|
||||||
|
# azure # azure account name (https://docs.microsoft.com/en-us/cli/azure)
|
||||||
|
context # user@hostname
|
||||||
|
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
|
||||||
|
ranger # ranger shell (https://github.com/ranger/ranger)
|
||||||
|
# vpn_ip # virtual private network indicator
|
||||||
|
# ram # free RAM
|
||||||
|
# load # CPU load
|
||||||
|
time # current time
|
||||||
|
# =========================[ Line #2 ]=========================
|
||||||
|
newline
|
||||||
|
# public_ip # public IP address
|
||||||
|
# proxy # system-wide http/https/ftp proxy
|
||||||
|
battery # internal battery
|
||||||
|
# example # example user-defined segment (see prompt_example function below)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Basic style options that define the overall look of your prompt. You probably don't want to
|
||||||
|
# change them.
|
||||||
|
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
|
||||||
|
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
|
||||||
|
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
|
||||||
|
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
|
||||||
|
|
||||||
|
# To disable default icons for all segments, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION=''.
|
||||||
|
#
|
||||||
|
# To enable default icons for all segments, don't define POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
|
||||||
|
# or set it to '${P9K_VISUAL_IDENTIFIER}'.
|
||||||
|
#
|
||||||
|
# To remove spaces from all default icons, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION
|
||||||
|
# to '${P9K_VISUAL_IDENTIFIER// }'. You'll know that you you need this option if you see extra
|
||||||
|
# spaces after icons.
|
||||||
|
#
|
||||||
|
# To enable default icons for one segment (e.g., dir), set
|
||||||
|
# POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'.
|
||||||
|
#
|
||||||
|
# To assign a specific icon to one segment (e.g., dir), set
|
||||||
|
# POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='⭐'.
|
||||||
|
#
|
||||||
|
# To assign a specific icon to a segment in a given state (e.g., dir in state NOT_WRITABLE),
|
||||||
|
# set POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'.
|
||||||
|
#
|
||||||
|
# Note: You can use $'\u2B50' instead of '⭐'. It's especially convenient when specifying
|
||||||
|
# icons that your text editor cannot render. Don't forget to put $ and use single quotes when
|
||||||
|
# defining icons via Unicode codepoints.
|
||||||
|
#
|
||||||
|
# Note: Many default icons cannot be displayed with system fonts. You'll need to install a
|
||||||
|
# capable font to use them. See POWERLEVEL9K_MODE below.
|
||||||
|
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION=''
|
||||||
|
|
||||||
|
# This option makes a difference only when default icons are enabled for all or some prompt
|
||||||
|
# segments (see POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION above). LOCK_ICON can be printed as
|
||||||
|
# $'\uE0A2', $'\uE138' or $'\uF023' depending on POWERLEVEL9K_MODE. The correct value of this
|
||||||
|
# parameter depends on the provider of the font your terminal is using.
|
||||||
|
#
|
||||||
|
# Font Provider | POWERLEVEL9K_MODE
|
||||||
|
# ---------------------------------+-------------------
|
||||||
|
# Powerline | powerline
|
||||||
|
# Font Awesome | awesome-fontconfig
|
||||||
|
# Adobe Source Code Pro | awesome-fontconfig
|
||||||
|
# Source Code Pro | awesome-fontconfig
|
||||||
|
# Awesome-Terminal Fonts (regular) | awesome-fontconfig
|
||||||
|
# Awesome-Terminal Fonts (patched) | awesome-patched
|
||||||
|
# Nerd Fonts | nerdfont-complete
|
||||||
|
# Other | compatible
|
||||||
|
#
|
||||||
|
# If this looks overwhelming, either stick with a preinstalled system font and set
|
||||||
|
# POWERLEVEL9K_MODE=compatible, or install the recommended Powerlevel10k font from
|
||||||
|
# https://github.com/romkatv/powerlevel10k/#recommended-meslo-nerd-font-patched-for-powerlevel10k
|
||||||
|
# and set POWERLEVEL9K_MODE=nerdfont-complete.
|
||||||
|
typeset -g POWERLEVEL9K_MODE=nerdfont-complete
|
||||||
|
|
||||||
|
# When set to true, icons appear before content on both sides of the prompt. When set
|
||||||
|
# to false, icons go after content. If empty or not set, icons go before content in the left
|
||||||
|
# prompt and after content in the right prompt.
|
||||||
|
#
|
||||||
|
# You can also override it for a specific segment:
|
||||||
|
#
|
||||||
|
# POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false
|
||||||
|
#
|
||||||
|
# Or for a specific segment in specific state:
|
||||||
|
#
|
||||||
|
# POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false
|
||||||
|
typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true
|
||||||
|
|
||||||
|
# Add an empty line before each prompt.
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
||||||
|
|
||||||
|
# Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll
|
||||||
|
# probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and
|
||||||
|
# POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below.
|
||||||
|
typeset -g POWERLEVEL9K_SHOW_RULER=false
|
||||||
|
typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·'
|
||||||
|
typeset -g POWERLEVEL9K_RULER_FOREGROUND=240
|
||||||
|
|
||||||
|
# Filler between left and right prompt on the first prompt line. You can set it to '·' or '─'
|
||||||
|
# to make it easier to see the alignment between left and right prompt and to separate prompt
|
||||||
|
# from command output. It serves the same purpose as ruler (see above) without increasing
|
||||||
|
# the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false
|
||||||
|
# if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact
|
||||||
|
# prompt.
|
||||||
|
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
|
||||||
|
if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
|
||||||
|
# The color of the filler.
|
||||||
|
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240
|
||||||
|
# Add a space between the end of left prompt and the filler.
|
||||||
|
typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' '
|
||||||
|
# Add a space between the filler and the start of right prompt.
|
||||||
|
typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' '
|
||||||
|
# Start filler from the edge of the screen if there are no left segments on the first line.
|
||||||
|
typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
|
||||||
|
# End filler on the edge of the screen if there are no right segments on the first line.
|
||||||
|
typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
#################################[ os_icon: os identifier ]##################################
|
||||||
|
# OS identifier color.
|
||||||
|
typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=
|
||||||
|
# Make the icon bold.
|
||||||
|
typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='%B${P9K_CONTENT// }'
|
||||||
|
|
||||||
|
################################[ prompt_char: prompt symbol ]################################
|
||||||
|
# Green prompt symbol if the last command succeeded.
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=76
|
||||||
|
# Red prompt symbol if the last command failed.
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=196
|
||||||
|
# Default prompt symbol (❯).
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='>' # $'\e[5 q'
|
||||||
|
# Prompt symbol in command vi mode. (❮)
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION=$'<' # $'\e[1 q'
|
||||||
|
# Prompt symbol in visual vi mode.
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION=$'Ⅴ' # $'\e[3 q'
|
||||||
|
# Prompt symbol in overwrite vi mode.
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶'
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true
|
||||||
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=''
|
||||||
|
|
||||||
|
##################################[ dir: current directory ]##################################
|
||||||
|
# Default current directory color. (31)
|
||||||
|
typeset -g POWERLEVEL9K_DIR_FOREGROUND=39
|
||||||
|
# If directory is too long, shorten some of its segments to the shortest possible unique
|
||||||
|
# prefix. The shortened directory can be tab-completed to the original.
|
||||||
|
typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
|
||||||
|
# Replace removed segment suffixes with this symbol.
|
||||||
|
typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
|
||||||
|
# Color of the shortened directory segments.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103
|
||||||
|
# Color of the anchor directory segments. Anchor segments are never shortened. The first
|
||||||
|
# segment is always an anchor.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39
|
||||||
|
# Display anchor directory segments in bold.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
|
||||||
|
# Don't shorten directories that contain any of these files. They are anchors.
|
||||||
|
local anchor_files=(
|
||||||
|
.bzr
|
||||||
|
.citc
|
||||||
|
.git
|
||||||
|
.hg
|
||||||
|
.node-version
|
||||||
|
.python-version
|
||||||
|
.ruby-version
|
||||||
|
.shorten_folder_marker
|
||||||
|
.svn
|
||||||
|
.terraform
|
||||||
|
CVS
|
||||||
|
Cargo.toml
|
||||||
|
composer.json
|
||||||
|
go.mod
|
||||||
|
package.json
|
||||||
|
)
|
||||||
|
typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
|
||||||
|
# Don't shorten this many last directory segments. They are anchors.
|
||||||
|
typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
|
||||||
|
# Shorten directory if it's longer than this even if there is space for it. The value can
|
||||||
|
# be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
|
||||||
|
# directory will be shortened only when prompt doesn't fit or when other parameters demand it
|
||||||
|
# (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
|
||||||
|
typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80
|
||||||
|
# When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this
|
||||||
|
# many columns for typing commands.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40
|
||||||
|
# When `dir` segment is on the last prompt line, try to shorten it enough to leave at least
|
||||||
|
# COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50
|
||||||
|
# If set to true, embed a hyperlink into the directory. Useful for quickly
|
||||||
|
# opening a directory in the file manager simply by clicking the link.
|
||||||
|
# Can also be handy when the directory is shortened, as it allows you to see
|
||||||
|
# the full directory that was used in previous commands.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_HYPERLINK=false
|
||||||
|
|
||||||
|
# Enable special styling for non-writable directories.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=true
|
||||||
|
# Show this icon when the current directory is not writable. POWERLEVEL9K_DIR_SHOW_WRITABLE
|
||||||
|
# above must be set to true for this parameter to have effect.
|
||||||
|
typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='#'
|
||||||
|
|
||||||
|
# Custom prefix.
|
||||||
|
# typeset -g POWERLEVEL9K_DIR_PREFIX='%fin '
|
||||||
|
|
||||||
|
# POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons for different directories.
|
||||||
|
# It must be an array with 3 * N elements. Each triplet consists of:
|
||||||
|
#
|
||||||
|
# 1. A pattern against which the current directory is matched. Matching is done with
|
||||||
|
# extended_glob option enabled.
|
||||||
|
# 2. Directory class for the purpose of styling.
|
||||||
|
# 3. Icon.
|
||||||
|
#
|
||||||
|
# Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there
|
||||||
|
# are no matches, the directory will have no icon.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# typeset -g POWERLEVEL9K_DIR_CLASSES=(
|
||||||
|
# '~/work(/*)#' WORK '(╯°□°)╯︵ ┻━┻'
|
||||||
|
# '~(/*)#' HOME '⌂'
|
||||||
|
# '*' DEFAULT '')
|
||||||
|
#
|
||||||
|
# With these settings, the current directory in the prompt may look like this:
|
||||||
|
#
|
||||||
|
# (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent
|
||||||
|
#
|
||||||
|
# Or like this:
|
||||||
|
#
|
||||||
|
# ⌂ ~/best/powerlevel10k
|
||||||
|
#
|
||||||
|
# You can also set different colors for directories of different classes. Remember to override
|
||||||
|
# FOREGROUND, SHORTENED_FOREGROUND and ANCHOR_FOREGROUND for every directory class that you wish
|
||||||
|
# to have its own color.
|
||||||
|
#
|
||||||
|
# typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31
|
||||||
|
# typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103
|
||||||
|
# typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39
|
||||||
|
|
||||||
|
typeset -g POWERLEVEL9K_DIR_CLASSES=()
|
||||||
|
|
||||||
|
#####################################[ vcs: git status ]######################################
|
||||||
|
# Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='| '
|
||||||
|
POWERLEVEL9K_VCS_BRANCH_ICON=${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}
|
||||||
|
|
||||||
|
# Untracked files icon. It's really a question mark, your font isn't broken.
|
||||||
|
# Change the value of this parameter to show a different icon.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
|
||||||
|
POWERLEVEL9K_VCS_UNTRACKED_ICON=${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}
|
||||||
|
|
||||||
|
# Formatter for Git status.
|
||||||
|
#
|
||||||
|
# Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42.
|
||||||
|
#
|
||||||
|
# You can edit the function to customize how Git status looks.
|
||||||
|
#
|
||||||
|
# VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
|
||||||
|
# https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
|
||||||
|
function my_git_formatter() {
|
||||||
|
emulate -L zsh
|
||||||
|
|
||||||
|
if [[ -n $P9K_CONTENT ]]; then
|
||||||
|
# If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
|
||||||
|
# gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
|
||||||
|
typeset -g my_git_format=$P9K_CONTENT
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( $1 )); then
|
||||||
|
# Styling for up-to-date Git status.
|
||||||
|
local meta='%f' # default foreground
|
||||||
|
local clean='%76F' # green foreground
|
||||||
|
local modified='%178F' # yellow foreground
|
||||||
|
local untracked='%39F' # blue foreground
|
||||||
|
local conflicted='%196F' # red foreground
|
||||||
|
else
|
||||||
|
# Styling for incomplete and stale Git status.
|
||||||
|
local meta='%244F' # grey foreground
|
||||||
|
local clean='%244F' # grey foreground
|
||||||
|
local modified='%244F' # grey foreground
|
||||||
|
local untracked='%244F' # grey foreground
|
||||||
|
local conflicted='%244F' # grey foreground
|
||||||
|
fi
|
||||||
|
|
||||||
|
local res
|
||||||
|
local where # branch name, tag or commit
|
||||||
|
if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
|
||||||
|
res+="${clean}${POWERLEVEL9K_VCS_BRANCH_ICON}"
|
||||||
|
where=${(V)VCS_STATUS_LOCAL_BRANCH}
|
||||||
|
elif [[ -n $VCS_STATUS_TAG ]]; then
|
||||||
|
res+="${meta}#"
|
||||||
|
where=${(V)VCS_STATUS_TAG}
|
||||||
|
else
|
||||||
|
res+="${meta}@"
|
||||||
|
where=${VCS_STATUS_COMMIT[1,8]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If local branch name or tag is at most 32 characters long, show it in full.
|
||||||
|
# Otherwise show the first 12 … the last 12.
|
||||||
|
(( $#where > 32 )) && where[13,-13]="…"
|
||||||
|
res+="${clean}${where//\%/%%}" # escape %
|
||||||
|
|
||||||
|
# Show tracking branch name if it differs from local branch.
|
||||||
|
if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
|
||||||
|
res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" # escape %
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ⇣42 if behind the remote.
|
||||||
|
(( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}"
|
||||||
|
# ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42.
|
||||||
|
(( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" "
|
||||||
|
(( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}"
|
||||||
|
# *42 if have stashes.
|
||||||
|
(( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}"
|
||||||
|
# 'merge' if the repo is in an unusual state.
|
||||||
|
[[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}"
|
||||||
|
# ~42 if have merge conflicts.
|
||||||
|
(( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}"
|
||||||
|
# +42 if have staged changes.
|
||||||
|
(( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}"
|
||||||
|
# !42 if have unstaged changes.
|
||||||
|
(( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}"
|
||||||
|
# ?42 if have untracked files. It's really a question mark, your font isn't broken.
|
||||||
|
# See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon.
|
||||||
|
# Remove the next line if you don't want to see untracked files at all.
|
||||||
|
(( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}"
|
||||||
|
|
||||||
|
typeset -g my_git_format=$res
|
||||||
|
}
|
||||||
|
functions -M my_git_formatter 2>/dev/null
|
||||||
|
|
||||||
|
# Disable the default Git status formatting.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
|
||||||
|
# Install our own Git status formatter.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'
|
||||||
|
typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}'
|
||||||
|
# Enable counters for staged, unstaged, etc.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
|
||||||
|
|
||||||
|
# Icon color.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76
|
||||||
|
typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244
|
||||||
|
# Custom icon.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION=
|
||||||
|
# Custom prefix.
|
||||||
|
# typeset -g POWERLEVEL9K_VCS_PREFIX='%fon '
|
||||||
|
|
||||||
|
# Show status of repositories of these types. You can add svn and/or hg if you are
|
||||||
|
# using them. If you do, your prompt may become slow even when your current directory
|
||||||
|
# isn't in an svn or hg reposotiry.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
|
||||||
|
|
||||||
|
# These settings are used for respositories other than Git or when gitstatusd fails and
|
||||||
|
# Powerlevel10k has to fall back to using vcs_info.
|
||||||
|
typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76
|
||||||
|
typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76
|
||||||
|
typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178
|
||||||
|
|
||||||
|
##########################[ status: exit code of the last command ]###########################
|
||||||
|
# Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and
|
||||||
|
# style them independently from the regular OK and ERROR state.
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true
|
||||||
|
|
||||||
|
# Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
|
||||||
|
# it will signify success by turning green.
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_OK=false
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70
|
||||||
|
# typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔'
|
||||||
|
|
||||||
|
# Status when some part of a pipe command fails but the overall exit status is zero. It may look
|
||||||
|
# like this: 1|0.
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70
|
||||||
|
# typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔'
|
||||||
|
|
||||||
|
# Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
|
||||||
|
# it will signify error by turning red.
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_ERROR=true
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160
|
||||||
|
# typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='↵'
|
||||||
|
|
||||||
|
# Status when the last command was terminated by a signal.
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160
|
||||||
|
# Use terse signal names: "INT" instead of "SIGINT(2)".
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
|
||||||
|
# typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='↵'
|
||||||
|
|
||||||
|
# Status when some part of a pipe command fails and the overall exit status is also non-zero.
|
||||||
|
# It may look like this: 1|0.
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true
|
||||||
|
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160
|
||||||
|
# typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='↵'
|
||||||
|
|
||||||
|
###################[ command_execution_time: duration of the last command ]###################
|
||||||
|
# Show duration of the last command if takes longer than this many seconds.
|
||||||
|
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1
|
||||||
|
# Show this many fractional digits. Zero means round to seconds.
|
||||||
|
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=2
|
||||||
|
# Execution time color.
|
||||||
|
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101
|
||||||
|
# Duration format: 1d 2h 3m 4s.
|
||||||
|
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
|
||||||
|
# Custom icon.
|
||||||
|
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION=
|
||||||
|
# Custom prefix.
|
||||||
|
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook '
|
||||||
|
|
||||||
|
#######################[ background_jobs: presence of background jobs ]#######################
|
||||||
|
# Don't show the number of background jobs.
|
||||||
|
typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
|
||||||
|
# Background jobs color.
|
||||||
|
typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70
|
||||||
|
# Icon to show when there are background jobs.
|
||||||
|
typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='☰ '
|
||||||
|
|
||||||
|
#######################[ direnv: direnv status (https://direnv.net/) ]########################
|
||||||
|
# Direnv color.
|
||||||
|
typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178
|
||||||
|
# Icon to show when direnv is active.
|
||||||
|
typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
|
||||||
|
|
||||||
|
##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]###########
|
||||||
|
# NordVPN connection indicator color.
|
||||||
|
typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39
|
||||||
|
# Hide NordVPN connection indicator when not connected.
|
||||||
|
typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION=
|
||||||
|
typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION=
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#################[ ranger: ranger shell (https://github.com/ranger/ranger) ]##################
|
||||||
|
# Ranger shell color.
|
||||||
|
typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
######################################[ ram: free RAM ]#######################################
|
||||||
|
# RAM color.
|
||||||
|
typeset -g POWERLEVEL9K_RAM_FOREGROUND=66
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
######################################[ load: CPU load ]######################################
|
||||||
|
# Show average CPU load over this many last minutes. Valid values are 1, 5 and 15.
|
||||||
|
typeset -g POWERLEVEL9K_LOAD_WHICH=5
|
||||||
|
# Load color when load is under 50%.
|
||||||
|
typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66
|
||||||
|
# Load color when load is between 50% and 70%.
|
||||||
|
typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178
|
||||||
|
# Load color when load is over 70%.
|
||||||
|
typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
##################################[ context: user@hostname ]##################################
|
||||||
|
# Default context color.
|
||||||
|
typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180
|
||||||
|
# Default context format: %n is username, %m is hostname.
|
||||||
|
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m'
|
||||||
|
|
||||||
|
# Context color when running with privileges.
|
||||||
|
typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178
|
||||||
|
# Context format when running with privileges: bold user@hostname.
|
||||||
|
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m'
|
||||||
|
|
||||||
|
# Don't show context unless running with privileges or in SSH.
|
||||||
|
# Tip: Remove the next line to always show context.
|
||||||
|
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
|
||||||
|
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
# Custom prefix.
|
||||||
|
# typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith '
|
||||||
|
|
||||||
|
###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
|
||||||
|
# Python virtual environment color.
|
||||||
|
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37
|
||||||
|
# Don't show Python version next to the virtual environment name.
|
||||||
|
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
|
||||||
|
# Separate environment name from Python version only with a space.
|
||||||
|
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#####################[ anaconda: conda environment (https://conda.io/) ]######################
|
||||||
|
# Anaconda environment color.
|
||||||
|
typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37
|
||||||
|
# Don't show Python version next to the anaconda environment name.
|
||||||
|
typeset -g POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION=false
|
||||||
|
# Separate environment name from Python version only with a space.
|
||||||
|
typeset -g POWERLEVEL9K_ANACONDA_{LEFT,RIGHT}_DELIMITER=
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################
|
||||||
|
# Pyenv color.
|
||||||
|
typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37
|
||||||
|
# Don't show the current Python version if it's the same as global.
|
||||||
|
typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]##########
|
||||||
|
# Nodenv color.
|
||||||
|
typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70
|
||||||
|
# Don't show node version if it's the same as global: $(nodenv version-name) == $(nodenv global).
|
||||||
|
typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
|
||||||
|
# Nvm color.
|
||||||
|
typeset -g POWERLEVEL9K_NVM_FOREGROUND=70
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############
|
||||||
|
# Nodeenv color.
|
||||||
|
typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70
|
||||||
|
# Don't show Node version next to the environment name.
|
||||||
|
typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false
|
||||||
|
# Separate environment name from Node version only with a space.
|
||||||
|
typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER=
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
##############################[ node_version: node.js version ]###############################
|
||||||
|
# Node version color.
|
||||||
|
typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70
|
||||||
|
# Show node version only when in a directory tree containing package.json.
|
||||||
|
typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#######################[ go_version: go version (https://golang.org) ]########################
|
||||||
|
# Go version color.
|
||||||
|
typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37
|
||||||
|
# Show go version only when in a go project subdirectory.
|
||||||
|
typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#################[ rust_version: rustc version (https://www.rust-lang.org) ]##################
|
||||||
|
# Rust version color.
|
||||||
|
typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37
|
||||||
|
# Show rust version only when in a rust project subdirectory.
|
||||||
|
typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################
|
||||||
|
# .NET version color.
|
||||||
|
typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134
|
||||||
|
# Show .NET version only when in a .NET project subdirectory.
|
||||||
|
typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]##############
|
||||||
|
# Rbenv color.
|
||||||
|
typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168
|
||||||
|
# Don't show ruby version if it's the same as global: $(rbenv version-name) == $(rbenv global).
|
||||||
|
typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#######################[ rvm: ruby version from rvm (https://rvm.io) ]########################
|
||||||
|
# Rvm color.
|
||||||
|
typeset -g POWERLEVEL9K_RVM_FOREGROUND=168
|
||||||
|
# Don't show @gemset at the end.
|
||||||
|
typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false
|
||||||
|
# Don't show ruby- at the front.
|
||||||
|
typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
|
||||||
|
# Kubernetes context classes for the purpose of using different colors, icons and expansions with
|
||||||
|
# different contexts.
|
||||||
|
#
|
||||||
|
# POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element
|
||||||
|
# in each pair defines a pattern against which the current kubernetes context gets matched.
|
||||||
|
# More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
|
||||||
|
# that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters,
|
||||||
|
# you'll see this value in your prompt. The second element of each pair in
|
||||||
|
# POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The
|
||||||
|
# first match wins.
|
||||||
|
#
|
||||||
|
# For example, given these settings:
|
||||||
|
#
|
||||||
|
# typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
|
||||||
|
# '*prod*' PROD
|
||||||
|
# '*test*' TEST
|
||||||
|
# '*' DEFAULT)
|
||||||
|
#
|
||||||
|
# If your current kubernetes context is "deathray-testing/default", its class is TEST
|
||||||
|
# because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'.
|
||||||
|
#
|
||||||
|
# You can define different colors, icons and content expansions for different classes:
|
||||||
|
#
|
||||||
|
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28
|
||||||
|
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
|
||||||
|
typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
|
||||||
|
# '*prod*' PROD # These values are examples that are unlikely
|
||||||
|
# '*test*' TEST # to match your needs. Customize them as needed.
|
||||||
|
'*' DEFAULT)
|
||||||
|
typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134
|
||||||
|
# typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
# Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext
|
||||||
|
# segment. Parameter expansions are very flexible and fast, too. See reference:
|
||||||
|
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
|
||||||
|
#
|
||||||
|
# Within the expansion the following parameters are always available:
|
||||||
|
#
|
||||||
|
# - P9K_CONTENT The content that would've been displayed if there was no content
|
||||||
|
# expansion defined.
|
||||||
|
# - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the
|
||||||
|
# output of `kubectl config get-contexts`.
|
||||||
|
# - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the
|
||||||
|
# output of `kubectl config get-contexts`.
|
||||||
|
# - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE
|
||||||
|
# in the output of `kubectl config get-contexts`. If there is no
|
||||||
|
# namespace, the parameter is set to "default".
|
||||||
|
#
|
||||||
|
# If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS),
|
||||||
|
# the following extra parameters are available:
|
||||||
|
#
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks".
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID.
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone.
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster.
|
||||||
|
#
|
||||||
|
# P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example,
|
||||||
|
# if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01":
|
||||||
|
#
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_NAME=gke
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
|
||||||
|
#
|
||||||
|
# If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01":
|
||||||
|
#
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_NAME=eks
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1
|
||||||
|
# - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
|
||||||
|
typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
|
||||||
|
# Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
|
||||||
|
POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
|
||||||
|
# Append the current context's namespace if it's not "default".
|
||||||
|
POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
|
||||||
|
|
||||||
|
# Custom prefix.
|
||||||
|
# typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat '
|
||||||
|
|
||||||
|
################[ terraform: terraform workspace (https://www.terraform.io) ]#################
|
||||||
|
# Terraform color.
|
||||||
|
typeset -g POWERLEVEL9K_TERRAFORM_FOREGROUND=38
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_TERRAFORM_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
|
||||||
|
# AWS profile color.
|
||||||
|
typeset -g POWERLEVEL9K_AWS_FOREGROUND=208
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_AWS_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
#[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]#
|
||||||
|
# AWS Elastic Beanstalk environment color.
|
||||||
|
typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
|
||||||
|
# Azure account name color.
|
||||||
|
typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
###############################[ public_ip: public IP address ]###############################
|
||||||
|
# Public IP color.
|
||||||
|
typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
########################[ vpn_ip: virtual private network indicator ]#########################
|
||||||
|
# VPN IP color.
|
||||||
|
typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81
|
||||||
|
# When on VPN, show just an icon without the IP address.
|
||||||
|
typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
|
||||||
|
# Regular expression for the VPN network interface. Run ifconfig while on VPN to see the
|
||||||
|
# name of the interface.
|
||||||
|
typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(wg|(.*tun))[0-9]*'
|
||||||
|
# Icon to show when on VPN.
|
||||||
|
typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER// }'
|
||||||
|
|
||||||
|
#########################[ proxy: system-wide http/https/ftp proxy ]##########################
|
||||||
|
# Proxy color.
|
||||||
|
typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68
|
||||||
|
# Custom icon.
|
||||||
|
# typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐'
|
||||||
|
|
||||||
|
################################[ battery: internal battery ]#################################
|
||||||
|
# Show battery in red when it's below this level and not connected to power supply.
|
||||||
|
typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20
|
||||||
|
typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160
|
||||||
|
# Show battery in green when it's charging or fully charged.
|
||||||
|
typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70
|
||||||
|
# Show battery in yellow when it's discharging.
|
||||||
|
typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178
|
||||||
|
# Battery pictograms going from low to high level of charge.
|
||||||
|
typeset -g POWERLEVEL9K_BATTERY_STAGES=$'\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578'
|
||||||
|
# Don't show the remaining time to charge/discharge.
|
||||||
|
typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false
|
||||||
|
|
||||||
|
####################################[ time: current time ]####################################
|
||||||
|
# Current time color. (66)
|
||||||
|
typeset -g POWERLEVEL9K_TIME_FOREGROUND=39
|
||||||
|
# Format for the current time: 09:51:02. See `man 3 strftime`.
|
||||||
|
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
|
||||||
|
# If set to true, time will update when you hit enter. This way prompts for the past
|
||||||
|
# commands will contain the start times of their commands as opposed to the default
|
||||||
|
# behavior where they contain the end times of their preceding commands.
|
||||||
|
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=true
|
||||||
|
# Custom icon.
|
||||||
|
typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION=
|
||||||
|
# Custom prefix.
|
||||||
|
# typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
|
||||||
|
|
||||||
|
# Example of a user-defined prompt segment. Function prompt_example will be called on every
|
||||||
|
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
|
||||||
|
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user.
|
||||||
|
#
|
||||||
|
# Type `p10k help segment` for documentation and a more sophisticated example.
|
||||||
|
function prompt_example() {
|
||||||
|
p10k segment -f 208 -i '⭐' -t 'hello, %n'
|
||||||
|
}
|
||||||
|
|
||||||
|
# User-defined prompt segments may optionally provide an instant_prompt_* function. Its job
|
||||||
|
# is to generate the prompt segment for display in instant prompt. See
|
||||||
|
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
|
||||||
|
#
|
||||||
|
# Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function
|
||||||
|
# and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k
|
||||||
|
# will replay these calls without actually calling instant_prompt_*. It is imperative that
|
||||||
|
# instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this
|
||||||
|
# rule is not observed, the content of instant prompt will be incorrect.
|
||||||
|
#
|
||||||
|
# Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If
|
||||||
|
# instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt.
|
||||||
|
function instant_prompt_example() {
|
||||||
|
# Since prompt_example always makes the same `p10k segment` calls, we can call it from
|
||||||
|
# instant_prompt_example. This will give us the same `example` prompt segment in the instant
|
||||||
|
# and regular prompts.
|
||||||
|
prompt_example
|
||||||
|
}
|
||||||
|
|
||||||
|
# User-defined prompt segments can be customized the same way as built-in segments.
|
||||||
|
# typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208
|
||||||
|
# typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'
|
||||||
|
|
||||||
|
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
|
||||||
|
# when accepting a command line. Supported values:
|
||||||
|
#
|
||||||
|
# - off: Don't change prompt when accepting a command line.
|
||||||
|
# - always: Trim down prompt when accepting a command line.
|
||||||
|
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
|
||||||
|
# typed after changing current working directory.
|
||||||
|
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off
|
||||||
|
|
||||||
|
# Instant prompt mode.
|
||||||
|
#
|
||||||
|
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
|
||||||
|
# it incompatible with your zsh configuration files.
|
||||||
|
# - quiet: Enable instant prompt and don't print warnings when detecting console output
|
||||||
|
# during zsh initialization. Choose this if you've read and understood
|
||||||
|
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
|
||||||
|
# - verbose: Enable instant prompt and print a warning when detecting console output during
|
||||||
|
# zsh initialization. Choose this if you've never tried instant prompt, haven't
|
||||||
|
# seen the warning, or if you are unsure what this all means.
|
||||||
|
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
|
||||||
|
# typeset -g POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES=0
|
||||||
|
|
||||||
|
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
|
||||||
|
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
|
||||||
|
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
|
||||||
|
# really need it.
|
||||||
|
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
|
||||||
|
}
|
||||||
|
|
||||||
|
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
|
||||||
|
'builtin' 'unset' 'p10k_config_opts'
|
||||||
1
.config/zsh/plugins/powerlevel10k
Submodule
1
.config/zsh/plugins/powerlevel10k
Submodule
Submodule .config/zsh/plugins/powerlevel10k added at 8c84041ec7
1
.config/zsh/plugins/stderred
Submodule
1
.config/zsh/plugins/stderred
Submodule
Submodule .config/zsh/plugins/stderred added at 399e3b199c
61
.config/zsh/plugins/transfer.zsh
Normal file
61
.config/zsh/plugins/transfer.zsh
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#
|
||||||
|
# Defines transfer alias and provides easy command line file and folder sharing.
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# Remco Verhoef <remco@dutchcoders.io>
|
||||||
|
#
|
||||||
|
|
||||||
|
curl --version 2>&1 > /dev/null
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Could not find curl."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
transfer() {
|
||||||
|
# check arguments
|
||||||
|
if [ $# -eq 0 ];
|
||||||
|
then
|
||||||
|
echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# get temporarily filename, output is written to this file show progress can be showed
|
||||||
|
tmpfile=$( mktemp -t transferXXX )
|
||||||
|
|
||||||
|
# upload stdin or file
|
||||||
|
file=$1
|
||||||
|
|
||||||
|
if tty -s;
|
||||||
|
then
|
||||||
|
basefile=$(basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
|
||||||
|
|
||||||
|
if [ ! -e $file ];
|
||||||
|
then
|
||||||
|
echo "File $file doesn't exists."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d $file ];
|
||||||
|
then
|
||||||
|
# zip directory and transfer
|
||||||
|
zipfile=$( mktemp -t transferXXX.zip )
|
||||||
|
cd $(dirname $file) && zip -r -q - $(basename $file) >> $zipfile
|
||||||
|
curl --progress-bar --upload-file "$zipfile" "https://transfer.sh/$basefile.zip" >> $tmpfile
|
||||||
|
rm -f $zipfile
|
||||||
|
else
|
||||||
|
# transfer file
|
||||||
|
curl --progress-bar --upload-file "$file" "https://transfer.sh/$basefile" >> $tmpfile
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# transfer pipe
|
||||||
|
curl --progress-bar --upload-file "-" "https://transfer.sh/$file" >> $tmpfile
|
||||||
|
fi
|
||||||
|
|
||||||
|
# cat output link
|
||||||
|
cat $tmpfile
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
rm -f $tmpfile
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1
.config/zsh/plugins/zsh-async
Submodule
1
.config/zsh/plugins/zsh-async
Submodule
Submodule .config/zsh/plugins/zsh-async added at a9ca051109
1
.config/zsh/plugins/zsh-autosuggestions
Submodule
1
.config/zsh/plugins/zsh-autosuggestions
Submodule
Submodule .config/zsh/plugins/zsh-autosuggestions added at ae315ded4d
1
.config/zsh/plugins/zsh-history-substring-search
Submodule
1
.config/zsh/plugins/zsh-history-substring-search
Submodule
Submodule .config/zsh/plugins/zsh-history-substring-search added at 0f80b8eb33
93
.config/zsh/plugins/zsh-prompt-benchmark.plugin.zsh
Normal file
93
.config/zsh/plugins/zsh-prompt-benchmark.plugin.zsh
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# Copyright 2019 Roman Perepelitsa
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# Measures how long it takes for your zsh prompt to render. Roughly speaking,
|
||||||
|
# if you press and hold [ENTER], how many prompts will be printed per second?
|
||||||
|
#
|
||||||
|
# $1 -- Benchmark for this many seconds. Default is 5.
|
||||||
|
# $2 -- Sleep for this many seconds before benchmarking to fill the keyboard input buffer.
|
||||||
|
# This mitigates the problem caused by slow key repeat rate (see below). Default is 10.
|
||||||
|
#
|
||||||
|
# After calling this function in an interactive shell you need to press and hold [ENTER] until
|
||||||
|
# you see benchmark results. It'll take 15 seconds with default arguments. The output also includes
|
||||||
|
# your prompt with all non-ascii characters escaped. This is to enable you to easily share the
|
||||||
|
# results with others (e.g., if you want to complain to your zsh theme provider about high prompt
|
||||||
|
# latency). Not only will they see how fast (or how slow!) your prompt renders but also what it
|
||||||
|
# actually looks like.
|
||||||
|
#
|
||||||
|
# Make sure your repeat key rate is high enough that your shell is unable to keep up. While not
|
||||||
|
# benchmarking, press and hold [ENTER]. If you see empty lines between prompts or if prompts keep
|
||||||
|
# being printed after you release [ENTER], your repeat key rate is sufficient. If it's not,
|
||||||
|
# you can artificially boost it by buffering keyboard input buffer. Your effective key repeat
|
||||||
|
# rate is multiplied by 1 + $2 / $1. With default settings this is 1 + 10 / 5 == 3.
|
||||||
|
function zsh-prompt-benchmark() {
|
||||||
|
typeset -gHF3 _BENCHMARK_PROMPT_DURATION=${1:-5}
|
||||||
|
typeset -gHi _BENCHMARK_PROMPT_WARMUP_DURATION=${2:-10}
|
||||||
|
typeset -gHi _BENCHMARK_PROMPT_SAMPLE_IDX=0
|
||||||
|
typeset -gHF3 _BENCHMARK_PROMPT_START_TIME=0
|
||||||
|
>&2 echo "Enabling prompt benchmarking for ${_BENCHMARK_PROMPT_DURATION}s" \
|
||||||
|
"after buffering keyboard input for ${_BENCHMARK_PROMPT_WARMUP_DURATION}s."
|
||||||
|
>&2 echo "Press and hold [ENTER] until you see benchmark results."
|
||||||
|
add-zsh-hook precmd _zsh_prompt_benchmark_precmd
|
||||||
|
|
||||||
|
typeset -gHf _zsh_prompt_benchmark_precmd() {
|
||||||
|
local -F now=$EPOCHREALTIME
|
||||||
|
((++_BENCHMARK_PROMPT_SAMPLE_IDX))
|
||||||
|
if ((now < _BENCHMARK_PROMPT_START_TIME + _BENCHMARK_PROMPT_DURATION)); then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if (( _BENCHMARK_PROMPT_START_TIME )); then
|
||||||
|
local -i N=$((_BENCHMARK_PROMPT_SAMPLE_IDX - 1))
|
||||||
|
local -F3 T=$((now - _BENCHMARK_PROMPT_START_TIME))
|
||||||
|
local -F2 P=$((1000 * T / N))
|
||||||
|
local LP=$(eval LC_ALL=C printf '%q' \"$PROMPT\")
|
||||||
|
local RP=$(eval LC_ALL=C printf '%q' \"$RPROMPT\")
|
||||||
|
>&2 echo -E "************************************************************"
|
||||||
|
>&2 echo -E " Prompt Benchmark Results "
|
||||||
|
>&2 echo -E "************************************************************"
|
||||||
|
>&2 echo -E "Warmup duration ${_BENCHMARK_PROMPT_WARMUP_DURATION}s"
|
||||||
|
>&2 echo -E "Benchmarked prompts $N"
|
||||||
|
>&2 echo -E "Total time ${T}s"
|
||||||
|
>&2 echo -E "Time per prompt ${P}ms"
|
||||||
|
>&2 echo -E "************************************************************"
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E "PROMPT=$LP"
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E "RPROMPT=$RP"
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E "Tip: To print one of the reported prompts, execute the"
|
||||||
|
>&2 echo -E "following command with \${P} replaced by the prompt string."
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E " print -lP BEGIN \${P} '' END"
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E "For example, here's how you can print the same left prompt"
|
||||||
|
>&2 echo -E "(PROMPT) that was benchmarked:"
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E " print -lP BEGIN $LP END"
|
||||||
|
>&2 echo -E "************************************************************"
|
||||||
|
>&2 echo -E ""
|
||||||
|
>&2 echo -E "Press 'q' to continue..."
|
||||||
|
unset -m "_BENCHMARK_PROMPT_*"
|
||||||
|
unset -f _zsh_prompt_benchmark_precmd
|
||||||
|
add-zsh-hook -D precmd _zsh_prompt_benchmark_precmd
|
||||||
|
local _ && IFS='' read -rsd q _
|
||||||
|
else
|
||||||
|
sleep $_BENCHMARK_PROMPT_WARMUP_DURATION
|
||||||
|
typeset -gHF _BENCHMARK_PROMPT_START_TIME=$EPOCHREALTIME
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zmodload zsh/datetime
|
||||||
|
autoload -Uz add-zsh-hook
|
||||||
1
.config/zsh/plugins/zsh-syntax-highlighting
Submodule
1
.config/zsh/plugins/zsh-syntax-highlighting
Submodule
Submodule .config/zsh/plugins/zsh-syntax-highlighting added at f1b9fbbaf0
30
.config/zsh/plugins/zsh-syntax-highlighting.zsh-theme
Normal file
30
.config/zsh/plugins/zsh-syntax-highlighting.zsh-theme
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
|
||||||
|
## colors: 0-7 standard, 8-15 high-intensity
|
||||||
|
|
||||||
|
## red
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-error]='fg=009,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=009,bold'
|
||||||
|
## green
|
||||||
|
ZSH_HIGHLIGHT_STYLES[arg0]='fg=076'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=076,underline'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=076,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[precommand]='fg=076,underline'
|
||||||
|
## blue
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=012,bold'
|
||||||
|
## yellow
|
||||||
|
ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=011'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=011'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=011,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=011'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=011'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=011,underline'
|
||||||
|
## cyan
|
||||||
|
ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=014'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=014'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=014'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-5]='fg=014,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[rc-quote]='fg=014'
|
||||||
|
## black/dark grey
|
||||||
|
ZSH_HIGHLIGHT_STYLES[comment]='fg=008,bold'
|
||||||
|
## magenta
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=13,bold'
|
||||||
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
archive
|
||||||
|
.gitignore
|
||||||
|
!/.gitignore
|
||||||
|
.zcompdump
|
||||||
|
*.zwc
|
||||||
|
_msg
|
||||||
|
*.bkp
|
||||||
|
.netrwhist
|
||||||
|
github.config
|
||||||
|
gitlab.config
|
||||||
|
example.config
|
||||||
|
.config/tmux/plugins
|
||||||
|
!.config/tmux/plugins/tpm
|
||||||
24
.gitmodules
vendored
Normal file
24
.gitmodules
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
[submodule "dotbot"]
|
||||||
|
path = dotbot
|
||||||
|
url = https://github.com/anishathalye/dotbot
|
||||||
|
[submodule ".config/tmux/plugins/tpm"]
|
||||||
|
path = .config/tmux/plugins/tpm
|
||||||
|
url = https://github.com/tmux-plugins/tpm
|
||||||
|
[submodule ".config/zsh/plugins/powerlevel10k"]
|
||||||
|
path = .config/zsh/plugins/powerlevel10k
|
||||||
|
url = https://github.com/romkatv/powerlevel10k.git
|
||||||
|
[submodule ".config/zsh/plugins/stderred"]
|
||||||
|
path = .config/zsh/plugins/stderred
|
||||||
|
url = https://github.com/sickill/stderred
|
||||||
|
[submodule ".config/zsh/plugins/zsh-history-substring-search"]
|
||||||
|
path = .config/zsh/plugins/zsh-history-substring-search
|
||||||
|
url = https://github.com/zsh-users/zsh-history-substring-search
|
||||||
|
[submodule ".config/zsh/plugins/zsh-autosuggestions"]
|
||||||
|
path = .config/zsh/plugins/zsh-autosuggestions
|
||||||
|
url = https://github.com/zsh-users/zsh-autosuggestions
|
||||||
|
[submodule ".config/zsh/plugins/zsh-syntax-highlighting"]
|
||||||
|
path = .config/zsh/plugins/zsh-syntax-highlighting
|
||||||
|
url = https://github.com/zsh-users/zsh-syntax-highlighting.git
|
||||||
|
[submodule ".config/zsh/plugins/zsh-async"]
|
||||||
|
path = .config/zsh/plugins/zsh-async
|
||||||
|
url = https://github.com/mafredri/zsh-async
|
||||||
17
.zshenv
Normal file
17
.zshenv
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
## Author: druckdev
|
||||||
|
## Created: 2019-10-21
|
||||||
|
|
||||||
|
setopt NO_GLOBAL_RCS
|
||||||
|
|
||||||
|
if [ -n "$DESKTOP_SESSION" ]; then
|
||||||
|
eval $(/usr/bin/gnome-keyring-daemon --start)
|
||||||
|
export SSH_AUTH_SOCK
|
||||||
|
fi
|
||||||
|
|
||||||
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
|
||||||
|
export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh"
|
||||||
|
|
||||||
|
[ ! -r "$ZDOTDIR/.zshenv" ] || . "$ZDOTDIR/.zshenv"
|
||||||
1
dotbot
Submodule
1
dotbot
Submodule
Submodule dotbot added at 7ffaa65482
15
install
Executable file
15
install
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
CONFIG="install.conf.yaml"
|
||||||
|
DOTBOT_DIR="dotbot"
|
||||||
|
|
||||||
|
DOTBOT_BIN="bin/dotbot"
|
||||||
|
BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
cd "${BASEDIR}"
|
||||||
|
git -C "${DOTBOT_DIR}" submodule sync --quiet --recursive
|
||||||
|
git submodule update --init --recursive "${DOTBOT_DIR}"
|
||||||
|
|
||||||
|
"${BASEDIR}/${DOTBOT_DIR}/${DOTBOT_BIN}" -d "${BASEDIR}" -c "${CONFIG}" "${@}"
|
||||||
11
install.conf.yaml
Normal file
11
install.conf.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
- shell:
|
||||||
|
- /bin/sh -c 'tmpd="$(mktemp -d)"; for file in .config/*; do [ ! -e "$HOME/$file" ] || mv "$HOME/$file" "$tmpd"; done; rmdir "$tmpd" 2>/dev/null || { tar czvf "existing-$(date +"%s").tar.gz" "$tmpd" && rm -rf "$tmpd"; }'
|
||||||
|
- link:
|
||||||
|
~/.Xresources:
|
||||||
|
.Xresources
|
||||||
|
~/.zshenv:
|
||||||
|
.zshenv
|
||||||
|
~/.config/:
|
||||||
|
create: true
|
||||||
|
glob: true
|
||||||
|
path: .config/*
|
||||||
Reference in New Issue
Block a user