diff options
38 files changed, 1175 insertions, 0 deletions
@@ -22,6 +22,7 @@   git            > global git config   i3             > i3 window manager config   i3pystatus     > i3 bar window manager replacement config + scripts        > misc scripts   systemd        > user services for differents application  ```  # Managing diff --git a/config.yaml b/config.yaml index 577e981..8e3a3ff 100644 --- a/config.yaml +++ b/config.yaml @@ -24,6 +24,9 @@ dotfiles:    d_i3:      src: config/i3      dst: ~/.config/i3 +  d_scripts: +    src: scripts +    dst: ~/.scripts  profiles:    unicorn:      dotfiles: @@ -34,6 +37,7 @@ profiles:      - d_cheat      - f_gitconfig      - d_i3 +    - d_scripts    fenec:      dotfiles:      - d_i3pystatus diff --git a/dotfiles/scripts/2gif.sh b/dotfiles/scripts/2gif.sh new file mode 100755 index 0000000..ec325dc --- /dev/null +++ b/dotfiles/scripts/2gif.sh @@ -0,0 +1,109 @@ +#!/bin/sh + +# source: https://github.com/Drakirus/dotfiles/blob/master/bin/2gif + +$(ffmpeg --help 2> /dev/null > /dev/null) + +if [[ $? -ne 0 ]]; then +  echo "ffmpeg is required!" +  exit 1 +fi + +# default values +FPS=12 + +# read the options +TEMP=`getopt -o c:r:f:t:s:d:hl:: --long resolution:,fps:,start:,to:,duration:,help,loop:: -n $0 -- "$@"` +eval set -- "$TEMP" + +# extract options and their arguments into variables. +while true ; do +  case "$1" in +    -h|--help) +      echo -e "Usage: $0 [options] <input video file> <output gif name>\n" +      echo "Options:" +      echo "  -h, --help            Show this help" +      echo "  -r, --resolution      Set the pixels wide (preserving the aspect ratio)" +      echo "  -f, --fps             Set the gif frame rate" +      echo "                          default 12" +      echo "  -s, --start           Skip the first x seconds" +      echo "  -t, --to              Capture to x seconds" +      echo "  -d, --duration        Set the duration" +      echo "  -l, --loop            Number of times to loop the output" +      echo "                          default: no loop" +      echo "                          -l      output loop infinitely" +      echo "                          -l10    output loop 10 times" +      echo "Examples:" +      echo "  $0 input.mp4 out.gif" +      echo "  $0 input.mp4 out.gif -s"00:01" -d5 -r450" +      echo "  $0 input.mp4 out.gif -s"20:00" -d5 -l --fps30" +      exit;; +    -r|--resolution) +      case "$2" in +        "") shift 2 ;; +        *) RESOLUTION="$2"; shift 2 ;; +      esac ;; +    -t|--to) +      case "$2" in +        "") shift 2 ;; +        *) TO="-t $2"; shift 2 ;; +      esac ;; +    -l|--loop) +      case "$2" in +        "") LOOP="-loop=0" ; shift 2 ;; +        *) LOOP="-loop=$2" ; shift 2 ;; +      esac ;; +    -f|--fps) +      case "$2" in +        "") shift 2 ;; +        *) FPS="$2"; shift 2 ;; +      esac ;; +    -s|--start) +      case "$2" in +        "") shift 2 ;; +        *) START="-ss $2"; shift 2 ;; +      esac ;; +    -d|--duration) +      case "$2" in +        "") shift 2 ;; +        *) DURATION="-t $2"; shift 2 ;; +      esac ;; +    --) shift ; break ;; +    *) echo "Internal error!" ; exit 1 ;; +  esac +done + +if [[ "$#" -ne 2 && "$#" -ne 1  ]]; then +  echo -e "Usage: $0 [options] <input video file> <output gif name>\n" +  echo -e "Illegal number of parameters or parameters.\nFor more informations:\n $0 --help " +  exit 1 +fi + +OUTPUT="$2" + +if [[ "$#" -eq 1  ]]; then +  filename=$(basename "$1") +  filename="${filename%.*}.gif" +  OUTPUT=$filename +fi + +if [[ "$RESOLUTION" -eq ""  ]]; then +  eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width "$1") +  RESOLUTION=${streams_stream_0_width} +fi + +palette=$(mktemp /tmp/palette_XXXX.png) + +filters="fps=$FPS,scale=$RESOLUTION:-1:flags=lanczos" + +# echo $filters + +# http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html#usage + +# create global color palette +ffmpeg -v warning $START $TO $DURATION -i "$1" -vf "$filters,palettegen" -y "$palette" + +# create GIF +ffmpeg -v warning $START $TO $DURATION -i "$1" -i "$palette" -lavfi "$filters [x]; [x][1:v] paletteuse" -y "$OUTPUT" + +rm $palette diff --git a/dotfiles/scripts/AN2Linux.sh b/dotfiles/scripts/AN2Linux.sh new file mode 100755 index 0000000..263f932 --- /dev/null +++ b/dotfiles/scripts/AN2Linux.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if [[ $1 && $2 && $3 ]];then + ssh-add -l |grep -q `ssh-keygen -lf $1  | awk '{print $2}'` || ssh-add $1 + ssh root@$2 "/root/AN2Linux.sh start $(\ip addr show $3 | grep "inet " | cut -d'/' -f1 | awk '{print $2}')"; an2linuxserver.py; ssh root@$2 "/root/AN2Linux.sh stop $(\ip addr show $3 | grep "inet " | cut -d'/' -f1 | awk '{print $2}')"; +else +    echo "Usage:" +    echo " $0 <ssh_key> <ip_server> <interface>" +fi diff --git a/dotfiles/scripts/bin-xfer b/dotfiles/scripts/bin-xfer new file mode 100755 index 0000000..e2ccce5 --- /dev/null +++ b/dotfiles/scripts/bin-xfer @@ -0,0 +1,36 @@ +#!/bin/sh +INFILE=/dev/null +OUTFILE=/dev/null +  +while [ $# -gt 0 ]; do + case "$1" in + -i) + shift + INFILE="$1" + ;; + -o) + shift + OUTFILE="$1" + ;; + -h|--help) + echo "$0 -i infile -o outfile" + ;; + *) + INFILE="$1" + esac + shift +done +cat << EOF +binary-xfer utility for minicom +Sending file ${INFILE} to ${OUTFILE} +EOF +  +/usr/bin/pv --force -i 0.25 -B 128  ${INFILE}  2>&1 > ${OUTFILE} +# Use the line below if you don't have pv! +  +# /bin/cat ${INFILE} > ${OUTFILE} +cat << EOF +  +File transfer complete +EOF +sleep 1 diff --git a/dotfiles/scripts/cycle-workspace-multiscreen.py b/dotfiles/scripts/cycle-workspace-multiscreen.py new file mode 100755 index 0000000..e5e70ef --- /dev/null +++ b/dotfiles/scripts/cycle-workspace-multiscreen.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +# cycle-workspace-multiscreen +#   Moves the currently active workspace to the left/right/top/bottom active +#   display. +#   Depends on i3-py (`pip install i3-py`) +#   Because workspace name are fixed to a display, just rename workspace can +#   change workspace to another display. +#   So for the moment this script is tested and work if workspaces are fixed +#   to a display. + +import i3 +import sys + +# figure out what is on, and what is currently on your screen. +workspace_origin = list(filter(lambda s: s['focused'], i3.get_workspaces()))[0] +outputs = list(filter(lambda s: s['active'], i3.get_outputs())) +output_origin = "" + +for output in outputs: +    if output['current_workspace'] == workspace_origin['name']: +            output_origin = output + +output_destination = workspace_origin + +if sys.argv[1] == "right": +    output_origin_x = output_origin['rect']['x'] +    output_origin_width = output_origin['rect']['width'] +    next_workspace_start = output_origin_x + output_origin_width +    for output in outputs: +        if next_workspace_start == output['rect']['x']: +            output_destination = output + +if sys.argv[1] == "left": +    output_origin_x = output_origin['rect']['x'] +    output_origin_width = output_origin['rect']['width'] +    next_workspace_start = output_origin_x - output_origin_width +    for output in outputs: +        next_workspace_start = output_origin_x - output['rect']['width'] +        if next_workspace_start == output['rect']['x']: +            output_destination = output + +if sys.argv[1] == "bottom": +    output_origin_y = output_origin['rect']['y'] +    output_origin_height = output_origin['rect']['height'] +    next_workspace_start = output_origin_y + output_origin_height +    for output in outputs: +        if next_workspace_start == output['rect']['y']: +            output_destination = output + +if sys.argv[1] == "top": +    output_origin_y = output_origin['rect']['y'] +    output_origin_height = output_origin['rect']['height'] +    next_workspace_start = output_origin_y - output_origin_height +    for output in outputs: +        next_workspace_start=output_origin_y - output['rect']['height'] +        if  next_workspace_start == output['rect']['y']: +            output_destination = output + +if (output_destination != workspace_origin): +    # Move origin workspace to the correct screen +    i3.command('move', 'workspace to output '+output_destination['name']) +    # Rename origin workspace to temporary workspace of the screen destination +    i3.command('rename', 'workspace '+str(workspace_origin['name'])+' to a_fucking_workspace') +    # Change focus to the workspace destination +    i3.workspace(output_destination['current_workspace']) +    # Move destination workspace to the correct screen +    i3.command('move', 'workspace to output '+workspace_origin['output']) +    # Rename workspace destination to the origin workspace +    i3.command('rename', 'workspace '+output_destination['current_workspace']+' to '+str(workspace_origin['name'])) +    # Rename temporary workspace to workspace destination +    i3.command('rename', 'workspace a_fucking_workspace to '+output_destination['current_workspace']) +    # Change focus the workspace destination +    i3.workspace(output_destination['current_workspace']) diff --git a/dotfiles/scripts/cycle-workspace.py b/dotfiles/scripts/cycle-workspace.py new file mode 100755 index 0000000..7f176db --- /dev/null +++ b/dotfiles/scripts/cycle-workspace.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +#https://gist.github.com/97-109-107/b70356670ae8309ffb4f +  +import i3 + +outputs = i3.get_outputs() +workspaces = i3.get_workspaces() + +# figure out what is on, and what is currently on your screen. +workspace = list(filter(lambda s: s['focused']==True, workspaces)) +output = list(filter(lambda s: s['active']==True, outputs)) + +# figure out the other workspace name +other_workspace = list(filter(lambda s: s['name']!=workspace[0]['output'], output)) + + + +# send current to the no-active one +i3.command('move', 'workspace to output '+other_workspace[0]['name']) + + + +#print(str(list(filter(lambda s: s['active']==True, workspaces)))) + +i3.command('workspace', other_workspace[0]['current_workspace']) +i3.command('move', 'workspace to output '+workspace[0]['output']) diff --git a/dotfiles/scripts/domainsTest.sh b/dotfiles/scripts/domainsTest.sh new file mode 100755 index 0000000..2b3151a --- /dev/null +++ b/dotfiles/scripts/domainsTest.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Program name: pingall.sh +date +cat domains.txt |  while read output +do +    ping -c 1 "$output" &> /dev/null +    if [ $? -eq 0 ]; then +    echo "node $output is up"  +    else +    echo "node $output is down" +    fi +done diff --git a/dotfiles/scripts/dropshadow.sh b/dotfiles/scripts/dropshadow.sh new file mode 100755 index 0000000..4e70f82 --- /dev/null +++ b/dotfiles/scripts/dropshadow.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# NAME:         dropshadow.sh +# VERSION:       +# AUTHOR:       (c) 2013 Glutanimate +# DESCRIPTION:  - adds transparent dropshadow to images (e.g. screenshots) +#               - moves them to predefined screenshot folder +# FEATURES:      +# DEPENDENCIES: imagemagick suite +# +# LICENSE:      MIT license (http://opensource.org/licenses/MIT) +# +# NOTICE:       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +#               INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +#               PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +#               LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  +#               TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE  +#               OR OTHER DEALINGS IN THE SOFTWARE. +# +# +# USAGE:        dropshadow.sh <image> + +SCREENSHOTFOLDER="$HOME/Screenshots" + + +FILE="${1}" +FILENAME="${FILE##*/}" +FILEBASE="${FILENAME%.*}" + +convert "${FILE}" \( +clone -background black -shadow 80x20+0+15 \) +swap -background transparent -layers merge +repage "$SCREENSHOTFOLDER/${FILEBASE}.png" diff --git a/dotfiles/scripts/fingerprint b/dotfiles/scripts/fingerprint new file mode 100755 index 0000000..8e15a98 --- /dev/null +++ b/dotfiles/scripts/fingerprint @@ -0,0 +1,66 @@ +#!/usr/bin/env ruby + +# Usage exemple: ./fingerprint twitter.com api.twitter.com ton.twitter.com twitter.com tweetdeck.twitter.com userstream.twitter.com abs.twitter.com psb.twimg.com ton.twing.com video.twimg.com 2> /dev/null +# List of figerprint by domain name + +require 'resolv' +require 'openssl' +require 'set' + +hosts = Set.new +ips = Set.new +certs = Set.new +subjects = Set.new +cas = Set.new +fps = Set.new +keys = Set.new + +resolver = Resolv::DNS.new +ARGV.each do |host| +  $stderr.puts host +  hosts << host +  resolver.each_address(host) do |ip| +    ip = ip.to_s +    ips << ip +    $stderr.puts "  #{ip}" +    tcp_client = TCPSocket.new ip, 443 +    ssl_client = OpenSSL::SSL::SSLSocket.new tcp_client +    ssl_client.hostname = host +    ssl_client.connect +    cert = ssl_client.peer_cert +    certs << cert + +    subject = cert.subject +    subjects << subject +    $stderr.puts "    CN=#{subject}" + +    ca = cert.issuer +    cas << ca +    $stderr.puts "    CA=#{ca}" + +    fp = OpenSSL::Digest::SHA256.hexdigest cert.to_der +    fps << fp +    $stderr.puts "    fp=#{fp}" + +    key = ::OpenSSL::Digest::SHA256.hexdigest cert.public_key.to_der +    keys << key +    $stderr.puts "    key=#{key}" + +    ssl_client.close +  end +end + +puts "#{hosts.size} hosts" +hosts.sort.each { |l| puts "  #{l}"} +puts "#{ips.size} IPs" +ips.sort.each { |l| puts "  #{l}"} +puts "#{fps.size} certificates" +fps.sort.each { |l| puts "  #{l}"} +puts "#{cas.size} CAs" +cas.sort.each { |l| puts "  #{l}"} +puts "#{subjects.size} subjects" +subjects.sort.each { |l| puts "  #{l}"} +puts "#{keys.size} keys" +keys.sort.each { |l| puts "  #{l}"} + + diff --git a/dotfiles/scripts/i3removesupportof.py b/dotfiles/scripts/i3removesupportof.py new file mode 100755 index 0000000..6cbc877 --- /dev/null +++ b/dotfiles/scripts/i3removesupportof.py @@ -0,0 +1,56 @@ +#/bin/python + +import re, sys, os + +key_to_rm=str(sys.argv[1]) +config_file=os.path.expanduser("~/.config/i3/config") + +oneline_conf_file = "" + +conf_file_input = open(config_file, 'r') + +for line in conf_file_input: +    line = re.sub("^#{1}\.", "", line) +    oneline_conf_file = oneline_conf_file + line + +conf_file_input.close() + + +# add key +block_conf_found = re.search(r"#{1}"+key_to_rm+".*#{1}"+key_to_rm+".", oneline_conf_file, re.DOTALL) + +if block_conf_found != None: + +    block_conf_found_splited = block_conf_found.group(0).splitlines() + +    oneline_final_data = "" +    line_parsed=0 +    comment_this_line=0 +    end_key=0 +    for line in block_conf_found_splited: +        if re.search("^#{1}"+key_to_rm+"$", line): +            comment_this_line=1 +        elif re.search("^#{1}"+key_to_rm+".$", line): +            end_key=1 +            comment_this_line=0 +        if comment_this_line == 1: +            oneline_final_data = oneline_final_data + "#." + line +        elif end_key == 1: +            oneline_final_data = oneline_final_data + "#." + line +            end_key = 0 +        else: +            oneline_final_data = oneline_final_data + line +        if line_parsed != len(block_conf_found_splited)-1: +            oneline_final_data = oneline_final_data + "\n" +        line_parsed = line_parsed + 1 + + +    oneline_new_conf_file = re.sub(r"#"+key_to_rm+".*#"+key_to_rm+".", oneline_final_data, oneline_conf_file, flags=re.DOTALL) + +    confOutput = open(config_file, 'w') + +    confOutput.write(oneline_new_conf_file) + +    confOutput.close() +else: +    print("Sorry the keymap '"+str(sys.argv[1])+"' is not in this conf file, use 'fr' or 'bepo'.\nBetween, this script is used to remove a keymap support for i3wm.\nUsage:\n    "+sys.argv[0]+" fr") diff --git a/dotfiles/scripts/internet-from_wifi_to_internet.sh b/dotfiles/scripts/internet-from_wifi_to_internet.sh new file mode 100755 index 0000000..83d9b2b --- /dev/null +++ b/dotfiles/scripts/internet-from_wifi_to_internet.sh @@ -0,0 +1,21 @@ +#!/bin/sh +#sudo ip addr add 192.168.123.102/24 dev enp3s0 +#sudo ip route add default via 192.168.123.100 dev enp3s0 + +if [[ $1 == "start" ]]; then +	/usr/lib/netctl/network start wlp2s0-Livebox-C1D0 +	ip addr add 192.168.123.100/24 dev enp3s0 +	sysctl net.ipv4.ip_forward=1 +	iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE +	iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +	iptables -A FORWARD -i enp3s0 -o wlp3s0 -j ACCEPT +elif [[ $1 == "stop" ]]; then +	/usr/lib/netctl/network stop wlp2s0-Livebox-C1D0 +	iptables -t nat -D POSTROUTING -o wlp2s0 -j MASQUERADE +	iptables -D FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +	iptables -D FORWARD -i enp3s0 -o wlp3s0 -j ACCEPT +	ip addr del 192.168.123.100/24 dev enp3s0 +	sysctl net.ipv4.ip_forward=0 +else +	echo "error" +fi diff --git a/dotfiles/scripts/ip.sh b/dotfiles/scripts/ip.sh new file mode 100755 index 0000000..547c451 --- /dev/null +++ b/dotfiles/scripts/ip.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# sudo apt install dnsutils jq && sudo -H pip3 install speedtest-cli + +myip=$(dig +short myip.opendns.com @resolver1.opendns.com) +geoip=$(curl -s ipinfo.io/"$myip" | jq -r '[.country, .city] | join(", ")') + +echo "$myip ($geoip)" +speedtest-cli --simple --secure + +exit 0 + diff --git a/dotfiles/scripts/launch_rofi-pass.sh b/dotfiles/scripts/launch_rofi-pass.sh new file mode 100755 index 0000000..87654ce --- /dev/null +++ b/dotfiles/scripts/launch_rofi-pass.sh @@ -0,0 +1 @@ +PINENTRY_USER_DATA="gtk" exec rofi-pass diff --git a/dotfiles/scripts/lessfilter.sh b/dotfiles/scripts/lessfilter.sh new file mode 100755 index 0000000..d85c217 --- /dev/null +++ b/dotfiles/scripts/lessfilter.sh @@ -0,0 +1,20 @@ +#!/bin/sh +case "$1" in +      *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\ +      *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\ +      *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\ +      *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass) +        pygmentize -f 256 "$1";; +      .bashrc|.bash_aliases|.bash_environment) +        pygmentize -f 256 -l sh "$1" +        ;; +      *) +        grep "#\!/bin/bash" "$1" > /dev/null +        if [ "$?" -eq "0" ]; then +          pygmentize -f 256 -l sh "$1" +        else +          exit 1 +        fi +    esac + +exit 0 diff --git a/dotfiles/scripts/linux_system_error_list.py b/dotfiles/scripts/linux_system_error_list.py new file mode 100755 index 0000000..ee1a7a6 --- /dev/null +++ b/dotfiles/scripts/linux_system_error_list.py @@ -0,0 +1,46 @@ +#!/bin/python + +import re, sys +from terminaltables  import DoubleTable + +data = [] +data.append(['Error', 'Code', 'Comment']) + +def get_content(file): + +    with open(file) as f: +        content = f.readlines() + +    content = [x.strip() for x in content] + +    for line in content: +        if re.search('define',line): +            line = re.sub('#define\t', '', line) +            line = re.sub('(?m)^#define .*\n?', '', line) +            line = re.sub('\t\t', '\t', line) +            line = re.sub('(/\*|\*/)', '', line) +            if line != '': +                data.append(re.split(r'\t',line)) + +get_content("/usr/include/asm-generic/errno-base.h") +get_content("/usr/include/asm-generic/errno.h") + +if len(sys.argv) == 2 and sys.argv[1] == "list": +    table = DoubleTable(data, "Error code") +    table.justify_columns = {0: 'right', 1: 'center', 2: 'left'} +    print(table.table) +elif (len(sys.argv) == 2 or len(sys.argv) == 3) and sys.argv[1] == "search": +    if len(sys.argv) == 3: +        data_searched = [] +        data_searched.append(['Error', 'Code', 'Comment']) +        for line in data: +            if re.search(sys.argv[2],str(line)): +                data_searched.append(line) +        table  = DoubleTable(data_searched, "Error code") +        table.justify_columns = {0: 'right', 1: 'center', 2: 'left'} +        print(table.table) +    else: +        print("search <search_string> # You can send regex following re.search python function") +else: +    print("search <search_string> # You can send regex following re.search python function") +    print("list # Return list of all error from errno.h and errno-base.h") diff --git a/dotfiles/scripts/linux_system_error_list.sh b/dotfiles/scripts/linux_system_error_list.sh new file mode 100755 index 0000000..4b980d7 --- /dev/null +++ b/dotfiles/scripts/linux_system_error_list.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cat /usr/include/asm-generic/errno-base.h +cat /usr/include/asm-generic/errno.h diff --git a/dotfiles/scripts/mpvbg b/dotfiles/scripts/mpvbg new file mode 100755 index 0000000..5afba5c --- /dev/null +++ b/dotfiles/scripts/mpvbg @@ -0,0 +1,27 @@ +#!/bin/bash +# +# http://github.com/mitchweaver/bin +# +# play a video on the root window +# +# Multi screen mode by neodarz + +[ -f "$1" ] || exit 1 + +pkill -9 xwinwrap + +readarray -t screen_connected < <(xrandr | grep " connected") +nb_screen_connected=${#screen_connected[@]} +for (( num_screen=0; num_screen<$nb_screen_connected; num_screen++)); do +    screen_geo=$(echo ${screen_connected[num_screen]} | awk '{ print $3 }') + +    xwin="xwinwrap -ni -fdt -sh rectangle -un -b -nf -ov -g $screen_geo -- " + +    mpv="mpv --wid WID --no-config --keepaspect=no --loop \ +        --no-border --vd-lavc-fast --x11-bypass-compositor=no \ +        --gapless-audio=yes --vo=xv --hwdec=auto --really-quiet \ +        --name=mpvbg" + +    $xwin $mpv "$1" > /dev/null 2>&1 & +    echo -n $! > ${HOME}/.cache/mpvbg-$num_screen.pid +done diff --git a/dotfiles/scripts/my-pinentry b/dotfiles/scripts/my-pinentry new file mode 100755 index 0000000..b46687e --- /dev/null +++ b/dotfiles/scripts/my-pinentry @@ -0,0 +1,16 @@ +#!/bin/bash +# choose pinentry depending on PINENTRY_USER_DATA +# requires pinentry-curses and pinentry-gtk2 +# this *only works* with gpg 2 +# see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802020 + +case $PINENTRY_USER_DATA in +gtk) +  exec /usr/bin/pinentry-gtk-2 "$@" +  ;; +none) +  exit 1 # do not ask for passphrase +  ;; +*) +  exec /usr/bin/pinentry-curses "$@" +esac diff --git a/dotfiles/scripts/notify b/dotfiles/scripts/notify new file mode 100755 index 0000000..6445914 --- /dev/null +++ b/dotfiles/scripts/notify @@ -0,0 +1 @@ +$@ ; twmnc -t "$1" -c "Job end !" diff --git a/dotfiles/scripts/nullify b/dotfiles/scripts/nullify new file mode 100755 index 0000000..212c88d --- /dev/null +++ b/dotfiles/scripts/nullify @@ -0,0 +1,2 @@ +#!/bin/sh +"$@" &>/dev/null diff --git a/dotfiles/scripts/pyrnotify.py b/dotfiles/scripts/pyrnotify.py new file mode 100644 index 0000000..53e9c0e --- /dev/null +++ b/dotfiles/scripts/pyrnotify.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +# ex:sw=4 ts=4:ai: +# +# Copyright (c) 2012 by Krister Svanlund <krister.svanlund@gmail.com> +#   based on tcl version: +#    Remote Notification Script v1.1 +#    by Gotisch <gotisch@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +# Example usage when Weechat is running on a remote PC and you want +# want to use port 4321 for the connection. +# +#     On the "client" (where the notifications will end up), host is +#     the remote host where weechat is running: +#		python2 location/of/pyrnotify.py 4321 & ssh -R 4321:localhost:4321 username@host +#     You can have a second argument to specified the time to display the notification +#       python2 location/of/pyrnotify.py 4321 2000 & ssh -R 4321:localhost:4321 username@host +#     Important to remember is that you should probably setup the +#     connection with public key encryption and use something like +#     autossh to do this in the background. +# +#     In weechat: +#		/python load pyrnotify.py +#		and set the port +#		/set plugins.var.python.pyrnotify.port 4321 +# +# It is also possible to set which host pyrnotify shall connect to, +# this is not recommended. Using a ssh port-forward is much safer +# and doesn't require any ports but ssh to be open. + +# ChangeLog: +# +# 2014-05-10: Change hook_print callback argument type of displayed/highlight +#             (WeeChat >= 1.0) +# 2012-06-19: Added simple escaping to the title and body strings for +#             the script to handle trailing backslashes. + +try: +    import weechat as w +    in_weechat = True +except ImportError as e: +    in_weechat = False + +import os, sys, re +import socket +import subprocess +import shlex + +SCRIPT_NAME    = "pyrnotify" +SCRIPT_AUTHOR  = "Krister Svanlund <krister.svanlund@gmail.com>" +SCRIPT_VERSION = "1.0" +SCRIPT_LICENSE = "GPL3" +SCRIPT_DESC    = "Send remote notifications over SSH" + +def escape(s): +    return re.sub(r'([\\"\'])', r'\\\1', s) + +def run_notify(icon, nick,chan,message): +    host = w.config_get_plugin('host') +    try: +        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +        s.connect((host, int(w.config_get_plugin('port')))) +        s.send("normal %s \"%s to %s\" \"%s\"" % (icon, nick, escape(chan), escape(message))) +        s.close() +    except Exception as e: +        w.prnt("", "Could not send notification: %s" % str(e)) + +def on_msg(*a): +    if len(a) == 8: +        data, buffer, timestamp, tags, displayed, highlight, sender, message = a +        if data == "private" or int(highlight): +            if data == "private" and w.config_get_plugin('pm-icon'): +                icon = w.config_get_plugin('pm-icon') +            else: +                icon = w.config_get_plugin('icon') +            buffer = "me" if data == "private" else w.buffer_get_string(buffer, "short_name") +            run_notify(icon, sender, buffer, message) +            #w.prnt("", str(a)) +    return w.WEECHAT_RC_OK + +def weechat_script(): +    settings = {'host' : "localhost", +                'port' : "4321", +                'icon' : "utilities-terminal", +                'pm-icon' : "emblem-favorite"} +    if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, "", ""): +        for (kw, v) in settings.items(): +            if not w.config_get_plugin(kw): +                w.config_set_plugin(kw, v) +        w.hook_print("", "notify_message", "", 1, "on_msg", "") +        w.hook_print("", "notify_private", "", 1, "on_msg", "private") +        w.hook_print("", "notify_highlight", "", 1, "on_msg", "") # Not sure if this is needed + + + + + + +###################################### +## This is where the client starts, except for the global if-check nothing below this line is +## supposed to be executed in weechat, instead it runs when the script is executed from +## commandline. + +def accept_connections(s, timeout=None): +    conn, addr = s.accept() +    try: +        data = "" +        d = conn.recv(1024) +        while d: +            data += d +            d = conn.recv(1024) +    finally: +        conn.close() +    if data: +        try: +            urgency, icon, title, body = shlex.split(data) +            if timeout: +                #subprocess.call(["/usr/bin/twmnc", "-t", timeout, "-u", urgency, "-c", "IRC", "-i", icon, escape(title), escape(body)]) +                subprocess.call(["/usr/bin/twmnc", "-t", escape(title), "-c", escape(body)]) +            else: +                #subprocess.call(["/usr/bin/twmnc", "-u", urgency, "-c", "IRC", "-i", icon, escape(title), escape(body)]) +               subprocess.call(["/usr/bin/twmnc", "-t", "IRC", "-c", escape(title), escape(body)])  + +        except ValueError as e: +            print e +        except OSError as e: +            print e +    accept_connections(s, timeout) + +def weechat_client(argv): +    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +    s.bind(("localhost", int(argv[1] if len(sys.argv) > 1 else 4321))) +    s.listen(5) +    try: +        accept_connections(s, argv[2] if len(sys.argv) > 2 else None) +    except KeyboardInterrupt as e: +        print "Keyboard interrupt" +        print e +    finally: +        s.close() + +if __name__ == '__main__': +    if in_weechat: +        weechat_script() +    else: +        weechat_client(sys.argv) diff --git a/dotfiles/scripts/searx.sh b/dotfiles/scripts/searx.sh new file mode 100755 index 0000000..876d6d1 --- /dev/null +++ b/dotfiles/scripts/searx.sh @@ -0,0 +1,3 @@ +#!/bin/bash +sudo systemctl start httpd.service +python /srv/searx/searx/webapp.py diff --git a/dotfiles/scripts/ssh.sh b/dotfiles/scripts/ssh.sh new file mode 100755 index 0000000..7116490 --- /dev/null +++ b/dotfiles/scripts/ssh.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +#By default the sshd listen only for local connection. + +if [[ $1 == "disable" ]]; then +    if [[ $(cat /etc/ssh/sshd_config | grep -e "^ListenAddress") == "" ]]; then +        sudo sed -i -e 's/#ListenAddress ::/#ListenAddress ::\nListenAddress 127.0.0.1/g' /etc/ssh/sshd_config +        sudo systemctl restart sshd.service +    fi +    echo "sshd listen now only for local address 127.0.0.1." +elif [[ $1 == "enable" ]]; then +    sudo sed -i -e '/ListenAddress 127.0.0.1/d' /etc/ssh/sshd_config  +    sudo systemctl restart sshd.service +    echo "sshd listen now for all address." +elif [[ $1 == "status" ]]; then +    echo $(sudo systemctl status sshd.service) +    echo "sshd conf say:" +    echo $(cat /etc/ssh/sshd_config | grep -e "^ListenAddress") +elif [[ $1 == "start" || $1 == "stop" || $1 == "restart" ]]; then +    sudo systemctl $1 sshd.service +fi + +sudo -k + diff --git a/dotfiles/scripts/switch-workspace.py b/dotfiles/scripts/switch-workspace.py new file mode 100755 index 0000000..d311c46 --- /dev/null +++ b/dotfiles/scripts/switch-workspace.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +from json import loads +from os import popen +from sys import argv + +def ipc_query(req="command", msg=""): +    ans = popen("i3-msg -t " + req + " " +  msg).readlines()[0] +    return loads(ans) + +if __name__ == "__main__": +    # Usage & checking args +    if len(argv) != 2: +        print ("Usage: switch-workspace.py name-of-workspace") +        exit(-1) + +    newworkspace = argv[1] + +    # Retrieving active display +    active_display = None +    old_display = None +    for w in ipc_query(req="get_workspaces"): +        if w['focused']: +            active_display = w['output'] +        if w['name'] == newworkspace: +            old_display = w['output'] +        if newworkspace.isdigit() and w['num'] == int(newworkspace): +            old_display = w['output'] +        print (w) + +    # Pre-computing commands +    if newworkspace.isdigit(): +        cmd_show = "workspace number " + newworkspace +    else: +        cmd_show = "workspace " + newworkspace +    cmd_move = "move workspace to output " + active_display + +    # Moving workspace to active display +    if active_display == old_display: +        print (cmd_show) +        print (ipc_query(msg=cmd_show)) +    else: +        cmd="'" + cmd_show + ";" + cmd_move + ";" + cmd_show + "'" +        print (cmd) +        print (ipc_query(msg=cmd)) diff --git a/dotfiles/scripts/switch_audio.sh b/dotfiles/scripts/switch_audio.sh new file mode 100755 index 0000000..aff2543 --- /dev/null +++ b/dotfiles/scripts/switch_audio.sh @@ -0,0 +1,16 @@ +#/bin/sh + +# Usage : +#   switch_audio.sh <sinkport_number> + +headphones="analog-output-headphones" +lineout="analog-output-lineout" +sinkport="$1" + +if [[ $(echo $(pacmd list | grep "active port") | cut -d" " -f3 | cut -d"<" -f2 | cut -d">" -f1) == $lineout ]] +then +   pacmd set-sink-port $sinkport $headphones + elif [[ $(echo $(pacmd list | grep "active port") | cut -d" " -f3 | cut -d"<" -f2 | cut -d">" -f1) == $headphones ]] + then +    pacmd set-sink-port $sinkport $lineout +  fi diff --git a/dotfiles/scripts/task b/dotfiles/scripts/task new file mode 100755 index 0000000..f15e4a6 --- /dev/null +++ b/dotfiles/scripts/task @@ -0,0 +1,28 @@ +#!/bin/sh  +SESSION=task + +optios $@ + +tmux kill-session -t $SESSION +tmux -2 new-session -d -s $SESSION +tmux send-keys "watch task calendar" C-m +tmux split-window -v +tmux resize-pan -D 10 +tmux resize-pan -U 10 +tmux send-keys "watch task $@" C-m +tmux split-window -v +tmux resize-pan -D 20 +tmux resize-pan -U 5 +l1="┳━┓┓ ┃┳━┓┏┏┓┳━┓┳  ┳━┓  ┏━┓┳━┓  ┓━┓┏━┓┏┏┓┳━┓  ┏━┓┏━┓┏┏┓┏┏┓┳━┓┏┓┓┳━┓┓━┓" +l2="┣━ ┏╋┛┃━┫┃┃┃ ┃━┛┃  ┣━   ┃ ┃┣━   ┗━┓┃ ┃┃┃┃ ┣━   ┃  ┃ ┃┃┃┃ ┃┃┃ ┃━┫┃┃┃┃ ┃┗━┓" +l3="┻━┛┇ ┗┛ ┇┛ ┇┇  ┇━┛┻━┛  ┛━┛┇    ━━┛┛━┛┛ ┇┻━┛  ┗━┛┛━┛┛ ┇┛ ┇┛ ┇┇┗┛┇━┛━━┛" +tmux send-keys "clear;echo -e '$l1\n$l2\n$l3\n\ntmux send-keys -t task:0.1 C-c \`<watch task>\` C-m\nMore info about task on the next page !'" C-m +tmux split-window -v +tmux resize-pan -D 5 +tmux new-window +tmux select-window -t 1 +tmux send-keys "task help | less" C-m +tmux select-window -t 0 +tmux rename-window -t 0 "task" +tmux rename-window -t 1 "help" +tmux -2 attach-session -t $SESSION diff --git a/dotfiles/scripts/tdone b/dotfiles/scripts/tdone new file mode 100755 index 0000000..d63fd87 --- /dev/null +++ b/dotfiles/scripts/tdone @@ -0,0 +1,30 @@ +#!/bin/bash + +usage () { +  echo "Usage:" +  echo "      tdone <option> <date>" +  echo "Date list:" +  echo "      today       - Show the tasks done today" +  echo "      yesterday   - Show the tasks done yesterday" +  echo "      week        - Show the tasks done this week" +  echo "      month       - Show the tasks done this month" +  echo "Option list:" +  echo "      -h view this help message" +  } + +if [[ $1 == "today" ]]; then +  task end.after:today completed +elif [[ $1 == "yesterday" ]]; then +  task end.after:today-1d completed +elif [[ $1 == "month" ]]; then +  task end.after:socm completed +elif [[ $1 == "week" ]]; then +  task end.after:socw completed +elif [[ $@ =~ ^[[:digit:][:space:]]*$  ]]; then +  task modify -next $@; task done $@ +elif [[ $1 == "-h" ]]; then +  usage +else +  echo "Wrong option/date" +  echo "Write 'tdone -h' for help" +fi diff --git a/dotfiles/scripts/tm.sh b/dotfiles/scripts/tm.sh new file mode 100755 index 0000000..851cd7e --- /dev/null +++ b/dotfiles/scripts/tm.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# source https://github.com/Drakirus/dotfiles/blob/master/bin/tm +# abort if we're already inside a TMUX session +if [ "$TMUX" != "" ]; then +  echo "Already inside a TMUX session !!" +  exit 1 +fi +# startup a "default" session if non currently exists +# tmux has-session -t _default || tmux new-session -s _default -d + + +SessionNb=$( tmux list-sessions -F "#S" 2>/dev/null | wc -l ) +if [ $SessionNb -eq 0 ]; then +  # read -p "Enter new session name: " SESSION_NAME +  TERM=screen-256color-bce tmux new -s "Start" #"$SESSION_NAME" +else +  # present menu for user to choose which workspace to open +  PS3="Please choose your session: " +  options=($(tmux list-sessions -F "#S" 2>/dev/null) "New Session" "Independent attach") +  echo "Available Options" +  echo "------------------" +  echo " " +  select opt in "${options[@]}" +  do +    case $opt in +      "New Session") +        read -p "Enter new session name: " SESSION_NAME +        TERM=screen-256color-bce tmux new -s "$SESSION_NAME" +        break +        ;; + +      "Independent attach") +        optionsATTACH=($(tmux list-sessions -F "#S" 2>/dev/null)) +        echo " " +        echo "Available sessions" +        echo "------------------" +        select optATT in "${optionsATTACH[@]}" +        do +          TERM=screen-256color-bce tmux new -s "Agent_infiltré" -t $optATT +          exit 0 +        done +        ;; +      *) +        TERM=screen-256color-bce tmux attach-session -t $opt +        break +        ;; +    esac +  done +fi diff --git a/dotfiles/scripts/watch b/dotfiles/scripts/watch new file mode 100755 index 0000000..b40c0af --- /dev/null +++ b/dotfiles/scripts/watch @@ -0,0 +1,12 @@ +#!/bin/bash +command=$@ + +clear + +while true  +do +    eval "$command" +    sleep 1 +    echo -n -e "$clearline" +    clear +done diff --git a/dotfiles/scripts/weechat_notify.sh b/dotfiles/scripts/weechat_notify.sh new file mode 100755 index 0000000..49bef0c --- /dev/null +++ b/dotfiles/scripts/weechat_notify.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +if [[ $1 == "start" ]]; then +	python2 ~/.scripts/pyrnotify.py 4323 & +	ssh -fNT -R 4323:localhost:4323 neodarz@neodarz.net -p 19977 +elif [[ $1 == "stop" ]]; then +	sudo kill -9 $(ps aux | grep pyrnotify.py | awk '{print $2}') +    sudo kill -9 $(ps aux | grep " ssh -fNT -R 4323:localhost:4323 neodarz@neodarz.net -p 19977" | awk '{print $2}') +fi + + + diff --git a/dotfiles/scripts/what.sh b/dotfiles/scripts/what.sh new file mode 100755 index 0000000..2055f70 --- /dev/null +++ b/dotfiles/scripts/what.sh @@ -0,0 +1,42 @@ +key='h' +while [[ $key != 'q' ]] +do +echo "" +echo "╓───────────────────────[ Map ]─[ i3 ]" +echo "╙──────────────────────────────────────────────────────── ─ ─" +echo "╓──────────────────────────────────────────────────────────────────────────────────────╖" +echo "║                                                                                      ║" +echo "║                                   ┌               ┐                                  ║" +echo "║                                     LEFT · SCREEN                                    ║" +echo "║                                   └               ┘                                  ║" +echo "║                                                                                      ║" +echo "║                                 (Go to)  [WinKey]+[n]                                ║" +echo "║                             (Mv to)  [WinKey]+[Shift]+[n]                            ║" +echo "║                                                                                      ║" +echo "╙──────[1:CHAT]─[2:MAIL]─[3:TERM]─[4:TERM]─[5:DOC]─[6:SRV]─[7]─[8]─[9]─[10:TRASH]──────╜" + +echo "╓──────────────────────────────────────────────────────────────────────────────────────╖" +echo "║                                                                                      ║" +echo "║                                  ┌                 ┐                                 ║" +echo "║                                    CENTER · SCREEN                                   ║" +echo "║                                  └                 ┘                                 ║" +echo "║                                                                                      ║" +echo "║                            (Go to)  [WinKey]+[Control]+[n]                           ║" +echo "║                            (Mv to)  [Control]+[AltKey]+[n]                           ║" +echo "║                                                                                      ║" +echo "╙─[11:WEB]─[12:GAME]─[13:TERM]─[14:TERM]─[15:CODE]─[16:FILM]─[17:MUSIC]─[18]─[19]─[20]─╜" + +echo "╓──────────────────────────────────────────────────────────────────────────────────────╖" +echo "║                                                                                      ║" +echo "║                                  ┌                ┐                                  ║" +echo "║                                    RIGHT · SCREEN                                    ║" +echo "║                                  └                ┘                                  ║" +echo "║                                                                                      ║" +echo "║                            (Go to)  [WinKey]+[AltKey]+[n]                            ║" +echo "║                       (Mv to)  [WinKey]+[Control]+[AltKey]+[n]                       ║" +echo "║                                                                                      ║" +echo "╙─────────[21:WEB]─[22]─[23:TERM]─[24:TERM]─[25]─[26]─[27]─[28]─[29]─[30:TRASH]────────╜" + +read -n1 -r key + +done diff --git a/dotfiles/scripts/what_alias.sh b/dotfiles/scripts/what_alias.sh new file mode 100755 index 0000000..4b79640 --- /dev/null +++ b/dotfiles/scripts/what_alias.sh @@ -0,0 +1,56 @@ +key='h' +while [[ $key != 'q' ]] +do +echo "" +echo "╓───────────────────────[ alias list ]─[ i3 ]" +echo "╙──────────────────────────────────────────────────────── ─ ─" +echo "╓──────────────────────────────────────────────────────────────────────────────────────╖" +echo "║ l             -> ls -F --color=auto        ll         -> ls -lhF --color=auto        ║" +echo "║ la            -> ls -lahF --color=auto     ..         -> cd ..                       ║" +echo "║ ...           -> cd ../..                  ../..      -> cd ../..                    ║" +echo "║ rmrf          -> rm -rf                    psef       -> ps -ef                      ║" +echo "║ mkdir         -> mkdir -p                  cp         -> cp -r                       ║" +echo "║ scp           -> scp -r                    xsel       -> xsel -b                     ║" +echo "║ fuck          -> sudo \$(fc -ln -1)         v/vi/emacs -> vim                         ║" +echo "║ g             -> git                       ga         -> git add                     ║" +echo "║ gc            -> git commit -m             gcs        -> git commit -S -m            ║" +echo "║ gs            -> git status                gd         -> git diff                    ║" +echo "║ gm            -> git merge                 gr         -> git rebase                  ║" +echo "║ gp            -> git push                  gu         -> git pull                    ║" +echo "║ gco           -> git checkout              gcs        -> git commit -S -m            ║" +echo "║ gap           -> git add -p                matrix     -> cmatrix -b                  ║" +echo "║ ag            -> search in code            tree       -> tree with cool options      ║" +echo "║ tempwatch     -> sensors in while loop     toiletlist -> toilet list font            ║" +echo "║ future        -> generate font text        pacman     -> sudo pacman                 ║" +echo "║ lol           -> lolcat                    update     -> yaourt -Syu                 ║" +echo "║ off           -> poweroff                  ZZ         -> quit                        ║" +echo "║ dldstart      -> aria2d start              dldstop    -> aria2d stop                 ║" +echo "║ dldstatus     -> aria2d status             dll        -> list torrents dls           ║" +echo "║ dllw          -> watch list torrent dls    dla        -> add torrent                 ║" +echo "║ diana         -> use diana with tocken     dlrm       -> rm torrent                  ║" +echo "║ dlrs          -> resume torrent            dlp        -> pause torrent               ║" +echo "║ disks         -> disks info                record     -> record current screen       ║" +echo "║ nullify       -> no fucking output log     ff         -> firefox-developer nullified ║" +echo "║ lo            -> libreoffice nullified     le         -> colorized less              ║" +echo "║ fixit         -> fixi pacman db            printer    -> system-config-printer       ║" +echo "║ bat           -> show bat %                rl         -> source zsh alias            ║" +echo "║ rssyoutube    -> youtube rss               rssblog    -> blogs rss                   ║" +echo "║ i3lock        -> i3lock-fancy              weatherMans -> .                          ║" +echo "║ weatherChap   -> .                         vpn        -> vpn fait maison             ║" +echo "║ cal           -> ikhal                     cals       -> sync cals                   ║" +echo "║ mm            -> sync and mutt             tm         -> attach tmux session X       ║" +echo "║ mdm           -> read md file like manpage mixer      -> alsamixer                   ║" +echo "║ t             -> task                      ts         -> task sync                   ║" +echo "║ tcal          -> task calendar             thistory   -> task history                ║" +echo "║ thgraphdaily  -> task burndown.daily       tgraphweek -> task burndown.week          ║" +echo "║ tgraphmonth   -> task burndown.week        tnext      -> get the next tasks          ║" +echo "║ tdone         -> .                         tactive    -> .                           ║" +echo "║ tlistprojects -> .                         tlistallprojects -> .                     ║" +echo "║ c             -> colorized cat             stowroot   -> sudo stow -t /              ║" +echo "║                                                                                      ║" +echo "║ email <to> <subject> <text>                                                          ║" +echo "╙──────────────────────────────────────────────────────────────────────────────────────╜" + +read -n1 -r key + +done diff --git a/dotfiles/scripts/what_command_help.sh b/dotfiles/scripts/what_command_help.sh new file mode 100755 index 0000000..7c5eddd --- /dev/null +++ b/dotfiles/scripts/what_command_help.sh @@ -0,0 +1,40 @@ +key='h' +while [[ $key != 'q' ]] +do +echo "" +echo "╓───────────────────────[ cmds list ]─[ i3 ]" +echo "╙──────────────────────────────────────────────────────── ─ ─" +echo "╓──────────────────────────────────────────────────────────────────────────────────────╖" +echo "║                                  · Help keys                                         ║" +echo "║ [WinKey+h] cmds list                            [AltKey+h] screen map                ║" +echo "║ [WinKey+a] alias map                                                                 ║" +echo "║                                                                                      ║" +echo "║                                  · screen keys                                       ║" +echo "║ [XF86MonBrightnessUp] backlight +1              [XF86MonBrightnessDown] backlight -1 ║" +echo "║                                                                                      ║" +echo "║                                  · audio keys                                        ║" +echo "║ [XF86AudioMute] mute toggle                     [XF86AudioPlay] output toggle        ║" +echo "║ [XF86AudioLowerVolume] vol -1%                  [XF86AudioRaiseVolume] vol +1%       ║" +echo "║ [WinKey+control+m] mic toggle                                                        ║" +echo "║                                                                                      ║" +echo "║                                  · keys                                              ║" +echo "║ [WinKey+control+l] lock                         [WinKey+o] screenshot                ║" +echo "║                                                                                      ║" +echo "║                                  · app keys                                          ║" +echo "║ [WinKey+Shift+F1] ranger                        [WinKey+Shift+F2] cmus               ║" +echo "║ [WinKey+Shift+F3] mutt ×                        [WinKey+Shift+F4] mosh neodarz.net × ║" +echo "║ [WinKey+Shift+F4] mosh neodarz.net ×            [WinKey+Shift+F5] firefox-dev        ║" +echo "║ [WinKey+Shift+F6] atom ×                        [WinKey+Shift+F7] ncmpcpp            ║" +echo "║ [WinKey+Shift+F8] qutebrowser ×                                                      ║" +echo "║                                                                                      ║" +echo "║                                  · launcher keys                                     ║" +echo "║ [WinKey+p] passmenu                            [WinKey+Return] qterminal             ║" +echo "║ [WinKey+d] dmenu                                                                     ║" +echo "║                                                                                      ║" +echo "║                                                                                      ║" +echo "║                                                                                      ║" +echo "╙──────────────────────────────────────────────────────────────────────────────────────╜" + +read -n1 -r key + +done diff --git a/dotfiles/scripts/working.sh b/dotfiles/scripts/working.sh new file mode 100755 index 0000000..d7484c6 --- /dev/null +++ b/dotfiles/scripts/working.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +tmuxp load /$HOME/.scripts/working_tmux.yaml diff --git a/dotfiles/scripts/working_tmux.yaml b/dotfiles/scripts/working_tmux.yaml new file mode 100644 index 0000000..d2bc453 --- /dev/null +++ b/dotfiles/scripts/working_tmux.yaml @@ -0,0 +1,15 @@ +session_name: work +windows: +- window_name: all +  layout: main-horizontal +  options: +    main-pane-height: 35 +  shell_command_before: +    - cd ~/                    # run as a first command in all panes +  panes: +    - shell_command: +      - weechat +      focus: true +    - clear; work +    - cals +    - clear; t diff --git a/dotfiles/scripts/write_on_disk.rb b/dotfiles/scripts/write_on_disk.rb new file mode 100644 index 0000000..dc6f280 --- /dev/null +++ b/dotfiles/scripts/write_on_disk.rb @@ -0,0 +1,63 @@ + + +    #!/usr/bin/env ruby +    require 'dbus' +    require 'awesome_print' +    require 'filesize' +    require 'colorize' +      +    loop = DBus::Main.new +    bus = DBus::SystemBus.instance +      +    udisk2   = bus['org.freedesktop.UDisks2'] +    device = nil +      +    EXPECTED_INTERFACES = %w[org.freedesktop.UDisks2.PartitionTable org.freedesktop.UDisks2.Block] +      +    manager = udisk2['/org/freedesktop/UDisks2']['org.freedesktop.DBus.ObjectManager'] +    manager.on_signal 'InterfacesAdded' do |path| +    	interfaces = udisk2[path].interfaces +    	next unless (EXPECTED_INTERFACES - interfaces).empty? +    	block = udisk2[path]['org.freedesktop.UDisks2.Block'] +      +    	path = path.split('/').last +      +    	drive = block['Drive'] +    	drive = udisk2[drive]['org.freedesktop.UDisks2.Drive'] +    	id = drive['Id'] +    	size = Filesize.new drive['Size'] +      +    	device = { path: path, id: id, size: size } +      +    	loop.quit +    end +      +    iso = ARGV.first +    size = File.size iso +    puts "#{'Plug a drive'.colorize :red} to begin to write #{iso.colorize :green} [#{Filesize.new(size).pretty.colorize :yellow}]" +      +    loop << bus +    loop.run +      +    print "Erase #{device[:id].colorize :red} [#{device[:size].pretty.colorize :yellow}]? [y/N] " +    answer = STDIN.gets.chomp +      +    exit -1 unless answer.downcase == 'y' +    device = File.join '/dev/', device[:path] +    current = 0 +    chunk = Filesize.from('4MiB').to_i +      +    File.open iso, 'rb' do |iso| +    	File.open device, 'wb' do |device| +    		while read = iso.read(chunk) do +    			current += read.size +    			device.write read +    			print "\r[%6.2f%%] %d/%d" % [current.to_f / size * 100, current, size] +    		end +    		puts +    		puts 'Finalizing...'.colorize :yellow +    	end +    end +    puts 'Done!'.colorize :green + + diff --git a/dotfiles/scripts/zsh_aliases_functions.sh b/dotfiles/scripts/zsh_aliases_functions.sh new file mode 100755 index 0000000..c6ac167 --- /dev/null +++ b/dotfiles/scripts/zsh_aliases_functions.sh @@ -0,0 +1,6 @@ +# fetch all zsh aliases  +alias | awk -F'[ =]' '{print $1}' + +# fetch all zsh functions +# http://superuser.com/questions/681575/any-way-to-get-list-of-functions-defined-in-zsh-like-alias-command-for-aliases +#print -l ${(ok)functions}  | 
