[rc/fun] migrate fun scripts :)
[~bandali/configs] / rc.org
diff --git a/rc.org b/rc.org
index 3e879ea..e036f88 100644 (file)
--- a/rc.org
+++ b/rc.org
@@ -11,7 +11,663 @@ Note: This file is best viewed inside Emacs with org mode.
 
 * Configs
 
-** =git=
+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
+# <b>bold</b>
+# <i>italic</i>
+# <s>strikethrough<s/>
+# <u>underline</u>
+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 = "<b>%s</b>\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
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <match target="font">
+  <edit mode="assign" name="rgba">
+   <const>rgb</const>
+  </edit>
+ </match>
+ <match target="font">
+  <edit mode="assign" name="hinting">
+   <bool>true</bool>
+  </edit>
+ </match>
+ <match target="font">
+  <edit mode="assign" name="hintstyle">
+   <const>hintslight</const>
+  </edit>
+ </match>
+ <match target="font">
+  <edit mode="assign" name="antialias">
+   <bool>true</bool>
+  </edit>
+ </match>
+ <match target="font">
+  <edit mode="assign" name="lcdfilter">
+   <const>lcddefault</const>
+  </edit>
+ </match>
+ <dir>~/.fonts</dir>
+
+ <!-- Use Liberation Sans for Helvetica (instead of Nimbus Sans) -->
+ <alias binding="same">
+  <family>Helvetica</family>
+  <accept>
+   <family>Liberation Sans</family>
+  </accept>
+</alias>
+</fontconfig>
+#+end_src
+
+** Git
 
 *** gitconfig
 :PROPERTIES:
@@ -111,3 +767,176 @@ Note: This file is best viewed inside Emacs with org mode.
 *.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