Compare commits

..

3 Commits

Author SHA1 Message Date
Dario Ernst 6bf3b2bbad move i3 config machine-specific
6 years ago
Dario Ernst 98201ccc45 much happened
6 years ago
Dario Ernst b0d3e27331 cheza specific changes
8 years ago

1
.gitignore vendored

@ -1 +0,0 @@
i3/config

File diff suppressed because it is too large Load Diff

@ -1,9 +0,0 @@
#!/bin/bash
TEMPF=$(mktemp ocrscrot.XXXXXXX)
rm $TEMPF
scrot -s $TEMPF.png
tesseract -l deu+eng $TEMPF.png - | xsel
rm $TEMPF.png

@ -1,867 +0,0 @@
#!/usr/bin/env bash
#
# Written by Denilson Figueiredo de Sá <denilsonsa@gmail.com>
# MIT license
#
# Requirements:
# * bash (tested on 4.20, should work on older versions too)
# * awk (works with GNU awk, nawk, busybox awk, mawk)
# * ping (from iputils)
#
# More information:
# http://denilsonsa.github.io/prettyping/
# https://github.com/denilsonsa/prettyping
# http://www.reddit.com/r/linux/comments/1op98a/prettypingsh_a_better_ui_for_watching_ping/
# Third-party demonstration video: https://www.youtube.com/watch?v=ziEMY1BcikM
# TODO: Adjust how many items in the legend are printed based on the terminal width.
#
# TODO: Detect the following kinds of message and avoid printing it repeatedly.
# From 192.168.1.11: icmp_seq=4 Destination Host Unreachable
# Request timeout for icmp_seq 378
#
# TODO: Handle when a single message is spread over multiple lines. Specially,
# like in this case: https://bitbucket.org/denilsonsa/small_scripts/issue/5
#
# TODO: Print the destination (also) at the bottom bar. Useful after leaving
# the script running for quite some time.
#
# TODO: Print the destination as escape codes to xterm title.
#
# TODO: Print the current time in the beginning of each line.
#
# TODO: Implement audible ping.
#
# TODO: Autodetect the width of printf numbers, so they will always line up correctly.
#
# TODO: Test the behavior of this script upon receiving out-of-order packets, like these:
# http://www.blug.linux.no/rfc1149/pinglogg.txt
#
# TODO? How will prettyping behave if it receives a duplicate response?
print_help() {
cat << EOF
Usage: $MYNAME [prettyping parameters] <standard ping parameters>
This script is a wrapper around the system's "ping" tool. It will substitute
each ping response line by a colored character, giving a very compact overview
of the ping responses.
prettyping parameters:
--[no]color Enable/disable color output. (default: enabled)
--[no]multicolor Enable/disable multi-color unicode output. Has no effect if
either color or unicode is disabled. (default: enabled)
--[no]unicode Enable/disable unicode characters. (default: enabled)
--[no]legend Enable/disable the latency legend. (default: enabled)
--[no]terminal Force the output designed to a terminal. (default: auto)
--last <n> Use the last "n" pings at the statistics line. (default: 60)
--columns <n> Override auto-detection of terminal dimensions.
--lines <n> Override auto-detection of terminal dimensions.
--rttmin <n> Minimum RTT represented in the unicode graph. (default: auto)
--rttmax <n> Maximum RTT represented in the unicode graph. (default: auto)
--awkbin <exec> Override the awk interpreter. (default: awk)
--pingbin <exec> Override the ping tool. (default: ping)
-6 Shortcut for: --pingbin ping6
ping parameters handled by prettyping:
-a Audible ping is not implemented yet.
-f Flood mode is not allowed in prettyping.
-q Quiet output is not allowed in prettyping.
-R Record route mode is not allowed in prettyping.
-v Verbose output seems to be the default mode in ping.
All other parameters are passed directly to ping.
EOF
}
# Thanks to people at #bash who pointed me at
# http://bash-hackers.org/wiki/doku.php/scripting/posparams
parse_arguments() {
USE_COLOR=1
USE_MULTICOLOR=1
USE_UNICODE=1
USE_LEGEND=1
if [ -t 1 ]; then
IS_TERMINAL=1
else
IS_TERMINAL=0
fi
LAST_N=60
OVERRIDE_COLUMNS=0
OVERRIDE_LINES=0
RTT_MIN=auto
RTT_MAX=auto
PING_BIN="ping"
#PING_BIN="./mockping.awk"
PING_PARAMS=( )
AWK_BIN="awk"
AWK_PARAMS=( )
while [[ $# != 0 ]] ; do
case "$1" in
-h | -help | --help )
print_help
exit
;;
# Forbidden ping parameters within prettyping:
-f )
echo "${MYNAME}: You can't use the -f (flood) option."
exit 1
;;
-R )
# -R prints extra information at each ping response.
echo "${MYNAME}: You can't use the -R (record route) option."
exit 1
;;
-q )
echo "${MYNAME}: You can't use the -q (quiet) option."
exit 1
;;
-v )
# -v enables verbose output. However, it seems the output with
# or without this option is the same. Anyway, prettyping will
# strip this parameter.
;;
# Note:
# Small values for -s parameter prevents ping from being able to
# calculate RTT.
# New parameters:
-a )
# TODO: Implement audible ping for responses or for missing packets
;;
-color | --color ) USE_COLOR=1 ;;
-nocolor | --nocolor ) USE_COLOR=0 ;;
-multicolor | --multicolor ) USE_MULTICOLOR=1 ;;
-nomulticolor | --nomulticolor ) USE_MULTICOLOR=0 ;;
-unicode | --unicode ) USE_UNICODE=1 ;;
-nounicode | --nounicode ) USE_UNICODE=0 ;;
-legend | --legend ) USE_LEGEND=1 ;;
-nolegend | --nolegend ) USE_LEGEND=0 ;;
-terminal | --terminal ) IS_TERMINAL=1 ;;
-noterminal | --noterminal ) IS_TERMINAL=0 ;;
-awkbin | --awkbin ) AWK_BIN="$2" ; shift ;;
-pingbin | --pingbin ) PING_BIN="$2" ; shift ;;
-6 ) PING_BIN="ping6" ;;
#TODO: Check if these parameters are numbers.
-last | --last ) LAST_N="$2" ; shift ;;
-columns | --columns ) OVERRIDE_COLUMNS="$2" ; shift ;;
-lines | --lines ) OVERRIDE_LINES="$2" ; shift ;;
-rttmin | --rttmin ) RTT_MIN="$2" ; shift ;;
-rttmax | --rttmax ) RTT_MAX="$2" ; shift ;;
* )
PING_PARAMS+=("$1")
;;
esac
shift
done
if [[ "${RTT_MIN}" -gt 0 && "${RTT_MAX}" -gt 0 && "${RTT_MIN}" -ge "${RTT_MAX}" ]] ; then
echo "${MYNAME}: Invalid --rttmin and -rttmax values."
exit 1
fi
if [[ "${#PING_PARAMS[@]}" = 0 ]] ; then
echo "${MYNAME}: Missing parameters, use --help for instructions."
exit 1
fi
# Workaround for mawk:
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=593504
local version="$(echo | "${AWK_BIN}" -W version 2>&1)"
if [[ "${version}" == mawk* ]] ; then
AWK_PARAMS+=(-W interactive)
fi
}
MYNAME=`basename "$0"`
parse_arguments "$@"
export LC_ALL=C
# Warning! Ugly code ahead!
# The code is so ugly that the comments explaining it are
# bigger than the code itself!
#
# Suppose this:
#
# cmd_a | cmd_b &
#
# I need the PID of cmd_a. How can I get it?
# In bash, $! will give me the PID of cmd_b.
#
# So, I came up with this ugly solution: open a subshell, like this:
#
# (
# cmd_a &
# echo "This is the PID I want $!"
# wait
# ) | cmd_b
# Ignore Ctrl+C here.
# If I don't do this, this shell script is killed before
# ping and gawk can finish their work.
trap '' 2
# Now the ugly code.
(
"${PING_BIN}" "${PING_PARAMS[@]}" &
PING_PID="$!"
# Commented out, because it looks like this line is not needed
#trap "kill -2 $PING_PID ; exit 1" 2 # Catch Ctrl+C here
wait
) 2>&1 | (
if [ "${IS_TERMINAL}" = 1 ]; then
# Print a message to notify the awk script about terminal size change.
trap "echo SIGWINCH" 28
fi
# The trap must be in another subshell because otherwise it will interrupt
# the "wait" commmand.
while read line; do
echo -E "$line"
done
) 2>&1 | "${AWK_BIN}" "${AWK_PARAMS[@]}" '
# Weird that awk does not come with abs(), so I need to implement it.
function abs(x) {
return ( (x < 0) ? -x : x )
}
# Ditto for ceiling function.
function ceil(x) {
return (x == int(x)) ? x : int(x) + 1
}
# Local variables MUST be declared in argument list, else they are
# seen as global. Ugly, but that is how awk works.
function get_terminal_size(SIZE, SIZEA, HAS_DETECTED, CMD) {
HAS_DETECTED = 0
CMD = "stty -f /dev/tty size 2> /dev/null"
if ( (CMD | getline SIZE) == 1 ) {
split(SIZE, SIZEA, " ")
LINES = int(SIZEA[1])
COLUMNS = int(SIZEA[2])
HAS_DETECTED = 1
}
close(CMD)
if ( HAS_DETECTED == 0 ) {
CMD = "tput lines"
if ( (CMD | getline SIZE) == 1 ) {
LINES = int(SIZE)
HAS_DETECTED = 1
}
close(CMD)
CMD = "tput cols"
if ( (CMD | getline SIZE) == 1 ) {
COLUMNS = int(SIZE)
HAS_DETECTED = 1
}
close(CMD)
}
if ( int('"${OVERRIDE_COLUMNS}"') ) { COLUMNS = int('"${OVERRIDE_COLUMNS}"') }
if ( int('"${OVERRIDE_LINES}"') ) { LINES = int('"${OVERRIDE_LINES}"') }
}
############################################################
# Functions related to cursor handling
# Function called whenever a non-dotted line is printed.
#
# It will move the cursor to the line next to the statistics and
# restore the default color.
function other_line_is_printed() {
if ( IS_PRINTING_DOTS ) {
if ( '"${IS_TERMINAL}"' ) {
printf( ESC_DEFAULT ESC_NEXTLINE ESC_NEXTLINE "\n" )
} else {
printf( ESC_DEFAULT "\n" )
print_statistics_bar()
}
}
IS_PRINTING_DOTS = 0
CURR_COL = 0
}
# Function called whenever a non-dotted line is repeated.
function other_line_is_repeated() {
if ( other_line_times < 2 ) {
return
}
if ( '"${IS_TERMINAL}"' ) {
printf( ESC_DEFAULT ESC_ERASELINE "\r" )
}
printf( "Last message repeated %d times.", other_line_times )
if ( ! '"${IS_TERMINAL}"' ) {
printf( "\n" )
}
}
# Function called whenever the repeating line has changed.
function other_line_finished_repeating() {
if ( other_line_times >= 2 ) {
if ( '"${IS_TERMINAL}"' ) {
printf( "\n" )
} else {
other_line_is_repeated()
}
}
other_line = ""
other_line_times = 0
}
# Prints the newlines required for the live statistics.
#
# I need to print some newlines and then return the cursor back to its position
# to make sure the terminal will scroll.
#
# If the output is not a terminal, break lines on every LAST_N dots.
function print_newlines_if_needed() {
if ( '"${IS_TERMINAL}"' ) {
# COLUMNS-1 because I want to avoid bugs with the cursor at the last column
if ( CURR_COL >= COLUMNS-1 ) {
CURR_COL = 0
}
if ( CURR_COL == 0 ) {
if ( IS_PRINTING_DOTS ) {
printf( "\n" )
}
#printf( "\n" "\n" ESC_PREVLINE ESC_PREVLINE ESC_ERASELINE )
printf( ESC_DEFAULT "\n" "\n" ESC_CURSORUP ESC_CURSORUP ESC_ERASELINE )
}
} else {
if ( CURR_COL >= LAST_N ) {
CURR_COL = 0
printf( ESC_DEFAULT "\n" )
print_statistics_bar()
}
}
IS_PRINTING_DOTS = 1
}
############################################################
# Functions related to the data structure of "Last N" statistics.
# Clears the data structure.
function clear(d) {
d["index"] = 0 # The next position to store a value
d["size"] = 0 # The array size, goes up to LAST_N
}
# This function stores the value to the passed data structure.
# The data structure holds at most LAST_N values. When it is full,
# a new value overwrite the oldest one.
function store(d, value) {
d[d["index"]] = value
d["index"]++
if ( d["index"] >= d["size"] ) {
if ( d["size"] < LAST_N ) {
d["size"]++
} else {
d["index"] = 0
}
}
}
############################################################
# Functions related to processing the received response
function process_rtt(rtt) {
# Overall statistics
last_rtt = rtt
total_rtt += rtt
if ( last_seq == 0 ) {
min_rtt = max_rtt = rtt
} else {
if ( rtt < min_rtt ) min_rtt = rtt
if ( rtt > max_rtt ) max_rtt = rtt
}
# "Last N" statistics
store(lastn_rtt,rtt)
}
function lost_a_packet() {
print_newlines_if_needed()
print_missing_response()
last_seq++
lost++
store(lastn_lost, 1)
}
############################################################
# Functions related to printing the fancy ping response
# block_index, n, w are just local variables.
function print_response_legend(i, n, w) {
if ( ! '"${USE_LEGEND}"' ) {
return
}
if ( BLOCK_LEN > 1 ) {
# w counts the cursor position in the current line. Because of the
# escape codes, I need to jump through some hoops in order to count the
# position correctly.
w = 0
n = "0 "
w += length(n) + 1
printf( n BLOCK[0] ESC_DEFAULT )
for ( i=1 ; i<BLOCK_LEN ; i++ ) {
n = sprintf( "%d ", BLOCK_RTT_MIN + ceil((i-1) * BLOCK_RTT_RANGE / (BLOCK_LEN - 2)) )
w += length(n) + 1
# Avoid breaking the legend at the end of the line.
# Also avoids a background color change right at
# the edge of the screen. (If it happens, the entire next line
# will have that background color, which is not desired.)
if ( '"${IS_TERMINAL}"' && w + 1 >= COLUMNS ) {
printf( "\n" )
w = length(n) + 1
} else {
printf( " " )
w += 1
}
printf( n BLOCK[i] ESC_DEFAULT )
}
printf( " ∞\n" )
}
# Useful code for debugging.
#for ( i=0 ; i<=BLOCK_RTT_MAX ; i++ ) {
# print_received_response(i)
# printf( ESC_DEFAULT "%4d\n", i )
#}
}
# block_index is just a local variable.
function print_received_response(rtt, block_index) {
if ( rtt < BLOCK_RTT_MIN ) {
block_index = 0
} else if ( rtt >= BLOCK_RTT_MAX ) {
block_index = BLOCK_LEN - 1
} else {
block_index = 1 + int((rtt - BLOCK_RTT_MIN) * (BLOCK_LEN - 2) / BLOCK_RTT_RANGE)
}
printf( BLOCK[block_index] )
CURR_COL++
}
function print_missing_response(rtt) {
printf( ESC_RED "!" )
CURR_COL++
}
############################################################
# Functions related to printing statistics
# All arguments are just local variables.
function print_overall(percentage_lost, avg_rtt) {
# Handling division by zero.
# Note that mawk does not consider division by zero an error, while all
# other awk implementations abort in such case.
# https://stackoverflow.com/questions/14581966/why-does-awk-produce-different-results-for-division-by-zero
avg_rtt = ( received > 0 ) ? (total_rtt/received) : 0
percentage_lost = ( lost+received > 0 ) ? (lost*100/(lost+received)) : 0
if ( '"${IS_TERMINAL}"' ) {
printf( "%2d/%3d (%2d%%) lost; %4.0f/" ESC_BOLD "%4.0f" ESC_DEFAULT "/%4.0fms; last: " ESC_BOLD "%4.0f" ESC_DEFAULT "ms",
lost,
lost+received,
percentage_lost,
min_rtt,
avg_rtt,
max_rtt,
last_rtt )
} else {
printf( "%2d/%3d (%2d%%) lost; %4.0f/" ESC_BOLD "%4.0f" ESC_DEFAULT "/%4.0fms",
lost,
lost+received,
percentage_lost,
min_rtt,
avg_rtt,
max_rtt )
}
}
# All arguments are just local variables.
function print_last_n(i, percentage_lost, sum, min, avg, max, diffs) {
# Calculate and print the lost packets statistics
sum = 0
for ( i=0 ; i<lastn_lost["size"] ; i++ ) {
sum += lastn_lost[i]
}
percentage_lost = (lastn_lost["size"] > 0) ? (sum*100/lastn_lost["size"]) : 0
printf( "%2d/%3d (%2d%%) lost; ",
sum,
lastn_lost["size"],
percentage_lost )
# Calculate the min/avg/max rtt times
sum = diffs = 0
min = max = lastn_rtt[0]
for ( i=0 ; i<lastn_rtt["size"] ; i++ ) {
sum += lastn_rtt[i]
if ( lastn_rtt[i] < min ) min = lastn_rtt[i]
if ( lastn_rtt[i] > max ) max = lastn_rtt[i]
}
avg = (lastn_rtt["size"]) ? (sum/lastn_rtt["size"]) : 0
# Calculate mdev (mean absolute deviation)
for ( i=0 ; i<lastn_rtt["size"] ; i++ ) {
diffs += abs(lastn_rtt[i] - avg)
}
if ( lastn_rtt["size"] > 0 ) {
diffs /= lastn_rtt["size"]
}
# Print the rtt statistics
printf( "%4.0f/" ESC_BOLD "%4.0f" ESC_DEFAULT "/%4.0f/%4.0fms (last %d)",
min,
avg,
max,
diffs,
lastn_rtt["size"] )
}
function print_statistics_bar() {
if ( '"${IS_TERMINAL}"' ) {
printf( ESC_SAVEPOS ESC_DEFAULT )
printf( ESC_NEXTLINE ESC_ERASELINE )
print_overall()
printf( ESC_NEXTLINE ESC_ERASELINE )
print_last_n()
printf( ESC_UNSAVEPOS )
} else {
print_overall()
printf( "\n" )
print_last_n()
printf( "\n" )
}
}
function print_statistics_bar_if_terminal() {
if ( '"${IS_TERMINAL}"' ) {
print_statistics_bar()
}
}
############################################################
# Initializations
BEGIN {
# Easy way to get each value from ping output
FS = "="
############################################################
# General internal variables
# This is needed to keep track of lost packets
last_seq = 0
# The previously printed non-ping-response line
other_line = ""
other_line_times = 0
# Variables to keep the screen clean
IS_PRINTING_DOTS = 0
CURR_COL = 0
############################################################
# Variables related to "overall" statistics
received = 0
lost = 0
total_rtt = 0
min_rtt = 0
max_rtt = 0
last_rtt = 0
############################################################
# Variables related to "last N" statistics
LAST_N = int('"${LAST_N}"')
# Data structures for the "last N" statistics
clear(lastn_lost)
clear(lastn_rtt)
############################################################
# Terminal height and width
# These are sane defaults, in case we cannot query the actual terminal size
LINES = 24
COLUMNS = 80
# Auto-detecting the terminal size
get_terminal_size()
if ( '"${IS_TERMINAL}"' && COLUMNS <= 50 ) {
print "Warning: terminal width is too small."
}
############################################################
# ANSI escape codes
# Color escape codes.
# Fortunately, awk defaults any unassigned variable to an empty string.
if ( '"${USE_COLOR}"' ) {
ESC_DEFAULT = "\033[0m"
ESC_BOLD = "\033[1m"
#ESC_BLACK = "\033[0;30m"
#ESC_GRAY = "\033[1;30m"
ESC_RED = "\033[0;31m"
ESC_GREEN = "\033[0;32m"
ESC_YELLOW = "\033[0;33m"
ESC_BLUE = "\033[0;34m"
ESC_MAGENTA = "\033[0;35m"
ESC_CYAN = "\033[0;36m"
ESC_WHITE = "\033[0;37m"
ESC_YELLOW_ON_GREEN = "\033[42;33m"
ESC_RED_ON_YELLOW = "\033[43;31m"
}
# Other escape codes, see:
# http://en.wikipedia.org/wiki/ANSI_escape_code
# http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
ESC_NEXTLINE = "\n"
ESC_CURSORUP = "\033[A"
ESC_CURSORDOWN = "\033[B"
ESC_SCROLLUP = "\033[S"
ESC_SCROLLDOWN = "\033[T"
ESC_ERASELINEEND = "\033[0K"
ESC_ERASELINE = "\033[2K"
ESC_SAVEPOS = "\0337"
ESC_UNSAVEPOS = "\0338"
# I am avoiding these escapes as they are not listed in:
# http://vt100.net/docs/vt100-ug/chapter3.html
#ESC_PREVLINE = "\033[F"
#ESC_SAVEPOS = "\033[s"
#ESC_UNSAVEPOS = "\033[u"
# I am avoiding this to improve compatibility with (older versions of) tmux
#ESC_NEXTLINE = "\033[E"
############################################################
# Unicode characters (based on https://github.com/holman/spark )
if ( '"${USE_UNICODE}"' ) {
BLOCK[ 0] = ESC_GREEN "▁"
BLOCK[ 1] = ESC_GREEN "▂"
BLOCK[ 2] = ESC_GREEN "▃"
BLOCK[ 3] = ESC_GREEN "▄"
BLOCK[ 4] = ESC_GREEN "▅"
BLOCK[ 5] = ESC_GREEN "▆"
BLOCK[ 6] = ESC_GREEN "▇"
BLOCK[ 7] = ESC_GREEN "█"
BLOCK[ 8] = ESC_YELLOW_ON_GREEN "▁"
BLOCK[ 9] = ESC_YELLOW_ON_GREEN "▂"
BLOCK[10] = ESC_YELLOW_ON_GREEN "▃"
BLOCK[11] = ESC_YELLOW_ON_GREEN "▄"
BLOCK[12] = ESC_YELLOW_ON_GREEN "▅"
BLOCK[13] = ESC_YELLOW_ON_GREEN "▆"
BLOCK[14] = ESC_YELLOW_ON_GREEN "▇"
BLOCK[15] = ESC_YELLOW_ON_GREEN "█"
BLOCK[16] = ESC_RED_ON_YELLOW "▁"
BLOCK[17] = ESC_RED_ON_YELLOW "▂"
BLOCK[18] = ESC_RED_ON_YELLOW "▃"
BLOCK[19] = ESC_RED_ON_YELLOW "▄"
BLOCK[20] = ESC_RED_ON_YELLOW "▅"
BLOCK[21] = ESC_RED_ON_YELLOW "▆"
BLOCK[22] = ESC_RED_ON_YELLOW "▇"
BLOCK[23] = ESC_RED_ON_YELLOW "█"
if ( '"${USE_MULTICOLOR}"' && '"${USE_COLOR}"' ) {
# Multi-color version:
BLOCK_LEN = 24
BLOCK_RTT_MIN = 10
BLOCK_RTT_MAX = 230
} else {
# Simple version:
BLOCK_LEN = 8
BLOCK_RTT_MIN = 25
BLOCK_RTT_MAX = 175
}
} else {
BLOCK[ 0] = ESC_GREEN "_"
BLOCK[ 1] = ESC_GREEN "."
BLOCK[ 2] = ESC_GREEN "o"
BLOCK[ 3] = ESC_GREEN "O"
BLOCK[ 4] = ESC_YELLOW "_"
BLOCK[ 5] = ESC_YELLOW "."
BLOCK[ 6] = ESC_YELLOW "o"
BLOCK[ 7] = ESC_YELLOW "O"
BLOCK[ 8] = ESC_RED "_"
BLOCK[ 9] = ESC_RED "."
BLOCK[10] = ESC_RED "o"
BLOCK[11] = ESC_RED "O"
if ( '"${USE_MULTICOLOR}"' && '"${USE_COLOR}"' ) {
# Multi-color version:
BLOCK_LEN = 12
BLOCK_RTT_MIN = 20
BLOCK_RTT_MAX = 220
} else {
# Simple version:
BLOCK_LEN = 4
BLOCK_RTT_MIN = 75
BLOCK_RTT_MAX = 225
}
}
if ( int('"${RTT_MIN}"') > 0 && int('"${RTT_MAX}"') > 0 ) {
BLOCK_RTT_MIN = int('"${RTT_MIN}"')
BLOCK_RTT_MAX = int('"${RTT_MAX}"')
} else if ( int('"${RTT_MIN}"') > 0 ) {
BLOCK_RTT_MIN = int('"${RTT_MIN}"')
BLOCK_RTT_MAX = BLOCK_RTT_MIN * (BLOCK_LEN - 1)
} else if ( int('"${RTT_MAX}"') > 0 ) {
BLOCK_RTT_MAX = int('"${RTT_MAX}"')
BLOCK_RTT_MIN = int(BLOCK_RTT_MAX / (BLOCK_LEN - 1))
}
BLOCK_RTT_RANGE = BLOCK_RTT_MAX - BLOCK_RTT_MIN
print_response_legend()
}
############################################################
# Main loop
{
if ( $0 ~ /^[0-9]+ bytes from .*: icmp_[rs]eq=[0-9]+ ttl=[0-9]+ time=[0-9.]+ *ms/ ) {
# Sample line from ping:
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=184 ms
if ( other_line_times >= 2 ) {
other_line_finished_repeating()
}
# $1 = useless prefix string
# $2 = icmp_seq
# $3 = ttl
# $4 = time
# This must be called before incrementing the last_seq variable!
rtt = int($4)
process_rtt(rtt)
seq = int($2)
while ( last_seq < seq - 1 ) {
lost_a_packet()
}
# Received a packet
print_newlines_if_needed()
print_received_response(rtt)
# In case of receiving multiple responses with the same seq number, it
# is better to use "last_seq = seq" than to increment last_seq.
last_seq = seq
received++
store(lastn_lost, 0)
print_statistics_bar_if_terminal()
} else if ( $0 ~ /^.*onnected to.*, seq=[0-9]+ time=[0-9.]+ *ms/ ) {
# Sample line from httping:
# connected to 200.149.119.168:80 (273 bytes), seq=0 time=129.86 ms
if ( other_line_times >= 2 ) {
other_line_finished_repeating()
}
seq = $0
sub(/.* seq=/, "", seq)
seq = int(seq)
rtt = $0
sub(/.* time=/, "", rtt)
rtt = int(rtt)
process_rtt(rtt)
while ( last_seq < seq - 1 ) {
lost_a_packet()
}
# Received a packet
print_newlines_if_needed()
print_received_response(rtt)
# In case of receiving multiple responses with the same seq number, it
# is better to use "last_seq = seq" than to increment last_seq.
last_seq = seq
received++
store(lastn_lost, 0)
print_statistics_bar_if_terminal()
} else if ( $0 == "" ) {
# Do nothing on blank lines.
} else if ( $0 == "error shutting down ssl" ) {
# Common error message when using httping, ignore it.
} else if ( $0 ~ /^Request timeout for icmp_seq [0-9]+/ ) {
# Reply timeout is printed on Mac OS X.
if ( other_line_times >= 2 ) {
other_line_finished_repeating()
}
lost_a_packet()
# Making sure the last_seq number is correct.
gsub(/.* icmp_seq /, "")
seq = int($0)
last_seq = seq
print_newlines_if_needed()
print_statistics_bar_if_terminal()
} else if ( $0 ~ /^SIGWINCH$/ ) {
get_terminal_size()
if ( IS_PRINTING_DOTS ) {
if ( CURR_COL >= COLUMNS-1 ) {
# Not enough space anyway.
} else {
# Making up room in case the number of lines has changed.
printf( ESC_NEXTLINE ESC_NEXTLINE ESC_CURSORUP ESC_CURSORUP )
# Moving to the correct column and erasing the rest of the line.
printf( "\033[" (CURR_COL+1) "G" ESC_DEFAULT ESC_ERASELINEEND )
}
print_newlines_if_needed()
print_statistics_bar_if_terminal()
}
} else {
other_line_is_printed()
original_line = $0
gsub(/icmp_seq[= ][0-9]+/, "")
if ( $0 == other_line ) {
other_line_times++
if ( '"${IS_TERMINAL}"' ) {
other_line_is_repeated()
}
} else {
other_line_finished_repeating()
other_line = $0
other_line_times = 1
printf( "%s\n", original_line )
}
}
# Not needed when the output is a terminal, but does not hurt either.
fflush()
}'

