Merge branch 'master' of frogit:geoffrey/dotfiles

This commit is contained in:
Geoffrey Frogeye 2018-01-30 19:08:04 +01:00
commit 2ebe91cccf
41 changed files with 1524 additions and 1843 deletions

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "dotsync"]
path = dotsync
url = git@github.com:dotphiles/dotsync.git

View file

View file

@ -3,7 +3,7 @@
mkdir -p $HOME/.local/share/fonts mkdir -p $HOME/.local/share/fonts
echo $(for i in "" "%20Bold" "%20Oblique" "%20Bold%20Oblique"; do echo $(for i in "" "%20Bold" "%20Oblique" "%20Bold%20Oblique"; do
cd $HOME/.local/share/fonts 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) 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

View file

@ -1 +1 @@
profile .profile

9
bashrc
View file

@ -48,22 +48,21 @@ alias pacman='pacman --color auto'
alias dmesg='dmesg --ctime' alias dmesg='dmesg --ctime'
# Frequent mistakes # Frequent mistakes
alias sl=ls
alias al=la
alias mdkir=mkdir
alias systemclt=systemctl alias systemclt=systemctl
# Shortcuts for commonly used commands # Shortcuts for commonly used commands
alias ll="ls -l $LS_OPTIONS" alias ll="ls -l $LS_OPTIONS"
alias la="ls -la $LS_OPTIONS" alias la="ls -la $LS_OPTIONS"
alias al=sl
alias x='startx; logout' alias x='startx; logout'
alias s='sudo -s -E' alias s='sudo -s -E'
alias po='eval $(proxy off)' alias po='eval $(proxy off)'
alias nw="sudo systemctl restart NetworkManager" alias nw="sudo systemctl restart NetworkManager"
alias mc="machines" alias mc="machines"
alias tracefiles="strace -f -t -e trace=file" 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 # Superseding commands with better ones if they are present
if which vim &> /dev/null; then if which vim &> /dev/null; then
alias vi='vim' alias vi='vim'

1
bower Symbolic link
View file

@ -0,0 +1 @@
.cache/bower

1
cargo Symbolic link
View file

@ -0,0 +1 @@
.cache/cargo

View file

@ -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

View file

@ -38,7 +38,7 @@ bindsym button2 kill
bindsym $mod+F2 exec --no-startup-id ~/.config/i3/dmenu_run bindsym $mod+F2 exec --no-startup-id ~/.config/i3/dmenu_run
bindsym Mod1+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+x exec --no-startup-id ~/.config/i3/clipmenu
bindsym $mod+asterisk exec --no-startup-id ~/.config/i3/sshmenu bindsym $mod+asterisk exec --no-startup-id ~/.config/i3/sshmenu
bindsym $mod+dollar exec --no-startup-id ~/.config/i3/sshmenu root bindsym $mod+dollar exec --no-startup-id ~/.config/i3/sshmenu root
@ -145,14 +145,19 @@ set $WS10 10
# Workspace output # Workspace output
workspace "$WS1" output LVDS1 workspace "$WS1" output LVDS1
workspace "$WS2" output VGA1 workspace "$WS2" output VGA1
workspace "$WS2" output HDMI1
workspace "$WS3" output LVDS1 workspace "$WS3" output LVDS1
workspace "$WS4" output VGA1 workspace "$WS4" output VGA1
workspace "$WS4" output HDMI1
workspace "$WS5" output LVDS1 workspace "$WS5" output LVDS1
workspace "$WS6" output VGA1 workspace "$WS6" output VGA1
workspace "$WS6" output HDMI1
workspace "$WS7" output LVDS1 workspace "$WS7" output LVDS1
workspace "$WS8" output VGA1 workspace "$WS8" output VGA1
workspace "$WS8" output HDMI1
workspace "$WS9" output LVDS1 workspace "$WS9" output LVDS1
workspace "$WS10" output VGA1 workspace "$WS10" output VGA1
workspace "$WS10" output HDMI1
# switch to workspace # switch to workspace
bindsym $mod+1 workspace $WS1 bindsym $mod+1 workspace $WS1
@ -234,7 +239,7 @@ assign [class="Clementine"] $WS10
assign [title="TweetDeck"] $WS8 assign [title="TweetDeck"] $WS8
# Open specific applications in floating mode # 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="Firefox"] layout tabbed
for_window [class="qutebrowser"] layout tabbed for_window [class="qutebrowser"] layout tabbed
@ -356,7 +361,6 @@ bindsym $mod+F5 exec --no-startup-id xautolock -enable
# Autostart applications # 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 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 # Password remembering
exec --no-startup-id gnome-keyring-daemon # Password remembering exec --no-startup-id gnome-keyring-daemon # Password remembering
exec --no-startup-id numlockx on # Activate Num lock 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 keynav # Keyboard cursor controller
#exec --no-startup-id $HOME/.config/i3/clipmenud # Clipboard manager #exec --no-startup-id $HOME/.config/i3/clipmenud # Clipboard manager
exec --no-startup-id mpd # Music Player Daemon 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 set $ignore #ff00000

View file

@ -1,2 +1,2 @@
#!/bin/sh #!/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 "$@"

View file

@ -8,17 +8,23 @@ if [[ $1 == "--type" ]]; then
shift shift
fi fi
prefix=${PASSWORD_STORE_DIR-~/.password-store} if PASS=$(which gopass 2> /dev/null); then
password_files=( "$prefix"/**/*.gpg ) password_files="$($PASS ls --flat)"
password_files=( "${password_files[@]#"$prefix"/}" ) elif PASS=$(which pass 2> /dev/null); then
password_files=( "${password_files[@]%.gpg}" ) 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" "$@") password=$(printf '%s\n' "${password_files[@]}" | $HOME/.config/i3/dmenu_cmd -p "Passwords" "$@")
[[ -n $password ]] || exit [[ -n $password ]] || exit
if [[ $typeit -eq 0 ]]; then if [[ $typeit -eq 0 ]]; then
pass show -c "$password" 2>/dev/null $PASS show -c "$password"
else else
xdotool - <<<"type --clearmodifiers -- $(pass show "$password" | head -n 1)" xdotool - <<<"type --clearmodifiers -- $($PASS show "$password" | head -n 1)"
fi fi

5
config/i3/test Normal file
View 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[@]}"

View file

@ -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
}

View file

@ -76,7 +76,7 @@ enable-ipc = true
inherit = bar/base inherit = bar/base
modules-center = mpd 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-position = right
tray-padding = 2 tray-padding = 2
@ -84,7 +84,7 @@ tray-transparent = false
[bar/secondary] [bar/secondary]
inherit = bar/base 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] [module/filesystem]
@ -174,6 +174,13 @@ icon-repeatone = 1
toggle-on-foreground = ${theme.foreground} toggle-on-foreground = ${theme.foreground}
toggle-off-foreground = #55 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] [module/xbacklight]
type = internal/xbacklight type = internal/xbacklight
@ -212,6 +219,13 @@ interval = 2
format-foreground = ${theme.greenF} format-foreground = ${theme.greenF}
label =  %gb_free% label =  %gb_free%
[module/vpncheck]
type = custom/script
exec = echo 
exec-if = pgrep openvpn
interval = 5
format-foreground = ${theme.blueF}
[module/eth] [module/eth]
type = internal/network type = internal/network
interface = ${env:ethI:eth0} interface = ${env:ethI:eth0}

File diff suppressed because it is too large Load diff

View file

@ -1 +1 @@
face .face

1
gem Symbolic link
View file

@ -0,0 +1 @@
.cache/gem

View file

@ -6,3 +6,5 @@
excludesfile = ~/.gitignore excludesfile = ~/.gitignore
[push] [push]
default = matching default = matching
[alias]
git = !exec git

1
go Symbolic link
View file

@ -0,0 +1 @@
.cache/go

2
icon
View file

@ -1 +1 @@
face .face

1
m2 Symbolic link
View file

@ -0,0 +1 @@
.cache/m2

1
npm Symbolic link
View file

@ -0,0 +1 @@
.cache/npm

1
nv Symbolic link
View file

@ -0,0 +1 @@
.cache/nv

3
scripts/arch-kexec Executable file
View 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
View 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
View 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

View file

@ -142,7 +142,39 @@ function _debloc-ldconfig {
find $DEBLOC_ROOT{/usr,}/lib -type l -name "*.so*" | while read link; do 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 yes | cp --force --no-dereference --preserve=links "$link" "$DEBLOC_LD" &> /dev/null
done &> /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 # Install debian archive
@ -180,7 +212,7 @@ function _debloc-install { # package
DEB_FILE=$(mktemp) &> /dev/null DEB_FILE=$(mktemp) &> /dev/null
path=$(_debloc-packagePath $pkg) path=$(_debloc-packagePath $pkg)
echo -e "${DEBIAN_MIRROR}" | while read mirror; do echo -e "${DEBIAN_MIRROR}" | while read mirror; do
if [ -z $mirror ]; then if [ -z "$mirror" ]; then
continue continue
fi fi
url=${mirror}/${path} url=${mirror}/${path}
@ -258,8 +290,9 @@ function debloc_env {
echo "export C_INCLUDE_PATH=\"$DEBLOC_ROOT/usr/include:\$C_INCLUDE_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 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 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 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 { function debloc_info {
@ -283,22 +316,33 @@ function debloc_install { # package
if [ -z $1 ]; then if [ -z $1 ]; then
debloc_deb_help debloc_deb_help
fi fi
for pkg in $*
do
if [ $pkg == '--force' ] || [ $pkg == '-f' ]; then
force=0
fi
done
for pkg in $*; do for pkg in $*; do
if [ $pkg == '--force' ] || [ $pkg == '-f' ]; then
continue
fi
pkg=$(_debloc-filterVirtual $pkg) pkg=$(_debloc-filterVirtual $pkg)
_debloc-exists $pkg _debloc-exists $pkg
if [ $? == 0 ]; then if [ $? == 0 ]; then
echo "Unknown package $pkg" echo "Unknown package $pkg"
continue continue
fi fi
_debloc-locallyInstalled $pkg if [ ! -v force ]; then
if [ $? == 1 ]; then _debloc-locallyInstalled $pkg
echo "Package $pkg is already installed with Debloc" if [ $? == 1 ]; then
continue echo "Package $pkg is already installed with Debloc"
fi continue
_debloc-globallyInstalled $pkg fi
if [ $? == 1 ]; then _debloc-globallyInstalled $pkg
echo "Package $pkg is already installed on the system" if [ $? == 1 ]; then
continue echo "Package $pkg is already installed on the system"
continue
fi
fi fi
_debloc-installDeps $pkg _debloc-installDeps $pkg
done done
@ -385,6 +429,7 @@ function debloc_help {
echo " install Install a debian package in 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 " deb Install from a .deb file in the fake filesystem"
echo " altern Update alternative" echo " altern Update alternative"
echo " fix Apply some fixes in the fake filesystem"
echo " flush Remove every package installed from the fake filesystem" echo " flush Remove every package installed from the fake filesystem"
echo " help Get help with commands" echo " help Get help with commands"
echo echo

70
scripts/gitghost Executable file
View 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
View 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

View file

@ -3,9 +3,9 @@
# Setups an Arch Linux system the way I like it # Setups an Arch Linux system the way I like it
# (requires sudo) # (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)" echo "This is not an Arch Linux system (or pacman isn't installed)"
return 1 exit 1
fi fi
# Configuration # Configuration
@ -21,21 +21,21 @@ function prompt { # text
} }
# Don't ask for things that are already there # Don't ask for things that are already there
if which yaourt &> /dev/null; then if which pacaur &> /dev/null; then
local YAOURT=1 PACAUR=1
fi fi
if which bauerbill &> /dev/null; then if which bauerbill &> /dev/null; then
local BAUERBILL=1 BAUERBILL=1
fi fi
if [ -z $YAOURT ]; then if [ -z $PACAUR ]; then
prompt "Do you want yaourt on this machine?" prompt "Do you want pacaur on this machine?"
local YAOURT=$? PACAUR=$?
fi fi
if [ $YAOURT == 1 ]; then if [ $PACAUR == 1 ]; then
if [ -z $BAUERBILL ]; then if [ -z $BAUERBILL ]; then
prompt "Do you want bauerbill on this machine?" prompt "Do you want bauerbill on this machine?"
local BAUERBILL=$? BAUERBILL=$?
fi fi
else else
BAUERBILL=0 BAUERBILL=0
@ -55,10 +55,11 @@ function inst {
# Install package from PKGBUILD file # Install package from PKGBUILD file
function installPKGBUILD { # url function installPKGBUILD { # url
# TODO Download snapshots
TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)" TMP_DIR="$(mktemp -d /tmp/pkgbuild.XXXXXXXXXX)"
cd "$TMP_DIR" cd "$TMP_DIR"
wget "$1" -O PKGBUILD wget "$1" -O PKGBUILD
makepkg -si makepkg -si --noconfirm
cd - cd -
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
} }
@ -66,41 +67,62 @@ function installPKGBUILD { # url
# SYSTEM # SYSTEM
inst wget inst wget
pacman -Q yaourt &> /dev/null # Aur
if [[ $YAOURT == 1 && $? == 1 ]]; then
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=package-query" pacman -Q pacaur &> /dev/null
installPKGBUILD "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=yaourt" 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 fi
if pacman -Q pamac ; then # Git for /etc
sudo pacman -Rsc pamac 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 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 pacman -Q bauerbill &> /dev/null
if [[ $BAUERBILL == 1 && $? == 1 ]]; then if [[ $BAUERBILL == 1 && $? == 1 ]]; then
sudo pacman -Sy manjaro-{hotfixes,keyring,release,system} --noconfirm sudo pacman -Sy
gpg --recv-keys 1D1F0DC78F173680 gpg --recv-keys 1D1F0DC78F173680
installPKGBUILD http://xyne.archlinux.ca/projects/reflector/pkgbuild/PKGBUILD installPKGBUILD http://xyne.archlinux.ca/projects/reflector/pkgbuild/PKGBUILD
yaourt -S bauerbill --noconfirm pacaur -S bauerbill --noconfirm --noedit
bb-wrapper -Su bauerbill -Su --noconfirm
# TODO Prompt if all went well, if not restart
else else
sudo pacman -Syu sudo pacman -Syu
fi fi
# Disable predictable network names
sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
# TLP # TLP
# sudo pacman -S tlp sudo pacman -S tlp --noconfirm --needed
# sudo systemctl enable tlp.service tlp-sleep.service sudo sed 's|SATA_LINKPWR_ON_BAT=min_power|SATA_LINKPWR_ON_BAT=max_performance|' /etc/default/tlp -i
# sudo systemctl disable systemd-rfkill sudo systemctl enable tlp.service tlp-sleep.service
sudo systemctl disable systemd-rfkill.service systemd-rfkill.socket
sudo tlp start
# TODO # Numlock on boot
# make -j8 in MAKEPKG echo -e "[Service]\nExecStartPre=/bin/sh -c 'setleds +num < /dev/%I'" | sudo systemctl edit getty\@.service
# time
# nfs # Makeflags
# hibernate 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`

View file

@ -54,7 +54,14 @@ if which pacman &> /dev/null; then
function installFileOne { # file function installFileOne { # file
sudo pacman -U "$1" 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 function altInstallOne { # package
pacman -Q $1 &> /dev/null pacman -Q $1 &> /dev/null
if [ $? == 1 ]; then if [ $? == 1 ]; then
@ -107,7 +114,6 @@ elif which dpkg &> /dev/null; then
fi fi
rm -f $STATUS > /dev/null rm -f $STATUS > /dev/null
echo 101 $1 $installed
# Installing if it's not installed # Installing if it's not installed
if [ $installed == 0 ]; then if [ $installed == 0 ]; then
# TODO noconfirm # TODO noconfirm
@ -174,10 +180,10 @@ if [ $TERMUX == 1 ]; then
inst tsu inst tsu
fi fi
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 if [ $ARCH == 1 ]; then
inst gopass inst bash-completion
altInst tldr-bash-git altInst gopass
else else
inst pass inst pass
wget -qO ~/.bin/ https://raw.githubusercontent.com/pepa65/tldr-bash-client/master/tldr wget -qO ~/.bin/ https://raw.githubusercontent.com/pepa65/tldr-bash-client/master/tldr
@ -228,12 +234,13 @@ if [ $ARCH == 1 ] && [ $ADMIN == 1 ]; then
fi fi
else else
if [ $DEBIAN == 1 || $TERMUX == 1 ]; then if [ $DEBIAN == 1 || $TERMUX == 1 ]; then
inst python-dev python3-dev inst python-dev python3-dev cmake
fi fi
YCM_ARGS="" YCM_ARGS=""
if [ $TERMUX != 1 ]; then if [ $TERMUX != 1 ]; then
YCM_ARGS="$YCM_ARGS --clang-completer --tern-completer" YCM_ARGS="$YCM_ARGS --clang-completer --tern-completer"
fi fi
python $HOME/.vim/bundle/YouCompleteMe/install.py $YCM_ARGS python $HOME/.vim/bundle/YouCompleteMe/install.py $YCM_ARGS
fi fi
@ -242,10 +249,26 @@ fi
if [ $GUI == 1 ]; then if [ $GUI == 1 ]; then
# Desktop manager # Desktop manager
inst i3 i3lock dunst unclutter xautolock feh numlockx scrot xterm xclip 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 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 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 fi
if [ $DEBIAN == 1 ]; then if [ $DEBIAN == 1 ]; then
inst suckless-tools keynav inst suckless-tools keynav
@ -261,10 +284,10 @@ if [ $GUI == 1 ]; then
# qutebrowser # qutebrowser
if [ $DEBIAN == 1 ]; then 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) TMP_DIR=$(mktemp -d)
$(cd $TMP_DIR; wget https://qutebrowser.org/python3-pypeg2_2.15.2-1_all.deb) $(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 instFile $TMP_DIR/*.deb
rm -rf $TMP_DIR rm -rf $TMP_DIR
@ -277,9 +300,9 @@ if [ $GUI == 1 ]; then
altInst sct altInst sct
elif [ $TERMUX != 1 ]; then elif [ $TERMUX != 1 ]; then
if [ ! -f $HOME/.bin/sct ]; then if [ ! -f $HOME/.bin/sct ]; then
TMP=$(mktemp) TMP=$(mktemp /tmp/XXXXXXXXXX.c)
wget http://www.tedunangst.com/flak/files/sct.c -O $TMP wget https://gist.githubusercontent.com/ajnirp/208c03d3aa7f02c743d2/raw/55bf3eed25739173d8be57b5179ed5542cf40ed6/sct.c -O $TMP
cc -std=c99 -O2 -I /usr/X11R6/include -o $HOME/.bin/sct $TMP -L /usr/X11R6/lib -lm -lX11 -lXrandr cc $TMP --std=c99 -lX11 -lXrandr -o $HOME/.bin/sct
rm $TMP rm $TMP
fi fi
fi fi
@ -297,20 +320,24 @@ if [ $EXTRA == 1 ]; then
inst cmake clang llvm npm inst cmake clang llvm npm
# Extra CLI # Extra CLI
inst sl ffmpeg youtube-dl optipng syncthing inst ffmpeg youtube-dl optipng syncthing ccache
if [ $ARCH == 1 ]; then if [ $ARCH == 1 ]; then
inst jq inst jq
altInst pdftk translate-shell git-lfs js-beautify insect visidata-git 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 fi
# Extra GUI # Extra GUI
if [ $GUI == 1 ]; then if [ $GUI == 1 ]; then
inst vlc gimp mpd vimpc inst vlc gimp mpd thunar noto-fonts-emoji musescore
if [ $ARCH == 1 ]; then if [ $ARCH == 1 ]; then
inst simplescreenrecorder inst simplescreenrecorder
altInst pacmixer altInst pacmixer xcursor-menda-git menda-themes-git menda-maia-icon-theme vimpc-git mpc
fi fi
fi fi

View file

@ -67,9 +67,6 @@ function _machines-apiSigned {
_machines-api "$@" --certificate=$MACHINES_CONFIG/machines.crt --private-key=$MACHINES_CONFIG/machines.key _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 # APPLICATION KEYS & CERTIFICATE
@ -142,16 +139,16 @@ function _machines-getAkey { # network
} }
function _machines-updateAkey { function _machines-updateAkey {
KEY_FILE=$(mktemp) MYKEY_FILE=$(mktemp)
network=$(cat $MACHINES_CONFIG/this | grep '^network=' | cut -d '=' -f 2) network=$(cat $MACHINES_CONFIG/this | grep '^network=' | cut -d '=' -f 2)
_machines-getAkey $network > $KEY_FILE _machines-getAkey $network > "$MYKEY_FILE"
if [ $? == 0 ]; then 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 return 0
else else
cat $KEY_FILE cat $MYKEY_FILE
echo "[ERROR] Authorized keys are not properly signed" echo "[ERROR] Authorized keys are not properly signed"
rm $KEY_FILE rm $MYKEY_FILE
exit 1 exit 1
fi fi
} }
@ -171,12 +168,12 @@ function _machines-addElement { # element elementType default
$EDITOR $FILE $EDITOR $FILE
data=$(_machines-postFile $FILE) data=$(_machines-postFile $FILE)
rm $FILE &> /dev/null 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 function _machines-editElement { # element elementType
FILE=$(mktemp) FILE=$(mktemp)
_machines-apiSigned $2/$1 _machines-apiSigned $2/$1 > $FILE
$EDITOR $FILE $EDITOR $FILE
data=$(_machines-postFile $FILE) data=$(_machines-postFile $FILE)
rm $FILE &> /dev/null rm $FILE &> /dev/null
@ -238,7 +235,6 @@ function machines_machine_add { # machine
machines_machine_add_help machines_machine_add_help
exit 1 exit 1
fi fi
_machines-addElement $1 machine "allowed[]=\nsecure=false"
_machines-addElement $1 machine "host[]=\nnetwork=\nuserkey=\nhostkey=\nuser=" _machines-addElement $1 machine "host[]=\nnetwork=\nuserkey=\nhostkey=\nuser="
} }
@ -435,6 +431,12 @@ function machines_update {
_machines-updateAkey _machines-updateAkey
} }
function machines_totp {
url=$(_machines-apiSigned totp)
echo "URL : $url"
echo "$url" | qrencode -o - | feh -
}
function machines_help { function machines_help {
command="$1" command="$1"
@ -457,6 +459,8 @@ function machines_help {
echo " network|net|n Modify networks" echo " network|net|n Modify networks"
echo " update-all Update all machines available via SSH" echo " update-all Update all machines available via SSH"
echo " regen-keys Regenerate system keys" echo " regen-keys Regenerate system keys"
echo " sign Sign recent transactions for propagation"
echo " totp Get TOTP generating QR code / URL"
return 0 return 0
} }

View file

@ -37,11 +37,13 @@ if (argv.t) {
template = fs.readFileSync(argv.t, "utf8"); template = fs.readFileSync(argv.t, "utf8");
} }
var latex = true;
// TODO Arg
// Settings // Settings
var extraLangages = { var extraLangages = {
avrpseudo: function (hljs) { avrpseudo: function(hljs) {
lang = extend({}, highlight.getLanguage('avrasm')); lang = extend({}, highlight.getLanguage('avrasm'));
lang.keywords.keyword += ' Si Alors Sinon FinSi TantQue FinTantQue Pour FinPour allant de à ←'; lang.keywords.keyword += ' Si Alors Sinon FinSi TantQue FinTantQue Pour FinPour allant de à ←';
lang.keywords.keyword += ' Lire Sortir sur Appeler Retourner'; lang.keywords.keyword += ' Lire Sortir sur Appeler Retourner';
@ -55,7 +57,7 @@ var extraLangages = {
}); });
return lang; return lang;
}, },
avrasmplus: function (hljs) { avrasmplus: function(hljs) {
lang = extend({}, highlight.getLanguage('avrasm')); lang = extend({}, highlight.getLanguage('avrasm'));
lang.keywords.keyword += ' si saut alors et ou if then goto && || <-'; lang.keywords.keyword += ' si saut alors et ou if then goto && || <-';
lang.contains.push({ lang.contains.push({
@ -73,8 +75,10 @@ for (lang in extraLangages) {
var renderer = new marked.Renderer(); var renderer = new marked.Renderer();
marked.setOptions({ marked.setOptions({
highlight: function (code, lang) { highlight: function(code, lang) {
if (highlight.getLanguage(lang)) { if (lang == 'raw') {
return code;
} else if (highlight.getLanguage(lang)) {
return highlight.highlight(lang, code).value; return highlight.highlight(lang, code).value;
} else { } else {
// if (extraLangages[lang]) { // if (extraLangages[lang]) {
@ -93,17 +97,27 @@ marked.setOptions({
markdownString = fs.readFileSync(argv.i, "utf8"); markdownString = fs.readFileSync(argv.i, "utf8");
// TeX // TeX
markdownString = markdownString.replace(/\\\$/g, '&dollar;') if (latex) {
markdownString = markdownString.replace(/\$\$([\s\S]+)\$\$/gm, function(glob, formula) { markdownString = markdownString.replace(/\\\$/g, '&dollar;')
return katex.renderToString(formula, {displayMode: true}); markdownString = markdownString.replace(/\$\$([\s\S]+)\$\$/gm, function(glob, formula) {
}); return katex.renderToString(formula, {
markdownString = markdownString.replace(/\$([^$]+)\$/g, function(glob, formula) { displayMode: true
return katex.renderToString(formula, {displayMode: false}); });
}); });
markdownString = markdownString.replace(/\$([^$]+)\$/g, function(glob, formula) {
return katex.renderToString(formula, {
displayMode: false
});
});
}
// Conversion // Conversion
htmlString = marked(markdownString, {renderer: renderer}); htmlString = marked(markdownString, {
fullHtmlString = template.replace('%BODY%', htmlString); renderer: renderer
});
// fullHtmlString = htmlString;
fullHtmlString = template.replace('%BODY%', () => { return htmlString });
// Saving // Saving
if (argv.o == '/dev/stdout') { if (argv.o == '/dev/stdout') {

2
scripts/newestFile Executable file
View file

@ -0,0 +1,2 @@
#!/usr/bin/env bash
find -type f -printf '%T+ %p\n' | sort | tail "$@"

2
scripts/oldestFile Executable file
View file

@ -0,0 +1,2 @@
#!/usr/bin/env bash
find -type f -printf '%T+ %p\n' | sort | head "$@"

View file

@ -7,6 +7,7 @@
# (executable) # (executable)
# TODO Run in parallel # TODO Run in parallel
# TODO Lots of dupplicated code there
dir=${1:-$PWD} dir=${1:-$PWD}
total=$(mktemp) total=$(mktemp)
@ -20,7 +21,53 @@ function showtotal {
trap showtotal SIGTERM SIGINT SIGFPE 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 function replaceImg { # candidate original
# With bitmap verification
c="$1" c="$1"
o="$2" o="$2"
@ -61,11 +108,7 @@ function replaceImg { # candidate original
convert "$o" "$ppmo" convert "$o" "$ppmo"
if cmp --silent "$ppmo" "$ppmc"; then if cmp --silent "$ppmo" "$ppmc"; then
mv "$c" "$o" doReplace "$c" "$o"
saved=$(($os - $cs))
echo "→ $os ⇒ $cs (saved $saved bytes)"
newtotal=$(($(cat $total) + $saved))
echo -n $newtotal > $total
else else
echo "→ Candidate don't have the same bit map as original, skipping!" echo "→ Candidate don't have the same bit map as original, skipping!"
fi fi
@ -82,22 +125,9 @@ do
prog=$(mktemp --suffix .jpg) prog=$(mktemp --suffix .jpg)
jpegtran -copy all -progressive "$image" > "$prog" jpegtran -copy all -progressive "$image" > "$prog"
echo "→ Progressive done" echo "→ Progressive done"
optz=$(mktemp --suffix .jpg)
jpegtran -copy all -optimize "$image" > "$optz"
echo "→ Optimize done"
progs=$(wc -c "$prog" | cut -d' ' -f1) progs=$(wc -c "$prog" | cut -d' ' -f1)
optzs=$(wc -c "$optz" | cut -d' ' -f1) replace "$prog" "$image"
if [[ $progs -le $optzs ]]; then
echo "→ Using progressive"
replaceImg "$prog" "$image"
rm "$optz"
else
echo "→ Using optimized"
replaceImg "$optz" "$image"
rm "$prog"
fi
done <<< "$(find "$dir" -type f -iregex ".+.jpe?g$")" done <<< "$(find "$dir" -type f -iregex ".+.jpe?g$")"
@ -109,10 +139,10 @@ do
temp=$(mktemp --suffix .png) temp=$(mktemp --suffix .png)
cp "$image" "$temp" cp "$image" "$temp"
optipng -o7 -quiet "$temp" optipng -quiet "$temp"
echo "→ Optimize done" echo "→ Optimize done"
replaceImg "$temp" "$image" replace "$temp" "$image"
done <<< "$(find "$dir" -type f -iname "*.png")" done <<< "$(find "$dir" -type f -iname "*.png")"

1043
scripts/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -38,7 +38,7 @@ do
if [[ $dry == 0 ]]; then if [[ $dry == 0 ]]; then
echo "$src" → "$dst" echo "$src" → "$dst"
else else
mv "$src" "$dst" mv -- "$src" "$dst"
fi fi
done done

View file

@ -1,2 +1,4 @@
#!/data/data/com.termux/files/usr/bin/bash #!/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 "ln -s /data/data/com.termux/files/usr /usr" | tsu
echo "/system/bin/mount -o remount,ro /" | tsu

7
vimpcrc Normal file
View 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

View file