Compare commits

...

15 Commits

Author SHA1 Message Date
Dario Ernst e106b940ce Batch commit
3 years ago
Dario Ernst bde536aada Unify from laptop config
3 years ago
Dario Ernst 96ee7bcc1d Lots of changes
3 years ago
Dario Ernst b8a0141bc1 Zsh install
3 years ago
Dario Ernst 63339290b6 zsh
3 years ago
Dario Ernst eb3ab02590 Various changes
3 years ago
Dario Ernst 7ab61312d5 Add zsh config
3 years ago
Dario Ernst 45ed82a058 Various changes
3 years ago
Dario Ernst 627c2eb18e update vimplug
6 years ago
Dario Ernst ab91196273 Add yajirou if to i3block
6 years ago
Dario Ernst d3666b8d51 Automate nvim first install of plugins
6 years ago
Dario Ernst ae6bf3dd47 Install indentation autodetecter
6 years ago
Dario Ernst 900c4f2193 Add brief keyboard shortcut note
6 years ago
Dario Ernst 928bd78ed9 Add coc-smartf
6 years ago
Dario Ernst 7a995a28f7 add nuc-private config for symlinking
6 years ago

1
.gitignore vendored

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

File diff suppressed because it is too large Load Diff

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

@ -0,0 +1,867 @@
#!/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()
}'

@ -12,23 +12,29 @@
set $mod Mod4
# Workspace assignment for monitors
workspace "z:s" output eDP-1
workspace "u:s" output eDP-1
workspace "i:s" output eDP-1
workspace "o:s" output eDP-1
workspace "z:s" output eDP
workspace "u:s" output eDP
workspace "i:s" output eDP
workspace "o:s" output eDP
#--
workspace "1:l" output DP-2-1
workspace "2:l" output DP-2-1
workspace "3:l" output DP-2-1
workspace "4:l" output DP-2-1
workspace "5:l" output DP-2-1
workspace "6:l" output DP-2-1
#--
workspace "7:r" output DP-2-2
workspace "8:r" output DP-2-2
workspace "9:r" output DP-2-2
workspace "0:r" output DP-2-2
workspace "ß:r" output DP-2-2
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
@ -50,10 +56,10 @@ font pango:monospace 8
floating_modifier $mod
# start a terminal
bindsym $mod+Return exec xfce4-terminal
bindsym $mod+Return exec kitty --single-instance
# start chromium
bindsym $mod+BackSpace exec firefox
bindsym $mod+BackSpace exec /home/dario/firefox/firefox
# screenshot
bindsym $mod+Delete exec scrot -s
@ -167,8 +173,11 @@ 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+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

@ -0,0 +1,217 @@
# 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
}

@ -0,0 +1,213 @@
# 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.
# 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 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 $(pacmd list-sinks | grep index | cut -d: -f2) ; do pactl set-sink-volume $i +5% ; done'"
bindsym Print exec "sh -c 'for i in $(pacmd list-sinks | grep index | cut -d: -f2) ; do pactl set-sink-volume $i -5% ; done'"
bindsym Pause exec "sh -c 'for i in $(pacmd list-sinks | grep index | cut -d: -f2) ; do pactl set-sink-mute $i toggle ; done'"
bindsym XF86AudioRaiseVolume exec "sh -c 'for i in $(pacmd list-sinks | grep index | cut -d: -f2) ; do pactl set-sink-volume $i +5% ; done'"
bindsym XF86AudioLowerVolume exec "sh -c 'for i in $(pacmd list-sinks | grep index | cut -d: -f2) ; do pactl set-sink-volume $i -5% ; done'"
bindsym XF86AudioMute exec "sh -c 'for i in $(pacmd list-sinks | grep index | 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,8 +28,7 @@ command=/usr/share/i3blocks/$BLOCK_NAME
separator_block_width=15
markup=none
[volume-pulseaudio]
label=🎚️
[volume-pipewire]
command=~/.config/i3/scripts/volume-pulseaudio
interval=1
signal=1
@ -54,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=HOME
label=Disk
#instance=/mnt/data
interval=30
@ -72,6 +71,17 @@ separator=false
instance=enp0s31f6
interval=5
[iface]
instance=enx00e04c6803b1
color=#00FF00
interval=10
separator=false
[bandwidth]
instance=enx00e04c6803b1
interval=5
[iface]
instance=wlp58s0
color=#00FF00

Binary file not shown.

@ -0,0 +1,172 @@
#!/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

@ -59,9 +59,9 @@ done
function set_default_playback_device_next {
inc=${1:-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 ))
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 ))
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 < <(pacmd list-sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*')
done < <(pactl 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=$(
pacmd list-sinks |\
pactl list sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "alsa.name\|alsa.mixer_name" |\
head -n1 |\

@ -1,9 +1,18 @@
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

@ -0,0 +1,21 @@
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

@ -0,0 +1,21 @@
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

@ -1,4 +1,8 @@
let g:netrw_dirhistmax =10
let g:netrw_dirhist_cnt =2
let g:netrw_dirhist_1='/home/dario/source/pydadi/ui/src'
let g:netrw_dirhist_2='/home/dario/source/pydadi/ui'
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'

@ -0,0 +1,50 @@
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,7 +99,13 @@ 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:base_spec = { 'branch': 'master', 'frozen': 0 }
let s:TYPE = {
\ 'string': type(''),
@ -110,10 +116,42 @@ 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(fnamemodify(expand(a:1), ':p'))
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
elseif exists('g:plug_home')
let home = s:path(g:plug_home)
elseif !empty(&rtp)
@ -121,7 +159,7 @@ function! plug#begin(...)
else
return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
endif
if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp
if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
endif
@ -139,6 +177,16 @@ 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)
@ -203,7 +251,7 @@ endfunction
function! plug#end()
if !exists('g:plugs')
return s:err('Call plug#begin() first')
return s:err('plug#end() called without calling plug#begin() first')
endif
if exists('#PlugLOD')
@ -353,21 +401,22 @@ if s:is_win
" Copied from fzf
function! s:wrap_cmds(cmds)
let use_chcp = executable('sed')
return map([
let cmds = [
\ '@echo off',
\ 'setlocal enabledelayedexpansion']
\ + (use_chcp ? [
\ 'for /f "usebackq" %%a in (`chcp ^| sed "s/[^0-9]//gp"`) do set origchcp=%%a',
\ 'chcp 65001 > nul'] : [])
\ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
\ + (use_chcp ? ['chcp !origchcp! > nul'] : [])
\ + ['endlocal'],
\ 'v:val."\r"')
\ + ['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"')
endfunction
function! s:batchfile(cmd)
let batchfile = tempname().'.bat'
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'
@ -575,7 +624,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', fnamemodify(repo, ':t:s?\.git$??'))
let name = get(opts, 'as', s:plug_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)
@ -595,7 +644,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(expand(opts.dir))
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
endif
else
throw 'Invalid argument type (expected: string or dictionary)'
@ -606,7 +655,7 @@ endfunction
function! s:infer_properties(name, repo)
let repo = a:repo
if s:is_local_plug(repo)
return { 'dir': s:dirpath(expand(repo)) }
return { 'dir': s:dirpath(s:plug_expand(repo)) }
else
if repo =~ ':'
let uri = repo
@ -759,7 +808,7 @@ function! s:finish_bindings()
endfunction
function! s:prepare(...)
if empty(getcwd())
if empty(s:plug_getcwd())
throw 'Invalid current working directory. Cannot proceed.'
endif
@ -1232,7 +1281,7 @@ function! s:spawn(name, cmd, opts)
\ 'on_stdout': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'),
\ })
let jid = jobstart(argv, job)
let jid = s:plug_call('jobstart', argv, job)
if jid > 0
let job.jobid = jid
else
@ -1289,9 +1338,10 @@ function! s:bar()
endfunction
function! s:logpos(name)
for i in range(4, line('$'))
let max = line('$')
for i in range(4, max > 4 ? max : 4)
if getline(i) =~# '^[-+x*] '.a:name.':'
for j in range(i + 1, line('$'))
for j in range(i + 1, max > 5 ? max : 5)
if getline(j) !~ '^ '
return [i, j - 1]
endif
@ -2001,6 +2051,10 @@ function! s:shellesc_ps1(arg)
return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
endfunction
function! s:shellesc_sh(arg)
return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
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')
@ -2010,7 +2064,7 @@ function! plug#shellescape(arg, ...)
elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
return s:shellesc_ps1(a:arg)
endif
return shellescape(a:arg)
return s:shellesc_sh(a:arg)
endfunction
function! s:glob_dir(path)
@ -2163,7 +2217,7 @@ function! s:clean(force)
let allowed = {}
for dir in dirs
let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1
let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
let allowed[dir] = 1
for child in s:glob_dir(dir)
let allowed[child] = 1
@ -2236,7 +2290,7 @@ endfunction
function! s:upgrade()
echo 'Downloading the latest version of vim-plug'
redraw
let tmp = tempname()
let tmp = s:plug_tempname()
let new = tmp . '/plug.vim'
try
@ -2435,7 +2489,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 '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
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)'))
if has_key(v, 'rtp')
let cmd .= ' -- '.plug#shellescape(v.rtp)
endif
@ -2513,7 +2569,7 @@ function! s:snapshot(force, ...) abort
endfor
if a:0 > 0
let fn = expand(a:1)
let fn = s:plug_expand(a:1)
if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
return
endif

File diff suppressed because it is too large Load Diff

@ -1,8 +1,16 @@
{
"diagnostic.messageTarget": "echo",
"signature.target": "echo",
"suggest.maxCompleteItemCount": 20,
"coc.preferences.hoverTarget": "echo",
"python.jediEnabled": false,
"suggest.timeout": 15000
//"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
}

@ -17,12 +17,33 @@ 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.
@ -32,6 +53,8 @@ inoremap <silent><expr> <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'

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

@ -6,6 +6,9 @@ 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'
@ -31,6 +34,15 @@ 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' }
call g:plug#end()
for fpath in split(globpath('~/.config/nvim/conf.d', '*.vim'), '\n')

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,49 @@
# 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"

@ -0,0 +1,15 @@
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