@ -1,228 +0,0 @@
# 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
# Workspace assignment for monitors
workspace "z:s" output eDP
workspace "u:s" output eDP
workspace "i:s" output eDP
workspace "o:s" output eDP
#--
workspace "1:l" output HDMI-A-0
workspace "2:l" output HDMI-A-0
workspace "3:l" output HDMI-A-0
workspace "4:l" output HDMI-A-0
workspace "5:l" output HDMI-A-0
workspace "6:l" output HDMI-A-0
#-- dockingstation
# workspace "7:r" output DP-2-1
# workspace "8:r" output DP-2-1
# workspace "9:r" output DP-2-1
# workspace "0:r" output DP-2-1
# workspace "ß:r" output DP-2-1
#-- hdmi out
workspace "7:r" output HDMI-A-0
workspace "8:r" output HDMI-A-0
workspace "9:r" output HDMI-A-0
workspace "0:r" output HDMI-A-0
workspace "ß:r" output HDMI-A-0
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 8
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 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 doesnt scale on retina/hidpi displays.
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
bindsym $mod+Return exec kitty --single-instance
# start chromium
bindsym $mod+BackSpace exec /home/dario/firefox/firefox
# screenshot
bindsym $mod+Delete exec scrot -s
# kill focused window
bindsym $mod+Shift+x kill
# change focus
bindsym $mod+n focus left
bindsym $mod+r focus down
bindsym $mod+t focus up
bindsym $mod+d 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+n move left
bindsym $mod+Shift+r move down
bindsym $mod+Shift+t move up
bindsym $mod+Shift+d 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+s split h
# split in vertical orientation
bindsym $mod+p split v
# enter fullscreen mode for the focused container
bindsym $mod+e fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+i layout stacking
bindsym $mod+v layout tabbed
bindsym $mod+l layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+u focus parent
# focus the child container
#bindsym $mod+d focus child
# switch to workspace
bindsym $mod+k workspace "z:s"
bindsym $mod+h workspace "u:s"
bindsym $mod+g workspace "i:s"
bindsym $mod+f workspace "o:s"
bindsym $mod+1 workspace "1:l"
bindsym $mod+2 workspace "2:l"
bindsym $mod+3 workspace "3:l"
bindsym $mod+4 workspace "4:l"
bindsym $mod+5 workspace "5:l"
bindsym $mod+6 workspace "6:l"
bindsym $mod+7 workspace "7:r"
bindsym $mod+8 workspace "8:r"
bindsym $mod+9 workspace "9:r"
bindsym $mod+0 workspace "0:r"
bindsym $mod+minus workspace "ß:r"
# switch workspace left/right
bindsym $mod+Prior workspace prev
bindsym $mod+Next workspace next
# move focused container to workspace
bindsym $mod+Shift+k move container to workspace "z:s"
bindsym $mod+Shift+h move container to workspace "u:s"
bindsym $mod+Shift+g move container to workspace "i:s"
bindsym $mod+Shift+f move container to workspace "o:s"
bindsym $mod+Shift+1 move container to workspace "1:l"
bindsym $mod+Shift+2 move container to workspace "2:l"
bindsym $mod+Shift+3 move container to workspace "3:l"
bindsym $mod+Shift+4 move container to workspace "4:l"
bindsym $mod+Shift+5 move container to workspace "5:l"
bindsym $mod+Shift+6 move container to workspace "6:l"
bindsym $mod+Shift+7 move container to workspace "7:r"
bindsym $mod+Shift+8 move container to workspace "8:r"
bindsym $mod+Shift+9 move container to workspace "9:r"
bindsym $mod+Shift+0 move container to workspace "0:r"
bindsym $mod+Shift+minus move container to workspace "ß:r"
# reload the configuration file
bindsym $mod+Shift+adiaeresis reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+c restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+l exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
bindsym $mod+Tab exec rofi -show window
bindsym $mod+a exec rofi -show drun
bindsym $mod+F2 exec sh ~/config/lock.sh
bindsym $mod+F4 exec sh ~/config/susp.sh
# TODO: debug
#bindsym $mod+F12 exec xfce4-terminal --drop-down
#bindsym $mod+y exec xfce4-terminal --drop-down
exec_always --no-startup-id /home/dario/.local/bin/kitti3 -n bubblegum -p top
bindsym $mod+y nop bubblegum
#bindsym $mod+y exec /home/dario/config/i3/scripts/i3quake -p top -H 0.4 kitty
#for_window [class="(?i)xfce4-terminal"] floating enable
#for_window [class="(?i)xfce4-terminal"] border none
#for_window [class="VirtualBox" instance="VirtualBox"] floating enable
# 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 windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym n resize shrink width 10 px or 10 ppt
bindsym r resize grow height 10 px or 10 ppt
bindsym t resize shrink height 10 px or 10 ppt
bindsym d 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+c mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
#status_command i3status --config ~/.config/i3/i3status.conf
status_command i3blocks -c ~/.config/i3/i3blocks.conf
bindsym button4 workspace next_on_output
bindsym button5 workspace prev_on_output
}
# autostart
exec --no-startup-id pulseaudio --start
exec --no-startup-id xfce4-power-manager
exec --no-startup-id "nm-applet &"
exec --no-startup-id "pnmixer &"

@ -1,217 +0,0 @@
# 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
# Workspace assignment for monitors
workspace "1:l" output DP-1
workspace "2:l" output DP-1
workspace "3:l" output DP-1
workspace "4:l" output DP-1
workspace "5:l" output DP-1
workspace "6:l" output DP-1
#--
workspace "7:r" output DP-2
workspace "8:r" output DP-2
workspace "9:r" output DP-2
workspace "0:r" output HDMI-1
workspace "ß:r" output HDMI-1
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 8
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 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 doesnt scale on retina/hidpi displays.
exec_always xset -dpms ; xset s 0 0 ; xset s off
#exec autocutsel -selection CLIPBOARD
#exec autocutsel -selection PRIMARY
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
bindsym $mod+Return exec xfce4-terminal
# start chromium
bindsym $mod+BackSpace exec /home/dario/firefox/firefox
# screenshot
bindsym $mod+Delete exec scrot -s
# kill focused window
bindsym $mod+Shift+x kill
bindsym Scroll_Lock exec "sh -c 'for i in $(pactl list sinks | grep Sink | cut -d# -f2) ; do pactl set-sink-volume $i +5% ; done'"
bindsym Print exec "sh -c 'for i in $(pactl list sinks | grep Sink | cut -d# -f2) ; do pactl set-sink-volume $i -5% ; done'"
bindsym Pause exec "sh -c 'for i in $(pactl list sinks | grep Sink | cut -d# -f2) ; do pactl set-sink-mute $i toggle ; done'"
bindsym XF86AudioRaiseVolume exec "sh -c 'for i in $(pactl list sinks | grep Sink | cut -d# -f2) ; do pactl set-sink-volume $i +5% ; done'"
bindsym XF86AudioLowerVolume exec "sh -c 'for i in $(pactl list sinks | grep Sink | cut -d# -f2) ; do pactl set-sink-volume $i -5% ; done'"
bindsym XF86AudioMute exec "sh -c 'for i in $(pactl list sinks | grep Sink | cut -d# -f2) ; do pactl set-sink-mute $i toggle ; done'"
# start dmenu (a program launcher)
#bindsym $mod+a exec dmenu_run
# There also is the (new) i3-dmenu-desktop which only displays applications
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
# installed.
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
# change focus
bindsym $mod+n focus left
bindsym $mod+r focus down
bindsym $mod+t focus up
bindsym $mod+d 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+n move left
bindsym $mod+Shift+r move down
bindsym $mod+Shift+t move up
bindsym $mod+Shift+d 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+s split h
# split in vertical orientation
bindsym $mod+p split v
# enter fullscreen mode for the focused container
bindsym $mod+e fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+i layout stacking
bindsym $mod+v layout tabbed
bindsym $mod+l layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+u focus parent
# focus the child container
#bindsym $mod+d focus child
# switch to workspace
bindsym $mod+1 workspace "1:l"
bindsym $mod+2 workspace "2:l"
bindsym $mod+3 workspace "3:l"
bindsym $mod+4 workspace "4:l"
bindsym $mod+5 workspace "5:l"
bindsym $mod+6 workspace "6:l"
bindsym $mod+7 workspace "7:r"
bindsym $mod+8 workspace "8:r"
bindsym $mod+9 workspace "9:r"
bindsym $mod+0 workspace "0:r"
bindsym $mod+minus workspace "ß:r"
# switch workspace left/right
bindsym $mod+Prior workspace prev
bindsym $mod+Next workspace next
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace "1:l"
bindsym $mod+Shift+2 move container to workspace "2:l"
bindsym $mod+Shift+3 move container to workspace "3:l"
bindsym $mod+Shift+4 move container to workspace "4:l"
bindsym $mod+Shift+5 move container to workspace "5:l"
bindsym $mod+Shift+6 move container to workspace "6:l"
bindsym $mod+Shift+7 move container to workspace "7:r"
bindsym $mod+Shift+8 move container to workspace "8:r"
bindsym $mod+Shift+9 move container to workspace "9:r"
bindsym $mod+Shift+0 move container to workspace "0:r"
bindsym $mod+Shift+minus move container to workspace "ß:r"
# reload the configuration file
bindsym $mod+Shift+adiaeresis reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+c restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+l exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
bindsym $mod+Tab exec rofi -show window
bindsym $mod+a exec rofi -show drun
bindsym $mod+F2 exec sh ~/config/lock.sh
bindsym $mod+F4 exec sh ~/config/susp.sh
# TODO: debug
bindsym $mod+F12 exec xfce4-terminal --drop-down
bindsym $mod+y exec xfce4-terminal --drop-down
bindsym $mod+PAUSE exec xfce4-terminal --drop-down
#for_window [class="(?i)xfce4-terminal"] floating enable
#for_window [class="(?i)xfce4-terminal"] border none
# 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 windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym n resize shrink width 10 px or 10 ppt
bindsym r resize grow height 10 px or 10 ppt
bindsym t resize shrink height 10 px or 10 ppt
bindsym d 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+c mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
#status_command i3status --config ~/.config/i3/i3status.conf
status_command i3blocks -c ~/.config/i3/i3blocks.conf
bindsym button4 workspace next_on_output
bindsym button5 workspace prev_on_output
}

@ -28,7 +28,7 @@ command=/usr/share/i3blocks/$BLOCK_NAME
separator_block_width=15
markup=none
[volume-pipewire]
[volume-pulseaudio]
command=~/.config/i3/scripts/volume-pulseaudio
interval=1
signal=1
@ -53,7 +53,7 @@ interval=5
# The script may be called with a optional argument to set the alert
# (defaults to 10 for 10%).
[disk]
label=Disk
label=HOME
#instance=/mnt/data
interval=30
@ -62,34 +62,13 @@ interval=30
# 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=enp0s31f6
#instance=eth0
color=#00FF00
interval=10
separator=false
[bandwidth]
instance=enp0s31f6
interval=5
[iface]
instance=enx00e04c6803b1
color=#00FF00
interval=10
separator=false
[bandwidth]
instance=enx00e04c6803b1
interval=5
[iface]
instance=wlp58s0
color=#00FF00
interval=10
separator=false
[bandwidth]
instance=wlp58s0
#instance=eth0
interval=5
# CPU usage
@ -150,7 +129,7 @@ interval=5
[keymap]
command=~/.config/i3/scripts/keymap
label=⌨️
label=
interval=1
# Date Time

@ -0,0 +1,38 @@
general {
}
order += "volume audio"
order += "ipv6"
order += "disk /"
order += "run_watch DHCP"
order += "ethernet eth0"
order += "battery 0"
order += "load"
order += "tztime local"
ethernet eth0 {
# if you use %speed, i3status requires the cap_net_admin capability
format_up = "E: %ip (%speed)"
format_down = "E: down"
}
run_watch DHCP {
pidfile = "/var/run/dhclient*.pid"
}
tztime local {
format = "%Y-%m-%d %H:%M:%S"
}
volume audio {
device = "pulse"
}
load {
format = "%5min"
}
disk "/" {
format = "%free"
}

Binary file not shown.

@ -1,172 +0,0 @@
#!/bin/bash
# Displays the default device, volume, and mute status for i3blocks
set -a
AUDIO_HIGH_SYMBOL=${AUDIO_HIGH_SYMBOL:-' '}
AUDIO_MED_THRESH=${AUDIO_MED_THRESH:-50}
AUDIO_MED_SYMBOL=${AUDIO_MED_SYMBOL:-' '}
AUDIO_LOW_THRESH=${AUDIO_LOW_THRESH:-0}
AUDIO_LOW_SYMBOL=${AUDIO_LOW_SYMBOL:-' '}
AUDIO_MUTED_SYMBOL=${AUDIO_MUTED_SYMBOL:-' '}
AUDIO_DELTA=${AUDIO_DELTA:-5}
DEFAULT_COLOR=${DEFAULT_COLOR:-"#ffffff"}
MUTED_COLOR=${MUTED_COLOR:-"#a0a0a0"}
LONG_FORMAT=${LONG_FORMAT:-'${SYMB} ${VOL}% [${INDEX}:${NAME}]'}
SHORT_FORMAT=${SHORT_FORMAT:-'${SYMB} ${VOL}% [${INDEX}]'}
USE_ALSA_NAME=${USE_ALSA_NAME:-0}
USE_DESCRIPTION=${USE_DESCRIPTION:-0}
SUBSCRIBE=${SUBSCRIBE:-0}
MIXER=${MIXER:-""}
SCONTROL=${SCONTROL:-""}
while getopts F:Sf:adH:M:L:X:T:t:C:c:i:m:s:h opt; do
case "$opt" in
S) SUBSCRIBE=1 ;;
F) LONG_FORMAT="$OPTARG" ;;
f) SHORT_FORMAT="$OPTARG" ;;
a) USE_ALSA_NAME=1 ;;
d) USE_DESCRIPTION=1 ;;
H) AUDIO_HIGH_SYMBOL="$OPTARG" ;;
M) AUDIO_MED_SYMBOL="$OPTARG" ;;
L) AUDIO_LOW_SYMBOL="$OPTARG" ;;
X) AUDIO_MUTED_SYMBOL="$OPTARG" ;;
T) AUDIO_MED_THRESH="$OPTARG" ;;
t) AUDIO_LOW_THRESH="$OPTARG" ;;
C) DEFAULT_COLOR="$OPTARG" ;;
c) MUTED_COLOR="$OPTARG" ;;
i) AUDIO_INTERVAL="$OPTARG" ;;
m) MIXER="$OPTARG" ;;
s) SCONTROL="$OPTARG" ;;
h) printf \
"Usage: volume-pulseaudio [-S] [-F format] [-f format] [-p] [-a|-d] [-H symb] [-M symb]
[-L symb] [-X symb] [-T thresh] [-t thresh] [-C color] [-c color] [-i inter]
[-m mixer] [-s scontrol] [-h]
Options:
-F, -f\tOutput format (-F long format, -f short format) to use, with exposed variables:
\${SYMB}, \${VOL}, \${INDEX}, \${NAME}
-S\tSubscribe to volume events (requires persistent block, always uses long format)
-a\tUse ALSA name if possible
-d\tUse device description instead of name if possible
-H\tSymbol to use when audio level is high. Default: '$AUDIO_HIGH_SYMBOL'
-M\tSymbol to use when audio level is medium. Default: '$AUDIO_MED_SYMBOL'
-L\tSymbol to use when audio level is low. Default: '$AUDIO_LOW_SYMBOL'
-X\tSymbol to use when audio is muted. Default: '$AUDIO_MUTED_SYMBOL'
-T\tThreshold for medium audio level. Default: $AUDIO_MED_THRESH
-t\tThreshold for low audio level. Default: $AUDIO_LOW_THRESH
-C\tColor for non-muted audio. Default: $DEFAULT_COLOR
-c\tColor for muted audio. Default: $MUTED_COLOR
-i\tInterval size of volume increase/decrease. Default: $AUDIO_DELTA
-m\tUse the given mixer.
-s\tUse the given scontrol.
-h\tShow this help text
" && exit 0;;
esac
done
if [[ -z "$MIXER" ]] ; then
MIXER="default"
if amixer -D pulse info >/dev/null 2>&1 ; then
MIXER="pulse"
fi
fi
if [[ -z "$SCONTROL" ]] ; then
SCONTROL=$(amixer -D "$MIXER" scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
fi
CAPABILITY=$(amixer -D $MIXER get $SCONTROL | sed -n "s/ Capabilities:.*cvolume.*/Capture/p")
function move_sinks_to_new_default {
DEFAULT_SINK=$1
pactl list sink-inputs | grep 'Sink Input #' | grep -o '[0-9]\+' | while read SINK
do
pactl move-sink-input $SINK $DEFAULT_SINK
done
}
function set_default_playback_device_next {
inc=${1:-1}
num_devices=$(pactl list sinks | grep -c Name:)
sink_arr=($(pactl list sinks | grep Name: | sed -r 's/\s+Name: (.+)/\1/'))
default_sink=$(pactl get-default-sink)
default_sink_index=$(for i in "${!sink_arr[@]}"; do if [[ "$default_sink" = "${sink_arr[$i]}" ]]; then echo "$i"; fi done)
default_sink_index=$(( ($default_sink_index + $num_devices + $inc) % $num_devices ))
default_sink=${sink_arr[$default_sink_index]}
pactl set-default-sink $default_sink
move_sinks_to_new_default $default_sink
}
case "$BLOCK_BUTTON" in
1) set_default_playback_device_next ;;
2) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY toggle ;;
3) set_default_playback_device_next -1 ;;
4) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_DELTA%+ ;;
5) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_DELTA%- ;;
esac
function print_format {
echo "$1" | envsubst '${SYMB}${VOL}${INDEX}${NAME}'
}
function print_block {
ACTIVE=$(pactl list sinks | grep "State\: RUNNING" -B4 -A55 | grep "Name:\|Volume: \(front-left\|mono\)\|Mute:\|api.alsa.pcm.card = \|node.nick = ")
for Name in NAME MUTED VOL INDEX NICK; do
read $Name
done < <(echo "$ACTIVE")
INDEX=$(echo "$INDEX" | grep -o '".*"' | sed 's/"//g')
VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 )
VOL="${VOL%?}"
NAME=$(echo "$NICK" | grep -o '".*"' | sed 's/"//g')
if [[ $USE_ALSA_NAME == 1 ]] ; then
ALSA_NAME=$(pactl list sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "alsa.name\|alsa.mixer_name" |\
head -n1 |\
sed 's/.*= "\(.*\)".*/\1/')
NAME=${ALSA_NAME:-$NAME}
elif [[ $USE_DESCRIPTION == 1 ]] ; then
DESCRIPTION=$(pactl list sinks | grep "State\: RUNNING" -B4 -A55 | grep 'Description: ' | sed 's/^.*: //')
NAME=${DESCRIPTION:-$NAME}
fi
if [[ $MUTED =~ "no" ]] ; then
SYMB=$AUDIO_HIGH_SYMBOL
[[ $VOL -le $AUDIO_MED_THRESH ]] && SYMB=$AUDIO_MED_SYMBOL
[[ $VOL -le $AUDIO_LOW_THRESH ]] && SYMB=$AUDIO_LOW_SYMBOL
COLOR=$DEFAULT_COLOR
else
SYMB=$AUDIO_MUTED_SYMBOL
COLOR=$MUTED_COLOR
fi
if [[ $ACTIVE = "" ]] ; then
echo "Sound inactive"
COLOR='#222225'
fi
if [[ $SUBSCRIBE == 1 ]] ; then
print_format "$LONG_FORMAT"
else
print_format "$LONG_FORMAT"
print_format "$SHORT_FORMAT"
echo "$COLOR"
fi
}
print_block
if [[ $SUBSCRIBE == 1 ]] ; then
while read -r EVENT; do
print_block
done < <(pactl subscribe | stdbuf -oL grep change)
fi

@ -1,21 +1,21 @@
#!/bin/bash
# Displays the default device, volume, and mute status for i3blocks
AUDIO_HIGH_SYMBOL='🔊'
AUDIO_HIGH_SYMBOL=''
AUDIO_MED_THRESH=50
AUDIO_MED_SYMBOL='🔉'
AUDIO_MED_SYMBOL=''
AUDIO_LOW_THRESH=0
AUDIO_LOW_SYMBOL='🔈'
AUDIO_LOW_SYMBOL=''
AUDIO_MUTED_SYMBOL='🔇'
AUDIO_MUTED_SYMBOL=''
DEFAULT_COLOR="#ffffff"
MUTED_COLOR="#a0a0a0"
LONG_FORMAT=3
SHORT_FORMAT=3
LONG_FORMAT=0
SHORT_FORMAT=2
USE_PERCENT=1
USE_ALSA_NAME=0
@ -59,9 +59,9 @@ done
function set_default_playback_device_next {
inc=${1:-1}
num_devices=$(pactl list sinks | grep -c index:)
sink_arr=($(pactl list sinks | grep index: | grep -o '[0-9]\+'))
default_sink_index=$(( $(patl list sinks | grep index: | grep -no '*' | grep -o '^[0-9]\+') - 1 ))
num_devices=$(pacmd list-sinks | grep -c index:)
sink_arr=($(pacmd list-sinks | grep index: | grep -o '[0-9]\+'))
default_sink_index=$(( $(pacmd list-sinks | grep index: | grep -no '*' | grep -o '^[0-9]\+') - 1 ))
default_sink_index=$(( ($default_sink_index + $num_devices + $inc) % $num_devices ))
default_sink=${sink_arr[$default_sink_index]}
pacmd set-default-sink $default_sink
@ -77,7 +77,7 @@ esac
for name in INDEX NAME VOL MUTED; do
read $name
done < <(pactl list sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*')
done < <(pacmd list-sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*')
INDEX=$(echo "$INDEX" | grep -o '[0-9]\+')
VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 )
VOL="${VOL%?}"
@ -89,7 +89,7 @@ NAME=$(echo "$NAME" | sed \
if [[ $USE_ALSA_NAME == 1 ]] ; then
ALSA_NAME=$(
pactl list sinks |\
pacmd list-sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "alsa.name\|alsa.mixer_name" |\
head -n1 |\

@ -1,18 +1,9 @@
mkdir -p ~/.config
if [[ ! -d ~/.config/nvim ]] ; then
ln -s ~/config/nvim ~/.config/nvim
mkdir -p ~/.config/
if [[ ! -d ~/.config/nvim/ ]] ; then
ln -s ~/config/nvim/ ~/.config/nvim
fi
if [[ ! -d ~/.config/i3 ]] ; then
ln -s ~/config/i3 ~/.config/i3
ln -s ~/config/i3/ ~/.config/i3
fi
if [[ ! -d ~/.config/kitty ]] ; then
ln -s ~/config/kitty ~/.config/kitty
fi
if [[ ! -f ~/.config/.zshrc.local ]] ; then
ln -s ~/config/zsh/.zshrc ~/.zshrc
ln -s ~/config/zsh/.zshrc.local ~/.zshrc.local
ln -s ~/config/zsh/.zshrc.pre ~/.zshrc.pre
fi

@ -1,21 +0,0 @@
include ./theme.conf
font_family Liberation Mono
bold_font auto
italic_font auto
bold_italic_font auto
font_size 14
cursor_shape beam
scrollback_lines 50000
map ctrl+shift+s paste_from_selection
map ctrl+shift+n paste_from_clipboard
map ctrl+0 change_font_size all +2.0
map ctrl+minus change_font_size all -2.0
map shift+page_up scroll_page_up
map shift+page_down scroll_page_down
update_check_interval 0

@ -1,21 +0,0 @@
background #fdf6e3
foreground #52676f
cursor #52676f
selection_background #e9e2cb
color0 #e4e4e4
color8 #ffffd7
color1 #d70000
color9 #d75f00
color2 #5f8700
color10 #585858
color3 #af8700
color11 #626262
color4 #0087ff
color12 #808080
color5 #af005f
color13 #5f5faf
color6 #00afaf
color14 #8a8a8a
color7 #262626
color15 #1c1c1c
selection_foreground #fcf4dc

@ -5,11 +5,11 @@ revert() {
}
trap revert HUP INT TERM
xset dpms 25 25 25
#xset dpms 15 0 0
scrot /tmp/screen.png
convert /tmp/screen.png -scale 5% -scale 2000% /tmp/screen.png
convert /tmp/screen.png -scale 3% -scale 3366% /tmp/screen.png
i3lock -n -f -p win -i /tmp/screen.png
revert
#revert

@ -1,8 +0,0 @@
let g:netrw_dirhistmax =10
let g:netrw_dirhistcnt =6
let g:netrw_dirhist_6='/home/dario/machines/434004/434004_V1_1_2020-06-22/Logical/BP/Program/Rommelag_pharma_platform/RPP_con'
let g:netrw_dirhist_5='/home/dario/source/Marlin/Marlin/src/pins/lpc1768'
let g:netrw_dirhist_4='/home/dario/source/ilabs/rpp_basis_modell/.git'
let g:netrw_dirhist_3='/home/dario/source/ilabs/appify/appify'
let g:netrw_dirhist_2='/home/dario/source/python-opcua/opcua/ua/uaerrors/_auto.py'
let g:netrw_dirhist_1='/home/dario/source/python-opcua/opcua/ua/uaerrors'

@ -1,50 +0,0 @@
Starting
====
* Install all deps `apt update ; apt install neovim python3-neovim fzy ripgrep exuberant-ctags`
* Start `vi` (or `nvim`)
* Perform initial setup of plugins and modules `nvim -n -c "PlugUpgrade | PlugInstall | q | PlugUpdate | q | q" && nvim -n -c "CocInstall -sync coc-css coc-docker coc-eslint coc-git coc-gitignore coc-html coc-json coc-yaml coc-pairs coc-python coc-sh coc-tsserver coc-prettier | CocUpdateSync | UpdateRemotePlugins | q"`
Useful Shortcuts
====
* File/Buffer management:
* C-p: fuzzy quick open (also buffer switch)
* gn / gp: switch next/prev buffer
* gd: close buffer
* Split management:
* C-w C-s / C-w C-v: split horizontal (s), vertical (v)
* C-w C-w: switch splits
* C-w C-q: quit (current) split
* Movement:
* hjkl: char left/right/up/down
* e / b: move (word) forward / backward
* E / B: move delimited setence-split (a bit more than word)
* { / }: move paragraphs (codeblocks) up / down
* gg / G: begin/end of buffer
* fx / Fx: find (next/prev few) <x>, highlights next few in hit-a-hint manner
* tx / Tx: move (before/after) next <x>
* d<movement>: delete up to <any of above>, mnmenoic: *d*elete *to* <char>
* %: matching bracket
* ^ / $: line begin/end
* v: char-select-mode (`:`-any-command while in select will apply command on selection)
* V: line-selectmode (`:`-any-command while in select will apply command on selection)
* C-v: visual select (horizontal+vertical), useful with I afterwards (insert-mode for multiple lines, edit first line, apply to all selected afte ESC)
* Coding stuff
* tb: tagbar
* rn: rename symbol under cursor
* td: *t*o *d*efinition
* ty: *t*o t*y*pe-definition
* ti: *t*o *i*mplementation
* tr: *t*o *r*eferences (actually find/list usages)
* ,f: `rg`/grep for symbol under cursor
* K: documentation of symbol under cursor
* \*: find/highlight symbold under cursor
* =: auto-indent (useful with V line-select)
* `:<…>s///`: regex search/replace. `%s///` for global, or V then : then just type your `s///`
* Misc
* ,p: toggle paste-mode
* ESC ESC: deselect search results, \*-highligh or similar
nvim -n -c "PlugUpgrade | PlugInstall | q | PlugUpdate | q | q" && nvim -n -c "CocInstall -sync coc-css coc-vetur coc-docker coc-eslint coc-git coc-gitignore coc-html coc-json coc-yaml coc-pairs coc-python coc-sh coc-tsserver coc-prettier coc-docker | CocUpdateSync | UpdateRemotePlugins | q"

@ -99,13 +99,7 @@ let s:mac_gui = has('gui_macvim') && has('gui_running')
let s:is_win = has('win32')
let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
if s:is_win && &shellslash
set noshellslash
let s:me = resolve(expand('<sfile>:p'))
set shellslash
else
let s:me = resolve(expand('<sfile>:p'))
endif
let s:me = resolve(expand('<sfile>:p'))
let s:base_spec = { 'branch': 'master', 'frozen': 0 }
let s:TYPE = {
\ 'string': type(''),
@ -116,42 +110,10 @@ let s:TYPE = {
let s:loaded = get(s:, 'loaded', {})
let s:triggers = get(s:, 'triggers', {})
if s:is_win
function! s:plug_call(fn, ...)
let shellslash = &shellslash
try
set noshellslash
return call(a:fn, a:000)
finally
let &shellslash = shellslash
endtry
endfunction
else
function! s:plug_call(fn, ...)
return call(a:fn, a:000)
endfunction
endif
function! s:plug_getcwd()
return s:plug_call('getcwd')
endfunction
function! s:plug_fnamemodify(fname, mods)
return s:plug_call('fnamemodify', a:fname, a:mods)
endfunction
function! s:plug_expand(fmt)
return s:plug_call('expand', a:fmt, 1)
endfunction
function! s:plug_tempname()
return s:plug_call('tempname')
endfunction
function! plug#begin(...)
if a:0 > 0
let s:plug_home_org = a:1
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
let home = s:path(fnamemodify(expand(a:1), ':p'))
elseif exists('g:plug_home')
let home = s:path(g:plug_home)
elseif !empty(&rtp)
@ -159,7 +121,7 @@ function! plug#begin(...)
else
return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
endif
if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp
return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
endif
@ -177,16 +139,6 @@ function! s:define_commands()
if !executable('git')
return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
endif
if has('win32')
\ && &shellslash
\ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
endif
if !has('nvim')
\ && (has('win32') || has('win32unix'))
\ && !has('multi_byte')
return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
endif
command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0)
@ -251,7 +203,7 @@ endfunction
function! plug#end()
if !exists('g:plugs')
return s:err('plug#end() called without calling plug#begin() first')
return s:err('Call plug#begin() first')
endif
if exists('#PlugLOD')
@ -382,11 +334,11 @@ function! s:progress_opt(base)
\ s:git_version_requirement(1, 7, 1) ? '--progress' : ''
endfunction
function! s:rtp(spec)
if s:is_win
function! s:rtp(spec)
return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
endfunction
endfunction
if s:is_win
function! s:path(path)
return s:trim(substitute(a:path, '/', '\', 'g'))
endfunction
@ -398,33 +350,11 @@ if s:is_win
function! s:is_local_plug(repo)
return a:repo =~? '^[a-z]:\|^[%~]'
endfunction
" Copied from fzf
function! s:wrap_cmds(cmds)
let cmds = [
\ '@echo off',
\ 'setlocal enabledelayedexpansion']
\ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
\ + ['endlocal']
if has('iconv')
if !exists('s:codepage')
let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
endif
return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
endif
return map(cmds, 'v:val."\r"')
else
function! s:rtp(spec)
return s:dirpath(a:spec.dir . get(a:spec, 'rtp', ''))
endfunction
function! s:batchfile(cmd)
let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile)
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
if &shell =~# 'powershell\.exe'
let cmd = '& ' . cmd
endif
return [batchfile, cmd]
endfunction
else
function! s:path(path)
return s:trim(a:path)
endfunction
@ -504,8 +434,8 @@ endfunction
function! s:dobufread(names)
for name in a:names
let path = s:rtp(g:plugs[name])
for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin']
let path = s:rtp(g:plugs[name]).'/**'
for dir in ['ftdetect', 'ftplugin']
if len(finddir(dir, path))
if exists('#BufRead')
doautocmd BufRead
@ -624,7 +554,7 @@ function! plug#(repo, ...)
try
let repo = s:trim(a:repo)
let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??'))
let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??'))
let spec = extend(s:infer_properties(name, repo), opts)
if !has_key(g:plugs, name)
call add(g:plugs_order, name)
@ -644,7 +574,7 @@ function! s:parse_options(arg)
elseif type == s:TYPE.dict
call extend(opts, a:arg)
if has_key(opts, 'dir')
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
let opts.dir = s:dirpath(expand(opts.dir))
endif
else
throw 'Invalid argument type (expected: string or dictionary)'
@ -655,7 +585,7 @@ endfunction
function! s:infer_properties(name, repo)
let repo = a:repo
if s:is_local_plug(repo)
return { 'dir': s:dirpath(s:plug_expand(repo)) }
return { 'dir': s:dirpath(expand(repo)) }
else
if repo =~ ':'
let uri = repo
@ -808,7 +738,7 @@ function! s:finish_bindings()
endfunction
function! s:prepare(...)
if empty(s:plug_getcwd())
if empty(getcwd())
throw 'Invalid current working directory. Cannot proceed.'
endif
@ -864,28 +794,31 @@ endfunction
function! s:chsh(swap)
let prev = [&shell, &shellcmdflag, &shellredir]
if !s:is_win && a:swap
if s:is_win
set shell=cmd.exe shellcmdflag=/c shellredir=>%s\ 2>&1
elseif a:swap
set shell=sh shellredir=>%s\ 2>&1
endif
return prev
endfunction
function! s:bang(cmd, ...)
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(a:0)
" FIXME: Escaping is incomplete. We could use shellescape with eval,
" but it won't work on Windows.
let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
if s:is_win
let [batchfile, cmd] = s:batchfile(cmd)
let batchfile = tempname().'.bat'
call writefile(["@echo off\r", cmd . "\r"], batchfile)
let cmd = batchfile
endif
let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%')
execute "normal! :execute g:_plug_bang\<cr>\<cr>"
finally
unlet g:_plug_bang
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
if s:is_win && filereadable(batchfile)
if s:is_win
call delete(batchfile)
endif
endtry
@ -964,7 +897,7 @@ function! s:checkout(spec)
let output = s:system('git rev-parse HEAD', a:spec.dir)
if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
let output = s:system(
\ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
\ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir)
endif
return output
endfunction
@ -1082,7 +1015,7 @@ function! s:update_impl(pull, force, args) abort
let s:clone_opt = get(g:, 'plug_shallow', 1) ?
\ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : ''
if has('win32unix') || has('wsl')
if has('win32unix')
let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input'
endif
@ -1161,7 +1094,7 @@ function! s:update_finish()
elseif has_key(spec, 'tag')
let tag = spec.tag
if tag =~ '\*'
let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir))
let tags = s:lines(s:system('git tag --list '.s:shellesc(tag).' --sort -version:refname 2>&1', spec.dir))
if !v:shell_error && !empty(tags)
let tag = tags[0]
call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
@ -1169,12 +1102,12 @@ function! s:update_finish()
endif
endif
call s:log4(name, 'Checking out '.tag)
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir)
else
let branch = get(spec, 'branch', 'master')
call s:log4(name, 'Merging origin/'.s:esc(branch))
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
let branch = s:esc(get(spec, 'branch', 'master'))
call s:log4(name, 'Merging origin/'.branch)
let out = s:system('git checkout -q '.branch.' -- 2>&1'
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only origin/'.branch.' 2>&1')), spec.dir)
endif
if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
\ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
@ -1218,7 +1151,7 @@ function! s:job_abort()
silent! call job_stop(j.jobid)
endif
if j.new
call s:rm_rf(g:plugs[name].dir)
call s:system('rm -rf ' . s:shellesc(g:plugs[name].dir))
endif
endfor
let s:jobs = {}
@ -1271,17 +1204,22 @@ endfunction
function! s:spawn(name, cmd, opts)
let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
\ 'batchfile': (s:is_win && (s:nvim || s:vim8)) ? tempname().'.bat' : '',
\ 'new': get(a:opts, 'new', 0) }
let s:jobs[a:name] = job
let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd
let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir) : a:cmd
if !empty(job.batchfile)
call writefile(["@echo off\r", cmd . "\r"], job.batchfile)
let cmd = job.batchfile
endif
let argv = add(s:is_win ? ['cmd', '/c'] : ['sh', '-c'], cmd)
if s:nvim
call extend(job, {
\ 'on_stdout': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'),
\ })
let jid = s:plug_call('jobstart', argv, job)
let jid = jobstart(argv, job)
if jid > 0
let job.jobid = jid
else
@ -1324,6 +1262,9 @@ function! s:reap(name)
call s:log(bullet, a:name, empty(result) ? 'OK' : result)
call s:bar()
if has_key(job, 'batchfile') && !empty(job.batchfile)
call delete(job.batchfile)
endif
call remove(s:jobs, a:name)
endfunction
@ -1338,10 +1279,9 @@ function! s:bar()
endfunction
function! s:logpos(name)
let max = line('$')
for i in range(4, max > 4 ? max : 4)
for i in range(4, line('$'))
if getline(i) =~# '^[-+x*] '.a:name.':'
for j in range(i + 1, max > 5 ? max : 5)
for j in range(i + 1, line('$'))
if getline(j) !~ '^ '
return [i, j - 1]
endif
@ -1414,8 +1354,8 @@ while 1 " Without TCO, Vim stack is bound to explode
\ printf('git clone %s %s %s %s 2>&1',
\ has_tag ? '' : s:clone_opt,
\ prog,
\ plug#shellescape(spec.uri, {'script': 0}),
\ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 })
\ s:shellesc(spec.uri),
\ s:shellesc(s:trim(spec.dir))), { 'new': 1 })
endif
if !s:jobs[name].running
@ -2042,29 +1982,19 @@ function! s:update_ruby()
EOF
endfunction
function! s:shellesc_cmd(arg, script)
let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g')
return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g')
endfunction
function! s:shellesc_ps1(arg)
return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
endfunction
function! s:shellesc_sh(arg)
return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
function! s:shellesc_cmd(arg)
let escaped = substitute(a:arg, '[&|<>()@^]', '^&', 'g')
let escaped = substitute(escaped, '%', '%%', 'g')
let escaped = substitute(escaped, '"', '\\^&', 'g')
let escaped = substitute(escaped, '\(\\\+\)\(\\^\)', '\1\1\2', 'g')
return '^"'.substitute(escaped, '\(\\\+\)$', '\1\1', '').'^"'
endfunction
function! plug#shellescape(arg, ...)
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1)
if shell =~# 'cmd\.exe'
return s:shellesc_cmd(a:arg, script)
elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
return s:shellesc_ps1(a:arg)
function! s:shellesc(arg)
if &shell =~# 'cmd.exe$'
return s:shellesc_cmd(a:arg)
endif
return s:shellesc_sh(a:arg)
return shellescape(a:arg)
endfunction
function! s:glob_dir(path)
@ -2096,23 +2026,23 @@ function! s:format_message(bullet, name, message)
endif
endfunction
function! s:with_cd(cmd, dir, ...)
let script = a:0 > 0 ? a:1 : 1
return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd)
function! s:with_cd(cmd, dir)
return printf('cd%s %s && %s', s:is_win ? ' /d' : '', s:shellesc(a:dir), a:cmd)
endfunction
function! s:system(cmd, ...)
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
if s:is_win
let [batchfile, cmd] = s:batchfile(cmd)
let batchfile = tempname().'.bat'
call writefile(["@echo off\r", cmd . "\r"], batchfile)
let cmd = batchfile
endif
return system(cmd)
return system(s:is_win ? '('.cmd.')' : cmd)
finally
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
if s:is_win && filereadable(batchfile)
if s:is_win
call delete(batchfile)
endif
endtry
@ -2185,7 +2115,7 @@ endfunction
function! s:rm_rf(dir)
if isdirectory(a:dir)
call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir))
call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . s:shellesc(a:dir))
endif
endfunction
@ -2217,7 +2147,7 @@ function! s:clean(force)
let allowed = {}
for dir in dirs
let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1
let allowed[dir] = 1
for child in s:glob_dir(dir)
let allowed[child] = 1
@ -2290,11 +2220,11 @@ endfunction
function! s:upgrade()
echo 'Downloading the latest version of vim-plug'
redraw
let tmp = s:plug_tempname()
let tmp = tempname()
let new = tmp . '/plug.vim'
try
let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp)))
let out = s:system(printf('git clone --depth 1 %s %s', s:plug_src, tmp))
if v:shell_error
return s:err('Error upgrading vim-plug: '. out)
endif
@ -2435,17 +2365,18 @@ function! s:preview_commit()
wincmd P
endif
setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
let cmd = 'cd '.s:shellesc(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
if s:is_win
let [batchfile, cmd] = s:batchfile(cmd)
let batchfile = tempname().'.bat'
call writefile(["@echo off\r", cmd . "\r"], batchfile)
let cmd = batchfile
endif
execute 'silent %!' cmd
finally
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
if s:is_win && filereadable(batchfile)
if s:is_win
call delete(batchfile)
endif
endtry
@ -2489,11 +2420,9 @@ function! s:diff()
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
let cmd = 'git log --graph --color=never '
\ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '')
\ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
let cmd = 'git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 's:shellesc(v:val)'))
if has_key(v, 'rtp')
let cmd .= ' -- '.plug#shellescape(v.rtp)
let cmd .= ' -- '.s:shellesc(v.rtp)
endif
let diff = s:system_chomp(cmd, v.dir)
if !empty(diff)
@ -2541,7 +2470,7 @@ function! s:revert()
return
endif
call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir)
call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir)
setlocal modifiable
normal! "_dap
setlocal nomodifiable
@ -2569,7 +2498,7 @@ function! s:snapshot(force, ...) abort
endfor
if a:0 > 0
let fn = s:plug_expand(a:1)
let fn = expand(a:1)
if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
return
endif

@ -1,16 +0,0 @@
{
//"diagnostic.messageTarget": "echo",
//"signature.target": "echo",
//"suggest.maxCompleteItemCount": 20,
//"coc.preferences.hoverTarget": "echo",
//"python.jediEnabled": false,
//"python.analysis.memory.keepLibraryAst": true,
//"python.analysis.memory.keepLibraryLocalVariables": true,
//"coc.preferences.formatOnSaveFiletypes": ["python"],
"python.formatting.provider": "black",
"python.linting.pylintEnabled": true,
"python.analysis.diagnosticMode": "workspace",
"python.linting.mypyEnabled": true,
"python.analysis.typeCheckingMode": "off"
//"suggest.timeout": 15000
}

@ -0,0 +1,8 @@
" Make nerdtree look nice
let NERDTreeMinimalUI = 1
let NERDTreeDirArrows = 1
let g:NERDTreeWinSize = 30
"tabs
" Focus in the main content window
let g:nerdtree_tabs_focus_on_files = 1

@ -0,0 +1,14 @@
" use ag
if executable('ag')
let g:ackprg = 'ag --vimgrep'
endif
" auto-close results window
let g:ack_autoclose = 1
" use background search
"let g:ack_use_dispatch = 1
" C-* to search word under cursor
noremap <C-s>* :Ack <cword><cr>

@ -1,9 +1,9 @@
set laststatus=2
" disable tabline if single buffer
let g:airline#extensions#tabline#enabled = 1
" tagbar integration
let g:airline#extensions#tagbar#enabled = 1
" show full tag
let g:airline#extensions#tagbar#flags = 'f'
" let g:airline_powerline_fonts = 1
" let g:airline_left_sep = "\ue0b0"
" let g:airline_left_alt_sep = "\ue0b1"
" let g:airline_right_sep = "\ue0b6"
" let g:airline#extensions#virtualenv#enabled = 1
" let g:airline_section_z = airline#section#create(["\uE0A1" . '%{line(".")}' . "\uE0A3" . '%{col(".")}'])

@ -1,84 +0,0 @@
" if hidden is not set, TextEdit might fail.
set hidden
" Some servers have issues with backup files, see #649
set nobackup
set nowritebackup
" Better display for messages
set cmdheight=2
" You will have bad experience for diagnostic messages when it's default 4000.
set updatetime=300
" don't give |ins-completion-menu| messages.
set shortmess+=c
" always show signcolumns
set signcolumn=yes
" python .env-contains-pythonpath support
autocmd FileType python let b:coc_root_patterns = ['.cocroot', '.git', '.env']
" useful key shortcuts
nmap <silent> rn <Plug>(coc-rename)
nmap <silent> td <Plug>(coc-definition)
nmap <silent> ty <Plug>(coc-type-definition)
nmap <silent> ti <Plug>(coc-implementation)
nmap <silent> tr <Plug>(coc-references)
nmap <silent> te <Plug>(coc-diagnostic-next-error)
nmap <silent> tn <Plug>(coc-diagnostic-next)
xmap ,r <Plug>(coc-format)
nmap ,r <Plug>(coc-format)
" Add `:Format` command to format current buffer.
command! -nargs=0 Format :call CocAction('format')
nmap f <Plug>(coc-smartf-forward)
nmap F <Plug>(coc-smartf-backward)
nmap ; <Plug>(coc-smartf-repeat)
nmap , <Plug>(coc-smartf-repeat-opposite)
augroup Smartf
autocmd User SmartfEnter :hi Conceal ctermfg=220 guifg=#6638F0
autocmd User SmartfLeave :hi Conceal ctermfg=239 guifg=#504945
augroup end
" Use tab for trigger completion with characters ahead and navigate.
" Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin.
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-space> to trigger completion.
inoremap <silent><expr> <c-space> coc#refresh()
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position.
" Coc only does snippet and additional edit on confirm.
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
" Or use `complete_info` if your vim support it, like:
" inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
" Use K to show documentation in preview window
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
" Highlight symbol under cursor on CursorHold
autocmd CursorHold * silent call CocActionAsync('highlight')

@ -0,0 +1,25 @@
set cst
set csre
"list of reference
nmap <unique> <C-s>s :cs find s <C-R>=expand("<cword>")<CR><CR>
"definition
nmap <unique> <C-s>g :cs find g <C-R>=expand("<cword>")<CR><CR>
"call
nmap <unique> <C-s>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <unique> <C-s>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <unique> <C-s>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <unique> <C-s>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <unique> <C-s>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <unique> <C-s>d :cs find d <C-R>=expand("<cword>")<CR><CR>
function! LoadCscope()
let db = findfile("cscope.out", ".;")
if (!empty(db))
let path = strpart(db, 0, match(db, "/cscope.out$"))
set nocscopeverbose " suppress 'duplicate connection' error
exe "cs add " . db . " " . path
set cscopeverbose
endif
endfunction
au BufEnter /* call LoadCscope()

@ -1,2 +1,6 @@
nnoremap <C-p> :FuzzyOpen<CR>
" if theres a .git, use ls-commands (honoring gitignore)
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard']
" all dem files
let g:ctrlp_max_files = 1000000
nmap <unique> <C-e> :CtrlPBuffer<CR>

@ -1 +0,0 @@
nnoremap ,f :CtrlSF<CR>

@ -0,0 +1,10 @@
set wildmenu "enable ctrl-n and ctrl-p to scroll thru matches
set completeopt-=preview
" deoplete options
let g:deoplete#enable_at_startup = 1
inoremap <silent><expr> <Tab>
\ pumvisible() ? "\<C-n>" : "<Tab>"
" deoplete-clang opions
let g:deoplete#sources#clang#libclang_path = "/usr/lib/llvm-3.8/lib/libclang.so"
let g:deoplete#sources#clang#clang_header = "/usr/lib/llvm-3.8/include/clang"

@ -47,6 +47,3 @@ set mouse=
" always use x clipboard
set clipboard+=unnamedplus
" Use , as leader key
let mapleader=","

@ -0,0 +1 @@
autocmd! BufWritePost * Neomake

@ -1 +0,0 @@
let g:pydocstring_formatter = 'google'

@ -1,2 +1,2 @@
nmap <silent> tb :TagbarOpenAutoClose<CR>
nmap <F8> :TagbarToggle<CR>

@ -1,47 +1,45 @@
call g:plug#begin('~/.nvim-plugins')
Plug 'bling/vim-airline'
Plug 'nanotech/jellybeans.vim'
Plug 'tomasr/molokai'
Plug 'morhetz/gruvbox'
Plug 'rakr/vim-one'
Plug 'tpope/vim-fugitive'
"Plug 'sheerun/vim-polyglot'
" auto-detect indentation
Plug 'tpope/vim-sleuth'
" Fuzzy open
Plug 'cloudhead/neovim-fuzzy'
" Rg project grep
" Plug 'jremmen/vim-ripgrep'
Plug 'dyng/ctrlsf.vim'
" Completion and stuff
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" graphql syntax highlighting
Plug 'jparise/vim-graphql'
Plug 'sheerun/vim-polyglot'
Plug 'benekastah/neomake'
" Autocompletion
Plug 'Shougo/deoplete.nvim'
Plug 'Shougo/neoinclude.vim'
Plug 'zchee/deoplete-clang'
Plug 'racer-rust/vim-racer'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'scrooloose/nerdtree'
Plug 'ctrlpvim/ctrlp.vim'
"Plug 'cloudhead/neovim-fuzzy'
" Plug 'rking/ag.vim'
Plug 'mileszs/ack.vim'
Plug 'AndrewRadev/splitjoin.vim'
Plug 'zchee/deoplete-go'
Plug 'tpope/vim-commentary'
Plug 'easymotion/vim-easymotion'
Plug 'terryma/vim-multiple-cursors'
Plug 'Raimondi/delimitMate'
" vuejs files
Plug 'posva/vim-vue'
" session mgmt
Plug 'tpope/vim-obsession'
" Python formatter
Plug 'psf/black'
" display marks
Plug 'kshenoy/vim-signature'
" tag finder
" tag sidebar
Plug 'majutsushi/tagbar'
" auto-matching for parentheses
Plug 'Raimondi/delimitMate'
" process .editorconfig files
Plug 'editorconfig/editorconfig-vim'
" jenkinsfile syntax
Plug 'martinda/Jenkinsfile-vim-syntax'
" To autogenerate docstrings
Plug 'heavenshell/vim-pydocstring', { 'do': 'make install' }
" ~magic~?
Plug 'tpope/vim-abolish'
call g:plug#end()

@ -12,7 +12,13 @@ convert /tmp/screen.png -scale 5% -scale 2000% /tmp/screen.png
i3lock -f -p win -i /tmp/screen.png
PID=$!
systemctl suspend
sudo ifdown enp0s25
echo -ne 1 | sudo tee /sys/bus/pci/devices/0000\:00\:19.0/remove
#systemctl suspend
echo mem | sudo tee /sys/power/state
echo -ne 1 | sudo tee /sys/bus/pci/rescan
sleep 1
sudo ifup enp0s25
wait $PID

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,49 +0,0 @@
# fuzzy finder
source /usr/share/doc/fzf/examples/key-bindings.zsh
source /usr/share/doc/fzf/examples/completion.zsh
bindkey '^H' fzf-cd-widget
time source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
alias preview="fzf --preview 'bat --color \"always\" {}'"
alias rg="rg -S -p"
alias ldict="dict.cc.py en de"
alias bat='batcat'
alias unp='dtrx'
alias clearr="printf '\033[2J\033[3J\033[1;1H'"
ppvagrant() {
pushd -q ~/source/ilabs/platform-prov/vagrant
export VAGRANT_INET=1
export VAGRANT_SYNC_HOST='/home/dario/source/ilabs/'
export VAGRANT_SYNC_GUEST='/src'
export VAGRANT_SYNC_EXCLUDE='.git|venv|node_modules|.app.tar'
export VB_NO_UI=1
command vagrant $*
popd -q
}
rga-fzf() {
RG_PREFIX="rga --files-with-matches"
local file
file="$(
FZF_DEFAULT_COMMAND="$RG_PREFIX '$1'" \
fzf --sort --preview="[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \
--phony -q "$1" \
--bind "change:reload:$RG_PREFIX {q}" \
--preview-window="70%:wrap"
)" &&
echo "opening $file" &&
xdg-open "$file"
}
export PYENV_ROOT="$HOME/source/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export PATH=/usr/lib/cargo/bin/:$PATH:/home/dario/.local/bin/
export BAT_THEME="ansi-dark"

@ -1,15 +0,0 @@
HISTSIZE=10000000
SAVEHIST=10000000
setopt BANG_HIST # Treat the '!' character specially during expansion.
setopt EXTENDED_HISTORY # Write the history file in the ":start:elapsed;command" format.
setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
setopt HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history.
setopt HIST_IGNORE_DUPS # Don't record an entry that was just recorded again.
setopt HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate.
setopt HIST_FIND_NO_DUPS # Do not display a line previously found.
setopt HIST_SAVE_NO_DUPS # Don't write duplicate entries in the history file.
setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry.
setopt HIST_VERIFY # Don't execute immediately upon history expansion.
GRML_NO_APT_ALIASES=1
Loading…
Cancel
Save