initial commit
This commit is contained in:
commit
6231ba8586
|
@ -0,0 +1 @@
|
||||||
|
Virtualbox.xml
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
** DO NOT EDIT THIS FILE.
|
||||||
|
** If you make changes to this file while any VirtualBox related application
|
||||||
|
** is running, your changes will be overwritten later, without taking effect.
|
||||||
|
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
|
||||||
|
-->
|
||||||
|
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.12-linux">
|
||||||
|
<Global>
|
||||||
|
<ExtraData>
|
||||||
|
<ExtraDataItem name="GUI/Details/Elements" value="general,system,preview,display,storage,audio,network,usb,sharedFolders,description"/>
|
||||||
|
<ExtraDataItem name="GUI/GroupDefinitions/" value="n=GLOBAL,m=240651f8-4242-4dfb-bcd3-e78c7926b30d,m=cd2fec0c-f0ed-4835-b849-254e41e6e803,m=21cc0d91-59fa-4e4e-80ff-56a451fe551f"/>
|
||||||
|
<ExtraDataItem name="GUI/Input/HostKeyCombination" value="65027,65517"/>
|
||||||
|
<ExtraDataItem name="GUI/LastItemSelected" value="m=win8raw"/>
|
||||||
|
<ExtraDataItem name="GUI/LastWindowPosition" value="1,21,1920,1036"/>
|
||||||
|
<ExtraDataItem name="GUI/SplitterSizes" value="634,1285"/>
|
||||||
|
<ExtraDataItem name="GUI/SuppressMessages" value="confirmGoingFullscreen,remindAboutMouseIntegration,remindAboutAutoCapture"/>
|
||||||
|
<ExtraDataItem name="GUI/Toolbar" value="false"/>
|
||||||
|
<ExtraDataItem name="GUI/Tools/LastItemsSelected" value="Welcome,Details"/>
|
||||||
|
</ExtraData>
|
||||||
|
<MachineRegistry>
|
||||||
|
<MachineEntry uuid="{240651f8-4242-4dfb-bcd3-e78c7926b30d}" src="/home/ndwar/VirtualBox VMs/win8raw/win8raw.vbox"/>
|
||||||
|
<MachineEntry uuid="{cd2fec0c-f0ed-4835-b849-254e41e6e803}" src="/home/ndwar/VirtualBox VMs/win7 stable/win7 stable.vbox"/>
|
||||||
|
<MachineEntry uuid="{21cc0d91-59fa-4e4e-80ff-56a451fe551f}" src="/home/ndwar/VirtualBox VMs/Kali-Linux-2020.2a-vbox-amd64/Kali-Linux-2020.2a-vbox-amd64.vbox"/>
|
||||||
|
</MachineRegistry>
|
||||||
|
<NetserviceRegistry>
|
||||||
|
<DHCPServers>
|
||||||
|
<DHCPServer networkName="HostInterfaceNetworking-vboxnet0" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/>
|
||||||
|
</DHCPServers>
|
||||||
|
</NetserviceRegistry>
|
||||||
|
<SystemProperties defaultMachineFolder="/home/ndwar/VirtualBox VMs" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3" proxyMode="0" exclusiveHwVirt="true"/>
|
||||||
|
<USBDeviceFilters/>
|
||||||
|
</Global>
|
||||||
|
</VirtualBox>
|
|
@ -0,0 +1,80 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# Run R interpreter, optionally launching inside a docker container
|
||||||
|
# Launch in docker iff a file called '.rundocker' exists and contains
|
||||||
|
# the name of a valid image in the current directory
|
||||||
|
|
||||||
|
## TODO the env args here are not DRY
|
||||||
|
system_r=(env "MAKEFLAGS=-j8" /bin/R --quiet "$@")
|
||||||
|
|
||||||
|
# launch in docker if we find a .rundocker file
|
||||||
|
if [ -f ".rundocker" ]; then
|
||||||
|
image=$(cat .rundocker)
|
||||||
|
|
||||||
|
if ! docker info > /dev/null 2>&1; then
|
||||||
|
echo "Docker daemon not running"
|
||||||
|
echo "Using Systemwide R Installation"
|
||||||
|
"${system_r[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! docker image inspect "$image" > /dev/null 2>&1; then
|
||||||
|
echo "Invalid image: $image"
|
||||||
|
echo "Using Systemwide R Installation"
|
||||||
|
"${system_r[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO what about host user's environ file and such?
|
||||||
|
|
||||||
|
# TODO not all images have a docker user
|
||||||
|
# start container using the docker user
|
||||||
|
user=docker
|
||||||
|
|
||||||
|
# start container in docker's home directory
|
||||||
|
work_dir=/home/docker
|
||||||
|
|
||||||
|
# mount the current host directory to docker's user home
|
||||||
|
pwd_mnt="type=bind,source=$(pwd),target=/home/docker"
|
||||||
|
|
||||||
|
# add X11 socket/env so we can see pretty plots
|
||||||
|
# from here https://github.com/rocker-org/rocker-versioned/tree/master/X11
|
||||||
|
xsock=/tmp/.X11-unix/X0
|
||||||
|
xauth=/tmp/.docker.xauth
|
||||||
|
touch "$xauth"
|
||||||
|
xauth nlist "$DISPLAY" | sed -e 's/^..../ffff/' | \
|
||||||
|
xauth -f "$xauth" nmerge -
|
||||||
|
x11=(-v "$xsock:$xsock"
|
||||||
|
-v "$xauth:$xauth"
|
||||||
|
-e "XAUTHORITY=${xauth}"
|
||||||
|
-e "DISPLAY=$DISPLAY")
|
||||||
|
|
||||||
|
# for some reason this won't work if you aren't root
|
||||||
|
opts=(-ti --rm -w "$work_dir" --mount "$pwd_mnt" -u 0 #--user "$user"
|
||||||
|
"${x11[@]}")
|
||||||
|
|
||||||
|
# TODO not all images have the same path for R
|
||||||
|
# TODO add env vars somehow
|
||||||
|
cmd=(/usr/local/bin/R --quiet "$@")
|
||||||
|
|
||||||
|
# if we are in Emacs, do some special tricks to satisfy ESS
|
||||||
|
if [[ -n "$INSIDE_EMACS" ]]; then
|
||||||
|
# TODO do we need to pass any environmental variables?
|
||||||
|
|
||||||
|
# ESS sends some 'source' commands to the running R process
|
||||||
|
# after it starts; these are in the emacs user directory
|
||||||
|
emacs_home="$XDG_CONFIG_HOME/emacs"
|
||||||
|
emacs_mnt="type=bind,source=$emacs_home,target=$emacs_home"
|
||||||
|
opts+=(--mount "$emacs_mnt")
|
||||||
|
|
||||||
|
# ESS gets confused if lines are terminated with \r\n (which
|
||||||
|
# unfortunately is the default in docker). Set the terminal
|
||||||
|
# to not echo inputs before starting R
|
||||||
|
docker run "${opts[@]}" "$image" /bin/sh -c "stty -echo -onlcr && ${cmd[*]}"
|
||||||
|
else
|
||||||
|
docker run "${opts[@]}" "$image" "${cmd[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
## remove X11 auth file
|
||||||
|
rm -f "$xauth"
|
||||||
|
else
|
||||||
|
"${system_r[@]}"
|
||||||
|
fi
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
### Add org file changes to git repo
|
||||||
|
|
||||||
|
for REPO in $1
|
||||||
|
do
|
||||||
|
echo "repository: $REPO"
|
||||||
|
eval "cd $REPO"
|
||||||
|
# check for errors
|
||||||
|
if ! git fsck --strict > /dev/null 2>&1; then
|
||||||
|
notify-send "Org git commit failed."
|
||||||
|
fi
|
||||||
|
# remove deleted files
|
||||||
|
git ls-files --deleted -z | xargs -0 git rm >/dev/null 2>&1
|
||||||
|
# add new files
|
||||||
|
git add . >/dev/null 2>&1
|
||||||
|
git commit -m "$(date)"
|
||||||
|
# push
|
||||||
|
git push origin master
|
||||||
|
done
|
||||||
|
echo Done
|
|
@ -0,0 +1,22 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# small script to log battery usage in txt file for conky to parse
|
||||||
|
# lovingly stolen from battery-stats by petter reinholdtsen
|
||||||
|
|
||||||
|
DST_FILE="$XDG_CACHE_HOME/batmon.log"
|
||||||
|
SYS_BAT_PATH="/sys/class/power_supply/BAT0"
|
||||||
|
BAT_CAP_PATH="$SYS_BAT_PATH/charge_now"
|
||||||
|
BAT_CAP_FULL_PATH="$SYS_BAT_PATH/charge_full"
|
||||||
|
MAX_ENTRIES=1440 # number of minutes in day
|
||||||
|
|
||||||
|
read_bat_percent() {
|
||||||
|
timestamp=$(date +%s)
|
||||||
|
charge_now=$(cat "$BAT_CAP_PATH")
|
||||||
|
charge_full=$(cat "$BAT_CAP_FULL_PATH")
|
||||||
|
percent=$(echo "100 * $charge_now / $charge_full" | bc)
|
||||||
|
echo $timestamp $percent >> "$DST_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
read_bat_percent
|
||||||
|
# truncate to most recent entries by max_entries
|
||||||
|
tail -n $MAX_ENTRIES "$DST_FILE" > /tmp/batmon.tmp.log && mv /tmp/batmon.tmp.log "$DST_FILE"
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# get the lifetime cpu utilization percent of pid (the one argument)
|
||||||
|
|
||||||
|
pidfile="/proc/$1/stat"
|
||||||
|
ticks=$(getconf CLK_TCK)
|
||||||
|
uptime=$(awk '{print $1}' "/proc/uptime")
|
||||||
|
utime=$(awk '{print $14}' "$pidfile")
|
||||||
|
stime=$(awk '{print $15}' "$pidfile")
|
||||||
|
cutime=$(awk '{print $16}' "$pidfile")
|
||||||
|
cstime=$(awk '{print $17}' "$pidfile")
|
||||||
|
starttime=$(awk '{print $22}' "$pidfile")
|
||||||
|
|
||||||
|
echo "($utime + $stime + $cutime + $cstime) / ($uptime * $ticks - $starttime)" | bc -l
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
create_entry() {
|
||||||
|
local -n params=$1
|
||||||
|
efibootmgr -q -b $bootNumber -B
|
||||||
|
efibootmgr -q -b $bootNumber -d "${params[device]}" -p "${params[part]}" -c -L "${params[label]}" -l "${params[loader]}" -u "${params[args]}"
|
||||||
|
if [ $bootNumber -ne 0 ]; then bootOrder+=",$bootNumber"; else bootOrder+="0"; fi
|
||||||
|
((bootNumber+=1))
|
||||||
|
}
|
||||||
|
|
||||||
|
# must disable KMS for nvidia else X does not start :/
|
||||||
|
|
||||||
|
root="root=/dev/mapper/vg1-root rw rootfstype=btrfs rootflags=noatime,compress-force,ssd,space_cache,subvolid=5,subvol=/"
|
||||||
|
opts="resume=/dev/nvme0n1p2 systemd.unified_cgroup_hierarchy=1 libahci.ignore_sss=1 nmi_watchdog=0 vt.global_cursor_default=0 acpi_osi=\"Windows 2019\" quiet loglevel=3 rd.systemd.show_status=0 rd.udev.log-priority=3 initrd=/intel-ucode.img"
|
||||||
|
|
||||||
|
declare -A arch_lts=( ["device"]="/dev/nvme0n1" ["part"]=1 ["label"]="Arch Linux (LTS)" ["loader"]="/vmlinuz-linux-lts" ["args"]="$root $opts elevator=deadline initrd=/initramfs-linux-lts.img")
|
||||||
|
declare -A arch_lts_native=( ["device"]="/dev/nvme0n1" ["part"]=1 ["label"]="Arch Linux (LTS-native)" ["loader"]="/vmlinuz-linux-lts-native" ["args"]="$root $opts pcie_aspm=force elevator=deadline initrd=/initramfs-linux-lts-native.img")
|
||||||
|
#~ declare -A win10=( ["device"]="/dev/nvme0n1" ["part"]=2 ["label"]="Windows 10" ["loader"]="\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI" ["args"]="")
|
||||||
|
|
||||||
|
declare -a entries
|
||||||
|
|
||||||
|
bootOrder=""
|
||||||
|
bootNumber=0
|
||||||
|
|
||||||
|
# order of these commands determines boot order
|
||||||
|
create_entry arch_lts_native
|
||||||
|
create_entry arch_lts
|
||||||
|
|
||||||
|
efibootmgr -q -D
|
||||||
|
efibootmgr -q -O
|
||||||
|
efibootmgr -o $bootOrder
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# start the emacs daemon
|
||||||
|
|
||||||
|
emacs --fg-daemon > /dev/null 2>&1
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# stop the emacs daemon
|
||||||
|
|
||||||
|
emacsclient --eval "(kill-emacs)"
|
|
@ -0,0 +1,27 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# estimate the power usage of the cpu using different
|
||||||
|
# frequency scaling governors
|
||||||
|
|
||||||
|
SLEEPTIME=1
|
||||||
|
|
||||||
|
estimate_core_wattage() {
|
||||||
|
sudo cpupower frequency-set -g "$1"
|
||||||
|
sleep 5
|
||||||
|
echo "Estimating wattage for $1"
|
||||||
|
for i in `seq 1 60`; do
|
||||||
|
local pkg0_1=$(cat /sys/class/powercap/intel-rapl:0/energy_uj)
|
||||||
|
local core_1=$(cat /sys/class/powercap/intel-rapl:0:0/energy_uj)
|
||||||
|
local igpu_1=$(cat /sys/class/powercap/intel-rapl:0:1/energy_uj)
|
||||||
|
sleep $SLEEPTIME
|
||||||
|
local pkg0_2=$(cat /sys/class/powercap/intel-rapl:0/energy_uj)
|
||||||
|
local core_2=$(cat /sys/class/powercap/intel-rapl:0:0/energy_uj)
|
||||||
|
local igpu_2=$(cat /sys/class/powercap/intel-rapl:0:1/energy_uj)
|
||||||
|
echo $(((pkg0_2-pkg0_1)/SLEEPTIME)) $(((core_2-core_1)/SLEEPTIME)) $(((igpu_2-igpu_1)/SLEEPTIME))
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
estimate_core_wattage performance
|
||||||
|
estimate_core_wattage powersave
|
||||||
|
estimate_core_wattage schedutil
|
||||||
|
estimate_core_wattage conservative
|
|
@ -0,0 +1,16 @@
|
||||||
|
#! /bin/env python3
|
||||||
|
|
||||||
|
# extract all images (now jpegs) from an xml
|
||||||
|
# blob (like those created for sms dumps)
|
||||||
|
|
||||||
|
import bs4
|
||||||
|
import base64
|
||||||
|
|
||||||
|
with open("sms-20190702215407.xml", "r") as f:
|
||||||
|
soup = bs4.BeautifulSoup(f.read(), "lxml")
|
||||||
|
|
||||||
|
for i in soup.findAll("part", ct="image/jpeg"):
|
||||||
|
date = i.parent.parent["date"]
|
||||||
|
pic = base64.b64decode(i["data"])
|
||||||
|
with open("out/" + date, "wb") as w:
|
||||||
|
w.write(pic)
|
|
@ -0,0 +1,53 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# detect crap that needs to be cleaned up
|
||||||
|
|
||||||
|
###
|
||||||
|
# Detect unused keys in dconf
|
||||||
|
###
|
||||||
|
|
||||||
|
# this only makes sense to do if we have dconf
|
||||||
|
if [ -e /usr/bin/dconf ]; then
|
||||||
|
echo -e "###\n# Unused dconf paths\n###"
|
||||||
|
SCHEMA_DIR=/usr/share/glib-2.0/schemas/
|
||||||
|
|
||||||
|
# do a dconf dump but only keep the paths and transform to form path.to.whatever.gschema.xml
|
||||||
|
dump=$(dconf dump / | sed '/^\[/!d; s/\[//g; s/\]//g')
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
schemaid=$(echo "$line" | sed 's/\//\./g')
|
||||||
|
# first test if the path matches a schema
|
||||||
|
if [ ! -e "$SCHEMA_DIR$schemaid.gschema.xml" ]; then
|
||||||
|
# if not, test if it is in another schema as a path
|
||||||
|
grep -Fqr "$line" "$SCHEMA_DIR"
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
# if it does not have its own schema and is not in another schema, print it
|
||||||
|
echo "$line"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$dump"
|
||||||
|
fi
|
||||||
|
|
||||||
|
###
|
||||||
|
# Pacnew and Pacsave configs
|
||||||
|
###
|
||||||
|
|
||||||
|
pacnew=$(sudo find /etc -name "*.pacnew")
|
||||||
|
pacsave=$(sudo find /etc -name "*.pacsave")
|
||||||
|
|
||||||
|
echo -e "###\n# Pacnew files\n###\n$pacnew"
|
||||||
|
echo -e "###\n# Pacsave files\n###\n$pacsave"
|
||||||
|
|
||||||
|
###
|
||||||
|
# Detect seafile conflicts
|
||||||
|
###
|
||||||
|
|
||||||
|
## add seafile directories to this array
|
||||||
|
SEAFDIRS=(/mnt/data/Documents)
|
||||||
|
|
||||||
|
echo -e "###\n# Seafile conflicts\n###"
|
||||||
|
|
||||||
|
for i in "${SEAFDIRS[@]}"; do
|
||||||
|
find "$i" -name "*SFConflict*"
|
||||||
|
done
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## gpg (override): mount GNUPGHOME before executing
|
||||||
|
|
||||||
|
with_gpg_mount /usr/bin/gpg "$@"
|
|
@ -0,0 +1,15 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# ln-replace find-string replace-string
|
||||||
|
|
||||||
|
# looks for "find-string" in links and replaces with "replace string"
|
||||||
|
|
||||||
|
for i in *
|
||||||
|
do
|
||||||
|
ln_path_old="$(readlink $i)"
|
||||||
|
if [ "$ln_path_old" != "" ]; then
|
||||||
|
ln_path_new=${ln_path_old/$1/$2}
|
||||||
|
rm "$i"
|
||||||
|
ln -s "$ln_path_new" "$i"
|
||||||
|
fi
|
||||||
|
done
|
|
@ -0,0 +1,13 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# list all kernal modules that are not currently loaded
|
||||||
|
|
||||||
|
all_mods="$(find /lib/modules/$(uname -r) -type f -name \*.ko -execdir basename {} .ko ';')"
|
||||||
|
all_mods=${all_mods//-/_}
|
||||||
|
loaded_mods=$(lsmod | grep -Eo '^[^ ]+')
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
if ! [[ "$loaded_mods" =~ "$line" ]]; then
|
||||||
|
echo "$line"
|
||||||
|
fi
|
||||||
|
done <<< "$all_mods"
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# xdg-base-dir override of mbsync
|
||||||
|
|
||||||
|
/bin/mbsync -c "$XDG_CONFIG_HOME/isync/mbsyncrc" "$@"
|
|
@ -0,0 +1,30 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## mount a veracrypt volume
|
||||||
|
|
||||||
|
## NOTE this will need the DISPLAY variable in order to prompt for the bitwarden
|
||||||
|
## password
|
||||||
|
pwd=$(dbus-send --print-reply=literal --session \
|
||||||
|
--dest=org.rofi.bitwarden \
|
||||||
|
/bitwarden org.rofi.bitwarden.session.GetPassword \
|
||||||
|
string:"$1" | \
|
||||||
|
sed -e 's/^ *//g')
|
||||||
|
|
||||||
|
## the funny evals are here to expand any literal env variables that may be
|
||||||
|
## passed because systemd didn't expand them (yuck)
|
||||||
|
volume="$(eval echo "$2")"
|
||||||
|
mountpoint="$(eval echo "$3")"
|
||||||
|
|
||||||
|
if [[ "$pwd" == "" ]]; then
|
||||||
|
echo "Could not get bitwarden password"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
if /usr/bin/sudo /usr/bin/veracrypt \
|
||||||
|
--text --non-interactive --stdin \
|
||||||
|
"$volume" "$mountpoint" <<< "$pwd"; then
|
||||||
|
echo "Mounted $1"
|
||||||
|
else
|
||||||
|
echo "Failed to mount $1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -0,0 +1,12 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
## indexes mu depending on whether emacs mu4e is running
|
||||||
|
|
||||||
|
## assume the mu server is only started by mu4e
|
||||||
|
if pgrep -fx '/usr/bin/mu server' > /dev/null; then
|
||||||
|
echo indexing mu through emacs
|
||||||
|
emacsclient -e '(mu4e-update-index)' > /dev/null
|
||||||
|
else
|
||||||
|
echo indexing mu natively
|
||||||
|
mu index
|
||||||
|
fi
|
|
@ -0,0 +1,206 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#a featherweight youtube piracy tool :)
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
help: $0 options
|
||||||
|
|
||||||
|
Use this to pirate the audio from youtube vidz.
|
||||||
|
|
||||||
|
Uses ffmpeg and youtube-dl
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-h You know what this is obviously
|
||||||
|
-q Quality; 1-5 scale, defaults to 2 (~220 kbits/s)
|
||||||
|
-x Extension (default is m4a)
|
||||||
|
-f Save Folder (defaults to current working directory)
|
||||||
|
Metadata:
|
||||||
|
-a Artist name
|
||||||
|
-t Album title
|
||||||
|
-g Genre
|
||||||
|
-y Year
|
||||||
|
-n No track numbers
|
||||||
|
-i Interactive (confirm each extraction)
|
||||||
|
|
||||||
|
Note: if any metadata option is not specified,
|
||||||
|
each option will be prompted every url
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
quality= #b
|
||||||
|
extension= #x
|
||||||
|
artist= #a
|
||||||
|
album_title= #t
|
||||||
|
genre= #g
|
||||||
|
year= #y
|
||||||
|
track= #n
|
||||||
|
|
||||||
|
while getopts “hq:x:a:t:g:y:ni” OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
q)
|
||||||
|
quality=$OPTARG
|
||||||
|
;;
|
||||||
|
x)
|
||||||
|
extension=$OPTARG
|
||||||
|
;;
|
||||||
|
f)
|
||||||
|
folder=$OPTARG
|
||||||
|
;;
|
||||||
|
a)
|
||||||
|
artist=$OPTARG
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
album_title=$OPTARG
|
||||||
|
;;
|
||||||
|
g)
|
||||||
|
genre=$OPTARG
|
||||||
|
;;
|
||||||
|
y)
|
||||||
|
year=$OPTARG
|
||||||
|
;;
|
||||||
|
n)
|
||||||
|
track=1
|
||||||
|
;;
|
||||||
|
i)
|
||||||
|
interactive=1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
#set defaults
|
||||||
|
if [[ -z $quality ]]; then quality="2"; fi
|
||||||
|
if [[ -z $extension ]]; then extension="m4a"; fi
|
||||||
|
if [[ -z $folder ]]; then folder=$(pwd); fi
|
||||||
|
if [[ -z $track ]]; then track=0; fi
|
||||||
|
|
||||||
|
#set metadata if user gave them
|
||||||
|
if [[ -n $artist ]]; then a=$artist; fi
|
||||||
|
if [[ -n $album_title ]]; then t=$album_title; fi
|
||||||
|
if [[ -n $genre ]]; then g=$genre; fi
|
||||||
|
if [[ -n $year ]]; then y=$year; fi
|
||||||
|
|
||||||
|
OPTIONS="URL Done"
|
||||||
|
select opt in $OPTIONS
|
||||||
|
do
|
||||||
|
case $opt in
|
||||||
|
URL)
|
||||||
|
#get necessary stuff first
|
||||||
|
read -p "Enter URL to vid: " u
|
||||||
|
|
||||||
|
if [[ $u =~ v=(.*) ]]; then
|
||||||
|
vid_id=${u##*v=}
|
||||||
|
vid_id=${vid_id%%&*}
|
||||||
|
|
||||||
|
read -p "Enter Song Title: " s
|
||||||
|
|
||||||
|
#get other info depending on how it was given initially
|
||||||
|
if [[ -z $artist ]]; then read -p "Artist? " a; fi
|
||||||
|
if [[ -z $album_title ]]; then read -p "Album Title? " t; fi
|
||||||
|
if [[ -z $genre ]]; then read -p "Genre? " g; fi
|
||||||
|
if [[ -z $year ]]; then read -p "Year? " y; fi
|
||||||
|
|
||||||
|
if [[ $track = 0 ]]; then
|
||||||
|
read -p "Track Number? " n
|
||||||
|
if [[ "${#n}" = 1 ]]; then n="0$n"; fi
|
||||||
|
n0="$n-"
|
||||||
|
else
|
||||||
|
n=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
filename="$n0$s ($a-$t).$extension"
|
||||||
|
|
||||||
|
if [[ $interactive = 1 ]]; then
|
||||||
|
echo GENERAL
|
||||||
|
echo quality: "$quality"
|
||||||
|
echo Save into: "$folder"
|
||||||
|
echo Video ID: "$vid_id"
|
||||||
|
echo
|
||||||
|
echo METADATA
|
||||||
|
echo New Filename: $filename
|
||||||
|
echo Artist: $a
|
||||||
|
echo Album Title: $t
|
||||||
|
echo Genre: $g
|
||||||
|
echo Year: $y
|
||||||
|
echo Track: $n
|
||||||
|
echo
|
||||||
|
echo Continue?
|
||||||
|
CONFIRM="Yes No"
|
||||||
|
select con in $CONFIRM
|
||||||
|
do
|
||||||
|
case $con in
|
||||||
|
Yes)
|
||||||
|
Continue=1
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
No)
|
||||||
|
Continue=0
|
||||||
|
echo Starting Over
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo $con
|
||||||
|
echo Try Again
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
else
|
||||||
|
Continue=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $Continue = 1 ]]; then
|
||||||
|
youtube-dl $u --id
|
||||||
|
|
||||||
|
if [[ "$track" = 0 ]]; then
|
||||||
|
arg=(-q "$quality" -metadata TITLE=$s -metadata ARTIST=$a -metadata ALBUM=$t -metadata GENRE=$g -metadata DATE=$y -metadata track=$n)
|
||||||
|
else
|
||||||
|
arg=(-q "$quality" -metadata TITLE=$s -metadata ARTIST=$a -metadata ALBUM=$t -metadata GENRE=$g -metadata DATE=$y)
|
||||||
|
fi
|
||||||
|
|
||||||
|
ffmpeg -i "$vid_id".* "${arg[@]}" -vn -strict experimental "$filename"
|
||||||
|
|
||||||
|
rm "$vid_id".*
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Invalid URL, no ID detected. Try again"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
Done)
|
||||||
|
echo Exiting
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo $opt
|
||||||
|
echo Try Again
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
#~ if [[ $address =~ $regex ]]; then
|
||||||
|
#~ video_id=${BASH_REMATCH[1]}
|
||||||
|
#~ video_id=$(echo $video_id | cut -d'&' -f1)
|
||||||
|
#~ video_title="$(youtube-dl --get-title $address)"
|
||||||
|
#~ youtube-dl $address
|
||||||
|
#~ ext="flv"
|
||||||
|
#~ ffmpeg -i $video_id.$ext "$video_title".wav
|
||||||
|
#~
|
||||||
|
#~ rm $video_id.$ext "$video_title".wav
|
||||||
|
#~ else
|
||||||
|
#~ echo "Sorry but the system encountered a problem."
|
||||||
|
#~ fi
|
||||||
|
|
||||||
|
#additional stuff
|
||||||
|
#ffmpeg -i song.flac -ab 320k -strict experimental song.mp4
|
||||||
|
#q = quality (argument?)
|
||||||
|
|
||||||
|
#ffmpeg -i video.mp4 -ab 320k -vn -metadata TITLE="" -metadata ARTIST="" -metadata GENRE="" -metadata ALBUM="" -strict experimental song.mp4
|
||||||
|
#use mp4 to allow metadata w/ aac compression :)
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# xdg-base-dir override of nvidia-settings
|
||||||
|
|
||||||
|
/bin/nvidia-settings --config "$XDG_CONFIG_HOME/nvidia/settings" "$@"
|
|
@ -0,0 +1,13 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# get an oauth access token using the refresh token
|
||||||
|
token_url="$(pass "email/$1/token_url")"
|
||||||
|
client_id="$(pass "email/$1/client_id")"
|
||||||
|
client_secret="$(pass "email/$1/client_secret")"
|
||||||
|
refresh_token="$(pass "email/$1/refresh_token")"
|
||||||
|
|
||||||
|
curl --silent \
|
||||||
|
--request POST \
|
||||||
|
--data "client_id=$client_id&client_secret=$client_secret&refresh_token=$refresh_token&grant_type=refresh_token" \
|
||||||
|
"$token_url" \
|
||||||
|
| jq -r '.access_token'
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## pass (override): mount $GNUPGHOME before executing
|
||||||
|
|
||||||
|
with_gpg_mount /usr/bin/pass "$@"
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# merge pdf files with ghostscript
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
help: $0 options
|
||||||
|
|
||||||
|
Merge PDF files together
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-h You know what this is obviously
|
||||||
|
-i input files (comma separated)
|
||||||
|
-o output file
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts “hi:o:” OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
i)
|
||||||
|
input="$OPTARG"
|
||||||
|
;;
|
||||||
|
o)
|
||||||
|
echo "$OPTARG"
|
||||||
|
output="$OPTARG"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$input" ]; then
|
||||||
|
echo "invalid input"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo "invalid output"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
input=${input//","/" "}
|
||||||
|
|
||||||
|
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile="$output" $input
|
|
@ -0,0 +1,97 @@
|
||||||
|
#! /usr/bin/env ruby
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
# Copyright © 2016 Quentin "Sardem FF7" Glidic
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
rofi=%w( rofi -dmenu -input /dev/null -password )
|
||||||
|
|
||||||
|
|
||||||
|
def assuan_send(t)
|
||||||
|
$stdout.puts t
|
||||||
|
$stdout.flush
|
||||||
|
end
|
||||||
|
|
||||||
|
assuan_send "OK Please go ahead"
|
||||||
|
while ( line = $stdin.readline )
|
||||||
|
ok = true
|
||||||
|
case ( line )
|
||||||
|
when /^OPTION (.+)$/
|
||||||
|
#OPTION grab
|
||||||
|
#OPTION ttyname=/dev/pts/1
|
||||||
|
#OPTION ttytype=tmux-256color
|
||||||
|
#OPTION lc-messages=C
|
||||||
|
#OPTION allow-external-password-cache
|
||||||
|
#OPTION default-ok=_OK
|
||||||
|
#OPTION default-cancel=_Cancel
|
||||||
|
#OPTION default-yes=_Yes
|
||||||
|
#OPTION default-no=_No
|
||||||
|
#OPTION default-prompt=PIN:
|
||||||
|
#OPTION default-pwmngr=_Save in password manager
|
||||||
|
#OPTION default-cf-visi=Do you really want to make your passphrase visible on the screen?
|
||||||
|
#OPTION default-tt-visi=Make passphrase visible
|
||||||
|
#OPTION default-tt-hide=Hide passphrase
|
||||||
|
#OPTION touch-file=/run/user/1000/gnupg/S.gpg-agent
|
||||||
|
when /^GETINFO (.+)$/
|
||||||
|
info = $1
|
||||||
|
case ( info )
|
||||||
|
when 'pid'
|
||||||
|
assuan_send "D #{Process.pid}"
|
||||||
|
end
|
||||||
|
when /^SETKEYINFO (.+)$/
|
||||||
|
#SETKEYINFO s/FINGERPRINT
|
||||||
|
when /^SETDESC (.+)$/
|
||||||
|
print "hi\n"
|
||||||
|
#SETDESC Please enter the passphrase for the ssh key%0A ke:yf:in:ge:rp:ri:nt
|
||||||
|
rofi << '-mesg' << $1.gsub('<', '<').gsub(/%([0-9A-Fa-f]{2})/) { $1.to_i(16).chr }
|
||||||
|
when /^SETPROMPT (.+)$/
|
||||||
|
#SETPROMPT Passphrase:
|
||||||
|
rofi << '-p' << $1
|
||||||
|
when /^GETPIN$/
|
||||||
|
pass = nil
|
||||||
|
IO.popen(%w( systemctl --user show-environment )) do |io|
|
||||||
|
until ( io.eof? )
|
||||||
|
var = io.readline
|
||||||
|
var.match(/^([A-Za-z_]+)=(.+)$/)
|
||||||
|
var, val = $~[1..2]
|
||||||
|
ENV[var] = val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
err_in, err_out = IO.pipe
|
||||||
|
IO.popen([*rofi, :err => err_out]) do |io|
|
||||||
|
pass = io.read
|
||||||
|
end
|
||||||
|
status = $?
|
||||||
|
err_out.close
|
||||||
|
case ( status.exitstatus )
|
||||||
|
when 0
|
||||||
|
assuan_send "D #{pass}" unless ( pass.empty? )
|
||||||
|
when 1
|
||||||
|
assuan_send "ERR 83886179 Operation cancelled <rofi>"
|
||||||
|
ok = false
|
||||||
|
end
|
||||||
|
when /^BYE(?= |$)/
|
||||||
|
exit(0)
|
||||||
|
else
|
||||||
|
assuan_send "BYE"
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
assuan_send "OK" if ( ok )
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# simple script to output the current current (lol) and current
|
||||||
|
# voltage of the battery every second. Record this to a file, multiply,
|
||||||
|
# and find power...absolute...POOOOOOWEEEER!!!!!!
|
||||||
|
|
||||||
|
for i in $(seq "$1"); do
|
||||||
|
## in uC
|
||||||
|
I=$(cat /sys/class/power_supply/BAT0/current_now)
|
||||||
|
## in uV
|
||||||
|
V=$(cat /sys/class/power_supply/BAT0/voltage_now)
|
||||||
|
## in pW
|
||||||
|
echo $(( I * V ))
|
||||||
|
sleep 1.0
|
||||||
|
done
|
|
@ -0,0 +1,31 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
#~ SLEEPTIME=5
|
||||||
|
|
||||||
|
#~ estimate_core_wattage() {
|
||||||
|
#~ echo "Estimating wattage for $1"
|
||||||
|
#~ for i in `seq 1 5`; do
|
||||||
|
#~ local uJ_1=$(cat /sys/class/powercap/intel-rapl:0:0/energy_uj)
|
||||||
|
#~ sleep $SLEEPTIME
|
||||||
|
#~ local uJ_2=$(cat /sys/class/powercap/intel-rapl:0:0/energy_uj)
|
||||||
|
#~ local watts=$((uJ_2-uJ_1))
|
||||||
|
#~ watts=$((watts/SLEEPTIME))
|
||||||
|
#~ echo "Wattage consumed: $watts uW"
|
||||||
|
#~ done
|
||||||
|
#~ }
|
||||||
|
|
||||||
|
change_gov() {
|
||||||
|
sudo cpupower frequency-set -g "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_pts() {
|
||||||
|
change_gov "$1"
|
||||||
|
#~ estimate_core_wattage "$1"
|
||||||
|
phoronix-test-suite batch-benchmark pts/compress-7zip pts/build-php pts/c-ray pts/john-the-ripper
|
||||||
|
}
|
||||||
|
|
||||||
|
run_pts performance
|
||||||
|
run_pts powersave
|
||||||
|
run_pts schedutil
|
||||||
|
run_pts conservative
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# super hacky script to ensure rofi always appears on the focused workspace
|
||||||
|
|
||||||
|
# current-output is a script from rofi-extras that outputs the xrandr name of
|
||||||
|
# screen showing the focused workspace
|
||||||
|
if name=$(current-output); then
|
||||||
|
# putting the -m argument first should override any other -m arguments
|
||||||
|
# later in the args list
|
||||||
|
/usr/bin/rofi -m "$name" "$@"
|
||||||
|
else
|
||||||
|
/usr/bin/rofi "$@"
|
||||||
|
fi
|
|
@ -0,0 +1,35 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
SPICE_PORT=5924
|
||||||
|
|
||||||
|
# use this to install virtio disk drivers after installation
|
||||||
|
# -drive file=$HOME/VirtualBox\ VMs/fake.qcow2,if=virtio \
|
||||||
|
|
||||||
|
# TODO make this work
|
||||||
|
# -net nic,model=virtio \
|
||||||
|
|
||||||
|
qemu-system-x86_64 \
|
||||||
|
-enable-kvm \
|
||||||
|
-cpu host \
|
||||||
|
-smp 4 \
|
||||||
|
-m 2G \
|
||||||
|
-usb -device usb-tablet \
|
||||||
|
-soundhw hda \
|
||||||
|
-vga qxl \
|
||||||
|
-drive file=/usr/share/virtio/virtio-win.iso,index=1,media=cdrom \
|
||||||
|
-drive file=$HOME/VirtualBox\ VMs/test.img,format=raw,if=virtio
|
||||||
|
|
||||||
|
# qemu-system-x86_64 \
|
||||||
|
# -enable-kvm \
|
||||||
|
# -daemonize \
|
||||||
|
# -smp 4 \
|
||||||
|
# -m 2G \
|
||||||
|
# -usb -device usb-tablet \
|
||||||
|
# -soundhw hda \
|
||||||
|
# -vga qxl \
|
||||||
|
# -spice port=${SPICE_PORT},disable-ticketing \
|
||||||
|
# -device virtio-serial \
|
||||||
|
# -chardev spicevmc,id=vdagent,name=vdagent \
|
||||||
|
# -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
|
||||||
|
# VirtualBox\ VMs/test.img
|
||||||
|
# exec remote-viewer --title Windows spice://127.0.0.1:${SPICE_PORT}
|
|
@ -0,0 +1,55 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# from http://www.jdgleaver.co.uk/blog/2014/05/23/samsung_ssds_reading_total_bytes_written_under_linux.html
|
||||||
|
|
||||||
|
# get the lifetime writes and health of an ssd
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Variables #
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
SSD_DEVICE="$1"
|
||||||
|
|
||||||
|
ON_TIME_TAG="Power_On_Hours"
|
||||||
|
WEAR_COUNT_TAG="Wear_Leveling_Count"
|
||||||
|
LBAS_WRITTEN_TAG="Total_LBAs_Written"
|
||||||
|
LBA_SIZE=512 # Value in bytes
|
||||||
|
|
||||||
|
BYTES_PER_MB=1048576
|
||||||
|
BYTES_PER_GB=1073741824
|
||||||
|
BYTES_PER_TB=1099511627776
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Get total data written... #
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
# Get SMART attributes
|
||||||
|
SMART_INFO=$(sudo /usr/sbin/smartctl -A "$SSD_DEVICE")
|
||||||
|
|
||||||
|
# Extract required attributes
|
||||||
|
ON_TIME=$(echo "$SMART_INFO" | grep "$ON_TIME_TAG" | awk '{print $10}')
|
||||||
|
WEAR_COUNT=$(echo "$SMART_INFO" | grep "$WEAR_COUNT_TAG" | awk '{print $4}' | sed 's/^0*//')
|
||||||
|
LBAS_WRITTEN=$(echo "$SMART_INFO" | grep "$LBAS_WRITTEN_TAG" | awk '{print $10}')
|
||||||
|
|
||||||
|
# Convert LBAs -> bytes
|
||||||
|
BYTES_WRITTEN=$(echo "$LBAS_WRITTEN * $LBA_SIZE" | bc)
|
||||||
|
MB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_MB" | bc)
|
||||||
|
GB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_GB" | bc)
|
||||||
|
TB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_TB" | bc)
|
||||||
|
|
||||||
|
# Output results...
|
||||||
|
echo "------------------------------"
|
||||||
|
echo " SSD Status: $SSD_DEVICE"
|
||||||
|
echo "------------------------------"
|
||||||
|
echo " On time: $(echo $ON_TIME | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta') hr"
|
||||||
|
echo "------------------------------"
|
||||||
|
echo " Data written:"
|
||||||
|
echo " MB: $(echo $MB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
|
||||||
|
echo " GB: $(echo $GB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
|
||||||
|
echo " TB: $(echo $TB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
|
||||||
|
echo "------------------------------"
|
||||||
|
echo " Mean write rate:"
|
||||||
|
echo " MB/hr: $(echo "scale=3; $MB_WRITTEN / $ON_TIME" | bc | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
|
||||||
|
echo "------------------------------"
|
||||||
|
echo " Drive health: ${WEAR_COUNT} %"
|
||||||
|
echo "------------------------------"
|
|
@ -0,0 +1,22 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## capture a screenshot using scrot
|
||||||
|
|
||||||
|
SS_DIR="$XDG_CACHE_HOME/screenshots"
|
||||||
|
|
||||||
|
while getopts ":sw" opt; do
|
||||||
|
case ${opt} in
|
||||||
|
s)
|
||||||
|
scrot "$SS_DIR/desktop/%Y-%m-%d-%H:%M:%S_desktop.png"
|
||||||
|
notify-send "Screen captured"
|
||||||
|
;;
|
||||||
|
w)
|
||||||
|
scrot -u "$SS_DIR/window/%Y-%m-%d-%H:%M:%S-\$wx\$h.png"
|
||||||
|
notify-send "Window captured"
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "invalid option, read the code"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## lock the screen using i3lock
|
||||||
|
|
||||||
|
# WORKAROUND make the date show up in the right place on 2+ monitor setups
|
||||||
|
# I want it to only show up on the primary screen, so use xrandr to get the
|
||||||
|
# dimensions and position of the primary monitor and calculate the date position
|
||||||
|
# from that
|
||||||
|
geometry=$(xrandr | sed -n 's/^.*primary \([0-9]*\)x[0-9]*+\([0-9]\)*+[0-9]* .*/\1 \2/p')
|
||||||
|
width=$(echo "$geometry" | cut -f1 -d" ")
|
||||||
|
xpos=$(echo "$geometry" | cut -f2 -d" ")
|
||||||
|
xoffset=$(("$xpos" + "$width" / 2))
|
||||||
|
datepos="$xoffset:600"
|
||||||
|
|
||||||
|
i3lock --color=000000 \
|
||||||
|
--pass-media-keys \
|
||||||
|
--nofork \
|
||||||
|
--ignore-empty-password \
|
||||||
|
--screen=0 \
|
||||||
|
--indicator \
|
||||||
|
--insidecolor=00000055 \
|
||||||
|
--insidevercolor=00000055 \
|
||||||
|
--insidewrongcolor=00000055 \
|
||||||
|
--ringcolor=555555ff \
|
||||||
|
--ringwrongcolor=ff3333ff \
|
||||||
|
--ringvercolor=99ceffff \
|
||||||
|
--keyhlcolor=99ceffff \
|
||||||
|
--bshlcolor=9523ffff \
|
||||||
|
--linecolor=00000000 \
|
||||||
|
--separatorcolor=00000000 \
|
||||||
|
--clock \
|
||||||
|
--verifcolor=99ceffff \
|
||||||
|
--wrongcolor=ff8282ff \
|
||||||
|
--timecolor=ffffffff \
|
||||||
|
--timesize=72 \
|
||||||
|
--timestr="%H:%M" \
|
||||||
|
--datecolor=ffffffff \
|
||||||
|
--datesize=42 \
|
||||||
|
--datestr="%b %d, %Y" \
|
||||||
|
--date-align 0 \
|
||||||
|
--datepos="$datepos" \
|
||||||
|
--wrongsize=72 \
|
||||||
|
--verifsize=72 \
|
||||||
|
--radius=300 \
|
||||||
|
--ring-width=25
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Convert all arguments (assumed SVG) to a PNG
|
||||||
|
# Requires Inkscape
|
||||||
|
|
||||||
|
for i in $@; do
|
||||||
|
BN=$(basename $i .svg)
|
||||||
|
inkscape --export-area-drawing --export-type=png --export-filename="$BN.png" --export-dpi 300 $i
|
||||||
|
done
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Convert all arguments (assumed SVG) to a TIFF
|
||||||
|
# Requires Inkscape and ImageMagick 6.8 (doesn't work with 6.6.9)
|
||||||
|
|
||||||
|
# lovingly ripped off from here:
|
||||||
|
# https://gist.github.com/matsen/4263955
|
||||||
|
|
||||||
|
for i in $@; do
|
||||||
|
BN=$(basename $i .svg)
|
||||||
|
inkscape --without-gui --export-area-drawing --export-png="$BN.png" --export-dpi 300 $i
|
||||||
|
convert -compress LZW -alpha remove $BN.png $BN.tiff
|
||||||
|
convert $BN.png -background white -alpha remove $BN.png
|
||||||
|
mogrify -alpha off $BN.tiff
|
||||||
|
done
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# xdg-base-dir override of svn
|
||||||
|
|
||||||
|
/usr/bin/svn --config-dir "$XDG_CONFIG_HOME"/subversion "$@"
|
|
@ -0,0 +1,114 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
#ASSUMPTIONS
|
||||||
|
#-fs on card is FAT32
|
||||||
|
|
||||||
|
#recursive file navigator to loop through everything
|
||||||
|
function sync()
|
||||||
|
{
|
||||||
|
for i in "$1"/*; do
|
||||||
|
#new file name without special chars to adhere to FAT32 limitations
|
||||||
|
fat_path=${i//"?"/""}
|
||||||
|
fat_path=${fat_path//"*"/""}
|
||||||
|
fat_path=${fat_path//"<"/""}
|
||||||
|
fat_path=${fat_path//">"/""}
|
||||||
|
fat_path=${fat_path//"|"/""}
|
||||||
|
fat_path=${fat_path//":"/""}
|
||||||
|
|
||||||
|
fat_name="${fat_path##*/}"
|
||||||
|
|
||||||
|
#if directory then call self and loop
|
||||||
|
if [ -d "$i" ]; then
|
||||||
|
|
||||||
|
if [ ! -d "$fat_name" ]; then
|
||||||
|
#mkdir "${fat_path##*/}"
|
||||||
|
mkdir "$fat_name"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#cd "${fat_path##*/}"
|
||||||
|
cd "$fat_name"
|
||||||
|
sync "$i"
|
||||||
|
cd ../
|
||||||
|
#if file then check
|
||||||
|
else
|
||||||
|
|
||||||
|
if [ -f "$fat_name" ] || \
|
||||||
|
[ -f "${fat_name//.flac/.mp4}" ] || \
|
||||||
|
[ -f "${fat_name//.flac/.aac}" ] || \
|
||||||
|
[ -f "${fat_name//.flac/.m4a}" ]; then
|
||||||
|
echo skipping "$fat_name"
|
||||||
|
else
|
||||||
|
echo $fat_path
|
||||||
|
#if these then copy (remove cover art)
|
||||||
|
if [ "${i: -4}" == ".mp3" -o \
|
||||||
|
"${i: -4}" == ".mp4" -o \
|
||||||
|
"${i: -4}" == ".m4a" -o \
|
||||||
|
"${i: -4}" == ".aac" -o \
|
||||||
|
"${i: -5}" == ".opus" ]; then
|
||||||
|
|
||||||
|
#~ cp "$i" "$fat_name"
|
||||||
|
ffmpeg -i "$i" -vn -codec:a copy "$fat_name"
|
||||||
|
#if flac then convert to m4a (if flag is not raised)
|
||||||
|
elif [ "${i: -5}" == ".flac" ]; then
|
||||||
|
if [ "$conv" == 1 ]; then
|
||||||
|
trimmed_name=${fat_path##*/}
|
||||||
|
ffmpeg -i "$i" -aq $quality -vn -strict -2 "${trimmed_name%%.flac}".m4a
|
||||||
|
else
|
||||||
|
#~ cp "$i" "$fat_name"
|
||||||
|
ffmpeg -i "$i" -vn -codec:a copy "$fat_name"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
help: $0 options
|
||||||
|
|
||||||
|
Sync memory device with music folder on ssd
|
||||||
|
Files will be saved/synced to current directory
|
||||||
|
If flac files are found they will be converted to m4a to conserve space
|
||||||
|
|
||||||
|
Uses ffmpeg
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-h You know what this is obviously
|
||||||
|
-c Do not convert flac to mp4
|
||||||
|
-q Quality (defaults to 2; 200-250 kbps)
|
||||||
|
-f Source Folder (defaults to ~/Music)
|
||||||
|
|
||||||
|
Note: if bit is given it will be used instead of quality
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
conv=1
|
||||||
|
quality=2 #highest quality
|
||||||
|
folder="$HOME/Music"
|
||||||
|
|
||||||
|
while getopts “hcf:q:” OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
conv=0
|
||||||
|
;;
|
||||||
|
q)
|
||||||
|
quality=$OPTARG
|
||||||
|
;;
|
||||||
|
f)
|
||||||
|
folder=$OPTARG
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
sync "$folder"
|
|
@ -0,0 +1,96 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
function split()
|
||||||
|
{
|
||||||
|
if [ -n "$4" ]; then
|
||||||
|
if [[ $4 == *","* ]]; then
|
||||||
|
inner_counter=1
|
||||||
|
for i in ${4//,/ }
|
||||||
|
do
|
||||||
|
pdftk "$1" cat "$i" output "$2"/$(printf "%02d" $counter)_"$3$inner_counter.pdf"
|
||||||
|
((inner_counter+=1))
|
||||||
|
((counter+=1))
|
||||||
|
done
|
||||||
|
else
|
||||||
|
pdftk "$1" cat "$4" output "$2"/$(printf "%02d" $counter)_"$3.pdf"
|
||||||
|
((counter+=1))
|
||||||
|
fi
|
||||||
|
echo "$3 $4" >> "$2/.log"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
help: $0 options
|
||||||
|
|
||||||
|
Split text book pdfs into sections.
|
||||||
|
All options except file take lists that are comma seaparated.
|
||||||
|
Examples: 1-2,3-4 (range) or 1,2-4,5 (single and range) or 1 (single)
|
||||||
|
|
||||||
|
Requires pdftk
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-h You know what this is obviously
|
||||||
|
-f source file (a pdf)
|
||||||
|
-t table of contents
|
||||||
|
-c chapters
|
||||||
|
-a appendices
|
||||||
|
-i indices
|
||||||
|
-g glossary
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts “hf:t:c:a:i:g:o:” OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
f)
|
||||||
|
src=$OPTARG
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
toc=$OPTARG
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
chapters=$OPTARG
|
||||||
|
;;
|
||||||
|
a)
|
||||||
|
appendices=$OPTARG
|
||||||
|
;;
|
||||||
|
i)
|
||||||
|
indices=$OPTARG
|
||||||
|
;;
|
||||||
|
g)
|
||||||
|
glossary=$OPTARG
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! -e "$src" ]; then
|
||||||
|
echo "\"$src\" does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
folder=$(basename "$src")
|
||||||
|
folder=${src%\.pdf}
|
||||||
|
|
||||||
|
mkdir "$folder"
|
||||||
|
|
||||||
|
counter=0
|
||||||
|
|
||||||
|
split "$src" "$folder" "table_of_contents" "$toc"
|
||||||
|
split "$src" "$folder" "chapter" "$chapters"
|
||||||
|
split "$src" "$folder" "appendix" "$appendices"
|
||||||
|
split "$src" "$folder" "index" "$indices"
|
||||||
|
split "$src" "$folder" "glossary" "$glossary"
|
||||||
|
|
||||||
|
# copy original
|
||||||
|
cp "$src" "$folder/.original"
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# xdg-base-dir override of tj3client
|
||||||
|
|
||||||
|
/bin/tj3client -c "$XDG_CONFIG_HOME/tj3/taskjugglerrc" "$@"
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# xdg-base-dir override of tj3d
|
||||||
|
|
||||||
|
/bin/tj3d -c "$XDG_CONFIG_HOME/tj3/taskjugglerrc" "$@"
|
|
@ -0,0 +1,5 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# xdg-base-dir override of tj3webd
|
||||||
|
|
||||||
|
/bin/tj3webd -c "$XDG_CONFIG_HOME/tj3/taskjugglerrc" "$@"
|
|
@ -0,0 +1,14 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## toggle the bluetooth power state and notify
|
||||||
|
|
||||||
|
## lazy awk usage :)
|
||||||
|
btstate="$(bluetoothctl show | grep "Powered: " | awk '{print $2}')"
|
||||||
|
|
||||||
|
btaction="off"
|
||||||
|
if [[ $btstate == "no" ]]; then
|
||||||
|
btaction="on"
|
||||||
|
fi
|
||||||
|
|
||||||
|
bluetoothctl power "$btaction" > /dev/null
|
||||||
|
notify-send "bluetooth powered $btaction"
|
|
@ -0,0 +1,15 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## unmount a veracrypt volume
|
||||||
|
|
||||||
|
|
||||||
|
## the funny evals are here to expand any literal env variables that may be
|
||||||
|
## passed because systemd didn't expand them (yuck)
|
||||||
|
mountpoint="$(eval echo "$1")"
|
||||||
|
|
||||||
|
if /usr/bin/sudo /usr/bin/veracrypt -d "$mountpoint"; then
|
||||||
|
echo "Unmounted $1"
|
||||||
|
else
|
||||||
|
echo "Failed to unmount $1"
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -0,0 +1,38 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# start Virtualbox VM with an event hook that fires when closing
|
||||||
|
# takes one argument which is the string name of the VM to start
|
||||||
|
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "No VM specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# when VBoxManage runs it spawns a new process with the machine uuid
|
||||||
|
# as part of the full command. This is the process we wish to monitor
|
||||||
|
# in order to fire an event when it closes. Therefore, need to get the
|
||||||
|
# machine uuid for the target VM from the config files (yes VBoxManage
|
||||||
|
# can do this but it seems to randomly take a long time; sed is way
|
||||||
|
# more reliable)
|
||||||
|
|
||||||
|
vbox_conf="$XDG_CONFIG_HOME/VirtualBox/VirtualBox.xml"
|
||||||
|
vbox_home=$(sed -n 's/.*defaultMachineFolder=\"\(.*\)\" defaultHardDiskFormat.*/\1/p' "$vbox_conf")
|
||||||
|
vm_conf="$vbox_home/$1/$1.vbox"
|
||||||
|
|
||||||
|
if [[ ! -e "$vm_conf" ]]; then
|
||||||
|
echo "Invalid VM specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
machine_uuid=$(sed -n 's/.*Machine uuid=\"{\(.*\)}\".*/\1/p' "$vm_conf")
|
||||||
|
|
||||||
|
VBoxManage startvm "$1"
|
||||||
|
|
||||||
|
vm_pid=$(pgrep -f "$machine_uuid")
|
||||||
|
|
||||||
|
# ew polling...
|
||||||
|
while [ -d "/proc/$vm_pid" ]; do
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
|
||||||
|
#xitsign
|
|
@ -0,0 +1,7 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# make a new python environment and install some nice defaults
|
||||||
|
|
||||||
|
virtualenv "$1"
|
||||||
|
source "$1/bin/activate"
|
||||||
|
pip install ipython black flake8 pylint
|
|
@ -0,0 +1,30 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
## with_gpg_mount: call a program after mounting GNUPGHOME
|
||||||
|
|
||||||
|
bin="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
## TODO most of this stuff could be more easily done in the rofi-extras
|
||||||
|
## haskell code where many of the edge cases that this is hoping to avoid are
|
||||||
|
## already strictly/brutally snuffed out by GHC's iron fist
|
||||||
|
|
||||||
|
notify_error () {
|
||||||
|
notify-send --icon=dialog-error-symbolic "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
notify_info () {
|
||||||
|
notify-send --icon=dialog-information-symbolic "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! systemctl --user is-active --quiet mount-veracrypt@gnupg.service; then
|
||||||
|
if systemctl --user --quiet start mount-veracrypt@gnupg.service; then
|
||||||
|
notify_info "Mounted $GNUPGHOME"
|
||||||
|
"$bin" "$@"
|
||||||
|
else
|
||||||
|
notify_error "Could not mount gnupg directory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
"$bin" "$@"
|
||||||
|
fi
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# exports the current keyboard layout as a pdf
|
||||||
|
# the sole argument is the path of the output file
|
||||||
|
|
||||||
|
# requires:
|
||||||
|
# - xorg-setxkbmap
|
||||||
|
# - xorg-setxkbcomp
|
||||||
|
# - xorg-xkbprint
|
||||||
|
# - ghostscript
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo no output file path given
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
setxkbmap -print |
|
||||||
|
xkbcomp - - |
|
||||||
|
xkbprint -label symbols -color - - |
|
||||||
|
ps2pdf - > "$1"
|
|
@ -0,0 +1,106 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
help: $0 options
|
||||||
|
|
||||||
|
use this classy tool to (zip)bomb the crap out of your mom, dad, ex, annoying sister, George Bush, Donald Trump, Bon Jovi, or ISIS
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-c Compression algo (zip)
|
||||||
|
-d Depth (1)
|
||||||
|
-f Number of files per layer (16)
|
||||||
|
-n Number of sequences per file (512)
|
||||||
|
-s Character sequence to store ("0")
|
||||||
|
-z Name of zipbomb
|
||||||
|
|
||||||
|
Note: if any metadata option is not specified,
|
||||||
|
each option will be prompted every url
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
name="zipbomb"
|
||||||
|
comp_algo="zip"
|
||||||
|
depth=1
|
||||||
|
files=16
|
||||||
|
n_seq=512
|
||||||
|
seq="0"
|
||||||
|
|
||||||
|
while getopts “hc:d:f:n:s:z:” OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
h)
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
comp_algo=$OPTARG
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
depth=$OPTARG
|
||||||
|
;;
|
||||||
|
f)
|
||||||
|
files=$OPTARG
|
||||||
|
;;
|
||||||
|
n)
|
||||||
|
n_seq=$OPTARG
|
||||||
|
;;
|
||||||
|
s)
|
||||||
|
seq=$OPTARG
|
||||||
|
;;
|
||||||
|
z)
|
||||||
|
name=$OPTARG
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
zipbomb_dir=/tmp/zipbomb
|
||||||
|
|
||||||
|
mkdir "$zipbomb_dir"
|
||||||
|
cd "$zipbomb_dir"
|
||||||
|
|
||||||
|
zip_layer() {
|
||||||
|
level="$1"
|
||||||
|
|
||||||
|
#bottom level
|
||||||
|
if [[ "$level" == 1 ]]; then
|
||||||
|
perl -E "print '$seq' x $n_seq" > "$zipbomb_dir"/0
|
||||||
|
|
||||||
|
for i in $(seq 1 $(($files)))
|
||||||
|
do
|
||||||
|
cp "$zipbomb_dir"/0 "$zipbomb_dir"/"$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
zip -qr "$name" ./*
|
||||||
|
|
||||||
|
for i in $(seq 0 $(($files)))
|
||||||
|
do
|
||||||
|
rm "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
#above bottom level
|
||||||
|
else
|
||||||
|
|
||||||
|
zip_layer $(($level-1))
|
||||||
|
|
||||||
|
mv "$name".zip "0.zip"
|
||||||
|
|
||||||
|
for i in $(seq 1 $(($files)))
|
||||||
|
do
|
||||||
|
cp "0.zip" "$i".zip
|
||||||
|
done
|
||||||
|
|
||||||
|
zip -qr "$name" ./*
|
||||||
|
|
||||||
|
for i in $(seq 0 $(($files)))
|
||||||
|
do
|
||||||
|
rm "$i".zip
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
zip_layer "$depth"
|
|
@ -0,0 +1 @@
|
||||||
|
{{ .chezmoi.sourceDir }}/VirtualBox.xml
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
userresources="$XDG_CONFIG_HOME/X11/xresources"
|
||||||
|
|
||||||
|
systemctl --user import-environment PATH
|
||||||
|
systemctl --user import-environment DISPLAY
|
||||||
|
|
||||||
|
if [ -f "$userresources" ]; then
|
||||||
|
xrdb -merge "$userresources"
|
||||||
|
fi
|
||||||
|
|
||||||
|
/usr/bin/prime-offload > /dev/null 2>&1
|
||||||
|
|
||||||
|
setxkbmap hypermode
|
||||||
|
|
||||||
|
KEYS="Control_L=Escape"
|
||||||
|
KEYS="$KEYS;Control_R=Return"
|
||||||
|
KEYS="$KEYS;Super_L=Tab"
|
||||||
|
KEYS="$KEYS;Super_R=backslash"
|
||||||
|
KEYS="$KEYS;Alt_R=space"
|
||||||
|
KEYS="$KEYS;ISO_Level3_Shift=XF86Search"
|
||||||
|
xman -t 500 "$KEYS" "^VirtualBox Machine$" &
|
||||||
|
|
||||||
|
greenclip daemon &
|
||||||
|
redshift > /dev/null 2>&1 &
|
||||||
|
dunst &
|
||||||
|
emacs-start &
|
||||||
|
seafile-applet > /dev/null 2>&1 &
|
||||||
|
nm-applet > /dev/null 2>&1 &
|
||||||
|
flameshot > /dev/null 2>&1 &
|
||||||
|
rofi-bw -d 3600 &
|
||||||
|
|
||||||
|
autorandr --change > /dev/null
|
||||||
|
picom --config "$XDG_CONFIG_HOME/picom.conf" -b
|
||||||
|
|
||||||
|
numlockx on
|
||||||
|
xss-lock --ignore-sleep screenlock &
|
||||||
|
|
||||||
|
exec xmonad
|
|
@ -0,0 +1,84 @@
|
||||||
|
Xft.autohint: 0
|
||||||
|
Xft.lcdfilter: lcddefault
|
||||||
|
Xft.hintstyle: hintfull
|
||||||
|
Xft.hinting: 1
|
||||||
|
Xft.antialias: 1
|
||||||
|
Xft.rgba: rgb
|
||||||
|
Xft.dpi: 96
|
||||||
|
|
||||||
|
*color0: #000000
|
||||||
|
*color8: #666666
|
||||||
|
|
||||||
|
*color1: #dd2020
|
||||||
|
*color9: #ff4040
|
||||||
|
|
||||||
|
*color2: #20cc20
|
||||||
|
*color10: #30ff30
|
||||||
|
|
||||||
|
*color3: #cccc20
|
||||||
|
*color11: #ffff30
|
||||||
|
|
||||||
|
*color4: #0070ff
|
||||||
|
*color12: #00a0ff
|
||||||
|
|
||||||
|
*color5: #cc20cc
|
||||||
|
*color13: #ff60ff
|
||||||
|
|
||||||
|
*color6: #20cccc
|
||||||
|
*color14: #30ffff
|
||||||
|
|
||||||
|
*color7: #aaaaaa
|
||||||
|
*color15: #ffffff
|
||||||
|
|
||||||
|
*.cursorBlink: False
|
||||||
|
*.cursorColor: #30ff30
|
||||||
|
|
||||||
|
*.colorUL: 11
|
||||||
|
|
||||||
|
URxvt.depth: 32
|
||||||
|
URxvt.background: [85]#000000
|
||||||
|
URxvt.foreground: 15
|
||||||
|
URxvt.font: xft:DejaVu Sans Mono:size=11:autohint=false
|
||||||
|
URxvt.boldfont: xft:DejaVu Sans Mono Bold:size=11:autohint=false
|
||||||
|
URxvt.fontItalic: xft:DejaVu Sans Mono Oblique:size=11:autohint=false
|
||||||
|
URxvt.fontBoldItalic: xft:DejaVu Sans Mono Bold Oblique:size=11:autohint=false
|
||||||
|
URxvt.tabbed.tabbar-fg: 15
|
||||||
|
URxvt.tabbed.tabbar-bg: 0
|
||||||
|
URxvt.tabbed.tab-fg: 0
|
||||||
|
URxvt.tabbed.tab-bg: 15
|
||||||
|
URxvt.tabbed.autohide: true
|
||||||
|
URxvt.tabbed.title: false
|
||||||
|
|
||||||
|
URxvt.imLocale: en_US.UTF-8
|
||||||
|
|
||||||
|
URxvt.iso14755: False
|
||||||
|
URxvt.iso14755_52: False
|
||||||
|
|
||||||
|
URxvt.saveLines: 8192
|
||||||
|
|
||||||
|
URxvt.fading: 50
|
||||||
|
URxvt.fadeColor: Grey25
|
||||||
|
|
||||||
|
URxvt.meta8: False
|
||||||
|
|
||||||
|
URxvt.scrollBar: False
|
||||||
|
|
||||||
|
URxvt.perl-ext-common: default,matcher,tabbedex,keyboard-select,selection-to-clipboard
|
||||||
|
|
||||||
|
URxvt.url-launcher: /bin/chromium
|
||||||
|
URxvt.matcher.button: 1
|
||||||
|
|
||||||
|
URxvt.keysym.M-Escape: perl:keyboard-select:activate
|
||||||
|
URxvt.keyboard-select.clipboard: True;
|
||||||
|
|
||||||
|
URxvt.keysym.Control-C: perl:clipboard:copy
|
||||||
|
URxvt.keysym.Control-V: perl:clipboard:paste
|
||||||
|
URxvt.keysym.Control-B: perl:clipboard:paste_escaped
|
||||||
|
|
||||||
|
URxvt.keysym.Control-t: perl:tabbedex:new_tab
|
||||||
|
URxvt.keysym.Control-Tab: perl:tabbedex:next_tab
|
||||||
|
URxvt.keysym.Control-ISO_Left_Tab: perl:tabbedex:prev_tab
|
||||||
|
URxvt.keysym.Control-Shift-Left: perl:tabbedex:move_tab_left
|
||||||
|
URxvt.keysym.Control-Shift-Right: perl:tabbedex:move_tab_right
|
||||||
|
URxvt.keysym.Control-Shift-R: perl:tabbedex:rename_tab
|
||||||
|
URxvt.tabbed.no-tabbedex-keys: true
|
|
@ -0,0 +1,6 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
feh --no-fehbg --bg-scale --bg-fill "$XDG_DATA_HOME/backgrounds/wallpaper.png" &
|
||||||
|
|
||||||
|
killall conky > /dev/null 2>&1
|
||||||
|
conky -d > /dev/null 2>&1
|
|
@ -0,0 +1,11 @@
|
||||||
|
output HDMI-1
|
||||||
|
mode 1920x1080
|
||||||
|
left-of eDP-1
|
||||||
|
panning 0x0
|
||||||
|
|
||||||
|
output eDP-1
|
||||||
|
pos 0x0
|
||||||
|
mode 1920x1080
|
||||||
|
primary
|
||||||
|
panning 1920x1080+1920+0
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
eDP-1 *
|
||||||
|
HDMI-1 *
|
|
@ -0,0 +1,11 @@
|
||||||
|
output eDP-1
|
||||||
|
pos 0x0
|
||||||
|
mode 1920x1080
|
||||||
|
panning 0x0
|
||||||
|
primary
|
||||||
|
|
||||||
|
output HDMI-1
|
||||||
|
mode 1920x1080
|
||||||
|
right-of eDP-1
|
||||||
|
panning 1920x1080+1920+0
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
eDP-1 *
|
||||||
|
HDMI-1 *
|
|
@ -0,0 +1,8 @@
|
||||||
|
output eDP-1
|
||||||
|
mode 1920x1080
|
||||||
|
pos 0x0
|
||||||
|
primary
|
||||||
|
|
||||||
|
output HDMI-1
|
||||||
|
off
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
eDP-1 *
|
|
@ -0,0 +1,18 @@
|
||||||
|
output HDMI-1-1
|
||||||
|
mode 1920x1080
|
||||||
|
pos 0x0
|
||||||
|
panning 0x0
|
||||||
|
|
||||||
|
output eDP-1-1
|
||||||
|
pos 1920x0
|
||||||
|
mode 1920x1080
|
||||||
|
panning 0x0
|
||||||
|
primary
|
||||||
|
|
||||||
|
output DP-0
|
||||||
|
mode 1920x1080
|
||||||
|
pos 3840x0
|
||||||
|
panning 1920x1080+3840+0
|
||||||
|
|
||||||
|
output DP-1
|
||||||
|
off
|
|
@ -0,0 +1,3 @@
|
||||||
|
DP-0 *
|
||||||
|
HDMI-1-1 *
|
||||||
|
eDP-1-1 *
|
|
@ -0,0 +1,14 @@
|
||||||
|
output DP-1
|
||||||
|
off
|
||||||
|
|
||||||
|
output HDMI-1-1
|
||||||
|
off
|
||||||
|
|
||||||
|
output eDP-1-1
|
||||||
|
mode 1920x1080
|
||||||
|
pos 0x0
|
||||||
|
primary
|
||||||
|
|
||||||
|
output DP-0
|
||||||
|
mode 2560x1440
|
||||||
|
pos 1920x0
|
|
@ -0,0 +1,2 @@
|
||||||
|
DP-0 00ffffffffffff000469a328352f0100191c0104b53e22783a1cb5a3574fa0270d5054bfef00d1c0814081809500b300714f81c001014dd000a0f0703e80302035006d552100001aa36600a0f0701f80302035006d552100001a000000fd001e5018a03c041100f0f838f03c000000fc0041535553205042323837510a20013c02031c714f0102031112130414051f900e0f1d1e2309170783010000565e00a0a0a02950302035006d552100001ee26800a0a0402e60302036006d552100001a011d00bc52d01e20b82855406d552100001e8c0ad090204031200c4055006d552100001800000000000000000000000000000000000000000000000000000090
|
||||||
|
eDP-1-1 00ffffffffffff0030e4e50500000000001c0104a52213780238d5975e598e271c505400000001010101010101010101010101010101243680a070381f403020350058c210000019000000000000000000000000000000000000000000fe004c4720446973706c61790a2020000000fe004c503135365746432d53504431003e
|
|
@ -0,0 +1,16 @@
|
||||||
|
output HDMI-1-1
|
||||||
|
off
|
||||||
|
|
||||||
|
output eDP-1-1
|
||||||
|
pos 0x0
|
||||||
|
mode 1920x1080
|
||||||
|
panning 0x0
|
||||||
|
primary
|
||||||
|
|
||||||
|
output DP-0
|
||||||
|
mode 1920x1080
|
||||||
|
right-of eDP-1-1
|
||||||
|
panning 1920x1080+1920+0
|
||||||
|
|
||||||
|
output DP-1
|
||||||
|
off
|
|
@ -0,0 +1,3 @@
|
||||||
|
DP-0 *
|
||||||
|
HDMI-1-1 *
|
||||||
|
eDP-1-1 *
|
|
@ -0,0 +1,13 @@
|
||||||
|
output DP-0
|
||||||
|
off
|
||||||
|
output DP-1
|
||||||
|
off
|
||||||
|
output HDMI-1-1
|
||||||
|
off
|
||||||
|
output eDP-1-1
|
||||||
|
#crtc 0
|
||||||
|
gamma 1.0:0.909:0.909
|
||||||
|
mode 1920x1080
|
||||||
|
pos 0x0
|
||||||
|
primary
|
||||||
|
rate 59.98
|
|
@ -0,0 +1 @@
|
||||||
|
eDP-1-1 *
|
|
@ -0,0 +1,6 @@
|
||||||
|
## options for R
|
||||||
|
max_size = 5.0G
|
||||||
|
# important for R CMD INSTALL *.tar.gz as tarballs are expanded freshly -> fresh ctime
|
||||||
|
sloppiness = include_file_ctime
|
||||||
|
# also important as the (temp.) directory name will differ
|
||||||
|
hash_dir = false
|
|
@ -0,0 +1,10 @@
|
||||||
|
--process-per-site
|
||||||
|
--disk-cache-dir="/tmp/chromium-cache"
|
||||||
|
--ignore-gpu-blocklist
|
||||||
|
--enable-gpu-rasterization
|
||||||
|
--enable-zero-copy
|
||||||
|
--enable-oop-rasterization
|
||||||
|
--enable-accelerated-video-decode
|
||||||
|
--use-gl=desktop
|
||||||
|
--force-dark-mode
|
||||||
|
--enable-features=WebUIDarkMode
|
|
@ -0,0 +1,328 @@
|
||||||
|
[global]
|
||||||
|
### Display ###
|
||||||
|
|
||||||
|
# Which monitor should the notifications be displayed on.
|
||||||
|
monitor = 0
|
||||||
|
|
||||||
|
# Display notification on focused monitor. Possible modes are:
|
||||||
|
# mouse: follow mouse pointer
|
||||||
|
# keyboard: follow window with keyboard focus
|
||||||
|
# none: don't follow anything
|
||||||
|
#
|
||||||
|
# "keyboard" needs a window manager that exports the
|
||||||
|
# _NET_ACTIVE_WINDOW property.
|
||||||
|
# This should be the case for almost all modern window managers.
|
||||||
|
#
|
||||||
|
# If this option is set to mouse or keyboard, the monitor option
|
||||||
|
# will be ignored.
|
||||||
|
follow = none
|
||||||
|
|
||||||
|
# The geometry of the window:
|
||||||
|
# [{width}]x{height}[+/-{x}+/-{y}]
|
||||||
|
# The geometry of the message window.
|
||||||
|
# The height is measured in number of notifications everything else
|
||||||
|
# in pixels. If the width is omitted but the height is given
|
||||||
|
# ("-geometry x2"), the message window expands over the whole screen
|
||||||
|
# (dmenu-like). If width is 0, the window expands to the longest
|
||||||
|
# message displayed. A positive x is measured from the left, a
|
||||||
|
# negative from the right side of the screen. Y is measured from
|
||||||
|
# the top and down respectively.
|
||||||
|
# The width can be negative. In this case the actual width is the
|
||||||
|
# screen width minus the width defined in within the geometry option.
|
||||||
|
geometry = "300x5-30+20"
|
||||||
|
|
||||||
|
# Show how many messages are currently hidden (because of geometry).
|
||||||
|
indicate_hidden = yes
|
||||||
|
|
||||||
|
# Shrink window if it's smaller than the width. Will be ignored if
|
||||||
|
# width is 0.
|
||||||
|
shrink = no
|
||||||
|
|
||||||
|
# The transparency of the window. Range: [0; 100].
|
||||||
|
# This option will only work if a compositing window manager is
|
||||||
|
# present (e.g. xcompmgr, compiz, etc.).
|
||||||
|
transparency = 20
|
||||||
|
|
||||||
|
# The height of the entire notification. If the height is smaller
|
||||||
|
# than the font height and padding combined, it will be raised
|
||||||
|
# to the font height and padding.
|
||||||
|
notification_height = 0
|
||||||
|
|
||||||
|
# Draw a line of "separator_height" pixel height between two
|
||||||
|
# notifications.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
separator_height = 2
|
||||||
|
|
||||||
|
# Padding between text and separator.
|
||||||
|
padding = 8
|
||||||
|
|
||||||
|
# Horizontal padding.
|
||||||
|
horizontal_padding = 8
|
||||||
|
|
||||||
|
# Defines width in pixels of frame around the notification window.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
frame_width = 1
|
||||||
|
|
||||||
|
# Defines color of the frame around the notification window.
|
||||||
|
frame_color = "#aaaaaa"
|
||||||
|
|
||||||
|
# Define a color for the separator.
|
||||||
|
# possible values are:
|
||||||
|
# * auto: dunst tries to find a color fitting to the background;
|
||||||
|
# * foreground: use the same color as the foreground;
|
||||||
|
# * frame: use the same color as the frame;
|
||||||
|
# * anything else will be interpreted as a X color.
|
||||||
|
separator_color = frame
|
||||||
|
|
||||||
|
# Sort messages by urgency.
|
||||||
|
sort = yes
|
||||||
|
|
||||||
|
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||||
|
# for longer than idle_threshold seconds.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
# Transient notifications ignore this setting.
|
||||||
|
idle_threshold = 120
|
||||||
|
|
||||||
|
### Text ###
|
||||||
|
|
||||||
|
font = DejaVu Sans 10
|
||||||
|
|
||||||
|
# The spacing between lines. If the height is smaller than the
|
||||||
|
# font height, it will get raised to the font height.
|
||||||
|
line_height = 0
|
||||||
|
|
||||||
|
# Possible values are:
|
||||||
|
# full: Allow a small subset of html markup in notifications:
|
||||||
|
# <b>bold</b>
|
||||||
|
# <i>italic</i>
|
||||||
|
# <s>strikethrough</s>
|
||||||
|
# <u>underline</u>
|
||||||
|
#
|
||||||
|
# For a complete reference see
|
||||||
|
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
|
||||||
|
#
|
||||||
|
# strip: This setting is provided for compatibility with some broken
|
||||||
|
# clients that send markup even though it's not enabled on the
|
||||||
|
# server. Dunst will try to strip the markup but the parsing is
|
||||||
|
# simplistic so using this option outside of matching rules for
|
||||||
|
# specific applications *IS GREATLY DISCOURAGED*.
|
||||||
|
#
|
||||||
|
# no: Disable markup parsing, incoming notifications will be treated as
|
||||||
|
# plain text. Dunst will not advertise that it has the body-markup
|
||||||
|
# capability if this is set as a global setting.
|
||||||
|
#
|
||||||
|
# It's important to note that markup inside the format option will be parsed
|
||||||
|
# regardless of what this is set to.
|
||||||
|
markup = full
|
||||||
|
|
||||||
|
# The format of the message. Possible variables are:
|
||||||
|
# %a appname
|
||||||
|
# %s summary
|
||||||
|
# %b body
|
||||||
|
# %i iconname (including its path)
|
||||||
|
# %I iconname (without its path)
|
||||||
|
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||||
|
# %n progress value if set without any extra characters
|
||||||
|
# %% Literal %
|
||||||
|
# Markup is allowed
|
||||||
|
format = "<b>%s</b>\n%b"
|
||||||
|
|
||||||
|
# Alignment of message text.
|
||||||
|
# Possible values are "left", "center" and "right".
|
||||||
|
alignment = left
|
||||||
|
|
||||||
|
# Show age of message if message is older than show_age_threshold
|
||||||
|
# seconds.
|
||||||
|
# Set to -1 to disable.
|
||||||
|
show_age_threshold = 60
|
||||||
|
|
||||||
|
# Split notifications into multiple lines if they don't fit into
|
||||||
|
# geometry.
|
||||||
|
word_wrap = yes
|
||||||
|
|
||||||
|
# When word_wrap is set to no, specify where to ellipsize long lines.
|
||||||
|
# Possible values are "start", "middle" and "end".
|
||||||
|
ellipsize = middle
|
||||||
|
|
||||||
|
# Ignore newlines '\n' in notifications.
|
||||||
|
ignore_newline = no
|
||||||
|
|
||||||
|
# Merge multiple notifications with the same content
|
||||||
|
stack_duplicates = true
|
||||||
|
|
||||||
|
# Hide the count of merged notifications with the same content
|
||||||
|
hide_duplicate_count = false
|
||||||
|
|
||||||
|
# Display indicators for URLs (U) and actions (A).
|
||||||
|
show_indicators = yes
|
||||||
|
|
||||||
|
### Icons ###
|
||||||
|
|
||||||
|
# Align icons left/right/off
|
||||||
|
icon_position = left
|
||||||
|
|
||||||
|
# Scale larger icons down to this size, set to 0 to disable
|
||||||
|
max_icon_size = 32
|
||||||
|
|
||||||
|
# Paths to default icons.
|
||||||
|
icon_path = /usr/share/icons/Papirus/symbolic/status/:/usr/share/icons/Papirus/symbolic/devices/:/usr/share/icons/hicolor/scalable/apps
|
||||||
|
|
||||||
|
### History ###
|
||||||
|
|
||||||
|
# Should a notification popped up from history be sticky or timeout
|
||||||
|
# as if it would normally do.
|
||||||
|
sticky_history = yes
|
||||||
|
|
||||||
|
# Maximum amount of notifications kept in history
|
||||||
|
history_length = 20
|
||||||
|
|
||||||
|
### Misc/Advanced ###
|
||||||
|
|
||||||
|
# dmenu path.
|
||||||
|
dmenu = /usr/bin/rofi -dmenu -p dunst
|
||||||
|
|
||||||
|
# Browser for opening urls in context menu.
|
||||||
|
browser = xdg-open
|
||||||
|
|
||||||
|
# Always run rule-defined scripts, even if the notification is suppressed
|
||||||
|
always_run_script = true
|
||||||
|
|
||||||
|
# Define the title of the windows spawned by dunst
|
||||||
|
title = Dunst
|
||||||
|
|
||||||
|
# Define the class of the windows spawned by dunst
|
||||||
|
class = Dunst
|
||||||
|
|
||||||
|
# Print a notification on startup.
|
||||||
|
# This is mainly for error detection, since dbus (re-)starts dunst
|
||||||
|
# automatically after a crash.
|
||||||
|
startup_notification = false
|
||||||
|
|
||||||
|
### Legacy
|
||||||
|
|
||||||
|
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||||
|
# This setting is provided for compatibility with older nVidia drivers that
|
||||||
|
# do not support RandR and using it on systems that support RandR is highly
|
||||||
|
# discouraged.
|
||||||
|
#
|
||||||
|
# By enabling this setting dunst will not be able to detect when a monitor
|
||||||
|
# is connected or disconnected which might break follow mode if the screen
|
||||||
|
# layout changes.
|
||||||
|
force_xinerama = false
|
||||||
|
|
||||||
|
# Experimental features that may or may not work correctly. Do not expect them
|
||||||
|
# to have a consistent behaviour across releases.
|
||||||
|
[experimental]
|
||||||
|
# Calculate the dpi to use on a per-monitor basis.
|
||||||
|
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||||
|
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||||
|
# using the resolution and physical size. This might be useful in setups
|
||||||
|
# where there are multiple screens with very different dpi values.
|
||||||
|
per_monitor_dpi = false
|
||||||
|
|
||||||
|
[shortcuts]
|
||||||
|
|
||||||
|
# Shortcuts are specified as [modifier+][modifier+]...key
|
||||||
|
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
|
||||||
|
# "mod3" and "mod4" (windows-key).
|
||||||
|
# Xev might be helpful to find names for keys.
|
||||||
|
|
||||||
|
# Close notification.
|
||||||
|
close = mod4+shift+grave
|
||||||
|
|
||||||
|
# Close all notifications.
|
||||||
|
close_all = mod4+ctrl+grave
|
||||||
|
|
||||||
|
# Redisplay last message(s).
|
||||||
|
# On the US keyboard layout "grave" is normally above TAB and left
|
||||||
|
# of "1". Make sure this key actually exists on your keyboard layout,
|
||||||
|
# e.g. check output of 'xmodmap -pke'
|
||||||
|
history = mod4+grave
|
||||||
|
|
||||||
|
# Context menu.
|
||||||
|
context = mod4+mod1+grave
|
||||||
|
|
||||||
|
[urgency_low]
|
||||||
|
# IMPORTANT: colors have to be defined in quotation marks.
|
||||||
|
# Otherwise the "#" and following would be interpreted as a comment.
|
||||||
|
background = "#d6d6d6"
|
||||||
|
foreground = "#2c2c2c"
|
||||||
|
frame_color = "#b0b0b0"
|
||||||
|
timeout = 10
|
||||||
|
# Icon for notifications with low urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
background = "#d6d6d6"
|
||||||
|
foreground = "#2c2c2c"
|
||||||
|
frame_color = "#b0b0b0"
|
||||||
|
timeout = 10
|
||||||
|
# Icon for notifications with normal urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
background = "#ff9090"
|
||||||
|
foreground = "#2c2c2c"
|
||||||
|
frame_color = "#ffb0b0"
|
||||||
|
timeout = 0
|
||||||
|
# Icon for notifications with critical urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
# Every section that isn't one of the above is interpreted as a rules to
|
||||||
|
# override settings for certain messages.
|
||||||
|
# Messages can be matched by "appname", "summary", "body", "icon", "category",
|
||||||
|
# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
|
||||||
|
# "background", "new_icon" and "format".
|
||||||
|
# Shell-like globbing will get expanded.
|
||||||
|
#
|
||||||
|
# SCRIPTING
|
||||||
|
# You can specify a script that gets run when the rule matches by
|
||||||
|
# setting the "script" option.
|
||||||
|
# The script will be called as follows:
|
||||||
|
# script appname summary body icon urgency
|
||||||
|
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||||
|
#
|
||||||
|
# NOTE: if you don't want a notification to be displayed, set the format
|
||||||
|
# to "".
|
||||||
|
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||||
|
# to find fitting options for rules.
|
||||||
|
|
||||||
|
#[espeak]
|
||||||
|
# summary = "*"
|
||||||
|
# script = dunst_espeak.sh
|
||||||
|
|
||||||
|
#[script-test]
|
||||||
|
# summary = "*script*"
|
||||||
|
# script = dunst_test.sh
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
# # This notification will not be displayed
|
||||||
|
# summary = "foobar"
|
||||||
|
# format = ""
|
||||||
|
|
||||||
|
#[history-ignore]
|
||||||
|
# # This notification will not be saved in history
|
||||||
|
# summary = "foobar"
|
||||||
|
# history_ignore = yes
|
||||||
|
|
||||||
|
#[signed_on]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = "*signed on*"
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[signed_off]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *signed off*
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[says]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *says*
|
||||||
|
# urgency = critical
|
||||||
|
#
|
||||||
|
#[twitter]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *twitter.com*
|
||||||
|
# urgency = normal
|
||||||
|
#
|
||||||
|
# vim: ft=cfg
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||||
|
<fontconfig>
|
||||||
|
<match target="font">
|
||||||
|
<edit name="antialias" mode="assign">
|
||||||
|
<bool>true</bool>
|
||||||
|
</edit>
|
||||||
|
<edit name="hinting" mode="assign">
|
||||||
|
<bool>true</bool>
|
||||||
|
</edit>
|
||||||
|
<edit name="hintstyle" mode="assign">
|
||||||
|
<const>hintmedium</const>
|
||||||
|
</edit>
|
||||||
|
<edit name="rgba" mode="assign">
|
||||||
|
<const>rgb</const>
|
||||||
|
</edit>
|
||||||
|
<edit name="autohint" mode="assign">
|
||||||
|
<bool>false</bool>
|
||||||
|
</edit>
|
||||||
|
<edit name="lcdfilter" mode="assign">
|
||||||
|
<const>lcddefault</const>
|
||||||
|
</edit>
|
||||||
|
<edit name="dpi" mode="assign">
|
||||||
|
<double>96</double>
|
||||||
|
</edit>
|
||||||
|
</match>
|
||||||
|
</fontconfig>
|
|
@ -0,0 +1,11 @@
|
||||||
|
[user]
|
||||||
|
name = ndwarshuis
|
||||||
|
email = ndwar@yavin4.ch
|
||||||
|
[core]
|
||||||
|
editor = vim
|
||||||
|
[merge]
|
||||||
|
tool = vimdiff
|
||||||
|
[color]
|
||||||
|
ui = true
|
||||||
|
[credential]
|
||||||
|
helper = /usr/lib/git-core/git-credential-libsecret
|
|
@ -0,0 +1,249 @@
|
||||||
|
##
|
||||||
|
## overall design
|
||||||
|
##
|
||||||
|
|
||||||
|
## Each of these configurations assume that I don't use the
|
||||||
|
## web interfaces (usually) for any of my servers and that I only
|
||||||
|
## use mu4e as my email client (because I am smarter than my
|
||||||
|
## smartphone).
|
||||||
|
|
||||||
|
## Further assumptions include that that the only "folders" (or labels)
|
||||||
|
## that I care about are inbox, archive, trash, and drafts (maybe).
|
||||||
|
## Anything beyond this turns email into something it is not (a
|
||||||
|
## terrible todo list). Spam/junk are useless to sync to a client
|
||||||
|
## machine (unless something important "goes to junk" which in my
|
||||||
|
## experience is extremely rare).
|
||||||
|
|
||||||
|
## To elaborate on the folders I do care about:
|
||||||
|
## - Inbox is the main interaction point with the email server/client.
|
||||||
|
## Mail comes in and I make the decision to reply (keep thread open in
|
||||||
|
## inbox), archive (important enough to keep, but not enough to stay
|
||||||
|
## in sight), or delete (just plain useless). (Note there is instant
|
||||||
|
## delete or move to trash depending on how sure I am of the message's
|
||||||
|
## uselessness). Note that ideally the inbox is empty...as in no
|
||||||
|
## files (regardless of read/unread). This keeps it fast and
|
||||||
|
## uncluttered.
|
||||||
|
## - Archive (or whatever this is called in the server) is for old
|
||||||
|
## messages that may be useful for reference). This is where many
|
||||||
|
## messages end up and accounts for most of the size/bulk of the files.
|
||||||
|
## This is also why small inbox is important, because searching through
|
||||||
|
## all these files is sloowwww.
|
||||||
|
## - Sent is useless (just search for To:notme in archive) so don't
|
||||||
|
## bother syncing at all.
|
||||||
|
## - Trash is useful but only locally. I found it was a pain to get
|
||||||
|
## trash to sync correctly with everything else mu4e does, so I don't
|
||||||
|
## actually sync this folder. Instead, server trash is for spam/auto-
|
||||||
|
## deleted crap found by my filters. Client trash works like actual
|
||||||
|
## trash on the web interface. If I lose my laptop...oh well, it's
|
||||||
|
## just trash :)
|
||||||
|
## - Drafts works just like trash in that it only is useful locally
|
||||||
|
## and not synced with the server. Ideally it is empty (why keep empty
|
||||||
|
## drafts??).
|
||||||
|
|
||||||
|
##
|
||||||
|
## gmail server
|
||||||
|
##
|
||||||
|
|
||||||
|
## To the best of my knowledge, gmail uses one giant folder and
|
||||||
|
## a bunch of "labels" to group emails. This is frustrating because
|
||||||
|
## it does not map to on-disk filesystem paths very nicely by default.
|
||||||
|
## Specifically, "All Mail" refers to everything minus trash/spam,
|
||||||
|
## and an "Inbox" label (folder?) is applied on top of this to denote
|
||||||
|
## the inbox messages. This leads to duplicates in many vanilla IMAP
|
||||||
|
## syncing solutions. (No idea why gmail was designed this way).
|
||||||
|
|
||||||
|
## To get around this, I created a new label called "rxv" (archive,
|
||||||
|
## because apparently this name is "system reserved" in gmail) to
|
||||||
|
## denote the "non-inbox" messages. This works but assumes that these
|
||||||
|
## labels are mutually exclusive (which has no enforcement in gmail)
|
||||||
|
## so all handling is done by mu4e to ensure that these are updated
|
||||||
|
## properly (eg msgs from inbox moved to archive folder). I also
|
||||||
|
## set auto-expunge = off and set deleted/expunged messages to be
|
||||||
|
## moved to trash (it could also be set to "delete forever" but trash
|
||||||
|
## is safer).
|
||||||
|
|
||||||
|
## NOTE: this does not seem to work all that well when one move from
|
||||||
|
## archive back to inbox (eg it actually double-labels the message)
|
||||||
|
## Since I hardly ever do this...whatever
|
||||||
|
|
||||||
|
IMAPAccount gmail
|
||||||
|
Host imap.gmail.com
|
||||||
|
User natedwarshuis@gmail.com
|
||||||
|
PassCmd "oauth-refresh natedwarshuis@gmail.com"
|
||||||
|
AuthMechs XOAUTH2
|
||||||
|
SSLType IMAPS
|
||||||
|
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||||
|
# CertificateFile ~/.local/etc/certs/imap.gmail.com.pem
|
||||||
|
# PipelineDepth 1
|
||||||
|
|
||||||
|
IMAPStore gmail-remote
|
||||||
|
Account gmail
|
||||||
|
|
||||||
|
MaildirStore gmail-local
|
||||||
|
Subfolders Verbatim
|
||||||
|
Path /mnt/data/Mail/gmail/
|
||||||
|
Inbox /mnt/data/Mail/gmail/inbox
|
||||||
|
|
||||||
|
Channel gmail-inbox
|
||||||
|
Master :gmail-remote:"INBOX"
|
||||||
|
Slave :gmail-local:"inbox"
|
||||||
|
Create Both
|
||||||
|
Expunge Master
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel gmail-all
|
||||||
|
Master :gmail-remote:"rxv"
|
||||||
|
Slave :gmail-local:"archive"
|
||||||
|
Create Both
|
||||||
|
Expunge Slave
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Group gmail
|
||||||
|
Channel gmail-inbox
|
||||||
|
Channel gmail-all
|
||||||
|
|
||||||
|
##
|
||||||
|
## gatech office365 server
|
||||||
|
##
|
||||||
|
|
||||||
|
## this is very similar to the gmail setup except that the sent
|
||||||
|
## folder must by synced as outlook does not group sent mail
|
||||||
|
## automagically in the inbox as gmail does (as a consequence of the
|
||||||
|
## "all mail" folder behavior?)
|
||||||
|
|
||||||
|
IMAPAccount gatech
|
||||||
|
Host outlook.office365.com
|
||||||
|
User ndwarshuis3@gatech.edu
|
||||||
|
PassCmd "oauth-refresh ndwarshuis3@gatech.edu"
|
||||||
|
AuthMechs XOAUTH2
|
||||||
|
SSLType IMAPS
|
||||||
|
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||||
|
PipelineDepth 1
|
||||||
|
|
||||||
|
IMAPStore gatech-remote
|
||||||
|
Account gatech
|
||||||
|
|
||||||
|
MailDirStore gatech-local
|
||||||
|
Path /mnt/data/Mail/gatech/
|
||||||
|
Inbox /mnt/data/Mail/gatech/inbox
|
||||||
|
|
||||||
|
Channel gatech-inbox
|
||||||
|
Master :gatech-remote:"Inbox"
|
||||||
|
Slave :gatech-local:"inbox"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel gatech-sent
|
||||||
|
Master :gatech-remote:"Sent Items"
|
||||||
|
Slave :gatech-local:"sent"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel gatech-archive
|
||||||
|
Master :gatech-remote:"Archive"
|
||||||
|
Slave :gatech-local:"archive"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Group gatech
|
||||||
|
Channel gatech-inbox
|
||||||
|
Channel gatech-sent
|
||||||
|
Channel gatech-archive
|
||||||
|
|
||||||
|
##
|
||||||
|
## emory office365 server
|
||||||
|
##
|
||||||
|
|
||||||
|
## identical to gatech server except different credentials
|
||||||
|
|
||||||
|
IMAPAccount emory
|
||||||
|
Host outlook.office365.com
|
||||||
|
User ndwarsh@emory.edu
|
||||||
|
PassCmd "pass email/ndwarsh@emory.edu/plain"
|
||||||
|
AuthMechs PLAIN
|
||||||
|
SSLType IMAPS
|
||||||
|
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||||
|
PipelineDepth 1
|
||||||
|
|
||||||
|
IMAPStore emory-remote
|
||||||
|
Account emory
|
||||||
|
|
||||||
|
MailDirStore emory-local
|
||||||
|
Path /mnt/data/Mail/emory/
|
||||||
|
Inbox /mnt/data/Mail/emory/inbox
|
||||||
|
|
||||||
|
Channel emory-inbox
|
||||||
|
Master :emory-remote:"Inbox"
|
||||||
|
Slave :emory-local:"inbox"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel emory-sent
|
||||||
|
Master :emory-remote:"Sent Items"
|
||||||
|
Slave :emory-local:"sent"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel emory-archive
|
||||||
|
Master :emory-remote:"Archive"
|
||||||
|
Slave :emory-local:"archive"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Group emory
|
||||||
|
Channel emory-inbox
|
||||||
|
Channel emory-sent
|
||||||
|
Channel emory-archive
|
||||||
|
|
||||||
|
##
|
||||||
|
## test email server
|
||||||
|
##
|
||||||
|
|
||||||
|
## to eventually be my primary email server
|
||||||
|
IMAPAccount yavin4
|
||||||
|
Host portnoy4prez.yavin4.ch
|
||||||
|
User ndwar@yavin4.ch
|
||||||
|
PassCmd "pass email/ndwar@yavin4.ch/plain"
|
||||||
|
AuthMechs PLAIN
|
||||||
|
SSLType IMAPS
|
||||||
|
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||||
|
PipelineDepth 1
|
||||||
|
|
||||||
|
IMAPStore yavin4-remote
|
||||||
|
Account yavin4
|
||||||
|
|
||||||
|
MailDirStore yavin4-local
|
||||||
|
Path /mnt/data/Mail/yavin4/
|
||||||
|
Inbox /mnt/data/Mail/yavin4/inbox
|
||||||
|
|
||||||
|
Channel yavin4-inbox
|
||||||
|
Master :yavin4-remote:"INBOX"
|
||||||
|
Slave :yavin4-local:"inbox"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel yavin4-sent
|
||||||
|
Master :yavin4-remote:"Sent"
|
||||||
|
Slave :yavin4-local:"sent"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Channel yavin4-archive
|
||||||
|
Master :yavin4-remote:"Archive"
|
||||||
|
Slave :yavin4-local:"archive"
|
||||||
|
Create Both
|
||||||
|
Expunge Both
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
Group yavin4
|
||||||
|
Channel yavin4-inbox
|
||||||
|
Channel yavin4-sent
|
||||||
|
Channel yavin4-archive
|
|
@ -0,0 +1,8 @@
|
||||||
|
[dmenu]
|
||||||
|
dmenu_command = rofi
|
||||||
|
wifi_chars = ▂▄▆█
|
||||||
|
list_saved = true
|
||||||
|
|
||||||
|
[editor]
|
||||||
|
terminal = urxvt
|
||||||
|
gui_if_available = True
|
|
@ -0,0 +1,227 @@
|
||||||
|
# Thank you code_nomad: http://9m.no/ꪯ鵞
|
||||||
|
# and Arch Wiki contributors: https://wiki.archlinux.org/index.php/Compton
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# Backend
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Backend to use: "xrender" or "glx".
|
||||||
|
# GLX backend is typically much faster but depends on a sane driver.
|
||||||
|
backend = "glx";
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# GLX backend
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
glx-no-stencil = true;
|
||||||
|
|
||||||
|
# GLX backend: Copy unmodified regions from front buffer instead of redrawing them all.
|
||||||
|
# My tests with nvidia-drivers show a 10% decrease in performance when the whole screen is modified,
|
||||||
|
# but a 20% increase when only 1/4 is.
|
||||||
|
# My tests on nouveau show terrible slowdown.
|
||||||
|
glx-copy-from-front = false;
|
||||||
|
|
||||||
|
# GLX backend: Use MESA_copy_sub_buffer to do partial screen update.
|
||||||
|
# My tests on nouveau shows a 200% performance boost when only 1/4 of the screen is updated.
|
||||||
|
# May break VSync and is not available on some drivers.
|
||||||
|
# Overrides --glx-copy-from-front.
|
||||||
|
# glx-use-copysubbuffermesa = true;
|
||||||
|
|
||||||
|
# GLX backend: Avoid rebinding pixmap on window damage.
|
||||||
|
# Probably could improve performance on rapid window content changes, but is known to break things on some drivers (LLVMpipe).
|
||||||
|
# Recommended if it works.
|
||||||
|
# glx-no-rebind-pixmap = true;
|
||||||
|
|
||||||
|
# GLX backend: GLX buffer swap method we assume.
|
||||||
|
# Could be undefined (0), copy (1), exchange (2), 3-6, or buffer-age (-1).
|
||||||
|
# undefined is the slowest and the safest, and the default value.
|
||||||
|
# copy is fastest, but may fail on some drivers,
|
||||||
|
# 2-6 are gradually slower but safer (6 is still faster than 0).
|
||||||
|
# Usually, double buffer means 2, triple buffer means 3.
|
||||||
|
# buffer-age means auto-detect using GLX_EXT_buffer_age, supported by some drivers.
|
||||||
|
# Useless with --glx-use-copysubbuffermesa.
|
||||||
|
# Partially breaks --resize-damage.
|
||||||
|
# Defaults to undefined.
|
||||||
|
#glx-swap-method = "undefined";
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# Shadows
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Enabled client-side shadows on windows.
|
||||||
|
shadow = false;
|
||||||
|
# The blur radius for shadows. (default 12)
|
||||||
|
shadow-radius = 5;
|
||||||
|
# The left offset for shadows. (default -15)
|
||||||
|
shadow-offset-x = -5;
|
||||||
|
# The top offset for shadows. (default -15)
|
||||||
|
shadow-offset-y = -5;
|
||||||
|
# The translucency for shadows. (default .75)
|
||||||
|
shadow-opacity = 0.5;
|
||||||
|
|
||||||
|
# Set if you want different colour shadows
|
||||||
|
# shadow-red = 0.0;
|
||||||
|
# shadow-green = 0.0;
|
||||||
|
# shadow-blue = 0.0;
|
||||||
|
|
||||||
|
# The shadow exclude options are helpful if you have shadows enabled. Due to the way picom draws its shadows, certain applications will have visual glitches
|
||||||
|
# (most applications are fine, only apps that do weird things with xshapes or argb are affected).
|
||||||
|
# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher.
|
||||||
|
shadow-exclude = [
|
||||||
|
"! name~=''",
|
||||||
|
"name = 'Notification'",
|
||||||
|
"name = 'Plank'",
|
||||||
|
"name = 'Docky'",
|
||||||
|
"name = 'Kupfer'",
|
||||||
|
"name = 'xfce4-notifyd'",
|
||||||
|
"name *= 'VLC'",
|
||||||
|
"name *= 'compton'",
|
||||||
|
"name *= 'picom'",
|
||||||
|
"name *= 'Chromium'",
|
||||||
|
"name *= 'Chrome'",
|
||||||
|
"class_g = 'Firefox' && argb",
|
||||||
|
"class_g = 'Conky'",
|
||||||
|
"class_g = 'Kupfer'",
|
||||||
|
"class_g = 'Synapse'",
|
||||||
|
"class_g ?= 'Notify-osd'",
|
||||||
|
"class_g ?= 'Cairo-dock'",
|
||||||
|
"class_g ?= 'Xfce4-notifyd'",
|
||||||
|
"class_g ?= 'Xfce4-power-manager'",
|
||||||
|
"_GTK_FRAME_EXTENTS@:c",
|
||||||
|
"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
|
||||||
|
];
|
||||||
|
# Avoid drawing shadow on all shaped windows (see also: --detect-rounded-corners)
|
||||||
|
shadow-ignore-shaped = false;
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# Opacity
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
inactive-opacity = 1;
|
||||||
|
active-opacity = 1;
|
||||||
|
frame-opacity = 1;
|
||||||
|
inactive-opacity-override = false;
|
||||||
|
|
||||||
|
# Dim inactive windows. (0.0 - 1.0)
|
||||||
|
# inactive-dim = 0.2;
|
||||||
|
# Do not let dimness adjust based on window opacity.
|
||||||
|
# inactive-dim-fixed = true;
|
||||||
|
# Blur background of transparent windows. Bad performance with X Render backend. GLX backend is preferred.
|
||||||
|
# blur-background = true;
|
||||||
|
# Blur background of opaque windows with transparent frames as well.
|
||||||
|
# blur-background-frame = true;
|
||||||
|
# Do not let blur radius adjust based on window opacity.
|
||||||
|
blur-background-fixed = false;
|
||||||
|
blur-background-exclude = [
|
||||||
|
"window_type = 'dock'",
|
||||||
|
"window_type = 'desktop'"
|
||||||
|
];
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# Fading
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Fade windows during opacity changes.
|
||||||
|
fading = false;
|
||||||
|
# The time between steps in a fade in milliseconds. (default 10).
|
||||||
|
fade-delta = 4;
|
||||||
|
# Opacity change between steps while fading in. (default 0.028).
|
||||||
|
fade-in-step = 0.03;
|
||||||
|
# Opacity change between steps while fading out. (default 0.03).
|
||||||
|
fade-out-step = 0.03;
|
||||||
|
# Fade windows in/out when opening/closing
|
||||||
|
# no-fading-openclose = true;
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should not be faded.
|
||||||
|
fade-exclude = [ ];
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# Other
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Try to detect WM windows and mark them as active.
|
||||||
|
mark-wmwin-focused = true;
|
||||||
|
# Mark all non-WM but override-redirect windows active (e.g. menus).
|
||||||
|
mark-ovredir-focused = true;
|
||||||
|
# Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused instead of using FocusIn/Out events.
|
||||||
|
# Usually more reliable but depends on a EWMH-compliant WM.
|
||||||
|
use-ewmh-active-win = true;
|
||||||
|
# Detect rounded corners and treat them as rectangular when --shadow-ignore-shaped is on.
|
||||||
|
detect-rounded-corners = true;
|
||||||
|
|
||||||
|
# Detect _NET_WM_OPACITY on client windows, useful for window managers not passing _NET_WM_OPACITY of client windows to frame windows.
|
||||||
|
# This prevents opacity being ignored for some apps.
|
||||||
|
# For example without this enabled my xfce4-notifyd is 100% opacity no matter what.
|
||||||
|
detect-client-opacity = true;
|
||||||
|
|
||||||
|
# Specify refresh rate of the screen.
|
||||||
|
# If not specified or 0, picom will try detecting this with X RandR extension.
|
||||||
|
refresh-rate = 0;
|
||||||
|
|
||||||
|
# Vertical synchronization: match the refresh rate of the monitor
|
||||||
|
vsync = true;
|
||||||
|
|
||||||
|
# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing.
|
||||||
|
# Reported to have no effect, though.
|
||||||
|
dbe = false;
|
||||||
|
|
||||||
|
# Limit picom to repaint at most once every 1 / refresh_rate second to boost performance.
|
||||||
|
# This should not be used with --vsync drm/opengl/opengl-oml as they essentially does --sw-opti's job already,
|
||||||
|
# unless you wish to specify a lower refresh rate than the actual value.
|
||||||
|
#sw-opti = true;
|
||||||
|
|
||||||
|
# Unredirect all windows if a full-screen opaque window is detected, to maximize performance for full-screen windows, like games.
|
||||||
|
# Known to cause flickering when redirecting/unredirecting windows.
|
||||||
|
unredir-if-possible = false;
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should always be considered focused.
|
||||||
|
focus-exclude = [ ];
|
||||||
|
|
||||||
|
# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused at the same time.
|
||||||
|
detect-transient = true;
|
||||||
|
# Use WM_CLIENT_LEADER to group windows, and consider windows in the same group focused at the same time.
|
||||||
|
# WM_TRANSIENT_FOR has higher priority if --detect-transient is enabled, too.
|
||||||
|
detect-client-leader = true;
|
||||||
|
|
||||||
|
#################################
|
||||||
|
#
|
||||||
|
# Window type settings
|
||||||
|
#
|
||||||
|
#################################
|
||||||
|
|
||||||
|
wintypes:
|
||||||
|
{
|
||||||
|
tooltip =
|
||||||
|
{
|
||||||
|
# fade: Fade the particular type of windows.
|
||||||
|
fade = true;
|
||||||
|
# shadow: Give those windows shadow
|
||||||
|
shadow = false;
|
||||||
|
# opacity: Default opacity for the type of windows.
|
||||||
|
opacity = 0.85;
|
||||||
|
# focus: Whether to always consider windows of this type focused.
|
||||||
|
focus = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
######################
|
||||||
|
#
|
||||||
|
# XSync
|
||||||
|
# See: https://github.com/yshui/picom/commit/b18d46bcbdc35a3b5620d817dd46fbc76485c20d
|
||||||
|
#
|
||||||
|
######################
|
||||||
|
|
||||||
|
# Use X Sync fence to sync clients' draw calls. Needed on nvidia-drivers with GLX backend for some users.
|
||||||
|
xrender-sync-fence = true;
|
|
@ -0,0 +1,70 @@
|
||||||
|
#
|
||||||
|
# $HOME/.psd/psd.conf
|
||||||
|
#
|
||||||
|
# For documentation, refer to the psd man page or the wiki page
|
||||||
|
# https://wiki.archlinux.org/index.php/Profile-sync-daemon
|
||||||
|
|
||||||
|
## NOTE the following:
|
||||||
|
## To protect data from corruption, in the event that you do make an edit while
|
||||||
|
## psd is active, any changes made will be applied the next time you start psd.
|
||||||
|
|
||||||
|
# Uncomment and set to "yes" to use overlayfs instead of a full copy to reduce
|
||||||
|
# the memory costs and to improve sync/unsync operations.
|
||||||
|
#
|
||||||
|
# You must modprobe either the 'overlayfs' or 'overlay' module prior to running
|
||||||
|
# psd if you enable this option. Distros running the linux kernel version
|
||||||
|
# >=3.18.0 are likely using the 'overlay' module while some distros shipping
|
||||||
|
# older kernels, notably Ubuntu provide the older version of this module named
|
||||||
|
# 'overlay' not 'overlayfs'.
|
||||||
|
USE_OVERLAYFS="yes"
|
||||||
|
|
||||||
|
# List browsers separated by spaces to include in the sync. Useful if you do not
|
||||||
|
# wish to have all possible browser profiles sync'ed which is the default if
|
||||||
|
# this variable is left commented.
|
||||||
|
#
|
||||||
|
# Possible values:
|
||||||
|
# chromium
|
||||||
|
# chromium-dev
|
||||||
|
# conkeror.mozdev.org
|
||||||
|
# epiphany
|
||||||
|
# firefox
|
||||||
|
# firefox-trunk
|
||||||
|
# google-chrome
|
||||||
|
# google-chrome-beta
|
||||||
|
# google-chrome-unstable
|
||||||
|
# heftig-aurora
|
||||||
|
# icecat
|
||||||
|
# inox
|
||||||
|
# luakit
|
||||||
|
# midori
|
||||||
|
# opera
|
||||||
|
# opera-beta
|
||||||
|
# opera-developer
|
||||||
|
# opera-legacy
|
||||||
|
# otter-browser
|
||||||
|
# qupzilla
|
||||||
|
# palemoon
|
||||||
|
# rekonq
|
||||||
|
# seamonkey
|
||||||
|
# vivaldi
|
||||||
|
# vivaldi-snapshot
|
||||||
|
#
|
||||||
|
BROWSERS="chromium"
|
||||||
|
|
||||||
|
# Define where browser profiles will reside in tmpfs
|
||||||
|
# This location must be mounted to tmpfs and MUST have permissions of 777
|
||||||
|
# Use NO trailing backslash!
|
||||||
|
#
|
||||||
|
# Suggested locations based on distro defaults:
|
||||||
|
# Arch Linux/Chakra, Fedora, and Gentoo leave this commented out
|
||||||
|
# Debian 8+ use a setting of "/dev/shm"
|
||||||
|
# Ubuntu 15.05+ use "/dev/shm"
|
||||||
|
#VOLATILE="/tmp"
|
||||||
|
|
||||||
|
# Uncomment and set to "no" to completely disable the crash recovery feature.
|
||||||
|
#
|
||||||
|
# The default is to create crash recovery backups if the system is ungracefully
|
||||||
|
# powered-down due to a kernel panic, hitting the reset switch, battery going
|
||||||
|
# dead, etc. Some users keep very diligent backups and don't care to have this
|
||||||
|
# feature enabled.
|
||||||
|
#USE_BACKUPS="yes"
|
|
@ -0,0 +1,16 @@
|
||||||
|
#! /bin/python
|
||||||
|
|
||||||
|
import atexit
|
||||||
|
import os
|
||||||
|
import readline
|
||||||
|
|
||||||
|
datadir = os.environ["XDG_DATA_HOME"]
|
||||||
|
histfile = os.path.join(datadir, "python", "history.log")
|
||||||
|
try:
|
||||||
|
readline.read_history_file(histfile)
|
||||||
|
# default history len is -1 (infinite), which may grow unruly
|
||||||
|
readline.set_history_length(1000)
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
atexit.register(readline.write_history_file, histfile)
|
|
@ -0,0 +1,15 @@
|
||||||
|
MAKEFLAGS=-j4
|
||||||
|
|
||||||
|
## C options
|
||||||
|
CFLAGS=-O3 -Wall -pedantic -march=native -mtune=native -pipe
|
||||||
|
CXXFLAGS=-O3 -Wall -pedantic -march=native -mtune=native -pipe
|
||||||
|
|
||||||
|
## ccache options
|
||||||
|
VER=
|
||||||
|
CCACHE=ccache
|
||||||
|
CC=$(CCACHE) gcc$(VER)
|
||||||
|
CXX=$(CCACHE) g++$(VER)
|
||||||
|
CXX11=$(CCACHE) g++$(VER)
|
||||||
|
CXX14=$(CCACHE) g++$(VER)
|
||||||
|
FC=$(CCACHE) gfortran$(VER)
|
||||||
|
F77=$(CCACHE) gfortran$(VER)
|
|
@ -0,0 +1,6 @@
|
||||||
|
R_HOME_USER = ${XDG_DATA_HOME}/r
|
||||||
|
R_PROFILE_USER = ${XDG_CONFIG_HOME}/r/Rprofile.r
|
||||||
|
R_MAKEVARS_USER = ${XDG_CONFIG_HOME}/r/Makevars
|
||||||
|
R_LIBS_USER = ${R_HOME_USER}/x86_64-pc-linux-gnu-library/
|
||||||
|
# this shouldn't be needed because ESS overrides it
|
||||||
|
R_HISTFILE = ${XDG_HOME_USER}/session.Rhistory
|
|
@ -0,0 +1,10 @@
|
||||||
|
.First <- function() {
|
||||||
|
## message("R is the best\n","working directory is:", getwd())
|
||||||
|
}
|
||||||
|
|
||||||
|
## Set CRAN mirror:
|
||||||
|
local({
|
||||||
|
r <- getOption("repos")
|
||||||
|
r["CRAN"] <- "https://cloud.r-project.org/"
|
||||||
|
options(repos = r, Ncpus = 8)
|
||||||
|
})
|
|
@ -0,0 +1,70 @@
|
||||||
|
; Global settings for redshift
|
||||||
|
[redshift]
|
||||||
|
; Set the day and night screen temperatures
|
||||||
|
temp-day=6500
|
||||||
|
temp-night=2500
|
||||||
|
|
||||||
|
; Disable the smooth fade between temperatures when Redshift starts and stops.
|
||||||
|
; 0 will cause an immediate change between screen temperatures.
|
||||||
|
; 1 will gradually apply the new screen temperature over a couple of seconds.
|
||||||
|
fade=1
|
||||||
|
|
||||||
|
; Solar elevation thresholds.
|
||||||
|
; By default, Redshift will use the current elevation of the sun to determine
|
||||||
|
; whether it is daytime, night or in transition (dawn/dusk). When the sun is
|
||||||
|
; above the degrees specified with elevation-high it is considered daytime and
|
||||||
|
; below elevation-low it is considered night.
|
||||||
|
;elevation-high=3
|
||||||
|
;elevation-low=-6
|
||||||
|
|
||||||
|
; Custom dawn/dusk intervals.
|
||||||
|
; Instead of using the solar elevation, the time intervals of dawn and dusk
|
||||||
|
; can be specified manually. The times must be specified as HH:MM in 24-hour
|
||||||
|
; format.
|
||||||
|
;dawn-time=6:00-7:45
|
||||||
|
;dusk-time=18:35-20:15
|
||||||
|
|
||||||
|
; Set the screen brightness. Default is 1.0.
|
||||||
|
;brightness=0.9
|
||||||
|
; It is also possible to use different settings for day and night
|
||||||
|
; since version 1.8.
|
||||||
|
;brightness-day=0.7
|
||||||
|
;brightness-night=0.4
|
||||||
|
; Set the screen gamma (for all colors, or each color channel
|
||||||
|
; individually)
|
||||||
|
;gamma=0.8
|
||||||
|
;gamma=0.8:0.7:0.8
|
||||||
|
; This can also be set individually for day and night since
|
||||||
|
; version 1.10.
|
||||||
|
;gamma-day=0.8:0.7:0.8
|
||||||
|
;gamma-night=0.6
|
||||||
|
|
||||||
|
; Set the location-provider: 'geoclue2', 'manual'
|
||||||
|
; type 'redshift -l list' to see possible values.
|
||||||
|
; The location provider settings are in a different section.
|
||||||
|
location-provider=manual
|
||||||
|
|
||||||
|
; Set the adjustment-method: 'randr', 'vidmode'
|
||||||
|
; type 'redshift -m list' to see all possible values.
|
||||||
|
; 'randr' is the preferred method, 'vidmode' is an older API.
|
||||||
|
; but works in some cases when 'randr' does not.
|
||||||
|
; The adjustment method settings are in a different section.
|
||||||
|
adjustment-method=randr
|
||||||
|
|
||||||
|
; Configuration of the location-provider:
|
||||||
|
; type 'redshift -l PROVIDER:help' to see the settings.
|
||||||
|
; ex: 'redshift -l manual:help'
|
||||||
|
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
|
||||||
|
; are negative numbers.
|
||||||
|
[manual]
|
||||||
|
lat=33.7
|
||||||
|
lon=-84.4
|
||||||
|
|
||||||
|
; Configuration of the adjustment-method
|
||||||
|
; type 'redshift -m METHOD:help' to see the settings.
|
||||||
|
; ex: 'redshift -m randr:help'
|
||||||
|
; In this example, randr is configured to adjust only screen 0.
|
||||||
|
; Note that the numbering starts from 0, so this is actually the first screen.
|
||||||
|
; If this option is not specified, Redshift will try to adjust _all_ screens.
|
||||||
|
[randr]
|
||||||
|
screen=0
|
|
@ -0,0 +1,153 @@
|
||||||
|
/************************************************
|
||||||
|
* ROFI Color theme
|
||||||
|
* User: portnoy4prez
|
||||||
|
* Copyright: ...
|
||||||
|
***********************************************/
|
||||||
|
|
||||||
|
* {
|
||||||
|
spacing: 2;
|
||||||
|
foreground: white;
|
||||||
|
background: black / 70%;
|
||||||
|
|
||||||
|
normal-foreground: @foreground;
|
||||||
|
active-foreground: @foreground;
|
||||||
|
urgent-foreground: @foreground;
|
||||||
|
normal-background: transparent;
|
||||||
|
urgent-background: transparent;
|
||||||
|
active-background: #cb91ff66;
|
||||||
|
|
||||||
|
alternate-normal-foreground: @foreground;
|
||||||
|
alternate-urgent-foreground: @urgent-foreground;
|
||||||
|
alternate-active-foreground: @active-foreground;
|
||||||
|
alternate-normal-background: white / 8%;
|
||||||
|
alternate-urgent-background: red / 8%;
|
||||||
|
alternate-active-background: purple / 8%;
|
||||||
|
|
||||||
|
selected-normal-foreground: @foreground;
|
||||||
|
selected-urgent-foreground: @foreground;
|
||||||
|
selected-active-foreground: @foreground;
|
||||||
|
selected-normal-background: #3399ff;
|
||||||
|
selected-urgent-background: #ff8282;
|
||||||
|
selected-active-background: #9523ff;
|
||||||
|
|
||||||
|
red: rgba ( 220, 50, 47, 100 % );
|
||||||
|
blue: rgba ( 51, 139, 210, 100 % );
|
||||||
|
|
||||||
|
lightbg: rgba ( 238, 232, 213, 100 % );
|
||||||
|
lightfg: rgba ( 88, 104, 117, 100 % );
|
||||||
|
|
||||||
|
border-color: #777;
|
||||||
|
separatorcolor: white;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
#window {
|
||||||
|
background-color: black / 70%;
|
||||||
|
fullscreen: true;
|
||||||
|
padding: 30%;
|
||||||
|
}
|
||||||
|
#mainbox {
|
||||||
|
border: 1;
|
||||||
|
padding: 6;
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
#message {
|
||||||
|
border: 2px 0px 0px;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
padding: 5px 1px 3px 1px;
|
||||||
|
}
|
||||||
|
#textbox {
|
||||||
|
text-color: @foreground;
|
||||||
|
}
|
||||||
|
#listview {
|
||||||
|
fixed-height: 0;
|
||||||
|
border: 2px dash 0px 0px;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
spacing: 2px;
|
||||||
|
scrollbar: true;
|
||||||
|
padding: 2px 0px 0px;
|
||||||
|
}
|
||||||
|
#element {
|
||||||
|
border: 0;
|
||||||
|
padding: 1px ;
|
||||||
|
}
|
||||||
|
#element.normal.normal {
|
||||||
|
background-color: @normal-background;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
#element.normal.urgent {
|
||||||
|
background-color: @urgent-background;
|
||||||
|
text-color: @urgent-foreground;
|
||||||
|
}
|
||||||
|
#element.normal.active {
|
||||||
|
background-color: @active-background;
|
||||||
|
text-color: @active-foreground;
|
||||||
|
}
|
||||||
|
#element.selected.normal {
|
||||||
|
background-color: @selected-normal-background;
|
||||||
|
text-color: @selected-normal-foreground;
|
||||||
|
}
|
||||||
|
#element.selected.urgent {
|
||||||
|
background-color: @selected-urgent-background;
|
||||||
|
text-color: @selected-urgent-foreground;
|
||||||
|
}
|
||||||
|
#element.selected.active {
|
||||||
|
background-color: @selected-active-background;
|
||||||
|
text-color: @selected-active-foreground;
|
||||||
|
}
|
||||||
|
#element.alternate.normal {
|
||||||
|
background-color: @alternate-normal-background;
|
||||||
|
text-color: @alternate-normal-foreground;
|
||||||
|
}
|
||||||
|
#element.alternate.urgent {
|
||||||
|
background-color: @alternate-urgent-background;
|
||||||
|
text-color: @alternate-urgent-foreground;
|
||||||
|
}
|
||||||
|
#element.alternate.active {
|
||||||
|
background-color: @alternate-active-background;
|
||||||
|
text-color: @alternate-active-foreground;
|
||||||
|
}
|
||||||
|
#scrollbar {
|
||||||
|
width: 4px ;
|
||||||
|
border: 0;
|
||||||
|
handle-color: @normal-foreground;
|
||||||
|
handle-width: 8px ;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#sidebar {
|
||||||
|
border: 2px 0px 0px ;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
}
|
||||||
|
#button {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
#button.selected {
|
||||||
|
background-color: @selected-normal-background;
|
||||||
|
text-color: @selected-normal-foreground;
|
||||||
|
}
|
||||||
|
#inputbar {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
#case-indicator {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
#entry {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
#prompt {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
#inputbar {
|
||||||
|
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||||
|
}
|
||||||
|
#textbox-prompt-colon {
|
||||||
|
expand: false;
|
||||||
|
str: ":";
|
||||||
|
margin: 0px 0.3em 0em 0em ;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
configuration {
|
||||||
|
modi: "window,run,drun";
|
||||||
|
/* width: 50;*/
|
||||||
|
/* lines: 15;*/
|
||||||
|
/* columns: 1;*/
|
||||||
|
font: "DejaVu Sans Mono 12";
|
||||||
|
/* bw: 1;*/
|
||||||
|
/* location: 0;*/
|
||||||
|
/* padding: 5;*/
|
||||||
|
/* yoffset: 0;*/
|
||||||
|
/* xoffset: 0;*/
|
||||||
|
/* fixed-num-lines: true;*/
|
||||||
|
/* show-icons: false;*/
|
||||||
|
/* terminal: "rofi-sensible-terminal";*/
|
||||||
|
/* ssh-client: "ssh";*/
|
||||||
|
/* ssh-command: "{terminal} -e {ssh-client} {host}";*/
|
||||||
|
/* run-command: "{cmd}";*/
|
||||||
|
/* run-list-command: "";*/
|
||||||
|
/* run-shell-command: "{terminal} -e {cmd}";*/
|
||||||
|
/* window-command: "xkill -id {window}";*/
|
||||||
|
/* window-match-fields: "all";*/
|
||||||
|
/* drun-icon-theme: ;*/
|
||||||
|
/* drun-match-fields: "name,generic,exec,categories";*/
|
||||||
|
/* disable-history: false;*/
|
||||||
|
/* sort: false;*/
|
||||||
|
/* levenshtein-sort: false;*/
|
||||||
|
/* case-sensitive: false;*/
|
||||||
|
/* cycle: true;*/
|
||||||
|
/* sidebar-mode: false;*/
|
||||||
|
/* eh: 1;*/
|
||||||
|
/* auto-select: false;*/
|
||||||
|
/* parse-hosts: false;*/
|
||||||
|
/* parse-known-hosts: true;*/
|
||||||
|
/* combi-modi: "window,run";*/
|
||||||
|
/* matching: "normal";*/
|
||||||
|
/* tokenize: true;*/
|
||||||
|
/* m: "-5";*/
|
||||||
|
/* line-margin: 2;*/
|
||||||
|
/* line-padding: 1;*/
|
||||||
|
/* filter: ;*/
|
||||||
|
/* separator-style: "dash";*/
|
||||||
|
/* hide-scrollbar: false;*/
|
||||||
|
/* fullscreen: false;*/
|
||||||
|
/* fake-transparency: false;*/
|
||||||
|
/* dpi: -1;*/
|
||||||
|
/* threads: 0;*/
|
||||||
|
/* scrollbar-width: 8;*/
|
||||||
|
/* scroll-method: 0;*/
|
||||||
|
/* fake-background: "screenshot";*/
|
||||||
|
/* window-format: "{w} {i}{c} {t}";*/
|
||||||
|
/* click-to-exit: true;*/
|
||||||
|
/* show-match: true;*/
|
||||||
|
theme: "blackice";
|
||||||
|
/* color-normal: ;*/
|
||||||
|
/* color-urgent: ;*/
|
||||||
|
/* color-active: ;*/
|
||||||
|
/* color-window: ;*/
|
||||||
|
/* max-history-size: 25;*/
|
||||||
|
/* combi-hide-mode-prefix: false;*/
|
||||||
|
/* pid: "/run/user/1000/rofi.pid";*/
|
||||||
|
/* display-window: ;*/
|
||||||
|
/* display-windowcd: ;*/
|
||||||
|
/* display-run: ;*/
|
||||||
|
/* display-ssh: ;*/
|
||||||
|
/* display-drun: ;*/
|
||||||
|
/* display-combi: ;*/
|
||||||
|
/* display-keys: ;*/
|
||||||
|
/* kb-primary-paste: "Control+V,Shift+Insert";*/
|
||||||
|
/* kb-secondary-paste: "Control+v,Insert";*/
|
||||||
|
/* kb-clear-line: "Control+w";*/
|
||||||
|
/* kb-move-front: "Control+a";*/
|
||||||
|
/* kb-move-end: "Control+e";*/
|
||||||
|
/* kb-move-word-back: "Alt+b";*/
|
||||||
|
/* kb-move-word-forward: "Alt+f";*/
|
||||||
|
/* kb-move-char-back: "Left,Control+b";*/
|
||||||
|
/* kb-move-char-forward: "Right,Control+f";*/
|
||||||
|
/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
|
||||||
|
/* kb-remove-word-forward: "Control+Alt+d";*/
|
||||||
|
/* kb-remove-char-forward: "Delete,Control+d";*/
|
||||||
|
/* kb-remove-char-back: "BackSpace,Control+h";*/
|
||||||
|
/* kb-remove-to-eol: "Control+k";*/
|
||||||
|
/* kb-remove-to-sol: "Control+u";*/
|
||||||
|
/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
|
||||||
|
/* kb-accept-custom: "Control+Return";*/
|
||||||
|
/* kb-accept-alt: "Shift+Return";*/
|
||||||
|
/* kb-delete-entry: "Shift+Delete";*/
|
||||||
|
/* kb-mode-next: "Shift+Right,Control+Tab";*/
|
||||||
|
/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
|
||||||
|
/* kb-row-left: "Control+Page_Up";*/
|
||||||
|
/* kb-row-right: "Control+Page_Down";*/
|
||||||
|
/* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/
|
||||||
|
/* kb-row-down: "Down,Control+n";*/
|
||||||
|
/* kb-row-tab: "Tab";*/
|
||||||
|
/* kb-page-prev: "Page_Up";*/
|
||||||
|
/* kb-page-next: "Page_Down";*/
|
||||||
|
/* kb-row-first: "Home,KP_Home";*/
|
||||||
|
/* kb-row-last: "End,KP_End";*/
|
||||||
|
/* kb-row-select: "Control+space";*/
|
||||||
|
/* kb-screenshot: "Alt+S";*/
|
||||||
|
/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
|
||||||
|
/* kb-toggle-sort: "Alt+grave";*/
|
||||||
|
kb-cancel: "Escape,XF86Search,Control+g,Control+bracketleft";
|
||||||
|
/* kb-custom-1: "Alt+1";*/
|
||||||
|
/* kb-custom-2: "Alt+2";*/
|
||||||
|
/* kb-custom-3: "Alt+3";*/
|
||||||
|
/* kb-custom-4: "Alt+4";*/
|
||||||
|
/* kb-custom-5: "Alt+5";*/
|
||||||
|
/* kb-custom-6: "Alt+6";*/
|
||||||
|
/* kb-custom-7: "Alt+7";*/
|
||||||
|
/* kb-custom-8: "Alt+8";*/
|
||||||
|
/* kb-custom-9: "Alt+9";*/
|
||||||
|
/* kb-custom-10: "Alt+0";*/
|
||||||
|
/* kb-custom-11: "Alt+exclam";*/
|
||||||
|
/* kb-custom-12: "Alt+at";*/
|
||||||
|
/* kb-custom-13: "Alt+numbersign";*/
|
||||||
|
/* kb-custom-14: "Alt+dollar";*/
|
||||||
|
/* kb-custom-15: "Alt+percent";*/
|
||||||
|
/* kb-custom-16: "Alt+dead_circumflex";*/
|
||||||
|
/* kb-custom-17: "Alt+ampersand";*/
|
||||||
|
/* kb-custom-18: "Alt+asterisk";*/
|
||||||
|
/* kb-custom-19: "Alt+parenleft";*/
|
||||||
|
/* kb-select-1: "Super+1";*/
|
||||||
|
/* kb-select-2: "Super+2";*/
|
||||||
|
/* kb-select-3: "Super+3";*/
|
||||||
|
/* kb-select-4: "Super+4";*/
|
||||||
|
/* kb-select-5: "Super+5";*/
|
||||||
|
/* kb-select-6: "Super+6";*/
|
||||||
|
/* kb-select-7: "Super+7";*/
|
||||||
|
/* kb-select-8: "Super+8";*/
|
||||||
|
/* kb-select-9: "Super+9";*/
|
||||||
|
/* kb-select-10: "Super+0";*/
|
||||||
|
/* ml-row-left: "ScrollLeft";*/
|
||||||
|
/* ml-row-right: "ScrollRight";*/
|
||||||
|
/* ml-row-up: "ScrollUp";*/
|
||||||
|
/* ml-row-down: "ScrollDown";*/
|
||||||
|
/* me-select-entry: "MousePrimary";*/
|
||||||
|
/* me-accept-entry: "MouseDPrimary";*/
|
||||||
|
/* me-accept-custom: "Control+MouseDPrimary";*/
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Sync git repos
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=%h/.bin/autogit "$REPOS"
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Service]
|
||||||
|
Environment="REPOS=\"~/Org ~/Org/journal\""
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Run auto every hour
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
Persistent=true
|
||||||
|
OnCalendar=hourly
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Batmon service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=%h/.local/bin/batmon
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Run batmon every minute
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnBootSec=0min
|
||||||
|
Persistent=true
|
||||||
|
OnCalendar=*:0/1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Conky Pacman Stats Update Service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=%h/.config/conky/scripts/pacman_stats
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Conky Pacman Stats Update Timer
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnBootSec=0s
|
||||||
|
OnUnitActiveSec=1m
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue