Merge branch 'master' of frogit:geoffrey/dotfiles

This commit is contained in:
Geoffrey Frogeye 2017-09-16 17:24:25 +00:00
commit 75462e7e5d
64 changed files with 4520 additions and 1008 deletions

View file

@ -1,3 +1,3 @@
#include ".Xresources.d/xft"
#include ".Xresources.d/solarized.dark"
#include ".Xresources.d/theme"
#include ".Xresources.d/xterm"

View file

@ -1,56 +0,0 @@
#define S_base03 #002b36
#define S_base02 #073642
#define S_base01 #586e75
#define S_base00 #657b83
#define S_base0 #839496
#define S_base1 #93a1a1
#define S_base2 #eee8d5
#define S_base3 #fdf6e3
*background: S_base03
*foreground: S_base0
*fadeColor: S_base03
*cursorColor: S_base1
*pointerColorBackground:S_base01
*pointerColorForeground:S_base1
#define S_yellow #b58900
#define S_orange #cb4b16
#define S_red #dc322f
#define S_magenta #d33682
#define S_violet #6c71c4
#define S_blue #268bd2
#define S_cyan #2aa198
#define S_green #859900
!! black dark/light
*color0: S_base02
*color8: S_base03
!! red dark/light
*color1: S_red
*color9: S_orange
!! green dark/light
*color2: S_green
*color10: S_base01
!! yellow dark/light
*color3: S_yellow
*color11: S_base00
!! blue dark/light
*color4: S_blue
*color12: S_base0
!! magenta dark/light
*color5: S_magenta
*color13: S_violet
!! cyan dark/light
*color6: S_cyan
*color14: S_base1
!! white dark/light
*color7: S_base2
*color15: S_base3

View file

@ -1,7 +1,5 @@
#!/usr/bin/env bash
wget "https://raw.githubusercontent.com/solarized/xresources/master/Xresources.light" -O solarized.light
wget "https://raw.githubusercontent.com/solarized/xresources/master/Xresources.dark" -O solarized.dark
mkdir -p $HOME/.local/share/fonts
echo $(for i in "" "%20Bold" "%20Oblique" "%20Bold%20Oblique"; do
cd $HOME/.local/share/fonts

View file

@ -1,56 +0,0 @@
#define S_base03 #002b36
#define S_base02 #073642
#define S_base01 #586e75
#define S_base00 #657b83
#define S_base0 #839496
#define S_base1 #93a1a1
#define S_base2 #eee8d5
#define S_base3 #fdf6e3
*background: S_base03
*foreground: S_base0
*fadeColor: S_base03
*cursorColor: S_base1
*pointerColorBackground:S_base01
*pointerColorForeground:S_base1
#define S_yellow #b58900
#define S_orange #cb4b16
#define S_red #dc322f
#define S_magenta #d33682
#define S_violet #6c71c4
#define S_blue #268bd2
#define S_cyan #2aa198
#define S_green #859900
!! black dark/light
*color0: S_base02
*color8: S_base03
!! red dark/light
*color1: S_red
*color9: S_orange
!! green dark/light
*color2: S_green
*color10: S_base01
!! yellow dark/light
*color3: S_yellow
*color11: S_base00
!! blue dark/light
*color4: S_blue
*color12: S_base0
!! magenta dark/light
*color5: S_magenta
*color13: S_violet
!! cyan dark/light
*color6: S_cyan
*color14: S_base1
!! white dark/light
*color7: S_base2
*color15: S_base3

View file

@ -1,56 +0,0 @@
#define S_base03 #002b36
#define S_base02 #073642
#define S_base01 #586e75
#define S_base00 #657b83
#define S_base0 #839496
#define S_base1 #93a1a1
#define S_base2 #eee8d5
#define S_base3 #fdf6e3
*background: S_base3
*foreground: S_base00
*fadeColor: S_base3
*cursorColor: S_base01
*pointerColorBackground:S_base1
*pointerColorForeground:S_base01
#define S_yellow #b58900
#define S_orange #cb4b16
#define S_red #dc322f
#define S_magenta #d33682
#define S_violet #6c71c4
#define S_blue #268bd2
#define S_cyan #2aa198
#define S_green #859900
!! black dark/light
*color0: S_base02
*color8: S_base03
!! red dark/light
*color1: S_red
*color9: S_orange
!! green dark/light
*color2: S_green
*color10: S_base01
!! yellow dark/light
*color3: S_yellow
*color11: S_base00
!! blue dark/light
*color4: S_blue
*color12: S_base0
!! magenta dark/light
*color5: S_magenta
*color13: S_violet
!! cyan dark/light
*color6: S_cyan
*color14: S_base1
!! white dark/light
*color7: S_base2
*color15: S_base3

36
Xresources.d/theme Normal file
View file

@ -0,0 +1,36 @@
! special
*.foreground: #f1ebeb
*.background: #272822
*.cursorColor: #f1ebeb
! black
*.color0: #48483e
*.color8: #76715e
! red
*.color1: #dc2566
*.color9: #fa2772
! green
*.color2: #8fc029
*.color10: #a7e22e
! yellow
*.color3: #d4c96e
*.color11: #e7db75
! blue
*.color4: #55bcce
*.color12: #66d9ee
! magenta
*.color5: #9358fe
*.color13: #ae82ff
! cyan
*.color6: #56b7a5
*.color14: #66efd5
! white
*.color7: #acada1
*.color15: #cfd0c2

View file

@ -10,3 +10,6 @@ xterm*rightScrollBar: false
xterm*jumpScroll: true
xterm*multiScroll: true
xterm*toolBar: false
XTerm.vt100.translations: #override \n\
Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\
Ctrl Shift <Key>V: insert-selection(CLIPBOARD)

218
bashrc
View file

@ -1,55 +1,79 @@
# Custom scripts
#
# ~/.bashrc
#
# ENVIRONMENT VARIABLES
# Region preferences
export LANG=fr_FR.utf8
export TZ=/usr/share/zoneinfo/Europe/Paris
#find ~/.scripts/ ~/.gscripts/ -type f -name "*.sh" | while read script; do
#source "$script"
#done
[ -f ~/.scripts/index.sh ] && source ~/.scripts/index.sh
[ -f ~/.gscripts/index.sh ] && source ~/.gscripts/index.sh
# Prompt
if [[ $USER == 'root' ]]; then
col=31;
elif [[ -n $ME ]]; then # $ME is a var set by my private config that is not empty if it is my account (and not a system account e.g. `git`)
col=32;
else
col=33;
fi
export USER=$(whoami)
PS1="\[\e]2;\u@\h \w\a\]\[\e[0;37m\][\[\e[0;${col}m\]\u\[\e[0;37m\]@\[\e[0;34m\]\h \[\e[0;36m\]\W\[\e[0;37m\]]\$\[\e[0m\] "
PS2="> "
PS3="+ "
PS4="- "
# Vars
# Favourite commands
export PAGER=less
export EDITOR=vim
export VISUAL=vim
export BROWSER=/usr/bin/qutebrowser
export TZ=/usr/share/zoneinfo/Europe/Paris
export BROWSER=qutebrowser
export PATH="$PATH:$HOME/.gem/ruby/2.3.0/bin/"
export LANG=fr_FR.utf8
export HISTSIZE=10000
export HISTFILESIZE=${HISTSIZE}
export HISTCONTROL=ignoreboth
# Some programs need those changes
export PATH="/usr/lib/ccache/bin/:$PATH"
if [ -d $HOME/.gem/ruby/2.4.0/bin ]; then
export PATH="$HOME/.gem/ruby/2.4.0/bin/:$PATH"
fi
#export PATH="$(echo "$PATH" | sed 's|:|\n|g' | sort | uniq | tr '\n' ':' | sed 's|:$||')"
export JAVA_FONTS=/usr/share/fonts/TTF
export ANDROID_HOME=/opt/android-sdk
export GOPATH=$HOME/.go
export PATH=$GOPATH/bin:$PATH
export XDG_CONFIG_HOME=$HOME/.config
export ARDUINO=/usr/share/arduino
export ARDUINO_DIR=$ARDUINO
export ARDMK_VENDOR=archlinux-arduino
if [ -z $XDG_CONFIG_HOME ]; then
export XDG_CONFIG_HOME=$HOME/.config
# ALIASES
# Completion for existing commands
export LS_OPTIONS='--group-directories-first --time-style=+"%d/%m/%Y %H:%M:%S" --color=auto --file-type --human-readable'
alias ls="ls $LS_OPTIONS"
alias grep='grep --color=tty -d skip'
alias mkdir='mkdir -v'
alias cp="cp -i"
alias mv="mv -iv"
alias dd='dd status=progress'
alias rm='rm -Iv --one-file-system'
alias free='free -m'
alias df='df -h'
alias pacman='pacman --color auto'
alias dmesg='dmesg --ctime'
# Frequent mistakes
alias systemclt=systemctl
# Shortcuts for commonly used commands
alias ll="ls -l $LS_OPTIONS"
alias la="ls -la $LS_OPTIONS"
alias al=sl
alias x='startx; logout'
alias s='sudo -s -E'
alias po='eval $(proxy off)'
alias nw="sudo systemctl restart NetworkManager"
alias mc="machines"
alias tracefiles="strace -f -t -e trace=file"
alias vpn="sudo systemctl start openvpn-client@$HOSTNAME"
alias vpno="sudo systemctl stop openvpn-client@$HOSTNAME"
alias vpns="sudo systemctl status openvpn-client@$HOSTNAME"
alias vpnr="sudo systemctl restart openvpn-client@$HOSTNAME"
# Superseding commands with better ones if they are present
if which vim &> /dev/null; then
alias vi='vim'
fi
if which gopass &> /dev/null; then
alias pass='gopass'
fi
if which wakeonlan &> /dev/null; then
alias wol='wakeonlan'
fi
# Tweaks
[[ $- != *i* ]] && return
if [ -f /etc/bash_completion ]; then . /etc/bash_completion; fi
xhost +local:root > /dev/null 2>&1
# SHELL CUSTOMIZATION
complete -cf sudo
@ -62,78 +86,60 @@ shopt -s extglob
shopt -s histappend
shopt -s hostcomplete
export LS_OPTIONS='--group-directories-first --time-style=+"%d/%m/%Y %H:%M" --color=auto --classify --human-readable'
alias ls="ls $LS_OPTIONS"
alias ll="ls -l $LS_OPTIONS"
alias la="ls -la $LS_OPTIONS"
alias al=sl
alias grep='grep --color=tty -d skip'
alias mkdir='mkdir -v'
alias cp="cp -i"
alias mv="mv -iv"
alias dd='dd status=progress'
alias rm='rm -Iv --one-file-system'
alias free='free -m'
alias df='df -h'
alias 49.3='sudo'
alias pacman='pacman --color auto'
alias x='startx; logout'
alias s='sudo -s -E'
export HISTSIZE=100000
export HISTFILESIZE=${HISTSIZE}
export HISTCONTROL=ignoreboth
# Solarized theme for tty, the dark version.
# Based on:
# - Solarized (http://ethanschoonover.com/solarized)
# - Xresources from http://github.com/altercation/solarized
# Generated with pty2tty.awk by Joep van Delft
# http://github.com/joepvd/tty-solarized
if [ "$TERM" = "linux" ]; then
echo -en "\e]PB657b83" # S_base00
echo -en "\e]PA586e75" # S_base01
echo -en "\e]P0073642" # S_base02
echo -en "\e]P62aa198" # S_cyan
echo -en "\e]P8002b36" # S_base03
echo -en "\e]P2859900" # S_green
echo -en "\e]P5d33682" # S_magenta
echo -en "\e]P1dc322f" # S_red
echo -en "\e]PC839496" # S_base0
echo -en "\e]PE93a1a1" # S_base1
echo -en "\e]P9cb4b16" # S_orange
echo -en "\e]P7eee8d5" # S_base2
echo -en "\e]P4268bd2" # S_blue
echo -en "\e]P3b58900" # S_yellow
echo -en "\e]PFfdf6e3" # S_base3
echo -en "\e]PD6c71c4" # S_violet
clear # against bg artifacts
# PROMPT CUSTOMIZATION
if [[ $USER == 'root' ]]; then
col=31;
elif [[ $USER == 'geoffrey' || $USER == 'gbontoux' || $USER == 'gpreud' ]]; then
col=32;
else
col=33;
fi
export PS1="\[\e]2;\u@\h \w\a\]\[\e[0;37m\][\[\e[0;${col}m\]\u\[\e[0;37m\]@\[\e[0;34m\]\h \[\e[0;36m\]\W\[\e[0;37m\]]\$\[\e[0m\] "
export PS2="> "
export PS3="+ "
export PS4="- "
# Utils
alias fuck='eval $(thefuck $(fc -ln -1))'
# CUSTOM SCRIPTS
export PATH="$HOME/.bin/:$HOME/.scripts/:$PATH"
[ -f ~/.gscripts/gprofile ] && source ~/.gscripts/gprofile
# UTILITIES
# Bash completion
[ -f /etc/bash_completion ] && . /etc/bash_completion
# Bad day mood-saver
function fuck {
if which thefuck &> /dev/null
then
eval $(thefuck --alias)
fuck $@
else
echo "thefuck is not installed on this system."
fi
}
alias FUCK='fuck'
# Command not found
[ -r /usr/share/doc/pkgfile/command-not-found.bash ] && . /usr/share/doc/pkgfile/command-not-found.bash
[ -r /etc/profile.d/cnf.sh ] && . /etc/profile.d/cnf.sh
# Functions
function clean {
find . -type d -name bower_components -or -name node_modules -print0 | while read file; do
rm -rf "$file"
done
find . -type f -name Makefile -print0 | while IFS= read -r -d '' file; do
echo "--> $file"
(cd "${file//Makefile}"; make clean)
done
find . -type d -name .git -print0 | while IFS= read -r -d '' dir; do
echo "--> $file"
(cd "$dir"; git gc)
done
# Node Version Manager
function nvm {
export NVM_DIR="$HOME/.nvm"
if [ -s "$NVM_DIR/nvm.sh" ]
then
. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm $@
else
echo "NVM is not installed on this system."
fi
}
function dafont {
wget "http://dl.dafont.com/dl/?f=$1" -O /tmp/dafont.zip
unzip /tmp/dafont.zip -d ~/.local/share/fonts -x *.txt
rm -rf /tmp/dafont.zip
}
alias nw="sudo systemctl restart NetworkManager"
# Command not found handlers
[ -r /usr/share/doc/pkgfile/command-not-found.bash ] && . /usr/share/doc/pkgfile/command-not-found.bash # Arch
[ -r /etc/profile.d/cnf.sh ] && . /etc/profile.d/cnf.sh # Arch (alternative, for Manjaro mostly)

2
bin/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*
!.gitignore

View file

@ -1,15 +1,15 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
fields=0 48 17 18 38 39 40 2 46 47 49 1
sort_key=46
sort_key=47
sort_direction=1
hide_threads=0
hide_kernel_threads=0
hide_userland_threads=0
hide_kernel_threads=1
hide_userland_threads=1
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
show_program_path=0
highlight_base_name=1
highlight_megabytes=0
highlight_threads=1
tree_view=0

10
config/i3/autorandrdefaultmenu Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
shopt -s nullglob globstar
profile=$(echo -e "$(autorandr 2>&1 | cut -d' ' -f1)" | ~/.config/i3/dmenu_cmd -p "Default profile" "$@")
[[ -n $profile ]] || exit
autorandr --default "$profile"

10
config/i3/autorandrloadmenu Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
shopt -s nullglob globstar
profile=$(echo -e "common\nhorizontal\nvertical\n$(autorandr 2>&1 | cut -d' ' -f1)" | ~/.config/i3/dmenu_cmd -p "Load profile" "$@")
[[ -n $profile ]] || exit
autorandr --load "$profile"

10
config/i3/autorandrremovemenu Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
shopt -s nullglob globstar
profile=$(echo -e "$(autorandr 2>&1 | cut -d' ' -f1)" | ~/.config/i3/dmenu_cmd -p "Remove profile" "$@")
[[ -n $profile ]] || exit
autorandr --remove "$profile"

10
config/i3/autorandrsavemenu Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
shopt -s nullglob globstar
profile=$(echo -e "$(autorandr 2>&1 | cut -d' ' -f1)" | ~/.config/i3/dmenu_cmd -p "Save profile" "$@")
[[ -n $profile ]] || exit
autorandr --save "$profile"

View file

@ -22,6 +22,7 @@ hide_edge_borders both
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:Source Code Pro 8
font pango:DejaVu Sans Mono 8
font pango:Sans 8
@ -38,7 +39,7 @@ bindsym $mod+F2 exec --no-startup-id ~/.config/i3/dmenu_run
bindsym Mod1+F2 exec --no-startup-id ~/.config/i3/dmenu_run
bindsym $mod+c exec --no-startup-id ~/.config/i3/passmenu
bindsym $mod+x exec --no-startup-id ~/.config/i3/clipmenu
#bindsym $mod+x exec --no-startup-id ~/.config/i3/clipmenu
bindsym $mod+asterisk exec --no-startup-id ~/.config/i3/sshmenu
bindsym $mod+dollar exec --no-startup-id ~/.config/i3/sshmenu root
@ -51,7 +52,7 @@ set $up_bar killall -USR1 i3status
# Start Applications
bindsym $mod+Return exec xterm
bindsym $mod+p exec thunar
bindsym $mod+m exec qutebrowser
bindsym $mod+m exec qutebrowser --override-restore --backend=webengine
# Volume control
#bindsym XF86AudioRaiseVolume exec amixer -q set Master 5+ unmute; exec $up_bar
@ -102,7 +103,7 @@ bindsym $mod+Shift+l move right
#bindsym $mod+Shift+Right move right
# workspace back and forth (with/without active container)
workspace_auto_back_and_forth yes
workspace_auto_back_and_forth no
bindsym $mod+b workspace back_and_forth
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth
@ -133,27 +134,27 @@ bindsym $mod+a focus parent
bindsym $mod+q focus child
# Workspace names
set $WS1 1 Édition
set $WS2 2 Éxecution
set $WS3 3 Organisation
set $WS4 4 Référence
set $WS5 5 Divers 1
set $WS6 6 Divers 2
set $WS7 7 Contact
set $WS8 8 Social
set $WS9 9 Veille
set $WS10 10 Musique
set $WS1 1
set $WS2 2
set $WS3 3
set $WS4 4
set $WS5 5
set $WS6 6
set $WS7 7
set $WS8 8
set $WS9 9
set $WS10 10
# Workspace output
workspace "$WS1" output LVDS1
workspace "$WS2" output VGA1
workspace "$WS3" output LVDS1
workspace "$WS4" output VGA1
workspace "$WS5" output LVDS1
workspace "$WS6" output VGA1
workspace "$WS7" output LVDS1
workspace "$WS8" output VGA1
workspace "$WS9" output LVDS1
workspace "$WS1" output LVDS1
workspace "$WS2" output VGA1
workspace "$WS3" output LVDS1
workspace "$WS4" output VGA1
workspace "$WS5" output LVDS1
workspace "$WS6" output VGA1
workspace "$WS7" output LVDS1
workspace "$WS8" output VGA1
workspace "$WS9" output LVDS1
workspace "$WS10" output VGA1
# switch to workspace
@ -301,66 +302,55 @@ mode "Resize" {
bindsym $mod+r mode "Resize"
set $background exec --no-startup-id feh --bg-fill $HOME/.config/i3/bg.jpg
bindsym $mod+Shift+a $background
set $mode_screen_select [V] VGA1 [H] HDMI1
mode "$mode_screen_select" {
bindsym v mode "$mode_screen_VGA1"
bindsym h mode "$mode_screen_HDMI1"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+t mode "$mode_screen_select"
set $mode_screen_VGA1 VGA [R] Right [L] Left [U] Up [D] Down [C] Copy [O] Off
mode "$mode_screen_VGA1" {
bindsym r exec xrandr --output VGA1 --auto --right-of LVDS1; $background
bindsym l exec xrandr --output VGA1 --auto --left-of LVDS1; $background
bindsym u exec xrandr --output VGA1 --auto --above LVDS1; $background
bindsym d exec xrandr --output VGA1 --auto --below LVDS1; $background
bindsym c exec xrandr --output VGA1 --auto --same-as LVDS1; $background
bindsym o exec xrandr --output VGA1 --auto --off; $background
set $mode_screen Screen setup [A] Auto [L] Load [S] Save [R] Remove [D] Default
bindsym $mod+t mode "$mode_screen"
mode "$mode_screen" {
bindsym a exec autorandr --change --force, mode "default"
bindsym l exec ~/.config/i3/autorandrloadmenu, mode "default"
bindsym s exec ~/.config/i3/autorandrsavemenu, mode "default"
bindsym r exec ~/.config/i3/autorandrremovemenu, mode "default"
bindsym d exec ~/.config/i3/autorandrdefaultmenu, mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
set $mode_screen_HDMI1 HDMI [R] Right [L] Left [U] Up [D] Down [C] Copy [O] Off
mode "$mode_screen_HDMI1" {
bindsym r exec xrandr --output HDMI1 --auto --right-of LVDS1; $background
bindsym l exec xrandr --output HDMI1 --auto --left-of LVDS1; $background
bindsym u exec xrandr --output HDMI1 --auto --above LVDS1; $background
bindsym d exec xrandr --output HDMI1 --auto --below LVDS1; $background
bindsym c exec xrandr --output HDMI1 --auto --same-as LVDS1; $background
bindsym o exec xrandr --output HDMI1 --auto --off; $background
# Screen temperature ("redness") setting
bindsym $mod+y mode "$mode_temp"
set $mode_temp Temperature [R] Red [D] Dust storm [C] Campfire [O] Normal [A] All nighter [B] Blue
mode "$mode_temp" {
bindsym r exec sct 1000
bindsym d exec sct 2000
bindsym c exec sct 4500
bindsym o exec sct
bindsym a exec sct 8000
bindsym b exec sct 10000
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
# Start i3bar to display a workspace bar (plus the system information i3status if available)
bar {
#i3bar_command ~/.config/lemonbar/i3_lemonbar.sh
mode hide
status_command i3status
# wheel_up_cmd nop
# wheel_down_cmd nop
font pango:DejaVu Sans Mono 9
font pango:Sans 8
colors {
separator #4E9C00
background #333333
statusline #FFFFFF
focused_workspace #4E9C00 #4E9C00 #FFFFFF
active_workspace #333333 #333333 #FFFFFF
inactive_workspace #333333 #222222 #888888
urgent_workspace #C20000 #C20000 #FFFFFF
}
}
# Colors
set $bg #272822
set $fg #f1ebeb
set $00 #48483e
set $01 #dc2566
set $02 #8fc029
set $03 #d4c96e
set $04 #55bcce
set $05 #9358fe
set $06 #56b7a5
set $07 #acada1
set $08 #76715e
set $09 #fa2772
set $10 #a7e22e
set $11 #e7db75
set $12 #66d9ee
set $13 #ae82ff
set $14 #66efd5
set $15 #cfd0c2
# Inactivity settings
exec --no-startup-id xautolock -time 10 -locker 'xset dpms force standby' -killtime 1 -killer '$locker'
@ -369,26 +359,26 @@ bindsym $mod+F5 exec --no-startup-id xautolock -enable
# Autostart applications
$background
exec --no-startup-id autorandr --change # Screen configuration and everything that depends on it
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 # Password remembering
exec --no-startup-id gnome-keyring-daemon # Password remembering
exec --no-startup-id numlockx on # Activate Num lock
#exec --no-startup-id nm-applet # Network manager tray icon
#exec --no-startup-id compton -b # Compositing manager
#exec --no-startup-id conky -c $HOME/.conky/status # Desktop widget
exec --no-startup-id unclutter # Hide mouse cursor after some time
exec --no-startup-id dunst # Notifications
exec --no-startup-id $HOME/.config/i3/clipmenud # Clipboard manager
exec --no-startup-id keynav # Keyboard cursor controller
#exec --no-startup-id $HOME/.config/i3/clipmenud # Clipboard manager
exec --no-startup-id mpd # Music Player Daemon
# Autostart programs
#exec --no-startup-id i3-msg 'workspace $WS8; exec firefox --new-window tweetdeck.twitter.com'
#exec --no-startup-id i3-msg 'workspace $WS9; exec firefox --new-window rss.frogeye.fr'
#exec --no-startup-id clementine
#exec --no-startup-id evolution
#exec --no-startup-id pidgin
set $ignore #ff00000
# Theme colors
client.focused #4E9C00 #4E9C00 #FFFFFF #FFFFFF
client.focused_inactive #1B3600 #1B3600 #888888 #FFFFFF
client.unfocused #333333 #333333 #888888 #FFFFFF
client.urgent #C20000 #C20000 #FFFFFF #FFFFFF
# class border backgr. text indicator child_border
client.focused $02 $02 $bg $07 $10
client.focused_inactive $03 $03 $08 $15 $14
client.unfocused $08 $08 $fg $11 $00
client.urgent $01 $01 $fg $05 $09
client.placeholder $ignore $06 $fg $ignore $14
client.background $15

View file

@ -1,2 +1,2 @@
#!/bin/sh
dmenu -fn 'DejaVu Sans Mono-10' -nb '#222222' -nf '#888888' -sb '#4E9C00' -sf '#FFFFFF' -l 8 -f -i -h 19 "$@"
dmenu -fn 'DejaVu Sans Mono-10' -nb '#48483e' -nf '#f1ebeb' -sb '#8fc029' -sf '#272822' -l 8 -f -i -h 19 "$@"

View file

@ -7,6 +7,6 @@ if [ $? -ne 0 ]; then
}
trap revert SIGHUP SIGINT SIGTERM
xset dpms 5 5 5
i3lock --nofork --color 648901 --ignore-empty-password
i3lock --nofork --color 648901 --image=$HOME/.config/i3/lock.png --tiling --ignore-empty-password
revert
fi

BIN
config/i3/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

1
config/i3/lock.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" height="50" width="50"><path fill="#82a401" d="M0 50h50V0H0z"/><path d="M0 0l50 50H25L0 25zm50 0v25L25 0z" fill="#466c01"/></svg>

After

Width:  |  Height:  |  Size: 189 B

View file

@ -1,9 +1,9 @@
#!/bin/bash
if [ "$1" == 'root' ]; then
a=" (root)"
b="sudo -E "
b="-t 'sudo -s'"
fi
machine=$(cat ~/.ssh/config | grep '^Host ' | cut -d ' ' -f 2 | grep -v '*' | sort | $HOME/.config/i3/dmenu_cmd -p "SSH$a to ")
if [ ! -z $machine ]; then
xterm -e "ssh $machine -t '${b}bash --login'"
xterm -e "ssh $machine $b"
fi

View file

@ -36,7 +36,7 @@ ethernet eth0 {
ethernet usb0 {
# if you use %speed, i3status requires the cap_net_admin capability
format_up = " %ip"
format_down = ""
format_down = "📱"
}
cpu_usage {
@ -56,11 +56,11 @@ battery 0 {
path_exists VPN {
# path exists when a VPN tunnel launched by nmcli/nm-applet is active
path = "/proc/sys/net/ipv4/conf/tun0"
format = ""
format = "🔐"
}
tztime local {
format = "%d/%m/%Y %H:%M:%S"
format = "🕘 %d/%m/%Y %H:%M:%S"
timezone = "Europe/Paris"
}
@ -76,8 +76,8 @@ disk "/home" {
format = " %avail / %total"
}
volume master {
format = " %volume"
format_muted = " %volume"
format = "🔈 %volume"
format_muted = "🔇 %volume"
device = "default"
mixer = "Master"
mixer_idx = 0

24
config/linuxColors.sh Normal file
View file

@ -0,0 +1,24 @@
#!/bin/sh
if [ "$TERM" = "linux" ]; then
/bin/echo -e "
\e]P048483e
\e]P1dc2566
\e]P28fc029
\e]P3d4c96e
\e]P455bcce
\e]P59358fe
\e]P656b7a5
\e]P7acada1
\e]P876715e
\e]P9fa2772
\e]PAa7e22e
\e]PBe7db75
\e]PC66d9ee
\e]PDae82ff
\e]PE66efd5
\e]PFcfd0c2
"
# get rid of artifacts
clear
fi

342
config/polybar/config Normal file
View file

@ -0,0 +1,342 @@
;=====================================================
;
; To learn more about how to configure Polybar
; go to https://github.com/jaagr/polybar
;
; The README contains alot of information
;
;=====================================================
[theme]
foreground = #f1ebeb
background = #272822
blackB = #48483e
blackF = #76715e
redB = #dc2566
redF = #fa2772
greenB = #8fc029
greenF = #a7e22e
yellowB = #d4c96e
yellowF = #e7db75
blueB = #55bcce
blueF = #66d9ee
magentaB = #9358fe
magentaF = #ae82ff
cyanB = #56b7a5
cyanF = #66efd5
whiteB = #acada1
whiteF = #cfd0c2
[colors]
background = ${theme.blackB}
foreground = ${theme.foreground}
[bar/base]
monitor = ${env:display:LVDS1}
width = 100%
height = 20
fixed-center = false
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 0
border-size = 0
border-color = ${colors.background}
padding-left = 2
padding-right = 2
module-margin-left = 1
module-margin-right = 1
font-0 = "Font Awesome:size=10;0"
font-1 = "DejaVu Sans:size=10;0"
font-2 = "DejaVu Sans Mono for Powerline:pixelsize=10;0"
modules-left = i3
;wm-restack = bspwm
wm-restack = i3
;override-redirect = true
;scroll-up = bspwm-desknext
;scroll-down = bspwm-deskprev
;scroll-up = i3wm-wsnext
;scroll-down = i3wm-wsprev
bottom = true
enable-ipc = true
[bar/primary]
inherit = bar/base
modules-right = cpu memory temperature eth wlan xbacklight volume battery date
tray-position = right
tray-padding = 2
tray-transparent = false
[bar/secondary]
inherit = bar/base
modules-center = mpd
modules-right = ethMore wlanMore filesystem xbacklight volume date
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
mount-1 = /home
label-mounted-foreground = ${theme.magentaB}
label-mounted = %{F#ae81ff}%mountpoint%%{F-} %free%
label-unmounted =
[module/i3]
type = internal/i3
pin-workspaces = true
strip-wsnumbers = false
index-sort = true
enable-click = true
enable-scroll = true
wrapping-scroll = false
reverse-scroll = true
fuzzy-match = false
ws-icon-0 = "1;"
ws-icon-1 = "2;"
ws-icon-2 = "3;"
ws-icon-3 = "4;"
ws-icon-4 = "5;▲"
ws-icon-5 = "6;▲"
ws-icon-6 = "7;"
ws-icon-7 = "8;"
ws-icon-8 = "9;"
ws-icon-9 = "10;"
ws-icon-default = ?
format = <label-state> <label-mode>
label-mode = %mode%
label-mode-padding = 2
label-mode-background = ${theme.redB}
label-focused = %index% %icon%
label-focused-foreground = ${theme.background}
label-focused-background = ${theme.greenB}
label-focused-padding = 2
label-unfocused = ${self.label-focused}
label-unfocused-padding = ${self.label-focused-padding}
label-visible = ${self.label-focused}
label-visible-padding = ${self.label-focused-padding}
label-visible-foreground = ${theme.greenF}
label-urgent = ${self.label-focused}
label-urgent-padding = ${self.label-focused-padding}
label-urgent-foreground = ${theme.foreground}
label-urgent-background = ${theme.redB}
[module/mpd]
type = internal/mpd
; format-online = <icon-prev> <icon-seekb> <icon-stop> <toggle> <icon-seekf> <icon-next> <icon-repeat> <icon-random> <bar-progress> <label-time> <label-song>
format-online = <icon-prev> <icon-seekb> <icon-stop> <toggle> <icon-seekf> <icon-next> <icon-repeat> <icon-random> <label-time> <label-song>
format-playing = ${self.format-online}
format-paused = ${self.format-online}
format-stopped = <toggle>
label-song =  %title% - %artist%
label-song-maxlen = 35
label-song-ellipsis = true
label-time = %elapsed%/%total%
label-offline =
icon-play = 
icon-pause = 
icon-stop = 
icon-prev = 
icon-next = 
icon-seekb = 
icon-seekf = 
icon-random = 
icon-repeat = 
icon-repeatone = 1
toggle-on-foreground = ${theme.foreground}
toggle-off-foreground = #55
[module/xbacklight]
type = internal/xbacklight
output = ${env:display:LVDS1}
enable-scroll = true
format = <ramp>
ramp-0 = 🌕
ramp-1 = 🌔
ramp-2 = 🌓
ramp-3 = 🌒
ramp-4 = 🌑
format-foreground = ${theme.redF}
[module/backlight-acpi]
inherit = module/xbacklight
type = internal/backlight
card = intel_backlight
[module/cpu]
type = internal/cpu
interval = 0.5
format = <ramp-coreload>
format-foreground = ${theme.redF}
ramp-coreload-0 = ▁
ramp-coreload-1 = ▂
ramp-coreload-2 = ▃
ramp-coreload-3 = ▄
ramp-coreload-4 = ▅
ramp-coreload-5 = ▆
ramp-coreload-6 = ▇
ramp-coreload-7 = █
[module/memory]
type = internal/memory
interval = 2
format-foreground = ${theme.greenF}
label =  %gb_free%
[module/eth]
type = internal/network
interface = ${env:ethI:eth0}
interval = 1
format-connected =  <label-connected>
label-connected = %local_ip%
format-connected-foreground = ${theme.blueF}
format-disconnected =
[module/ethMore]
inherit = module/eth
label-connected = ↑%upspeed% ↓%downspeed%
[module/wlan]
type = internal/network
interface = ${env:wlanI:wlan0}
interval = 1
format-connected = <ramp-signal> <label-connected>
label-connected = %local_ip% %essid%
format-connected-foreground = ${theme.cyanF}
format-disconnected =
ramp-signal-0 = ▁
ramp-signal-1 = ▂
ramp-signal-2 = ▃
ramp-signal-3 = ▄
ramp-signal-4 = ▅
ramp-signal-5 = ▆
ramp-signal-6 = ▇
ramp-signal-7 = █
animation-packetloss-0 = 
animation-packetloss-1 = 
animation-packetloss-framerate = 500
[module/wlanMore]
inherit = module/wlan
label-connected = ↑%upspeed% ↓%downspeed%
[module/date]
type = internal/date
interval = 1
date = " %d/%m/%Y"
time =  %H:%M:%S
format = <label>
format-foreground = ${theme.cyanF}
label = %date% %time%
[module/volume]
type = internal/volume
master-soundcard = default
format-volume = <ramp-volume> <label-volume>
format-volume-foreground = ${theme.greenF}
label-muted = 
label-muted-foreground = #66
format-muted-foreground = ${self.format-volume-foreground}
ramp-volume-0 = 
ramp-volume-1 = 
ramp-volume-2 = 
[module/battery]
type = internal/battery
battery = BAT0
adapter = ADP0
full-at = 100
time-format = %H:%M
label-full = 
format-charging = <ramp-capacity> <label-charging>
format-charging-foreground = ${theme.yellowF}
label-charging = %percentage%% (%time%)
format-discharging = <ramp-capacity> <label-discharging>
format-discharging-foreground = ${self.format-charging-foreground}
format-discharging-background = ${theme.redB}
label-discharging = %percentage%% (%time%)
format-full-prefix = " "
format-full-foreground = ${self.format-charging-foreground}
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 
[module/temperature]
type = internal/temperature
thermal-zone = 2
warn-temperature = 70
format = <ramp> <label>
format-foreground = ${theme.yellowB}
label = %temperature%
format-warn = <ramp> <label-warn>
format-warn-foreground = ${self.format-foreground}
format-warn-background = ${theme.redB}
label-warn = %temperature%
ramp-0 = 
ramp-1 = 
ramp-2 = 
ramp-3 = 
[settings]
screenchange-reload = true
;compositing-background = xor
;compositing-background = screen
;compositing-foreground = source
;compositing-border = over
[global/wm]
margin-top = 5
margin-bottom = 5
; vim:ft=dosini

28
config/polybar/launch.sh Executable file
View file

@ -0,0 +1,28 @@
#!/usr/bin/env sh
# Terminate already running bar instances
killall -q polybar
# Wait until the processes have been shut down
while pgrep -x polybar >/dev/null; do sleep 1; done
# Getting some vars
primary=$(xrandr | grep primary | head -1 | cut -d' ' -f1)
export ethI=$(/bin/ls /sys/class/net/ | grep ^enp* | head -1)
export wlanI=$(/bin/ls /sys/class/net/ | grep ^wl* | head -1)
# Launch bar for each display
polybar -m | cut -d':' -f1 | while read display
do
export display=$display
if [ "$display" == "$primary" ]
then
bar="primary"
else
bar="secondary"
fi
polybar $bar &
done
echo "Bars launched..."

View file

View file

@ -0,0 +1,701 @@
# vim: ft=conf
#
# In this config file, qutebrowser's key bindings are configured.
# The format looks like this:
#
# [keymode]
#
# command
# keychain
# keychain2
# ...
#
# All blank lines and lines starting with '#' are ignored.
# Inline-comments are not permitted.
#
# keymode is a comma separated list of modes in which the key binding should be
# active. If keymode starts with !, the key binding is active in all modes
# except the listed modes.
#
# For special keys (can't be part of a keychain), enclose them in `<`...`>`.
# For modifiers, you can use either `-` or `+` as delimiters, and these names:
#
# * Control: `Control`, `Ctrl`
# * Meta: `Meta`, `Windows`, `Mod4`
# * Alt: `Alt`, `Mod1`
# * Shift: `Shift`
#
# For simple keys (no `<>`-signs), a capital letter means the key is pressed
# with Shift. For special keys (with `<>`-signs), you need to explicitly add
# `Shift-` to match a key pressed with shift.
#
# Note that default keybindings are always bound, and need to be explicitly
# unbound if you wish to remove them:
#
# <unbound>
# keychain
# keychain2
# ...
[!normal]
leave-mode
<escape>
<ctrl-[>
[normal]
# Keybindings for normal mode.
clear-keychain ;; search ;; fullscreen --leave
<escape>
set-cmd-text -s :open
o
set-cmd-text :open {url:pretty}
go
set-cmd-text -s :open -t
O
set-cmd-text :open -t -i {url:pretty}
gO
set-cmd-text -s :open -b
xo
set-cmd-text :open -b -i {url:pretty}
xO
set-cmd-text -s :open -w
wo
set-cmd-text :open -w {url:pretty}
wO
set-cmd-text /
/
set-cmd-text ?
?
set-cmd-text :
:
open -t
ga
<ctrl-t>
open -w
<ctrl-n>
tab-close
d
<ctrl-w>
tab-close -o
D
tab-only
co
tab-focus
T
tab-move
gm
tab-move -
gl
tab-move +
gr
tab-next
L
<ctrl-pgdown>
tab-prev
H
<ctrl-pgup>
tab-clone
gC
reload
r
<f5>
reload -f
R
<ctrl-f5>
back
J
<back>
back -t
tj
back -w
wj
forward
K
<forward>
forward -t
tk
forward -w
wk
fullscreen
<f11>
hint
f
hint all tab
F
hint all window
wf
hint all tab-bg
;b
hint all tab-fg
;f
hint all hover
;h
hint images
;i
hint images tab
;I
hint links fill :open {hint-url}
;o
hint links fill :open -t -i {hint-url}
;O
hint links yank
;y
hint links yank-primary
;Y
hint --rapid links tab-bg
;r
hint --rapid links window
;R
hint links download
;d
hint inputs
;t
scroll left
h
scroll down
j
scroll up
k
scroll right
l
undo
u
<ctrl-shift-t>
scroll-perc 0
gg
scroll-perc
G
search-next
n
search-prev
N
enter-mode insert
i
enter-mode caret
v
enter-mode set_mark
`
enter-mode jump_mark
'
yank
yy
yank -s
yY
yank title
yt
yank title -s
yT
yank domain
yd
yank domain -s
yD
yank pretty-url
yp
yank pretty-url -s
yP
open -- {clipboard}
pp
open -- {primary}
pP
open -t -- {clipboard}
Pp
open -t -- {primary}
PP
open -w -- {clipboard}
wp
open -w -- {primary}
wP
quickmark-save
m
set-cmd-text -s :quickmark-load
b
set-cmd-text -s :quickmark-load -t
B
set-cmd-text -s :quickmark-load -w
wb
bookmark-add
M
set-cmd-text -s :bookmark-load
gb
set-cmd-text -s :bookmark-load -t
gB
set-cmd-text -s :bookmark-load -w
wB
save
sf
set-cmd-text -s :set
ss
set-cmd-text -s :set -t
sl
set-cmd-text -s :bind
sk
zoom-out
-
zoom-in
+
zoom
=
navigate prev
[[
navigate next
]]
navigate prev -t
{{
navigate next -t
}}
navigate up
gu
navigate up -t
gU
navigate increment
<ctrl-a>
navigate decrement
<ctrl-x>
inspector
wi
download
gd
download-cancel
ad
download-clear
cd
view-source
gf
set-cmd-text -s :buffer
gt
tab-focus last
<ctrl-tab>
enter-mode passthrough
<ctrl-v>
quit
<ctrl-q>
scroll-page 0 1
<ctrl-f>
scroll-page 0 -1
<ctrl-b>
scroll-page 0 0.5
<ctrl-d>
scroll-page 0 -0.5
<ctrl-u>
tab-focus 1
<alt-1>
tab-focus 2
<alt-2>
tab-focus 3
<alt-3>
tab-focus 4
<alt-4>
tab-focus 5
<alt-5>
tab-focus 6
<alt-6>
tab-focus 7
<alt-7>
tab-focus 8
<alt-8>
tab-focus 9
<alt-9>
home
<ctrl-h>
stop
<ctrl-s>
print
<ctrl-alt-p>
open qute:settings
Ss
follow-selected
<return>
<ctrl-m>
<ctrl-j>
<shift-return>
<enter>
<shift-enter>
follow-selected -t
<ctrl-return>
<ctrl-enter>
repeat-command
.
record-macro
q
run-macro
@
wq
ZZ
tab-focus -1
g$
tab-pin
<ctrl-p>
[insert]
# Keybindings for insert mode.
# Since normal keypresses are passed through, only special keys are
# supported in this mode.
# Useful hidden commands to map in this section:
# * `open-editor`: Open a texteditor with the focused field.
# * `paste-primary`: Paste primary selection at cursor position.
open-editor
<ctrl-e>
insert-text {primary}
<shift-ins>
[hint]
# Keybindings for hint mode.
# Since normal keypresses are passed through, only special keys are
# supported in this mode.
# Useful hidden commands to map in this section:
# * `follow-hint`: Follow the currently selected hint.
follow-hint
<return>
<ctrl-m>
<ctrl-j>
<shift-return>
<enter>
<shift-enter>
hint --rapid links tab-bg
<ctrl-r>
hint links
<ctrl-f>
hint all tab-bg
<ctrl-b>
[command]
# Keybindings for command mode.
# Since normal keypresses are passed through, only special keys are
# supported in this mode.
# Useful hidden commands to map in this section:
# * `command-history-prev`: Switch to previous command in history.
# * `command-history-next`: Switch to next command in history.
# * `completion-item-focus`: Select another item in completion.
# * `command-accept`: Execute the command currently in the commandline.
command-history-prev
<ctrl-p>
command-history-next
<ctrl-n>
completion-item-focus prev
<shift-tab>
<up>
completion-item-focus next
<tab>
<down>
completion-item-focus next-category
<ctrl-tab>
completion-item-focus prev-category
<ctrl-shift-tab>
completion-item-del
<ctrl-d>
command-accept
<return>
<ctrl-m>
<ctrl-j>
<shift-return>
<enter>
<shift-enter>
[prompt]
# Keybindings for prompts in the status line.
# You can bind normal keys in this mode, but they will be only active
# when a yes/no-prompt is asked. For other prompt modes, you can only
# bind special keys.
# Useful hidden commands to map in this section:
# * `prompt-accept`: Confirm the entered value.
# * `prompt-accept yes`: Answer yes to a yes/no question.
# * `prompt-accept no`: Answer no to a yes/no question.
prompt-accept
<return>
<ctrl-m>
<ctrl-j>
<shift-return>
<enter>
<shift-enter>
prompt-accept yes
y
prompt-accept no
n
prompt-open-download
<ctrl-x>
prompt-item-focus prev
<shift-tab>
<up>
prompt-item-focus next
<tab>
<down>
[command,prompt]
rl-backward-char
<ctrl-b>
rl-forward-char
<ctrl-f>
rl-backward-word
<alt-b>
rl-forward-word
<alt-f>
rl-beginning-of-line
<ctrl-a>
rl-end-of-line
<ctrl-e>
rl-unix-line-discard
<ctrl-u>
rl-kill-line
<ctrl-k>
rl-kill-word
<alt-d>
rl-unix-word-rubout
<ctrl-w>
rl-backward-kill-word
<alt-backspace>
rl-yank
<ctrl-y>
rl-delete-char
<ctrl-?>
rl-backward-delete-char
<ctrl-h>
[caret]
toggle-selection
v
<space>
drop-selection
<ctrl-space>
enter-mode normal
c
move-to-next-line
j
move-to-prev-line
k
move-to-next-char
l
move-to-prev-char
h
move-to-end-of-word
e
move-to-next-word
w
move-to-prev-word
b
move-to-start-of-next-block
]
move-to-start-of-prev-block
[
move-to-end-of-next-block
}
move-to-end-of-prev-block
{
move-to-start-of-line
0
move-to-end-of-line
$
move-to-start-of-document
gg
move-to-end-of-document
G
yank selection -s
Y
yank selection
y
<return>
<ctrl-m>
<ctrl-j>
<shift-return>
<enter>
<shift-enter>
scroll left
H
scroll down
J
scroll up
K
scroll right
L

File diff suppressed because it is too large Load diff

View file

@ -1,2 +1,3 @@
*.swp
*.swo
*.ycm_extra_conf.py

37
inputrc
View file

@ -1,16 +1,35 @@
$include /etc/inputrc
set bell-style none
set completion-ignore-case on
set completion-prefix-display-length 4
set completion-query-items 200
set editing-mode vi
set history-preserve-point on
set history-size 10000
set horizontal-scroll-mode off
set mark-directories on
set mark-modified-lines off
set mark-symlinked-directories on
set match-hidden-files on
set page-completions on
set print-completions-horizontally on
set revert-all-at-newline off
set show-all-if-ambiguous on
set show-all-if-unmodified on
set skip-completed-text on
set visible-stats on
set page-completions off
$if mode=vi
set keymap vi-command
# these are for vi-command mode
"\e[A": history-search-backward
"\e[B": history-search-forward
set keymap vi-insert
# these are for vi-insert mode
"\e[A": history-search-backward
"\e[B": history-search-forward
set keymap vi-command
# these are for vi-command mode
"\e[A": history-search-backward
"\e[B": history-search-forward
Control-l: clear-screen
set keymap vi-insert
# these are for vi-insert mode
"jk": vi-movement-mode
"\e[A": history-search-backward
"\e[B": history-search-forward
Control-l: clear-screen
$endif

12
profile
View file

@ -1,8 +1,12 @@
#
# ~/.profile
#
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s` > /dev/null
fi
[[ -f ~/.bashrc ]] && . ~/.bashrc
# SSH agent
[[ -z "$SSH_AUTH_SOCK" && -x "$(which ssh-agent)" ]] && eval `ssh-agent -s` &> /dev/null
# TTY Colors
[ -f "$HOME/.config/linuxColors.sh" ] && . "$HOME/.config/linuxColors.sh"
# Bashrc
[ -f ~/.bashrc ] && . ~/.bashrc

2
scripts/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
sct
node_modules

16
scripts/cleandev Executable file
View file

@ -0,0 +1,16 @@
#!/usr/bin/env bash
# Removes files that can be regenerated
# from a dev environment
find . -type d -name bower_components -or -name node_modules -print0 | while read file; do
rm -rf "$file"
done
find . -type f -name Makefile -print0 | while IFS= read -r -d '' file; do
echo "--> $file"
(cd "${file//Makefile}"; make clean)
done
find . -type d -name .git -print0 | while IFS= read -r -d '' dir; do
echo "--> $file"
(cd "$dir"; git gc)
done

8
scripts/dafont Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env bash
# Downloads a font from dafont.com and
# extracts it in the user's font dir
wget "http://dl.dafont.com/dl/?f=$1" -O /tmp/dafont.zip
unzip /tmp/dafont.zip -d ~/.local/share/fonts -x *.txt
rm -rf /tmp/dafont.zip

View file

@ -2,34 +2,38 @@
# Installs Debian packages on a Debian system
# with no root access, in the user home
# (sourceable)
if [ ! -f /etc/apt/sources.list ]; then
# Not a Debian system
return 0
# CONFIGURATION
# Verifications
if [[ -z $DEBIAN_MIRROR && ! -f /etc/apt/sources.list ]]; then
echo "Unable to find a mirror. Try setting DEBIAN_MIRROR (see help)."
exit 1
fi
if [[ -z $DEBIAN_DB && ! $(which apt &> /dev/null) ]]; then
echo "Unable to find a database for packages to install. Try setting DEBIAN_DB (see help)."
exit 1
fi
# Overrides
ARCH=$(dpkg --print-architecture)
DEBLOC_DB=$HOME/.config/debloc/$ARCH
DEBLOC_ROOT=$HOME/.debloc/$ARCH
[ -z $DEBLOC_PREFIX ] && DEBLOC_PREFIX=$(dpkg --print-architecture)
[ -z $DEBLOC_DB ] && DEBLOC_DB=${XDG_CONFIG_HOME:-$HOME/.config}/debloc/$DEBLOC_PREFIX
[ -z $DEBLOC_ROOT ] && DEBLOC_ROOT=$HOME/.debloc/$DEBLOC_PREFIX
DEBLOC_LD=$DEBLOC_ROOT/ld
if [ -z $DEBIAN_MIRROR ]; then
if [ -z "$DEBIAN_MIRROR" ]; then
DEBIAN_MIRROR="$(cat /etc/apt/sources.list | grep '^deb ' | grep main | grep -v backports)"
DEBIAN_MIRROR="$(echo -e "$DEBIAN_MIRROR" | cut -d ' ' -f 2 | sed 's/\/$//')"
DEBIAN_MIRROR="$(echo -e "$DEBIAN_MIRROR" | cut -d ' ' -f 2 | sed 's/\/$//' | sort | uniq)"
fi
# Preparation
mkdir -p $DEBLOC_DB &> /dev/null
mkdir -p $DEBLOC_ROOT &> /dev/null
export PATH="$DEBLOC_ROOT/usr/bin:$DEBLOC_ROOT/usr/games/:$DEBLOC_ROOT/usr/lib/git-core:$PATH"
export LIBRARY_PATH="$DEBLOC_LD:$LIBRARY_PATH"
export C_INCLUDE_PATH="$DEBLOC_ROOT/usr/include:$C_INCLUDE_PATH"
export CPLUS_INCLUDE_PATH="$DEBLOC_ROOT/usr/include:$CPLUS_INCLUDE_PATH"
export LD_LIBRARY_PATH="$DEBLOC_LD:$LD_LIBRARY_PATH"
export PYTHONPATH="$DEBLOC_ROOT/usr/lib/python3/dist-packages:$PYTHONPATH"
export QT_QPA_PLATFORM_PLUGIN_PATH="$DEBLOC_ROOT/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms"
# PRIVATE FUNCTIONS
# Tell if a package exists
function _debloc-exists { # package
@ -94,8 +98,11 @@ function _debloc-globallyInstalled { # package
function _debloc-packageShow { # package
pkg=$1
if [[ -n $DEBIAN_DB && -f $DEBIAN_DB ]]; then
startline=$(grep "^Package: ${pkg}\$" $DEBIAN_DB --line-number | cut -d ':' -f 1)
sed -n $startline,$(expr $startline + 100)p $DEBIAN_DB | while read line; do
startline=$(grep "^Package: ${pkg}\$" $DEBIAN_DB --line-number | tail -1 | cut -d ':' -f 1)
if [ -z "$startline" ]; then
return 0
fi
sed -n "$startline,$(expr $startline + 100)p" $DEBIAN_DB | while read line; do
if [ -z "$line" ]; then
return 0
fi
@ -107,7 +114,7 @@ function _debloc-packageShow { # package
if [ -z "$line" ]; then
return 0
fi
echo $line
echo "$line"
done
return 0
fi
@ -184,7 +191,7 @@ function _debloc-install { # package
fi
done
if [ ! -s $DEB_FILE ]; then
echo "→ Failed!"
echo "→ Failed (no deb file)!"
rm $DEBLOC_DB/$pkg &> /dev/null
return 4
fi
@ -194,7 +201,7 @@ function _debloc-install { # package
real=$(md5sum $DEB_FILE | cut -d ' ' -f 1)
if [ "$theo" != "$real" ]; then
rm -f $DEB_FILE &> /dev/null
echo "→ Failed!"
echo "→ Failed (sum doesn't match)!"
rm $DEBLOC_DB/$pkg &> /dev/null
return 5
fi
@ -236,8 +243,46 @@ function _debloc-installDeps { # package
return 0
}
# Install package with dependencies (user version with verifications)
function debloc-install { # package
# PUBLIC FUNCTIONS
function proxy_set_help {
echo "Usage: $0 env"
echo
echo "Examples:"
echo ' eval "$(debloc env)"'
return 0
}
function debloc_env {
echo "export PATH=\"$DEBLOC_ROOT/usr/bin:$DEBLOC_ROOT/usr/games/:$DEBLOC_ROOT/usr/lib/git-core:\$PATH\""
echo "export LIBRARY_PATH=\"$DEBLOC_LD:\$LIBRARY_PATH\""
echo "export C_INCLUDE_PATH=\"$DEBLOC_ROOT/usr/include:\$C_INCLUDE_PATH\""
echo "export CPLUS_INCLUDE_PATH=\"$DEBLOC_ROOT/usr/include:$DEBLOC_ROOT/usr/include/python2.7/:$DEBLOC_ROOT/usr/include/x86_64-linux-gnu/python2.7/:\$CPLUS_INCLUDE_PATH\""
echo "export LD_LIBRARY_PATH=\"$DEBLOC_LD:\$LD_LIBRARY_PATH\""
echo "export PYTHONPATH=\"$DEBLOC_ROOT/usr/lib/python3/dist-packages:\$PYTHONPATH\""
echo "export QT_QPA_PLATFORM_PLUGIN_PATH=\"$DEBLOC_ROOT/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms\""
}
function debloc_info {
echo "DEBLOC_PREFIX=$DEBLOC_PREFIX"
echo "DEBLOC_ROOT=$DEBLOC_ROOT"
echo "DEBLOC_DB=$DEBLOC_DB"
echo "DEBLOC_LD=$DEBLOC_LD"
echo "DEBIAN_MIRROR='$DEBIAN_MIRROR'"
echo "DEBIAN_DB=$DEBIAN_DB"
}
function debloc_install_help {
echo "Usage: $0 install PACKAGE"
echo
echo "Arguments:"
echo " PACKAGE Package name"
return 0
}
function debloc_install { # package
if [ -z $1 ]; then
debloc_deb_help
fi
for pkg in $*; do
pkg=$(_debloc-filterVirtual $pkg)
_debloc-exists $pkg
@ -261,8 +306,17 @@ function debloc-install { # package
}
# Install debian archive (user version with verifications)
function debloc-deb { # path
function debloc_deb_help {
echo "Usage: $0 deb PATH"
echo
echo "Arguments:"
echo " PATH Path to the .deb file"
return 0
}
function debloc_deb { # path
if [ -z $1 ]; then
debloc_deb_help
fi
for path in $*; do
if [ ! -f "$path" ]; then
echo "$path is not a file"
@ -275,8 +329,82 @@ function debloc-deb { # path
}
# Remove every package installed with Debloc
function debloc-flush {
function debloc_altern_help {
echo "Usage: $0 altern PROGRAM ALTERNATIVE"
echo
echo "Arguments:"
echo " PROGRAM Program to set the alternative for"
echo " ALTERNATIVE Alternative to set"
echo
echo "Examples:"
echo " $0 altern vim nox"
echo " $0 altern dmenu xft"
return 0
}
function debloc_altern { # program alternative
if [[ -z $1 || -z $2 ]]; then
debloc_altern_help
exit 1
fi
if [ -f "$DEBLOC_ROOT/usr/bin/$1.$2" ]; then
dest="$DEBLOC_ROOT/usr/bin/$1"
alte="$DEBLOC_ROOT/usr/bin/$1.$2"
elif [ -f "$DEBLOC_ROOT/bin/$1.$2" ]; then
dest="$DEBLOC_ROOT/bin/$1"
alte="$DEBLOC_ROOT/bin/$1.$2"
else
echo "Unknown alternative for $1 : $2"
exit 1
fi
if [ -e "$dest" ]; then
rm $dest
fi
ln -s "$alte" "$dest"
}
function debloc_flush {
rm -rf $DEBLOC_ROOT/* &> /dev/null
rm -f $DEBLOC_DB/* &> /dev/null
}
# TODO Other word for 'fake filesystem' and/or explain what this is
function debloc_help {
command="$1"
if [ -n "$command" ]; then
if type "debloc_${command}_help" &> /dev/null; then
shift
"debloc_${command}_help" "$@"
return $?
fi
fi
echo "Usage: $0 COMMAND"
echo
echo "Commands:"
echo " env Provides the environment variables required to run applications from the fake filesystem"
echo " info Gives some information about the fake filesystem"
echo " install Install a debian package in the fake filesystem"
echo " deb Install from a .deb file in the fake filesystem"
echo " altern Update alternative"
echo " flush Remove every package installed from the fake filesystem"
echo " help Get help with commands"
echo
echo "Environment variables:"
echo " DEBLOC_PREFIX Name of the fake filesystem to use (default: uses dpkg architecture)"
echo " DEBLOC_ROOT Path of the fake filesystem (default: ~/.debloc/\$DEBLOC_PREFIX/)"
echo " DEBLOC_DB Database of the fake filesystem (default: \$XDG_CONFIG_HOME/debloc/\$DEBLOC_PREFIX)"
echo " DEBIAN_MIRROR Multiline list of debian mirror (default: uses /etc/apt/sources.list)"
echo " DEBIAN_DB Path to a file with all packages description (default: uses apt-cache showpkg)"
echo " help Get help with commands"
return 0
}
# MAIN
command="$1"
shift
if type "debloc_$command" &> /dev/null; then
"debloc_$command" "$@"
else
debloc_help
fi

11
scripts/docker-image-childs Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env sh
# Find the dependent child image from an image
parent="$1"
# From https://stackoverflow.com/a/41634462
for i in $(docker images -q)
do
docker history "$i" | grep -q "$parent" && echo "$i"
done | grep -v "$parent" | sort -u

5
scripts/docker-rm Executable file
View file

@ -0,0 +1,5 @@
#!/usr/bin/env sh
docker unpause $(docker ps -q)
docker kill $(docker ps -q)
docker container prune -f
docker network prune -f

View file

@ -1,9 +1,7 @@
#!/usrenv bash
#!/usr/bin/env bash
# Handles dotfiles
# Yes there are tons of similar scipts yet I wanted no more nor less than what I needed
# (sourceable)
# Config
@ -156,7 +154,19 @@ function _dotfiles-install-dir { # dir
# Script functions
function dotfiles-link { # file
function dotfiles_link_help {
echo "Usage: $0 link DOTFILE"
echo
echo "Arguments:"
echo " DOTFILE Path to the dotfile"
return 0
}
function dotfiles_link { # file
if [ -z $1 ]; then
dotfiles_link_help
return 1
fi
absSource="$(realpath $1 2> /dev/null)"
if [[ $? != 0 || ! -e "$absSource" ]]; then
echo "[ERROR] $1: no such file or directory"
@ -194,10 +204,41 @@ function dotfiles-link { # file
}
function dotfiles-install {
function dotfiles_install {
_dotfiles-install-dir /
}
function dotfiles_help {
command="$1"
if [ -n "$command" ]; then
if type "dotfiles_${command}_help" &> /dev/null; then
shift
"dotfiles_${command}_help" "$@"
return $?
fi
fi
echo "Usage: $0 COMMAND"
echo
echo "Commands:"
echo " install Install dotfiles from repository"
echo " link Add dotfile to repository"
echo " help Get help with commands"
echo
echo "Environment variables:"
echo " DOTHOME Where to install dotfiles"
echo " DOTREPO Where do the dotfiles comes from"
return 0
}
# MAIN
command="$1"
shift
if type "dotfiles_$command" &> /dev/null; then
"dotfiles_$command" "$@"
else
dotfiles_help
fi
# TODO dotfiles-{link,unlink,clean,uninstall}, better handling of DRY_RUN (use functions probably), clarify source/target thingy
# Link and Unlink should have a clever behavior regarding
# recusive folders

13
scripts/emergency-clean Executable file
View file

@ -0,0 +1,13 @@
#!/usr/bin/env bash
# Clears everything it can to save space
rm -rf $HOME/.cache
if which pacman &> /dev/null; then
sudo pacman -Scc
elif which apt-get &> /deb/null; then
sudo apt-get clean
fi
if which journalctl &> /dev/null; then
sudo journalctl --vacuum-size=100M
fi

52
scripts/html2pdf Executable file
View file

@ -0,0 +1,52 @@
#!/usr/bin/env node
// Imports
var fs = require('fs');
var pdf = require('html-pdf');
var yargs = require('yargs');
// Understanding
var argv = yargs
.usage("Usage: $0 -o out.pdf [options]")
.example('$0 -i doc.pdf -o doc.pdf', 'Convert doc.html to PDF using the default values')
.help('h')
.alias('h', 'help')
.describe('i', 'Input file')
.alias('i', 'input')
.default('i', '/dev/stdin')
.describe('o', 'Output file')
.alias('o', 'output')
.describe('t', 'Title of file')
.alias('t', 'title')
.default('t', 'Sans titre')
.demandOption(['o'])
.argv;
// Settings
options = {
"base": "file://" + process.cwd() + '/',
"format": "A4",
"orientation": "portrait",
"border": "2cm",
"footer": {
"height": "10mm",
"contents": {
default: '<div style="text-align: left; float: left;">' + argv.title + '</div> <div style="text-align:right; float: right;">{{page}}/{{pages}}</div>',
}
},
}
// Reading
htmlString = fs.readFileSync(argv.i, "utf8");
// Conversion
pdf.create(htmlString, options).toFile(argv.o, function(err, res) {
if (err) console.error(err);
});

View file

@ -1,10 +0,0 @@
source ~/.scripts/proxy.sh
source ~/.scripts/machines.sh
source ~/.scripts/debloc.sh
source ~/.scripts/dotfiles.sh
source ~/.scripts/installPreferences.sh
source ~/.scripts/installArch.sh
function optimize {
bash ~/.scripts/optimize.sh
}
alias beep=~/.scripts/beep.sh

106
scripts/install-arch Executable file
View file

@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Setups an Arch Linux system the way I like it
# (requires sudo)
if which pacman &> /dev/null; then
echo "This is not an Arch Linux system (or pacman isn't installed)"
return 1
fi
# Configuration
function prompt { # text
while true; do
read -p "$1 [yn] " yn
case $yn in
[Yy]* ) return 1;;
[Nn]* ) return 0;;
* ) echo "Please answer yes or no.";;
esac
done
}
# Don't ask for things that are already there
if which yaourt &> /dev/null; then
local YAOURT=1
fi
if which bauerbill &> /dev/null; then
local BAUERBILL=1
fi
if [ -z $YAOURT ]; then
prompt "Do you want yaourt on this machine?"
local YAOURT=$?
fi
if [ $YAOURT == 1 ]; then
if [ -z $BAUERBILL ]; then
prompt "Do you want bauerbill on this machine?"
local BAUERBILL=$?
fi
else
BAUERBILL=0
fi
# COMMON
# Install packages if they aren't installed
function inst {
for pkg in $*; do
pacman -Q $pkg &> /dev/null
if [ $? == 1 ]; then
sudo pacman -S $pkg --noconfirm
fi
done
}
# Install package from PKGBUILD file
function installPKGBUILD { # url
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
cd "$TMP_DIR"
wget "$1" -O PKGBUILD
makepkg -si
cd -
rm -rf "$TMP_DIR"
}
# SYSTEM
inst wget
pacman -Q yaourt &> /dev/null
if [[ $YAOURT == 1 && $? == 1 ]]; then
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=package-query"
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=yaourt"
fi
if pacman -Q pamac ; then
sudo pacman -Rsc pamac
fi
pacman -Q bauerbill &> /dev/null
if [[ $BAUERBILL == 1 && $? == 1 ]]; then
sudo pacman -Sy manjaro-{hotfixes,keyring,release,system} --noconfirm
gpg --recv-keys 1D1F0DC78F173680
installPKGBUILD http://xyne.archlinux.ca/projects/reflector/pkgbuild/PKGBUILD
yaourt -S bauerbill --noconfirm
bb-wrapper -Su
# TODO Prompt if all went well, if not restart
else
sudo pacman -Syu
fi
# Disable predictable network names
sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
# TLP
# sudo pacman -S tlp
# sudo systemctl enable tlp.service tlp-sleep.service
# sudo systemctl disable systemd-rfkill
# TODO
# make -j8 in MAKEPKG
# time
# nfs
# hibernate

313
scripts/install-prefs Executable file
View file

@ -0,0 +1,313 @@
#!/usr/bin/env bash
# Installs user preferences the way I like it
# Configuration
function prompt { # text
while true; do
read -p "$1 [yn] " yn
case $yn in
[Yy]* ) return 1;;
[Nn]* ) return 0;;
* ) echo "Please answer yes or no.";;
esac
done
}
# Don't ask for things that are already there
TERMUX=0
if [ -d /data/data/com.termux/files ]; then
TERMUX=1
GUI=0
fi
if which i3 &> /dev/null; then
GUI=1
fi
if [ -z $ADMIN ]; then
prompt "Are you a superuser on this machine?"
ADMIN=$?
fi
if [ -z $GUI ]; then
prompt "Do you want a X environment on this machine?"
GUI=$?
fi
if [ -z $EXTRA ]; then
prompt "Do you want not-so-needed software on this machine?"
EXTRA=$?
fi
# TODO Verify if the package exists before installing it
# System detection
if which pacman &> /dev/null; then
ARCH=1
if [ $ADMIN == 1 ]; then
sudo pacman -Sy
function installOne { # package
pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then
sudo pacman -S $1 --noconfirm --needed
fi
}
function installFileOne { # file
sudo pacman -U "$1"
}
if which yaourt &> /dev/null; then
function altInstallOne { # package
pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then
yaourt -S "$1" --noconfirm
fi
}
else
# Install package from PKGBUILD file
function installPKGBUILD { # url
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
cd "$TMP_DIR"
wget "$1" -O PKGBUILD
makepkg -si
cd -
rm -rf "$TMP_DIR"
}
function altInstallOne { # package
pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=$1"
fi
}
fi
else
echo "You're on a Arch System but it's not yours? Did Arch got that popular?"
return 42
fi
elif which dpkg &> /dev/null; then
DEBIAN=1
if [[ $ADMIN == 1 || $TERMUX == 1 ]]; then
if [ $TERMUX == 1 ]; then
DEBIAN=0
apt update -y
else
sudo apt-get update -y
fi
function installOne { # package
# Finding out if it's already installed or not
STATUS=$(mktemp)
LANG=C dpkg-query --status $1 &> $STATUS
installed=0
if [ $? == 0 ]; then
cat $STATUS | grep '^Status:' | grep ' installed' --quiet
if [ $? == 0 ]; then
installed=1
fi
fi
rm -f $STATUS > /dev/null
echo 101 $1 $installed
# Installing if it's not installed
if [ $installed == 0 ]; then
# TODO noconfirm
if [ $TERMUX == 1 ]; then
apt install $1 -y
else
sudo apt-get install $1 -y
fi
fi
}
function installFileOne { # file
dpkg -i "$1"
}
else
function installOne { # package
debloc install $1
}
function installFileOne { # file
debloc deb "$1"
}
fi
function altInstallOne {
echo "[ERROR] There's no alternate installer for this distribution. Can't install $1."
}
else
echo "Uuuh, what kind of distribution is this?"
return 1
fi
# Install package with the standard
# package manager for the distribution
function inst {
for pkg in $*; do
installOne $pkg
done
}
# Install package FILE with the standard
# package manager for the distribution
function instFile {
for pkg in $*; do
installFileOne $pkg
done
}
# Install package with the alternate
# package manager for the distribution
function altInst {
for pkg in $*; do
altInstallOne $pkg
done
}
# Common CLI
.Xresources.d/configure
# Utils
inst coreutils man openssl-tool grep sed sh tar
if [ $TERMUX == 1 ]; then
inst termux-api
if [ $ADMIN == 1 ]; then
inst tsu
fi
fi
inst moreutils screen ncdu lsof htop proxytunnel pv curl wget sshfs netcat mosh bash-completion rsync
if [ $ARCH == 1 ]; then
inst gopass
else
inst pass
fi
if [[ $ARCH == 1 && $ADMIN == 1 ]]; then
inst pkgfile
sudo systemctl enable pkgfile-update.timer
fi
# Dev
if [ $DEBIAN == 1 ]; then
inst build-essential
elif [ $ARCH == 1 ]; then
inst base-devel
else
inst make
fi
inst git
# Text editor
if [ $TERMUX == 1 ]; then
inst vim-python
elif [ $DEBIAN == 1 ]; then
inst vim-nox
if [ $ADMIN == 0 ]; then
debloc altern vim nox
fi
else
inst vim
fi
if [ $DEBIAN == 1 ]; then
inst exuberant-ctags
else
inst ctags
fi
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vim +PluginInstall +qall
# YouCompleteMe (vim plugin)
if [ $ARCH == 1 ] && [ $ADMIN == 1 ]; then
if [ $EXTRA == 1 ]; then
altInst vim-youcompleteme-git
else
altInst vim-youcompleteme-core-git
fi
else
if [ $DEBIAN == 1 || $TERMUX == 1 ]; then
inst python-dev python3-dev
fi
YCM_ARGS=""
if [ $TERMUX != 1 ]; then
YCM_ARGS="$YCM_ARGS --clang-completer --tern-completer"
fi
python $HOME/.vim/bundle/YouCompleteMe/install.py $YCM_ARGS
fi
# Common GUI
if [ $GUI == 1 ]; then
# Desktop manager
inst i3 i3lock dunst unclutter xautolock feh numlockx scrot xterm xclip
if [ $ARCH == 1 ]; then
altInst polybar-git ttf-font-awesome autorandr-git keynav-enhanced
else
echo "TODO compile polybar-git autorandr-git"
fi
if [ $DEBIAN == 1 ]; then
inst suckless-tools keynav
if [ $ADMIN == 0 ]; then
debloc altern dmenu xft
fi
else
inst dmenu
fi
if [ "$(source /etc/os-release; echo $NAME)" == "Manjaro Linux" ]; then
inst menda-themes menda-circle-icon-theme xcursor-menda
fi
# qutebrowser
if [ $DEBIAN == 1 ]; then
inst python3-lxml python-tox python3-pyqt5 python3-pyqt5.qtwebkit python3-pyqt5.qtquick python3-sip python3-jinja2 python3-pygments python3-yaml
TMP_DIR=$(mktemp -d)
$(cd $TMP_DIR; wget https://qutebrowser.org/python3-pypeg2_2.15.2-1_all.deb)
$(cd $TMP_DIR; wget https://github.com/qutebrowser/qutebrowser/releases/download/v0.9.1/qutebrowser_0.9.1-2_all.deb)
instFile $TMP_DIR/*.deb
rm -rf $TMP_DIR
elif [ $ARCH == 1 ]; then
inst qutebrowser qt5-webengine python-opengl
fi
# Screen filter
if [ $ARCH == 1 ]; then
altInst sct
elif [ $TERMUX != 1 ]; then
if [ ! -f $HOME/.bin/sct ]; then
TMP=$(mktemp)
wget http://www.tedunangst.com/flak/files/sct.c -O $TMP
cc -std=c99 -O2 -I /usr/X11R6/include -o $HOME/.bin/sct $TMP -L /usr/X11R6/lib -lm -lX11 -lXrandr
rm $TMP
fi
fi
# Graphical vim
if [ $DEBIAN == 1 ]; then
inst vim-gtk
else
inst gvim
fi
fi
if [ $EXTRA == 1 ]; then
# Extra dev
inst cmake clang llvm npm
# Extra CLI
inst sl ffmpeg youtube-dl optipng
if [ $ARCH == 1 ]; then
inst jq
altInst pdftk translate-shell git-lfs js-beautify insect visidata-git
fi
# Extra GUI
if [ $GUI == 1 ]; then
inst vlc gimp mpd vimpc alsa-utils
if [ $ARCH == 1 ]; then
inst simplescreenrecorder
fi
fi
fi

41
scripts/install-termux Executable file
View file

@ -0,0 +1,41 @@
#!/data/data/com.termux/files/usr/bin/env bash
# Setups a Termux system the way I like it
if [ ! -d /data/data/com.termux/files ]; then
echo "This is not a Termux system (or pacman isn't installed)"
return 1
fi
# Configuration
function prompt { # text
while true; do
read -p "$1 [yn] " yn
case $yn in
[Yy]* ) return 1;;
[Nn]* ) return 0;;
* ) echo "Please answer yes or no.";;
esac
done
}
if [ -z $ROOT ]; then
prompt "Is this device rooted and BusyBox installed in /system/xbin/?"
ROOT=$?
fi
# Update
apt update
apt upgrade
# (needed for install-prefs)
apt install coreutils
apt install grep
# Config
touch ~/.hushlogin
if [ $ROOT == 1 ]; then
apt install tsu
echo '/system/xbin/mount -o remount,rw /; ln -s /data/data/com.termux/files/usr /usr; /system/xbin/mount -o remount,ro /' | tsu
fi

11
scripts/install-wsl Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env bash
# Setups a WSL system the way I like it
# Remember to use the alwsl script on GitHub to install Arch Linux on WSL
# Use github:cbucher/console as a console and github:mintty/wsltty as a shell
# (%LOCALAPPDATA%/wsltty/bin/wsl-bridge) to avoid arrow keys bypassing
(cd /usr/share/i18n/charmaps/; sudo gunzip -k UTF8.gz)
echo "fr_FR.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
sudo locale-gen

View file

@ -1,106 +0,0 @@
#!/usr/bin/env bash
# Setups an Arch Linux system the way I like it
# (sourceable, requires sudo)
if which pacman &> /dev/null; then
# Not an Arch system
return 0
fi
# Configuration
function install-arch {
# Configuration
function prompt { # text
while true; do
read -p "$1 [yn] " yn
case $yn in
[Yy]* ) return 1;;
[Nn]* ) return 0;;
* ) echo "Please answer yes or no.";;
esac
done
}
# Don't ask for things that are already there
if which yaourt &> /dev/null; then
local YAOURT=1
fi
if which bauerbill &> /dev/null; then
local BAUERBILL=1
fi
if [ -z $YAOURT ]; then
prompt "Do you want yaourt on this machine?"
local YAOURT=$?
fi
if [ $YAOURT == 1 ]; then
if [ -z $BAUERBILL ]; then
prompt "Do you want bauerbill on this machine?"
local BAUERBILL=$?
fi
else
BAUERBILL=0
fi
# COMMON
# Install packages if they aren't installed
function inst {
for pkg in $*; do
pacman -Q $pkg &> /dev/null
if [ $? == 1 ]; then
sudo pacman -S $pkg --noconfirm
fi
done
}
# Install package from PKGBUILD file
function installPKGBUILD { # url
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
cd "$TMP_DIR"
wget "$1" -O PKGBUILD
makepkg -si
cd -
rm -rf "$TMP_DIR"
}
# SYSTEM
inst wget
pacman -Q yaourt &> /dev/null
if [[ $YAOURT == 1 && $? == 1 ]]; then
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=package-query"
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=yaourt"
fi
if pacman -Q pamac ; then
sudo pacman -Rsc pamac
fi
pacman -Q bauerbill &> /dev/null
if [[ $BAUERBILL == 1 && $? == 1 ]]; then
sudo pacman -Sy manjaro-{hotfixes,keyring,release,system} --noconfirm
gpg --recv-keys 1D1F0DC78F173680
installPKGBUILD http://xyne.archlinux.ca/projects/reflector/pkgbuild/PKGBUILD
yaourt -S bauerbill --noconfirm
bb-wrapper -Su
# TODO Prompt if all went well, if not restart
else
sudo pacman -Syu
fi
# Disable predictable network names
sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
# TODO
# make -j8 in MAKEPKG
# time
# nfs
# hibernate
}

View file

@ -1,275 +0,0 @@
#!/usr/bin/env bash
# Installs user preferences the way I like it
# (sourceable)
function install-preferences {
# Configuration
function prompt { # text
while true; do
read -p "$1 [yn] " yn
case $yn in
[Yy]* ) return 1;;
[Nn]* ) return 0;;
* ) echo "Please answer yes or no.";;
esac
done
}
# Don't ask for things that are already there
local TERMUX=0
if [ -d /data/data/com.termux/files ]; then
local TERMUX=1
local GUI=0
fi
if which i3 &> /dev/null; then
local GUI=1
fi
if [ -z $ADMIN ]; then
prompt "Are you a superuser on this machine?"
local ADMIN=$?
fi
if [ -z $GUI ]; then
prompt "Do you want a X environment on this machine?"
local GUI=$?
fi
if [ -z $EXTRA ]; then
prompt "Do you want not-so-needed software on this machine?"
local EXTRA=$?
fi
# TODO Verify if the package exists before installing it
# System detection
if which pacman &> /dev/null; then
ARCH=1
if [ $ADMIN == 1 ]; then
sudo pacman -Sy
function installOne { # package
pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then
sudo pacman -S $1 --noconfirm
fi
}
function installFileOne { # file
sudo pacman -U "$1"
}
if [ -f /usr/bin/yaourt ]; then
function altInstallOne { # package
pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then
yaourt -S "$1" --noconfirm
fi
}
else
# Install package from PKGBUILD file
function installPKGBUILD { # url
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
cd "$TMP_DIR"
wget "$1" -O PKGBUILD
makepkg -si
cd -
rm -rf "$TMP_DIR"
}
function altInstallOne { # package
pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=$1"
fi
}
fi
else
echo "You're on a Arch System but it's not yours? Did Arch got that popular?"
return 42
fi
elif which dpkg &> /dev/null; then
DEBIAN=1
if [[ $ADMIN == 1 || $TERMUX == 1 ]]; then
if [ $TERMUX == 1 ]; then
DEBIAN=0
apt update -y
else
sudo apt-get update -y
fi
function installOne { # package
# Finding out if it's already installed or not
STATUS=$(mktemp)
LANG=C dpkg-query --status $1 &> $STATUS
local installed=0
if [ $? == 0 ]; then
cat $STATUS | grep '^Status:' | grep ' installed' --quiet
if [ $? == 0 ]; then
installed=1
fi
fi
rm -f $STATUS > /dev/null
echo 101 $1 $installed
# Installing if it's not installed
if [ $installed == 0 ]; then
# TODO noconfirm
if [ $TERMUX == 1 ]; then
apt install $1 -y
else
sudo apt-get install $1 -y
fi
fi
}
function installFileOne { # file
dpkg -i "$1"
}
else
function installOne { # package
debloc-install $1
}
function installFileOne { # file
debloc-deb "$1"
}
fi
function altInstallOne {
echo "[ERROR] There's no alternate installer for this distribution. Can't install $1."
}
else
echo "Uuuh, what kind of distribution is this?"
return 1
fi
# Install package with the standard
# package manager for the distribution
function inst {
for pkg in $*; do
installOne $pkg
done
}
# Install package FILE with the standard
# package manager for the distribution
function instFile {
for pkg in $*; do
installFileOne $pkg
done
}
# Install package with the alternate
# package manager for the distribution
function altInst {
for pkg in $*; do
altInstallOne $pkg
done
}
# Common CLI
# Utils
inst grep sed sh tar
if [ $TERMUX == 1 ]; then
inst coreutils man termux-api openssl-tool
if [ $ROOT == 1 ]; then
inst tsu
fi
fi
inst moreutils screen ncdu lsof htop proxytunnel pass pv curl wget sshfs netcat
if [[ $ARCH == 1 && $ROOT == 1 ]]; then
inst pkgfile
systemctl enable pkgfile-update.timer
fi
# Dev
if [ $DEBIAN == 1 ]; then
inst build-essential
elif [ $ARCH == 1 ]; then
inst base-devel
else
inst make
fi
inst git cmake clang llvm
# Text editor
if [ $GUI == 1 ]; then
inst gvim
else
if [ $TERMUX == 1 ]; then
inst vim-python
else
inst vim
fi
fi
if [ $DEBIAN == 1 ]; then
inst exuberant-ctags
else
inst ctags
fi
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vim +PluginInstall +qall
# YouCompleteMe (vim plugin)
if [ $DEBIAN == 1 || $TERMUX == 1 ]; then
inst python-dev python3-dev
fi
local YCM_ARGS=""
if [ $TERMUX == 0 ]; then
YCM_ARGS="$YCM_ARGS --clang-completer --tern-completer"
fi
python $HOME/.vim/bundle/YouCompleteMe/install.python $YCM_ARGS
# Common GUI
if [ $GUI == 1 ]; then
# Desktop manager
inst i3 i3lock dmenu dunst unclutter xautolock feh numlockx scrot
if [ $DEBIAN == 1 ]; then
inst suckles-tools
if [ ! $ROOT == 1 ]; then
ln -s $DEBLOC_ROOT/bin/dmenu{.xft,}
fi
else
inst dmenu
fi
if [ "$(source /etc/os-release; echo $NAME)" == "Manjaro Linux" ]; then
inst menda-themes menda-circle-icon-theme xcursor-menda
fi
# qutebrowser
if [ $DEBIAN == 1 ]; then
inst python3-lxml python-tox python3-pyqt5 python3-pyqt5.qtwebkit python3-sip python3-jinja2 python3-pygments python3-yaml
TMP_DIR=$(mktemp -d)
$(cd $TMP_DIR; wget --quiet https://qutebrowser.org/python3-pypeg2_2.15.2-1_all.deb)
$(cd $TMP_DIR; wget --quiet https://github.com/The-Compiler/qutebrowser/releases/download/v0.8.4/qutebrowser_0.8.4-1_all.deb)
instFile $TMP_DIR/*.deb
rm -rf $TMP_DIR
elif [ $ARCH == 1 ]; then
altInst qutebrowser
fi
fi
if [ $EXTRA == 1 ]; then
# Extra CLI
inst sl ffmpeg youtube-dl
if [ $ARCH == 1 ]; then
altInst pdftk
fi
# Extra GUI
if [ $GUI == 1 ]; then
inst vlc gimp mpd vimpc
if [ $ARCH == 1 ]; then
inst simplescreenrecorder
fi
fi
fi
}

22
scripts/lorem Executable file
View file

@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Generates Lorem Ipsum
original="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna.
Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet.
"
repet=$1
if [ -z $repet ]; then
repet=1
fi
for i in $(seq 1 $repet)
do
echo -e "$original"
done

View file

@ -2,7 +2,6 @@
# Handles indexing and SSH keys of machines I
# have access on
# (sourceable)
MACHINES_HOME=$HOME
MACHINES_CONFIG=$HOME/.config/machines
@ -51,6 +50,11 @@ function _machines-api {
route=$1
shift
wget $MACHINES_API/$route --content-on-error --quiet --output-document=- "$@"
result=$?
if [ $result != 0 ]; then
echo "[ERROR] wget returned $result..."
exit 2
fi
}
function _machines-apiToken {
@ -59,6 +63,7 @@ function _machines-apiToken {
}
function _machines-apiSigned {
_machines-ensureAdmin
_machines-api "$@" --certificate=$MACHINES_CONFIG/machines.crt --private-key=$MACHINES_CONFIG/machines.key
}
@ -72,24 +77,11 @@ function _machines-pubFromCrt {
openssl x509 -in $MACHINES_CONFIG/machines.crt -pubkey -noout > $MACHINES_CONFIG/machines.pub
}
function _machines-regenKey {
if [[ -e $MACHINES_CONFIG/machines.key || -e $MACHINES_CONFIG/machines.pub || -e $MACHINES_CONFIG/machines.crt ]]; then
echo "[ERROR] Please delete the pem files manually to prove you know what you're doing."
else
openssl genrsa -out $MACHINES_CONFIG/machines.key 4096
chmod 600 $MACHINES_CONFIG/machines.key
openssl req -key $MACHINES_CONFIG/machines.key -new -out $MACHINES_CONFIG/machines.csr
openssl x509 -req -days 1826 -in $MACHINES_CONFIG/machines.csr -signkey $MACHINES_CONFIG/machines.key -out $MACHINES_CONFIG/machines.crt
_machines-pubFromCrt
fi
}
function _machines-verifyCertificate {
return
if openssl verify $MACHINES_CONFIG/machines.crt | grep -v 'error 18' | grep 'error' --quiet; then
echo "[ERROR] Invalid certificate"
return 1
else
return 0
exit 1
fi
}
@ -104,19 +96,23 @@ function _machines-ensurePub {
mv $CERT_FILE $MACHINES_CONFIG/machines.crt &> /dev/null
else
echo "[ERROR] Certificate rejected."
return 1
exit 1
fi
fi
_machines-verifyCertificate
if [ $? != 0 ]; then
return 1
fi
if [ ! -f $MACHINES_CONFIG/machines.pub ]; then
_machines-pubFromCrt
fi
return 0
}
function _machines-ensureAdmin {
if [ ! -f $MACHINES_CONFIG/machines.key ]; then
echo "[ERROR] You need have to have the private key to do that"
exit 1
fi
}
# SSH ACCESS KEYS
function _machines-signAkey { # network
@ -130,9 +126,6 @@ function _machines-signAkey { # network
function _machines-getAkey { # network
_machines-ensurePub
if [ $? != 0 ]; then
return 1
fi
KEY_FILE=$(mktemp)
SIGN_FILE=$(mktemp)
_machines-api akey/$1 > $KEY_FILE
@ -140,11 +133,12 @@ function _machines-getAkey { # network
openssl dgst -sha256 -verify $MACHINES_CONFIG/machines.pub -signature $SIGN_FILE $KEY_FILE &> /dev/null
if [ $? == 0 ]; then
cat $KEY_FILE
rm $KEY_FILE $SIGN_FILE &> /dev/null
return 0
else
return 1
rm $KEY_FILE $SIGN_FILE &> /dev/null
exit 1
fi
rm $KEY_FILE $SIGN_FILE &> /dev/null
}
function _machines-updateAkey {
@ -158,50 +152,10 @@ function _machines-updateAkey {
cat $KEY_FILE
echo "[ERROR] Authorized keys are not properly signed"
rm $KEY_FILE
return 1
exit 1
fi
}
# USER ADMIN FUNCTIONS
function machines-verifyLog {
if [ -f $MACHINES_CONFIG/lastVerifiedLog ]; then
from=$(<"$MACHINES_CONFIG/lastVerifiedLog")
else
from=0
fi
d=$(date +%s)
_machines-apiSigned log?from=$from | less
prompt "Is this OK?"
if [ $? == 1 ]; then
echo $d > $MACHINES_CONFIG/lastVerifiedLog
return 0
else
return 1
fi
}
function machines-sign {
machines-verifyLog
if [ $? != 0 ]; then
return 1
fi
echo "Signing default network authorized_keys..."
_machines-signAkey
_machines-apiSigned network | while read network; do
echo "Signing network $network authorized_keys..."
_machines-signAkey $network
done
}
function machines-list {
_machines-apiSigned machine
}
function machines-listNetwork {
_machines-apiSigned network
}
function _machines-postFile { # filename
cat $1 | while read line; do
parameter=$(echo $line | cut -d '=' -f 1)
@ -217,87 +171,233 @@ function _machines-addElement { # element elementType default
$EDITOR $FILE
data=$(_machines-postFile $FILE)
rm $FILE &> /dev/null
err=$(_machines-apiSigned $2 --post-data "name=$1$data")
if [ $? != 0 ]; then
echo "[ERROR] $err"
return 2
fi
}
function machines-add { # machine
_machines-addElement $1 machine "host[]=\nnetwork=\nuserkey=\nhostkey=\nuser="
}
function machines-addNetwork { # network
_machines-addElement $1 network "allowed[]=\nsecure=false"
machines-apiSigned $2 --post-data "name=$1$data"
}
function _machines-editElement { # element elementType
FILE=$(mktemp)
_machines-apiSigned $2/$1 > $FILE
if [ $? != 0 ]; then
echo "[ERROR] $(cat $FILE)"
rm $FILE &> /dev/null
return 1
fi
_machines-apiSigned $2/$1
$EDITOR $FILE
data=$(_machines-postFile $FILE)
rm $FILE &> /dev/null
err=$(_machines-apiSigned $2/$1 --post-data "$data")
if [ $? != 0 ]; then
echo "[ERROR] $err"
return 2
fi
}
function machines-edit { # machine
_machines-editElement $1 machine
}
function machines-editNetwork { # network
_machines-editElement $1 network
}
function _machines-deleteElement { # element elementType
err=$(_machines-apiSigned $2/$1 --method=DELETE)
if [ $? != 0 ]; then
echo "[ERROR] $err"
return 2
}
# USER ADMIN FUNCTIONS
function machines_history {
if [ -f $MACHINES_CONFIG/lastVerifiedLog ]; then
from=$(<"$MACHINES_CONFIG/lastVerifiedLog")
else
from=0
fi
d=$(date +%s)
_machines-apiSigned log?from=$from | less
prompt "Is this OK?"
if [ $? == 1 ]; then
echo $d > $MACHINES_CONFIG/lastVerifiedLog
return 0
else
echo "Houston, we have a problem..."
exit 1
fi
}
function machines-delete { # machine
function machines_sign {
machines_history
echo "Signing default network authorized_keys..."
_machines-signAkey
_machines-apiSigned network | while read network; do
echo "Signing network $network authorized_keys..."
_machines-signAkey $network
done
}
function machines_machine_list {
_machines-apiSigned machine
}
function machines_network_list {
_machines-apiSigned network
}
function machines_machine_add_help {
echo "Usage: $0 machine|mac|m add MACHINE"
echo
echo "Arguments:"
echo " MACHINE machine to add"
return 0
}
function machines_machine_add { # machine
if [ -z $1 ]; then
machines_machine_add_help
exit 1
fi
_machines-addElement $1 machine "allowed[]=\nsecure=false"
_machines-addElement $1 machine "host[]=\nnetwork=\nuserkey=\nhostkey=\nuser="
}
function machines_network_add_help {
echo "Usage: $0 network|net|n add NETWORK"
echo
echo "Arguments:"
echo " NETWORK Network to add"
return 0
}
function machines_network_add { # network
if [ -z $1 ]; then
machines_network_add_help
exit 1
fi
_machines-addElement $1 network "allowed[]=\nsecure=false"
}
function machines_machine_edit_help {
echo "Usage: $0 machine|mac|m edit MACHINE"
echo
echo "Arguments:"
echo " MACHINE machine to remove"
return 0
}
function machines_machine_edit { # machine
if [ -z $1 ]; then
machines_machine_edit_help
exit 1
fi
_machines-editElement $1 machine
}
function machines_network_edit_help {
echo "Usage: $0 network|net|n edit NETWORK"
echo
echo "Arguments:"
echo " NETWORK Network to remove"
return 0
}
function machines_network_edit { # network
if [ -z $1 ]; then
machines_network_edit_help
exit 1
fi
_machines-editElement $1 network
}
function machines_machine_delete_help {
echo "Usage: $0 machine|mac|m delete machine"
echo
echo "Arguments:"
echo " MACHINE machine to remove"
return 0
}
function machines_machine_delete { # machine
if [ -z $1 ]; then
machines_machine_delete_help
exit 1
fi
_machines-deleteElement $1 machine
}
function machines-deleteNetwork { # network
function machines_network_delete_help {
echo "Usage: $0 network|net|n delete NETWORK"
echo
echo "Arguments:"
echo " NETWORK Network to remove"
return 0
}
function machines_network_delete { # network
if [ -z $1 ]; then
machines_network_delete_help
exit 1
fi
_machines-deleteElement $1 network
}
function machines-updateAll {
machines-list | while read machine; do
function machines_machine_help {
echo "Usage: $0 machine|mac|m COMMAND"
echo
echo "Commands:"
echo " list List all machines"
echo " add Interactively add a machine"
echo " edit Interactively edit a specified machine"
echo " delete Remove a specified machine"
echo " help Get help with commands"
return 0
}
function machines_machine {
command="$1"
shift
if type "machines_machine_$command" &> /dev/null; then
"machines_machine_$command" "$@"
else
machines_machine_help
fi
}
function machines_network_help {
echo "Usage: $0 network|net|n COMMAND"
echo
echo "Commands:"
echo " list List all networks"
echo " add Interactively add a network"
echo " edit Interactively edit a specified network"
echo " delete Remove a specified network"
echo " help Get help with commands"
return 0
}
function machines_network {
command="$1"
shift
if type "machines_network_$command" &> /dev/null; then
"machines_network_$command" "$@"
else
machines_network_help
fi
}
machines_mac() { machines_machine "$@"; }
machines_m() { machines_machine "$@"; }
machines_net() { machines_network "$@"; }
machines_n() { machines_network "$@"; }
machines_mac_help() { machines_machine_help "$@"; }
machines_m_help() { machines_machine_help "$@"; }
machines_net_help() { machines_network_help "$@"; }
machines_n_help() { machines_network_help "$@"; }
function machines_update-all {
machines_list | while read machine; do
echo "Updating $machine..."
ssh $machine 'machines-update' &
done
}
# USER FUNCTIONS
function machines-update {
_machines-api machine/$(cat $MACHINES_CONFIG/this.name) > $MACHINES_CONFIG/this
_machines-updateAkey
function machines_regen-keys {
if [[ -e $MACHINES_CONFIG/machines.key || -e $MACHINES_CONFIG/machines.pub || -e $MACHINES_CONFIG/machines.crt ]]; then
echo "[ERROR] Please delete the pem files manually to prove you know what you're doing."
exit 1
else
openssl genrsa -out $MACHINES_CONFIG/machines.key 4096
chmod 600 $MACHINES_CONFIG/machines.key
openssl req -key $MACHINES_CONFIG/machines.key -new -out $MACHINES_CONFIG/machines.csr
openssl x509 -req -days 1826 -in $MACHINES_CONFIG/machines.csr -signkey $MACHINES_CONFIG/machines.key -out $MACHINES_CONFIG/machines.crt
_machines-pubFromCrt
fi
}
function machines-setup {
# USER FUNCTIONS
function machines_setup {
if [ -e $MACHINES_CONFIG/this.name ]; then
echo "[ERROR] This machine is already set up"
return 1
exit 1
fi
_machines-ensurePub
if [ $? != 0 ]; then
return 1
fi
# Variables
read -p 'Machine name? ' name
@ -324,13 +424,47 @@ function machines-setup {
data="$data&host[]=$(urlencode "$host")"
done
err=$(_machines-apiToken machine --post-data "$data")
if [ $? != 0 ]; then
echo "[ERROR] $err"
return 3
fi
_machines-apiToken machine --post-data "$data"
echo $name > $MACHINES_CONFIG/this.name
machines-update
machines_update
}
function machines_update {
_machines-api machine/$(cat $MACHINES_CONFIG/this.name) > $MACHINES_CONFIG/this
_machines-updateAkey
}
function machines_help {
command="$1"
if [ -n "$command" ]; then
if type "machines_${command}_help" &> /dev/null; then
shift
"machines_${command}_help" "$@"
return $?
fi
fi
echo "Usage: $0 COMMAND"
echo
echo "User commands:"
echo " setup Interactive initial setup for new machine"
echo " update Update this machine"
echo " help Get help with commands"
echo
echo "Admin commands:"
echo " machine|mac|m Modify machines"
echo " network|net|n Modify networks"
echo " update-all Update all machines available via SSH"
echo " regen-keys Regenerate system keys"
return 0
}
# MAIN
command="$1"
shift
if type "machines_$command" &> /dev/null; then
"machines_$command" "$@"
else
machines_help
fi

113
scripts/md2html Executable file
View file

@ -0,0 +1,113 @@
#!/usr/bin/env node
// Imports
var fs = require('fs');
var marked = require('marked');
var highlight = require('highlight.js');
var katex = require('katex');
var yargs = require('yargs');
var extend = require('util')._extend;
// Constants
var template = '<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.11.0/styles/xcode.min.css" integrity="sha256-OED7Gmqde0cMVVeo1zVd+3fBD4EST32D4h9YT7KY0aY=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" integrity="sha384-wITovz90syo1dJWVh32uuETPVEtGigN07tkttEqPv+uR2SE/mbQcG7ATL28aI9H0" crossorigin="anonymous"> <style type="text/css"> image { max-width: 100 % } </style> <title>%TITLE%</title> </head> <body> <main class="page-content" aria-label="Content"> %BODY% </main> </body> </html>'
// Understanding
var argv = yargs
.usage("Usage: $0 [options]")
.example('$0 -i doc.md -o doc.html', 'Convert doc.md to HTML using the default template')
.help('h')
.alias('h', 'help')
.describe('i', 'Input file')
.alias('i', 'input')
.default('i', '/dev/stdin')
.describe('o', 'Output file')
.alias('o', 'output')
.default('o', '/dev/stdout')
.describe('t', 'Template file (%BODY% is replaced by the text)')
.alias('t', 'template')
.argv;
if (argv.t) {
template = fs.readFileSync(argv.t, "utf8");
}
// Settings
var extraLangages = {
avrpseudo: function (hljs) {
lang = extend({}, highlight.getLanguage('avrasm'));
lang.keywords.keyword += ' Si Alors Sinon FinSi TantQue FinTantQue Pour FinPour allant de à ←';
lang.keywords.keyword += ' Lire Sortir sur Appeler Retourner';
lang.keywords.keyword += ' DecalerDroite DecalerGauche';
lang.keywords.keyword += ' Incrementer Decrementer';
lang.keywords.built_in += ' vrai faux';
lang.contains.push({
className: 'meta',
begin: /Configurer.+/,
end: /\n/,
});
return lang;
},
avrasmplus: function (hljs) {
lang = extend({}, highlight.getLanguage('avrasm'));
lang.keywords.keyword += ' si saut alors et ou if then goto && || <-';
lang.contains.push({
className: 'meta',
begin: /@\w+/,
});
return lang;
},
};
for (lang in extraLangages) {
// This must be done before any call to highlight.highlight :/
highlight.registerLanguage(lang, extraLangages[lang]);
}
var renderer = new marked.Renderer();
marked.setOptions({
highlight: function (code, lang) {
if (highlight.getLanguage(lang)) {
return highlight.highlight(lang, code).value;
} else {
// if (extraLangages[lang]) {
// highlight.registerLanguage(lang, extraLangages[lang]);
// return highlight.highlight(lang, code).value;
// } else {
// }
console.warn("Unknown language: " + lang);
return highlight.highlightAuto(code).value;
}
}
});
// Processing
markdownString = fs.readFileSync(argv.i, "utf8");
// TeX
markdownString = markdownString.replace(/\\\$/g, '&dollar;')
markdownString = markdownString.replace(/\$\$([\s\S]+)\$\$/gm, function(glob, formula) {
return katex.renderToString(formula, {displayMode: true});
});
markdownString = markdownString.replace(/\$([^$]+)\$/g, function(glob, formula) {
return katex.renderToString(formula, {displayMode: false});
});
// Conversion
htmlString = marked(markdownString, {renderer: renderer});
fullHtmlString = template.replace('%BODY%', htmlString);
// Saving
if (argv.o == '/dev/stdout') {
console.log(fullHtmlString);
} else {
fs.writeFileSync(argv.o, fullHtmlString);
}

View file

@ -69,13 +69,14 @@ function replaceImg { # candidate original
else
echo "→ Candidate don't have the same bit map as original, skipping!"
fi
rm "$ppmc" "$ppmo" "$c"
rm -f "$ppmc" "$ppmo" "$c"
}
# JPEG (requires jpegtran)
while read image
do
if [ -z "$image" ]; then continue; fi
echo Processing $image
prog=$(mktemp --suffix .jpg)
@ -103,6 +104,7 @@ done <<< "$(find "$dir" -type f -iregex ".+.jpe?g$")"
# PNG (requires optipng)
while read image
do
if [ -z "$image" ]; then continue; fi
echo Processing $image
temp=$(mktemp --suffix .png)
@ -117,20 +119,18 @@ done <<< "$(find "$dir" -type f -iname "*.png")"
# SVG (requires svgo)
while read image
do
if [ -z "$image" ]; then continue; fi
echo Processing $image
temp=$(mktemp --suffix .svg)
cp "$image" "$temp"
svgo --quiet --config $HOME/.scripts/svgo.yml "$temp"
svgo --quiet --config $HOME/.config/optiSvgo.yml "$temp"
echo "→ Optimize done"
replaceImg "$temp" "$image"
done <<< "$(find "$dir" -type f -iname "*.svg")"
# GIT (requires git)
find "$dir" -type d -name .git -print0 | while IFS= read -r -d '' dir; do
(cd "$dir"; git gc)
done
cleandev
showtotal

22
scripts/package.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "geoffreyfrogeye-dotfiles-scripts",
"version": "1.0.0",
"description": "Stores dependencies used for GeoffreyFrogeye's dotfiles scripts.",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://git.frogeye.fr/geoffrey/dotfiles"
},
"author": "GeoffreyFrogeye",
"license": "GPL-3.0",
"dependencies": {
"highlight.js": "^9.11.0",
"html-pdf": "^2.1.0",
"katex": "^0.7.1",
"marked": "^0.3.6",
"yargs": "^8.0.1"
}
}

49
scripts/pdfrename Executable file
View file

@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Change the title of a PDF file
if [[ -z "$1" || -z "$2" ]]; then
echo "Usage: $0 FILE TITLE [CREATOR [PRODUCER]]"
echo
echo "Arguments:"
echo " FILE Path to the PDF document"
echo " TITLE Content of the Title tag"
echo " CREATOR Content of the Creator tag"
echo " PRODUCER Title to give"
exit 1
fi
file="$1"
title="$2"
creator="$3"
producer="$4"
if [ ! -f "$1" ]; then
echo "No such file or directory: $1" >> /dev/stderr
exit 2
fi
instructions=$(mktemp)
echo "InfoBegin" >> "$instructions"
echo "InfoKey: Title" >> "$instructions"
echo "InfoValue: $title" >> "$instructions"
if [ -n "$creator" ]; then
echo "InfoBegin" >> "$instructions"
echo "InfoKey: Creator" >> "$instructions"
echo "InfoValue: $creator" >> "$instructions"
fi
if [ -n "$producer" ]; then
echo "InfoBegin" >> "$instructions"
echo "InfoKey: Producer" >> "$instructions"
echo "InfoValue: $producer" >> "$instructions"
fi
copy=$(mktemp)
cp "$file" "$copy"
pdftk "$copy" update_info "$instructions" output "$file"
rm "$instructions" "$copy"

103
scripts/proxy Executable file
View file

@ -0,0 +1,103 @@
#!/usr/bin/env bash
# Allows easy manipulation of the proxy variables
function proxy_set_help {
echo "Usage: $0 set ADDRESS"
echo
echo "Arguments:"
echo " ADDRESS Address of the proxy"
echo
echo "Examples:"
echo ' eval "$(proxy set http://proxy.mycompany.com:3128/)"'
return 0
}
function proxy_set {
if [ -z $1 ]; then
proxy_set_help
return 1
fi
echo "export http_proxy='$1'"
echo "export https_proxy='$1'"
echo "export ftp_proxy='$1'"
echo "export rsync_proxy='$1'"
exit 0
}
function proxy_setup_help {
echo "Usage: $0 setup"
echo
echo "Examples:"
echo " proxy_set # Then eval the output"
return 0
}
function proxy_setup {
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
if (( $# > 0 )); then
valid=$(echo $@ | sed -n 's/\([0-9]\{1,3\}.\)\{4\}:\([0-9]\+\)/&/p')
if [[ $valid != $@ ]]; then
>&2 echo "Invalid address"
return 1
fi
proxy_set "http://$1/"
return 0
fi
echo -n "User: "; read username
if [[ $username != "" ]]; then
echo -n "Password: "
read -es password
local pre="$username:$password@"
fi
echo -n "Server: "; read server
echo -n "Port: "; read port
proxy_set "http://$pre$server:$port/"
return 0
}
function proxy_off_help {
echo "Usage: $0 off"
echo
echo "Examples:"
echo ' eval $(proxy off)'
return 0
}
function proxy_off {
echo 'unset http_proxy'
echo 'unset https_proxy'
echo 'unset ftp_proxy'
echo 'unset rsync_proxy'
return 0
}
function proxy_help {
command="$1"
if [ -n "$command" ]; then
if type "proxy_${command}_help" &> /dev/null; then
shift
"proxy_${command}_help" "$@"
return $?
fi
fi
echo "Usage: $0 COMMAND"
echo
echo "Commands:"
echo " setup Interactively setup proxy"
echo " set Set proxy from address"
echo " off Turn off proxy"
echo " help Get help with commands"
return 0
}
# MAIN
command="$1"
shift
if type "proxy_$command" &> /dev/null; then
"proxy_$command" "$@"
else
proxy_help
fi

View file

@ -1,44 +0,0 @@
# Proxy
function proxy_set {
export http_proxy=$1
export https_proxy=$1
export ftp_proxy=$1
export rsync_proxy=$1
echo "Proxy changed"
}
function proxy_on {
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
if (( $# > 0 )); then
valid=$(echo $@ | sed -n 's/\([0-9]\{1,3\}.\)\{4\}:\([0-9]\+\)/&/p')
if [[ $valid != $@ ]]; then
>&2 echo "Invalid address"
return 1
fi
proxy_set "http://$1/"
return 0
fi
echo -n "User: "; read username
if [[ $username != "" ]]; then
echo -n "Password: "
read -es password
local pre="$username:$password@"
fi
echo -n "Server: "; read server
echo -n "Port: "; read port
proxy_set "http://$pre$server:$port/"
}
function proxy_off {
unset http_proxy
unset https_proxy
unset ftp_proxy
unset rsync_proxy
echo -e "Proxy removed"
}
alias po=proxy_off

5
scripts/remcrlf Executable file
View file

@ -0,0 +1,5 @@
#!/usr/bin/env bash
# Removes CRLF (^M or \r) from a file
sed -e "s/^M//" $1 -i

25
scripts/rep Executable file
View file

@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Moves a file to another place and put a symbolic link in place
function proxy_help {
echo "Usage: $0 SOURCE DEST"
echo
echo "Arguments:"
echo " SOURCE File to be moved"
echo " DEST Where to be moved"
return 0
}
mv "$1" "$2"
ln -s "$2" "$1"
# MAIN
command="$1"
shift
if type "proxy_$command" &> /dev/null; then
"proxy_$command" "$@"
else
proxy_help
fi

47
scripts/sedrename Executable file
View file

@ -0,0 +1,47 @@
#!/usr/bin/env bash
# Rename a list of files with a sed pattern
usage() {
echo "Usage: $0 PATTERN [-d] < filelist"
echo
echo "Arguments:"
echo " PATTERN Sed pattern to apply"
echo
echo "Options:"
echo " -d Dry run"
exit 1
}
if [[ -z "$1" ]]; then
usage
fi
pattern="$1"
dry=1
if [[ -n "$2" ]]; then
if [[ "$2" = '-d' ]]; then
dry=0
else
usage
fi
fi
while read src
do
dst="$(echo "$src" | sed "$pattern")"
if [[ $? != 0 ]]; then
echo "ERREUR Invalid sed pattern"
exit 2
fi
if [[ $dry == 0 ]]; then
echo "$src" → "$dst"
else
mv "$src" "$dst"
fi
done

20
scripts/transfer Executable file
View file

@ -0,0 +1,20 @@
#!/usr/bin/env sh
if [ $# -eq 0 ]
then
echo -e "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"
return 1
fi
tmpfile=$( mktemp -t transferXXX )
if tty -s
then
basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile
else
curl --progress-bar --upload-file "-" "https://transfer.sh/$1" >> $tmpfile
fi
cat $tmpfile
rm -f $tmpfile

View file

@ -1,4 +1,9 @@
#!/usr/bin/env bash
# Dynamically determines if the ssh connection
# is to be proxied through `proxytunnel`
# To be used with ssh_config ProxyCommand
host="$1"
port="$2"

81
vimrc
View file

@ -13,39 +13,53 @@ Plugin 'gmarik/Vundle.vim'
Plugin 'L9'
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
Plugin 'altercation/vim-colors-solarized'
Bundle 'Shougo/neosnippet'
Bundle 'Shougo/neosnippet-snippets'
Plugin 'tomasr/molokai'
"Bundle 'Shougo/neosnippet'
"Bundle 'Shougo/neosnippet-snippets'
Plugin 'tpope/vim-surround'
Plugin 'tpope/vim-fugitive'
Plugin 'tpope/vim-repeat'
Plugin 'tpope/tpope-vim-abolish'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'airblade/vim-gitgutter'
Plugin 'kien/ctrlp.vim'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'mbbill/undotree'
Plugin 'scrooloose/nerdtree'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-easytags'
Plugin 'majutsushi/tagbar'
"Plugin 'gilligan/vim-lldb'
Plugin 'wellle/targets.vim'
Plugin 'Chiel92/vim-autoformat'
Plugin 'Valloric/YouCompleteMe'
Plugin 'Raimondi/delimitMate'
" Plugin 'Valloric/YouCompleteMe'
Plugin 'artur-shaik/vim-javacomplete2'
Plugin 'tomtom/tcomment_vim'
Plugin 'Shougo/denite.nvim'
Plugin 'tomlion/vim-solidity'
Plugin 'godlygeek/tabular'
call vundle#end() " required
filetype plugin indent on " required
""" UNDOTREE """
nmap <F7> :UndotreeToggle<CR>:UndotreeFocus<CR>
""" CTRLP """
let g:ctrlp_custom_ignore = {
\ 'dir': '\v([\/]\.(git|hg|svn)|node_modules|bower_components|__pycache__|vendor)$',
\ 'file': '\v\.(exe|so|dll)$',
\ 'dir': '\v([\/]\.(git|hg|svn)|log|node_modules|bower_components|__pycache__|vendor|output|buildroot|doc)$',
\ 'file': '\v\.(exe|so|dll|o|pyc)$',
\ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
\ }
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPMixed'
map <a-p> :CtrlPMRUFiles<CR>
""" TAGBAR """
nmap <F8> :TagbarToggle<CR>
""" VIM-AIRLINE """
set noshowmode
@ -57,25 +71,27 @@ let g:airline#extensions#tabline#enabled = 1
let g:airline_section_a = airline#section#create(['mode'])
let g:airline_section_b = airline#section#create(['branch', 'hunks'])
let g:airline_section_z = airline#section#create(['%B', '@', '%l', ':', '%c'])
""" NERDTREE-GIT-PLUGIN """
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }
let g:airline_theme = 'wombat'
""" YOUCOMPLETEME """
let g:ycm_global_ycm_extra_conf = '~/.config/ycm_extra_conf.py'
" let g:ycm_global_ycm_extra_conf = '~/.config/ycm_extra_conf.py'
let g:ycm_global_ycm_extra_conf = '/usr/share/vim/vimfiles/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
let g:ycm_server_python_interpreter = '/usr/bin/python2'
nmap gTi :YcmCompleter GoToInclude<CR>
nmap gTc :YcmCompleter GoToDeclaration<CR>
nmap gTf :YcmCompleter GoToDefinition<CR>
nmap gt :YcmCompleter GoTo<CR>
nmap gT :YcmCompleter GoToImprecise<CR>
nmap gTr :YcmCompleter GoToReference<CR>
""" AUTOFORMAT """
nmap <F3> :Autoformat<CR>
""" JAVACOMPLETE """
autocmd FileType java setlocal omnifunc=javacomplete#Complete
""" VIM SETTINGS """
@ -112,8 +128,8 @@ set cursorcolumn
syntax enable
set background=dark
set t_Co=256
colorscheme solarized
colorscheme molokai
let g:molokai_original = 1
" From http://stackoverflow.com/a/5004785/2766106
set list
@ -138,7 +154,16 @@ if has('persistent_undo')
set undofile
endif
" Allow saving of files as sudo when I forgot to start vim using sudo.
" From https://stackoverflow.com/a/7078429
cmap w!! w !sudo tee > /dev/null %
imap jk <Esc>
imap <Esc>
map <Enter> o<Esc>
nmap <C-H> :bp<CR>
nmap <C-L> :bn<CR>
nmap <C-K> kkkkkkkkkkkkkkkkkkkkk
nmap <C-J> jjjjjjjjjjjjjjjjjjjjj

View file

@ -9,6 +9,7 @@
[ -f ~/.Xresources ] && xrdb ~/.Xresources
setxkbmap fr oss
xset b off
export GTK2_RC_FILES="$HOME/.gtkrc-2.0"