2 #+property: header-args :comments link :mkdirp yes :results silent
6 This org file contains the configuration files of pretty much every
7 program I use. The files are tangled (i.e. exported, or derived) from
8 this file using =org-babel=.
10 Note: This file is best viewed inside Emacs with org mode.
14 This section contains the configuration files (dotfiles) of various
17 ** [[https://github.com/afewmail/afew][afew]]
19 :header-args+: :tangle ~/.config/afew/config
23 an initial tagging script for notmuch mail
27 # This is the default filter chain
32 [ArchiveSentMailsFilter]
37 #query = 'folder:amin/lists/.haskell-cafe'
38 #tags = +lists;+lists/haskell-cafe
39 #message = lists/haskell-cafe
42 #query = 'folder:amin/lists/.haskell-weekly'
43 #tags = +lists;+lists/haskell-weekly
44 #message = lists/haskell-weekly
47 #query = 'folder:amin/lists/.hackernewsletter'
48 #tags = +lists;+lists/hackernewsletter
49 #message = lists/hackernewsletter
53 #folder_blacklist = Inbox
54 #maildir_separator = /.
55 #folder_transforms = Drafts:draft Junk:spam Trash:deleted Sent:sent Archive:archive lists/haskell-cafe:lists/haskell-cafe
62 :header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh"
70 sleep 0.5 && pasystray --notify=all &
72 bspc monitor -d I II III IV V VI VII VIII IX X
73 #bspc monitor eDP-1 -d I II III IV V
74 #bspc monitor HDMI-1 -d VI VII VIII IX X
76 #bspc config border_width 2
77 #bspc config window_gap 8
78 bspc config window_gap 0
80 bspc config bottom_padding 26
82 bspc config split_ratio 0.52
83 bspc config borderless_monocle true
84 bspc config gapless_monocle true
85 bspc config click_to_focus button1
86 bspc config directional_focus_tightness low
88 bspc rule -a Firefox desktop='^1' follow=on
89 bspc rule -a Nightly desktop='^1' follow=on
90 bspc rule -a Emacs desktop='^2' state=tiled follow=on
91 #bspc rule -a Chromium desktop='^4' follow=on
92 bspc rule -a URxvt state=floating
93 bspc rule -a URxvt:tiled state=tiled
94 bspc rule -a Connman-gtk state=floating
95 bspc rule -a Xfce4-panel state=floating
96 bspc rule -a TelegramDesktop state=floating
97 bspc rule -a Ec state=floating
98 bspc rule -a Pavucontrol state=floating
99 bspc rule -a Eog state=floating
100 bspc rule -a Seahorse state=floating
101 bspc rule -a mpv state=floating
102 bspc rule -a Evince state=floating
103 bspc rule -a Meld state=floating
104 bspc rule -a Autokey-gtk state=floating
105 bspc rule -a Mousepad state=floating
106 bspc rule -a Wrapper-1.0 state=floating
107 bspc rule -a File-roller state=floating
108 bspc rule -a Gnome-disks state=floating
109 bspc rule -a Termite state=floating
110 bspc rule -a Termite:tiled state=tiled
111 bspc rule -a Thunderbird:Calendar state=floating
112 bspc rule -a Audacity state=floating
113 bspc rule -a Proof state=floating # pvs x-show-proof
114 bspc rule -a Nm-connection-editor state=floating
115 bspc rule -a Wire state=floating
116 bspc rule -a discord state=floating
117 bspc rule -a X2goclient state=floating
118 bspc rule -a SimpleScreenRecorder state=floating
119 bspc rule -a Gimp state=floating
120 bspc rule -a Wrapper-2.0 state=floating
121 bspc rule -a Zathura state=tiled
126 :header-args+: :tangle ~/.config/sxhkd/sxhkdrc
131 # wm independent hotkeys
135 super + {_,shift} + Return
136 urxvt{_, -name tiled}
138 #super + {_,shift} + Return
139 # termite{_, --name=tiled}
143 rofi -show run -display-run '> ' -display-window ' 🗔 '
146 xfce4-popup-whiskermenu
150 rofi -show window -display-run '> ' -display-window ' 🗔 '
162 # chromium -incognito
168 # make sxhkd reload its configuration files:
173 XF86Audio{Raise,Lower}Volume
174 pamixer --allow-boost --{in,de}crease 5
178 pamixer --toggle-mute
181 XF86Audio{Play,Prev,Next}
182 mpc {toggle,prev,next}
186 light-locker-command -l
188 # Toggle keyboard layout
192 # Toggle Xfce presentation mode
194 toggle-presentation-mode
197 XF86MonBrightness{Up,Down}
203 # keyboard brightness
204 #XF86KbdBrightness{Up,Down}
211 # quit bspwm normally
219 # alternate between the tiled and monocle layout
223 # send the newest marked node to the newest preselected node
225 bspc node newest.marked.local -n newest.!automatic.local
227 # swap the current node and the biggest node
235 # set the window state
236 super + {t,shift + t,s,f}
237 bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
240 super + ctrl + {m,x,y,z}
241 bspc node -g {marked,locked,sticky,private}
247 # focus the node in the given direction
248 super + {_,shift + }{h,j,k,l}
249 bspc node -{f,s} {west,south,north,east}
251 # focus the node for the given path jump
252 super + {p,b,comma,period}
253 bspc node -f @{parent,brother,first,second}
255 # focus the next/previous node in the current desktop
256 super + {_,shift + }c
257 bspc node -f {next,prev}.local
259 # focus the next/previous desktop in the current monitor
260 super + bracket{left,right}
261 bspc desktop -f {prev,next}.local
263 # send to next/prev desktop
264 super + shift + bracket{left,right}
265 bspc node -d {prev,next} --follow
267 # focus the last node/desktop
269 bspc {node,desktop} -f last
271 # focus the older or newer node in the focus history
274 bspc node {older,newer} -f; \
277 # focus or send to the given desktop
278 super + {_,shift + }{1-9,0}
279 bspc {desktop -f,node -d} '^{1-9,10}'
285 # preselect the direction
286 super + ctrl + {h,j,k,l}
287 bspc node -p {west,south,north,east}
289 # preselect the ratio
293 # cancel the preselection for the focused node
297 # cancel the preselection for the focused desktop
298 super + ctrl + shift + space
299 bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
305 # expand a window by moving one of its side outward
306 super + alt + {h,j,k,l}
307 bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
309 # contract a window by moving one of its side inward
310 super + alt + shift + {h,j,k,l}
311 bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
313 # move a floating window
314 super + {Left,Down,Up,Right}
315 bspc node -v {-20 0,0 20,0 -20,20 0}
317 #alt + bracket{left,right}
318 # xdotool key --clearmodifiers ctrl+Page_{Up,Down}
323 :header-args+: :tangle ~/.config/compton.conf
328 shadow = false; # Enabled client-side shadows on windows.
329 no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows.
330 no-dnd-shadow = true; # Don't draw shadows on DND windows.
331 clear-shadow = true; # Zero the part of the shadow's mask behind the
332 # window. Fix some weirdness with ARGB windows.
333 shadow-radius = 5; # The blur radius for shadows. (default 12)
334 shadow-offset-x = -5; # The left offset for shadows. (default -15)
335 shadow-offset-y = -5; # The top offset for shadows. (default -15)
336 # shadow-opacity = 0.7; # The translucency for shadows. (default .75)
337 # shadow-red = 0.0; # Red color value of shadow. (0.0 - 1.0, defaults to 0)
338 # shadow-green = 0.0; # Green color value of shadow. (0.0 - 1.0, defaults to 0)
339 # shadow-blue = 0.0; # Blue color value of shadow. (0.0 - 1.0, defaults to 0)
340 shadow-exclude = [ "n:e:Notification", "class_g = 'Chromium'", "class_g = 'Dmenu'", "class_g = 'Firefox' && argb" ]; # Exclude conditions for shadows.
341 # shadow-exclude = "n:e:Notification";
342 #shadow-exclude = [ "_GTK_FRAME_EXTENTS@:c" ] # Fix dual shadow on some gtk3 powered applications
343 shadow-ignore-shaped = true; # Avoid drawing shadow on all shaped windows
344 # (see also: --detect-rounded-corners)
347 menu-opacity = 1.0; # The opacity for menus. (default 1.0)
348 #inactive-opacity = 0.9; # Default opacity of inactive windows. (0.0 - 1.0)
349 # active-opacity = 0.8; # Default opacity for active windows. (0.0 - 1.0)
350 frame-opacity = 1.0; # Opacity of window titlebars and borders. (0.1 - 1.0)
351 # inactive-opacity-override = true; # Let inactive opacity set by 'inactive-opacity' overrides
352 # value of _NET_WM_OPACITY. Bad choice.
353 alpha-step = 0.06; # XRender backend: Step size for alpha pictures. Increasing
354 # it may result in less X resource usage,
355 # Yet fading may look bad.
356 #inactive-dim = 0.5; # Dim inactive windows. (0.0 - 1.0)
357 #inactive-dim-fixed = true; # Do not let dimness adjust based on window opacity.
358 # blur-background = true; # Blur background of transparent windows.
359 # Bad performance with X Render backend.
360 # GLX backend is preferred.
361 # blur-background-frame = true; # Blur background of opaque windows with transparent
363 blur-background-fixed = true; # Do not let blur radius adjust based on window opacity.
364 blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ];
365 # Exclude conditions for background blur.
368 fading = false; # Fade windows during opacity changes.
369 fade-delta = 3; # The time between steps in a fade in milliseconds. (default 10).
370 fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
371 fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
372 # no-fading-openclose = true; # Avoid fade windows in/out when opening/closing.
373 fade-exclude = [ ]; # Exclude conditions for fading.
376 backend = "glx" # Backend to use: "xrender" or "glx". GLX backend is typically
377 # much faster but depends on a sane driver.
378 mark-wmwin-focused = true; # Try to detect WM windows and mark them as active.
379 mark-ovredir-focused = true; # Mark all non-WM but override-redirect windows active (e.g. menus).
380 use-ewmh-active-win = true; # Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused
381 # instead of using FocusIn/Out events. Usually more reliable but
382 # depends on a EWMH-compliant WM.
383 detect-rounded-corners = false; # Detect rounded corners and treat them as rectangular when --shadow-ignore- shaped is on.
384 detect-client-opacity = true; # Detect _NET_WM_OPACITY on client windows, useful for window
385 # managers not passing _NET_WM_OPACITY of client windows to frame
387 refresh-rate = 0; # For --sw-opti: Specify refresh rate of the screen. 0 for auto.
388 vsync = "drm"; # "none", "drm", "opengl", "opengl-oml", "opengl-swc", "opengl-mswc"
389 # See man page for more details.
390 dbe = false; # Enable DBE painting mode. Rarely needed.
391 paint-on-overlay = true; # Painting on X Composite overlay window. Recommended.
392 sw-opti = false; # Limit compton to repaint at most once every 1 / refresh_rate.
393 # Incompatible with certain VSync methods.
394 unredir-if-possible = false; # Unredirect all windows if a full-screen opaque window is
395 # detected, to maximize performance for full-screen windows.
396 focus-exclude = [ ]; # A list of conditions of windows that should always be considered
398 detect-transient = true; # Use WM_TRANSIENT_FOR to group windows, and consider windows in
399 # the same group focused at the same time.
400 detect-client-leader = true; # Use WM_CLIENT_LEADER to group windows.
401 invert-color-include = [ ]; # Conditions for windows to be painted with inverted color.
403 # GLX backend # GLX backend fine-tune options. See man page for more info.
404 glx-no-stencil = true; # Recommended.
405 glx-copy-from-front = false; # Useful with --glx-swap-method,
406 # glx-use-copysubbuffermesa = true; # Recommended if it works. Breaks VSync.
407 # glx-no-rebind-pixmap = true; # Recommended if it works.
408 glx-no-rebind-pixmap = true; # Recommended if it works.
409 #glx-swap-method = "4"; # See man page.
410 glx-swap-method = "4"; # See man page.
412 # Window type settings
415 tooltip = { fade = true; shadow = false; opacity = 1; focus = true; };
416 menu = { shadow = false; };
417 dropdown_menu = { shadow = false; };
418 popup_menu = { shadow = false; };
419 utility = { shadow = false; };
420 # fade: Fade the particular type of windows.
421 # shadow: Give those windows shadow
422 # opacity: Default opacity for the type of windows.
423 # focus: Whether to always consider windows of this type focused.
429 :header-args+: :tangle ~/.config/dunst/dunstrc
434 #font = Ubuntu Mono 10.5
435 font = Inconsolata 11
437 # Path to default icons.
438 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/
443 # <s>strikethrough<s/>
446 # The format of the message. Possible variables are:
450 # %i iconname (including its path)
451 # %I iconname (without its path)
452 # %p progress value if set ([ 0%] to [100%]) or nothing
454 format = "<b>%s</b>\n%b"
455 # Sort messages by urgency
457 # Show how many messages are currently hidden (because of geometry)
459 # Alignment of message text.
460 # Possible values are "left", "center" and "right"
462 # The frequency with wich text that is longer than the notification
463 # window allows bounces back and forth.
464 # This option conflicts with 'word_wrap'.
465 # Set to 0 to disable
467 # show age of message if message is older than show_age_threshold seconds.
468 # set to -1 to disable
469 show_age_threshold = -1
470 # split notifications into multiple lines if they don't fit into geometry
472 # ignore newlines '\n' in notifications
474 # The geometry of the message window.
475 # geometry [{width}]x{height}][+/-{x}+/-{y}]
476 # The height is measured in number of notifications everything else in pixels. If the width
477 # is omitted but the height is given ("-geometry x2"), the message window
478 # expands over the whole screen (dmenu-like). If width is 0,
479 # the window expands to the longest message displayed.
480 # A positive x is measured from the left, a negative from the
481 # right side of the screen. Y is measured from the top and down respectevly.
482 # The width can be negative. In this case the actual width is the
483 # screen width minus the width defined in within the geometry option.
484 #geometry = "410x12-12+12"
485 #geometry = "0x0-30-30"
486 geometry = "260x12-30-30"
487 # The transparency of the window. range: [0; 100]
488 # This option will only work if a compositing windowmanager is present (e.g. xcompmgr, compiz, etc..)
490 # Don't remove messages, if the user is idle (no mouse or keyboard input)
491 # for longer than idle_threshold seconds.
492 # Set to 0 to disable.
494 # Which monitor should the notifications be displayed on.
496 # Display notification on focused monitor. Possible modes are:
497 # mouse: follow mouse pointer
498 # keyboard: follow window with keyboard focus
499 # none: don't follow anything
501 # "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property.
502 # This should be the case for almost all modern windowmanagers.
504 # If this option is set to mouse or keyboard, the monitor option will be
507 # should a notification popped up from history be sticky or
508 # timeout as if it would normally do.
510 # The height of a single line. If the height is smaller than the font height,
511 # it will get raised to the font height.
512 # This adds empty space above and under the text.
515 show_indicators = yes
517 # Draw a line of 'separatpr_height' pixel height between two notifications.
518 # Set to 0 to disable
520 # padding between text and separator
523 horizontal_padding = 8
524 # Define a color for the separator.
525 # possible values are:
526 # * auto: dunst tries to find a color fitting to the background
527 # * foreground: use the same color as the foreground
528 # * frame: use the same color as the frame.
529 # * anything else will be interpreted as a X color
530 separator_color = foreground
531 # print a notification on startup
532 # This is mainly for error detection, since dbus (re-)starts dunst
533 # automatically after a crash.
534 startup_notification = false
536 #dmenu = /usr/bin/dmenu -p dunst:
537 dmenu = /usr/bin/rofi -dmenu -p dunst:
538 # browser for opening urls in context menu
539 browser = /usr/bin/firefox -new-tab
544 # shortcuts are specified as [modifier+][modifier+]...key
545 # available modifiers are 'ctrl', 'mod1' (the alt-key), 'mod2', 'mod3'
546 # and 'mod4' (windows-key)
547 # xev might be helpful to find names for keys
550 # close all notifications
551 close_all = ctrl+shift+space
552 # redisplay last message(s)
553 # On the US keyboard layout 'grave' is normally above TAB and left of '1'.
554 history = ctrl+shift+h
556 context = ctrl+shift+period
558 # IMPORTANT: colors have to be defined in quotation marks.
559 # Otherwise the '#' and following would be interpreted as a comment.
560 background = "#1d2a30"
561 foreground = "#71c2af"
564 background = "#1d2a30"
565 foreground = "#71c2af"
568 background = "#1d2a30"
569 foreground = "#ff9982"
572 # Every section that isn't one of the above is interpreted as a rules
573 # to override settings for certain messages.
574 # Messages can be matched by 'appname', 'summary', 'body' or 'icon'
575 # and you can override the 'timeout', 'urgency', 'foreground', 'background'
577 # Shell-like globbing will get expanded.
580 # you can specify a script that gets run when the rule matches by setting
581 # the 'script' option.
582 # The script will be called as follows:
583 # script appname summary body icon urgency
584 # where urgency can be "LOW", "NORMAL" or "CRITICAL".
586 # NOTE: if you don't want a notification to be displayed, set the format to ""
587 # NOTE: It might be helpful to run dunst -print in a terminal in order to find
588 # fitting options for rules.
591 # script = dunst_espeak.sh
593 # summary = "*script*"
594 # script = dunst_test.sh
596 ## This notification will not be displayed
601 # summary = "*signed on*"
606 # summary = *signed off*
616 # summary = *twitter.com*
620 summary = *Brightness*
626 :header-args+: :tangle ~/.config/fontconfig/fonts.conf
630 <?xml version="1.0"?>
631 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
633 <match target="font">
634 <edit mode="assign" name="rgba">
638 <match target="font">
639 <edit mode="assign" name="hinting">
643 <match target="font">
644 <edit mode="assign" name="hintstyle">
645 <const>hintslight</const>
648 <match target="font">
649 <edit mode="assign" name="antialias">
653 <match target="font">
654 <edit mode="assign" name="lcdfilter">
655 <const>lcddefault</const>
660 <!-- Use Liberation Sans for Helvetica (instead of Nimbus Sans) -->
661 <alias binding="same">
662 <family>Helvetica</family>
664 <family>Liberation Sans</family>
674 :header-args+: :tangle ~/.gitconfig
681 email = amin@aminb.org
682 # signingkey = 4E05246AB0BF7FFB
696 autocrlf = input # CRLF -> LF on commit
697 editor = emacsclient -t
698 excludesfile = ~/.gitignore_global
711 git = !exec git # handle nested git calls, e.g. git git status
712 aliases = config --get-regexp '^alias\\.'
736 remote = magenta bold
745 # showUntrackedFiles = all
758 :header-args+: :tangle ~/.gitignore_global
773 :header-args+: :tangle ~/.latexmkrc
777 $pdf_previewer = "start zathura %O %S";
778 $clean_ext = "aux out";
780 # $pdf_update_method = 4;
781 # $pdf_update_command = "zathura %O %S";
783 # Synctex allows one to jump to from the PDF in Zathura to the source in Emacs
784 # by Ctrl+click in the PDF.
785 # Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex
787 # $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S';
794 :header-args+: :tangle ~/.getmail/getmailrc
799 type = SimplePOP3SSLRetriever
800 server = fencepost.gnu.org
802 password_command = ("gpg2", "--no-tty", "-q", "-d", "~/.passwd/gnu.gpg")
808 path = ~/mail/gnu/Inbox/
816 :header-args+: :tangle ~/.config/systemd/user/getmail.service
819 #+begin_src conf :tangle no
821 Description=getmail service
825 ExecStart=/usr/bin/getmail
826 StandardOutput=syslog
832 :header-args+: :tangle ~/.config/systemd/user/getmail.timer
835 #+begin_src conf :tangle no
837 Description=getmail timer
845 WantedBy=timers.target
850 :header-args+: :tangle ~/.gnupg/gpg-agent.conf
854 default-cache-ttl 43200
857 default-cache-ttl-ssh 10800
858 max-cache-ttl-ssh 10800
860 # pinentry-program /usr/bin/pinentry-qt
867 :header-args+: :tangle ~/.gtkrc-2.0
871 gtk-theme-name="Greybird"
872 gtk-icon-theme-name="Paper"
873 gtk-font-name="Ubuntu 10"
875 # gtk-key-theme-name = "Emacs"
880 :header-args+: :tangle ~/.config/gtk-3.0/settings.ini
883 #+begin_src conf :tangle no
885 gtk-icon-theme-name = Paper
886 # gtk-theme-name = Adwaita
888 gtk-theme-name = Greybird
889 # gtk-theme-name = Arc-Darker
890 # gtk-theme-name = Numix-ArchBlue
892 gtk-font-name = Ubuntu 10
893 # gtk-key-theme-name = Emacs
900 :header-args+: :tangle ~/.mbsyncrc
911 PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin.gpg"
914 IMAPStore amin-remote
917 MaildirStore amin-local
919 Inbox ~/mail/amin/Inbox
930 IMAPAccount uwaterloo
931 Host connect.uwaterloo.ca
933 PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/uwaterloo.gpg"
936 IMAPStore uwaterloo-remote
939 MaildirStore uwaterloo-local
940 Path ~/mail/uwaterloo/
941 Inbox ~/mail/uwaterloo/Inbox
945 Master :uwaterloo-remote:
946 Slave :uwaterloo-local:
954 :header-args+: :tangle ~/.config/systemd/user/mbsync.service
957 #+begin_src conf :tangle no
959 Description=mbsync service
963 ExecStart=/usr/bin/mbsync -Va
964 StandardOutput=syslog
970 :header-args+: :tangle ~/.config/systemd/user/mbsync.timer
973 #+begin_src conf :tangle no
975 Description=mbsync timer
983 WantedBy=timers.target
988 This section contains various useful scripts and the ones used by the
989 programs above. For instance, =toggle-tablet= for switching to and
990 from tablet mode on my X220T, =toggle-presentation-mode= for toggling
991 Xfce's presentation mode which keeps the screen awake, and
992 =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
993 exact brightness value.
997 :header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash"
1002 val=$(rofi -dmenu -mesg "light $cur" -p "light -S " -l 0 -width 8)
1008 :header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash"
1012 lang="$(setxkbmap -print | grep xkb_symbols | cut -d'+' -f 2)"
1014 if [ "$lang" = "us" ]; then
1018 # xmodmap $HOME/.Xmodmap
1022 ** toggle-presentation-mode
1024 :header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash"
1028 xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T
1035 :header-args+: :tangle ~/.local/bin/eat-em :shebang "#!/bin/sh"
1039 # Original Posted at http://crunchbang.org/forums/viewtopic.php?pid=126921%23p126921#p126921
1040 # [ESC] character in original post removed here.
1042 # ANSI Color -- use these variables to easily have different color
1043 # and format output. Make sure to output the reset sequence after
1044 # colors (f = foreground, b = background), and use the 'off'
1045 # feature for anything you turn on.
1049 esc="$(echo -en '\e')"
1051 blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m"
1052 yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m"
1053 cyanf="${esc}[36m"; whitef="${esc}[37m"
1055 blackb="${esc}[40m"; redb="${esc}[41m"; greenb="${esc}[42m"
1056 yellowb="${esc}[43m" blueb="${esc}[44m"; purpleb="${esc}[45m"
1057 cyanb="${esc}[46m"; whiteb="${esc}[47m"
1059 boldon="${esc}[1m"; boldoff="${esc}[22m"
1060 italicson="${esc}[3m"; italicsoff="${esc}[23m"
1061 ulon="${esc}[4m"; uloff="${esc}[24m"
1062 invon="${esc}[7m"; invoff="${esc}[27m"
1067 # note in this first use that switching colors doesn't require a reset
1068 # first - the new color overrides the old one.
1076 ${yellowf} ▄███████▄${reset} ${redf} ▄██████▄${reset} ${greenf} ▄██████▄${reset} ${bluef} ▄██████▄${reset} ${purplef} ▄██████▄${reset} ${cyanf} ▄██████▄${reset}
1077 ${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}
1078 ${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}
1079 ${yellowf}███████▄${reset} ${redf}████████████${reset} ${greenf}████████████${reset} ${bluef}████████████${reset} ${purplef}████████████${reset} ${cyanf}████████████${reset}
1080 ${yellowf}▀█████████▄▄${reset} ${redf}██▀██▀▀██▀██${reset} ${greenf}██▀██▀▀██▀██${reset} ${bluef}██▀██▀▀██▀██${reset} ${purplef}██▀██▀▀██▀██${reset} ${cyanf}██▀██▀▀██▀██${reset}
1081 ${yellowf} ▀███████▀${reset} ${redf}▀ ▀ ▀ ▀${reset} ${greenf}▀ ▀ ▀ ▀${reset} ${bluef}▀ ▀ ▀ ▀${reset} ${purplef}▀ ▀ ▀ ▀${reset} ${cyanf}▀ ▀ ▀ ▀${reset}
1083 ${boldon}${yellowf} ▄███████▄ ${redf} ▄██████▄ ${greenf} ▄██████▄ ${bluef} ▄██████▄ ${purplef} ▄██████▄ ${cyanf} ▄██████▄${reset}
1084 ${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}
1085 ${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}
1086 ${boldon}${yellowf}███████▄ ${redf}████████████ ${greenf}████████████ ${bluef}████████████ ${purplef}████████████ ${cyanf}████████████${reset}
1087 ${boldon}${yellowf}▀█████████▄▄ ${redf}██▀██▀▀██▀██ ${greenf}██▀██▀▀██▀██ ${bluef}██▀██▀▀██▀██ ${purplef}██▀██▀▀██▀██ ${cyanf}██▀██▀▀██▀██${reset}
1088 ${boldon}${yellowf} ▀███████▀ ${redf}▀ ▀ ▀ ▀ ${greenf}▀ ▀ ▀ ▀ ${bluef}▀ ▀ ▀ ▀ ${purplef}▀ ▀ ▀ ▀ ${cyanf}▀ ▀ ▀ ▀${reset}
1095 :header-args+: :tangle ~/.local/bin/invade-em :shebang "#!/bin/bash"
1100 # ANSI color scheme script featuring Space Invaders
1102 # Original: http://crunchbang.org/forums/viewtopic.php?pid=126921%23p126921#p126921
1103 # Modified by lolilolicon
1109 printf -v $j$i %b "\e[${!j}${i}m"
1117 $f1 ▀▄ ▄▀ $f2 ▄▄▄████▄▄▄ $f3 ▄██▄ $f4 ▀▄ ▄▀ $f5 ▄▄▄████▄▄▄ $f6 ▄██▄ $rst
1118 $f1 ▄█▀███▀█▄ $f2███▀▀██▀▀███ $f3▄█▀██▀█▄ $f4 ▄█▀███▀█▄ $f5███▀▀██▀▀███ $f6▄█▀██▀█▄$rst
1119 $f1█▀███████▀█ $f2▀▀███▀▀███▀▀ $f3▀█▀██▀█▀ $f4█▀███████▀█ $f5▀▀███▀▀███▀▀ $f6▀█▀██▀█▀$rst
1120 $f1▀ ▀▄▄ ▄▄▀ ▀ $f2 ▀█▄ ▀▀ ▄█▀ $f3▀▄ ▄▀ $f4▀ ▀▄▄ ▄▄▀ ▀ $f5 ▀█▄ ▀▀ ▄█▀ $f6▀▄ ▄▀$rst
1122 $bld$f1▄ ▀▄ ▄▀ ▄ $f2 ▄▄▄████▄▄▄ $f3 ▄██▄ $f4▄ ▀▄ ▄▀ ▄ $f5 ▄▄▄████▄▄▄ $f6 ▄██▄ $rst
1123 $bld$f1█▄█▀███▀█▄█ $f2███▀▀██▀▀███ $f3▄█▀██▀█▄ $f4█▄█▀███▀█▄█ $f5███▀▀██▀▀███ $f6▄█▀██▀█▄$rst
1124 $bld$f1▀█████████▀ $f2▀▀▀██▀▀██▀▀▀ $f3▀▀█▀▀█▀▀ $f4▀█████████▀ $f5▀▀▀██▀▀██▀▀▀ $f6▀▀█▀▀█▀▀$rst
1125 $bld$f1 ▄▀ ▀▄ $f2▄▄▀▀ ▀▀ ▀▀▄▄ $f3▄▀▄▀▀▄▀▄ $f4 ▄▀ ▀▄ $f5▄▄▀▀ ▀▀ ▀▀▄▄ $f6▄▀▄▀▀▄▀▄$rst
1133 $f7▄█████████▄$rst
1134 $f7▀▀▀▀▀▀▀▀▀▀▀$rst