Initial commit of nixos config
This commit is contained in:
parent
f067c9cd37
commit
ed36644143
Binary file not shown.
Before Width: | Height: | Size: 584 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 551 KiB |
Binary file not shown.
Before Width: | Height: | Size: 25 KiB |
Binary file not shown.
Before Width: | Height: | Size: 805 KiB |
|
@ -1,5 +0,0 @@
|
|||
! Exchange Alt and Win
|
||||
clear Mod1
|
||||
clear Mod4
|
||||
add Mod4 = Alt_L Alt_R
|
||||
add Mod1 = Super_L Super_R
|
|
@ -1,111 +0,0 @@
|
|||
!! OCT-2017
|
||||
|
||||
!! Colors
|
||||
#define blk #141517
|
||||
#define bblk #969896
|
||||
#define red #cc6666
|
||||
#define bred #de935f
|
||||
#define grn #b5bd68
|
||||
#define bgrn #757d28
|
||||
#define ylw #f0c674
|
||||
#define bylw #f9a03f
|
||||
#define blu #81a2be
|
||||
#define bblu #2a8fed
|
||||
#define mag #b294bb
|
||||
#define bmag #bc77a8
|
||||
#define cyn #8abeb7
|
||||
#define bcyn #a3685a
|
||||
#define wht #c5c8c6
|
||||
#define bwht #ffffff
|
||||
#define bg blk
|
||||
#define fg wht
|
||||
|
||||
*.foreground: fg
|
||||
*.background: bg
|
||||
*.cursorColor: mag
|
||||
|
||||
*.color0: blk
|
||||
*.color8: bblk
|
||||
*.color1: red
|
||||
*.color9: bred
|
||||
*.color2: grn
|
||||
*.color10: bgrn
|
||||
*.color3: ylw
|
||||
*.color11: bylw
|
||||
*.color4: blu
|
||||
*.color12: bblu
|
||||
*.color5: mag
|
||||
*.color13: bmag
|
||||
*.color6: cyn
|
||||
*.color14: bcyn
|
||||
*.color7: wht
|
||||
*.color15: bwht
|
||||
|
||||
! greys
|
||||
*.color234: #1d2021
|
||||
*.color235: #282828
|
||||
*.color236: #32302f
|
||||
*.color237: #3c3836
|
||||
*.color239: #504945
|
||||
*.color240: #544c49
|
||||
*.color241: #665c54
|
||||
|
||||
|
||||
!! Settings
|
||||
! font rendering
|
||||
!Xft.hinting: 0
|
||||
!Xft.antialias: 1
|
||||
!Xft.autohint: 1
|
||||
Xft.hintstyle: hintslight
|
||||
Xft.lcdfilter: lcddefault
|
||||
Xft.rgba: rgb
|
||||
|
||||
! cursor
|
||||
Xcursor.theme: default
|
||||
Xcursor.size: 32
|
||||
|
||||
! emacs
|
||||
Emacs.toolBar: 0
|
||||
Emacs.menuBar: 0
|
||||
Emacs.verticalScrollBars: off
|
||||
|
||||
! urxvt
|
||||
URxvt*.background: [96]blk
|
||||
URxvt*.termName: xterm-256color
|
||||
URxvt*.geometry: 81x20
|
||||
URxvt*.buffered: true
|
||||
URxvt*.cursorBlink: true
|
||||
URxvt*.underlineColor: grey
|
||||
URxvt*.depth: 32
|
||||
URxvt*.borderless: 1
|
||||
! URxvt*.lineSpace: 1
|
||||
! URxvt*.letterSpace: 0
|
||||
URxvt.iso14755: false
|
||||
URxvt.iso14755_52: false
|
||||
URxvt*.internalBorder: 14
|
||||
URxvt*.scrollBar: false
|
||||
URxvt*.saveLines: 5000
|
||||
URxvt*.loginShell: false
|
||||
URxvt.perl-ext-common: default,matcher
|
||||
URxvt*.matcher.button: 1
|
||||
URxvt*.matcher.rend.0: Uline Bold fg5
|
||||
URxvt*.url-launcher: firefox
|
||||
!URxvt.keysym.Shift-Control-C: perl:clipboard:copy
|
||||
!URxvt.keysym.Shift-Control-V: perl:clipboard:paste
|
||||
URxvt.clipboard.autocopy: true
|
||||
|
||||
! URxvt*.font: xft:kakwa kakwafont:pixelsize=12
|
||||
! urxvt-scratch.font: xft:Misc Tamsyn:pixelsize=16
|
||||
! urxvt-fuzzy.font: xft:Misc Tamsyn:pixelsize=18
|
||||
! urxvt-fuzzy.boldFont: xft:Misc Tamsyn:pixelsize=18
|
||||
! urxvt-fuzzy.lineSpace: 4
|
||||
|
||||
urxvt-stream.lineSpace: 0
|
||||
urxvt-stream.letterSpace: -1
|
||||
urxvt-stream.font: xft:Fira Mono:pixelsize=17
|
||||
|
||||
URxvt*.lineSpace: 0
|
||||
URxvt*.letterSpace: -1
|
||||
URxvt*.font: xft:Fira Mono:pixelsize=11
|
||||
urxvt-scratch.font: xft:Fira Mono:pixelsize=16
|
||||
urxvt-fuzzy.font: xft:Fira Mono:pixelsize=20
|
|
@ -1,63 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
source ${0:A:h}/../../deploy
|
||||
|
||||
install() {
|
||||
if ! nc -z 8.8.8.8 53 >/dev/null 2>&1; then
|
||||
>&2 echo "No internet connection"
|
||||
return 1
|
||||
elif ! sudo pacman -Syu --noconfirm; then
|
||||
>&2 echo "Could not update pacman"
|
||||
return 2
|
||||
elif ! _is_callable yay; then
|
||||
>&2 echo "Could not find pacaur"
|
||||
return 3
|
||||
fi
|
||||
|
||||
yay --needed --noconfirm -S \
|
||||
xorg-server xorg-xrandr xorg-xinit xorg-xlsfonts xorg-xfd xdotool \
|
||||
lightdm lightdm-mini-greeter \
|
||||
bspwm sxhkd compton dunst xcb-proto polybar libnotify \
|
||||
rvxt-unicode rvxt-unicode-terminfo \
|
||||
slop feh maim ffmpeg zbar \
|
||||
keybase-bin pass pass-otp \
|
||||
neofetch glances inxi dfc youtube-dl \
|
||||
ttf-fira-{mono,sans} ttf-font-awesome tamsyn-font siji-git \
|
||||
arc-gtk-theme qt5-styleplugins \
|
||||
evince
|
||||
|
||||
xdg-mime default evince.desktop application/pdf
|
||||
|
||||
# install crontab
|
||||
crontab ./crontab
|
||||
|
||||
# raise inotify limit
|
||||
sudo tee -a /etc/sysctl.d/99-sysctl.conf <<<"fs.inotify.max_user_watches=524288"
|
||||
|
||||
# set up lightdm + minigreeter
|
||||
sudo systemctl enable lightdm
|
||||
sudo sed -i \
|
||||
-e "s@^#?\(greeter-session=\).+@\1lightdm-mini-greeter@" \
|
||||
-e "s@^#?\(user-session=\).+@\1bspwm@" \
|
||||
/etc/lightdm/lightdm.conf
|
||||
sudo sed -i \
|
||||
-e "s@^\(user = \).+@\1${USER}@" \
|
||||
-e "s@^\(show-password-label = \).+@\1false@" \
|
||||
-e "s@^\(background-color = \).+@\1\"#000000\"@;" \
|
||||
/etc/lightdm/lightdm-mini-greeter.conf
|
||||
}
|
||||
|
||||
# update() {}
|
||||
|
||||
link() {
|
||||
mklink xprofile ~/.xprofile
|
||||
mklink config/* $XDG_CONFIG_HOME/
|
||||
mklink fonts/* $XDG_DATA_HOME/fonts/
|
||||
mklink -s etc/pacman/*.hook /etc/pacman.d/hooks/
|
||||
}
|
||||
|
||||
clean() {
|
||||
rm -fv $XDG_DATA_HOME/fonts/*(@N)
|
||||
sudo rm -fv /etc/pacman.d/hooks/*(@N)
|
||||
}
|
||||
|
||||
init "$@"
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/bash
|
||||
# A shim to make firefox believe HOME is elsewhere
|
||||
HOME="$XDG_DATA_HOME/mozilla" exec /usr/bin/firefox "$@"
|
|
@ -1,2 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
firefox --private-window "$@"
|
|
@ -1,2 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/notify-send "$@"
|
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
xcolor() {
|
||||
xrdb -query | awk "/^\*\.$1:/ {print \$2}" | sed -E 's/^[^#]+//'
|
||||
}
|
||||
|
||||
COLOR_FG=$(xcolor foreground)
|
||||
COLOR_BG=$(xcolor background)
|
||||
for ((i=0;i<=15;i++)); do
|
||||
eval "COLOR_$i=\$(xcolor color$i)"
|
||||
done
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
# A script run by devmon/udevil when a device is mounted or unmounted, notifying me.
|
||||
|
||||
DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -a "devmon" "Device change" "$2"
|
||||
ding
|
|
@ -1,22 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Run resilio (bittorrent sync) from $HOME if it isn't running. Otherwise, open
|
||||
# its gui in the browser.
|
||||
|
||||
if command -v xdg-open >/dev/null; then
|
||||
open=xdg-open
|
||||
elif command -v open >/dev/null; then
|
||||
open=open
|
||||
elif [[ -n $BROWSER ]]; then
|
||||
open=firefox
|
||||
else
|
||||
>&2 echo "No program to open urls with"
|
||||
fi
|
||||
|
||||
if ! pgrep rslsync >/dev/null; then
|
||||
pushd $HOME >/dev/null
|
||||
rslsync &
|
||||
popd >/dev/null
|
||||
fi
|
||||
|
||||
[[ -t 0 ]] && $open http://localhost:8888/gui/
|
|
@ -1,4 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
xdotool search --onlyvisible --classname urxvt-fuzzy windowkill
|
||||
xdotool search --classname urxvt-fuzzy windowmap \
|
||||
|| urxvt -name urxvt-fuzzy -geometry 80x18 -e $SHELL -c sk-apps
|
|
@ -1,29 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
#
|
||||
# Opens sk-pass in a transient popup window and temporary tmux session,
|
||||
# recreating this window if necessary.
|
||||
#
|
||||
|
||||
# Get firefox's current url; requires "Hostname in title" plugin for firefox
|
||||
win=$(xdotool getactivewindow)
|
||||
if [[ -n $win ]]; then
|
||||
winname=$(xdotool getwindowname $win)
|
||||
if [[ $winname =~ " - Mozilla Firefox$" ]]; then
|
||||
url=${winname% - Mozilla*}
|
||||
url=${url##* - }
|
||||
while (( ${#url//[^.]/} > 1 )); do
|
||||
url=${url#*.}
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# Present the popup
|
||||
xdotool search --onlyvisible --classname urxvt-fuzzy windowkill
|
||||
bspc monitor -f primary
|
||||
urxvt -name urxvt-fuzzy \
|
||||
-geometry 100x16 \
|
||||
-e $SHELL \
|
||||
-c "sk-pass $@ $url"
|
||||
|
||||
[[ -n $win ]] && xdotool windowactivate $win
|
|
@ -1,18 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
SCRID=urxvt-scratch
|
||||
focused=$(xdotool getactivewindow)
|
||||
scratch=$(xdotool search --onlyvisible --classname $SCRID)
|
||||
|
||||
if [[ -n $scratch ]]; then
|
||||
if [[ $focused == $scratch ]]; then
|
||||
tmux kill-session -t scratch
|
||||
else
|
||||
xdotool windowactivate $scratch
|
||||
fi
|
||||
else
|
||||
bspc monitor -f primary
|
||||
urxvt -name $SCRID \
|
||||
-geometry 100x26 \
|
||||
-e bash \
|
||||
-c 'tmux new-session -A -s scratch -n scratch'
|
||||
fi
|
|
@ -1,25 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if (($# == 0)); then
|
||||
data=$(amixer get Master)
|
||||
vol=$(echo "$data" | sed -n 's/^.*\[\([0-9]\+\)%.*$/\1/p' | uniq)
|
||||
state=$(echo "$data" | grep '\[on\]')
|
||||
[[ -n $state ]] && echo $vol || echo 0
|
||||
exit
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
[0-9]*) amixer set Master $1 ;;
|
||||
[+-]) amixer set Master 5%$1 ;;
|
||||
*mute) amixer set Master $1 ;;
|
||||
toggle) amixer set Master toggle ;;
|
||||
*) >&2 echo "Invalid command"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# community/xosd
|
||||
if command -v osd_cat >/dev/null; then
|
||||
killall -9 -q osd_cat &>/dev/null
|
||||
osd_cat --font="10x20" --delay=2 --color=white --align=center --pos=bottom --barmode=percentage --percentage $($0) &
|
||||
fi
|
|
@ -1,8 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
export MONITOR=$(xrandr -q | grep 'primary' | cut -d' ' -f1)
|
||||
|
||||
bspc config -m $MONITOR window_gap 4
|
||||
bspc config -m $MONITOR bottom_padding 158
|
||||
bspc config -m $MONITOR top_padding 0
|
||||
bspc config -m $MONITOR left_padding 0
|
||||
bspc config -m $MONITOR right_padding 0
|
|
@ -1,82 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
#
|
||||
# Displays
|
||||
#
|
||||
|
||||
export MONITOR=$(xrandr -q | grep 'primary' | cut -d' ' -f1)
|
||||
export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) )
|
||||
MONITOR=${MONITOR:-${MONITORS[0]}}
|
||||
# Multiple workspaces for main monitor, but only one for others
|
||||
bspc monitor $MONITOR -d {1,2,3,4,5}
|
||||
for mon in ${MONITORS[@]/${MONITOR}}; do
|
||||
bspc monitor $mon -d $mon/1
|
||||
done
|
||||
|
||||
if ! pgrep polybar >/dev/null; then
|
||||
$XDG_CONFIG_HOME/polybar/run.sh
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Aesthetics
|
||||
#
|
||||
|
||||
|
||||
bspc config split_ratio 0.50
|
||||
bspc config gapless_monocle true
|
||||
bspc config borderless_monocle true
|
||||
bspc config paddingless_monocle true
|
||||
|
||||
bspc config pointer_modifier mod4
|
||||
bspc config pointer_action1 move
|
||||
bspc config pointer_action2 resize_side
|
||||
bspc config pointer_action3 resize_corner
|
||||
|
||||
bspc config remove_disabled_monitors false
|
||||
bspc config remove_unplugged_monitors true
|
||||
|
||||
# bspc config normal_border_color "$COLOR_0"
|
||||
# bspc config active_border_color "$COLOR_0"
|
||||
# bspc config focused_border_color "$COLOR_0"
|
||||
|
||||
bspc config border_width 0
|
||||
bspc config window_gap 8
|
||||
bspc config top_padding 0
|
||||
bspc config bottom_padding 0
|
||||
bspc config left_padding 0
|
||||
bspc config right_padding 0
|
||||
|
||||
bspc config -m $MONITOR window_gap 22
|
||||
bspc config -m $MONITOR bottom_padding 36
|
||||
bspc config -m $MONITOR top_padding 0
|
||||
bspc config -m $MONITOR left_padding 0
|
||||
bspc config -m $MONITOR right_padding 0
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Rules
|
||||
#
|
||||
|
||||
bspc rule -r '*'
|
||||
|
||||
# Floating fixes
|
||||
bspc rule -a 'Emacs:org*' state=floating
|
||||
bspc rule -a mplayer2 state=floating
|
||||
bspc rule -a mpv state=floating center=on
|
||||
bspc rule -a Vlc state=floating monitor=C center=on
|
||||
bspc rule -a love state=floating center=on sticky=on
|
||||
bspc rule -a SimpleScreenRecorder state=floating center=on sticky=on
|
||||
bspc rule -a Pinentry state=floating center=on
|
||||
|
||||
# Special apps
|
||||
bspc rule -a URxvt:urxvt-scratch state=floating sticky=on center=on monitor=C
|
||||
bspc rule -a URxvt:urxvt-fuzzy state=floating sticky=on center=on monitor=C
|
||||
bspc rule -a Emacs split_ratio=0.25 border=off state=fullscreen
|
||||
bspc rule -a Gimp desktop=^6
|
||||
bspc rule -a feh state=fullscreen
|
||||
bspc rule -a Kupfer.py focus=on
|
||||
bspc rule -a Screenkey manage=off
|
||||
bspc rule -a Chromium monitor=L
|
||||
bspc rule -a Firefox monitor=L
|
|
@ -1,122 +0,0 @@
|
|||
backend = "glx";
|
||||
# backend = "xrender";
|
||||
glx-no-stencil = true;
|
||||
glx-copy-from-front = false;
|
||||
glx-no-rebind-pixmap = true;
|
||||
# glx-swap-method = "undefined";
|
||||
|
||||
# Set VSync method. VSync methods currently available:
|
||||
# + none: No VSync
|
||||
# + drm: VSync with DRM_IOCTL_WAIT_VBLANK. May only work on some drivers.
|
||||
# + opengl: Try to VSync with SGI_video_sync OpenGL extension. Only work on some
|
||||
# drivers.
|
||||
# + opengl-oml: Try to VSync with OML_sync_control OpenGL extension. Only work on some
|
||||
# drivers.
|
||||
# + opengl-swc: Try to VSync with SGI_swap_control OpenGL extension. Only work on some
|
||||
# drivers. Works only with GLX backend. Known to be most effective on many drivers.
|
||||
# Does not actually control paint timing, only buffer swap is affected, so it doesn’t
|
||||
# have the effect of --sw-opti unlike other methods. Experimental.
|
||||
# + opengl-mswc: Try to VSync with MESA_swap_control OpenGL extension. Basically the
|
||||
# same as opengl-swc above, except the extension we use.
|
||||
# (Note some VSync methods may not be enabled at compile time.)
|
||||
vsync = "opengl-mswc";
|
||||
# vsync = "none";
|
||||
|
||||
# Limit compton 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 = false;
|
||||
|
||||
# Painting on X Composite overlay window. Recommended.
|
||||
paint-on-overlay = true;
|
||||
|
||||
# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing.
|
||||
# Reported to have no effect, though.
|
||||
dbe = false;
|
||||
|
||||
# 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. paint-on-overlay may make the flickering less
|
||||
# obvious.
|
||||
unredir-if-possible = true;
|
||||
|
||||
# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused
|
||||
# at the same time.
|
||||
detect-transient = false;
|
||||
|
||||
# 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 = false;
|
||||
|
||||
|
||||
########################################
|
||||
#
|
||||
# Shadows
|
||||
#
|
||||
########################################
|
||||
|
||||
shadow = true;
|
||||
no-dock-shadow = true;
|
||||
no-dnd-shadow = true;
|
||||
clear-shadow = true;
|
||||
shadow-radius = 4;
|
||||
shadow-offset-x = -3;
|
||||
shadow-offset-y = 0;
|
||||
shadow-opacity = 0.15;
|
||||
# shadow-red
|
||||
# shadow-green
|
||||
# shadow-blue
|
||||
shadow-exclude = [
|
||||
"n:e:Notification",
|
||||
"class_i = 'Dunst'",
|
||||
"class_i = 'presel_feedback'",
|
||||
"g:e:Conky"
|
||||
];
|
||||
shadow-ignore-shaped = true;
|
||||
|
||||
|
||||
|
||||
########################################
|
||||
#
|
||||
# Opacity
|
||||
#
|
||||
########################################
|
||||
|
||||
menu-opacity = 1;
|
||||
active-opacity = 1;
|
||||
inactive-opacity = 1;
|
||||
# frame-opacity = 1.0;
|
||||
inactive-dim = 0.15;
|
||||
inactive-opacity-override = false;
|
||||
opacity-rule = [
|
||||
"80:class_g = 'Bspwm' && class_i = 'presel_feedback'"
|
||||
];
|
||||
alpha-step = 0.06
|
||||
|
||||
# Fading
|
||||
fading = false;
|
||||
fade-delta = 5;
|
||||
fade-in-step = 0.04;
|
||||
fade-out-step = 0.08;
|
||||
# no-fading-openclose = true;
|
||||
|
||||
# Other
|
||||
detect-rounded-corners = true;
|
||||
#mark-wmwin-focused = true;
|
||||
#mark-ovredir-focused = true;
|
||||
refresh-rate = 0;
|
||||
|
||||
focus-exclude = [
|
||||
"class_g = 'love'",
|
||||
"class_g = 'mpv'"
|
||||
];
|
||||
|
||||
# Window type settings
|
||||
wintypes:
|
||||
{
|
||||
tooltip = { fade = true; shadow = false; opacity = 0.85; focus = true; };
|
||||
};
|
||||
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
[global]
|
||||
alignment = left
|
||||
markup = full
|
||||
bounce_freq = 0
|
||||
browser = /usr/bin/firefox -new-tab
|
||||
dmenu = /usr/bin/rofi -dmenu -p dunst:
|
||||
follow = none
|
||||
font = UW Ttyp0 10
|
||||
# font = Misc Tamsyn 12
|
||||
format = "%s\n%b"
|
||||
# geometry [{width}]x{height}][+/-{x}+/-{y}]
|
||||
geometry = "365x15-21+21"
|
||||
history_length = 20
|
||||
horizontal_padding = 16
|
||||
idle_threshold = 120
|
||||
ignore_newline = no
|
||||
indicate_hidden = yes
|
||||
line_height = 0
|
||||
monitor = 0
|
||||
padding = 12
|
||||
separator_color = "#18191b"
|
||||
separator_height = 2
|
||||
show_age_threshold = 60
|
||||
show_indicators = yes
|
||||
shrink = no
|
||||
sort = yes
|
||||
startup_notification = false
|
||||
sticky_history = yes
|
||||
transparency = 1
|
||||
word_wrap = yes
|
||||
max_icon_size = 64
|
||||
# Align icons left/right/off
|
||||
icon_position = right
|
||||
# Paths to default icons.
|
||||
icon_path = /usr/share/icons/hicolor/32x32/apps/:/usr/share/icons/Adwaita/32x32/actions/
|
||||
frame_width = 0
|
||||
frame_color = "#131416"
|
||||
|
||||
[shortcuts]
|
||||
context = ctrl+shift+period
|
||||
|
||||
[urgency_low]
|
||||
# IMPORTANT: colors have to be defined in quotation marks.
|
||||
# Otherwise the "#" and following would be interpreted as a comment.
|
||||
background = "#0a0b0c"
|
||||
foreground = "#b5bd68"
|
||||
timeout = 8
|
||||
|
||||
[urgency_normal]
|
||||
background = "#b5bd68"
|
||||
foreground = "#131416"
|
||||
timeout = 14
|
||||
|
||||
[urgency_critical]
|
||||
background = "#cc6666"
|
||||
foreground = "#131416"
|
||||
timeout = 0
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<match target="pattern">
|
||||
<test name="family" qual="any">
|
||||
<string>monospace</string>
|
||||
</test>
|
||||
<edit binding="strong" mode="prepend" name="family">
|
||||
<string>Fira Mono</string>
|
||||
</edit>
|
||||
</match>
|
|
@ -1,11 +0,0 @@
|
|||
[Filechooser Settings]
|
||||
LocationMode=path-bar
|
||||
ShowHidden=false
|
||||
ShowSizeColumn=true
|
||||
GeometryX=1975
|
||||
GeometryY=450
|
||||
GeometryWidth=1010
|
||||
GeometryHeight=664
|
||||
SortColumn=name
|
||||
SortOrder=ascending
|
||||
StartupMode=recent
|
|
@ -1,2 +0,0 @@
|
|||
# include "/usr/share/themes/Adwaita-Slim-Dark/gtk-2.0/gtkrc"
|
||||
include "/usr/share/themes/Arc-Dark/gtk-2.0/gtkrc"
|
|
@ -1,2 +0,0 @@
|
|||
file:///home/hlissner
|
||||
file:///home/hlissner/work
|
|
@ -1,4 +0,0 @@
|
|||
[Settings]
|
||||
gtk-application-prefer-dark-theme = true
|
||||
gtk-theme-name = Arc-Dark
|
||||
gtk-icon-theme-name = Arc-Dark
|
|
@ -1,11 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
killall -q polybar
|
||||
while _is_running polybar; do sleep 1; done
|
||||
|
||||
source "${0:A:h}/../../bin/inject-xcolors"
|
||||
pushd ~ >/dev/null
|
||||
polybar main >>$XDG_DATA_HOME/polybar.log 2>&1 &
|
||||
popd >/dev/null
|
||||
|
||||
echo "Polybar launched..."
|
|
@ -1,35 +0,0 @@
|
|||
[redshift]
|
||||
temp-day=6500
|
||||
temp-night=3600
|
||||
|
||||
; Enable/Disable a smooth transition between day and night
|
||||
transition=1
|
||||
|
||||
;brightness=0.9
|
||||
;brightness-day=1.0
|
||||
;brightness-night=0.85
|
||||
; screen gamma for all colors...
|
||||
gamma=1.0
|
||||
; or each color channel individually
|
||||
;gamma=0.8:0.7:0.8
|
||||
;gamma-day=0.8:0.7:0.8
|
||||
;gamma-night=0.6
|
||||
|
||||
; redshift -l list
|
||||
location-provider=manual
|
||||
|
||||
; redshift -m list
|
||||
adjustment-method=randr
|
||||
|
||||
; redshift -l PROVIDER:help
|
||||
[manual]
|
||||
;; Horsholm, DK
|
||||
;lat=55.883514
|
||||
;lon=12.504924
|
||||
|
||||
;; Toronto, ON
|
||||
lat=43.7001100
|
||||
lon=-79.4163000
|
||||
|
||||
[randr]
|
||||
;screen=0
|
|
@ -1,147 +0,0 @@
|
|||
#
|
||||
# wm independent hotkeys
|
||||
#
|
||||
|
||||
# terminal emulator
|
||||
mod4 + ctrl + Return
|
||||
urxvt
|
||||
mod4 + ctrl + shift + Return
|
||||
urxvt -name urxvt-stream
|
||||
mod4 + grave
|
||||
urxvt-scratch-window
|
||||
mod4 + ctrl + grave
|
||||
emacsclient -e nil && bspc rule -a 'Emacs' -o state=floating && emacs-anywhere
|
||||
mod4 + ctrl + shift + grave
|
||||
bspc rule -a 'Emacs' -o state=floating && org-capture
|
||||
mod4 + space
|
||||
urxvt-app-launcher
|
||||
mod4 + backslash
|
||||
urxvt-pass-manager
|
||||
mod4 + mod1 + backslash
|
||||
firefox-current
|
||||
# urxvt-pass-manager -r
|
||||
|
||||
# reload sxhkd
|
||||
mod4 + ctrl + shift + Escape
|
||||
ding; pkill -USR1 -x sxhkd
|
||||
|
||||
|
||||
#
|
||||
# Media keys
|
||||
#
|
||||
|
||||
Print
|
||||
ssclip
|
||||
mod4 + Print
|
||||
maim ~/screenshots/$(date +%F-%T).png && notify-send "Fullscreen screenshot saved"
|
||||
mod4 + shift + Print
|
||||
rec -s ~/screenshots/$(date +%F-%T).mp4
|
||||
|
||||
Pause
|
||||
mpc -q toggle # play/pause music
|
||||
mod4 + {Pause,XF86Eject}
|
||||
zzz # sleep display
|
||||
mod4 + shift + Pause
|
||||
zzz -f # sleep computer
|
||||
Scroll_Lock
|
||||
vol toggle
|
||||
|
||||
# Media Keys
|
||||
XF86Audio{Play,Pause}
|
||||
mpc -q toggle
|
||||
XF86Audio{Prev,Next}
|
||||
mpc -q {prev,next}
|
||||
XF86Audio{LowerVolume,RaiseVolume}
|
||||
vol {-,+}
|
||||
XF86AudioMute
|
||||
vol toggle
|
||||
|
||||
mod4 + {Down,Up}
|
||||
vol {-,+}
|
||||
mod4 + {Left,Right}
|
||||
mpc {prev,next}
|
||||
|
||||
|
||||
#
|
||||
# bspwm hotkeys
|
||||
#
|
||||
|
||||
# quit bspwm normally
|
||||
mod4 + alt + Escape
|
||||
bspc quit
|
||||
|
||||
# close and kill
|
||||
mod4 + {_,shift + }q
|
||||
bspc node -{c,k}
|
||||
|
||||
#
|
||||
# state/flags
|
||||
#
|
||||
|
||||
mod4 + {ctrl,shift + } f
|
||||
{bspc desktop -l next,bspc node -t \~floating}
|
||||
|
||||
mod4 + shift + p
|
||||
bspc node -t \~pseudo_tiled
|
||||
|
||||
# set the node flags
|
||||
mod4 + ctrl + {x,y,z}
|
||||
bspc node -g {locked,sticky,private}
|
||||
|
||||
#
|
||||
# focus/swap
|
||||
#
|
||||
|
||||
# focus/swap the node in the given direction
|
||||
mod4 + {_,ctrl +}{h,j,k,l}
|
||||
bspc-focus {_,-m }{west,south,north,east}
|
||||
|
||||
mod4 + shift + {_,ctrl +}{h,j,k,l}
|
||||
bspc-swap {_,-m }{west,south,north,east}
|
||||
|
||||
# focus the node for the given path jump
|
||||
mod4 + {p,comma,period}
|
||||
bspc node -f @{parent,first,second}
|
||||
|
||||
# focus monitor or send to the given desktop
|
||||
mod4 + bracket{left,right}
|
||||
bspc desktop -f focused#{prev,next}.local
|
||||
|
||||
mod4 + ctrl + {_,shift +}{1-9,0}
|
||||
bspc {desktop -f,node -d} {1-9,10}
|
||||
|
||||
|
||||
#
|
||||
# preselect
|
||||
#
|
||||
|
||||
# preselect the direction
|
||||
mod4 + mod1 + ctrl + {h,j,k,l}
|
||||
bspc node -p {west,south,north,east}
|
||||
|
||||
# preselect the ratio
|
||||
mod4 + mod1 + ctrl + {1-9}
|
||||
bspc node -o 0.{1-9}5
|
||||
|
||||
# cancel the preselection for the focused node
|
||||
mod4 + mod1 + ctrl + space
|
||||
bspc node -p cancel
|
||||
|
||||
# cancel the preselection for the focused desktop
|
||||
#mod4 + alt + shift + space
|
||||
# bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
||||
|
||||
# expand the tiled space in the given direction
|
||||
#mod4 + alt + {h,j,k,l}
|
||||
# bspc node {@west -r -,@south -r +,@north -r -,@east -r +}64
|
||||
#
|
||||
## contract the tiled space in the given direction
|
||||
#mod4 + alt + ctrl + {h,j,k,l}
|
||||
# bspc node {@east -r -,@north -r +,@south -r -,@west -r +}64
|
||||
|
||||
# move a floating window
|
||||
#mod4 + alt + {Left,Down,Up,Right}
|
||||
# xdo move {-x -,-y +,-y -,-x +}40
|
||||
|
||||
#mod4 + alt + ctrl + {Left,Down,Up,Right}
|
||||
# xdo resize {-w -,-h -,-h -,-w -}40
|
|
@ -1,17 +0,0 @@
|
|||
# field allowed values
|
||||
# ----- --------------
|
||||
# minute 0-59
|
||||
# hour 0-23
|
||||
# day of month 1-31
|
||||
# month 1-12 (or names, see below)
|
||||
# day of week 0-7 (0 or 7 is Sun, or use names)
|
||||
#------------------------------------------------------------
|
||||
# m hr d m w cmd
|
||||
# 0 * * * * ...
|
||||
|
||||
# Polybar
|
||||
0 * * * * polybar-msg hook pkg 1
|
||||
*/5 * * * * polybar-msg hook mail 1
|
||||
|
||||
# Personal
|
||||
0 * * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "It is $(date +\%H:\%M)"
|
|
@ -1,16 +0,0 @@
|
|||
export BROWSER=firefox
|
||||
export GNUPGHOME="$XDG_CONFIG_HOME/gpg"
|
||||
export GTK2_RC_FILES="${0:A:h}/config/gtk-2.0/gtkrc"
|
||||
export URXVT_PERL_LIB="$XDG_CONFIG_HOME/urxvt"
|
||||
export QT_QPA_PLATFORMTHEME=gtk2
|
||||
|
||||
_source "$XDG_RUNTIME_DIR/ssh-agent-env" >/dev/null
|
||||
if [[ -z $SSH_AGENT_PID ]] || ! ps $SSH_AGENT_PID >/dev/null; then
|
||||
ssh-agent -s >"$XDG_RUNTIME_DIR/ssh-agent-env"
|
||||
_source "$XDG_RUNTIME_DIR/ssh-agent-env" >/dev/null
|
||||
fi
|
||||
|
||||
_is_running gpg-agent || {
|
||||
gpg-agent --pinentry-program /usr/bin/pinentry-gtk-2 --daemon >"$XDG_RUNTIME_DIR/gpg-agent-env"
|
||||
}
|
||||
_source "$XDG_RUNTIME_DIR/gpg-agent-env" >/dev/null
|
|
@ -1,11 +0,0 @@
|
|||
[Trigger]
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Type = Package
|
||||
Target = nvidia
|
||||
|
||||
[Action]
|
||||
Depends = mkinitcpio
|
||||
When = PostTransaction
|
||||
Exec = /usr/bin/mkinitcpio -p linux
|
|
@ -1,10 +0,0 @@
|
|||
[Trigger]
|
||||
Operation = Upgrade
|
||||
Type = Package
|
||||
Target = *
|
||||
|
||||
[Action]
|
||||
Description = "Updating polybar"
|
||||
When = PostTransaction
|
||||
Exec = /usr/bin/polybar-msg hook pkg 1
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
2
|
||||
kakwafont-12-b.pcf.gz -kakwa-kakwafont-medium-r-bold--12-120-72-72-c-60-iso8859-1
|
||||
kakwafont-12-n.pcf.gz -kakwa-kakwafont-medium-r-normal--12-120-72-72-c-60-iso8859-1
|
Binary file not shown.
Binary file not shown.
|
@ -1,16 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if command -v aseprite >/dev/null; then
|
||||
echo "Aseprite is already installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -e
|
||||
yay --needed --noconfirm -S ninja cmake libxcursor
|
||||
rm -rf /tmp/aseprite
|
||||
if git clone --recursive https://github.com/aseprite/aseprite /tmp/aseprite; then
|
||||
mkdir /tmp/aseprite/build && cd /tmp/aseprite/build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja ..
|
||||
ninja aseprite
|
||||
ninja install
|
||||
fi
|
|
@ -1,10 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if ! grep -e '^[multilib]' /etc/pacman.conf >/dev/null; then
|
||||
echo "[multilib]\nInclude = /etc/pacman.d/mirrorlist" | \
|
||||
sudo tee -a /etc/pacman.conf
|
||||
sudo pacman -Sy
|
||||
fi
|
||||
|
||||
sudo pacman --needed -S steam
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
sudo pacman --noconfirm --needed -S udevil devmon
|
||||
sudo systemctl enable devmon@$USER
|
||||
sudo systemctl start devmon@$USER
|
||||
|
||||
ARCH=$(cd "${0:A:h}/.." && pwd)
|
||||
sudo sed -i "s@^# \(success_exec =\)@\1 $ARCH/bin/notify-mount@" /etc/udevil/udevil.conf
|
|
@ -1,43 +0,0 @@
|
|||
#!/bin/bash
|
||||
DOTS=~/.dotfiles
|
||||
source $DOTS/env
|
||||
|
||||
# A tidy $HOME is a tidy mind
|
||||
export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority"
|
||||
[[ -e ~/.Xauthority ]] && mv -f ~/.Xauthority "$XAUTHORITY"
|
||||
|
||||
#
|
||||
ARCH=$DOTS/base/arch-desktop
|
||||
[[ -f $ARCH/Xresources ]] && xrdb $ARCH/Xresources
|
||||
[[ -f $ARCH/Xmodmap ]] && xmodmap $ARCH/Xmodmap
|
||||
|
||||
# set wallpaper
|
||||
[[ -e ~/wallpaper ]] && feh --no-fehbg --image-bg black --bg-center ~/wallpaper
|
||||
|
||||
# Let me know
|
||||
$DOTS/bin/ding startup
|
||||
|
||||
# autostart programs
|
||||
{
|
||||
run() {
|
||||
if _is_callable "$1" && ! _is_running "$1"; then
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# essentials
|
||||
run sxhkd & # keyboard daemon
|
||||
run dunst & # notifications
|
||||
|
||||
# non-essentials
|
||||
{
|
||||
sleep 2
|
||||
run mpd & # music server
|
||||
run redshift & # screen temperature based on time-of-day
|
||||
run rslsync & # resilio sync
|
||||
run compton & # perdy effects + transparency
|
||||
|
||||
# If sxhkd isn't running by now, something is wrong
|
||||
_is_running sxhkd || urxvt &
|
||||
} &
|
||||
} 2>&1 >$XDG_DATA_HOME/xsession-errors.log
|
|
@ -1,43 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
source ${0:A:h}/../../deploy
|
||||
|
||||
install() {
|
||||
if ! nc -z 8.8.8.8 53 >/dev/null 2>&1; then
|
||||
>&2 echo "No internet connection"
|
||||
return 1
|
||||
elif ! sudo pacman -Syu --noconfirm; then
|
||||
>&2 echo "Could not update pacman"
|
||||
return 2
|
||||
fi
|
||||
|
||||
# Core essentials
|
||||
sudo pacman --needed --noconfirm -S wget git curl tree rsync dnsutils
|
||||
|
||||
# Set up yay (AUR helper)
|
||||
if ! _is_callable yay; then
|
||||
git clone https://aur.archlinux.org/yay.git /tmp/yay
|
||||
pushd /tmp/yay
|
||||
makepkg -si
|
||||
popd
|
||||
rm -rf /tmp/yay
|
||||
|
||||
if ! _is_callable yay; then
|
||||
>&2 echo "Yay was not successfully installed"
|
||||
return 3
|
||||
fi
|
||||
fi
|
||||
|
||||
yay --needed --noconfirm -S ripgrep the_silver_searcher bc cronie
|
||||
sudo systemctl enable cronie
|
||||
}
|
||||
|
||||
update() {
|
||||
_is_callable yay && local pac=yay
|
||||
${pac:-sudo pacman} -Syu --noconfirm
|
||||
}
|
||||
|
||||
# link() {}
|
||||
|
||||
# clean() {}
|
||||
|
||||
init "$@"
|
|
@ -1,22 +0,0 @@
|
|||
alias ls="${aliases[ls]:-ls} --color=auto --group-directories-first"
|
||||
|
||||
alias kb=keybase
|
||||
alias sc=systemctl
|
||||
alias jc=journalctl
|
||||
alias ssc='sudo systemctl'
|
||||
alias ufw='sudo ufw'
|
||||
|
||||
alias yayc='yay -Sc' # clean pacman
|
||||
alias yayo='yay -Qtdq' # orphaned packages
|
||||
|
||||
alias reboot='sudo systemctl reboot'
|
||||
alias shutdown='sudo systemctl poweroff'
|
||||
|
||||
# Clipboard pipes
|
||||
if _is_callable xclip; then
|
||||
alias y='xclip -selection clipboard -in'
|
||||
alias p='xclip -selection clipboard -out'
|
||||
elif _is_callable xsel; then
|
||||
alias y='xsel -i --clipboard'
|
||||
alias p='xsel -o --clipboard'
|
||||
fi
|
|
@ -1,2 +0,0 @@
|
|||
export GNUPGHOME="$XDG_CONFIG_HOME/gpg"
|
||||
export TERMINFO="$XDG_CONFIG_HOME/terminfo"
|
|
@ -1,70 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This script bootstraps arch linux with the utmost essentials. It expects an internet
|
||||
# connection, and the harddrives to be set up (and one of the mounted to /mnt).
|
||||
|
||||
MOUNT=/mnt
|
||||
|
||||
exists() { command -v "$1" >/dev/null; }
|
||||
arch() { arch-chroot "$MOUNT" /bin/bash -c "$1"; }
|
||||
pac() { pacstrap "$MOUNT" $@; }
|
||||
|
||||
if ! exists arch-chroot; then
|
||||
>&2 echo "Meant to be run from the Arch Linux installer"
|
||||
exit 1
|
||||
elif ! grep "$MOUNT " /proc/mounts >/dev/null; then
|
||||
>&2 echo "$MOUNT isn't mounted"
|
||||
exit 2
|
||||
elif ! ping -c1 http://google.com >/dev/null; then
|
||||
>&2 echo "No internet connection detected!"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
#
|
||||
set -e
|
||||
|
||||
## Collect info
|
||||
# hostname
|
||||
read -rp "Hostname:\t" host
|
||||
|
||||
#
|
||||
echo "$host" > "$MOUNT/etc/hostname"
|
||||
|
||||
# ensure keys are up to date
|
||||
pacman-key --refresh-keys
|
||||
pacman -Syy
|
||||
|
||||
# bootstrap
|
||||
pac base base-devel intel-ucode
|
||||
# device mounting drivers
|
||||
pac dosfstools ntfs-3g exfat-utils hfsprogs
|
||||
|
||||
# networking support
|
||||
WIRELESS_DEV=$(ip link | grep wlp | awk '{print $2}'| sed 's/://' | sed '1!d')
|
||||
if [[ -n $WIRELESS_DEV ]]; then
|
||||
echo "==> ${WIRELESS_DEV} interface detected"
|
||||
pac iw wireless_tools wpa_actiond wpa_supplicant dialog netctl
|
||||
fi
|
||||
|
||||
WIRED_DEV=$(ip link | grep "en[sop]" | awk '{print $2}'| sed 's/://' | sed '1!d')
|
||||
if [[ -n $WIRED_DEV ]]; then
|
||||
echo "==> ${WIRED_DEV} interface detected"
|
||||
arch "systemctl enable dhcpcd@${WIRED_DEV}.service"
|
||||
fi
|
||||
# Speed up connections on boot
|
||||
if ! grep "^noarp$" $MOUNT/etc/dhcpcd.conf; then
|
||||
echo -e "\nnoarp" >> $MOUNT/etc/dhcpcd.conf
|
||||
fi
|
||||
|
||||
# locale
|
||||
sed -i '/^#en_US\.UTF-8/s/^#//' $MOUNT/etc/locale.gen
|
||||
arch "locale-gen"
|
||||
# datetime
|
||||
pac ntp
|
||||
arch "systemctl enable ntpd.service"
|
||||
arch "ln -sfv /usr/share/zoneinfo/America/Toronto /etc/localtime"
|
||||
|
||||
# finalization
|
||||
genfstab -U "$MOUNT" >> "$MOUNT/etc/fstab"
|
||||
arch "bootctl --path=/boot install"
|
||||
arch "mkinitcpio -p linux"
|
|
@ -1,35 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
source ${0:A:h}/../../deploy
|
||||
|
||||
install() {
|
||||
# Install homebrew
|
||||
if ! _is_callable brew; then
|
||||
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||
fi
|
||||
|
||||
brew install \
|
||||
wget curl tree coreutils bash gnupg2 \
|
||||
the_silver_searcher ripgrep ffmpeg keybase \
|
||||
neofetch youtube-dl pinentry-mac
|
||||
|
||||
# pass-otp
|
||||
brew install pass oath-toolkit
|
||||
if _ensure_repo tadfisher/pass-otp /tmp/pass-otp; then
|
||||
cd /tmp/pass-otp
|
||||
make install PREFIX=/usr/local
|
||||
fi
|
||||
}
|
||||
|
||||
update() {
|
||||
if _is_callable brew; then
|
||||
brew update && brew upgrade && brew cleanup
|
||||
else
|
||||
echo-fail "homebrew not detected"
|
||||
fi
|
||||
}
|
||||
|
||||
# link() {}
|
||||
|
||||
# clean() {}
|
||||
|
||||
init "$@"
|
|
@ -1,14 +0,0 @@
|
|||
alias ls="gls --color=auto --group-directories-first"
|
||||
alias date=gdate
|
||||
|
||||
alias y=pbcopy
|
||||
alias p=pbpaste
|
||||
|
||||
alias br=brew
|
||||
alias bru='brew update && brew upgrade && brew cleanup'
|
||||
alias brc='brew cask'
|
||||
|
||||
# OS X has no `md5sum`, so use `md5` as a fallback
|
||||
_is_callable md5sum || alias md5sum="md5"
|
||||
# OS X has no `sha1sum`, so use `shasum` as a fallback
|
||||
_is_callable sha1sum || alias sha1sum="shasum"
|
|
@ -1,18 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Start taking screenshots every N seconds, until this script is
|
||||
# called again.
|
||||
|
||||
if [ ! -f ~/.ss ]; then
|
||||
dir="$1"
|
||||
if [ $# -eq 0 ]; then
|
||||
[ ! -d ~/Desktop/ss ] && mkdir -p ~/Desktop/ss
|
||||
dir=~/Desktop/ss
|
||||
fi
|
||||
echo "$dir" > ~/.ss
|
||||
echo "Timelapse, go!"
|
||||
i=1;while [ -f ~/.ss ];do screencapture -t jpg -x "$dir/$i.jpg"; let i++;sleep 5; done &
|
||||
else
|
||||
echo "Deactivating timelapse! Images in: $(cat ~/.ss)/"
|
||||
rm ~/.ss
|
||||
fi
|
|
@ -1,3 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
ffmpeg -r 24 -i %d.jpg -b 16000k $1
|
|
@ -1,18 +0,0 @@
|
|||
export GNUPGHOME="$XDG_CONFIG_HOME/gpg"
|
||||
export BROWSER='open'
|
||||
|
||||
# export CC=/usr/bin/clang
|
||||
# export CXX=/usr/bin/clang++
|
||||
# export CXXFLAGS="-I/usr/local/include"
|
||||
export C_INCLUDE_PATH="/usr/local/include"
|
||||
export CPLUS_INCLUDE_PATH="/usr/local/include"
|
||||
export LIBRARY_PATH="/usr/local/lib"
|
||||
# export LDFLAGS="-L/usr/local/lib"
|
||||
|
||||
export LESS='-g -i -M -R -S -w -z-4'
|
||||
if _is_callable lesspipe; then
|
||||
export LESSOPEN='| /usr/bin/env lesspipe %s 2>&-'
|
||||
fi
|
||||
|
||||
#
|
||||
path=( /usr/local/{s,}bin $path )
|
9
bin/autoclicker
Executable file
9
bin/autoclicker
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p xdotool
|
||||
|
||||
while true; do
|
||||
xdotool mousedown 1
|
||||
sleep 0.01
|
||||
xdotool mouseup 1
|
||||
sleep 0.01
|
||||
done
|
29
bin/clip
29
bin/clip
|
@ -1,29 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# An OS-agnostic wrapper around the system clipboard (well, for MacOS and
|
||||
# Linux).
|
||||
|
||||
if [[ -t 0 ]]; then
|
||||
if command -v xclip >/dev/null; then
|
||||
xclip -display :0 -selection clipboard -out
|
||||
elif command -v xsel >/dev/null; then
|
||||
xsel --clipboard --output
|
||||
elif command -v pbpaste >/dev/null; then
|
||||
pbpaste
|
||||
else
|
||||
>&2 echo "No clipboard detected. Aborting."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if command -v xclip >/dev/null; then
|
||||
xclip -display :0 -selection clipboard -in
|
||||
elif command -v xsel >/dev/null; then
|
||||
xsel --clipboard --input
|
||||
elif command -v pbcopy >/dev/null; then
|
||||
pbcopy
|
||||
else
|
||||
>&2 echo "No clipboard detected. Aborting."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
23
bin/colors
23
bin/colors
|
@ -1,23 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Prints a bunch of color codes to the terminal to demonstrate what's available.
|
||||
# Each line is the color code of one forground color, out of 17 (default + 16
|
||||
# escapes), followed by a test use of that color on all nine background colors
|
||||
# (default + 8 escapes).
|
||||
|
||||
T=niX # The test text
|
||||
|
||||
echo -e "\n 40m 41m 42m 43m\
|
||||
44m 45m 46m 47m";
|
||||
|
||||
for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
|
||||
'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
|
||||
' 36m' '1;36m' ' 37m' '1;37m';
|
||||
do FG=${FGs// /}
|
||||
echo -en " $FGs \033[$FG $T "
|
||||
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
|
||||
do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";
|
||||
done
|
||||
echo;
|
||||
done
|
||||
echo
|
6
bin/ding
6
bin/ding
|
@ -1,6 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
DEFAULT="$DOTFILES_ASSETS/sounds/${1:-ding}.ogg"
|
||||
case $OSTYPE in
|
||||
darwin*) afplay $DEFAULT ;;
|
||||
linux*) paplay $DEFAULT ;;
|
||||
esac &
|
|
@ -1,3 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# NOTE make sure your .curlrc doesn't set a real useragent
|
||||
curl http://wttr.in/${1:-toronto}
|
40
bin/gpgzip
40
bin/gpgzip
|
@ -1,40 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Encrypt/decrypt and compress folders with gpg+tar.
|
||||
# Usage:
|
||||
# clump foldername # packs
|
||||
# clump foldername.clump # unpacks
|
||||
|
||||
set -e
|
||||
if (($# == 0)); then
|
||||
>&2 echo "Usage: $0 <FILE|DIRECTORY> [DEST]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ext='clump'
|
||||
target="$1"
|
||||
cmd=
|
||||
if [[ -f $target ]]; then
|
||||
cmd=unpack
|
||||
elif [[ -d $target ]]; then
|
||||
cmd=pack
|
||||
else
|
||||
>&2 echo "Not a valid target: '$target'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $cmd in
|
||||
p|pack)
|
||||
if [[ -f $target.$ext ]]; then
|
||||
>&2 echo "Destination file already exists"
|
||||
exit 2
|
||||
fi
|
||||
tar -pcvf - "$target" | gpg -c > "$target.$ext"
|
||||
echo "Packed into $target.$ext"
|
||||
;;
|
||||
u|unpack)
|
||||
tmpfile=$(mktemp)
|
||||
gpg -d "$target" > "$tmpfile" && tar -pxvf "$tmpfile"
|
||||
rm -f "$tmpfile"
|
||||
;;
|
||||
esac
|
36
bin/htmlent
36
bin/htmlent
|
@ -1,36 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
Encode/decode HTML entities in stdin or given file(s).
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import fileinput
|
||||
import html
|
||||
from html.entities import entitydefs
|
||||
|
||||
ENTITIES = {value: key for key, value in entitydefs.items()}
|
||||
|
||||
|
||||
def encode(text):
|
||||
t = ""
|
||||
for c in text:
|
||||
if c in ENTITIES:
|
||||
t += "&" + ENTITIES[c] + ";"
|
||||
else:
|
||||
t += c
|
||||
return t
|
||||
|
||||
def decode(text):
|
||||
return html.unescape(text)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
opts = argparse.ArgumentParser(description="Encodes (or decodes) HTML entities in text.")
|
||||
opts.add_argument('file', type=str, nargs="*", help="File to encode/decode")
|
||||
opts.add_argument('-d', '--decode', action='store_true', help="Decode the given files/input")
|
||||
args = opts.parse_args()
|
||||
|
||||
text = [line for line in fileinput.input(args.file)]
|
||||
action = decode if args.decode else encode
|
||||
print(action("\n".join(text).strip()))
|
50
bin/ix.io
50
bin/ix.io
|
@ -1,50 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Sends file(s) or stdin to a ix.io
|
||||
set -e
|
||||
|
||||
_usage() {
|
||||
more <<EOL
|
||||
Usage: ${0:A:t} [FILE...]
|
||||
|
||||
Uploads text files/stdin to ix.io.
|
||||
|
||||
Options:
|
||||
-l LANG Specify file extension for syntax highlight
|
||||
-h This information
|
||||
|
||||
Examples:
|
||||
${0##*/} script.py
|
||||
${0##*/} -l py sometext
|
||||
echo "Hello world" | ${0:A:t}
|
||||
echo "puts 'Hi'" | ${0:A:t} -l rb
|
||||
EOL
|
||||
}
|
||||
|
||||
#
|
||||
while getopts hl: opt; do
|
||||
case $opt in
|
||||
l) lang="?$OPTARG"
|
||||
;;
|
||||
[h?]) _usage; exit; ;;
|
||||
:) >&2 echo "$OPTARG requires an argument"
|
||||
_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if (($# == 0)) && [[ -t 0 ]]; then
|
||||
>&2 echo "Nothing in stdin and no files specified!"
|
||||
>&2 _usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
url=$(cat "$@" | curl -s -F 'f:1=<-' ix.io)
|
||||
|
||||
# Naive lang detection from file extension
|
||||
[[ $1 == *.* && -z $lang ]] && lang="${1##*.}"
|
||||
# Show url
|
||||
url=$(printf "%s/%s" "$url" "$lang")
|
||||
echo $url | clip
|
||||
echo $url
|
18
bin/lesspipe
18
bin/lesspipe
|
@ -1,18 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Read a file with possible syntax coloring applied
|
||||
|
||||
case "$1" in
|
||||
*.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
|
||||
*.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
|
||||
*.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
|
||||
*.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
|
||||
pygmentize -f 256 "$1" ;;
|
||||
.bashrc|.bash_aliases|.bash_environment)
|
||||
pygmentize -f 256 -l sh "$1" ;;
|
||||
*)
|
||||
if ! grep "#\!/.+[/ ](ba|z)?sh" "$1" >/dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
pygmentize -f 256 -l sh "$1"
|
||||
esac
|
|
@ -1,51 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Lists the contents of archives.
|
||||
#
|
||||
# Adapted from a script by Sorin Ionescu <sorin.ionescu@gmail.com>
|
||||
|
||||
if (($# == 0)); then
|
||||
cat >&2 <<EOF
|
||||
usage: $0 [-option] [file ...]
|
||||
|
||||
options:
|
||||
-v, --verbose verbose archive listing
|
||||
|
||||
Report bugs to <sorin.ionescu@gmail.com>.
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [[ $1 == -v || $1 == --verbose ]]; then
|
||||
verbose=0
|
||||
shift
|
||||
fi
|
||||
|
||||
while (($# > 0)); do
|
||||
if [[ ! -s $1 ]]; then
|
||||
>&2 echo "$0: file not valid: $1"
|
||||
shift
|
||||
continue
|
||||
fi
|
||||
|
||||
case ${1:l} in
|
||||
*.tar.gz|*.tgz) tar t${verbose:+v}vzf "$1" ;;
|
||||
*.tar.bz2|*.tbz|*.tbz2) tar t${verbose:+v}jf "$1" ;;
|
||||
*.tar.xz|*.txz) tar --xz --help &> /dev/null \
|
||||
&& tar --xz -t${verbose:+v}f "$1" \
|
||||
|| xzcat "$1" | tar t${verbose:+v}f - ;;
|
||||
*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \
|
||||
&& tar --lzma -t${verbose:+v}f "$1" \
|
||||
|| lzcat "$1" | tar x${verbose:+v}f - ;;
|
||||
*.tar) tar t${verbose:+v}f "$1" ;;
|
||||
*.zip) unzip -l${verbose:+v} "$1" ;;
|
||||
*.rar) unrar &> /dev/null \
|
||||
&& unrar ${${verbose:+v}:-l} "$1" \
|
||||
|| rar ${${verbose:+v}:-l} "$1" ;;
|
||||
*.7z) 7za l "$1" ;;
|
||||
*) >&2 echo "$0: cannot list: $1"
|
||||
success=1
|
||||
;;
|
||||
esac
|
||||
|
||||
shift
|
||||
done
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p ffmpeg gifsicle
|
||||
|
||||
# Uses ffmpeg to convert a video file to a gif file. Optimizes the final result
|
||||
# with gifsicle.
|
||||
|
@ -69,6 +70,4 @@ flags="fps=${fps}$scale"
|
|||
ffmpeg -v warning $start $duration -i "$src" -vf "$flags,palettegen=stats_mode=full" -y "$PALETTE"
|
||||
ffmpeg -v warning $start $duration -i "$src" -i "$PALETTE" -lavfi "$flags [x]; [x][1:v] paletteuse" -y "$dest"
|
||||
|
||||
if command -v gifsicle >/dev/null; then
|
||||
gifsicle -O3 "$dest" -o "$dest"
|
||||
fi
|
||||
gifsicle -O3 "$dest" -o "$dest"
|
||||
|
|
12
bin/open
12
bin/open
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
case $OSTYPE in
|
||||
darwin*) /usr/bin/open "$@" ;;
|
||||
linux*) xdg-open "$@" ;;
|
||||
esac
|
||||
|
||||
# OPTIONAL: requires shell/tmux
|
||||
if command -v 'tmux-session-name' >/dev/null; then
|
||||
# If this was used from a scratch tmux terminal, close it
|
||||
[[ "$(tmux-session-name)" == scratch ]] && tmux kill-session -t scratch
|
||||
fi
|
|
@ -1,36 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# ANSI color scheme script featuring PACMAN
|
||||
# by pfh
|
||||
#
|
||||
# Initializing procedure by lolilolicon
|
||||
|
||||
f=3 b=4
|
||||
for j in f b; do
|
||||
for i in {0..7}; do
|
||||
printf -v $j$i %b "\e[${!j}${i}m"
|
||||
done
|
||||
done
|
||||
bld=$'\e[1m'
|
||||
rst=$'\e[0m'
|
||||
inv=$'\e[7m'
|
||||
|
||||
|
||||
cat << EOF
|
||||
|
||||
$rst
|
||||
$f3 ▄███████▄ $f1 ▄██████▄ $f2 ▄██████▄ $f4 ▄██████▄ $f5 ▄██████▄ $f6 ▄██████▄
|
||||
$f3▄█████████▀▀ $f1▄$f7█▀█$f1██$f7█▀█$f1██▄ $f2▄█$f7███$f2██$f7███$f2█▄ $f4▄█$f7███$f4██$f7███$f4█▄ $f5▄█$f7███$f5██$f7███$f5█▄ $f6▄██$f7█▀█$f6██$f7█▀█$f6▄
|
||||
$f3███████▀ $f7▄▄ ▄▄ ▄▄ $f1█$f7▄▄█$f1██$f7▄▄█$f1███ $f2██$f7█ █$f2██$f7█ █$f2██ $f4██$f7█ █$f4██$f7█ █$f4██ $f5██$f7█ █$f5██$f7█ █$f5██ $f6███$f7█▄▄$f6██$f7█▄▄$f6█
|
||||
$f3███████▄ $f7▀▀ ▀▀ ▀▀ $f1████████████ $f2████████████ $f4████████████ $f5████████████ $f6████████████
|
||||
$f3▀█████████▄▄ $f1██▀██▀▀██▀██ $f2██▀██▀▀██▀██ $f4██▀██▀▀██▀██ $f5██▀██▀▀██▀██ $f6██▀██▀▀██▀██
|
||||
$f3 ▀███████▀ $f1▀ ▀ ▀ ▀ $f2▀ ▀ ▀ ▀ $f4▀ ▀ ▀ ▀ $f5▀ ▀ ▀ ▀ $f6▀ ▀ ▀ ▀
|
||||
$bld
|
||||
$f3 ▄███████▄ $f1 ▄██████▄ $f2 ▄██████▄ $f4 ▄██████▄ $f5 ▄██████▄ $f6 ▄██████▄
|
||||
$f3▄█████████▀▀ $f1▄$f7█▀█$f1██$f7█▀█$f1██▄ $f2▄█$f7█ █$f2██$f7█ █$f2█▄ $f4▄█$f7█ █$f4██$f7█ █$f4█▄ $f5▄█$f7█ █$f5██$f7█ █$f5█▄ $f6▄██$f7█▀█$f6██$f7█▀█$f6▄
|
||||
$f3███████▀ $f7▄▄ ▄▄ ▄▄ $f1█$f7▄▄█$f1██$f7▄▄█$f1███ $f2██$f7███$f2██$f7███$f2██ $f4██$f7███$f4██$f7███$f4██ $f5██$f7███$f5██$f7███$f5██ $f6███$f7█▄▄$f6██$f7█▄▄$f6█
|
||||
$f3███████▄ $f7▀▀ ▀▀ ▀▀ $f1████████████ $f2████████████ $f4████████████ $f5████████████ $f6████████████
|
||||
$f3▀█████████▄▄ $f1██▀██▀▀██▀██ $f2██▀██▀▀██▀██ $f4██▀██▀▀██▀██ $f5██▀██▀▀██▀██ $f6██▀██▀▀██▀██
|
||||
$f3 ▀███████▀ $f1▀ ▀ ▀ ▀ $f2▀ ▀ ▀ ▀ $f4▀ ▀ ▀ ▀ $f5▀ ▀ ▀ ▀ $f6▀ ▀ ▀ ▀
|
||||
$rst
|
||||
EOF
|
27
bin/pass-get
27
bin/pass-get
|
@ -1,27 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Fetches the FIELD in ENTRY. It expects pass fields to be colon-delimited.
|
||||
|
||||
if (( $# != 2 )); then
|
||||
>&2 echo "Expected two arguments"
|
||||
>&2 echo "pass get ENTRY FIELD"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
entry=$1
|
||||
field=$2
|
||||
|
||||
secrets="$(pass show $entry)"
|
||||
if [[ ! $secrets ]]; then
|
||||
notify-send --urgency=critical "Failed to retrieve $entry"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
case $field in
|
||||
password) printf "%s" "$(head -n1 <<<"$secrets")" ;;
|
||||
otp) printf "%s" "$(pass otp "$entry")" ;;
|
||||
*) printf "%s" "$(awk -v "key=$field:" '$1 == key {print $2}' <<<"$secrets")" ;;
|
||||
esac | xsel -i -b -t 15000
|
||||
|
||||
#
|
||||
echo "Copied $entry:$field to clipboard for 15s"
|
|
@ -1,11 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Interactively generates an OTP-auth url (written for pass-otp)
|
||||
#
|
||||
# Example: passotpuri LABEL SECRET [QUERYSTRING]
|
||||
|
||||
read -p "Enter the label or issuer:" label
|
||||
read -p "Enter its OTP secret:" secret
|
||||
read -p "Enter type (leave blank for totp):" type
|
||||
|
||||
echo "otpauth://${type:-totp}/$label?secret=$secret&issuer=${issuer:-$label}"
|
4
bin/pomo
4
bin/pomo
|
@ -1,4 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# A minimalistic pomodoro timer.
|
||||
# e.g. pomo 25 "Hello!"
|
||||
sleep $((${1:-25} * 60)) && notify-send "($(date +%H:%M)) ${2:-Break time!}" && ding &
|
57
bin/pushover
57
bin/pushover
|
@ -1,57 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# Sends a pushover notification.
|
||||
#
|
||||
# -t [TITLE]
|
||||
# -m [MESSAGE]
|
||||
# -p [PRIORITY_LEVEL]
|
||||
# -u [URL]
|
||||
# -U [URL_TITLE]
|
||||
# -d [DEVICE]
|
||||
#
|
||||
|
||||
set -e
|
||||
unset CDPATH
|
||||
|
||||
secret_file=~/.secrets/pushover
|
||||
if [[ ! -f $secret_file ]]; then
|
||||
>&2 echo "No pushover config file found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
title=${2:+$1}
|
||||
message=${2:-$1}
|
||||
# priority=
|
||||
url=
|
||||
url_title=
|
||||
device=
|
||||
|
||||
while getopts t:m:p:u:d: opt; do
|
||||
case $opt in
|
||||
t) title="$OPTARG" ;;
|
||||
m) message="$OPTARG" ;;
|
||||
# p) priority="$OPTARG" ;;
|
||||
u) url="$OPTARG" ;;
|
||||
U) url_title="$OPTARG" ;;
|
||||
d) device="$OPTARG" ;;
|
||||
*) >&2 echo "Invalid option $OPTARG"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1))
|
||||
|
||||
#USER=...
|
||||
#TOKEN=...
|
||||
eval "$(gpg --decrypt $secret_file)"
|
||||
|
||||
curl -s \
|
||||
--form-string "token=$TOKEN" \
|
||||
--form-string "user=$USER" \
|
||||
--form-string "title=$title" \
|
||||
--form-string "message=$message" \
|
||||
--form-string "url=$url" \
|
||||
--form-string "url_title=$url_title" \
|
||||
--form-string "device=$device" \
|
||||
https://api.pushover.net/1/messages.json
|
16
bin/qrsnap
16
bin/qrsnap
|
@ -1,16 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Snaps a screenshot of a QR code and decodes it.
|
||||
#
|
||||
# Requires: zbar, maim (on linux)
|
||||
|
||||
set -e
|
||||
unset CDPATH
|
||||
TMP=$(mktemp _qrXXX)
|
||||
case $OSTYPE in
|
||||
darwin*) screencapture -i -x -t png "$TMP" ;;
|
||||
linux*) maim -s "$TMP" ;;
|
||||
*) >&2 echo "Help!"; exit 1 ;;
|
||||
esac
|
||||
(( $? == 0 )) && zbarimg -q --raw "$TMP"
|
||||
rm -f "$TMP"
|
46
bin/rclip
46
bin/rclip
|
@ -1,46 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# A simple script for sending data to another computer's clipboard via SSH. Acts
|
||||
# as a universal clipboard. This script must be available on the remote. Pipe
|
||||
# through gpg if you want the contents encrypted.
|
||||
#
|
||||
# It helps if your ssh connection is pubkey authenticated and password-less.
|
||||
#
|
||||
# Requires: pb (script, in same folder)
|
||||
#
|
||||
# Workflow:
|
||||
# host $ echo "Hello world!" | rclip guest
|
||||
# guest $ rclip
|
||||
# Hello world!
|
||||
# OR
|
||||
# host $ echo "Hello world!" | gpg -e | rclip.sh guest
|
||||
# guest $ rclip | gpg -d
|
||||
# Hello world!
|
||||
|
||||
bin="${0##*/}"
|
||||
|
||||
flags=
|
||||
while getopts p:i:l: opt; do
|
||||
case $opt in
|
||||
p) flags+=" -p $OPTARG" ;;
|
||||
i) flags+=" -i $OPTARG" ;;
|
||||
l) flags+=" -l $OPTARG" ;;
|
||||
*) >&2 echo "Invalid option $OPTARG"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1))
|
||||
|
||||
target="$1"
|
||||
if [[ -n $target ]]; then
|
||||
if [[ -t 0 ]]; then
|
||||
pb | $bin $target
|
||||
else
|
||||
ssh $flags -qt "$target" "pb" && echo "Sent to $target"
|
||||
fi
|
||||
else
|
||||
pb
|
||||
fi
|
||||
|
||||
# vim:set ft=sh:
|
10
bin/rehash
10
bin/rehash
|
@ -1,10 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Rehashes all (rb|py|nod|lua|*)env environments
|
||||
|
||||
for env in $XDG_CONFIG_HOME/*env(N); do
|
||||
local bin=${env##*/}
|
||||
if _is_callable $bin; then
|
||||
echo "Rehashing $bin"
|
||||
$bin rehash
|
||||
fi
|
||||
done
|
17
bin/scrcap
Executable file
17
bin/scrcap
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p maim slop xclip libnotify
|
||||
|
||||
# A script that takes a screenshot (prompts you for what region/window to
|
||||
# capture) and stores it in the clipboard.
|
||||
|
||||
tmp=$(mktemp)
|
||||
|
||||
# Delay for long enough that we can refocus the targeted window
|
||||
if maim --delay=${1:-0.6} -us >"$tmp"; then
|
||||
xclip -selection clipboard -t image/png "$tmp" &&
|
||||
notify-send "Screenshot saved"
|
||||
else
|
||||
notify-send -u low "Aborted screenshot"
|
||||
fi
|
||||
|
||||
rm -f "$tmp"
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i bash -p ffmpeg slop
|
||||
|
||||
# Select a region and record it.
|
||||
#
|
||||
|
@ -17,7 +18,7 @@ fi
|
|||
if [[ -f /tmp/_stop ]]; then
|
||||
echo q > /tmp/_stop
|
||||
if [[ $is_script ]]; then
|
||||
ding error &
|
||||
>&2 echo "Nope"
|
||||
else
|
||||
echo "Stopped previous recording"
|
||||
fi
|
||||
|
@ -32,7 +33,7 @@ if [[ $dest == *.gif ]]; then
|
|||
fi
|
||||
|
||||
if [[ $is_script ]]; then
|
||||
ding &
|
||||
echo "Starting"
|
||||
touch /tmp/_stop
|
||||
ffmpeg -y -f x11grab -s "$W"x"$H" -i :0.0+$X,$Y -framerate 30 "${mp4dest:-$dest}" </tmp/_stop
|
||||
rm -f /tmp/_stop
|
27
bin/sedall
27
bin/sedall
|
@ -1,27 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
unset CDPATH
|
||||
|
||||
# Find and replace by a given list of files.
|
||||
#
|
||||
# replace foo bar **/*.rb
|
||||
|
||||
main() {
|
||||
local search="$1"
|
||||
local replace="$2"
|
||||
shift 2
|
||||
|
||||
for item in $(ag -l --nocolor "$search" "$@"); do
|
||||
sed -ir "s%${search//%/\\%}%${replace//%/\\%}%g" "$item"
|
||||
done
|
||||
}
|
||||
|
||||
# Show matches
|
||||
ag "$1"
|
||||
|
||||
# Are you sure?
|
||||
read -rp "Confirm search+replace? (y/n)?" choice
|
||||
case $choice in
|
||||
y|Y) main "$@" ;;
|
||||
*) >&2 echo "Aborted"; exit ;;
|
||||
esac
|
143
bin/shekel
143
bin/shekel
|
@ -1,143 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
A shell script that converts one currency to another.
|
||||
|
||||
Usage: shekel [-rh] AMOUNT FROM TO [TO ...]
|
||||
|
||||
FROM and TO are currency codes.
|
||||
|
||||
Examples:
|
||||
shekel 200 USD CAD
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
import json
|
||||
from urllib import request
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
API_KEY = "92a7ccb3b6038a7151fc15e99f2de83d" # please use your own!
|
||||
API_URL = "http://apilayer.net/api/live?access_key={}¤cies={},{}"
|
||||
|
||||
DEFAULT_CODES = ('CAD', 'USD')
|
||||
CACHE_FILE = "/tmp/shekel-hist"
|
||||
CACHE_TTL = 3600
|
||||
|
||||
class CurrencyCache():
|
||||
def __init__(self, path=CACHE_FILE, ttl=CACHE_TTL):
|
||||
self.path = Path(path)
|
||||
self.ttl = ttl
|
||||
|
||||
cache = {}
|
||||
if self.path.exists():
|
||||
cache = json.loads(self.path.read_text())
|
||||
self.cache = cache
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.path.write_text(json.dumps(self.cache))
|
||||
|
||||
def clear(self):
|
||||
db = self.cache['_DB']
|
||||
self.cache.clear()
|
||||
self.cache['_DB'] = db
|
||||
|
||||
def store(self, from_code, to_code, rate):
|
||||
self._set("-".join([from_code, to_code]), rate)
|
||||
self._set("-".join([to_code, from_code]), 1 / rate)
|
||||
|
||||
def get(self, from_code, to_code):
|
||||
key = "-".join([from_code, to_code])
|
||||
if key in self.cache:
|
||||
return self.cache[key]['value']
|
||||
return None
|
||||
|
||||
def _set(self, key, value):
|
||||
self.cache[key] = {'time': datetime.now().timestamp(), 'value': value}
|
||||
|
||||
|
||||
def _request_currency_rate(url=API_URL, *args):
|
||||
"""Fetch currency rates from remote API."""
|
||||
real_url = url.format(*map(request.quote, map(str, args)))
|
||||
data = json.loads(request.urlopen(real_url).read().decode('utf-8'))
|
||||
if not data['success']:
|
||||
raise Exception(data['error']['info'])
|
||||
return data["quotes"]
|
||||
|
||||
|
||||
def format_currency(curr):
|
||||
"""Format a currency entry for the FZF prompt."""
|
||||
return "{} {}".format(curr['id'], curr['currencyName'])
|
||||
|
||||
|
||||
def currency_rate(from_code, to_code):
|
||||
"""
|
||||
Retrieves the exchange rate between two currencies.
|
||||
|
||||
:param from_code: an ISO 4217 currency code of the source currency
|
||||
:param to_code: an ISO 4217 currency code of the destination currency
|
||||
:returns: an exchange rate (a float)
|
||||
"""
|
||||
if from_code == to_code:
|
||||
return 1.0
|
||||
elif not from_code or not to_code:
|
||||
return None
|
||||
rates = _request_currency_rate(API_URL, API_KEY, from_code, to_code)
|
||||
try:
|
||||
return (1 / rates["USD" + from_code]) * rates["USD" + to_code]
|
||||
except KeyError as e:
|
||||
print("Could not find currency named {}".format(from_code))
|
||||
return None
|
||||
|
||||
|
||||
def each_currency_rate(from_code, to_codes, refresh=False):
|
||||
"""
|
||||
Returns a cached generator for each exchange rate.
|
||||
|
||||
:param from_code: the ISO 4217 currency code of the source currency
|
||||
:param to_codes: a list of ISO 4217 currency codes to convert to
|
||||
:yields: a tuple containg (TO_CODE, EXCHANGE_RATE)
|
||||
"""
|
||||
with CurrencyCache(path=CACHE_FILE, ttl=CACHE_TTL) as cache:
|
||||
if refresh:
|
||||
cache.clear()
|
||||
for code in to_codes:
|
||||
rate = cache.get(from_code, code)
|
||||
if not rate:
|
||||
rate = currency_rate(from_code, code)
|
||||
if rate:
|
||||
cache.store(from_code, code, rate)
|
||||
if not rate:
|
||||
yield (None, None)
|
||||
else:
|
||||
yield (code, rate)
|
||||
|
||||
|
||||
def main():
|
||||
opts = argparse.ArgumentParser(
|
||||
description="Convert one amount of currency into another, or multiple.")
|
||||
opts.add_argument('amount', type=float, help="The amount to convert")
|
||||
opts.add_argument('src', metavar='from', type=str,
|
||||
help="Currency to convert from")
|
||||
opts.add_argument('dest', metavar='to', type=str, nargs='+',
|
||||
help="Currency(ies) to convert to")
|
||||
opts.add_argument('-r', '--refresh', action='store_true',
|
||||
help="Refresh the cache")
|
||||
args = opts.parse_args()
|
||||
|
||||
try:
|
||||
for code, rate in each_currency_rate(args.src, args.dest, refresh=args.refresh):
|
||||
if code:
|
||||
print("{:.4f} {}".format(rate * args.amount, code))
|
||||
except KeyboardInterrupt:
|
||||
print("Aborted!")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
12
bin/ssclip
12
bin/ssclip
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# A script that takes a screenshot and stores it in the clipboard
|
||||
tmp=$(mktemp)
|
||||
if maim -us >"$tmp"; then
|
||||
xclip -selection clipboard -t image/png "$tmp" && \
|
||||
ding && \
|
||||
notify-send "Screenshot saved"
|
||||
else
|
||||
notify-send -u low "Screenshot aborted"
|
||||
ding error
|
||||
fi
|
||||
rm -f "$tmp"
|
34
bin/sup
34
bin/sup
|
@ -1,34 +0,0 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
# Performs an online search. Uses the last used provider, otherwise prompts for
|
||||
# one with skim.
|
||||
|
||||
provider="$1"; shift
|
||||
query="$*"
|
||||
|
||||
typeset -A providers
|
||||
providers+=('DuckDuckGo' 'https://duckduckgo.com/?q=%s')
|
||||
providers+=('DevDocs.io' 'http://devdocs.io/#q=%s')
|
||||
providers+=('Google search' 'https://google.com/search?q=%s')
|
||||
providers+=('Google images' 'https://google.com/images?q=%s')
|
||||
providers+=('Google maps' 'https://maps.google.com/maps?q=%s')
|
||||
providers+=('Project Gutenberg' 'http://www.gutenberg.org/ebooks/search/?query=%s')
|
||||
providers+=('StackOverflow' 'https://stackoverflow.com/search?q=%s')
|
||||
providers+=('Github' 'https://github.com/search?ref=simplesearch&q=%s')
|
||||
providers+=('Youtube' 'https://youtube.com/results?aq=f&oq=&search_query=%s')
|
||||
providers+=('Wolfram alpha' 'https://wolframalpha.com/input/?i=%s')
|
||||
providers+=('Wikipedia' 'https://wikipedia.org/search-redirect.php?language=en&go=Go&search=%s')
|
||||
|
||||
pick=$(printf "%s\n" "${(@k)providers}" | sk --query="$provider" --prompt='provider > ' -1 -0)
|
||||
if [[ -z $pick ]]; then
|
||||
>&2 echo 'No provider selected. Aborting.'
|
||||
exit 1
|
||||
elif [[ -z ${providers[$pick]} ]]; then
|
||||
>&2 echo 'No provider matched that query. Aborting.'
|
||||
exit 2
|
||||
fi
|
||||
|
||||
url=$(printf "${providers[$pick]}\n" $(uri<<<"$query"))
|
||||
|
||||
echo "Opening $url"
|
||||
open $url
|
122
bin/timein
122
bin/timein
|
@ -1,120 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env bash
|
||||
|
||||
"""
|
||||
Retrieves the time (and time difference) at a location (can be an address,
|
||||
postal code, country name, etc). Uses Google Maps APIs to map locations to
|
||||
coordinates, and coordinates to timezones.
|
||||
open=open
|
||||
[[ $OSTYPE == linux* ]] && open=xdg-open
|
||||
|
||||
Requires: pytz, tzlocal
|
||||
Usage: time-in Copenhagen "Toronto, ON" Vancouver
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
import os
|
||||
from base64 import b64encode
|
||||
from datetime import datetime
|
||||
from urllib import request
|
||||
from pathlib import Path
|
||||
|
||||
from pytz import timezone
|
||||
from tzlocal import get_localzone
|
||||
|
||||
URL_BASE = "https://maps.googleapis.com/maps/api/"
|
||||
URL_TZ = URL_BASE + "timezone/json?location={},{}×tamp={}"
|
||||
URL_GEOCODE = URL_BASE + "geocode/json?address={}"
|
||||
|
||||
CACHE_FILE = "{}/timein".format(os.environ.get("XDG_CACHE_HOME") or "/tmp")
|
||||
CACHE = {}
|
||||
|
||||
|
||||
#
|
||||
def _generate_url(url, *args):
|
||||
return url.format(*map(request.quote, map(str, args)))
|
||||
|
||||
def _request(url, *args):
|
||||
real_url = url.format(*map(request.quote, map(str, args)))
|
||||
resp = request.urlopen(real_url).read()
|
||||
result = json.loads(resp.decode('utf-8'))
|
||||
if result['status'] == 'OK':
|
||||
return result
|
||||
elif result['status'] != 'UNKNOWN_ERROR':
|
||||
raise Exception(result['error_message'])
|
||||
|
||||
def get_timezone(coords, timestamp):
|
||||
return _request(URL_TZ, coords['lat'], coords['lng'], timestamp)['timeZoneId']
|
||||
|
||||
def get_coords(desc):
|
||||
result = _request(URL_GEOCODE, desc)
|
||||
if 'results' in result:
|
||||
return {"lat": result['results'][0]['geometry']['location']['lat'],
|
||||
"lng": result['results'][0]['geometry']['location']['lng'],
|
||||
"name": result['results'][0]['formatted_address']}
|
||||
|
||||
def cache(key, fn, ttl):
|
||||
if key in CACHE and CACHE[key]['time'] < CACHE[key]['time'] + ttl:
|
||||
return CACHE[key]['value']
|
||||
value = fn()
|
||||
if value is not None:
|
||||
CACHE[key] = {
|
||||
'time': datetime.now().timestamp(),
|
||||
'value': value
|
||||
}
|
||||
return value
|
||||
|
||||
def diff(a, b, absolute=False):
|
||||
"""Returns a timedelta object"""
|
||||
a = a.replace(tzinfo=None)
|
||||
b = b.replace(tzinfo=None)
|
||||
return (max(a, b) - min(a, b), b > a)
|
||||
|
||||
def encode(s):
|
||||
return str(b64encode(s.encode('ascii')))
|
||||
|
||||
|
||||
#
|
||||
def each_location(locations):
|
||||
"""
|
||||
Enumerates over and maps a list of location strings to time difference data.
|
||||
"""
|
||||
here = get_localzone().localize(datetime.now())
|
||||
for location in locations:
|
||||
coords = cache("coords-" + encode(location),
|
||||
lambda l=location: get_coords(l),
|
||||
86400)
|
||||
if coords:
|
||||
tzname = cache("tz-" + encode(location),
|
||||
lambda c=coords: get_timezone(c, here.timestamp()),
|
||||
1800)
|
||||
then = here.astimezone(timezone(tzname))
|
||||
tdiff, direction = diff(here, then)
|
||||
if tdiff.seconds == 0:
|
||||
suffix = "(same timezone)"
|
||||
elif direction:
|
||||
suffix = "ahead"
|
||||
else:
|
||||
suffix = "behind"
|
||||
|
||||
yield {
|
||||
"name": coords['name'],
|
||||
"then": then.strftime("%b %d, %H:%M:%S %Z%z"),
|
||||
"diff": int(tdiff.seconds / 60 / 60),
|
||||
"suffix": suffix,
|
||||
}
|
||||
else:
|
||||
yield None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
assert sys.argv[1:], "Usage: {} [LOCATION]".format(sys.argv[0])
|
||||
|
||||
cachefp = Path(CACHE_FILE)
|
||||
CACHE = json.loads(cachefp.read_text()) if cachefp.exists() else {}
|
||||
|
||||
for data in each_location(sys.argv[1:]):
|
||||
if data:
|
||||
print("{name:24} {then}\t{diff}h {suffix}".format(**data))
|
||||
else:
|
||||
print("Couldn't find {name} or something went wrong".format(**data), file=sys.stderr)
|
||||
|
||||
cachefp.write_text(json.dumps(CACHE))
|
||||
$open https://time.is/$1 2>/dev/null &
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if (( $# == 0 )); then
|
||||
>&2 echo "Forgot to specify a destination filename. Aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Upload file/stdin to transfer.sh
|
||||
url="https://transfer.sh"
|
||||
tmpfile=$(mktemp -t transferXXX)
|
||||
cleanup() { rm -f "$tmpfile"; }
|
||||
trap cleanup EXIT
|
||||
|
||||
if tty -s; then
|
||||
basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
|
||||
curl --progress-bar --upload-file "$1" "$url/$basefile" >>"$tmpfile"
|
||||
else
|
||||
curl --progress-bar --upload-file "-" "$url/$1" >>"$tmpfile"
|
||||
fi
|
||||
|
||||
cat "$tmpfile" | clip
|
||||
cat "$tmpfile"
|
37
bin/uri
37
bin/uri
|
@ -1,37 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Encode/decode url strings in stdin or the given file(s).
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import fileinput
|
||||
try:
|
||||
from urllib.parse import quote_plus, quote, unquote_plus, unquote
|
||||
except ImportError:
|
||||
from urllib import quote_plus, quote, unquote_plus, unquote
|
||||
|
||||
|
||||
def main():
|
||||
opts = argparse.ArgumentParser(description="Make text URI-safe by encoding/decoding input")
|
||||
opts.add_argument('file', type=str, nargs='*', help='File(s) to encode/decode')
|
||||
opts.add_argument('-e', '--encode', action='store_true', help='Use encoder')
|
||||
opts.add_argument('-E', '--encode-plus', action='store_true', help='Use encoder, but encode spaces as pluses')
|
||||
opts.add_argument('-d', '--decode', action='store_true', help='Use decoder')
|
||||
opts.add_argument('-D', '--decode-plus', action='store_true', help='Use decoder, but decode pluses as spaces')
|
||||
args = opts.parse_args()
|
||||
|
||||
action = quote
|
||||
if args.decode:
|
||||
action = unquote
|
||||
elif args.decode_plus:
|
||||
action = unquote_plus
|
||||
elif args.encode_plus:
|
||||
action = quote_plus
|
||||
|
||||
text = [line for line in fileinput.input(args.file)]
|
||||
print(action("\n".join(text).strip()))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
41
bootstrap.sh
41
bootstrap.sh
|
@ -1,41 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# dotfiles bootstrapper
|
||||
#
|
||||
# Installs zsh & git, then clones this repo to ~/.dotfiles. This script is
|
||||
# intended to be run remotely, via curl:
|
||||
#
|
||||
# bash <(curl -s https://raw.githubusercontent.com/hlissner/dotfiles/master/bootstrap.sh)
|
||||
|
||||
export DOTFILES=~/.dotfiles
|
||||
set -e
|
||||
|
||||
_msg() { printf "\r\033[2K\033[0;32m[ .. ] %s\033[0m\n" "$*"; }
|
||||
_uncallable() { ! command -v "$1" >/dev/null; }
|
||||
|
||||
if _uncallable zsh || _uncallable git; then
|
||||
# NOTE Macos has both already
|
||||
_msg "Installing git and/or zsh"
|
||||
if [[ -f /etc/arch-release ]]; then
|
||||
sudo pacman --needed --noconfirm -S git zsh
|
||||
elif [[ -f /etc/debian_version ]]; then
|
||||
sudo apt-get update && sudo apt-get install -y git zsh
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! -d ~/.dotfiles ]]; then
|
||||
_msg "Deploying dotfiles repository..."
|
||||
if [[ $USER == hlissner ]]; then
|
||||
dfrepo=git@github.com:hlissner/dotfiles.git
|
||||
else
|
||||
dfrepo=https://github.com/hlissner/dotfiles
|
||||
fi
|
||||
git clone --recursive "$dfrepo" "$DOTFILES"
|
||||
fi
|
||||
|
||||
#
|
||||
_msg
|
||||
_msg "And done!"
|
||||
_msg
|
||||
_msg "Use $DOTFILES/deploy to install your dotfiles, I suggest you begin"
|
||||
_msg "with 'base/arch' or 'base/macos'."
|
29
config/bspwm/bspwmrc
Executable file
29
config/bspwm/bspwmrc
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/bin/sh
|
||||
|
||||
export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1)
|
||||
export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) )
|
||||
MONITOR=${MONITOR:-${MONITORS[0]}}
|
||||
|
||||
# Only have workspaces for primary monitor
|
||||
bspc monitor $MONITOR -d {1,2,3,4,5}
|
||||
|
||||
bspc config remove_disabled_monitors true
|
||||
bspc config remove_unplugged_monitors true
|
||||
|
||||
|
||||
# Rules
|
||||
bspc rule -r '*'
|
||||
|
||||
bspc rule -a 'Emacs:org*' state=floating
|
||||
bspc rule -a mpv state=floating center=on
|
||||
bspc rule -a Pinentry state=floating center=on
|
||||
bspc rule -a Emacs split_ratio=0.32 border=off state=fullscreen
|
||||
bspc rule -a Firefox split_ratio=0.32
|
||||
bspc rule -a feh state=fullscreen
|
||||
bspc rule -a st-scratch state=floating sticky=on center=on
|
||||
|
||||
|
||||
#
|
||||
for file in $XDG_CONFIG_HOME/bspwm/rc.d/*; do
|
||||
source "$file"
|
||||
done
|
17
config/emacs/aliases.zsh
Normal file
17
config/emacs/aliases.zsh
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
if [[ $OSTYPE == darwin* ]]; then
|
||||
alias emacs='emacs -nw'
|
||||
|
||||
e() { # Emacs version of v
|
||||
if pgrep Emacs 2>&1 >/dev/null; then
|
||||
emacsclient -n $@
|
||||
else
|
||||
/Applications/Emacs.app/Contents/MacOS/Emacs $@ &
|
||||
fi
|
||||
}
|
||||
else
|
||||
alias e='emacsclient -n'
|
||||
fi
|
||||
|
||||
ediff() { e --eval "(ediff-files \"$1\" \"$2\")"; }
|
3
config/emacs/env.zsh
Normal file
3
config/emacs/env.zsh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
export PATH="$HOME/.emacs.d/bin:$PATH"
|
62
config/firefox/stylus.json
Normal file
62
config/firefox/stylus.json
Normal file
File diff suppressed because one or more lines are too long
30
config/git/aliases.zsh
Normal file
30
config/git/aliases.zsh
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
g() { [[ $# = 0 ]] && git status --short . || git $*; }
|
||||
compdef g=hub
|
||||
|
||||
alias git='noglob hub'
|
||||
alias ga='git add'
|
||||
alias gap='git add --patch'
|
||||
alias gb='git branch'
|
||||
alias gbr='git browse'
|
||||
alias gbl='git blame'
|
||||
alias gc='git commit'
|
||||
alias gcm='git commit -m'
|
||||
alias gca='git commit --amend'
|
||||
alias gcf='git commit --fixup'
|
||||
alias gcl='git clone'
|
||||
alias gco='git checkout'
|
||||
alias gcoo='git checkout --'
|
||||
alias gf='git fetch'
|
||||
alias gi='git init'
|
||||
alias gl='git log --graph --pretty="format:%C(yellow)%h%Creset %C(red)%G?%Creset%C(green)%d%Creset %s %Cblue(%cr) %C(bold blue)<%aN>%Creset"'
|
||||
alias gll='git log --pretty="format:%C(yellow)%h%Creset %C(red)%G?%Creset%C(green)%d%Creset %s %Cblue(%cr) %C(bold blue)<%aN>%Creset"'
|
||||
alias gL='gl --stat'
|
||||
alias gp='git push'
|
||||
alias gpl='git pull --rebase --autostash'
|
||||
alias gs='git status --short .'
|
||||
alias gss='git status'
|
||||
alias gst='git stash'
|
||||
alias gr='git reset HEAD'
|
||||
alias grv='git rev-parse'
|
|
@ -1,22 +1,17 @@
|
|||
[user]
|
||||
name = Henrik Lissner
|
||||
email = henrik@lissner.net
|
||||
|
||||
signingkey = 5F6C0EA160557395
|
||||
[commit]
|
||||
gpgsign = true
|
||||
[core]
|
||||
pager = diff-so-fancy | less --tabs=4 -RFX
|
||||
whitespace = trailing-space
|
||||
[color]
|
||||
ui = auto
|
||||
[github]
|
||||
user = hlissner
|
||||
[rebase]
|
||||
autosquash = true
|
||||
[push]
|
||||
default = current
|
||||
[merge]
|
||||
ff = onlt
|
||||
log = true
|
||||
|
||||
[alias]
|
||||
amend = commit --amend
|
||||
exec = "!exec "
|
||||
|
@ -30,7 +25,7 @@
|
|||
emails = !git log --format="%aE" | sort -u
|
||||
email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u
|
||||
[filter "lfs"]
|
||||
required = true
|
||||
smudge = git-lfs smudge -- %f
|
||||
process = git-lfs filter-process
|
||||
required = true
|
||||
clean = git-lfs clean -- %f
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue