Merge branch 'master' of frogit:geoffrey/dotfiles
This commit is contained in:
commit
2ebe91cccf
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
|||
[submodule "dotsync"]
|
||||
path = dotsync
|
||||
url = git@github.com:dotphiles/dotsync.git
|
4
Xresources.d/configure
vendored
4
Xresources.d/configure
vendored
|
@ -3,7 +3,7 @@
|
|||
mkdir -p $HOME/.local/share/fonts
|
||||
echo $(for i in "" "%20Bold" "%20Oblique" "%20Bold%20Oblique"; do
|
||||
cd $HOME/.local/share/fonts
|
||||
wget http://raw.githubusercontent.com/powerline/fonts/master/DejaVuSansMono/DejaVu%20Sans%20Mono$i%20for%20Powerline.ttf
|
||||
wget -c http://raw.githubusercontent.com/powerline/fonts/master/DejaVuSansMono/DejaVu%20Sans%20Mono$i%20for%20Powerline.ttf
|
||||
done)
|
||||
wget "https://aur.archlinux.org/cgit/aur.git/plain/icons.ttf?h=ttf-font-icons" -O $HOME/.local/share/fonts/icons.ttf
|
||||
wget -c "https://aur.archlinux.org/cgit/aur.git/plain/icons.ttf?h=ttf-font-icons" -O $HOME/.local/share/fonts/icons.ttf
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
profile
|
||||
.profile
|
9
bashrc
9
bashrc
|
@ -48,22 +48,21 @@ alias pacman='pacman --color auto'
|
|||
alias dmesg='dmesg --ctime'
|
||||
|
||||
# Frequent mistakes
|
||||
alias sl=ls
|
||||
alias al=la
|
||||
alias mdkir=mkdir
|
||||
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'
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
# 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=47
|
||||
sort_direction=1
|
||||
hide_threads=0
|
||||
hide_kernel_threads=1
|
||||
hide_userland_threads=1
|
||||
shadow_other_users=0
|
||||
show_thread_names=0
|
||||
show_program_path=0
|
||||
highlight_base_name=1
|
||||
highlight_megabytes=0
|
||||
highlight_threads=1
|
||||
tree_view=0
|
||||
header_margin=0
|
||||
detailed_cpu_time=0
|
||||
cpu_count_from_zero=0
|
||||
update_process_names=0
|
||||
account_guest_in_cpu_meter=0
|
||||
color_scheme=0
|
||||
delay=15
|
||||
left_meters=AllCPUs Memory Swap
|
||||
left_meter_modes=1 1 1
|
||||
right_meters=Tasks LoadAverage Uptime
|
||||
right_meter_modes=2 2 2
|
|
@ -38,7 +38,7 @@ bindsym button2 kill
|
|||
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+c exec --no-startup-id ~/.config/i3/passmenu --type
|
||||
#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
|
||||
|
@ -145,14 +145,19 @@ set $WS10 10
|
|||
# Workspace output
|
||||
workspace "$WS1" output LVDS1
|
||||
workspace "$WS2" output VGA1
|
||||
workspace "$WS2" output HDMI1
|
||||
workspace "$WS3" output LVDS1
|
||||
workspace "$WS4" output VGA1
|
||||
workspace "$WS4" output HDMI1
|
||||
workspace "$WS5" output LVDS1
|
||||
workspace "$WS6" output VGA1
|
||||
workspace "$WS6" output HDMI1
|
||||
workspace "$WS7" output LVDS1
|
||||
workspace "$WS8" output VGA1
|
||||
workspace "$WS8" output HDMI1
|
||||
workspace "$WS9" output LVDS1
|
||||
workspace "$WS10" output VGA1
|
||||
workspace "$WS10" output HDMI1
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace $WS1
|
||||
|
@ -234,7 +239,7 @@ assign [class="Clementine"] $WS10
|
|||
assign [title="TweetDeck"] $WS8
|
||||
|
||||
# Open specific applications in floating mode
|
||||
for_window [title="alsamixer"] floating enable border pixel 2
|
||||
for_window [title="pacmixer"] floating enable border pixel 2
|
||||
for_window [class="Firefox"] layout tabbed
|
||||
for_window [class="qutebrowser"] layout tabbed
|
||||
|
||||
|
@ -356,7 +361,6 @@ bindsym $mod+F5 exec --no-startup-id xautolock -enable
|
|||
|
||||
|
||||
# Autostart applications
|
||||
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
|
||||
|
@ -367,6 +371,7 @@ exec --no-startup-id dunst # Notifications
|
|||
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
|
||||
exec --no-startup-id autorandr --change # Screen configuration and everything that depends on it
|
||||
|
||||
set $ignore #ff00000
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
#!/bin/sh
|
||||
dmenu -fn 'DejaVu Sans Mono-10' -nb '#48483e' -nf '#f1ebeb' -sb '#8fc029' -sf '#272822' -l 8 -f -i -h 19 "$@"
|
||||
dmenu -fn 'DejaVu Sans Mono-10' -nb '#48483e' -nf '#f1ebeb' -sb '#8fc029' -sf '#272822' -l 8 -f "$@"
|
||||
|
|
|
@ -8,17 +8,23 @@ if [[ $1 == "--type" ]]; then
|
|||
shift
|
||||
fi
|
||||
|
||||
prefix=${PASSWORD_STORE_DIR-~/.password-store}
|
||||
password_files=( "$prefix"/**/*.gpg )
|
||||
password_files=( "${password_files[@]#"$prefix"/}" )
|
||||
password_files=( "${password_files[@]%.gpg}" )
|
||||
if PASS=$(which gopass 2> /dev/null); then
|
||||
password_files="$($PASS ls --flat)"
|
||||
elif PASS=$(which pass 2> /dev/null); then
|
||||
prefix=${PASSWORD_STORE_DIR-~/.password-store}
|
||||
password_files=( "$prefix"/**/*.gpg )
|
||||
password_files=( "${password_files[@]#"$prefix"/}" )
|
||||
password_files=( "${password_files[@]%.gpg}" )
|
||||
else
|
||||
exit
|
||||
fi
|
||||
|
||||
password=$(printf '%s\n' "${password_files[@]}" | $HOME/.config/i3/dmenu_cmd -p "Passwords" "$@")
|
||||
|
||||
[[ -n $password ]] || exit
|
||||
|
||||
if [[ $typeit -eq 0 ]]; then
|
||||
pass show -c "$password" 2>/dev/null
|
||||
$PASS show -c "$password"
|
||||
else
|
||||
xdotool - <<<"type --clearmodifiers -- $(pass show "$password" | head -n 1)"
|
||||
xdotool - <<<"type --clearmodifiers -- $($PASS show "$password" | head -n 1)"
|
||||
fi
|
||||
|
|
5
config/i3/test
Normal file
5
config/i3/test
Normal file
|
@ -0,0 +1,5 @@
|
|||
prefix=${PASSWORD_STORE_DIR-~/.password-store}
|
||||
password_files=( "$prefix"/**/*.gpg )
|
||||
password_files=( "${password_files[@]#"$prefix"/}" )
|
||||
password_files=( "${password_files[@]%.gpg}" )
|
||||
echo -e "${password_files[@]}"
|
|
@ -1,84 +0,0 @@
|
|||
general {
|
||||
output_format = "i3bar"
|
||||
colors = true
|
||||
interval = 1
|
||||
}
|
||||
|
||||
order += "disk /home"
|
||||
order += "disk /"
|
||||
order += "path_exists VPN"
|
||||
order += "ethernet usb0"
|
||||
order += "wireless wlan1"
|
||||
order += "wireless wlan0"
|
||||
order += "ethernet eth0"
|
||||
order += "cpu_usage"
|
||||
order += "battery 0"
|
||||
#order += "load"
|
||||
order += "volume master"
|
||||
order += "tztime local"
|
||||
|
||||
wireless wlan0 {
|
||||
format_up = " (%quality at %essid, %bitrate) %ip"
|
||||
format_down = ""
|
||||
}
|
||||
|
||||
wireless wlan1 {
|
||||
format_up = " (%quality at %essid, %bitrate) %ip"
|
||||
format_down = ""
|
||||
}
|
||||
|
||||
ethernet eth0 {
|
||||
# if you use %speed, i3status requires the cap_net_admin capability
|
||||
format_up = " %ip"
|
||||
format_down = ""
|
||||
}
|
||||
|
||||
ethernet usb0 {
|
||||
# if you use %speed, i3status requires the cap_net_admin capability
|
||||
format_up = " %ip"
|
||||
format_down = "📱"
|
||||
}
|
||||
|
||||
cpu_usage {
|
||||
format = " %usage"
|
||||
}
|
||||
|
||||
battery 0 {
|
||||
format = "%status %percentage"
|
||||
format_down = ""
|
||||
status_chr = ""
|
||||
status_bat = ""
|
||||
status_full = ""
|
||||
path = "/sys/class/power_supply/BAT%d/uevent"
|
||||
low_threshold = 10
|
||||
}
|
||||
|
||||
path_exists VPN {
|
||||
# path exists when a VPN tunnel launched by nmcli/nm-applet is active
|
||||
path = "/proc/sys/net/ipv4/conf/tun0"
|
||||
format = "🔐"
|
||||
}
|
||||
|
||||
tztime local {
|
||||
format = "🕘 %d/%m/%Y %H:%M:%S"
|
||||
timezone = "Europe/Paris"
|
||||
}
|
||||
|
||||
load {
|
||||
format = "%5min"
|
||||
}
|
||||
|
||||
disk "/" {
|
||||
format = " %avail / %total"
|
||||
}
|
||||
|
||||
disk "/home" {
|
||||
format = " %avail / %total"
|
||||
}
|
||||
volume master {
|
||||
format = "🔈 %volume"
|
||||
format_muted = "🔇 %volume"
|
||||
device = "default"
|
||||
mixer = "Master"
|
||||
mixer_idx = 0
|
||||
}
|
|
@ -76,7 +76,7 @@ enable-ipc = true
|
|||
inherit = bar/base
|
||||
|
||||
modules-center = mpd
|
||||
modules-right = eth wlan xbacklight volume battery date
|
||||
modules-right = vpncheck eth wlan bbswitch xbacklight volume battery date
|
||||
|
||||
tray-position = right
|
||||
tray-padding = 2
|
||||
|
@ -84,7 +84,7 @@ tray-transparent = false
|
|||
|
||||
[bar/secondary]
|
||||
inherit = bar/base
|
||||
modules-right = cpu memory temperature ethMore wlanMore filesystem xbacklight volume date
|
||||
modules-right = cpu memory temperature vpncheck ethMore wlanMore filesystem bbswitch xbacklight volume date
|
||||
|
||||
|
||||
[module/filesystem]
|
||||
|
@ -174,6 +174,13 @@ icon-repeatone = 1
|
|||
toggle-on-foreground = ${theme.foreground}
|
||||
toggle-off-foreground = #55
|
||||
|
||||
[module/bbswitch]
|
||||
type = custom/script
|
||||
exec = grep -o '\w\+$' /proc/acpi/bbswitch
|
||||
exec-if = test -f /proc/acpi/bbswitch
|
||||
interval = 5
|
||||
prefix =
|
||||
format-foreground = ${theme.redF}
|
||||
|
||||
[module/xbacklight]
|
||||
type = internal/xbacklight
|
||||
|
@ -212,6 +219,13 @@ interval = 2
|
|||
format-foreground = ${theme.greenF}
|
||||
label = %gb_free%
|
||||
|
||||
[module/vpncheck]
|
||||
type = custom/script
|
||||
exec = echo
|
||||
exec-if = pgrep openvpn
|
||||
interval = 5
|
||||
format-foreground = ${theme.blueF}
|
||||
|
||||
[module/eth]
|
||||
type = internal/network
|
||||
interface = ${env:ethI:eth0}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -6,3 +6,5 @@
|
|||
excludesfile = ~/.gitignore
|
||||
[push]
|
||||
default = matching
|
||||
[alias]
|
||||
git = !exec git
|
||||
|
|
3
scripts/arch-kexec
Executable file
3
scripts/arch-kexec
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
sudo kexec -l /boot/vmlinuz-linux --initrd=/boot/initramfs-linux.img --reuse-cmdlin
|
||||
sudo systemctl kexec
|
65
scripts/archive
Executable file
65
scripts/archive
Executable file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="Place a folder in ~/Documents in ~/Documents/Archives and symlink it")
|
||||
parser.add_argument('dir', metavar='DIRECTORY', type=str, help="The directory to archive")
|
||||
parser.add_argument('-d', '--dry', action='store_true')
|
||||
args = parser.parse_args()
|
||||
|
||||
# Finding directories
|
||||
assert('HOME' in os.environ), "Home directory unknown"
|
||||
docs = os.path.realpath(os.path.join(os.environ['HOME'], 'Documents'))
|
||||
assert(os.path.isdir(docs)), "Documents folder not found"
|
||||
arcs = os.path.join(docs, 'Archives')
|
||||
assert(os.path.isdir(arcs)), "Archives folder not found"
|
||||
|
||||
def archive(docdir):
|
||||
docdir = os.path.realpath(args.dir)
|
||||
assert(os.path.isdir(docdir)), docdir + " must be a directory"
|
||||
|
||||
assert(docdir.startswith(docs)), "Directory is not in the document folder"
|
||||
assert(not docdir.startswith(arcs)), "Directory is already in the archive folder"
|
||||
|
||||
reldir = os.path.relpath(docdir, docs)
|
||||
print("ARC", reldir)
|
||||
|
||||
arcdir = os.path.join(arcs, reldir)
|
||||
parentArcdir = os.path.realpath(os.path.join(arcdir, '..'))
|
||||
parentDocdir = os.path.realpath(os.path.join(docdir, '..'))
|
||||
linkDest = os.path.relpath(arcdir, parentDocdir)
|
||||
|
||||
# BULLSHIT
|
||||
|
||||
# If the directory exists
|
||||
if os.path.isdir(arcdir):
|
||||
return
|
||||
# for f in os.listdir(arcdir):
|
||||
# assert(os.path.isdir(f)), "Something unknown in Archive dir")
|
||||
# archive(os.path.join(arcdir, f))
|
||||
|
||||
# If the directory doesn't exist, create the directories under it and move all the folder
|
||||
else:
|
||||
|
||||
if args.dry:
|
||||
print("mkdir -p", parentArcdir)
|
||||
else:
|
||||
os.makedirs(parentArcdir, exist_ok=True)
|
||||
|
||||
if args.dry:
|
||||
print("mv", docdir, arcdir)
|
||||
else:
|
||||
os.rename(docdir, arcdir)
|
||||
|
||||
if args.dry:
|
||||
print("ln -s", linkDest, docdir)
|
||||
else:
|
||||
os.symlink(linkDest, docdir)
|
||||
|
||||
|
||||
|
||||
def unarchive(arcdir):
|
||||
return
|
||||
|
||||
archive(args.dir)
|
12
scripts/cudarun
Executable file
12
scripts/cudarun
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [ -z $DISPLAY ]
|
||||
then
|
||||
sudo tee /proc/acpi/bbswitch <<< ON
|
||||
"$@"
|
||||
rmmod nvidia_uvm
|
||||
rmmod nvidia
|
||||
sudo tee /proc/acpi/bbswitch <<< OFF
|
||||
else
|
||||
PATH="/opt/cuda/bin:$PATH" LD_LIBRARY_PATH="/opt/cuda/lib64:$LD_LIBRARY_PATH" VBLANK=0 VGL_READBACK=pbo optirun -c yuv "$@"
|
||||
fi
|
|
@ -142,7 +142,39 @@ function _debloc-ldconfig {
|
|||
find $DEBLOC_ROOT{/usr,}/lib -type l -name "*.so*" | while read link; do
|
||||
yes | cp --force --no-dereference --preserve=links "$link" "$DEBLOC_LD" &> /dev/null
|
||||
done &> /dev/null
|
||||
}
|
||||
|
||||
# Fix absolute symbolic links
|
||||
function _debloc-fixRootSymlinks {
|
||||
find $DEBLOC_ROOT -type l | while read src
|
||||
do
|
||||
dst="$(readlink "$src")"
|
||||
if echo "$dst" | grep '^/' | grep -q -v "^$DEBLOC_ROOT"
|
||||
then
|
||||
newDst="$DEBLOC_ROOT$dst"
|
||||
if [ -f "$newDst" ]
|
||||
then
|
||||
echo "$src → $newDst"
|
||||
rm "$src"
|
||||
ln -s "$newDst" "$src"
|
||||
else
|
||||
echo "Ignoring $src pointing to $dst"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function _debloc-fixPkgconfPrefix {
|
||||
sed "s|^prefix=/usr$|prefix=$DEBLOC_ROOT/usr|" $(find $DEBLOC_ROOT -type f -name "*.pc") -i
|
||||
}
|
||||
|
||||
function debloc_fix {
|
||||
echo "Fixing absolute symbolic links..."
|
||||
_debloc-fixRootSymlinks
|
||||
echo "Linking libraries in /ld"
|
||||
_debloc-ldconfig
|
||||
echo "Fixing prefix in pkg-config files"
|
||||
_debloc-fixPkgconfPrefix
|
||||
}
|
||||
|
||||
# Install debian archive
|
||||
|
@ -180,7 +212,7 @@ function _debloc-install { # package
|
|||
DEB_FILE=$(mktemp) &> /dev/null
|
||||
path=$(_debloc-packagePath $pkg)
|
||||
echo -e "${DEBIAN_MIRROR}" | while read mirror; do
|
||||
if [ -z $mirror ]; then
|
||||
if [ -z "$mirror" ]; then
|
||||
continue
|
||||
fi
|
||||
url=${mirror}/${path}
|
||||
|
@ -258,8 +290,9 @@ function debloc_env {
|
|||
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 PYTHONPATH=\"$DEBLOC_ROOT/usr/lib/python2/dist-packages:$DEBLOC_ROOT/usr/lib/python3/dist-packages:$DEBLOC_ROOT/usr/lib/python2.7/dist-packages:$DEBLOC_ROOT/usr/lib/python3.5/dist-packages:\$PYTHONPATH\""
|
||||
echo "export QT_QPA_PLATFORM_PLUGIN_PATH=\"$DEBLOC_ROOT/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms\""
|
||||
echo "export PKG_CONFIG_PATH=\"$DEBLOC_ROOT/usr/share/pkgconfig/:$DEBLOC_ROOT/usr/lib/x86_64-linux-gnu/pkgconfig/:$DEBLOC_ROOT/usr/lib/pkgconfig/:\$PKG_CONFIG_PATH\""
|
||||
}
|
||||
|
||||
function debloc_info {
|
||||
|
@ -283,22 +316,33 @@ function debloc_install { # package
|
|||
if [ -z $1 ]; then
|
||||
debloc_deb_help
|
||||
fi
|
||||
for pkg in $*
|
||||
do
|
||||
if [ $pkg == '--force' ] || [ $pkg == '-f' ]; then
|
||||
force=0
|
||||
fi
|
||||
done
|
||||
for pkg in $*; do
|
||||
if [ $pkg == '--force' ] || [ $pkg == '-f' ]; then
|
||||
continue
|
||||
fi
|
||||
pkg=$(_debloc-filterVirtual $pkg)
|
||||
_debloc-exists $pkg
|
||||
if [ $? == 0 ]; then
|
||||
echo "Unknown package $pkg"
|
||||
continue
|
||||
fi
|
||||
_debloc-locallyInstalled $pkg
|
||||
if [ $? == 1 ]; then
|
||||
echo "Package $pkg is already installed with Debloc"
|
||||
continue
|
||||
fi
|
||||
_debloc-globallyInstalled $pkg
|
||||
if [ $? == 1 ]; then
|
||||
echo "Package $pkg is already installed on the system"
|
||||
continue
|
||||
if [ ! -v force ]; then
|
||||
_debloc-locallyInstalled $pkg
|
||||
if [ $? == 1 ]; then
|
||||
echo "Package $pkg is already installed with Debloc"
|
||||
continue
|
||||
fi
|
||||
_debloc-globallyInstalled $pkg
|
||||
if [ $? == 1 ]; then
|
||||
echo "Package $pkg is already installed on the system"
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
_debloc-installDeps $pkg
|
||||
done
|
||||
|
@ -385,6 +429,7 @@ function debloc_help {
|
|||
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 " fix Apply some fixes in the fake filesystem"
|
||||
echo " flush Remove every package installed from the fake filesystem"
|
||||
echo " help Get help with commands"
|
||||
echo
|
||||
|
|
70
scripts/gitghost
Executable file
70
scripts/gitghost
Executable file
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/bash
|
||||
|
||||
# Replace git folders with a placeholder containing the remote and the commit
|
||||
|
||||
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 [[ "$#" == 0 || "$#" > 2 ]]
|
||||
then
|
||||
echo "Usage: $0 gitfolder [-y]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
folder="$(echo "$1" | sed 's/\/*$//')"
|
||||
if [ "$2" == "-y" ]
|
||||
then
|
||||
donotask=true
|
||||
fi
|
||||
|
||||
if [ ! -d "$folder/.git" ]
|
||||
then
|
||||
echo "$folder is not a git repository"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$(git -C "$folder" diff)" ]
|
||||
then
|
||||
echo "WARNING: There are unstaged change. Those will be discarded if you continue."
|
||||
fi
|
||||
|
||||
echo "Be sure that every commit in the repository is backed up somewhere else, since those will be discarded."
|
||||
|
||||
TMPFILE=$(mktemp)
|
||||
|
||||
(echo "[gitplaceholder]"
|
||||
echo "lastcommit=$(git log --format="%H" -n 1)"
|
||||
echo
|
||||
echo "[remote]"
|
||||
git -C "$folder" remote -v
|
||||
echo
|
||||
echo "[branch]"
|
||||
git -C "$folder" branch -v
|
||||
echo
|
||||
echo "[diff]"
|
||||
git -C "$folder" diff -v) > $TMPFILE 2> /dev/null
|
||||
|
||||
if [ ! $donotask ]
|
||||
then
|
||||
less $TMPFILE
|
||||
echo
|
||||
echo "This will be written in place of $folder."
|
||||
prompt "Do you want to continue ?"
|
||||
if [ "$?" == 0 ]
|
||||
then
|
||||
echo "Canceled"
|
||||
rm $TMPFILE
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
echo "Dummying..."
|
||||
rm -rf "$folder"
|
||||
mv $TMPFILE $folder
|
10
scripts/heavyPackages
Executable file
10
scripts/heavyPackages
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Return a list of packages sorted by size
|
||||
|
||||
(echo PACKAGE SIZE; \
|
||||
for A in /var/lib/pacman/local/*/desc; do
|
||||
(sed -n 2p $A; (grep '^%SIZE%$' $A -A1 | tail -1)) | tr '\n' ' '; echo
|
||||
done \
|
||||
| sort -nrk2) \
|
||||
| column -t
|
|
@ -3,9 +3,9 @@
|
|||
# Setups an Arch Linux system the way I like it
|
||||
# (requires sudo)
|
||||
|
||||
if which pacman &> /dev/null; then
|
||||
if ! which pacman &> /dev/null; then
|
||||
echo "This is not an Arch Linux system (or pacman isn't installed)"
|
||||
return 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Configuration
|
||||
|
@ -21,21 +21,21 @@ function prompt { # text
|
|||
}
|
||||
|
||||
# Don't ask for things that are already there
|
||||
if which yaourt &> /dev/null; then
|
||||
local YAOURT=1
|
||||
if which pacaur &> /dev/null; then
|
||||
PACAUR=1
|
||||
fi
|
||||
if which bauerbill &> /dev/null; then
|
||||
local BAUERBILL=1
|
||||
BAUERBILL=1
|
||||
fi
|
||||
|
||||
if [ -z $YAOURT ]; then
|
||||
prompt "Do you want yaourt on this machine?"
|
||||
local YAOURT=$?
|
||||
if [ -z $PACAUR ]; then
|
||||
prompt "Do you want pacaur on this machine?"
|
||||
PACAUR=$?
|
||||
fi
|
||||
if [ $YAOURT == 1 ]; then
|
||||
if [ $PACAUR == 1 ]; then
|
||||
if [ -z $BAUERBILL ]; then
|
||||
prompt "Do you want bauerbill on this machine?"
|
||||
local BAUERBILL=$?
|
||||
BAUERBILL=$?
|
||||
fi
|
||||
else
|
||||
BAUERBILL=0
|
||||
|
@ -55,10 +55,11 @@ function inst {
|
|||
|
||||
# Install package from PKGBUILD file
|
||||
function installPKGBUILD { # url
|
||||
# TODO Download snapshots
|
||||
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
|
||||
cd "$TMP_DIR"
|
||||
wget "$1" -O PKGBUILD
|
||||
makepkg -si
|
||||
makepkg -si --noconfirm
|
||||
cd -
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
|
@ -66,41 +67,62 @@ function installPKGBUILD { # url
|
|||
# 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"
|
||||
# Aur
|
||||
|
||||
pacman -Q pacaur &> /dev/null
|
||||
if [[ $PACAUR == 1 && $? == 1 ]]; then
|
||||
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=cower"
|
||||
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=pacaur"
|
||||
fi
|
||||
|
||||
if pacman -Q pamac ; then
|
||||
sudo pacman -Rsc pamac
|
||||
# Git for /etc
|
||||
sudo pacman -S etckeeper --noconfirm --needed
|
||||
sudo etckeeper init
|
||||
sudo etckeeper commit "~/.dotfiles/scripts/install-arch commit"
|
||||
|
||||
# Uninstall Manjaro's pamac
|
||||
if pacman -Q pamac &> /dev/null ; then
|
||||
sudo pacman -Rsc pamac --noconfirm
|
||||
fi
|
||||
|
||||
# Ccache
|
||||
sudo pacman -S ccache --noconfirm --needed
|
||||
sudo sed 's|BUILDENV=\(.\+\)!ccache\(.\+\)|BUILDENV=\1ccache\2|' /etc/makepkg.conf -i
|
||||
|
||||
# Bauerbill
|
||||
pacman -Q bauerbill &> /dev/null
|
||||
if [[ $BAUERBILL == 1 && $? == 1 ]]; then
|
||||
sudo pacman -Sy manjaro-{hotfixes,keyring,release,system} --noconfirm
|
||||
sudo pacman -Sy
|
||||
|
||||
gpg --recv-keys 1D1F0DC78F173680
|
||||
installPKGBUILD http://xyne.archlinux.ca/projects/reflector/pkgbuild/PKGBUILD
|
||||
yaourt -S bauerbill --noconfirm
|
||||
pacaur -S bauerbill --noconfirm --noedit
|
||||
|
||||
bb-wrapper -Su
|
||||
# TODO Prompt if all went well, if not restart
|
||||
bauerbill -Su --noconfirm
|
||||
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
|
||||
sudo pacman -S tlp --noconfirm --needed
|
||||
sudo sed 's|SATA_LINKPWR_ON_BAT=min_power|SATA_LINKPWR_ON_BAT=max_performance|' /etc/default/tlp -i
|
||||
sudo systemctl enable tlp.service tlp-sleep.service
|
||||
sudo systemctl disable systemd-rfkill.service systemd-rfkill.socket
|
||||
sudo tlp start
|
||||
|
||||
# TODO
|
||||
# make -j8 in MAKEPKG
|
||||
# time
|
||||
# nfs
|
||||
# hibernate
|
||||
# Numlock on boot
|
||||
echo -e "[Service]\nExecStartPre=/bin/sh -c 'setleds +num < /dev/%I'" | sudo systemctl edit getty\@.service
|
||||
|
||||
# Makeflags
|
||||
sudo sed "s|#MAKEFLAGS=\"-j2\"|MAKEFLAGS=\"-j$(nproc)\"|" /etc/makepkg.conf -i
|
||||
|
||||
# Time synchronisation
|
||||
sudo pacman -S ntp --noconfirm --needed
|
||||
sudo systemctl start ntpd
|
||||
sudo systemctl enable ntpd
|
||||
|
||||
# MANUAL
|
||||
|
||||
# Hibernation
|
||||
# Add resume=UUID=<UUID-of-swap-partition> to GRUB_CMDLINE_LINUX_DEFAULT and run `sudo grub-mkconfig -o /boot/grub/grub.cfg`
|
||||
|
||||
|
|
|
@ -54,7 +54,14 @@ if which pacman &> /dev/null; then
|
|||
function installFileOne { # file
|
||||
sudo pacman -U "$1"
|
||||
}
|
||||
if which yaourt &> /dev/null; then
|
||||
if which pacaur &> /dev/null; then
|
||||
function altInstallOne { # package
|
||||
pacman -Q $1 &> /dev/null
|
||||
if [ $? == 1 ]; then
|
||||
pacaur -S "$1" --noconfirm --noedit
|
||||
fi
|
||||
}
|
||||
elif which yaourt &> /dev/null; then
|
||||
function altInstallOne { # package
|
||||
pacman -Q $1 &> /dev/null
|
||||
if [ $? == 1 ]; then
|
||||
|
@ -107,7 +114,6 @@ elif which dpkg &> /dev/null; then
|
|||
fi
|
||||
rm -f $STATUS > /dev/null
|
||||
|
||||
echo 101 $1 $installed
|
||||
# Installing if it's not installed
|
||||
if [ $installed == 0 ]; then
|
||||
# TODO noconfirm
|
||||
|
@ -174,10 +180,10 @@ if [ $TERMUX == 1 ]; then
|
|||
inst tsu
|
||||
fi
|
||||
fi
|
||||
inst moreutils screen ncdu lsof htop proxytunnel pv curl wget sshfs netcat mosh bash-completion rsync
|
||||
inst moreutils screen ncdu lsof htop proxytunnel pv curl wget sshfs netcat mosh bash-completion rsync pwgen
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst gopass
|
||||
altInst tldr-bash-git
|
||||
inst bash-completion
|
||||
altInst gopass
|
||||
else
|
||||
inst pass
|
||||
wget -qO ~/.bin/ https://raw.githubusercontent.com/pepa65/tldr-bash-client/master/tldr
|
||||
|
@ -228,12 +234,13 @@ if [ $ARCH == 1 ] && [ $ADMIN == 1 ]; then
|
|||
fi
|
||||
else
|
||||
if [ $DEBIAN == 1 || $TERMUX == 1 ]; then
|
||||
inst python-dev python3-dev
|
||||
inst python-dev python3-dev cmake
|
||||
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
|
||||
|
||||
|
@ -242,10 +249,26 @@ fi
|
|||
if [ $GUI == 1 ]; then
|
||||
# Desktop manager
|
||||
inst i3 i3lock dunst unclutter xautolock feh numlockx scrot xterm xclip
|
||||
curl "https://raw.githubusercontent.com/FortAwesome/Font-Awesome/a8386aae19e200ddb0f6845b5feeee5eb7013687/fonts/fontawesome-webfont.ttf" > ~/.local/share/fonts/fontawesome-webfont.ttf
|
||||
if [ $ARCH == 1 ]; then
|
||||
altInst polybar-git ttf-font-awesome autorandr-git keynav-enhanced
|
||||
inst xorg-xinit
|
||||
altInst polybar-git autorandr-git keynav-enhanced pacmixer
|
||||
else
|
||||
echo "TODO compile polybar-git autorandr-git"
|
||||
# Compiling polybar
|
||||
if ! which polybar > /dev/null; then
|
||||
inst debhelper cmake libxcb-icccm4-dev libxcb-image0-dev libxcb-randr0-dev libx11-dev libxcb1-dev libxcb-util-dev libx11-xcb-dev linux-libc-dev libboost-dev x11proto-core-dev libxcb-ewmh-dev libxft-dev libasound2-dev libiw-dev libmpdclient-dev xcb-proto python-xcbgen libxcb-xkb-dev i3-wm libcairo2-dev libxcb-xrm-dev
|
||||
# TODO Figure which one are really needed
|
||||
#inst libasound2 libc6 libgcc1 libiw30 libmpdclient2 libstdc++6 libx11-6 libx11-xcb1 libxcb-ewmh2 libxcb-icccm4 libxcb-randr0 libxcb-xkb1 libxcb1 libxft2
|
||||
TMP=$(mktemp -d)
|
||||
git clone --branch 3.0.5 --recursive https://github.com/jaagr/polybar $TMP
|
||||
mkdir $TMP/build
|
||||
cd $TMP/build
|
||||
cmake ..
|
||||
make -j`nproc`
|
||||
strip bin/polybar
|
||||
mv bin/polybar ~/.bin/
|
||||
rm -rf $TMP
|
||||
fi
|
||||
fi
|
||||
if [ $DEBIAN == 1 ]; then
|
||||
inst suckless-tools keynav
|
||||
|
@ -261,10 +284,10 @@ if [ $GUI == 1 ]; then
|
|||
|
||||
# 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
|
||||
inst python3-lxml python-tox python3-pyqt5 python3-pyqt5.qtwebkit python3-pyqt5.qtquick python3-sip python3-jinja2 python3-pygments python3-yaml python3-pyqt5.qtsql libqt5sql5-sqlite python3-pyqt5.qtwebengine python3-pyqt5.qtopengl python3-opengl
|
||||
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)
|
||||
$(cd $TMP_DIR; wget https://github.com/qutebrowser/qutebrowser/releases/download/v0.11.0/qutebrowser_0.11.0-1_all.deb)
|
||||
instFile $TMP_DIR/*.deb
|
||||
rm -rf $TMP_DIR
|
||||
|
||||
|
@ -277,9 +300,9 @@ if [ $GUI == 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
|
||||
TMP=$(mktemp /tmp/XXXXXXXXXX.c)
|
||||
wget https://gist.githubusercontent.com/ajnirp/208c03d3aa7f02c743d2/raw/55bf3eed25739173d8be57b5179ed5542cf40ed6/sct.c -O $TMP
|
||||
cc $TMP --std=c99 -lX11 -lXrandr -o $HOME/.bin/sct
|
||||
rm $TMP
|
||||
fi
|
||||
fi
|
||||
|
@ -297,20 +320,24 @@ if [ $EXTRA == 1 ]; then
|
|||
inst cmake clang llvm npm
|
||||
|
||||
# Extra CLI
|
||||
inst sl ffmpeg youtube-dl optipng syncthing
|
||||
inst ffmpeg youtube-dl optipng syncthing ccache
|
||||
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst jq
|
||||
altInst pdftk translate-shell git-lfs js-beautify insect visidata-git
|
||||
else
|
||||
# translate-shell
|
||||
curl -L git.io/trans > ~/.bin/trans
|
||||
chmod +x ~/.bin/trans
|
||||
fi
|
||||
|
||||
# Extra GUI
|
||||
if [ $GUI == 1 ]; then
|
||||
inst vlc gimp mpd vimpc
|
||||
inst vlc gimp mpd thunar noto-fonts-emoji musescore
|
||||
|
||||
if [ $ARCH == 1 ]; then
|
||||
inst simplescreenrecorder
|
||||
altInst pacmixer
|
||||
altInst pacmixer xcursor-menda-git menda-themes-git menda-maia-icon-theme vimpc-git mpc
|
||||
fi
|
||||
|
||||
fi
|
||||
|
|
|
@ -67,9 +67,6 @@ function _machines-apiSigned {
|
|||
_machines-api "$@" --certificate=$MACHINES_CONFIG/machines.crt --private-key=$MACHINES_CONFIG/machines.key
|
||||
}
|
||||
|
||||
function _machines-getQR {
|
||||
_machines-apiSigned totp | qrencode -o - | feh -
|
||||
}
|
||||
|
||||
# APPLICATION KEYS & CERTIFICATE
|
||||
|
||||
|
@ -142,16 +139,16 @@ function _machines-getAkey { # network
|
|||
}
|
||||
|
||||
function _machines-updateAkey {
|
||||
KEY_FILE=$(mktemp)
|
||||
MYKEY_FILE=$(mktemp)
|
||||
network=$(cat $MACHINES_CONFIG/this | grep '^network=' | cut -d '=' -f 2)
|
||||
_machines-getAkey $network > $KEY_FILE
|
||||
_machines-getAkey $network > "$MYKEY_FILE"
|
||||
if [ $? == 0 ]; then
|
||||
yes | mv $KEY_FILE $MACHINES_HOME/.ssh/authorized_keys &> /dev/null
|
||||
yes | mv $MYKEY_FILE $MACHINES_HOME/.ssh/authorized_keys &> /dev/null
|
||||
return 0
|
||||
else
|
||||
cat $KEY_FILE
|
||||
cat $MYKEY_FILE
|
||||
echo "[ERROR] Authorized keys are not properly signed"
|
||||
rm $KEY_FILE
|
||||
rm $MYKEY_FILE
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
@ -171,12 +168,12 @@ function _machines-addElement { # element elementType default
|
|||
$EDITOR $FILE
|
||||
data=$(_machines-postFile $FILE)
|
||||
rm $FILE &> /dev/null
|
||||
machines-apiSigned $2 --post-data "name=$1$data"
|
||||
_machines-apiSigned $2 --post-data "name=$1$data"
|
||||
}
|
||||
|
||||
function _machines-editElement { # element elementType
|
||||
FILE=$(mktemp)
|
||||
_machines-apiSigned $2/$1
|
||||
_machines-apiSigned $2/$1 > $FILE
|
||||
$EDITOR $FILE
|
||||
data=$(_machines-postFile $FILE)
|
||||
rm $FILE &> /dev/null
|
||||
|
@ -238,7 +235,6 @@ function machines_machine_add { # machine
|
|||
machines_machine_add_help
|
||||
exit 1
|
||||
fi
|
||||
_machines-addElement $1 machine "allowed[]=\nsecure=false"
|
||||
_machines-addElement $1 machine "host[]=\nnetwork=\nuserkey=\nhostkey=\nuser="
|
||||
}
|
||||
|
||||
|
@ -435,6 +431,12 @@ function machines_update {
|
|||
_machines-updateAkey
|
||||
}
|
||||
|
||||
function machines_totp {
|
||||
url=$(_machines-apiSigned totp)
|
||||
echo "URL : $url"
|
||||
echo "$url" | qrencode -o - | feh -
|
||||
}
|
||||
|
||||
|
||||
function machines_help {
|
||||
command="$1"
|
||||
|
@ -457,6 +459,8 @@ function machines_help {
|
|||
echo " network|net|n Modify networks"
|
||||
echo " update-all Update all machines available via SSH"
|
||||
echo " regen-keys Regenerate system keys"
|
||||
echo " sign Sign recent transactions for propagation"
|
||||
echo " totp Get TOTP generating QR code / URL"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -37,11 +37,13 @@ if (argv.t) {
|
|||
template = fs.readFileSync(argv.t, "utf8");
|
||||
}
|
||||
|
||||
var latex = true;
|
||||
// TODO Arg
|
||||
|
||||
// Settings
|
||||
|
||||
var extraLangages = {
|
||||
avrpseudo: function (hljs) {
|
||||
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';
|
||||
|
@ -55,7 +57,7 @@ var extraLangages = {
|
|||
});
|
||||
return lang;
|
||||
},
|
||||
avrasmplus: function (hljs) {
|
||||
avrasmplus: function(hljs) {
|
||||
lang = extend({}, highlight.getLanguage('avrasm'));
|
||||
lang.keywords.keyword += ' si saut alors et ou if then goto && || <-';
|
||||
lang.contains.push({
|
||||
|
@ -73,8 +75,10 @@ for (lang in extraLangages) {
|
|||
|
||||
var renderer = new marked.Renderer();
|
||||
marked.setOptions({
|
||||
highlight: function (code, lang) {
|
||||
if (highlight.getLanguage(lang)) {
|
||||
highlight: function(code, lang) {
|
||||
if (lang == 'raw') {
|
||||
return code;
|
||||
} else if (highlight.getLanguage(lang)) {
|
||||
return highlight.highlight(lang, code).value;
|
||||
} else {
|
||||
// if (extraLangages[lang]) {
|
||||
|
@ -93,17 +97,27 @@ marked.setOptions({
|
|||
markdownString = fs.readFileSync(argv.i, "utf8");
|
||||
|
||||
// TeX
|
||||
markdownString = markdownString.replace(/\\\$/g, '$')
|
||||
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});
|
||||
});
|
||||
if (latex) {
|
||||
markdownString = markdownString.replace(/\\\$/g, '$')
|
||||
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);
|
||||
htmlString = marked(markdownString, {
|
||||
renderer: renderer
|
||||
});
|
||||
// fullHtmlString = htmlString;
|
||||
fullHtmlString = template.replace('%BODY%', () => { return htmlString });
|
||||
|
||||
|
||||
// Saving
|
||||
if (argv.o == '/dev/stdout') {
|
||||
|
|
2
scripts/newestFile
Executable file
2
scripts/newestFile
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env bash
|
||||
find -type f -printf '%T+ %p\n' | sort | tail "$@"
|
2
scripts/oldestFile
Executable file
2
scripts/oldestFile
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env bash
|
||||
find -type f -printf '%T+ %p\n' | sort | head "$@"
|
|
@ -7,6 +7,7 @@
|
|||
# (executable)
|
||||
|
||||
# TODO Run in parallel
|
||||
# TODO Lots of dupplicated code there
|
||||
|
||||
dir=${1:-$PWD}
|
||||
total=$(mktemp)
|
||||
|
@ -20,7 +21,53 @@ function showtotal {
|
|||
|
||||
trap showtotal SIGTERM SIGINT SIGFPE
|
||||
|
||||
function doReplace { # candidate original
|
||||
mv "$c" "$o"
|
||||
saved=$(($os - $cs))
|
||||
perc=$((100 * $saved / $os))
|
||||
echo "→ $os ⇒ $cs (saved $saved bytes, or ${perc}%)"
|
||||
newtotal=$(($(cat $total) + $saved))
|
||||
echo -n $newtotal > $total
|
||||
}
|
||||
|
||||
function replace { # candidate original
|
||||
c="$1"
|
||||
o="$2"
|
||||
|
||||
# File verifications
|
||||
if [ ! -f "$o" ]; then
|
||||
echo "→ Original is inexistant, skipping!"
|
||||
return
|
||||
fi
|
||||
if [ ! -f "$c" ]; then
|
||||
echo "→ Candidate is inexistant, skipping!"
|
||||
return
|
||||
fi
|
||||
|
||||
# Size verifications
|
||||
cs=$(wc -c "$c" | cut -d' ' -f1)
|
||||
os=$(wc -c "$o" | cut -d' ' -f1)
|
||||
if [ $cs -le 0 ]; then
|
||||
echo "→ Candidate is empty, skipping!"
|
||||
rm "$c"
|
||||
return
|
||||
fi
|
||||
if [ $cs -eq $os ]; then
|
||||
echo "→ Candidate weight the same, skipping."
|
||||
rm "$c"
|
||||
return
|
||||
fi
|
||||
if [ $cs -gt $os ]; then
|
||||
echo "→ Candidate is larger, skipping."
|
||||
rm "$c"
|
||||
return
|
||||
fi
|
||||
|
||||
doReplace "$c" "$o"
|
||||
}
|
||||
|
||||
function replaceImg { # candidate original
|
||||
# With bitmap verification
|
||||
|
||||
c="$1"
|
||||
o="$2"
|
||||
|
@ -61,11 +108,7 @@ function replaceImg { # candidate original
|
|||
convert "$o" "$ppmo"
|
||||
|
||||
if cmp --silent "$ppmo" "$ppmc"; then
|
||||
mv "$c" "$o"
|
||||
saved=$(($os - $cs))
|
||||
echo "→ $os ⇒ $cs (saved $saved bytes)"
|
||||
newtotal=$(($(cat $total) + $saved))
|
||||
echo -n $newtotal > $total
|
||||
doReplace "$c" "$o"
|
||||
else
|
||||
echo "→ Candidate don't have the same bit map as original, skipping!"
|
||||
fi
|
||||
|
@ -82,22 +125,9 @@ do
|
|||
prog=$(mktemp --suffix .jpg)
|
||||
jpegtran -copy all -progressive "$image" > "$prog"
|
||||
echo "→ Progressive done"
|
||||
|
||||
optz=$(mktemp --suffix .jpg)
|
||||
jpegtran -copy all -optimize "$image" > "$optz"
|
||||
echo "→ Optimize done"
|
||||
|
||||
progs=$(wc -c "$prog" | cut -d' ' -f1)
|
||||
optzs=$(wc -c "$optz" | cut -d' ' -f1)
|
||||
if [[ $progs -le $optzs ]]; then
|
||||
echo "→ Using progressive"
|
||||
replaceImg "$prog" "$image"
|
||||
rm "$optz"
|
||||
else
|
||||
echo "→ Using optimized"
|
||||
replaceImg "$optz" "$image"
|
||||
rm "$prog"
|
||||
fi
|
||||
replace "$prog" "$image"
|
||||
|
||||
|
||||
done <<< "$(find "$dir" -type f -iregex ".+.jpe?g$")"
|
||||
|
||||
|
@ -109,10 +139,10 @@ do
|
|||
|
||||
temp=$(mktemp --suffix .png)
|
||||
cp "$image" "$temp"
|
||||
optipng -o7 -quiet "$temp"
|
||||
optipng -quiet "$temp"
|
||||
echo "→ Optimize done"
|
||||
|
||||
replaceImg "$temp" "$image"
|
||||
replace "$temp" "$image"
|
||||
|
||||
done <<< "$(find "$dir" -type f -iname "*.png")"
|
||||
|
||||
|
|
1043
scripts/package-lock.json
generated
Normal file
1043
scripts/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -38,7 +38,7 @@ do
|
|||
if [[ $dry == 0 ]]; then
|
||||
echo "$src" → "$dst"
|
||||
else
|
||||
mv "$src" "$dst"
|
||||
mv -- "$src" "$dst"
|
||||
fi
|
||||
|
||||
done
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
#!/data/data/com.termux/files/usr/bin/bash
|
||||
echo "/system/bin/mount -o remount,rw /" | tsu
|
||||
echo "ln -s /data/data/com.termux/files/usr /usr" | tsu
|
||||
echo "/system/bin/mount -o remount,ro /" | tsu
|
||||
|
|
7
vimpcrc
Normal file
7
vimpcrc
Normal file
|
@ -0,0 +1,7 @@
|
|||
map FF :browse<C-M>gg/
|
||||
map à :set add next<C-M>a:set add end<C-M>
|
||||
map @ :set add next<C-M>a:set add end<C-M>:next<C-M>
|
||||
map ° D:browse<C-M>A:shuffle<C-M>:play<C-M>:playlist<C-M>
|
||||
set songformat {%a - %b: %t}|{%f}$E$R $H[$H%l$H]$H
|
||||
set libraryformat %n \| {%t}|{%f}$E$R $H[$H%l$H]$H
|
||||
set ignorecase
|
Loading…
Reference in a new issue