diff options
Diffstat (limited to '.i3')
79 files changed, 5277 insertions, 0 deletions
diff --git a/.i3/.i3exit b/.i3/.i3exit new file mode 100755 index 0000000..cec55dd --- /dev/null +++ b/.i3/.i3exit @@ -0,0 +1,31 @@ +#!/bin/sh +lock() { + +# Add a small delay to prevent suspend races + +i3lock && sleep 1 + +} + +case "$1" in + lock) + lock + ;; + logout) + i3-msg exit + ;; + suspend) + lock && systemctl suspend + ;; + reboot) + systemctl reboot + ;; + shutdown) + systemctl poweroff + ;; + *) + echo "Usage: $0 {lock | logout | suspend | reboot | shutdown}" + exit 2 +esac + +exit 0 diff --git a/.i3/config b/.i3/config new file mode 100755 index 0000000..4c80886 --- /dev/null +++ b/.i3/config @@ -0,0 +1,669 @@ +## 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 http://i3wm.org/docs/userguide.html for a complete reference! +# ================================= + +##################################################### +# +# --- Constants --- {{{ +# +##################################################### + +set $base00 #101218 +set $base01 #1f222d +set $base02 #252936 +set $base03 #7780a1 +set $base04 #C0C5CE +set $base05 #d1d4e0 +set $base06 #C9CCDB +set $base07 #ffffff +set $base08 #ee829f +set $base09 #f99170 +set $base0A #ffefcc +set $base0B #a5ffe1 +set $base0C #97e0ff +set $base0D #97bbf7 +set $base0E #c0b7f9 +set $base0F #fcc09e + +set_from_resource $darkblack color0 #000000 +set_from_resource $black color8 #000000 +set_from_resource $darkred color1 #000000 +set_from_resource $red color9 #000000 +set_from_resource $darkgreen color2 #000000 +set_from_resource $green color10 #000000 +set_from_resource $darkyellow color3 #000000 +set_from_resource $yellow color11 #000000 +set_from_resource $darkblue color4 #000000 +set_from_resource $blue color12 #000000 +set_from_resource $darkmagenta color5 #000000 +set_from_resource $magenta color13 #000000 +set_from_resource $darkcyan color6 #000000 +set_from_resource $cyan color14 #000000 +set_from_resource $darkwhite color7 #000000 +set_from_resource $white color15 #000000 +set $transparent #000000 + +set $workspace1 "1:" +set $workspace2 "2:Term" +set $workspace3 "3:Astro" +set $workspace4 "4:Simul" +set $workspace5 "5:Web" +set $workspace6 "6:Sys" +set $workspace7 "7:Dev" +set $workspace8 "8:Tuts" +set $workspace9 "9:Media" +set $workspace10 "10:" + +##################################################### +# +# }}} +# +##################################################### +##################################################### +# +# --- General Configuration --- {{{ +# +##################################################### +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. + +font pango:System San Francisco Display 10 + +# 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 8 + +# 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 + + +set $mod Mod4 +floating_modifier $mod + +set $term --no-startup-id /usr/local/bin/st +set $term2 /usr/bin/alacritty +set $term3 /usr/bin/xterm +set $term4 /usr/bin/urxvt +set $browser /usr/bin/qutebrowser + + +#SYSTEMD +set $shutdown sudo shutdown -h now +set $reboot sudo reboot +set $netrefresh --no-startup-id sudo systemctl restart NetworkManager +set $hibernate sudo systemctl suspend + + +# #---Audio and Music Definitions---# # + +# For mpc: +set $music --no-startup-id st -e ncmpcpp -s playlist -S visualizer +set $togglepause --no-startup-id mpc toggle +set $trupause --no-startup-id mpc pause +set $pause --no-startup-id pausempv +set $next --no-startup-id mpc next +set $prev --no-startup-id mpc prev +set $lilfor --no-startup-id mpc seek +10 +set $bigfor --no-startup-id mpc seek +120 +set $lilbak --no-startup-id mpc seek -10 +set $bigbak --no-startup-id mpc seek -120 +set $beg --no-startup-id mpc seek 0% + + +#For PULSEAUDIO/PAMIXER +set $inc --no-startup-id pamixer --allow-boost -i 5 +set $biginc --no-startup-id pamixer --allow-boost -i 15 +set $dec --no-startup-id pamixer --allow-boost -d 5 +set $bigdec --no-startup-id pamixer --allow-boost -d 15 +set $mute --no-startup-id pamixer --allow-boost -t +set $micmute --no-startup-id pamixer --allow-boost -t +set $truemute --no-startup-id pamixer -m +set $unmute --no-startup-id pamixer -u + +# bindsym $mod+BackSpace +bindsym $mod+Shift+BackSpace exec prompt "Are you sure you want to reboot?" "$reboot" + +#STOP/HIDE EVERYTHING: +bindsym $mod+Shift+Escape exec $truemute ; exec $truepause ; workspace lmao ; exec $term -e htop ; exec $term -e ranger +bindsym $mod+Ctrl+Escape exec $unmute ; exec $togglepause + +##################################################### +# +# ================================= +# --- i3-gaps --- {{{ +# ================================= +# +##################################################### + +#hide_edge_borders both +#for_window [class="^.*"] border pixel 0 +for_window [class="^.*"] border pixel 3 +gaps inner 15 +gaps outer 15 + +bindsym $mod+s gaps inner current plus 5 +bindsym $mod+Shift+s gaps inner current minus 5 +bindsym $mod+z gaps outer current plus 5 +bindsym $mod+Shift+z gaps outer current minus 5 + +bindsym $mod+Ctrl+0 gaps inner current set 0; gaps outer current set 0 +bindsym $mod+Ctrl+9 gaps inner current set 15; gaps outer current set 15 + +# }}} +# +##################################################### +##################################################### +# +# ================================= +# --- Window decorations, movement, resize, focus --- {{{ +# ================================= +# +##################################################### + +hide_edge_borders none + +#new_window pixel 2 +#bindsym $mod+y border pixel 2 +bindsym $mod+b border normal +bindsym $mod+Ctrl+b border none + +# kill focused window +bindsym $mod+Shift+q kill + +# change focus +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# move focused window +bindsym $mod+Shift+h move left 30 +bindsym $mod+Shift+j move down 30 +bindsym $mod+Shift+k move up 30 +bindsym $mod+Shift+l move right 30 + +# split in horizontal orientation +bindsym $mod+apostrophe split h + +# split in vertical orientation +bindsym $mod+slash split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+t 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/child container +bindsym $mod+Shift+a focus parent +bindsym $mod+Ctrl+a focus child + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing h will shrink the window’s width. + # Pressing j will shrink the window’s height. + # Pressing k will grow the window’s height. + # Pressing l will grow the window’s width. + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize shrink height 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize shrink height 10 px or 10 ppt + bindsym Up resize grow height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+Ctrl+r mode "resize" + +# Resize window without going into Resize mode + +bindsym $mod+Ctrl+y resize shrink width 10 px or 10ppt +bindsym $mod+Ctrl+u resize shrink height 10 px or 10 ppt +bindsym $mod+Ctrl+i resize grow height 10 px or 10 ppt +bindsym $mod+Ctrl+o resize grow width 10 px or 10 ppt + +# Floating + + for_window [class="Lxappearance"] floating enable + for_window [class="Mplayer"] floating enable #, border normal + for_window [class="mpv"] floating enable move position 640px 10px + for_window [class="matplotlib"] floating enable move position 40px 80px + for_window [class="Matplotlib"] floating enable move position 620px 10px + for_window [class="Vlc"] floating enable + for_window [class="Pavucontrol"] floating enable + for_window [class="Blueman-manager"] floating enable + for_window [title="Gimp"] move workspace $workspace9 + for_window [title="GIMP Startup"] move workspace $workspace9 + for_window [window_role="gimp-dock"] floating disable; move left; resize shrink width 50 px or 50ppt + for_window [window_role="gimp-toolbox"] floating disable; move right; resize grow width 30 px or 30ppt + +#---Dropdown/Scratchpad windows---# +# Below we bind this to $mod+u + +for_window [instance="tmuxdd"] floating enable +for_window [instance="tmuxdd"] resize set 925 500 +for_window [instance="tmuxdd"] move scratchpad +for_window [instance="tmuxdd"] border pixel 5 +for_window [instance="tmuxdd"] sticky enable +exec --no-startup-id $term -n tmuxdd -e tmux -2 + +#---window running R for basic arithmetic ---# +# Below we bind this to $mod+Ctrl+grave + +for_window [instance="dropdowncalc"] floating enable +for_window [instance="dropdowncalc"] resize set 800 300 +for_window [instance="dropdowncalc"] move scratchpad +for_window [instance="dropdowncalc"] border pixel 5 +for_window [instance="dropdowncalc"] sticky enable +exec --no-startup-id $term -n dropdowncalc -f mono:pixelsize=24 -e R -q + +#---Toggle Scratchpad ---# +bindsym $mod+Shift+minus move scratchpad +bindsym $mod+minus scratchpad show +##---YouTube Download window---# + +#for_window [instance="youtube-st"] floating enable +#for_window [instance="youtube-st"] resize set 925 500 +#for_window [instance="youtube-st"] move scratchpad +#for_window [instance="youtube-st"] border pixel 5 +#for_window [instance="youtube-st"] sticky enable +#exec --no-startup-id $term -n youtube-st -e TERM="tmux-256color" tmux -2 + + +# Window Colours +# border background text indicator child_border + client.focused $red $red $magenta $darkmagenta $darkblue + client.unfocused $transparent $blue $white $darkblue $transparent + client.focused_inactive $transparent $blue $white $darkblue $transparent + client.urgent $darkred $darkred $black $darkred $darkred + client.background $black + + +# ================================= +# }}} +# ================================= +# ================================= +# --- Workspaces --- {{{ +# ================================= +# switch to workspace +bindsym $mod+1 workspace $workspace1; exec xwallpaper --zoom "$HOME/.config/wall.png" +bindsym $mod+2 workspace $workspace2; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Anime/samurai.jpg" +bindsym $mod+3 workspace $workspace3; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Spacescapes/Space Exploration 3.jpg" +bindsym $mod+4 workspace $workspace4; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Future/moon SF.jpg" +bindsym $mod+5 workspace $workspace5; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Cityscapes/1433294607949-3.jpg" +bindsym $mod+6 workspace $workspace6; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Unsorted/100 Beautiful Ultra HD 4K Wallpapers (55).jpg" +bindsym $mod+7 workspace $workspace7; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Landscapes/1490216161620.jpg" +bindsym $mod+8 workspace $workspace8; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Etc/trinity_college.jpg" +bindsym $mod+9 workspace $workspace9; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Unsorted/Supes cool 39.jpg" +bindsym $mod+0 workspace $workspace10; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Unsorted/Wallpapers Girls №581/cityscape_32.png" + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $workspace1 +bindsym $mod+Shift+2 move container to workspace $workspace2 +bindsym $mod+Shift+3 move container to workspace $workspace3 +bindsym $mod+Shift+4 move container to workspace $workspace4 +bindsym $mod+Shift+5 move container to workspace $workspace5 +bindsym $mod+Shift+6 move container to workspace $workspace6 +bindsym $mod+Shift+7 move container to workspace $workspace7 +bindsym $mod+Shift+8 move container to workspace $workspace8 +bindsym $mod+Shift+9 move container to workspace $workspace9 +bindsym $mod+Shift+0 move container to workspace $workspace10 + +# automatic switching back and forth between workspaces +workspace_auto_back_and_forth yes +# ================================= +# }}} +# ================================= +# +##################################################### +##################################################### +# +# --- Functions --- {{{ +# +##################################################### +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + font pango: System San Francisco Display, FontAwesome 9 + status_command i3blocks -c ~/.i3/i3blocks.conf + position top + mode dock + modifier None + + colors { + separator $base03 + background $base01 + statusline $base05 + # border background text + focused_workspace $base01 $base01 $base07 + active_workspace $base01 $base02 $base03 + inactive_workspace $base01 $base01 $base03 + urgent_workspace $base01 $base01 $base08 + } +} + +# Run the script to update the mpd i3block on change. +exec --no-startup-id ~/.i3/scripts/i3mpdupdate' + +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 --no-startup-id "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'" + +# #---Function Buttons---# # + +# Volume Control +bindsym $mod+F11 exec --no-startup-id amixer set Master 5%- +bindsym $mod+F12 exec --no-startup-id amixer set Master 5%+ + +# Brightness Control +bindsym $mod+F1 exec --no-startup-id xbacklight -dec 5 +bindsym $mod+F2 exec --no-startup-id xbacklight -inc 5 + +# Screen Lock/ Logout / Suspend / Reboot +#set $Locker ". $HOME/.i3/scripts/lock.sh $HOME/Pictures/Icons/lock.png" +# bindsym s exec --no-startup-id i3lock --color="$base02" && sleep1 && systemctl suspend, mode "default" + +set $mode_system System (e) logout, (s) suspend, (r) reboot, (Shift+s) shutdown, (n) restart network +mode "$mode_system" { + bindsym e exec --no-startup-id i3-msg exit, mode "default" + bindsym s exec --no-startup-id $HOME/.i3/scripts/lockscreen, mode "default" + #bindsym s exec --no-startup-id $LockerSuspend, mode "default" + bindsym r exec --no-startup-id systemctl reboot, mode "default" + bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default" + bindsym n exec --no-startup-id systemctl restart NetworkManager, mode "default" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+F3 exec $term -e nmtui +bindsym $mod+F4 mode "$mode_system" + +bindsym $mod+F5 exec --no-startup-id $netrefresh +bindsym $mod+F6 exec --no-startup-id $term -e transmission-remote-cli +bindsym $mod+F7 exec --no-startup-id $HOME/.i3/scripts/dmenumount +bindsym $mod+F8 exec --no-startup-id $term -n tmuxdd -e $HOME/bin/scripts/mountjutsu +bindsym $mod+F9 exec --no-startup-id $HOME/.i3/scripts/dmenuumount +##################################################### +# +# }}} +# +##################################################### +##################################################### +# +# --- Launch Specific Apps --- {{{ +# +##################################################### + +# start dmenu (a program launcher) +bindsym $mod+d exec --no-startup-id j4-dmenu-desktop --dmenu="dmenu -i -fn 'DejaVu Sans-10' -l 20" +bindsym $mod+Ctrl+d exec --no-startup-id j4-dmenu-desktop --dmenu="dmenu_run -i -fn 'DejaVu Sans-10' -l 20" +bindsym $mod+Shift+d exec --no-startup-id passmenu -fn 'DejaVu Sans-10' -l 30 + +#set $mclip ${HOME}/bin/greenclip +#exec --no-startup-id $mclip daemon + +# start a terminal +bindsym $mod+Return exec --no-startup-id $term # st +bindsym $mod+Shift+Return exec --no-startup-id $term -e tmux # st - tmux +bindsym $mod+Ctrl+Return exec --no-startup-id $term2 # alacritty +bindsym $mod+Ctrl+z exec --no-startup-id $term3 # xterm +bindsym $mod+u [instance="tmuxdd"] scratchpad show; [instance="tmuxdd"] move position center +bindsym $mod+Shift+u exec --no-startup-id $term -n tmuxdd -e tmux +bindsym $mod+Ctrl+grave [instance="dropdowncalc"] scratchpad show; [instance="dropdowncalc"] move position center +bindsym $mod+Shift+grave exec --no-startup-id $term -n dropdowncalc -f mono:pixelsize=24 -e R -q + +# Miscellaneous Actions + +bindsym $mod+Ctrl+p exec $togglepause +bindsym $mod+Shift+p exec $pause +bindsym $mod+Shift+m exec $mute +bindsym $mod+Ctrl+x exec --no-startup-id sh $HOME/.local/bin/displayselect +bindsym $mod+Ctrl+s exec --no-startup-id $term -e sh $HOME/bin/scripts/ssh-select.sh +bindsym $mod+grave exec --no-startup-id sh $HOME/.local/bin/dmenuunicode +bindsym $mod+Ctrl+Shift+v exec --no-startup-id sh $HOME/bin/scripts/viewmovies +bindsym $mod+Ctrl+Shift+f exec --no-startup-id sh $HOME/bin/scripts/viewfights +bindsym $mod+Ctrl+Shift+t exec --no-startup-id sh $HOME/bin/scripts/viewseries +bindsym $mod+Ctrl+Shift+a exec --no-startup-id sh $HOME/bin/scripts/viewanime + +# Miscellaneous Apps + +bindsym $mod+a exec --no-startup-id $term -e ncpamixer +bindsym $mod+e exec --no-startup-id $term -e "mutt" +bindsym $mod+i exec --no-startup-id $term -e htop +bindsym $mod+m exec --no-startup-id $music +bindsym $mod+n exec --no-startup-id $term -e newsboat +bindsym $mod+r exec --no-startup-id $term -e ranger +bindsym $mod+v exec --no-startup-id $term -e $EDITOR ${HOME}/vimwiki/index.md +bindsym $mod+w exec --no-startup-id $browser +bindsym $mod+y exec --no-startup-id $term -e calcurse +bindsym $mod+p exec --no-startup-id ls $HOME/Computing/Palm/webos/BACKUPS/ipk-backups/*.ipk | dmenu -l 30 | xargs /opt/PalmSDK/Current/bin/palm-install && notify-send "webos install completed" +bindsym $mod+Shift+Ctrl+p exec --no-startup-id ls $HOME/Raccoon/content/apps/**/*.apk | dmenu -l 30 | xargs /usr/bin/adb install && notify-send "adb install completed" + + +bindsym $mod+Shift+n exec --no-startup-id /usr/bin/nm-applet +bindsym $mod+Shift+Ctrl+n exec --no-startup-id $term2 -e nmtui +bindsym $mod+Shift+b exec --no-startup-id /usr/bin/blueman-applet +bindsym $mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default +bindsym $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +bindsym $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +bindsym $mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent +bindsym $mod+Shift+w exec --no-startup-id sh $HOME/bin/scripts/imgselect +bindsym $mod+Shift+v exec --no-startup-id $term2 -e ncmpcpp -s playlist -S visualizer + +bindsym $mod+Ctrl+w exec --no-startup-id $term -e curl wttr.in/~hatfield + +# Assign Development IDE's to workspace 7 + +assign [class="^Eclipse$"] $workspace7 +assign [class="jetbrains-pycharm-ce"] $workspace7 + +# Assign media applications to workspace 9 + +assign [class="^Vlc$"] $workspace9 +assign [class="^Rhythmbox$"] $workspace9 +assign [class="^Gimp$"] $workspace9 +# +# }}} +# +##################################################### +##################################################### +# +# --- Startup Apps --- {{{ +# +##################################################### +# Set the background +exec --no-startup-id feh --bg-scale $HOME/.config/wall.png +#Starts dunst for notifications: --moved to .xinitrc +#exec --no-startup-id dunst + +# +#start mpd so that ncmpcpp can access it when launched +# +#exec --no-startup-id i3-msg 'exec --no-startup-id /usr/bin/mpd ~/.conf/mpd/mpd.conf' + + +# Unclutter makes the mouse invisible after a brief period - moved to .xinitrc +# exec --no-startup-id unclutter + +#start window effects +#Moved to .xinitrc +#exec compton -f +# +# start up some applications in their respective workspaces +# +exec i3-msg 'workspace $workspace1 ; exec --no-startup-id $term2' + +# }}} +# +##################################################### +# +# }}} +# +##################################################### +# +# --- Key Bindings List --- {{{ +# +##################################################### +# +# $mod+{} +# ======= +# $mod+a focus parent +# $mod+b split h +# $mod+d exec --no-startup-id dmenu_run +# $mod+e exec --no-startup-id $term -e "mutt -F ~/.muttrc" +# $mod+f fullscreen toggle +# $mod+h focus left +# $mod+j focus down +# $mod+k focus up +# $mod+l focus right +# $mod+m exec --no-startup-id /usr/bin/mplayer +# $mod+n border normal +# $mod+r exec --no-startup-id $term -e ranger +# $mod+t layout toggle split +# $mod+u border none +# $mod+v split v +# $mod+w exec --no-startup-id $browser +# $mod+y border pixel 2 +# $mod+z split v, layout stacking +# $mod+space focus mode_toggle +# $mod+Return exec --no-startup-id +# $mod+grave exec --no-startup-id $HOME/bin/scripts/any_term_dropdown.sh +# $mod+F11 exec --no-startup-id amixer set Master 5%- +# $mod+F12 exec --no-startup-id amixer set Master 5%+ +# $mod+F1 exec --no-startup-id xbacklight -dec 5 +# $mod+F2 exec --no-startup-id xbacklight -inc 5 +# $mod+F4 mode "$mode_system" +# +# ======= +# $mod+Shift+{} +# ======= +# $mod+Shift+c reload +# $mod+Shift+d exec --no-startup-id rofi -show run -lines 10 -eh 2 -width 80 \ +# -padding $(($(xwininfo -root | awk '/Height/ {print $2}')/4)) \ +# -opacity "75" -bw 0 -bc "$base02" -bg "$base02" -fg "$base03" \ +# -hlbg "$base02" -hlfg "#9575cd" -font "System San Francisco Display 12" +# $mod+Shift+e exec --no-startup-id "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'" +# $mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default +# $mod+Shift+h move left +# $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +# $mod+Shift+j move down +# $mod+Shift+k move up +# $mod+Shift+l move right +# $mod+Shift+m exec --no-startup-id /usr/bin/mpv +# $mod+Shift+n exec --no-startup-id /usr/bin/nm-applet +# $mod+Shift+q kill +# $mod+Shift+r restart +# $mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent +# $mod+Shift+u resize shrink height 10 px or 10 ppt +# $mod+Shift+w exec --no-startup-id /usr/local/bin/eclipse/eclipse +# $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +# $mod+Shift+space floating toggle +# $mod+Shift+Return exec --no-startup-id $term -e tmux +# +# ======= +# $mod+Ctrl+{} +# ======= +# $mod+Ctrl+r mode "resize" +# $mod+Ctrl+d gaps inner current set 0; gaps outer current set 0 +# $mod+Ctrl+t gaps inner current set 15; gaps outer current set 15 + +# $mod+Ctrl+i resize grow height 10 px or 10 ppt +# $mod+Ctrl+o resize grow width 10 px or 10 ppt +# $mod+Ctrl+u resize shrink height 10 px or 10 ppt +# $mod+Ctrl+y resize shrink width 10 px or 10ppt + +# $mod+Ctrl+h gaps inner current plus 5 +# $mod+Ctrl+j gaps outer current minus 5 +# $mod+Ctrl+k gaps outer current plus 5 +# $mod+Ctrl+l gaps inner current minus 5 +# $mod+Ctrl+space exec --no-startup-id $HOME/bin/scripts/rofi-scripts-collection/rofi-bangs.sh \ +# -font "System San Francisco Display 12" +# $mod+Ctrl+Return exec --no-startup-id guake +# +# ======= + + +##################################################### +# +# --- }}} +# +##################################################### +##################################################### +# +# --- Archive --- {{{ +# +##################################################### +##################################################### +# +# --- Layouts --- {{{ +# +##################################################### + +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp; workspace $workspace1' +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" -e tmux -T "NCMPCPP" -b ; workspace $workspace1' +#exec --no-startup-id i3-msg ' exec --no-startup-id /usr/bin/mpd $HOME/.mpd/mpd.conf; workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' +#exec --no-startup-id i3-msg ' exec --no-startup-id /usr/bin/mpd $HOME/.mpd/mpd.conf; workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id terminator --role="vim"; exec --no-startup-id terminator --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' +# +# Refresh layouts if one of the windows is killed +# + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b + +#bindsym $mod+Shift+x exec --no-startup-id workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' + +#bindsym $mod+Shift+x exec --no-startup-id workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id terminator --role="vim"; exec --no-startup-id terminator --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e tmux + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp + +##################################################### +# +# }}} +# +##################################################### +# +# }}} +# +# +##################################################### +# vim:filetype=i3 diff --git a/.i3/config.save b/.i3/config.save new file mode 100755 index 0000000..98d6297 --- /dev/null +++ b/.i3/config.save @@ -0,0 +1,368 @@ +# 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 http://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod4 + + +##################################################### +# +# Constants +# +##################################################### + +set $base00 #101218 +set $base01 #1f222d +set $base02 #252936 +set $base03 #7780a1 +set $base04 #C0C5CE +set $base05 #d1d4e0 +set $base06 #C9CCDB +set $base07 #ffffff +set $base08 #ee829f +set $base09 #f99170 +set $base0A #ffefcc +set $base0B #a5ffe1 +set $base0C #97e0ff +set $base0D #97bbf7 +set $base0E #c0b7f9 +set $base0F #fcc09e + +set $workspace1 "1: " +set $workspace2 "2:Term " +set $workspace3 "3:Astro " +set $workspace4 "4:Simul " +set $workspace5 "5:Web " +set $workspace6 "6:Sys " +set $workspace7 "7:Dev " +set $workspace8 "8:Tuts " +set $workspace9 "9:Media " +set $workspace10 "10:" + + +##################################################### +# +# General Configuration +# +##################################################### +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:System San Francisco Display 10 + +# 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 8 + +# 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 + +hide_edge_borders none + +# window decorations + +new_window pixel 2 +bindsym $mod+u border none +bindsym $mod+y border pixel 2 +bindsym $mod+n border normal + +# start a terminal +bindsym $mod+Return exec --no-startup-id gnome-terminal +bindsym $mod+Shift+Return exec --no-startup-id guake +#bindsym $mod+Shift+Return exec --no-startup-id terminator + +# kill focused window +bindsym $mod+Shift+q kill + +# start dmenu (a program launcher) +bindsym $mod+d exec --no-startup-id dmenu_run + +# start rofi (alternative program launcher) +bindsym $mod+Shift+d exec --no-startup-id rofi -show run -lines 3 -eh 2 -width 80 -padding $(($(xwininfo -root | awk '/Height/ {print $2}')/4)) -opacity "75" -bw 0 -bc "$base02" -bg "$base02" -fg "$base03" -hlbg "$base02" -hlfg "#9575cd" -font "System San Francisco Display 18" +# 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 + +# change focus +#bindsym $mod+j focus left +#bindsym $mod+k focus down +#bindsym $mod+l focus up +#bindsym $mod+semicolon focus right +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# alternatively, you can use the cursor keys: +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+j move left +#bindsym $mod+Shift+k move down +#bindsym $mod+Shift+l move up +#bindsym $mod+Shift+semicolon move right +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# alternatively, you can use the cursor keys: +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+b 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 + +# split and stack in vertical orientation +bindsym $mod+z split v, layout stacking + +# 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 tfhe child container +#bindsym $mod+d focus child + +# Toggle the sticky modifier (allows floating windows to +# follow to each workspace). TODO (this doesnt work -check syntax) +#bindsym $mod+Shift+w exec i3-msg 'toggle sticky ' + +# switch to workspace +bindsym $mod+1 workspace $workspace1 +bindsym $mod+2 workspace $workspace2 +bindsym $mod+3 workspace $workspace3 +bindsym $mod+4 workspace $workspace4 +bindsym $mod+5 workspace $workspace5 +bindsym $mod+6 workspace $workspace6 +bindsym $mod+7 workspace $workspace7 +bindsym $mod+8 workspace $workspace8 +bindsym $mod+9 workspace $workspace9 +bindsym $mod+0 workspace $workspace10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $workspace1 +bindsym $mod+Shift+2 move container to workspace $workspace2 +bindsym $mod+Shift+3 move container to workspace $workspace3 +bindsym $mod+Shift+4 move container to workspace $workspace4 +bindsym $mod+Shift+5 move container to workspace $workspace5 +bindsym $mod+Shift+6 move container to workspace $workspace6 +bindsym $mod+Shift+7 move container to workspace $workspace7 +bindsym $mod+Shift+8 move container to workspace $workspace8 +bindsym $mod+Shift+9 move container to workspace $workspace9 +bindsym $mod+Shift+0 move container to workspace $workspace10 + +# automatic switching back and forth between workspaces +workspace_auto_back_and_forth yes + +# 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 --no-startup-id "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 j resize shrink width 10 px or 10 ppt + #bindsym k resize grow height 10 px or 10 ppt + #bindsym l resize shrink height 10 px or 10 ppt + #bindsym semicolon resize grow width 10 px or 10 ppt + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize shrink height 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + 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 + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+r mode "resize" + +# Volume Control + +bindsym $mod+F11 exec --no-startup-id amixer set Master 5%- +bindsym $mod+F12 exec --no-startup-id amixer set Master 5%+ + +# Brightness Control + +bindsym $mod+F1 exec --no-startup-id xbacklight -dec 5 +bindsym $mod+F2 exec --no-startup-id xbacklight -inc 5 + +# +# Screen Lock/ Logout / Suspend / Reboot +# +set $Locker ". $HOME/.i3/scripts/lock.sh $HOME/Pictures/Icons/lock.png" +set $LockerSuspend "i3lock && sleep 1" + +set $mode_system System (l) lock, (e) logout, (s) suspend, (r) reboot, (Shift+s) shutdown +mode "$mode_system" { + bindsym l exec --no-startup-id $Locker, mode "default" + bindsym e exec --no-startup-id i3-msg exit, mode "default" + bindsym s exec --no-startup-id i3lock --color="$base02" && sleep1 && systemctl suspend, mode "default" + bindsym r exec --no-startup-id systemctl reboot, mode "default" + bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+F4 mode "$mode_system" + +# Floating + + for_window [class="Lxappearance"] floating enable + for_window [class="Mplayer" ] floating enable + for_window [class="Mpv" ] floating enable, border normal #move absolute 10 100 + for_window [class="Vlc"] floating enable + for_window [class="YaST2"] floating enable + for_window [class="Pavucontrol"] floating enable + for_window [class="Blueman-manager"] floating enable + +# Widow Colours +# border background text indicator + client.focused $base01 $base01 $base07 $base0F + client.focused_inactive $base02 $base02 $base03 $base0F + client.unfocused $base02 $base02 $base03 $base0F + client.urgent $base02 $base08 $base00 $base0F + + + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + font pango: System San Francisco Display, FontAwesome 10 + status_command $HOME/bin/conky-i3bar.sh +# status_command i3status +# status_command i3blocks -c $HOME/.i3/i3blocks.conf + # strip_workspace_numbers yes + colors { + separator $base03 + background $base01 + statusline $base05 + # border background text + focused_workspace $base01 $base01 $base07 + active_workspace $base01 $base02 $base03 + inactive_workspace $base01 $base01 $base03 + urgent_workspace $base01 $base01 $base08 + } + + +} + +# Assign Development IDE's to workspace 7 + +assign [class="^Eclipse$"] $workspace7 +assign [class="jetbrains-pycharm-ce"] $workspace7 + +# Assign media applications to workspace 9 + +assign [class="^vlc$"] $workspace9 +assign [class="^Rhythmbox$"] $workspace9 + + + +# +# Launch Specific Apps +# +bindsym $mod+Shift+g exec --no-startup-id /usr/local/bin/eclipse/eclipse +bindsym $mod+Shift+f exec --no-startup-id /usr/bin/firefox +bindsym $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +bindsym $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +bindsym $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Torrent +bindsym $mod+Shift+m exec --no-startup-id /usr/bin/mplayer +bindsym $mod+Shift+n exec --no-startup-id /usr/bin/nixnote2 +bindsym $mod+Shift+v exec --no-startup-id /usr/bin/vlc + +# +# Refresh layouts if one of the windows is killed +# + +bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e tmux + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp + +# +# Startup Apps +# +# Set the background +exec --no-startup-id feh --bg-scale $HOME/Pictures/Anime/samurai.jpg +#exec --no-startup-id feh --bg-scale $HOME/Pictures/MeteorM31_hemmerich_960.jpg +#exec --no-startup-id feh --bg-scale $HOME/Pictures/space-wallpaper-7-610x343.jpg +# +#start mpd so that ncmpcpp can access it when launched +# +# +# start the network applet +# +exec --no-startup-id /usr/bin/nm-applet +# +# start the bluetooth applet +# +#exec --no-startup-id /usr/bin/blueman-applet +# +#start window effects +# +exec compton -f +# +# start up some applications in their respective workspaces +# +exec --no-startup-id i3-msg 'workspace $workspace5 ; exec --no-startup-id /usr/bin/firefox ' +# +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp; workspace $workspace1' +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" -e tmux -T "NCMPCPP" -b ; workspace $workspace1' +exec --no-startup-id i3-msg ' exec --no-startup-id /usr/bin/mpd $HOME/.mpd/mpd.conf; workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' +# + diff --git a/.i3/i3blocks.conf b/.i3/i3blocks.conf new file mode 100755 index 0000000..15cf4f4 --- /dev/null +++ b/.i3/i3blocks.conf @@ -0,0 +1,73 @@ +command=/usr/lib/i3blocks/$BLOCK_NAME +separator_block_width=15 +markup=pango + +[mpd] +label=🎼 +command=~/.i3/scripts/i3mpd +interval=once +align=left +signal=11 + +[volume] +interval=1 +command=~/.i3/scripts/i3volume +markup=pango + +[torrent] +interval=20 +command=~/.i3/scripts/torrent +signal=7 + +[weather] +command=~/.i3/scripts/i3weather +interval=1800 + +[mailbox] +label=📬 +interval=180 +command=~/.i3/scripts/mailbox +signal=12 + +[vpn] +command=~/.i3/scripts/i3vpn +interval=10 +align=left + +[iface] +command=~/.i3/scripts/i3iface +color=#00FF00 +interval=10 + +#[iface] +#instance=eth0 +#color=#00FF00 +#interval=10 + +#[iface] +#instance=enp2s0f0 +#color=#00FF00 +#interval=10 + +#[wifi] +##instance=wlan0 +#color=#0000FF +#interval=10 + +[wifi] +##instance=wlp3s0b1 +#color=#0000FF +#interval=10 + +[battery] +command=~/.i3/scripts/i3battery +interval=5 + +[temperature] +label= +interval=10 + +[time] +label=📅 +command=echo $(date '+%Y %b %d %I:%M%p') 🕓 +interval=5 diff --git a/.i3/i3blocks.conf.orig b/.i3/i3blocks.conf.orig new file mode 100755 index 0000000..6c4b7e6 --- /dev/null +++ b/.i3/i3blocks.conf.orig @@ -0,0 +1,191 @@ +# i3blocks config file +# +# Please see man i3blocks for a complete reference! +# The man page is also hosted at http://vivien.github.io/i3blocks +# +# List of valid properties: +# +# align +# color +# command +# full_text +# instance +# interval +# label +# min_width +# name +# separator +# separator_block_width +# short_text +# signal +# urgent + +# Global properties +# +# The top properties below are applied to every block, but can be overridden. +# Each block command defaults to the script name to avoid boilerplate. +command=/usr/local/libexec/i3blocks/$BLOCK_NAME +separator_block_width=15 +#markup=none +markup=pango +full_text= +align=center +color=#7780a1 +separator=false +separator_block_width=3 + +#[separator] +# Volume indicator +# +# The first parameter sets the step (and units to display) +# The second parameter overrides the mixer selection +# See the script for details. +[volume] +#label=VOL +label= +instance=Master +#instance=PCM +interval=1 +signal=10 +#color=#C9CCDB + +[separator] + +[#volume] +#command=$SCRIPT_DIR/volume.sh +#interval=1 +#label= +#color=#C9CCDB + + +# Memory usage +# +# The type defaults to "mem" if the instance is not specified. +#[memory] +#label=MEM +#separator=false +#interval=30 + +#[memory] +#label=SWAP +#instance=swap +#separator=false +#interval=30 + +# Disk usage +# +# The directory defaults to $HOME if the instance is not specified. +# The script may be called with a optional argument to set the alert +# (defaults to 10 for 10%). +[disk] +label= +#instance=/mnt/data +interval=persist +markup=pango + +#[disk-io] +#label= +#command=$SCRIPT_DIR/disk-io +#command=$SCRIPT_DIR/disk-io -w 3 -M -P 0 +#interval=persist +#markup=pango +#instance=/^sda/ + +# Network interface monitoring +# +# If the instance is not specified, use the interface used for default route. +# The address can be forced to IPv4 or IPv6 with -4 or -6 switches. +#[iface] +#instance=wlan0 +#instance=eth0 +#color=#00FF00 +#interval=10 +#separator=false + +[wifi] +label= +instance=eth0 +#instance=wlp3s0 +color=#00FF00 +interval=10 +separator=false + +#[bandwidth] +#instance=eth0 +#interval=5 +#[bandwidth] +#command=$SCRIPT_DIR/bandwidth +#interval=persist +#[separator] + +#[vpn] +#command=echo "Secure Connection" +#interval=1 +#label= +#color=#C9CCDB + +[openvpn] +command=$SCRIPT_DIR/openvpn -d /proc/sys/net/ipv4/conf/tun0 +interval=20 + +# CPU usage +# +# The script may be called with -w and -c switches to specify thresholds, +# see the script for details. +#[cpu_usage] +#label=CPU +#interval=10 +#min_width=CPU: 100.00% +#separator=false + +#[load] +#command=$SCRIPT_DIR/load_average +#interval=1 +#label= +#color=#C9CCDB + +# Battery indicator +# +# The battery instance defaults to 0. +#[battery] +#label=BAT +#label=⚡ +#instance=1 +#interval=30 + +[batterybar] +command=$SCRIPT_DIR/batterybar #run batterybar -h for options +label=⚡: +#label=bat: +interval=5 +markup=pango +min_width=bat: ■■■■■ + +[mediaplayer] +label= +command=$SCRIPT_DIR/mediaplayer +#instance=spotify +interval=5 +signal=10 + +# Date Time +# +#[time] +#command=date '+%Y-%m-%d %H:%M:%S' +#interval=1 + +[separator] + +[date] +command=echo "`date +'%d %b'`" +interval=1 +label= +color=#C9CCDB + +[separator] + +[time] +command=echo "`date +'%H:%M'`" +interval=1 +label= +color=#C9CCDB diff --git a/.i3/loadWSmain.sh b/.i3/loadWSmain.sh new file mode 100755 index 0000000..b666e6c --- /dev/null +++ b/.i3/loadWSmain.sh @@ -0,0 +1,25 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: loadWSmain.sh +# +# USAGE: ./loadWSmain.sh +# +# DESCRIPTION: +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: YOUR NAME (), +# ORGANIZATION: +# CREATED: 24/05/18 18:46:57 +# REVISION: --- +#=============================================================================== + +i3-msg "workspace $workspace6" +i3-msg "append_layout $HOME/.i3/workspace-main.json" +i3-msg "exec --no-startup-id urxvt -e cmatrix" +i3-msg "exec --no-startup-id urxvt" +i3-msg "exec --no-startup-id urxvt -e ncmpcpp -s visualizer" +i3-msg "exec --no-startup-id urxvt -e htop" diff --git a/.i3/loadWSmusic.sh b/.i3/loadWSmusic.sh new file mode 100755 index 0000000..77aad75 --- /dev/null +++ b/.i3/loadWSmusic.sh @@ -0,0 +1,25 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: loadWSmusic.sh +# +# USAGE: ./loadWSmusic.sh +# +# DESCRIPTION: +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: YOUR NAME (), +# ORGANIZATION: +# CREATED: 24/05/18 18:46:57 +# REVISION: --- +#=============================================================================== + +i3-msg "workspace $workspace9" +i3-msg "append_layout $HOME/.i3/workspace-music.json" +i3-msg "exec --no-startup-id urxvt -e ncmpcpp -s playlist -S visualizer" +i3-msg "exec --no-startup-id mpv " +i3-msg "exec --no-startup-id urxvt -e mpsyt" +i3-msg "exec --no-startup-id urxvt -e ranger" diff --git a/.i3/scripts/audio b/.i3/scripts/audio new file mode 100755 index 0000000..cb630c8 --- /dev/null +++ b/.i3/scripts/audio @@ -0,0 +1,27 @@ +#!/bin/bash + +# This script records audio. +# It runs an appropriate record script for either ALSA and Pulseaudio. +# It also names files smartly to prevent overwrites. + +# Picks a file name for the output file based on availability: +while [[ -f $HOME/screencast$n.mkv ]] +do + n=$((n+1)) +done +filename="$HOME/screencast$n.mkv" + +# For Pulseaudio with ALSA: +record_pulse() { \ +ffmpeg \ +-f alsa -i default \ +-c:a flac \ +$filename ;} + +# For ALSA: +record_alsa() { \ +ffmpeg -y \ +-f alsa -ar 44100 -i hw:1 \ +$filename ;} + +if [[ $(pgrep -x pulseaudio) ]]; then record_pulse; else record_alsa; fi diff --git a/.i3/scripts/bandwidth.sh b/.i3/scripts/bandwidth.sh new file mode 100755 index 0000000..22414e9 --- /dev/null +++ b/.i3/scripts/bandwidth.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2015 James Murphy +# Licensed under the terms of the GNU GPL v2 only. +# +# i3blocks blocklet script to monitor bandwidth usage + +iface="${BLOCK_INSTANCE:-$(ip route | awk '/^default/ {print $5; exit}')}" +dt=3 +unit=Mb +printf_command='printf "%-5.1f/%5.1f %s/s\n", rx, wx, unit;' + +function check_proc_net_dev { + if [ ! -f "/proc/net/dev" ]; then + echo "/proc/net/dev not found" + exit 1 + fi +} + +function list_interfaces { + check_proc_net_dev + echo "Interfaces in /proc/net/dev:" + grep -o "^[^:]\\+:" /proc/net/dev | tr -d " :" +} + +while getopts i:t:u:p:lh opt; do + case "$opt" in + i) iface="$OPTARG" ;; + t) dt="$OPTARG" ;; + u) unit="$OPTARG" ;; + p) printf_command="$OPTARG" ;; + l) list_interfaces && exit 0 ;; + h) printf \ +"Usage: bandwidth [-i interface] [-t time] [-u unit] [-p printf_command] [-l] [-h] +Options: +-i\tNetwork interface to measure. Default determined using \`ip route\`. +-t\tTime interval in seconds between measurements. Default: 3 +-u\tUnits to measure bytes in. Default: Mb +\tAllowed units: Kb, KB, Mb, MB, Gb, GB, Tb, TB +\tUnits may have optional it/its/yte/ytes on the end, e.g. Mbits, KByte +-p\tAwk command to be called after a measurement is made. +\tDefault: printf \"%%-5.1f/%%5.1f %%s/s\\\\n\", rx, wx, unit; +\tExposed variables: rx, wx, tx, unit, iface +-l\tList available interfaces in /proc/net/dev +-h\tShow this help text +" && exit 0;; + esac +done + +check_proc_net_dev + +if [ -z "$iface" ]; then + echo Could not determine default interface + exit 1 +fi + +case "$unit" in + Kb|Kbit|Kbits) bytes_per_unit=$((1024 / 8));; + KB|KByte|KBytes) bytes_per_unit=$((1024));; + Mb|Mbit|Mbits) bytes_per_unit=$((1024 * 1024 / 8));; + MB|MByte|MBytes) bytes_per_unit=$((1024 * 1024 / 8));; + Gb|Gbit|Gbits) bytes_per_unit=$((1024 * 1024 * 1024 / 8));; + GB|GByte|GBytes) bytes_per_unit=$((1024 * 1024 * 1024));; + Tb|Tbit|Tbits) bytes_per_unit=$((1024 * 1024 * 1024 * 1024 / 8));; + TB|TByte|TBytes) bytes_per_unit=$((1024 * 1024 * 1024 * 1024));; + *) echo Bad unit "$unit" && exit 1;; +esac + +scalar=$((bytes_per_unit * dt)) +init_line=$(cat /proc/net/dev | grep "^[ ]*$iface:") +if [ -z "$init_line" ]; then + echo Interface not found in /proc/net/dev: "$iface" + exit 1 +fi + +init_received=$(awk '{print $2}' <<< $init_line) +init_sent=$(awk '{print $10}' <<< $init_line) +sleep "$dt" + +(while true; do cat /proc/net/dev; sleep "$dt"; done) |\ + stdbuf -oL grep "^[ ]*$iface:" |\ + awk -v scalar="$scalar" -v unit="$unit" -v iface="$iface" ' +BEGIN{old_received='"$init_received"';old_sent='"$init_sent"'} +{ + received=$2 + sent=$10 + rx=(received-old_received)/scalar; + wx=(sent-old_sent)/scalar; + tx=rx+wr; + old_received=received; + old_sent=sent; + if(rx >= 0 && wx >= 0){ + '"$printf_command"'; + fflush(stdout); + } +} +' diff --git a/.i3/scripts/battery.sh b/.i3/scripts/battery.sh new file mode 100755 index 0000000..5ba6498 --- /dev/null +++ b/.i3/scripts/battery.sh @@ -0,0 +1,74 @@ +#!/usr/bin/perl +# +# Copyright 2014 Pierre Mavro <deimos@deimos.fr> +# Copyright 2014 Vivien Didelot <vivien@didelot.org> +# +# Licensed under the terms of the GNU GPL v3, or any later version. +# +# This script is meant to use with i3blocks. It parses the output of the "acpi" +# command (often provided by a package of the same name) to read the status of +# the battery, and eventually its remaining time (to full charge or discharge). +# +# The color will gradually change for a percentage below 85%, and the urgency +# (exit code 33) is set if there is less that 5% remaining. + +use strict; +use warnings; +use utf8; + +my $acpi; +my $status; +my $percent; +my $full_text; +my $short_text; +my $bat_number = $ENV{BLOCK_INSTANCE} || 0; + +# read the first line of the "acpi" command output +open (ACPI, "acpi -b | grep 'Battery $bat_number' |") or die; +$acpi = <ACPI>; +close(ACPI); + +# fail on unexpected output +if ($acpi !~ /: (\w+), (\d+)%/) { + die "$acpi\n"; +} + +$status = $1; +$percent = $2; +$full_text = "$percent%"; + +if ($status eq 'Discharging') { + $full_text .= ' DIS'; +} elsif ($status eq 'Charging') { + $full_text .= ' CHR'; +} + +$short_text = $full_text; + +if ($acpi =~ /(\d\d:\d\d):/) { + $full_text .= " ($1)"; +} + +# print text +print "$full_text\n"; +print "$short_text\n"; + +# consider color and urgent flag only on discharge +if ($status eq 'Discharging') { + + if ($percent < 20) { + print "#FF0000\n"; + } elsif ($percent < 40) { + print "#FFAE00\n"; + } elsif ($percent < 60) { + print "#FFF600\n"; + } elsif ($percent < 85) { + print "#A8FF00\n"; + } + + if ($percent < 5) { + exit(33); + } +} + +exit(0); diff --git a/.i3/scripts/batterybar.sh b/.i3/scripts/batterybar.sh new file mode 100755 index 0000000..e583aab --- /dev/null +++ b/.i3/scripts/batterybar.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash +# batterybar; displays battery percentage as a bar on i3blocks +# +# Copyright 2015 Keftaa <adnan.37h@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# + + + +output=$(acpi battery) +percentage=$(echo "$output" | grep -o -m1 '[0-9]\{1,3\}%' | tr -d '%') +status=$(echo "$output" | egrep -o -m1 'Discharging|Charging|AC|Full|Unknown') +remaining=$( echo "$output" | egrep -o -m1 '[0-9][0-9]:[0-9][0-9]') +[[ -n $remaining ]] && remaining_formatted=" ($remaining)" +squares="■" + + +#There are 8 colors that reflect the current battery percentage when +#discharging +dis_colors=("#FF0027" "#FF3B05" "#FFB923" "#FFD000" "#E4FF00" "#ADFF00" + "#6DFF00" "#10BA00") +charging_color="#00AFE3" +full_color="#FFFFFF" +ac_color="#535353" + + +while getopts 1:2:3:4:5:6:7:8:c:f:a:h opt; do + case "$opt" in + 1) dis_colors[0]="$OPTARG";; + 2) dis_colors[1]="$OPTARG";; + 3) dis_colors[2]="$OPTARG";; + 4) dis_colors[3]="$OPTARG";; + 5) dis_colors[4]="$OPTARG";; + 6) dis_colors[5]="$OPTARG";; + 7) dis_colors[6]="$OPTARG";; + 8) dis_colors[7]="$OPTARG";; + c) charging_color="$OPTARG";; + f) full_color="$OPTARG";; + a) ac_color="$OPTARG";; + h) printf "Usage: batterybar [OPTION] color + When discharging, there are 8 [1-8] levels colors. + You can specify custom colors, for example: + + batterybar -1 red -2 \"#F6F6F6\" -8 green + + You can also specify the colors for the charging, AC and + charged states: + + batterybar -c green -f white -a \"#EEEEEE\"\n"; + exit 0; + esac +done + + + +if (( percentage > 0 && percentage < 20 )); then + squares="■" +elif (( percentage >= 20 && percentage < 40 )); then + squares="■■" +elif (( percentage >= 40 && percentage < 60 )); then + squares="■■■" +elif (( percentage >= 60 && percentage < 80 )); then + squares="■■■■" +elif (( percentage >=80 )); then + squares="■■■■■" +fi + +if [[ "$status" = "Unknown" ]]; then + squares="<sup>?</sup>$squares" +fi + +case "$status" in +"Charging") + color="$charging_color" +;; +"Full") + color="$full_color" +;; +"AC") + color="$ac_color" +;; +"Discharging"|"Unknown") + if (( percentage >= 0 && percentage < 10 )); then + color="${dis_colors[0]}" + elif (( percentage >= 10 && percentage < 20 )); then + color="${dis_colors[1]}" + elif (( percentage >= 20 && percentage < 30 )); then + color="${dis_colors[2]}" + elif (( percentage >= 30 && percentage < 40 )); then + color="${dis_colors[3]}" + elif (( percentage >= 40 && percentage < 60 )); then + color="${dis_colors[4]}" + elif (( percentage >= 60 && percentage < 70 )); then + color="${dis_colors[5]}" + elif (( percentage >= 70 && percentage < 80 )); then + color="${dis_colors[6]}" + elif (( percentage >= 80 )); then + color="${dis_colors[7]}" + fi +;; +esac + +if [[ "$BLOCK_BUTTON" -eq 1 ]]; then + echo "$status <span foreground=\"$color\">$percentage%$remaining_formatted</span>" +fi + echo "<span foreground=\"$color\">$squares</span>" diff --git a/.i3/scripts/bottomleft b/.i3/scripts/bottomleft new file mode 100755 index 0000000..5f05beb --- /dev/null +++ b/.i3/scripts/bottomleft @@ -0,0 +1,17 @@ +#!/bin/bash + +# This script move the selected window to the bottom left of the screen. + +current=$(xdotool getwindowfocus) + +# The window will take up no more than a third of +# the width or height of the screen. +newwidth=$(($(xdotool getdisplaygeometry | awk '{print $2}') / 3)) +newheight=$(($(xdotool getdisplaygeometry | awk '{print $1}') / 3)) + +xdotool windowsize $(xdotool getwindowfocus) $newheight $newwidth + +newsize=$(xdotool getwindowgeometry $(xdotool getwindowfocus) | grep Geometry | sed -e 's/x/ /g' | awk '{print $3}') + +height=$(($(xdotool getdisplaygeometry | awk '{print $2}') - newsize)) +xdotool windowmove $current 0 $height diff --git a/.i3/scripts/camtoggle b/.i3/scripts/camtoggle new file mode 100755 index 0000000..1e39dec --- /dev/null +++ b/.i3/scripts/camtoggle @@ -0,0 +1,2 @@ +#!/bin/bash +pkill -f /dev/video || mpv --no-osc --no-input-default-bindings --input-conf=/dev/null --geometry=-0-0 --autofit=30% --title="mpvfloat" /dev/video0 diff --git a/.i3/scripts/clear.sh b/.i3/scripts/clear.sh new file mode 100755 index 0000000..af13a73 --- /dev/null +++ b/.i3/scripts/clear.sh @@ -0,0 +1 @@ +find . -maxdepth 1 -regextype gnu-awk -regex "^.*\.(pyc|p yo|bak|swp|aux|log|lof|nav|out|snm|toc|bcf|run\.xml|synctex\.gz|blg|bbl)" -delete diff --git a/.i3/scripts/compiler b/.i3/scripts/compiler new file mode 100755 index 0000000..cf628aa --- /dev/null +++ b/.i3/scripts/compiler @@ -0,0 +1,50 @@ +#!/bin/sh + +# This script will compile or run another finishing operation on a document. I +# have this script run via vim. +# +# tex files: Compiles to pdf, including bibliography if necessary +# md files: Compiles to pdf via pandoc +# rmd files: Compiles via R Markdown +# c files: Compiles via whatever compiler is set to cc. Usually gcc. +# py files: runs via python command +# go files: compiles and runs with "go run" +# config.h files: (For suckless utils) recompiles and installs program. +# all others: run `sent` to show a presentation + +file=$(readlink -f "$1") +dir=$(dirname "$file") +base="${file%.*}" +shebang=$(sed -n 1p "$file") + +cd "$dir" || exit + +textype() { \ + command="pdflatex" + ( sed 5q "$file" | grep -i -q 'xelatex' ) && command="xelatex" + $command --output-directory="$dir" "$base" && + grep -i addbibresource "$file" >/dev/null && + biber --input-directory "$dir" "$base" && + $command --output-directory="$dir" "$base" && + $command --output-directory="$dir" "$base" + } + +shebangtest() { + case "$shebang" in + \#\!*) "$file" ;; + *) sent "$file" 2>/dev/null & ;; + esac +} + +case "$file" in + *\.ms) refer -PS -e "$file" | groff -me -ms -kejpt -T pdf > "$base".pdf ;; + *\.mom) refer -PS -e "$file" | groff -mom -kejpt -T pdf > "$base".pdf ;; + *\.rmd) echo "require(rmarkdown); render('$file')" | R -q --vanilla ;; + *\.tex) textype "$file" ;; + *\.md) pandoc "$file" --pdf-engine=xelatex -o "$base".pdf ;; + *config.h) make && sudo make install ;; + *\.c) cc "$file" -o "$base" && "$base" ;; + *\.py) python "$file" ;; + *\.go) go run "$file" ;; + *) shebangtest ;; +esac diff --git a/.i3/scripts/ddspawn b/.i3/scripts/ddspawn new file mode 100755 index 0000000..0871a59 --- /dev/null +++ b/.i3/scripts/ddspawn @@ -0,0 +1,25 @@ +#!/bin/sh + +# This script simplifies dropdown windows in i3. +# Shows/hides a scratchpad of a given name, if it doesn't exist, creates it. +# Usage: +# argument 1: script to run in dropdown window +# all other args are interpreted as options for your terminal +# My usage: +# ddpawn +# bindsym $mod+u exec --no-startup-id ddspawn tmuxdd +# Will hide/show window running the `tmuxdd` script when I press mod+u in i3 +# bindsym $mod+a exec --no-startup-id ddspawn dropdowncalc -f mono:pixelsize=24 +# Similar to above but with `dropdowncalc` and the other args are interpretated as for my terminal emulator (to increase font) + +[ -z "$1" ] && exit + +if xwininfo -tree -root | grep "(\"$1\" "; +then + echo "Window detected." +else + echo "Window not detected... spawning." + i3 "exec --no-startup-id $TERMINAL -n $1 $(echo "$@" | cut -d ' ' -f2-) -e $1" && i3 "[instance=\"$1\"] scratchpad show; [instance=\"$1\"] move position center" + sleep .25 # This sleep is my laziness, will fix later (needed for immediate appearance after spawn). +fi +i3 "[instance=\"$1\"] scratchpad show; [instance=\"$1\"] move position center" diff --git a/.i3/scripts/disk-io.sh b/.i3/scripts/disk-io.sh new file mode 100755 index 0000000..c27b60d --- /dev/null +++ b/.i3/scripts/disk-io.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2016 James Murphy +# Licensed under the terms of the GNU GPL v2 only. +# +# i3blocks blocklet script to monitor disk io + +label="" +dt=5 +MB_only=0 +kB_only=0 +width=4 +MB_precision=1 +kB_precision=0 +regex="${BLOCK_INSTANCE:-/^(s|h)d[a-zA-Z]+/}" +threshold=0 +warn_color="#FF0000" +sep="/" +unit_suffix="B/s" + +function list_devices { + echo "Devices iostat reports that match our regex:" + iostat | awk '$1~/^(s|h)d[a-zA-Z]+/{print $1}' +} + +while getopts L:t:w:p:P:R:s:ST:C:lLMmKkh opt; do + case "$opt" in + L) label="$OPTARG" ;; + t) dt="$OPTARG" ;; + w) width="$OPTARG" ;; + p) kB_precision="$OPTARG" ;; + P) MB_precision="$OPTARG" ;; + R) regex="$OPTARG" ;; + s) sep="$OPTARG" ;; + S) unit_suffix="" ;; + T) threshold="$OPTARG" ;; + C) warn_color="$OPTARG" ;; + l) list_devices; exit 0 ;; + M|m) MB_only=1 ;; + K|k) kB_only=1 ;; + h) printf \ +"Usage: disk-io [-t time] [-w width] [-p kB_precision] [-P MB_precision] [-R regex] [-s separator] [-S] [-T threshold [-C warn_color]] [-k|-M] [-l] [-h] +Options: +-L\tLabel to put in front of the text. Default: $label +-t\tTime interval in seconds between measurements. Default: $dt +-w\tThe width of printed floats. Default: $width +-p\tThe precision of kB/s floats. Default: $kB_precision +-P\tThe precision of MB/s floats. Default: $MB_precision +-R\tRegex that devices must match. Default: $regex +-s\tSeparator to put between rates. Default: $sep +-S\tShort units, omit B/s in kB/s and MB/s. +-T\tRate in kB/s to exceed to trigger a warning. Default: not enabled +-C\tColor to change the blocklet to warn the user. Default: $warn_color +-l\tList devices that iostat reports +-M\tDo not switch between MB/s and kB/s, use only MB/s +-k\tDo not switch between MB/s and kB/s, use only kB/s +-h\tShow this help text +" && exit 0;; + esac +done + +iostat -dyz "$dt" | awk -v sep="$sep" " + BEGIN { + rx = wx = 0; + } + { + if(\$0 == \"\") { + if ($threshold > 0 && (rx >= $threshold || wx >= $threshold)) { + printf \"<span color='$warn_color'>\"; + } + printf \"$label\"; + if(!$kB_only && ($MB_only || rx >= 1024 || wx >= 1024)) { + printf \"%-$width.${MB_precision}f%s%$width.${MB_precision}f M$unit_suffix\", rx/1024, sep, wx/1024; + } + else { + printf \"%-$width.${kB_precision}f%s%$width.${kB_precision}f k$unit_suffix\", rx, sep, wx; + } + if ($threshold > 0 && (rx >= $threshold || wx >= $threshold)) { + printf \"</span>\"; + } + printf \"\n\"; + fflush(stdout); + } + else if(\$1~/^Device:/) { + rx = wx = 0; + } + else if(\$1~$regex) { + rx += \$3; + wx += \$4; + } + }" diff --git a/.i3/scripts/displayselect b/.i3/scripts/displayselect new file mode 100755 index 0000000..f1f12c1 --- /dev/null +++ b/.i3/scripts/displayselect @@ -0,0 +1,16 @@ +#!/bin/sh + +choices="laptop\nlaptopdual\nVGA\nHDMI\nManual selection" + +chosen=$(echo -e "$choices" | dmenu -i) + +case "$chosen" in + laptopdual) xrandr --output LVDS-1 --auto --output VGA-1 --auto --right-of LVDS-1 ;; + laptop) xrandr --output LVDS-1 --auto --output VGA-1 --off ;; + VGA) xrandr --output VGA-1 --auto --output LVDS-1 --off ;; + HDMI) xrandr --output HDMI-1 --auto --output LVDS-1 --off ;; + "Manual selection") arandr ;; +esac + +# Relaunch polybar if there was a selection. +[ "$chosen" == "" ] || polybar_launch diff --git a/.i3/scripts/dmenuhandler b/.i3/scripts/dmenuhandler new file mode 100755 index 0000000..f00178b --- /dev/null +++ b/.i3/scripts/dmenuhandler @@ -0,0 +1,15 @@ +#!/bin/sh +# Feed this script a link and it will give dmenu +# some choice programs to use to open it. + +case "$(printf "copy url\\nmpv\\nmpv (loop)\\nqueue download\\n\\nqueue youtube-dl\\nfeh\\nbrowser\\nw3m\\nmpv (float)" | dmenu -i -p "Open link with what program?")" in + "copy url") echo "$1" | xclip -selection clipboard ;; + mpv) setsid mpv -quiet "$1" >/dev/null 2>&1 & ;; + "mpv (loop)") setsid mpv -quiet --loop "$1" >/dev/null 2>&1 & ;; + "queue download") tsp curl -LO "$1" >/dev/null 2>&1 ;; + "queue youtube-dl") tsp youtube-dl --write-metadata -ic "$1" >/dev/null 2>&1 ;; + browser) setsid "$TRUEBROWSER" "$1" >/dev/null 2>&1 & ;; + feh) setsid feh "$1" >/dev/null 2>&1 & ;; + w3m) w3m "$1" >/dev/null 2>&1 ;; + "mpv (float)") setsid mpv --geometry=+0-0 --autofit=30% --title="mpvfloat" "$1" >/dev/null 2>&1 & ;; +esac diff --git a/.i3/scripts/dmenumount b/.i3/scripts/dmenumount new file mode 100755 index 0000000..e0bb500 --- /dev/null +++ b/.i3/scripts/dmenumount @@ -0,0 +1,25 @@ +#!/bin/sh + +# Gives a dmenu prompt to mount unmounted drives. +# If they're in /etc/fstab, they'll be mounted automatically. +# Otherwise, you'll be prompted to give a mountpoint from already existsing directories. +# If you input a novel directory, it will prompt you to create that directory. + +pgrep -x dmenu && exit + +mountable=$(lsblk -lp | grep part | grep -v "t /" | awk '{print $1, "(" $4 ")"}') +[[ "$mountable" = "" ]] && exit 1 +chosen=$(echo "$mountable" | dmenu -i -p "Mount which drive?" | awk '{print $1}') +[[ "$chosen" = "" ]] && exit 1 +sudo mount "$chosen" && exit 0 +# You may want to change the line below for more suggestions for mounting. +# I.e. you can increase the depth of the search, or add directories. +# This will increase the load time briefly though. +dirs=$(find /mnt /media /mount /home -type d -maxdepth 5 2>/dev/null) +mountpoint=$(echo "$dirs" | dmenu -i -p "Type in mount point.") +[[ "$mountpoint" = "" ]] && exit 1 +if [[ ! -d "$mountpoint" ]]; then + mkdiryn=$(echo -e "No\nYes" | dmenu -i -p "$mountpoint does not exist. Create it?") + [[ "$mkdiryn" = Yes ]] && sudo mkdir -p "$mountpoint" +fi +sudo mount $chosen $mountpoint && pgrep -x dunst && notify-send "$chosen mounted to $mountpoint." diff --git a/.i3/scripts/dmenurecord b/.i3/scripts/dmenurecord new file mode 100755 index 0000000..75cc6ff --- /dev/null +++ b/.i3/scripts/dmenurecord @@ -0,0 +1,24 @@ +#!/bin/bash + +# A dmenu recording prompt for my different recording scripts. + +# Asks for type of recording and uses one of my three different scripts. +asktype() { \ +case $(echo -e "Screencast\nVideo only\nAudio only" | dmenu -i -p "Select recording style:") in + Screencast) screencast ;; + "Audio only") audio ;; + "Video only") video ;; +esac ;} + +# If already running, will ask to end previous recording. + +asktoend() { \ +response=$(echo -e "No\nYes" | dmenu -i -p "Recording still active. End recording?") && +if [[ "$response" = "Yes" ]]; then killall ffmpeg; fi ;} + +if (( $(pgrep dmenurecord | wc -l) > 2 )); then +asktoend; +else +asktype; +fi +echo $response diff --git a/.i3/scripts/dmenuumount b/.i3/scripts/dmenuumount new file mode 100755 index 0000000..d333e2a --- /dev/null +++ b/.i3/scripts/dmenuumount @@ -0,0 +1,14 @@ +#!/bin/sh + +# A dmenu prompt to unmount drives. +# Provides you with mounted partitions, select one to unmount. + +# Drives mounted at /, /boot and /home will not be options to unmount. +# This can be changed by modifying $exclusionregex. + +exclusionregex="\(/boot\|/home\|/\)$" +drives=$(lsblk -lp | grep "t /" | grep -v "$exclusionregex" | awk '{print $1, "(" $4 ")", "on", $7}') +[[ "$drives" = "" ]] && exit +chosen=$(echo "$drives" | dmenu -i -p "Unmount which drive?" | awk '{print $1}') +[[ "$chosen" = "" ]] && exit +sudo umount $chosen && pgrep -x dunst && notify-send "$chosen unmounted." diff --git a/.i3/scripts/dmenuunicode b/.i3/scripts/dmenuunicode new file mode 100755 index 0000000..a4ab828 --- /dev/null +++ b/.i3/scripts/dmenuunicode @@ -0,0 +1,18 @@ +#!/bin/sh +# Give dmenu list of all unicode characters to copy. +# Shows the selected character in dunst if running. + +# Must have xclip installed to even show menu. +xclip -h >/dev/null || exit + +chosen=$(grep -v "#" ~/.emoji | dmenu -i -l 10 -fn Monospace-12) + +[ "$chosen" != "" ] || exit + +c=$(echo "$chosen" | sed "s/ .*//") +echo "$c" | tr -d '\n' | xclip -selection clipboard +notify-send "'$c' copied to clipboard." & + +s=$(echo "$chosen" | sed "s/.*; //" | awk '{print $1}') +echo "$s" | tr -d '\n' | xclip +notify-send "'$s' copied to primary." & diff --git a/.i3/scripts/dropdowncalc b/.i3/scripts/dropdowncalc new file mode 100755 index 0000000..fee8f07 --- /dev/null +++ b/.i3/scripts/dropdowncalc @@ -0,0 +1,5 @@ +#!/bin/sh +# This script ensures that i3 will spawn a calculator. +# If R is installed, it will run R, otherwise it will run +# Python. +([ -e /usr/bin/R ] && R -q --no-save) || python -q diff --git a/.i3/scripts/ducksearch b/.i3/scripts/ducksearch new file mode 100755 index 0000000..13a1e19 --- /dev/null +++ b/.i3/scripts/ducksearch @@ -0,0 +1,15 @@ +#!/bin/sh + +# Gives a dmenu prompt to search DuckDuckGo. +# Without input, will open DuckDuckGo.com. +# Anything else, it search it. + +pgrep -x dmenu && exit + +choice=$(echo "🦆" | dmenu -i -p "Search DuckDuckGo:") || exit 1 + +if [ "$choice" = "🦆" ]; then + $BROWSER "https://duckduckgo.com" +else + $BROWSER "https://duckduckgo.com/?q=$choice&t=ffab&atb=v1-1" +fi diff --git a/.i3/scripts/ext b/.i3/scripts/ext new file mode 100755 index 0000000..c214583 --- /dev/null +++ b/.i3/scripts/ext @@ -0,0 +1,41 @@ +#!/bin/sh +# A general, all-purpose extraction script. +# +# Default behavior: Extract archive into new directory +# Behavior with `-c` option: Extract contents into current directory + +while getopts "hc" o; do case "${o}" in + c) extracthere="True" ;; + *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit ;; +esac done + +if [ -z "$extracthere" ]; then + archive="$(readlink -f "$*")" && + directory=${archive%.*} && + mkdir -p "$directory" && + cd "$directory" || exit +else + archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")" +fi + +[ "$archive" = "" ] && printf "Give archive to extract as argument.\\n" && exit + +if [ -f "$archive" ] ; then + case "$archive" in + *.tar.bz2|*.tar.xz|*.tbz2) tar xvjf "$archive" ;; + *.tar.gz|*.tgz) tar xvzf "$archive" ;; + *.lzma) unlzma "$archive" ;; + *.bz2) bunzip2 "$archive" ;; + *.rar) unrar x -ad "$archive" ;; + *.gz) gunzip "$archive" ;; + *.tar) tar xvf "$archive" ;; + *.zip) unzip "$archive" ;; + *.Z) uncompress "$archive" ;; + *.7z) 7z x "$archive" ;; + *.xz) unxz "$archive" ;; + *.exe) cabextract "$archive" ;; + *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;; + esac +else + printf "File \"%s\" not found.\\n" "$archive" +fi diff --git a/.i3/scripts/extract b/.i3/scripts/extract new file mode 100755 index 0000000..c214583 --- /dev/null +++ b/.i3/scripts/extract @@ -0,0 +1,41 @@ +#!/bin/sh +# A general, all-purpose extraction script. +# +# Default behavior: Extract archive into new directory +# Behavior with `-c` option: Extract contents into current directory + +while getopts "hc" o; do case "${o}" in + c) extracthere="True" ;; + *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit ;; +esac done + +if [ -z "$extracthere" ]; then + archive="$(readlink -f "$*")" && + directory=${archive%.*} && + mkdir -p "$directory" && + cd "$directory" || exit +else + archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")" +fi + +[ "$archive" = "" ] && printf "Give archive to extract as argument.\\n" && exit + +if [ -f "$archive" ] ; then + case "$archive" in + *.tar.bz2|*.tar.xz|*.tbz2) tar xvjf "$archive" ;; + *.tar.gz|*.tgz) tar xvzf "$archive" ;; + *.lzma) unlzma "$archive" ;; + *.bz2) bunzip2 "$archive" ;; + *.rar) unrar x -ad "$archive" ;; + *.gz) gunzip "$archive" ;; + *.tar) tar xvf "$archive" ;; + *.zip) unzip "$archive" ;; + *.Z) uncompress "$archive" ;; + *.7z) 7z x "$archive" ;; + *.xz) unxz "$archive" ;; + *.exe) cabextract "$archive" ;; + *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;; + esac +else + printf "File \"%s\" not found.\\n" "$archive" +fi diff --git a/.i3/scripts/getbib b/.i3/scripts/getbib new file mode 100755 index 0000000..bf02694 --- /dev/null +++ b/.i3/scripts/getbib @@ -0,0 +1,21 @@ +#!/bin/sh + +# Give this script a .pdf and it will attempt +# to return a proper .bib citation via doi. +# Internet connection required. + +if [ -f "$1" ]; +then + # Get the doi from metadata, if not possible, get + # doi from pdftotext output, if not possible, exit. + doi=$(pdfinfo "$1" | grep -io "doi:.*") || + doi=$(pdftotext "$1" 2>/dev/null - | grep -o "doi:.*" -m 1) || + exit 1 +else + # If not given file, assume argument is doi + doi="$1" +fi + +# Check crossref.org for the bib citation. +curl -s "http://api.crossref.org/works/$doi/transform/application/x-bibtex" -w "\\n" | + sed -e "/^[^\\(\\t\\|@\\|}\\)]/d" diff --git a/.i3/scripts/getkeys b/.i3/scripts/getkeys new file mode 100755 index 0000000..928e435 --- /dev/null +++ b/.i3/scripts/getkeys @@ -0,0 +1,5 @@ +#!/bin/sh + +cat ~/.scripts/.getkeys/"$1" 2>/dev/null && exit +echo Run command with one of the following arguments for info about that program: +ls ~/.scripts/.getkeys diff --git a/.i3/scripts/i3battery b/.i3/scripts/i3battery new file mode 100755 index 0000000..c140da2 --- /dev/null +++ b/.i3/scripts/i3battery @@ -0,0 +1,2 @@ +#!/bin/sh +acpi | cut -d " " -f3-5 | sed -e "s/,//g;s/Discharging/🔋/;s/Charging/🔌/;s/Full/⚡/;s/ 0*/ /g;s/ :/ /g" diff --git a/.i3/scripts/i3iface b/.i3/scripts/i3iface new file mode 100755 index 0000000..e354f50 --- /dev/null +++ b/.i3/scripts/i3iface @@ -0,0 +1,70 @@ +#!/bin/bash +# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info> +# Copyright (C) 2014 Alexander Keller <github@nycroth.com> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +#------------------------------------------------------------------------ + +# Use the provided interface, otherwise the device used for the default route. +if [[ -n $BLOCK_INSTANCE ]]; then + IF=$BLOCK_INSTANCE +else + IF=$(ip route | awk '/^default/ { print $5 ; exit }') +fi + +#------------------------------------------------------------------------ + +# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless +# connection (think desktop), the corresponding block should not be displayed. +[[ ! -d /sys/class/net/${IF} ]] && exit + +#------------------------------------------------------------------------ + +AF=inet6? +LABEL="" + +for flag in "$1" "$2"; do + case "$flag" in + -4) + AF=inet ;; + -6) + AF=inet6 ;; + -L) + if [[ "$IF" = "" ]]; then + LABEL="iface " + else + LABEL="$IF: " + fi ;; + esac +done + +if [[ "$IF" = "" ]] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then + echo "${LABEL}down" # full text + echo "${LABEL}down" # short text + echo \#FF0000 # color + exit +fi + +# if no interface is found, use the first device with a global scope +IPADDR=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$1 and exit") + +case $BLOCK_BUTTON in + 3) echo -n "$IPADDR" | xclip -q -se c ;; +esac + +#------------------------------------------------------------------------ + +echo "$LABEL$IPADDR" # full text +echo "$LABEL$IPADDR" # short text diff --git a/.i3/scripts/i3mail b/.i3/scripts/i3mail new file mode 100755 index 0000000..9b4aa3e --- /dev/null +++ b/.i3/scripts/i3mail @@ -0,0 +1,5 @@ +#!/bin/sh +case $BLOCK_BUTTON in + 1) $TERMINAL -e neomutt ;; +esac +echo $(find ~/.mail -wholename */INBOX/new/* | wc -l) diff --git a/.i3/scripts/i3mpd b/.i3/scripts/i3mpd new file mode 100755 index 0000000..b66f4c8 --- /dev/null +++ b/.i3/scripts/i3mpd @@ -0,0 +1,24 @@ +#!/bin/bash + +# Pass the password in the block instance +#if [[ -n $BLOCK_INSTANCE ]]; then + #password=("-h" "$BLOCK_INSTANCE@localhost") +#fi + +filter() { +# tr '\n' ' ' | grep -Po '.*(?= \[playing\])|paused' | tr -d '\n' + sed 2q | tac | sed -e "s/\&/&/g;/volume:/d;s/\[paused\].*/<span color=\"gray\" font_style=\"italic\">/g;s/\[playing\].*/<span>/g" | tr -d '\n' | sed -e "s/$/<\/span>/g" +} + +case $BLOCK_BUTTON in + 1) mpc status | filter && $TERMINAL -e ncmpcpp & disown ;; # right click, pause/unpause + 3) mpc toggle | filter ;; # right click, pause/unpause + 4) mpc prev | filter ;; # scroll up, previous + 5) mpc next | filter ;; # scroll down, next + *) mpc status | filter ;; + #1) mpc $password status | filter && $TERMINAL -e ncmpcpp & disown ;; # right click, pause/unpause + #3) mpc $password toggle | filter ;; # right click, pause/unpause + #4) mpc $password prev | filter ;; # scroll up, previous + #5) mpc $password next | filter ;; # scroll down, next + #*) mpc $password status | filter ;; +esac diff --git a/.i3/scripts/i3mpdupdate b/.i3/scripts/i3mpdupdate new file mode 100755 index 0000000..881b68f --- /dev/null +++ b/.i3/scripts/i3mpdupdate @@ -0,0 +1,6 @@ +#!/bin/bash +while : ; do + mpc idle > /dev/null + pkill -RTMIN+11 i3blocks ; +done + diff --git a/.i3/scripts/i3volume b/.i3/scripts/i3volume new file mode 100755 index 0000000..b47a6fa --- /dev/null +++ b/.i3/scripts/i3volume @@ -0,0 +1,12 @@ +#!/bin/bash + +case $BLOCK_BUTTON in + 1) $TERMINAL -e ncpamixer & disown ;; + 3) pamixer -t ;; + 4) pamixer -i 5 ;; + 5) pamixer -d 5 ;; +esac + +printpastatus() { [[ $(pamixer --get-mute) = "true" ]] && echo -n 🔇 && exit +echo 🔊 $(pamixer --get-volume)% ;} +printpastatus diff --git a/.i3/scripts/i3vpn b/.i3/scripts/i3vpn new file mode 100755 index 0000000..61caff7 --- /dev/null +++ b/.i3/scripts/i3vpn @@ -0,0 +1,23 @@ +#!/bin/bash +#Check VPN status + +GET_VPN=$(nmcli con show | grep tun0 | cut -d ' ' -f1) + +#Store status in STATUS + +if [[ $GET_VPN == *"tun0"* ]] +then + STATUSMSG=" `wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'`" + color=#00ff00 + echo "$STATUSMSG" + echo + echo $color +else + STATUSMSG="VPN OFF" + color=#ff0000 + echo "$STATUSMSG" + echo + echo $color +fi + + diff --git a/.i3/scripts/i3weather b/.i3/scripts/i3weather new file mode 100755 index 0000000..7aee4f3 --- /dev/null +++ b/.i3/scripts/i3weather @@ -0,0 +1,16 @@ +#!/bin/bash + +[[ $BLOCK_BUTTON = "1" ]] && st -e w3m wttr.in/~london + +ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` >/dev/null || exit + +### This is only if your location isn't automatically detected, otherwise you can leave it blank. +loc="hatfield" +location=${loc// /+} + +curl wttr.in/~$location > ~/.weatherreport + +echo -n ☔ $(cat ~/.weatherreport | sed -n 16p | sed -e 's/[^m]*m//g' | grep -o "[0-9]*%" | sort -n | sed -e '$!d') + +cat ~/.weatherreport | sed -n 13p | sed -e 's/[^m]*m//g;s/[^0-9]/ /g;s/ /\n/g;/^s*$/d' | grep [0-9] | sort -n | sed -e 1b -e '$!d' | tr '\n' ' ' | awk '{print " ❄️",$1 "°","☀️",$2 "°"}' + diff --git a/.i3/scripts/iface-down.png b/.i3/scripts/iface-down.png new file mode 100644 index 0000000..fc52879 --- /dev/null +++ b/.i3/scripts/iface-down.png @@ -0,0 +1,566 @@ + + + + + + +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <link rel="dns-prefetch" href="https://assets-cdn.github.com"> + <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com"> + <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> + <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> + + + + <link crossorigin="anonymous" media="all" integrity="sha512-hqbuBb0QOOmiWgl8a1V1N5q6TI/G0A2hVt/lCFYafR+fYsuXeRUcsdcb/yUyVEHYXktmUXl0Mx9s/BOUNZVq4w==" rel="stylesheet" href="https://assets-cdn.github.com/assets/frameworks-23c9e7262eee71bc6f67f6950190a162.css" /> + <link crossorigin="anonymous" media="all" integrity="sha512-elrcfQA6O59ztZagZ8cAOxGBBl3W1LD9cHCZYAlZYGvEmf7DQFKtSZH+aQAgGJkZVNtXvUSgfyuhMCUlJa+qnw==" rel="stylesheet" href="https://assets-cdn.github.com/assets/github-96998038581f9d275d4a4a841c12e652.css" /> + + + <link crossorigin="anonymous" media="all" integrity="sha512-cCY9KKeDzfGd+snVDZwcOIrTjK+JAFW4FR1c4OGJo1Z2QZNbAGVD6JlcnHL19LBcdByWHVxwrAPwigT/v/DWyQ==" rel="stylesheet" href="https://assets-cdn.github.com/assets/site-7472e7b4603d4095447d49d428375ab8.css" /> + + + <meta name="viewport" content="width=device-width"> + + <title>i3blocks-contrib/iface-down.png at master · vivien/i3blocks-contrib · GitHub</title> + <meta name="description" content="GitHub is where people build software. More than 27 million people use GitHub to discover, fork, and contribute to over 80 million projects."> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> + <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> + <meta property="fb:app_id" content="1401488693436528"> + + + <meta property="og:image" content="https://avatars1.githubusercontent.com/u/285808?s=400&v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="vivien/i3blocks-contrib" /><meta property="og:url" content="https://github.com/vivien/i3blocks-contrib" /><meta property="og:description" content="i3blocks-contrib - Official repository for community contributed blocklets" /> + + <link rel="assets" href="https://assets-cdn.github.com/"> + + <meta name="pjax-timeout" content="1000"> + + <meta name="request-id" content="E2CA:59D6:39F8654:69BA4FD:5AF9DDAC" data-pjax-transient> + + + + + <meta name="selected-link" value="repo_source" data-pjax-transient> + + <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> + <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> + <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> + <meta name="google-analytics" content="UA-3769691-2"> + +<meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="E2CA:59D6:39F8654:69BA4FD:5AF9DDAC" /><meta name="octolytics-dimension-region_edge" content="iad" /><meta name="octolytics-dimension-region_render" content="iad" /> +<meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" /> + + + + + <meta class="js-ga-set" name="dimension1" content="Logged Out"> + + + + + <meta name="hostname" content="github.com"> + <meta name="user-login" content=""> + + <meta name="expected-hostname" content="github.com"> + <meta name="js-proxy-site-detection-payload" content="YjRkNWRmNjljMGY3Njc2ZTkzODAyODg2NzcxM2JiNmY5MThhNGQ2OTNjNDg3NmU3NzlkMTU0ODZiNDU2NzY4N3x7InJlbW90ZV9hZGRyZXNzIjoiMjE3LjE1MS45OC4xNjgiLCJyZXF1ZXN0X2lkIjoiRTJDQTo1OUQ2OjM5Rjg2NTQ6NjlCQTRGRDo1QUY5RERBQyIsInRpbWVzdGFtcCI6MTUyNjMyNDY1MywiaG9zdCI6ImdpdGh1Yi5jb20ifQ=="> + + <meta name="enabled-features" content="UNIVERSE_BANNER,FREE_TRIALS,MARKETPLACE_INSIGHTS,MARKETPLACE_SELF_SERVE,MARKETPLACE_FREE_APPS,MARKETPLACE_INSIGHTS_CONVERSION_PERCENTAGES"> + + <meta name="html-safe-nonce" content="f71badab740469551fca6e4a4dcc1b60fa7e9620"> + + <meta http-equiv="x-pjax-version" content="b458851e8418d0ed3493c36c4d0efee5"> + + + <link href="https://github.com/vivien/i3blocks-contrib/commits/master.atom" rel="alternate" title="Recent Commits to i3blocks-contrib:master" type="application/atom+xml"> + + <meta name="description" content="i3blocks-contrib - Official repository for community contributed blocklets"> + <meta name="go-import" content="github.com/vivien/i3blocks-contrib git https://github.com/vivien/i3blocks-contrib.git"> + + <meta name="octolytics-dimension-user_id" content="285808" /><meta name="octolytics-dimension-user_login" content="vivien" /><meta name="octolytics-dimension-repository_id" content="39731454" /><meta name="octolytics-dimension-repository_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="39731454" /><meta name="octolytics-dimension-repository_network_root_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" /> + + + <link rel="canonical" href="https://github.com/vivien/i3blocks-contrib/blob/master/iface/iface-down.png" data-pjax-transient> + + + <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> + + <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> + + <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000"> + <link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://assets-cdn.github.com/favicon.ico"> + +<meta name="theme-color" content="#1e2327"> + + + +<link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> + + </head> + + <body class="logged-out env-production page-blob"> + + + <div class="position-relative js-header-wrapper "> + <a href="#start-of-content" tabindex="1" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a> + <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div> + + + + + + + + <header class="Header header-logged-out position-relative f4 py-3" role="banner"> + <div class="container-lg d-flex px-3"> + <div class="d-flex flex-justify-between flex-items-center"> + <a class="header-logo-invertocat my-0" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark"> + <svg height="32" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> + </a> + + </div> + + <div class="HeaderMenu HeaderMenu--bright d-flex flex-justify-between flex-auto"> + <nav class="mt-0"> + <ul class="d-flex list-style-none"> + <li class="ml-2"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:features" data-selected-links="/features /features/project-management /features/code-review /features/project-management /features/integrations /features" href="/features"> + Features +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/security /business/customers /business" href="/business"> + Business +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore"> + Explore +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:marketplace" data-selected-links=" /marketplace" href="/marketplace"> + Marketplace +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:pricing" data-selected-links="/pricing /pricing/developer /pricing/team /pricing/business-hosted /pricing/business-enterprise /pricing" href="/pricing"> + Pricing +</a> </li> + </ul> + </nav> + + <div class="d-flex"> + <div class="d-lg-flex flex-items-center mr-3"> + <div class="header-search scoped-search site-scoped-search js-site-search" role="search"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" data-scope-type="Repository" data-scope-id="39731454" data-scoped-search-url="/vivien/i3blocks-contrib/search" data-unscoped-search-url="/search" action="/vivien/i3blocks-contrib/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <label class="form-control header-search-wrapper js-chromeless-input-container"> + <a class="header-search-scope no-underline" href="/vivien/i3blocks-contrib/blob/master/iface/iface-down.png">This repository</a> + <input type="text" + class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable" + data-hotkey="s,/" + name="q" + value="" + placeholder="Search" + aria-label="Search this repository" + data-unscoped-placeholder="Search GitHub" + data-scoped-placeholder="Search" + autocapitalize="off" + > + <input type="hidden" class="js-site-search-type-field" name="type" > + </label> +</form></div> + + </div> + + <span class="d-inline-block"> + <div class="HeaderNavlink px-0 py-2 m-0"> + <a class="text-bold text-white no-underline" href="/login?return_to=%2Fvivien%2Fi3blocks-contrib%2Fblob%2Fmaster%2Fiface%2Fiface-down.png" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a> + <span class="text-gray">or</span> + <a class="text-bold text-white no-underline" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a> + </div> + </span> + </div> + </div> + </div> +</header> + + </div> + + <div id="start-of-content" class="show-on-focus"></div> + + <div id="js-flash-container"> +</div> + + + + <div role="main" class="application-main "> + <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> + <div id="js-repo-pjax-container" data-pjax-container > + + + + + + + + + <div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav "> + <div class="repohead-details-container clearfix container"> + + <ul class="pagehead-actions"> + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to watch a repository" rel="nofollow"> + <svg class="octicon octicon-eye" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg> + Watch + </a> + <a class="social-count" href="/vivien/i3blocks-contrib/watchers" + aria-label="24 users are watching this repository"> + 24 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to star a repository" rel="nofollow"> + <svg class="octicon octicon-star" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg> + Star + </a> + + <a class="social-count js-social-count" href="/vivien/i3blocks-contrib/stargazers" + aria-label="285 users starred this repository"> + 285 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to fork a repository" rel="nofollow"> + <svg class="octicon octicon-repo-forked" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + Fork + </a> + + <a href="/vivien/i3blocks-contrib/network" class="social-count" + aria-label="96 users forked this repository"> + 96 + </a> + </li> +</ul> + + <h1 class="public "> + <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg> + <span class="author" itemprop="author"><a class="url fn" rel="author" href="/vivien">vivien</a></span><!-- +--><span class="path-divider">/</span><!-- +--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/vivien/i3blocks-contrib">i3blocks-contrib</a></strong> + +</h1> + + </div> + +<nav class="reponav js-repo-nav js-sidenav-container-pjax container" + itemscope + itemtype="http://schema.org/BreadcrumbList" + role="navigation" + data-pjax="#js-repo-pjax-container"> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /vivien/i3blocks-contrib" href="/vivien/i3blocks-contrib"> + <svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg> + <span itemprop="name">Code</span> + <meta itemprop="position" content="1"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /vivien/i3blocks-contrib/issues" href="/vivien/i3blocks-contrib/issues"> + <svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg> + <span itemprop="name">Issues</span> + <span class="Counter">15</span> + <meta itemprop="position" content="2"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a data-hotkey="g p" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /vivien/i3blocks-contrib/pulls" href="/vivien/i3blocks-contrib/pulls"> + <svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + <span itemprop="name">Pull requests</span> + <span class="Counter">20</span> + <meta itemprop="position" content="3"> +</a> </span> + + <a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /vivien/i3blocks-contrib/projects" href="/vivien/i3blocks-contrib/projects"> + <svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg> + Projects + <span class="Counter" >0</span> +</a> + <a class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /vivien/i3blocks-contrib/wiki" href="/vivien/i3blocks-contrib/wiki"> + <svg class="octicon octicon-book" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg> + Wiki +</a> + + <a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse /vivien/i3blocks-contrib/pulse" href="/vivien/i3blocks-contrib/pulse"> + <svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg> + Insights +</a> + +</nav> + + + </div> + +<div class="container new-discussion-timeline experiment-repo-nav "> + <div class="repository-content "> + + + <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/vivien/i3blocks-contrib/blob/72e7afea8e35f63cee5956c84206d5c7b70ddae5/iface/iface-down.png">Permalink</a> + + <!-- blob contrib key: blob_contributors:v21:117bbdfe28c55630230299ddf394bb80 --> + + <div class="file-navigation"> + +<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left"> + <button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w" + + type="button" aria-label="Switch branches or tags" aria-expanded="false" aria-haspopup="true"> + <i>Branch:</i> + <span class="js-select-button css-truncate-target">master</span> + </button> + + <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax> + + <div class="select-menu-modal"> + <div class="select-menu-header"> + <svg class="octicon octicon-x js-menu-close" role="img" aria-label="Close" viewBox="0 0 12 16" version="1.1" width="12" height="16"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + <span class="select-menu-title">Switch branches/tags</span> + </div> + + <div class="select-menu-filters"> + <div class="select-menu-text-filter"> + <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags"> + </div> + <div class="select-menu-tabs"> + <ul> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a> + </li> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a> + </li> + </ul> + </div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu"> + + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open selected" + href="/vivien/i3blocks-contrib/blob/master/iface/iface-down.png" + data-name="master" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + master + </span> + </a> + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/blob/next/iface/iface-down.png" + data-name="next" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + next + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags"> + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/tree/v1.4.0/iface/iface-down.png" + data-name="v1.4.0" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target" title="v1.4.0"> + v1.4.0 + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + </div> + </div> +</div> + + <div class="BtnGroup float-right"> + <a href="/vivien/i3blocks-contrib/find/master" + class="js-pjax-capture-input btn btn-sm BtnGroup-item" + data-pjax + data-hotkey="t"> + Find file + </a> + <clipboard-copy for="blob-path" class="btn btn-sm BtnGroup-item"> + Copy path + </clipboard-copy> + </div> + <div id="blob-path" class="breadcrumb"> + <span class="repo-root js-repo-root"><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib"><span>i3blocks-contrib</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib/tree/master/iface"><span>iface</span></a></span><span class="separator">/</span><strong class="final-path">iface-down.png</strong> + </div> + </div> + + + <include-fragment src="/vivien/i3blocks-contrib/contributors/master/iface/iface-down.png" class="commit-tease"> + <div> + Fetching contributors… + </div> + + <div class="commit-tease-contributors"> + <img alt="" class="loader-loading float-left" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" height="16" /> + <span class="loader-error">Cannot retrieve contributors at this time</span> + </div> +</include-fragment> + + + <div class="file"> + <div class="file-header"> + <div class="file-actions"> + + <div class="BtnGroup"> + <a id="raw-url" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/raw/master/iface/iface-down.png">Download</a> + <a rel="nofollow" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/commits/master/iface/iface-down.png">History</a> + </div> + + + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" action="/vivien/i3blocks-contrib/delete/master/iface/iface-down.png" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="rkIxbHS/riwl3JY191MlJDlI3CKSXs9h5RTsXZalhGPRDZFxSXUJ6Ebk2ySf+AtM0FiNdnGbqga632necwjPUw==" /> + <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit" + aria-label="You must be signed in to make or propose changes" data-disable-with> + <svg class="octicon octicon-trashcan" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg> + </button> +</form> </div> + + <div class="file-info"> + 459 Bytes + </div> +</div> + + + + <div itemprop="text" class="blob-wrapper data type-text"> + <div class="image"> + <span class="border-wrap"><img src="/vivien/i3blocks-contrib/blob/master/iface/iface-down.png?raw=true" alt="iface-down.png"></span> + </div> + </div> + + </div> + + <button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button> + <div id="jump-to-line" style="display:none"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form" action="" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus> + <button type="submit" class="btn">Go</button> +</form> </div> + + + </div> + <div class="modal-backdrop js-touch-events"></div> +</div> + + </div> + </div> + + </div> + + +<div class="footer container-lg px-3" role="contentinfo"> + <div class="position-relative d-flex flex-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light "> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3">© 2018 <span title="0.26529s from unicorn-570656551-l7df6">GitHub</span>, Inc.</li> + <li class="mr-3"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li> + <li class="mr-3"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li> + <li class="mr-3"><a href="https://help.github.com/articles/github-security/" data-ga-click="Footer, go to security, text:security">Security</a></li> + <li class="mr-3"><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li> + <li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li> + </ul> + + <a aria-label="Homepage" title="GitHub" class="footer-octicon" href="https://github.com"> + <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> +</a> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li> + <li class="mr-3"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li> + <li class="mr-3"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li> + <li class="mr-3"><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li> + <li class="mr-3"><a href="https://blog.github.com" data-ga-click="Footer, go to blog, text:blog">Blog</a></li> + <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li> + + </ul> + </div> + <div class="d-flex flex-justify-center pb-6"> + <span class="f6 text-gray-light"></span> + </div> +</div> + + + + <div id="ajax-error-message" class="ajax-error-message flash flash-error"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + You can’t perform that action at this time. + </div> + + + <script crossorigin="anonymous" integrity="sha512-2GVr5rsbbfKbHM6oRrri41+qJ2ltJBCqluASS29fj+9yHGLFmFhq0C64VMdL57UJ34G2+FXU+8FZhaAOnsCEhw==" type="application/javascript" src="https://assets-cdn.github.com/assets/compat-bb7abfb15ed4ffb0da9056d4c980fba5.js"></script> + <script crossorigin="anonymous" integrity="sha512-Aff3pZ4kxDZQtwoDgGXK3pyN4iQf3iacjHCHaTq0uvu7OAGAVBmvy1B9BIl72Yr4elhuVbdYlkDdCLOERCA3sw==" type="application/javascript" src="https://assets-cdn.github.com/assets/frameworks-69305c61e4ce67cdef4a70845fc0e959.js"></script> + + <script crossorigin="anonymous" async="async" integrity="sha512-lR6qGUwl+E+II1nTIoUOEsiPPSiFXngO9f8qpYgVtj4Qpz3Txge9KdIdqLMLrpdpVLzkTgyB3Un3aexsxttJ8Q==" type="application/javascript" src="https://assets-cdn.github.com/assets/github-bed113001abefcd143ae6f67ad18ff59.js"></script> + + + + + <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> + <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> + </div> + <div class="facebox" id="facebox" style="display:none;"> + <div class="facebox-popup"> + <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description"> + </div> + <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + </div> +</div> + + <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> + <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;"> + </div> +</div> + +<div id="hovercard-aria-description" class="sr-only"> + Press h to open a hovercard with more details. +</div> + + + </body> +</html> + diff --git a/.i3/scripts/iface-up.png b/.i3/scripts/iface-up.png new file mode 100644 index 0000000..cb82ac5 --- /dev/null +++ b/.i3/scripts/iface-up.png @@ -0,0 +1,566 @@ + + + + + + +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <link rel="dns-prefetch" href="https://assets-cdn.github.com"> + <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com"> + <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> + <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> + + + + <link crossorigin="anonymous" media="all" integrity="sha512-hqbuBb0QOOmiWgl8a1V1N5q6TI/G0A2hVt/lCFYafR+fYsuXeRUcsdcb/yUyVEHYXktmUXl0Mx9s/BOUNZVq4w==" rel="stylesheet" href="https://assets-cdn.github.com/assets/frameworks-23c9e7262eee71bc6f67f6950190a162.css" /> + <link crossorigin="anonymous" media="all" integrity="sha512-elrcfQA6O59ztZagZ8cAOxGBBl3W1LD9cHCZYAlZYGvEmf7DQFKtSZH+aQAgGJkZVNtXvUSgfyuhMCUlJa+qnw==" rel="stylesheet" href="https://assets-cdn.github.com/assets/github-96998038581f9d275d4a4a841c12e652.css" /> + + + <link crossorigin="anonymous" media="all" integrity="sha512-cCY9KKeDzfGd+snVDZwcOIrTjK+JAFW4FR1c4OGJo1Z2QZNbAGVD6JlcnHL19LBcdByWHVxwrAPwigT/v/DWyQ==" rel="stylesheet" href="https://assets-cdn.github.com/assets/site-7472e7b4603d4095447d49d428375ab8.css" /> + + + <meta name="viewport" content="width=device-width"> + + <title>i3blocks-contrib/iface-up.png at master · vivien/i3blocks-contrib · GitHub</title> + <meta name="description" content="GitHub is where people build software. More than 27 million people use GitHub to discover, fork, and contribute to over 80 million projects."> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> + <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> + <meta property="fb:app_id" content="1401488693436528"> + + + <meta property="og:image" content="https://avatars1.githubusercontent.com/u/285808?s=400&v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="vivien/i3blocks-contrib" /><meta property="og:url" content="https://github.com/vivien/i3blocks-contrib" /><meta property="og:description" content="i3blocks-contrib - Official repository for community contributed blocklets" /> + + <link rel="assets" href="https://assets-cdn.github.com/"> + + <meta name="pjax-timeout" content="1000"> + + <meta name="request-id" content="B4A0:59D3:2A3610C:4FCF2E5:5AF9DDBA" data-pjax-transient> + + + + + <meta name="selected-link" value="repo_source" data-pjax-transient> + + <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> + <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> + <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> + <meta name="google-analytics" content="UA-3769691-2"> + +<meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="B4A0:59D3:2A3610C:4FCF2E5:5AF9DDBA" /><meta name="octolytics-dimension-region_edge" content="iad" /><meta name="octolytics-dimension-region_render" content="iad" /> +<meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" /> + + + + + <meta class="js-ga-set" name="dimension1" content="Logged Out"> + + + + + <meta name="hostname" content="github.com"> + <meta name="user-login" content=""> + + <meta name="expected-hostname" content="github.com"> + <meta name="js-proxy-site-detection-payload" content="ZWVhNWU3OTM1N2E2NTM0NDkzOGI3MDIwNTlkYWYzYzY2MjdkZjdjNDhjMDY5MDU4Y2VlODY0NTRiNzc1ZjVjY3x7InJlbW90ZV9hZGRyZXNzIjoiMjE3LjE1MS45OC4xNjgiLCJyZXF1ZXN0X2lkIjoiQjRBMDo1OUQzOjJBMzYxMEM6NEZDRjJFNTo1QUY5RERCQSIsInRpbWVzdGFtcCI6MTUyNjMyNDY2NywiaG9zdCI6ImdpdGh1Yi5jb20ifQ=="> + + <meta name="enabled-features" content="UNIVERSE_BANNER,FREE_TRIALS,MARKETPLACE_INSIGHTS,MARKETPLACE_SELF_SERVE,MARKETPLACE_FREE_APPS,MARKETPLACE_INSIGHTS_CONVERSION_PERCENTAGES"> + + <meta name="html-safe-nonce" content="05d40f24d38bfbd71ae717619ec73b2102c17ff8"> + + <meta http-equiv="x-pjax-version" content="b458851e8418d0ed3493c36c4d0efee5"> + + + <link href="https://github.com/vivien/i3blocks-contrib/commits/master.atom" rel="alternate" title="Recent Commits to i3blocks-contrib:master" type="application/atom+xml"> + + <meta name="description" content="i3blocks-contrib - Official repository for community contributed blocklets"> + <meta name="go-import" content="github.com/vivien/i3blocks-contrib git https://github.com/vivien/i3blocks-contrib.git"> + + <meta name="octolytics-dimension-user_id" content="285808" /><meta name="octolytics-dimension-user_login" content="vivien" /><meta name="octolytics-dimension-repository_id" content="39731454" /><meta name="octolytics-dimension-repository_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="39731454" /><meta name="octolytics-dimension-repository_network_root_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" /> + + + <link rel="canonical" href="https://github.com/vivien/i3blocks-contrib/blob/master/iface/iface-up.png" data-pjax-transient> + + + <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> + + <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> + + <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000"> + <link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://assets-cdn.github.com/favicon.ico"> + +<meta name="theme-color" content="#1e2327"> + + + +<link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> + + </head> + + <body class="logged-out env-production page-blob"> + + + <div class="position-relative js-header-wrapper "> + <a href="#start-of-content" tabindex="1" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a> + <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div> + + + + + + + + <header class="Header header-logged-out position-relative f4 py-3" role="banner"> + <div class="container-lg d-flex px-3"> + <div class="d-flex flex-justify-between flex-items-center"> + <a class="header-logo-invertocat my-0" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark"> + <svg height="32" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> + </a> + + </div> + + <div class="HeaderMenu HeaderMenu--bright d-flex flex-justify-between flex-auto"> + <nav class="mt-0"> + <ul class="d-flex list-style-none"> + <li class="ml-2"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:features" data-selected-links="/features /features/project-management /features/code-review /features/project-management /features/integrations /features" href="/features"> + Features +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/security /business/customers /business" href="/business"> + Business +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore"> + Explore +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:marketplace" data-selected-links=" /marketplace" href="/marketplace"> + Marketplace +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:pricing" data-selected-links="/pricing /pricing/developer /pricing/team /pricing/business-hosted /pricing/business-enterprise /pricing" href="/pricing"> + Pricing +</a> </li> + </ul> + </nav> + + <div class="d-flex"> + <div class="d-lg-flex flex-items-center mr-3"> + <div class="header-search scoped-search site-scoped-search js-site-search" role="search"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" data-scope-type="Repository" data-scope-id="39731454" data-scoped-search-url="/vivien/i3blocks-contrib/search" data-unscoped-search-url="/search" action="/vivien/i3blocks-contrib/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <label class="form-control header-search-wrapper js-chromeless-input-container"> + <a class="header-search-scope no-underline" href="/vivien/i3blocks-contrib/blob/master/iface/iface-up.png">This repository</a> + <input type="text" + class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable" + data-hotkey="s,/" + name="q" + value="" + placeholder="Search" + aria-label="Search this repository" + data-unscoped-placeholder="Search GitHub" + data-scoped-placeholder="Search" + autocapitalize="off" + > + <input type="hidden" class="js-site-search-type-field" name="type" > + </label> +</form></div> + + </div> + + <span class="d-inline-block"> + <div class="HeaderNavlink px-0 py-2 m-0"> + <a class="text-bold text-white no-underline" href="/login?return_to=%2Fvivien%2Fi3blocks-contrib%2Fblob%2Fmaster%2Fiface%2Fiface-up.png" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a> + <span class="text-gray">or</span> + <a class="text-bold text-white no-underline" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a> + </div> + </span> + </div> + </div> + </div> +</header> + + </div> + + <div id="start-of-content" class="show-on-focus"></div> + + <div id="js-flash-container"> +</div> + + + + <div role="main" class="application-main "> + <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> + <div id="js-repo-pjax-container" data-pjax-container > + + + + + + + + + <div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav "> + <div class="repohead-details-container clearfix container"> + + <ul class="pagehead-actions"> + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to watch a repository" rel="nofollow"> + <svg class="octicon octicon-eye" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg> + Watch + </a> + <a class="social-count" href="/vivien/i3blocks-contrib/watchers" + aria-label="24 users are watching this repository"> + 24 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to star a repository" rel="nofollow"> + <svg class="octicon octicon-star" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg> + Star + </a> + + <a class="social-count js-social-count" href="/vivien/i3blocks-contrib/stargazers" + aria-label="285 users starred this repository"> + 285 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to fork a repository" rel="nofollow"> + <svg class="octicon octicon-repo-forked" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + Fork + </a> + + <a href="/vivien/i3blocks-contrib/network" class="social-count" + aria-label="96 users forked this repository"> + 96 + </a> + </li> +</ul> + + <h1 class="public "> + <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg> + <span class="author" itemprop="author"><a class="url fn" rel="author" href="/vivien">vivien</a></span><!-- +--><span class="path-divider">/</span><!-- +--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/vivien/i3blocks-contrib">i3blocks-contrib</a></strong> + +</h1> + + </div> + +<nav class="reponav js-repo-nav js-sidenav-container-pjax container" + itemscope + itemtype="http://schema.org/BreadcrumbList" + role="navigation" + data-pjax="#js-repo-pjax-container"> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /vivien/i3blocks-contrib" href="/vivien/i3blocks-contrib"> + <svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg> + <span itemprop="name">Code</span> + <meta itemprop="position" content="1"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /vivien/i3blocks-contrib/issues" href="/vivien/i3blocks-contrib/issues"> + <svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg> + <span itemprop="name">Issues</span> + <span class="Counter">15</span> + <meta itemprop="position" content="2"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a data-hotkey="g p" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /vivien/i3blocks-contrib/pulls" href="/vivien/i3blocks-contrib/pulls"> + <svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + <span itemprop="name">Pull requests</span> + <span class="Counter">20</span> + <meta itemprop="position" content="3"> +</a> </span> + + <a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /vivien/i3blocks-contrib/projects" href="/vivien/i3blocks-contrib/projects"> + <svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg> + Projects + <span class="Counter" >0</span> +</a> + <a class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /vivien/i3blocks-contrib/wiki" href="/vivien/i3blocks-contrib/wiki"> + <svg class="octicon octicon-book" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg> + Wiki +</a> + + <a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse /vivien/i3blocks-contrib/pulse" href="/vivien/i3blocks-contrib/pulse"> + <svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg> + Insights +</a> + +</nav> + + + </div> + +<div class="container new-discussion-timeline experiment-repo-nav "> + <div class="repository-content "> + + + <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/vivien/i3blocks-contrib/blob/72e7afea8e35f63cee5956c84206d5c7b70ddae5/iface/iface-up.png">Permalink</a> + + <!-- blob contrib key: blob_contributors:v21:00be70e057fac8faca0df3c6ddb9e4be --> + + <div class="file-navigation"> + +<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left"> + <button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w" + + type="button" aria-label="Switch branches or tags" aria-expanded="false" aria-haspopup="true"> + <i>Branch:</i> + <span class="js-select-button css-truncate-target">master</span> + </button> + + <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax> + + <div class="select-menu-modal"> + <div class="select-menu-header"> + <svg class="octicon octicon-x js-menu-close" role="img" aria-label="Close" viewBox="0 0 12 16" version="1.1" width="12" height="16"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + <span class="select-menu-title">Switch branches/tags</span> + </div> + + <div class="select-menu-filters"> + <div class="select-menu-text-filter"> + <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags"> + </div> + <div class="select-menu-tabs"> + <ul> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a> + </li> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a> + </li> + </ul> + </div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu"> + + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open selected" + href="/vivien/i3blocks-contrib/blob/master/iface/iface-up.png" + data-name="master" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + master + </span> + </a> + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/blob/next/iface/iface-up.png" + data-name="next" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + next + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags"> + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/tree/v1.4.0/iface/iface-up.png" + data-name="v1.4.0" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target" title="v1.4.0"> + v1.4.0 + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + </div> + </div> +</div> + + <div class="BtnGroup float-right"> + <a href="/vivien/i3blocks-contrib/find/master" + class="js-pjax-capture-input btn btn-sm BtnGroup-item" + data-pjax + data-hotkey="t"> + Find file + </a> + <clipboard-copy for="blob-path" class="btn btn-sm BtnGroup-item"> + Copy path + </clipboard-copy> + </div> + <div id="blob-path" class="breadcrumb"> + <span class="repo-root js-repo-root"><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib"><span>i3blocks-contrib</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib/tree/master/iface"><span>iface</span></a></span><span class="separator">/</span><strong class="final-path">iface-up.png</strong> + </div> + </div> + + + <include-fragment src="/vivien/i3blocks-contrib/contributors/master/iface/iface-up.png" class="commit-tease"> + <div> + Fetching contributors… + </div> + + <div class="commit-tease-contributors"> + <img alt="" class="loader-loading float-left" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" height="16" /> + <span class="loader-error">Cannot retrieve contributors at this time</span> + </div> +</include-fragment> + + + <div class="file"> + <div class="file-header"> + <div class="file-actions"> + + <div class="BtnGroup"> + <a id="raw-url" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/raw/master/iface/iface-up.png">Download</a> + <a rel="nofollow" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/commits/master/iface/iface-up.png">History</a> + </div> + + + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" action="/vivien/i3blocks-contrib/delete/master/iface/iface-up.png" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="MZmDWDObtREjPfRx5mScjdITJoYbp2Nm14yo94+c8EtUs8M7uoDs9QDtWO9/kFEufweJZO5PhZzlsmogu0em4Q==" /> + <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit" + aria-label="You must be signed in to make or propose changes" data-disable-with> + <svg class="octicon octicon-trashcan" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg> + </button> +</form> </div> + + <div class="file-info"> + 856 Bytes + </div> +</div> + + + + <div itemprop="text" class="blob-wrapper data type-text"> + <div class="image"> + <span class="border-wrap"><img src="/vivien/i3blocks-contrib/blob/master/iface/iface-up.png?raw=true" alt="iface-up.png"></span> + </div> + </div> + + </div> + + <button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button> + <div id="jump-to-line" style="display:none"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form" action="" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus> + <button type="submit" class="btn">Go</button> +</form> </div> + + + </div> + <div class="modal-backdrop js-touch-events"></div> +</div> + + </div> + </div> + + </div> + + +<div class="footer container-lg px-3" role="contentinfo"> + <div class="position-relative d-flex flex-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light "> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3">© 2018 <span title="0.28781s from unicorn-3245507942-jb7sd">GitHub</span>, Inc.</li> + <li class="mr-3"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li> + <li class="mr-3"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li> + <li class="mr-3"><a href="https://help.github.com/articles/github-security/" data-ga-click="Footer, go to security, text:security">Security</a></li> + <li class="mr-3"><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li> + <li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li> + </ul> + + <a aria-label="Homepage" title="GitHub" class="footer-octicon" href="https://github.com"> + <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> +</a> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li> + <li class="mr-3"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li> + <li class="mr-3"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li> + <li class="mr-3"><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li> + <li class="mr-3"><a href="https://blog.github.com" data-ga-click="Footer, go to blog, text:blog">Blog</a></li> + <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li> + + </ul> + </div> + <div class="d-flex flex-justify-center pb-6"> + <span class="f6 text-gray-light"></span> + </div> +</div> + + + + <div id="ajax-error-message" class="ajax-error-message flash flash-error"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + You can’t perform that action at this time. + </div> + + + <script crossorigin="anonymous" integrity="sha512-2GVr5rsbbfKbHM6oRrri41+qJ2ltJBCqluASS29fj+9yHGLFmFhq0C64VMdL57UJ34G2+FXU+8FZhaAOnsCEhw==" type="application/javascript" src="https://assets-cdn.github.com/assets/compat-bb7abfb15ed4ffb0da9056d4c980fba5.js"></script> + <script crossorigin="anonymous" integrity="sha512-Aff3pZ4kxDZQtwoDgGXK3pyN4iQf3iacjHCHaTq0uvu7OAGAVBmvy1B9BIl72Yr4elhuVbdYlkDdCLOERCA3sw==" type="application/javascript" src="https://assets-cdn.github.com/assets/frameworks-69305c61e4ce67cdef4a70845fc0e959.js"></script> + + <script crossorigin="anonymous" async="async" integrity="sha512-lR6qGUwl+E+II1nTIoUOEsiPPSiFXngO9f8qpYgVtj4Qpz3Txge9KdIdqLMLrpdpVLzkTgyB3Un3aexsxttJ8Q==" type="application/javascript" src="https://assets-cdn.github.com/assets/github-bed113001abefcd143ae6f67ad18ff59.js"></script> + + + + + <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> + <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> + </div> + <div class="facebox" id="facebox" style="display:none;"> + <div class="facebox-popup"> + <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description"> + </div> + <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + </div> +</div> + + <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> + <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;"> + </div> +</div> + +<div id="hovercard-aria-description" class="sr-only"> + Press h to open a hovercard with more details. +</div> + + + </body> +</html> + diff --git a/.i3/scripts/larbs.png b/.i3/scripts/larbs.png Binary files differnew file mode 100644 index 0000000..0dbc687 --- /dev/null +++ b/.i3/scripts/larbs.png diff --git a/.i3/scripts/linkhandler b/.i3/scripts/linkhandler new file mode 100755 index 0000000..4f364fc --- /dev/null +++ b/.i3/scripts/linkhandler @@ -0,0 +1,27 @@ +#!/bin/sh + +# Feed script a url or file location. +# If an image, it will view in feh, +# if a video or gif, it will view in mpv +# if a music file or pdf, it will download, +# otherwise it opens link in browser. + +# Sci-Hub's domain occasionally changes due to shutdowns: +scihub="http://sci-hub.tw/" + +# If no url given. Opens browser. For using script as $BROWSER. +[ -z "$1" ] && { "$TRUEBROWSER"; exit; } + +case "$1" in + *mkv|*webm|*mp4|*gif|*youtube.com*|*youtu.be*|*hooktube.com*|*bitchute.com*) + setsid mpv -quiet "$1" >/dev/null 2>&1 & ;; + *png|*jpg|*jpe|*jpeg) + setsid feh "$1" >/dev/null 2>&1 & ;; + *mp3|*flac|*opus|*mp3?source) + setsid tsp curl -LO "$1" >/dev/null 2>&1 & ;; + *springer.com*) + setsid curl -sO "$(curl -s "$scihub$*" | grep -Po "(?<=location.href=').+.pdf")" >/dev/null 2>&1 & ;; + *) + if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR $1" + else setsid "$TRUEBROWSER" "$1" >/dev/null 2>&1 & fi ;; +esac diff --git a/.i3/scripts/lmc b/.i3/scripts/lmc new file mode 100755 index 0000000..45cfcd9 --- /dev/null +++ b/.i3/scripts/lmc @@ -0,0 +1,43 @@ +#!/bin/sh + +# A general audio interface for LARBS. + +newvol="pkill -RTMIN+10 i3blocks" + +[ -z "$2" ] && num="2" || num="$2" + +case "$1" in + u*) pulsemixer --change-volume +"$num" ; $newvol ;; + d*) pulsemixer --change-volume -"$num" ; $newvol ;; + m*) pulsemixer --toggle-mute ; $newvol ;; + truemute) pulsemixer --mute ; $newvol ;; + play) mpc play ;; + n*) mpc next ;; + prev) mpc prev ;; + t*) mpc toggle ;; + p*) mpc pause ; pauseallmpv ;; + f*) mpc seek +"$num" ;; + b*) mpc seek -"$num" ;; + r*) mpc seek 0% ;; + *) cat << EOF +lmc: cli music interface for mpd and pulse for those with divine intellect too +grand to remember the mpc/pamixer commands. + +Allowed options: + up NUM Increase volume (2 secs default) + down NUM Decrease volume (2 secs default) + mute Toggle mute + truemute Mute + next Next track + prev Previous track + toggle Toggle pause + truepause Pause + foward NUM Seek foward in song (2 secs default) + back NUM Seek back in song (2 secs default) + restart Restart current song + all else Print this message + +All of these commands, except for \`truemute\`, \`prev\` and \`play\` can be truncated, +i.e. \`lmc r\` for \`lmc restart\`. +EOF +esac diff --git a/.i3/scripts/load_average.sh b/.i3/scripts/load_average.sh new file mode 100755 index 0000000..37a5c71 --- /dev/null +++ b/.i3/scripts/load_average.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load="$(cut -d ' ' -f1 /proc/loadavg)" +cpus="$(nproc)" + +# full text +echo "$load" + +# short text +echo "$load" + +# color if load is too high +awk -v cpus=$cpus -v cpuload=$load ' + BEGIN { + if (cpus <= cpuload) { + print "#FF0000"; + exit 33; + } + } +' diff --git a/.i3/scripts/lock.sh b/.i3/scripts/lock.sh new file mode 100755 index 0000000..0377cb1 --- /dev/null +++ b/.i3/scripts/lock.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +icon="$HOME/Pictures/Icons/lock.png" +tmpbg='/tmp/screen.png' + +(( $# )) && { icon=$1; } + +scrot "$tmpbg" +convert "$tmpbg" -scale 10% -scale 1000% "$tmpbg" +convert "$tmpbg" "$icon" -gravity center -composite -matte "$tmpbg" +i3lock -i "$tmpbg" diff --git a/.i3/scripts/lockscreen b/.i3/scripts/lockscreen new file mode 100755 index 0000000..c628938 --- /dev/null +++ b/.i3/scripts/lockscreen @@ -0,0 +1,19 @@ +#!/bin/sh + +rm -f /tmp/locked.png + +# If `imagemagick` is not installed, use a blank screen. +[ -f /usr/bin/convert ] && +scrot -m -z /tmp/base.png && +pgrep -x dunst && notify-send -i ~/Pictures/Icons/lock.png "Locking computer..." && +convert /tmp/base.png -blur 0x8 /tmp/locked.png + +# Pause music (mocp, mpd and send the pause key to all mpv videos): +mocp -P >/dev/null 2>&1 +mpc pause >/dev/null 2>&1 +~/.i3/scripts/pauseallmpv >/dev/null 2>&1 + +i3lock -e -f -c 000000 -i /tmp/locked.png + +# In five seconds, turn off display unless key press in last 4 seconds. +sleep 5 && [ 4000 -lt "$(xssstate -i)" ] && pgrep -x i3lock && xset dpms force off diff --git a/.i3/scripts/mailbox b/.i3/scripts/mailbox new file mode 100755 index 0000000..c0794e5 --- /dev/null +++ b/.i3/scripts/mailbox @@ -0,0 +1,16 @@ +#!/bin/sh + +# i3blocks mail module. +# Displays number of unread mail and an loading icon if updating. +# When clicked, brings up `neomutt`. + +case $BLOCK_BUTTON in + 1) "$TERMINAL" -e neomutt ;; + 2) setsid $HOME/.config/mutt/etc/mailsync.sh >/dev/null & ;; + 3) pgrep -x dunst >/dev/null && notify-send "📬 Mail module" "\- Shows unread mail +- Shows 🔃 if syncing mail +- Left click opens neomutt +- Middle click syncs mail" ;; +esac + +echo "$(du -a ~/.local/share/mail/*/INBOX/new/* 2>/dev/null | sed -n '$=')$(cat /tmp/imapsyncicon 2>/dev/null)" diff --git a/.i3/scripts/mediaplayer.sh b/.i3/scripts/mediaplayer.sh new file mode 100755 index 0000000..705e4df --- /dev/null +++ b/.i3/scripts/mediaplayer.sh @@ -0,0 +1,126 @@ +#!/usr/bin/perl +# Copyright (C) 2014 Tony Crisci <tony@dubstepdish.com> +# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Requires playerctl binary to be in your path (except cmus) +# See: https://github.com/acrisci/playerctl + +# Set instance=NAME in the i3blocks configuration to specify a music player +# (playerctl will attempt to connect to org.mpris.MediaPlayer2.[NAME] on your +# DBus session). + +use Time::HiRes qw(usleep); +use Env qw(BLOCK_INSTANCE); + +use constant DELAY => 50; # Delay in ms to let network-based players (spotify) reflect new data. +use constant SPOTIFY_STR => 'spotify'; + +my @metadata = (); +my $player_arg = ""; + +if ($BLOCK_INSTANCE) { + $player_arg = "--player='$BLOCK_INSTANCE'"; +} + +sub buttons { + my $method = shift; + + if($method eq 'mpd') { + if ($ENV{'BLOCK_BUTTON'} == 1) { + system("mpc prev"); + } elsif ($ENV{'BLOCK_BUTTON'} == 2) { + system("mpc toggle"); + } elsif ($ENV{'BLOCK_BUTTON'} == 3) { + system("mpc next"); + } + } elsif ($method eq 'cmus') { + if ($ENV{'BLOCK_BUTTON'} == 1) { + system("cmus-remote --prev"); + } elsif ($ENV{'BLOCK_BUTTON'} == 2) { + system("cmus-remote --pause"); + } elsif ($ENV{'BLOCK_BUTTON'} == 3) { + system("cmus-remote --next"); + } + } elsif ($method eq 'playerctl') { + if ($ENV{'BLOCK_BUTTON'} == 1) { + system("playerctl $player_arg previous"); + usleep(DELAY * 1000) if $BLOCK_INSTANCE eq SPOTIFY_STR; + } elsif ($ENV{'BLOCK_BUTTON'} == 2) { + system("playerctl $player_arg play-pause"); + } elsif ($ENV{'BLOCK_BUTTON'} == 3) { + system("playerctl $player_arg next"); + usleep(DELAY * 1000) if $BLOCK_INSTANCE eq SPOTIFY_STR; + } + } +} + +sub cmus { + my @cmus = split /^/, qx(cmus-remote -Q); + if ($? == 0) { + foreach my $line (@cmus) { + my @data = split /\s/, $line; + if (shift @data eq 'tag') { + my $key = shift @data; + my $value = join ' ', @data; + + @metadata[0] = $value if $key eq 'artist'; + @metadata[1] = $value if $key eq 'title'; + } + } + + if (@metadata) { + buttons('cmus'); + + # metadata found so we are done + print(join ' - ', @metadata); + exit 0; + } + } +} + +sub mpd { + my $data = qx(mpc current); + if (not $data eq '') { + buttons("mpd"); + print($data); + exit 0; + } +} + +sub playerctl { + buttons('playerctl'); + + my $artist = qx(playerctl $player_arg metadata artist); + # exit status will be nonzero when playerctl cannot find your player + exit(0) if $? || $artist eq '(null)'; + + push(@metadata, $artist) if $artist; + + my $title = qx(playerctl $player_arg metadata title); + exit(0) if $? || $title eq '(null)'; + + push(@metadata, $title) if $title; + + print(join(" - ", @metadata)) if @metadata; +} + +if ($player_arg eq '' or $player_arg =~ /mpd/) { + mpd; +} +if ($player_arg =~ /cmus/) { + cmus; +} +playerctl; diff --git a/.i3/scripts/note b/.i3/scripts/note new file mode 100755 index 0000000..09186ea --- /dev/null +++ b/.i3/scripts/note @@ -0,0 +1,8 @@ +#!/bin/sh +# This is a general notification command for my own ease. +# $1 should be a message +# $2 is an optional image for notify-send +# Echos content on terminal and if dunst is running, shows notification. + +[ -z "$2" ] || img="-i $2" +echo "$1" && pgrep -x dunst >/dev/null && notify-send $img "$1" diff --git a/.i3/scripts/offlineimap-daemon.py b/.i3/scripts/offlineimap-daemon.py new file mode 100755 index 0000000..fea76fc --- /dev/null +++ b/.i3/scripts/offlineimap-daemon.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +import subprocess +import signal +import threading +import sys + +import dbus +from dbus.mainloop.glib import DBusGMainLoop +from gi.repository import GLib + + +class OfflineimapCtl(object): + def __init__(self): + self.daemon_proc = None + self.run_ev = threading.Event() + self.run_daemon = False + + def run(self): + t = threading.Thread(target=self._watch_daemon, daemon=True) + t.start() + + def _watch_daemon(self): + while True: + self.run_ev.wait() + self.run_ev.clear() + if self.run_daemon: + self.is_running = True + print('offlineimap is being started') + self._spawn_daemon() + print('offlineimap has stopped') + self.run_ev.set() # check state and restart if needed + + def _spawn_daemon(self): + self.daemon_proc = subprocess.Popen(['offlineimap', '-u', 'basic'], shell=False) + self.daemon_proc.wait() + self.daemon_proc = None + + def start(self): + print('starting offlineimap') + self.run_daemon = True + self.run_ev.set() + + def stop(self): + print('stopping offlineimap') + self.run_daemon = False + if self.daemon_proc: + try: + self.daemon_proc.send_signal(signal.SIGUSR2) + except OSError: + print('Unable to stop offlineimap') + + def restart(self): + print('restarting offlineimap') + if self.run_daemon: + self.stop() + self.start() + + def onConnectivityChanged(self, state): + # 70 means fully connected + if state == 70: + self.start() + else: + self.stop() + +def main(): + oi_ctl = OfflineimapCtl() + oi_ctl.run() + + try: + bus = dbus.SystemBus(mainloop=DBusGMainLoop()) + network_manager = bus.get_object( + 'org.freedesktop.NetworkManager', + '/org/freedesktop/NetworkManager') + network = dbus.Interface(network_manager, + dbus_interface='org.freedesktop.NetworkManager') + + network.connect_to_signal('StateChanged', oi_ctl.onConnectivityChanged) + + # send current state as first event + state = network.state() + oi_ctl.onConnectivityChanged(state) + + except dbus.exceptions.DBusException: + print('Unable to connect to dbus') + sys.exit(3) + + # start receiving events from dbus + loop = GLib.MainLoop() + loop.run() + +if __name__ == '__main__': + main() diff --git a/.i3/scripts/offlineimap-daemonctl.sh b/.i3/scripts/offlineimap-daemonctl.sh new file mode 100755 index 0000000..18daf3d --- /dev/null +++ b/.i3/scripts/offlineimap-daemonctl.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# this script runs offline imap as daemon (configured to check periodically) + +LOG=~/.offlineimap/sync.log +PIDFILE=~/.offlineimap/pid + +# if not present on PATH, those vars must point to proper locations +THIS_SCRIPT=offlineimap-daemonctl.sh +PYTHON_DAEMON=offlineimap-daemon.py + +daemon(){ + $PYTHON_DAEMON 2>&1 | + # add timestamps to logs + (while read line; do + echo `date` "$line" >> $LOG + done) +} + +stop(){ + kill -USR2 `cat $PIDFILE` +} + +refresh(){ + kill -USR1 `cat $PIDFILE` +} + +case "$1" in + '--daemon' | '-d' ) + nohup $THIS_SCRIPT < /dev/null > /dev/null 2>&1 & + ;; + '--kill' | '-k' ) + stop + ;; + '--refresh' | '-r' ) + refresh + ;; + * ) + daemon + ;; +esac
\ No newline at end of file diff --git a/.i3/scripts/openvpn.sh b/.i3/scripts/openvpn.sh new file mode 100755 index 0000000..f1d4e29 --- /dev/null +++ b/.i3/scripts/openvpn.sh @@ -0,0 +1,150 @@ +#!/usr/bin/perl +# Made by Pierre Mavro/Deimosfr <deimos@deimos.fr> +# Minor contribution by Thor K. H. <thor@roht.no> +# Licensed under the terms of the GNU GPL v3, or any later version. +# Version: 0.3 + +# Usage: +# 1. The configuration name of OpenVPN should be familiar for you (home,work...) +# 2. The device name in your configuration file should be fully named (tun0,tap1...not only tun or tap) +# 3. When you launch one or multiple OpenVPN connexion, be sure the PID file is written in the correct folder (ex: --writepid /run/openvpn/home.pid) + +use strict; +use warnings; +use utf8; +use Getopt::Long; + +my $openvpn_enabled='/dev/shm/openvpn_i3blocks_enabled'; +my $openvpn_disabled='/dev/shm/openvpn_i3blocks_disabled'; + +# Print output +sub print_output { + my $ref_pid_files = shift; + my @pid_files = @$ref_pid_files; + my $change=0; + + # Total pid files + my $total_pid = @pid_files; + if ($total_pid == 0) { + print "down\n"x2; + # Delete OpenVPN i3blocks temp files + if (-f $openvpn_enabled) { + unlink $openvpn_enabled or die "Can't delete $openvpn_enabled\n"; + # Colorize if VPN has just went down + print '#FF0000\n'; + } + unless (-f $openvpn_disabled) { + open(my $shm, '>', $openvpn_disabled) or die "Can't write $openvpn_disabled\n"; + } + exit(0); + } + + # Check if interface device is present + my $vpn_found=0; + my $pid; + my $cmd_line; + my @config_name; + my @config_path; + my $interface; + my $current_config_path; + my $current_config_name; + foreach (@pid_files) { + # Get current PID + $pid=0; + open(PID, '<', $_); + while(<PID>) { + chomp $_; + $pid = $_; + } + close(PID); + # Check if PID has been found + if ($pid ==0) { + print "Can't get PID $_: $!\n"; + } + + # Check if PID is still alive + $cmd_line='/proc/'.$pid.'/cmdline'; + if (-f $cmd_line) { + # Get config name + open(CMD_LINE, '<', $cmd_line); + while(<CMD_LINE>) { + chomp $_; + if ($_ =~ /--config\s*(.*\.conf)/) { + # Get interface from config file + $current_config_path = $1; + # Remove unwanted escape chars + $current_config_path =~ s/\x{00}//g; + $interface = 'null'; + # Get configuration name + if ($current_config_path =~ /(\w+).conf/) { + $current_config_name=$1; + } else { + $current_config_name='unknow'; + } + # Get OpenVPN interface device name + open(CONFIG, '<', $current_config_path) or die "Can't read config file '$current_config_path': $!\n"; + while(<CONFIG>) { + chomp $_; + if ($_ =~ /dev\s+(\w+)/) { + $interface=$1; + last; + } + } + close(CONFIG); + # check if interface exist + unless ($interface eq 'null') { + if (-d "/sys/class/net/$interface") { + push @config_name, $current_config_name; + $vpn_found=1; + # Write enabled file + unless (-f $openvpn_enabled) { + open(my $shm, '>', $openvpn_enabled) or die "Can't write $openvpn_enabled\n"; + $change=1; + } + } + } + } + } + close(CMD_LINE); + } + } + + # Check if PID found + my $names; + my $short_status; + if ($vpn_found == 1) { + $names = join('/', @config_name); + $short_status='up'; + } else { + $short_status='down'; + $names = $short_status; + } + + print "$names\n"; + print "$short_status\n"; + + # Print color if there were changes + print "#00FF00\n" if ($change == 1); + + exit(0); +} + +sub check_opts { + # Vars + my @pid_file=glob '/run/openvpn/*.pid'; + + # Set options + GetOptions( "help|h" => \&help, + "p=s" => \@pid_file); + + print_output(\@pid_file); +} + +sub help { + print "Usage: openvpn [-d pid folder files]\n"; + print "-d : pid folder files (default /run/openvpn/*.pid)\n"; + print "Note: devices in configuration file should be named with their number (ex: tun0, tap1)\n"; + exit(1); +} + +&check_opts; diff --git a/.i3/scripts/opout b/.i3/scripts/opout new file mode 100755 index 0000000..d52f285 --- /dev/null +++ b/.i3/scripts/opout @@ -0,0 +1,11 @@ +#!/bin/sh +# opout: "open output": A general handler for opening a file's intended output. +# I find this useful especially running from vim. + +basename="${1%.*}" + +case "$1" in + *.tex|*.md|*.rmd|*.ms|*.me|*.mom) setsid "$READER" "$basename".pdf >/dev/null 2>&1 & ;; + *.html) setsid "$BROWSER" --new-window "$basename".html >/dev/null 2>&1 & ;; + *.sent) setsid sent "$1" >/dev/null 2>&1 & ;; +esac diff --git a/.i3/scripts/pauseallmpv b/.i3/scripts/pauseallmpv new file mode 100755 index 0000000..08241b5 --- /dev/null +++ b/.i3/scripts/pauseallmpv @@ -0,0 +1,4 @@ +#!/bin/sh +# Sends a , key to all mpv instances, pausing them at the last frame. + +xdotool search --class mpv | xargs -I % xdotool key --window % comma diff --git a/.i3/scripts/polybar_launch b/.i3/scripts/polybar_launch new file mode 100755 index 0000000..2af56ab --- /dev/null +++ b/.i3/scripts/polybar_launch @@ -0,0 +1,16 @@ +#!/bin/sh +#!/usr/bin/env 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 bar1 and bar2 +#polybar example & + +for i in $(polybar -m | awk -F: '{print $1}'); do MONITOR=$i polybar example -c ~/.config/polybar/config & done +feh --bg-scale ~/.config/wall.png + +echo "Bars launched..." diff --git a/.i3/scripts/prompt b/.i3/scripts/prompt new file mode 100755 index 0000000..0a2aba9 --- /dev/null +++ b/.i3/scripts/prompt @@ -0,0 +1,8 @@ +#!/bin/sh +# A dmenu binary prompt script. +# Gives a dmenu prompt labeled with $1 to perform command $2. +# For example: +# `./prompt "Do you want to shutdown?" "shutdown -h now"` + +[ $(echo -e "No\nYes" | dmenu -i -p "$1" -nb darkred -sb red -sf white -nf gray -fn mono) \ +== "Yes" ] && $2 diff --git a/.i3/scripts/remaps b/.i3/scripts/remaps new file mode 100755 index 0000000..74c1057 --- /dev/null +++ b/.i3/scripts/remaps @@ -0,0 +1,19 @@ +#!/bin/sh + +# This script is called by i3 on startup. + +# Increase key speed via a rate change +xset r rate 300 50 +# Map the caps lock key to super... +#setxkbmap -layout us -variant altgr-intl -option caps:super +# If you don't want a us international keyboard, rather whatever keyboard +# you set in your installation, comment out the above line and uncomment +# the one below. +setxkbmap -option caps:super + +# But when it is pressed only once, treat it as escape. +killall xcape ; xcape -e 'Super_L=Escape' + +# Map the menu button to right super as well. +xmodmap -e 'keycode 135 = Super_R' +#keycode 135 = Super_R NoSymbol Super_R diff --git a/.i3/scripts/screen.sh b/.i3/scripts/screen.sh new file mode 100755 index 0000000..03a8e79 --- /dev/null +++ b/.i3/scripts/screen.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +#Feed this script either: +# "l" for laptop screen only, +# "v" for vga screen only, +# or "d" for dual vga/laptop. + +d() { if [[ $(xrandr -q | grep VGA1\ con) ]] + then param $1 + else echo "No VGA input detected." + fi ;} +dual() { xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1 ;} +laptop() { xrandr --output LVDS1 --auto --output VGA1 --off ;} +vga() { xrandr --output VGA1 --auto --output LVDS1 --off ;} +#mirror() { xrandr --addmode VGA1 $lapres && xrandr --output LVDS1 --mode $lapres --output VGA1 --mode $lapres ;} + +param() { +case $1 in + d) dual ;; + v) vga ;; + l) laptop ;; + *) echo -e "Invalid parameter. Add one of the following:\n\"d\" for dualscreen laptop and VGA.\n\"l\" for laptop only\n\"v\" for VGA only." ;; +esac ;} +d $1 diff --git a/.i3/scripts/screencast b/.i3/scripts/screencast new file mode 100755 index 0000000..cd37ab9 --- /dev/null +++ b/.i3/scripts/screencast @@ -0,0 +1,36 @@ +#!/bin/bash + +# This script records a screencast with audio and video. +# It runs an appropriate record script for either ALSA and Pulseaudio. +# It also names files smartly to prevent overwrites. + +# Picks a file name for the output file based on availability: +while [[ -f $HOME/screencast$n.mkv ]] +do + n=$((n+1)) +done +filename="$HOME/screencast$n.mkv" + +# For Pulseaudio with ALSA: +record_pulse() { \ +ffmpeg -y \ +-f x11grab \ +-framerate 60 \ +-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \ +-i :0.0 \ +-f alsa -i default \ +-r 30 \ + -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac $filename ;} + +# For ALSA: +record_alsa() { \ +ffmpeg -y \ +-f x11grab \ +-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \ +-i :0.0 \ +-thread_queue_size 1024 \ + -f alsa -ar 44100 -i hw:1 \ + -c:v libx264 -r 30 -c:a flac $filename ;} + + +if [[ $(pgrep -x pulseaudio) ]]; then record_pulse; else record_alsa; fi diff --git a/.i3/scripts/shortcuts b/.i3/scripts/shortcuts new file mode 100755 index 0000000..5ccb114 --- /dev/null +++ b/.i3/scripts/shortcuts @@ -0,0 +1,38 @@ +#!/bin/bash + +# Shell rc file (i.e. bash vs. zsh, etc.) +shellrc="$HOME/.bashrc" + +# Bookmark file locations +bmdirs="$HOME/.bmdirs" +bmfiles="$HOME/.bmfiles" + +# Output locations. Unactivated progs should go to /dev/null. +shell_shortcuts="$HOME/.shortcuts" +ranger_shortcuts="$HOME/.config/ranger/shortcuts.conf" +qute_shortcuts="/dev/null" +fish_shortcuts="/dev/null" + +# Remove, prepare files +rm -f "$ranger_shortcuts" "$qute_shortcuts" 2>/dev/null +#echo "abbr \\" > "$fish_shortcuts" +echo "alias \\" > "$shell_shortcuts" + +# Ensure text of argument 1 exists in the file argument 2 +ensure() { (grep "$1" "$2")>/dev/null 2>&1 || echo "$1" >> "$2" ;} + +ensure "source $shell_shortcuts" "$shellrc" +ensure "source $HOME/.config/ranger/shortcuts.conf" "$HOME/.config/ranger/rc.conf" +#ensure "config.source('shortcuts.py')" "$HOME/.config/qutebrowser/config.py" +#ensure "source $HOME/.config/fish/shortcuts.fish" "$HOME/.config/fish/config.fish" + +# Format the `bmdirs` file in the correct syntax and sent it to all three configs. +sed "s/#.*$//;/^$/d" "$bmdirs" | tee >(awk '{print $1"=\"cd "$2" && ls -a\" \\"}' >> "$shell_shortcuts") \ + >(awk '{print $1, "\"cd " $2 "; and ls -a\" \\"}' >> "$fish_shortcuts") \ + >(awk '{print "config.bind(\";"$1"\", \"set downloads.location.directory "$2" ;; hint links download\")"}' >> "$qute_shortcuts") \ + | awk '{print "map g"$1" cd "$2"\nmap t"$1" tab_new "$2"\nmap m"$1" shell mv -v %s "$2"\nmap Y"$1" shell cp -rv %s "$2}' >> "$ranger_shortcuts" + +# Format the `configs` file in the correct syntax and sent it to both configs. +sed "s/#.*$//;/^$/d" "$bmfiles" | tee >(awk '{print $1"=\"$EDITOR "$2"\" \\"}' >> "$shell_shortcuts") \ + >(awk '{print $1, "\"$EDITOR "$2"\" \\"}' >> "$fish_shortcuts") \ + | awk '{print "map "$1" shell $EDITOR "$2}' >> "$ranger_shortcuts" diff --git a/.i3/scripts/spawndl b/.i3/scripts/spawndl new file mode 100755 index 0000000..a419041 --- /dev/null +++ b/.i3/scripts/spawndl @@ -0,0 +1,2 @@ +#!/bin/bash +i3 exec "st -n dl -e youtube-dl $1" diff --git a/.i3/scripts/speedvid.sh b/.i3/scripts/speedvid.sh new file mode 100755 index 0000000..ba3a4f6 --- /dev/null +++ b/.i3/scripts/speedvid.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +base=$(basename $1) +ext="${base##*.}" +base="${base%.*}" + +ffmpeg -i $1 -vf "setpts=$2*PTS" -an $base'_sped.'$ext diff --git a/.i3/scripts/texclear b/.i3/scripts/texclear new file mode 100755 index 0000000..20f435c --- /dev/null +++ b/.i3/scripts/texclear @@ -0,0 +1,14 @@ +#!/bin/sh + +# Clears the build files of a LaTeX/XeLaTeX build. +# I have vim run this file whenever I exit a .tex file. + +case "$1" in + *.tex) + file=$(readlink -f "$1") + dir=$(dirname "$file") + base="${file%.*}" + find "$dir" -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl)" -delete ;; + *) printf "Give .tex file as argument.\\n" ;; +esac + diff --git a/.i3/scripts/tmuxdd b/.i3/scripts/tmuxdd new file mode 100755 index 0000000..e821057 --- /dev/null +++ b/.i3/scripts/tmuxdd @@ -0,0 +1,4 @@ +#!/bin/sh +# This is the script that i3 runs to either start tmux in +# the dropdown terminal or log into a previous session. +tmux a || TERM="screen-256color" tmux diff --git a/.i3/scripts/tmuxinit b/.i3/scripts/tmuxinit new file mode 100755 index 0000000..68a4b86 --- /dev/null +++ b/.i3/scripts/tmuxinit @@ -0,0 +1,4 @@ +#!/bin/bash +# This is the script that i3 runs to either start tmux in +# the dropdown terminal or log into a previous session. +tmux a || tmux diff --git a/.i3/scripts/torrent b/.i3/scripts/torrent new file mode 100755 index 0000000..0ab811c --- /dev/null +++ b/.i3/scripts/torrent @@ -0,0 +1,28 @@ +#!/bin/sh + +transmission-remote -l | grep % | + sed " # This first sed command is to ensure a desirable order with sort + s/.*Stopped.*/A/g; + s/.*Seeding.*/Z/g; + s/.*100%.*/N/g; + s/.*Idle.*/B/g; + s/.*Uploading.*/L/g; + s/.*%.*/M/g" | + sort -h | uniq -c | sed " # Now we replace the standin letters with icons. + s/A/🛑/g; + s/B/⌛️/g; + s/L/🔼/g; + s/M/🔽/g; + s/N/✅/g; + s/Z/🌱/g" | awk '{print $2, $1}' | tr '\n' ' ' | sed -e "s/ $//g" + +case $BLOCK_BUTTON in + 1) $TERMINAL -e transmission-remote-cli ;; + 3) pgrep -x dunst >/dev/null && notify-send "Torrent module" "🛑: paused +⏳: idle (seeds needed) +🔼: uploading (unfinished) +🔽: downloading +✅: done +🌱: done and seeding" ;; +esac + diff --git a/.i3/scripts/tpb b/.i3/scripts/tpb new file mode 100755 index 0000000..7a2913a --- /dev/null +++ b/.i3/scripts/tpb @@ -0,0 +1,169 @@ +#!/bin/sh +# +# by Sairon Istyar, 2012 +# distributed under the GPLv3 license +# http://www.opensource.org/licenses/gpl-3.0.html +# + +### CONFIGURATION ### +# program to use for torrent download +# magnet link to torrent will be appended +# you can add -- at the end to indicate end of options +# (if your program supports it, most do) +program='/usr/bin/transmission-remote -a' +daemon='transmission-daemon' +TPB="https://thepiratebay.org" + +# show N first matches by default +limit=50 + +# colors +numbcolor='\x1b[1;35m' +namecolor='\x1b[1;33m' +sizecolor='\x1b[1;36m' +seedcolor='\x1b[1;31m' +peercolor='\x1b[1;32m' +errocolor='\x1b[1;31m' +mesgcolor='\x1b[1;37m' +nonecolor='\x1b[0m' + +# default ordering method +# 1 - name ascending; 2 - name descending; +# 3 - recent first; 4 - oldest first; +# 5 - size descending; 6 - size ascending; +# 7 - seeds descending; 8 - seeds ascending; +# 9 - leechers descending; 10 - leechers ascending; +orderby=7 +### END CONFIGURATION ### + +thisfile="$0" + +printhelp() { + echo -e "Usage:" + echo -e "\t$thisfile [options] search query" + echo + echo + echo -e "Available options:" + echo -e "\t-h\t\tShow help" + echo -e "\t-n [num]\tShow only first N results (default 15; max 100 [top] or 30 [search])" + echo -e "\t-C\t\tDo not use colors" + echo -e "\t-P [prog]\tSet torrent client command (\`-P torrent-client\` OR \`-P \"torrent-client --options\"\`)" + echo + echo -e "Current client settings: $program [magnet link]" +} + +# change torrent client +chex() { + sed "s!^program=.*!program=\'$program\'!" -i "$thisfile" + if [ $? -eq 0 ] ; then + echo "Client changed successfully." + exit 0 + else + echo -e "${errocolor}(EE) ${mesgcolor}==> Something went wrong!${nonecolor}" + exit 1 + fi +} + +# script cmdline option handling +while getopts :hn:CP:: opt ; do + case "$opt" in + h) printhelp; exit 0;; + n) limit="$OPTARG";; + C) unset numbcolor namecolor sizecolor seedcolor peercolor nonecolor errocolor mesgcolor;; + P) program="$OPTARG"; chex;; + *) echo -e "Unknown option(s)."; printhelp; exit 1;; + esac +done + +shift `expr $OPTIND - 1` + +# correctly encode query +q=`echo "$*" | tr -d '\n' | od -t x1 -A n | tr ' ' '%'` + +# if not searching, show top torrents +if [ -z "$q" ] ; then + url="top/all" +else + url='search/'"$q"'/0/'"$orderby"'/0' +fi + +# get results +# Here be dragons! +r=`curl -k -A Mozilla -b "lw=s" -m 15 -s "$TPB/$url" \ + | grep -Eo '^<td><a href=\"/torrent/[^>]*>.*|^<td><nobr><a href=\"[^"]*|<td align=\"right\">[^<]*' \ + | sed 's!^<td><a href=\"/torrent/[^>]*>!!; \ + s!</a>$!!; \ + s!^<td><nobr><a href=\"!!; \ + s!^<td [^>]*>!!; \ + s! !\ !g; \ + s/|/!/g' \ + | sed 'N;N;N;N;s!\n!|!g'` + +# number of results +n=`echo "$r" | wc -l` + +IFS=$'\n' + +# print results +echo "$r" \ + | head -n "$limit" \ + | awk -v N=1 \ + -v NU="$numbcolor" \ + -v NA="$namecolor" \ + -v SI="$sizecolor" \ + -v SE="$seedcolor" \ + -v PE="$peercolor" \ + -v NO="$nonecolor" \ + -F '|' \ + '{print NU N ") " NA $1 " " SI $3 " " SE $4 " " PE $5 NO; N++}' + +# read ID(s), expand ranges, ignore everything else +read -p ">> Torrents to download (eg. 1 3 5-7): " selection +IFS=$'\n\ ' +for num in $selection ; do + if [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*'`" ] ; then + down="$down $num" + elif [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*-[[:digit:]][[:digit:]]*'`" ] ; then + seqstart="${num%-*}" + seqend="${num#*-}" + if [ $seqstart -le $seqend ] ; then + down="$down `seq $seqstart $seqend`" + fi + fi +done + +# normalize download list, sort it and remove dupes +down="$(echo $down | tr '\ ' '\n' | sort -n | uniq)" +IFS=$'\n' + +# check whether we're downloading something, else exit +if [ -z "$down" ] ; then + exit 0 +fi + +# starts daemon if it was not already running and download all torrents in list +echo -n "Downloading torrent(s): " +if ! [ "$(pidof $daemon)" ]; then + $daemon + for torrent in $down ; do + # check if ID is valid and in range of results, download torrent + if [ $torrent -ge 1 ] ; then + if [ $torrent -le $limit ] ; then + echo -n "$torrent " + command="$program `echo "$r" | awk -F '|' 'NR=='$torrent'{print $2; exit}'`" + status=$(eval "$command" 2>&1) + if [ $? -ne 0 ] ; then + echo -n '(failed!) ' + report="$report\n(#$torrent) $status" + fi + fi + fi + done +fi + +echo +if [ -n "$report" ] ; then + echo -n "Exited with errors:" + echo -e "$report" +fi +unset IFS diff --git a/.i3/scripts/tpb.sh b/.i3/scripts/tpb.sh new file mode 100755 index 0000000..fb1b5b6 --- /dev/null +++ b/.i3/scripts/tpb.sh @@ -0,0 +1,164 @@ +#!/bin/sh +# +# by Sairon Istyar, 2012 +# distributed under the GPLv3 license +# http://www.opensource.org/licenses/gpl-3.0.html +# + +### CONFIGURATION ### +# program to use for torrent download +# magnet link to torrent will be appended +# you can add -- at the end to indicate end of options +# (if your program supports it, most do) +program='/usr/bin/transmission-remote -a' +TPB="https://thepiratebay.org" + +# show N first matches by default +limit=50 + +# colors +numbcolor='\x1b[1;35m' +namecolor='\x1b[1;33m' +sizecolor='\x1b[1;36m' +seedcolor='\x1b[1;31m' +peercolor='\x1b[1;32m' +errocolor='\x1b[1;31m' +mesgcolor='\x1b[1;37m' +nonecolor='\x1b[0m' + +# default ordering method +# 1 - name ascending; 2 - name descending; +# 3 - recent first; 4 - oldest first; +# 5 - size descending; 6 - size ascending; +# 7 - seeds descending; 8 - seeds ascending; +# 9 - leechers descending; 10 - leechers ascending; +orderby=7 +### END CONFIGURATION ### + +thisfile="$0" + +printhelp() { + echo -e "Usage:" + echo -e "\t$thisfile [options] search query" + echo + echo + echo -e "Available options:" + echo -e "\t-h\t\tShow help" + echo -e "\t-n [num]\tShow only first N results (default 15; max 100 [top] or 30 [search])" + echo -e "\t-C\t\tDo not use colors" + echo -e "\t-P [prog]\tSet torrent client command (\`-P torrent-client\` OR \`-P \"torrent-client --options\"\`)" + echo + echo -e "Current client settings: $program [magnet link]" +} + +# change torrent client +chex() { + sed "s!^program=.*!program=\'$program\'!" -i "$thisfile" + if [ $? -eq 0 ] ; then + echo "Client changed successfully." + exit 0 + else + echo -e "${errocolor}(EE) ${mesgcolor}==> Something went wrong!${nonecolor}" + exit 1 + fi +} + +# script cmdline option handling +while getopts :hn:CP:: opt ; do + case "$opt" in + h) printhelp; exit 0;; + n) limit="$OPTARG";; + C) unset numbcolor namecolor sizecolor seedcolor peercolor nonecolor errocolor mesgcolor;; + P) program="$OPTARG"; chex;; + *) echo -e "Unknown option(s)."; printhelp; exit 1;; + esac +done + +shift `expr $OPTIND - 1` + +# correctly encode query +q=`echo "$*" | tr -d '\n' | od -t x1 -A n | tr ' ' '%'` + +# if not searching, show top torrents +if [ -z "$q" ] ; then + url="top/all" +else + url='search/'"$q"'/0/'"$orderby"'/0' +fi + +# get results +# Here be dragons! +r=`curl -k -A Mozilla -b "lw=s" -m 15 -s "$TPB/$url" \ + | grep -Eo '^<td><a href=\"/torrent/[^>]*>.*|^<td><nobr><a href=\"[^"]*|<td align=\"right\">[^<]*' \ + | sed 's!^<td><a href=\"/torrent/[^>]*>!!; \ + s!</a>$!!; \ + s!^<td><nobr><a href=\"!!; \ + s!^<td [^>]*>!!; \ + s! !\ !g; \ + s/|/!/g' \ + | sed 'N;N;N;N;s!\n!|!g'` + +# number of results +n=`echo "$r" | wc -l` + +IFS=$'\n' + +# print results +echo "$r" \ + | head -n "$limit" \ + | awk -v N=1 \ + -v NU="$numbcolor" \ + -v NA="$namecolor" \ + -v SI="$sizecolor" \ + -v SE="$seedcolor" \ + -v PE="$peercolor" \ + -v NO="$nonecolor" \ + -F '|' \ + '{print NU N ") " NA $1 " " SI $3 " " SE $4 " " PE $5 NO; N++}' + +# read ID(s), expand ranges, ignore everything else +read -p ">> Torrents to download (eg. 1 3 5-7): " selection +IFS=$'\n\ ' +for num in $selection ; do + if [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*'`" ] ; then + down="$down $num" + elif [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*-[[:digit:]][[:digit:]]*'`" ] ; then + seqstart="${num%-*}" + seqend="${num#*-}" + if [ $seqstart -le $seqend ] ; then + down="$down `seq $seqstart $seqend`" + fi + fi +done + +# normalize download list, sort it and remove dupes +down="$(echo $down | tr '\ ' '\n' | sort -n | uniq)" +IFS=$'\n' + +# check whether we're downloading something, else exit +if [ -z "$down" ] ; then + exit 0 +fi + +# download all torrents in list +echo -n "Downloading torrent(s): " +for torrent in $down ; do + # check if ID is valid and in range of results, download torrent + if [ $torrent -ge 1 ] ; then + if [ $torrent -le $limit ] ; then + echo -n "$torrent " + command="$program `echo "$r" | awk -F '|' 'NR=='$torrent'{print $2; exit}'`" + status=$(eval "$command" 2>&1) + if [ $? -ne 0 ] ; then + echo -n '(failed!) ' + report="$report\n(#$torrent) $status" + fi + fi + fi +done +echo +if [ -n "$report" ] ; then + echo -n "Exited with errors:" + echo -e "$report" +fi +unset IFS diff --git a/.i3/scripts/transadd b/.i3/scripts/transadd new file mode 100755 index 0000000..8cc7e80 --- /dev/null +++ b/.i3/scripts/transadd @@ -0,0 +1,12 @@ +#!/bin/sh + +# Mimeapp script for adding torrent to transmission-daemon, but will also start +# the daemon first if not running. + +# Optionally requires my `note` script. The sleep of 3 seconds is because the +# transmission-daemon sometimes fails to take remote requests in its first +# moments. + +pgrep -x transmission-da || (transmission-daemon && note "Starting daemon..." "$PIX/dl.png" && sleep 3 && pkill -RTMIN+7 i3blocks) + +transmission-remote -a "$@" && note "Torrent added." "$PIX/dl.png" diff --git a/.i3/scripts/transmission.sh b/.i3/scripts/transmission.sh new file mode 100755 index 0000000..794f6bb --- /dev/null +++ b/.i3/scripts/transmission.sh @@ -0,0 +1,7 @@ +#!/bin/bash +if [ -f $(pgrep transmission) ]; + then + urxvt -e transmission-remote-cli + else + transmission-daemon && urxvt -e transmission-remote-cli +fi diff --git a/.i3/scripts/video b/.i3/scripts/video new file mode 100755 index 0000000..357464f --- /dev/null +++ b/.i3/scripts/video @@ -0,0 +1,18 @@ +#!/bin/bash + +# This script records video. +# It also names files smartly to prevent overwrites. + +# Picks a file name for the output file based on availability: +while [[ -f $HOME/video$n.mkv ]] +do + n=$((n+1)) +done +filename="$HOME/video$n.mkv" + +# The actual ffmpeg command: +ffmpeg \ +-f x11grab \ +-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \ +-i :0.0 \ + -c:v libx264 -qp 0 -r 30 $filename diff --git a/.i3/scripts/volume.sh b/.i3/scripts/volume.sh new file mode 100755 index 0000000..69fb4a4 --- /dev/null +++ b/.i3/scripts/volume.sh @@ -0,0 +1,11 @@ +pavu_status=$(pulseaudio-ctl full-status) +pavu_status=($pavu_status) + +volume=${pavu_status[0]} +muted=${pavu_status[1]} + +if [ "$muted" == "yes" ]; then + echo '<span foreground="#Cd3f45">Mute</span>' +else + echo $volume +fi diff --git a/.i3/scripts/welcome b/.i3/scripts/welcome new file mode 100755 index 0000000..2e33713 --- /dev/null +++ b/.i3/scripts/welcome @@ -0,0 +1,4 @@ +#!/bin/bash +dialog --title "Welcome to LARBS!" --msgbox "If you're new to the system, hold down the Windows key and press F1 for a full tutorial! + +(This infobox will greet you at each login until you run the command \"hello-larbs\" in the terminal.)" 10 60 diff --git a/.i3/status.conf b/.i3/status.conf new file mode 120000 index 0000000..d90a620 --- /dev/null +++ b/.i3/status.conf @@ -0,0 +1 @@ +.i3status.conf
\ No newline at end of file diff --git a/.i3/workspace-main.json b/.i3/workspace-main.json new file mode 100644 index 0000000..bd82232 --- /dev/null +++ b/.i3/workspace-main.json @@ -0,0 +1,121 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.5, + "swallows": [ + { + "class": "^URxvt$" //, +// "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + // splith split container with 1 children + "border": "normal", + "floating": "auto_off", + "layout": "splith", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 1, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^ncmpcpp$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] + } + ] +} + +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.8, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.2, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] +} + diff --git a/.i3/workspace-music.json b/.i3/workspace-music.json new file mode 100644 index 0000000..80b6c10 --- /dev/null +++ b/.i3/workspace-music.json @@ -0,0 +1,121 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, +// "name": "vgg@$HOST:~", + "percent": 0.5, + "swallows": [ + { + "class": "^mpv$" //, +// "instance": "^mpv$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + // splith split container with 1 children + "border": "normal", + "floating": "auto_off", + "layout": "splith", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 1, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^ncmpcpp$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] + } + ] +} + +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.8, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.2, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] +} + diff --git a/.i3/ws_2-generic-orig.json b/.i3/ws_2-generic-orig.json new file mode 100755 index 0000000..876cc19 --- /dev/null +++ b/.i3/ws_2-generic-orig.json @@ -0,0 +1,108 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "MidnightCommander", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^mc$" + } + ], + "type": "con" + }, +// { +// "border": "normal", +// "current_border_width": 2, +// "floating": "auto_off", +// "geometry": { +// "height": 416, +// "width": 658, +// "x": 0, +// "y": 0 +// }, +// "name": "Terminal1", +// "percent": 0.3, +// //"percent": 0.333333333333333, +// "swallows": [ +// { +// "class": "^Gnome\\-terminal$", +// // "instance": "^gnome\\-terminal\\-server$", +// // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", +// // "transient_for": "^$", +// "window_role": "^Terminal1$" +// } +// ], +// "type": "con" +// }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.i3/ws_2-generic-t.json b/.i3/ws_2-generic-t.json new file mode 100755 index 0000000..30892d3 --- /dev/null +++ b/.i3/ws_2-generic-t.json @@ -0,0 +1,119 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + // stacked split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "stacked", + "percent": 0.68, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "Vifm", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + //"class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + //"window_role": "^ranger$" + "window_role": "^vifm$" + } + ], + "type": "con" + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "zypper", + "percent": 0.32, + "swallows": [ + { + "class": "^Terminator$", + //"class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^zypper$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + //"class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.i3/ws_2-generic.json b/.i3/ws_2-generic.json new file mode 100755 index 0000000..5afc94b --- /dev/null +++ b/.i3/ws_2-generic.json @@ -0,0 +1,115 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + // stacked split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "stacked", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "MidnightCommander", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^mc$" + } + ], + "type": "con" + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "zypper", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^zypper$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.i3/ws_2-generic.json.bak b/.i3/ws_2-generic.json.bak new file mode 100755 index 0000000..876cc19 --- /dev/null +++ b/.i3/ws_2-generic.json.bak @@ -0,0 +1,108 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "MidnightCommander", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^mc$" + } + ], + "type": "con" + }, +// { +// "border": "normal", +// "current_border_width": 2, +// "floating": "auto_off", +// "geometry": { +// "height": 416, +// "width": 658, +// "x": 0, +// "y": 0 +// }, +// "name": "Terminal1", +// "percent": 0.3, +// //"percent": 0.333333333333333, +// "swallows": [ +// { +// "class": "^Gnome\\-terminal$", +// // "instance": "^gnome\\-terminal\\-server$", +// // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", +// // "transient_for": "^$", +// "window_role": "^Terminal1$" +// } +// ], +// "type": "con" +// }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + |
