#+title: rc.org
#+property: header-args :comments link :mkdirp yes :results silent
* About
This org file contains the configuration files of pretty much every
program I use. The files are tangled (i.e. exported, or derived) from
this file using =org-babel=.
Note: This file is best viewed inside Emacs with org mode.
* Configs
This section contains the configuration files (dotfiles) of various
programs I use.
** [[https://github.com/afewmail/afew][afew]]
:PROPERTIES:
:header-args+: :tangle ~/.config/afew/config
:END:
#+begin_quote
an initial tagging script for notmuch mail
#+end_quote
#+begin_src conf
# This is the default filter chain
[SpamFilter]
#[ClassifyingFilter]
[KillThreadsFilter]
#[ListMailsFilter]
[ArchiveSentMailsFilter]
sent_tag = sent
[InboxFilter]
#[Filter.1]
#query = 'folder:amin/lists/.haskell-cafe'
#tags = +lists;+lists/haskell-cafe
#message = lists/haskell-cafe
#[Filter.2]
#query = 'folder:amin/lists/.haskell-weekly'
#tags = +lists;+lists/haskell-weekly
#message = lists/haskell-weekly
#[Filter.3]
#query = 'folder:amin/lists/.hackernewsletter'
#tags = +lists;+lists/hackernewsletter
#message = lists/hackernewsletter
#[FolderNameFilter]
#folder_blacklist = Inbox
#maildir_separator = /.
#folder_transforms = Drafts:draft Junk:spam Trash:deleted Sent:sent Archive:archive lists/haskell-cafe:lists/haskell-cafe
#+end_src
** bspwm
*** bspwmrc
:PROPERTIES:
:header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh"
:END:
#+begin_src sh
sxhkd &
sh ~/.fehbg &
xfce4-panel -d &
#compton &
sleep 0.5 && pasystray --notify=all &
bspc monitor -d I II III IV V VI VII VIII IX X
#bspc monitor eDP-1 -d I II III IV V
#bspc monitor HDMI-1 -d VI VII VIII IX X
#bspc config border_width 2
#bspc config window_gap 8
bspc config window_gap 0
bspc config bottom_padding 26
bspc config split_ratio 0.52
bspc config borderless_monocle true
bspc config gapless_monocle true
bspc config click_to_focus button1
bspc config directional_focus_tightness low
bspc rule -a Firefox desktop='^1' follow=on
bspc rule -a Nightly desktop='^1' follow=on
bspc rule -a Emacs desktop='^2' state=tiled follow=on
#bspc rule -a Chromium desktop='^4' follow=on
bspc rule -a URxvt state=floating
bspc rule -a URxvt:tiled state=tiled
bspc rule -a Connman-gtk state=floating
bspc rule -a Xfce4-panel state=floating
bspc rule -a TelegramDesktop state=floating
bspc rule -a Ec state=floating
bspc rule -a Pavucontrol state=floating
bspc rule -a Eog state=floating
bspc rule -a Seahorse state=floating
bspc rule -a mpv state=floating
bspc rule -a Evince state=floating
bspc rule -a Meld state=floating
bspc rule -a Autokey-gtk state=floating
bspc rule -a Mousepad state=floating
bspc rule -a Wrapper-1.0 state=floating
bspc rule -a File-roller state=floating
bspc rule -a Gnome-disks state=floating
bspc rule -a Termite state=floating
bspc rule -a Termite:tiled state=tiled
bspc rule -a Thunderbird:Calendar state=floating
bspc rule -a Audacity state=floating
bspc rule -a Proof state=floating # pvs x-show-proof
bspc rule -a Nm-connection-editor state=floating
bspc rule -a Wire state=floating
bspc rule -a discord state=floating
bspc rule -a X2goclient state=floating
bspc rule -a SimpleScreenRecorder state=floating
bspc rule -a Gimp state=floating
bspc rule -a Wrapper-2.0 state=floating
bspc rule -a Zathura state=tiled
#+end_src
*** sxhkdrc
:PROPERTIES:
:header-args+: :tangle ~/.config/sxhkd/sxhkdrc
:END:
#+begin_src conf
#
# wm independent hotkeys
#
# terminal emulator
super + {_,shift} + Return
urxvt{_, -name tiled}
#super + {_,shift} + Return
# termite{_, --name=tiled}
# program launcher
super + space
rofi -show run -display-run '> ' -display-window ' 🗔 '
super + alt + space
xfce4-popup-whiskermenu
# window finder
super + backslash
rofi -show window -display-run '> ' -display-window ' 🗔 '
# password manager
alt + space
rofi-pass
# firefox
#super + r
# firefox
# chromium
#super + c
# chromium -incognito
# emacs
super + e
emacs
# make sxhkd reload its configuration files:
super + Escape
pkill -USR1 -x sxhkd
# volume {up,down}
XF86Audio{Raise,Lower}Volume
pamixer --allow-boost --{in,de}crease 5
# mute
XF86AudioMute
pamixer --toggle-mute
# playback control
XF86Audio{Play,Prev,Next}
mpc {toggle,prev,next}
# lock the screen
super + shift + q
light-locker-command -l
# Toggle keyboard layout
super + F7
toggle-layout
# Toggle Xfce presentation mode
XF86LaunchB
toggle-presentation-mode
# monitor brightness
XF86MonBrightness{Up,Down}
light -{A,U} 5
super + apostrophe
rofi-light
# keyboard brightness
#XF86KbdBrightness{Up,Down}
# kbdlight {up,down}
#
# bspwm hotkeys
#
# quit bspwm normally
super + alt + Escape
bspc quit
# close and kill
super + {w,q}
bspc node -{c,k}
# alternate between the tiled and monocle layout
super + m
bspc desktop -l next
# send the newest marked node to the newest preselected node
super + y
bspc node newest.marked.local -n newest.!automatic.local
# swap the current node and the biggest node
super + g
bspc node -s biggest
#
# state/flags
#
# set the window state
super + {t,shift + t,s,f}
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
# set the node flags
super + ctrl + {m,x,y,z}
bspc node -g {marked,locked,sticky,private}
#
# focus/swap
#
# focus the node in the given direction
super + {_,shift + }{h,j,k,l}
bspc node -{f,s} {west,south,north,east}
# focus the node for the given path jump
super + {p,b,comma,period}
bspc node -f @{parent,brother,first,second}
# focus the next/previous node in the current desktop
super + {_,shift + }c
bspc node -f {next,prev}.local
# focus the next/previous desktop in the current monitor
super + bracket{left,right}
bspc desktop -f {prev,next}.local
# send to next/prev desktop
super + shift + bracket{left,right}
bspc node -d {prev,next} --follow
# focus the last node/desktop
super + {grave,Tab}
bspc {node,desktop} -f last
# focus the older or newer node in the focus history
super + {o,i}
bspc wm -h off; \
bspc node {older,newer} -f; \
bspc wm -h on
# focus or send to the given desktop
super + {_,shift + }{1-9,0}
bspc {desktop -f,node -d} '^{1-9,10}'
#
# preselect
#
# preselect the direction
super + ctrl + {h,j,k,l}
bspc node -p {west,south,north,east}
# preselect the ratio
super + ctrl + {1-9}
bspc node -o 0.{1-9}
# cancel the preselection for the focused node
super + ctrl + space
bspc node -p cancel
# cancel the preselection for the focused desktop
super + ctrl + shift + space
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
#
# move/resize
#
# expand a window by moving one of its side outward
super + alt + {h,j,k,l}
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
# contract a window by moving one of its side inward
super + alt + shift + {h,j,k,l}
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
# move a floating window
super + {Left,Down,Up,Right}
bspc node -v {-20 0,0 20,0 -20,20 0}
#alt + bracket{left,right}
# xdotool key --clearmodifiers ctrl+Page_{Up,Down}
#+end_src
** compton
:PROPERTIES:
:header-args+: :tangle ~/.config/compton.conf
:END:
#+begin_src conf
# Shadow
shadow = false; # Enabled client-side shadows on windows.
no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true; # Don't draw shadows on DND windows.
clear-shadow = true; # Zero the part of the shadow's mask behind the
# window. Fix some weirdness with ARGB windows.
shadow-radius = 5; # The blur radius for shadows. (default 12)
shadow-offset-x = -5; # The left offset for shadows. (default -15)
shadow-offset-y = -5; # The top offset for shadows. (default -15)
# shadow-opacity = 0.7; # The translucency for shadows. (default .75)
# shadow-red = 0.0; # Red color value of shadow. (0.0 - 1.0, defaults to 0)
# shadow-green = 0.0; # Green color value of shadow. (0.0 - 1.0, defaults to 0)
# shadow-blue = 0.0; # Blue color value of shadow. (0.0 - 1.0, defaults to 0)
shadow-exclude = [ "n:e:Notification", "class_g = 'Chromium'", "class_g = 'Dmenu'", "class_g = 'Firefox' && argb" ]; # Exclude conditions for shadows.
# shadow-exclude = "n:e:Notification";
#shadow-exclude = [ "_GTK_FRAME_EXTENTS@:c" ] # Fix dual shadow on some gtk3 powered applications
shadow-ignore-shaped = true; # Avoid drawing shadow on all shaped windows
# (see also: --detect-rounded-corners)
# Opacity
menu-opacity = 1.0; # The opacity for menus. (default 1.0)
#inactive-opacity = 0.9; # Default opacity of inactive windows. (0.0 - 1.0)
# active-opacity = 0.8; # Default opacity for active windows. (0.0 - 1.0)
frame-opacity = 1.0; # Opacity of window titlebars and borders. (0.1 - 1.0)
# inactive-opacity-override = true; # Let inactive opacity set by 'inactive-opacity' overrides
# value of _NET_WM_OPACITY. Bad choice.
alpha-step = 0.06; # XRender backend: Step size for alpha pictures. Increasing
# it may result in less X resource usage,
# Yet fading may look bad.
#inactive-dim = 0.5; # Dim inactive windows. (0.0 - 1.0)
#inactive-dim-fixed = true; # Do not let dimness adjust based on window opacity.
# blur-background = true; # Blur background of transparent windows.
# Bad performance with X Render backend.
# GLX backend is preferred.
# blur-background-frame = true; # Blur background of opaque windows with transparent
# frames as well.
blur-background-fixed = true; # Do not let blur radius adjust based on window opacity.
blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ];
# Exclude conditions for background blur.
# Fading
fading = false; # Fade windows during opacity changes.
fade-delta = 3; # The time between steps in a fade in milliseconds. (default 10).
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
# no-fading-openclose = true; # Avoid fade windows in/out when opening/closing.
fade-exclude = [ ]; # Exclude conditions for fading.
# Other
backend = "glx" # Backend to use: "xrender" or "glx". GLX backend is typically
# much faster but depends on a sane driver.
mark-wmwin-focused = true; # Try to detect WM windows and mark them as active.
mark-ovredir-focused = true; # Mark all non-WM but override-redirect windows active (e.g. menus).
use-ewmh-active-win = 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.
detect-rounded-corners = false; # Detect rounded corners and treat them as rectangular when --shadow-ignore- shaped is on.
detect-client-opacity = true; # Detect _NET_WM_OPACITY on client windows, useful for window
# managers not passing _NET_WM_OPACITY of client windows to frame
# windows.
refresh-rate = 0; # For --sw-opti: Specify refresh rate of the screen. 0 for auto.
vsync = "drm"; # "none", "drm", "opengl", "opengl-oml", "opengl-swc", "opengl-mswc"
# See man page for more details.
dbe = false; # Enable DBE painting mode. Rarely needed.
paint-on-overlay = true; # Painting on X Composite overlay window. Recommended.
sw-opti = false; # Limit compton to repaint at most once every 1 / refresh_rate.
# Incompatible with certain VSync methods.
unredir-if-possible = false; # Unredirect all windows if a full-screen opaque window is
# detected, to maximize performance for full-screen windows.
focus-exclude = [ ]; # A list of conditions of windows that should always be considered
# focused.
detect-transient = true; # Use WM_TRANSIENT_FOR to group windows, and consider windows in
# the same group focused at the same time.
detect-client-leader = true; # Use WM_CLIENT_LEADER to group windows.
invert-color-include = [ ]; # Conditions for windows to be painted with inverted color.
# GLX backend # GLX backend fine-tune options. See man page for more info.
glx-no-stencil = true; # Recommended.
glx-copy-from-front = false; # Useful with --glx-swap-method,
# glx-use-copysubbuffermesa = true; # Recommended if it works. Breaks VSync.
# glx-no-rebind-pixmap = true; # Recommended if it works.
glx-no-rebind-pixmap = true; # Recommended if it works.
#glx-swap-method = "4"; # See man page.
glx-swap-method = "4"; # See man page.
# Window type settings
wintypes:
{
tooltip = { fade = true; shadow = false; opacity = 1; focus = true; };
menu = { shadow = false; };
dropdown_menu = { shadow = false; };
popup_menu = { shadow = false; };
utility = { shadow = false; };
# fade: Fade the particular type of windows.
# shadow: Give those windows shadow
# opacity: Default opacity for the type of windows.
# focus: Whether to always consider windows of this type focused.
};
#+end_src
** Dunst
:PROPERTIES:
:header-args+: :tangle ~/.config/dunst/dunstrc
:END:
#+begin_src conf
[global]
#font = Ubuntu Mono 10.5
font = Inconsolata 11
# Path to default icons.
icon_folders = /usr/share/icons/Moka/16x16/status/:/usr/share/icons/Moka/16x16/devices/:/usr/share/icons/Faba-Mono/16x16/status/:/usr/share/icons/Faba-Mono/16x16/devices/:/usr/share/icons/Moka/16x16/actions/:/usr/share/icons/Moka/16x16/categories/:/usr/share/icons/Moka/16x16/mimetypes/:/usr/share/icons/Moka/16x16/apps/:/usr/share/icons/Moka/16x16/places/:/usr/share/icons/Paper/16x16/status/
icon_position = left
# bold
# italic
# strikethrough
# underline
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
# Markup is allowed
format = "%s\n%b"
# Sort messages by urgency
sort = yes
# Show how many messages are currently hidden (because of geometry)
indicate_hiddenl= no
# Alignment of message text.
# Possible values are "left", "center" and "right"
alignment = center
# The frequency with wich text that is longer than the notification
# window allows bounces back and forth.
# This option conflicts with 'word_wrap'.
# Set to 0 to disable
bounce_freq = 3
# show age of message if message is older than show_age_threshold seconds.
# set to -1 to disable
show_age_threshold = -1
# split notifications into multiple lines if they don't fit into geometry
word_wrap = yes
# ignore newlines '\n' in notifications
ignore_newline = no
# The geometry of the message window.
# geometry [{width}]x{height}][+/-{x}+/-{y}]
# 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 respectevly.
# 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 = "410x12-12+12"
#geometry = "0x0-30-30"
geometry = "260x12-30-30"
# The transparency of the window. range: [0; 100]
# This option will only work if a compositing windowmanager is present (e.g. xcompmgr, compiz, etc..)
transparency = 0
# 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.
idle_threshold = 120
# 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 windowmanager that exports the _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern windowmanagers.
#
# If this option is set to mouse or keyboard, the monitor option will be
# ignored.
follow = keyboard
# should a notification popped up from history be sticky or
# timeout as if it would normally do.
sticky_history = yes
# The height of a single line. If the height is smaller than the font height,
# it will get raised to the font height.
# This adds empty space above and under the text.
line_height = 0
show_indicators = yes
# Draw a line of 'separatpr_height' pixel height between two notifications.
# Set to 0 to disable
separator_height = 3
# padding between text and separator
padding = 8
# horizontal padding
horizontal_padding = 8
# 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 = foreground
# print a notification on startup
# This is mainly for error detection, since dbus (re-)starts dunst
# automatically after a crash.
startup_notification = false
# dmenu path
#dmenu = /usr/bin/dmenu -p dunst:
dmenu = /usr/bin/rofi -dmenu -p dunst:
# browser for opening urls in context menu
browser = /usr/bin/firefox -new-tab
[frame]
width = 0
color = "#377222"
[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 = ctrl+space
# close all notifications
close_all = ctrl+shift+space
# redisplay last message(s)
# On the US keyboard layout 'grave' is normally above TAB and left of '1'.
history = ctrl+shift+h
# context menu
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 = "#1d2a30"
foreground = "#71c2af"
timeout = 3
[urgency_normal]
background = "#1d2a30"
foreground = "#71c2af"
timeout = 0
[urgency_critical]
background = "#1d2a30"
foreground = "#ff9982"
timeout = 0
# 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' or 'icon'
# and you can override the 'timeout', 'urgency', 'foreground', 'background'
# 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 = ""
#[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
#
[xfpm-backlight]
summary = *Brightness*
urgency = low
#+end_src
** Fontconfig
:PROPERTIES:
:header-args+: :tangle ~/.config/fontconfig/fonts.conf
:END:
#+begin_src xml
rgb
true
hintslight
true
lcddefault
~/.fonts
Helvetica
Liberation Sans
#+end_src
** Git
*** gitconfig
:PROPERTIES:
:header-args+: :tangle ~/.gitconfig
:END:
**** user
#+begin_src conf
[user]
name = Amin Bandali
email = amin@aminb.org
# signingkey = 4E05246AB0BF7FFB
#+end_src
**** signing
#+begin_src conf
# [commit]
# gpgsign = true
# [format]
# signoff = true
#+end_src
**** core
#+begin_src conf
[core]
autocrlf = input # CRLF -> LF on commit
editor = emacsclient -t
excludesfile = ~/.gitignore_global
pager = "less"
#+end_src
**** gpg
#+begin_src conf
[gpg]
program = gpg2
#+end_src
**** alias
#+begin_src conf
[alias]
git = !exec git # handle nested git calls, e.g. git git status
aliases = config --get-regexp '^alias\\.'
a = add
s = status
sl = status --long
c = checkout
cb = checkout -b
b = branch
r = rebase
p = pull
pr = pull --rebase
ps = push
psf = push --force
#+end_src
**** color
#+begin_src conf
[color]
ui = auto
[color "status"]
added = green bold
changed = red bold
untracked = red bold
[color "branch"]
current = green bold
remote = magenta bold
[color "diff"]
new = green bold
old = red bold
#+end_src
**** status
#+begin_src conf
[status]
# showUntrackedFiles = all
short=true
branch=true
#+end_src
**** github
#+begin_src conf
[github]
user = aminb
#+end_src
*** gitignore
:PROPERTIES:
:header-args+: :tangle ~/.gitignore_global
:END:
#+begin_src conf
*.orig
*.py[co]
*.sublime-workspace
*~
.DS_Store
*.elc
*-autoloads.el
#+end_src
** Latexmk
:PROPERTIES:
:header-args+: :tangle ~/.latexmkrc
:END:
#+begin_src conf
$pdf_previewer = "start zathura %O %S";
$clean_ext = "aux out";
# $pdf_update_method = 4;
# $pdf_update_command = "zathura %O %S";
# Synctex allows one to jump to from the PDF in Zathura to the source in Emacs
# by Ctrl+click in the PDF.
# Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex
# editor.
# $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S';
#+end_src
* Scripts
This section contains various useful scripts and the ones used by the
programs above. For instance, =toggle-tablet= for switching to and
from tablet mode on my X220T, =toggle-presentation-mode= for toggling
Xfce's presentation mode which keeps the screen awake, and
=rofi-light= a small utility that uses [[https://github.com/DaveDavenport/rofi][Rofi]] to ask and [[https://github.com/haikarainen/light][light]] to set an
exact brightness value.
** rofi-light
:PROPERTIES:
:header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash"
:END:
#+begin_src bash
cur=$(light -G)
val=$(rofi -dmenu -mesg "light $cur" -p "light -S " -l 0 -width 8)
light -S $val
#+end_src
** toggle-layout
:PROPERTIES:
:header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash"
:END:
#+begin_src bash
lang="$(setxkbmap -print | grep xkb_symbols | cut -d'+' -f 2)"
if [ "$lang" = "us" ]; then
setxkbmap ir
else
setxkbmap us
# xmodmap $HOME/.Xmodmap
fi
#+end_src
** toggle-presentation-mode
:PROPERTIES:
:header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash"
:END:
#+begin_src bash
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T
#+end_src
** Fun :)
*** eat-em
:PROPERTIES:
:header-args+: :tangle ~/.local/bin/eat-em :shebang "#!/bin/sh"
:END:
#+begin_src sh
# Original Posted at http://crunchbang.org/forums/viewtopic.php?pid=126921%23p126921#p126921
# [ESC] character in original post removed here.
# ANSI Color -- use these variables to easily have different color
# and format output. Make sure to output the reset sequence after
# colors (f = foreground, b = background), and use the 'off'
# feature for anything you turn on.
initializeANSI()
{
esc="$(echo -en '\e')"
blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m"
yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m"
cyanf="${esc}[36m"; whitef="${esc}[37m"
blackb="${esc}[40m"; redb="${esc}[41m"; greenb="${esc}[42m"
yellowb="${esc}[43m" blueb="${esc}[44m"; purpleb="${esc}[45m"
cyanb="${esc}[46m"; whiteb="${esc}[47m"
boldon="${esc}[1m"; boldoff="${esc}[22m"
italicson="${esc}[3m"; italicsoff="${esc}[23m"
ulon="${esc}[4m"; uloff="${esc}[24m"
invon="${esc}[7m"; invoff="${esc}[27m"
reset="${esc}[0m"
}
# note in this first use that switching colors doesn't require a reset
# first - the new color overrides the old one.
#clear
initializeANSI
cat << EOF
${yellowf} ▄███████▄${reset} ${redf} ▄██████▄${reset} ${greenf} ▄██████▄${reset} ${bluef} ▄██████▄${reset} ${purplef} ▄██████▄${reset} ${cyanf} ▄██████▄${reset}
${yellowf}▄█████████▀▀${reset} ${redf}▄${whitef}█▀█${redf}██${whitef}█▀█${redf}██▄${reset} ${greenf}▄${whitef}█▀█${greenf}██${whitef}█▀█${greenf}██▄${reset} ${bluef}▄${whitef}█▀█${bluef}██${whitef}█▀█${bluef}██▄${reset} ${purplef}▄${whitef}█▀█${purplef}██${whitef}█▀█${purplef}██▄${reset} ${cyanf}▄${whitef}█▀█${cyanf}██${whitef}█▀█${cyanf}██▄${reset}
${yellowf}███████▀${reset} ${redf}█${whitef}▄▄█${redf}██${whitef}▄▄█${redf}███${reset} ${greenf}█${whitef}▄▄█${greenf}██${whitef}▄▄█${greenf}███${reset} ${bluef}█${whitef}▄▄█${bluef}██${whitef}▄▄█${bluef}███${reset} ${purplef}█${whitef}▄▄█${purplef}██${whitef}▄▄█${purplef}███${reset} ${cyanf}█${whitef}▄▄█${cyanf}██${whitef}▄▄█${cyanf}███${reset}
${yellowf}███████▄${reset} ${redf}████████████${reset} ${greenf}████████████${reset} ${bluef}████████████${reset} ${purplef}████████████${reset} ${cyanf}████████████${reset}
${yellowf}▀█████████▄▄${reset} ${redf}██▀██▀▀██▀██${reset} ${greenf}██▀██▀▀██▀██${reset} ${bluef}██▀██▀▀██▀██${reset} ${purplef}██▀██▀▀██▀██${reset} ${cyanf}██▀██▀▀██▀██${reset}
${yellowf} ▀███████▀${reset} ${redf}▀ ▀ ▀ ▀${reset} ${greenf}▀ ▀ ▀ ▀${reset} ${bluef}▀ ▀ ▀ ▀${reset} ${purplef}▀ ▀ ▀ ▀${reset} ${cyanf}▀ ▀ ▀ ▀${reset}
${boldon}${yellowf} ▄███████▄ ${redf} ▄██████▄ ${greenf} ▄██████▄ ${bluef} ▄██████▄ ${purplef} ▄██████▄ ${cyanf} ▄██████▄${reset}
${boldon}${yellowf}▄█████████▀▀ ${redf}▄${whitef}█▀█${redf}██${whitef}█▀█${redf}██▄ ${greenf}▄${whitef}█▀█${greenf}██${whitef}█▀█${greenf}██▄ ${bluef}▄${whitef}█▀█${bluef}██${whitef}█▀█${bluef}██▄ ${purplef}▄${whitef}█▀█${purplef}██${whitef}█▀█${purplef}██▄ ${cyanf}▄${whitef}█▀█${cyanf}██${whitef}█▀█${cyanf}██▄${reset}
${boldon}${yellowf}███████▀ ${redf}█${whitef}▄▄█${redf}██${whitef}▄▄█${redf}███ ${greenf}█${whitef}▄▄█${greenf}██${whitef}▄▄█${greenf}███ ${bluef}█${whitef}▄▄█${bluef}██${whitef}▄▄█${bluef}███ ${purplef}█${whitef}▄▄█${purplef}██${whitef}▄▄█${purplef}███ ${cyanf}█${whitef}▄▄█${cyanf}██${whitef}▄▄█${cyanf}███${reset}
${boldon}${yellowf}███████▄ ${redf}████████████ ${greenf}████████████ ${bluef}████████████ ${purplef}████████████ ${cyanf}████████████${reset}
${boldon}${yellowf}▀█████████▄▄ ${redf}██▀██▀▀██▀██ ${greenf}██▀██▀▀██▀██ ${bluef}██▀██▀▀██▀██ ${purplef}██▀██▀▀██▀██ ${cyanf}██▀██▀▀██▀██${reset}
${boldon}${yellowf} ▀███████▀ ${redf}▀ ▀ ▀ ▀ ${greenf}▀ ▀ ▀ ▀ ${bluef}▀ ▀ ▀ ▀ ${purplef}▀ ▀ ▀ ▀ ${cyanf}▀ ▀ ▀ ▀${reset}
EOF
#+end_src
*** invade-em
:PROPERTIES:
:header-args+: :tangle ~/.local/bin/invade-em :shebang "#!/bin/bash"
:END:
#+begin_src bash
#
# ANSI color scheme script featuring Space Invaders
#
# Original: http://crunchbang.org/forums/viewtopic.php?pid=126921%23p126921#p126921
# Modified 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'
cat << EOF
$f1 ▀▄ ▄▀ $f2 ▄▄▄████▄▄▄ $f3 ▄██▄ $f4 ▀▄ ▄▀ $f5 ▄▄▄████▄▄▄ $f6 ▄██▄ $rst
$f1 ▄█▀███▀█▄ $f2███▀▀██▀▀███ $f3▄█▀██▀█▄ $f4 ▄█▀███▀█▄ $f5███▀▀██▀▀███ $f6▄█▀██▀█▄$rst
$f1█▀███████▀█ $f2▀▀███▀▀███▀▀ $f3▀█▀██▀█▀ $f4█▀███████▀█ $f5▀▀███▀▀███▀▀ $f6▀█▀██▀█▀$rst
$f1▀ ▀▄▄ ▄▄▀ ▀ $f2 ▀█▄ ▀▀ ▄█▀ $f3▀▄ ▄▀ $f4▀ ▀▄▄ ▄▄▀ ▀ $f5 ▀█▄ ▀▀ ▄█▀ $f6▀▄ ▄▀$rst
$bld$f1▄ ▀▄ ▄▀ ▄ $f2 ▄▄▄████▄▄▄ $f3 ▄██▄ $f4▄ ▀▄ ▄▀ ▄ $f5 ▄▄▄████▄▄▄ $f6 ▄██▄ $rst
$bld$f1█▄█▀███▀█▄█ $f2███▀▀██▀▀███ $f3▄█▀██▀█▄ $f4█▄█▀███▀█▄█ $f5███▀▀██▀▀███ $f6▄█▀██▀█▄$rst
$bld$f1▀█████████▀ $f2▀▀▀██▀▀██▀▀▀ $f3▀▀█▀▀█▀▀ $f4▀█████████▀ $f5▀▀▀██▀▀██▀▀▀ $f6▀▀█▀▀█▀▀$rst
$bld$f1 ▄▀ ▀▄ $f2▄▄▀▀ ▀▀ ▀▀▄▄ $f3▄▀▄▀▀▄▀▄ $f4 ▄▀ ▀▄ $f5▄▄▀▀ ▀▀ ▀▀▄▄ $f6▄▀▄▀▀▄▀▄$rst
$f7▌$rst
$f7▌$rst
$f7 ▄█▄ $rst
$f7▄█████████▄$rst
$f7▀▀▀▀▀▀▀▀▀▀▀$rst
EOF
#+end_src