X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/931a4b061e05a4d225a2304a2188adc84f1e3aed..9867e4bbee2bcfe7050b0c9d98cbf72653f658ac:/rc.org?ds=inline diff --git a/rc.org b/rc.org index 6f76b90..b3d5815 100644 --- a/rc.org +++ b/rc.org @@ -1,1014 +1,332 @@ #+title: rc.org -#+property: header-args :comments link :mkdirp yes :results silent +#+property: header-args :comments no :mkdirp yes :results silent -* About +This file contains some of the system-level (global) configuration +files for various programs I use. -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=. +* systemd -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 - -** getmail - -*** getmailrc -:PROPERTIES: -:header-args+: :tangle ~/.getmail/getmailrc -:END: - -#+begin_src conf -[retriever] -type = SimplePOP3SSLRetriever -server = fencepost.gnu.org -username = aminb -password_command = ("gpg2", "--no-tty", "-q", "-d", "~/.passwd/gnu.gpg") -port = 995 -use_apop = True - -[destination] -type = Maildir -path = ~/mail/gnu/Inbox/ - -[options] -delete = True -#+end_src - -*** getmail.service -:PROPERTIES: -:header-args+: :tangle ~/.config/systemd/user/getmail.service -:END: - -#+begin_src conf :tangle no -[Unit] -Description=getmail service +Keep boot messages on tty1 (see [[https://wiki.archlinux.org/index.php/getty#Have_boot_messages_stay_on_tty1][here]]) +#+begin_src conf :tangle /sudo::/etc/systemd/system/getty@tty1.service.d/noclear.conf [Service] -Type=oneshot -ExecStart=/usr/bin/getmail -StandardOutput=syslog -StandardError=syslog +TTYVTDisallocate=no #+end_src -*** getmail.timer -:PROPERTIES: -:header-args+: :tangle ~/.config/systemd/user/getmail.timer -:END: - -#+begin_src conf :tangle no -[Unit] -Description=getmail timer - -[Timer] -OnCalendar=*:0/30 -Persistent=true -Unit=getmail.service - -[Install] -WantedBy=timers.target +* TLP + +*** darrud + +#+begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "darrud")) "/sudo::/etc/default/tlp") +# ------------------------------------------------------------------------------ +# tlp - Parameters for power saving +# See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html + +# Hint: some features are disabled by default, remove the leading # to enable +# them. + +# Set to 0 to disable, 1 to enable TLP. +TLP_ENABLE=1 + +# Operation mode when no power supply can be detected: AC, BAT. +# Concerns some desktop and embedded hardware only. +TLP_DEFAULT_MODE=AC + +# Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE +# Hint: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC. +TLP_PERSISTENT_DEFAULT=0 + +# Seconds laptop mode has to wait after the disk goes idle before doing a sync. +# Non-zero value enables, zero disables laptop mode. +DISK_IDLE_SECS_ON_AC=0 +DISK_IDLE_SECS_ON_BAT=2 + +# Dirty page values (timeouts in secs). +MAX_LOST_WORK_SECS_ON_AC=15 +MAX_LOST_WORK_SECS_ON_BAT=60 + +# Hint: CPU parameters below are disabled by default, remove the leading # +# to enable them, otherwise kernel default values are used. + +# Select a CPU frequency scaling governor. +# Intel Core i processor with intel_pstate driver: +# powersave(*), performance. +# Older hardware with acpi-cpufreq driver: +# ondemand(*), powersave, performance, conservative, schedutil. +# (*) is recommended. +# Hint: use tlp-stat -p to show the active driver and available governors. +# Important: +# powersave for intel_pstate and ondemand for acpi-cpufreq are power +# efficient for *almost all* workloads and therefore kernel and most +# distributions have chosen them as defaults. If you still want to change, +# you should know what you're doing! You *must* disable your distribution's +# governor settings or conflicts will occur. +#CPU_SCALING_GOVERNOR_ON_AC=powersave +#CPU_SCALING_GOVERNOR_ON_BAT=powersave +CPU_SCALING_GOVERNOR_ON_AC=conservative +CPU_SCALING_GOVERNOR_ON_BAT=conservative + +# Set the min/max frequency available for the scaling governor. +# Possible values strongly depend on your CPU. For available frequencies see +# the output of tlp-stat -p. +#CPU_SCALING_MIN_FREQ_ON_AC=0 +#CPU_SCALING_MAX_FREQ_ON_AC=0 +#CPU_SCALING_MIN_FREQ_ON_BAT=0 +#CPU_SCALING_MAX_FREQ_ON_BAT=0 + +# Set energy performance hints (HWP) for Intel P-state governor: +# performance, balance_performance, default, balance_power, power +# Values are given in order of increasing power saving. +# Note: Intel Skylake or newer CPU and Kernel >= 4.10 required. +CPU_HWP_ON_AC=balance_performance +CPU_HWP_ON_BAT=balance_power + +# Set Intel P-state performance: 0..100 (%). +# Limit the max/min P-state to control the power dissipation of the CPU. +# Values are stated as a percentage of the available performance. +# Requires an Intel Core i processor with intel_pstate driver. +#CPU_MIN_PERF_ON_AC=0 +#CPU_MAX_PERF_ON_AC=100 +#CPU_MIN_PERF_ON_BAT=0 +#CPU_MAX_PERF_ON_BAT=30 + +# Set the CPU "turbo boost" feature: 0=disable, 1=allow +# Requires an Intel Core i processor. +# Important: +# - This may conflict with your distribution's governor settings +# - A value of 1 does *not* activate boosting, it just allows it +#CPU_BOOST_ON_AC=1 +#CPU_BOOST_ON_BAT=0 + +# Minimize number of used CPU cores/hyper-threads under light load conditions: +# 0=disable, 1=enable. +SCHED_POWERSAVE_ON_AC=0 +SCHED_POWERSAVE_ON_BAT=1 + +# Kernel NMI Watchdog: +# 0=disable (default, saves power), 1=enable (for kernel debugging only). +NMI_WATCHDOG=0 + +# Change CPU voltages aka "undervolting" - Kernel with PHC patch required. +# Frequency voltage pairs are written to: +# /sys/devices/system/cpu/cpu0/cpufreq/phc_controls +# CAUTION: only use this, if you thoroughly understand what you are doing! +#PHC_CONTROLS="F:V F:V F:V F:V" + +# Set CPU performance versus energy savings policy: +# performance, balance-performance, default, balance-power, power. +# Values are given in order of increasing power saving. +# Requires kernel module msr and x86_energy_perf_policy from linux-tools. +ENERGY_PERF_POLICY_ON_AC=performance +ENERGY_PERF_POLICY_ON_BAT=balance-power + +# Disk devices; separate multiple devices with spaces (default: sda). +# Devices can be specified by disk ID also (lookup with: tlp diskid). +DISK_DEVICES="sda sdb" + +# Disk advanced power management level: 1..254, 255 (max saving, min, off). +# Levels 1..127 may spin down the disk; 255 allowable on most drives. +# Separate values for multiple disks with spaces. Use the special value 'keep' +# to keep the hardware default for the particular disk. +DISK_APM_LEVEL_ON_AC="254 254" +DISK_APM_LEVEL_ON_BAT="128 128" + +# Hard disk spin down timeout: +# 0: spin down disabled +# 1..240: timeouts from 5s to 20min (in units of 5s) +# 241..251: timeouts from 30min to 5.5 hours (in units of 30min) +# See 'man hdparm' for details. +# Separate values for multiple disks with spaces. Use the special value 'keep' +# to keep the hardware default for the particular disk. +#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0" +#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0" + +# Select IO scheduler for the disk devices: cfq, deadline, noop (Default: cfq). +# Separate values for multiple disks with spaces. Use the special value 'keep' +# to keep the kernel default scheduler for the particular disk. +#DISK_IOSCHED="cfq cfq" + +# AHCI link power management (ALPM) for disk devices: +# min_power, med_power_with_dipm(*), medium_power, max_performance. +# (*) Kernel >= 4.15 required, then recommended. +# Multiple values separated with spaces are tried sequentially until success. +SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance" +SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power" + +# Exclude host devices from AHCI link power management. +# Separate multiple hosts with spaces. +#SATA_LINKPWR_BLACKLIST="host1" + +# Runtime Power Management for AHCI host and disks devices: +# on=disable, auto=enable. +# EXPERIMENTAL ** WARNING: auto will most likely cause system lockups/data loss. +#AHCI_RUNTIME_PM_ON_AC=on +#AHCI_RUNTIME_PM_ON_BAT=on + +# Seconds of inactivity before disk is suspended. +AHCI_RUNTIME_PM_TIMEOUT=15 + +# PCI Express Active State Power Management (PCIe ASPM): +# default, performance, powersave. +PCIE_ASPM_ON_AC=performance +PCIE_ASPM_ON_BAT=powersave + +# Radeon graphics clock speed (profile method): low, mid, high, auto, default; +# auto = mid on BAT, high on AC; default = use hardware defaults. +RADEON_POWER_PROFILE_ON_AC=high +RADEON_POWER_PROFILE_ON_BAT=low + +# Radeon dynamic power management method (DPM): battery, performance. +RADEON_DPM_STATE_ON_AC=performance +RADEON_DPM_STATE_ON_BAT=battery + +# Radeon DPM performance level: auto, low, high; auto is recommended. +RADEON_DPM_PERF_LEVEL_ON_AC=auto +RADEON_DPM_PERF_LEVEL_ON_BAT=auto + +# WiFi power saving mode: on=enable, off=disable; not supported by all adapters. +WIFI_PWR_ON_AC=off +WIFI_PWR_ON_BAT=on + +# Disable wake on LAN: Y/N. +WOL_DISABLE=Y + +# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs). +# A value of 0 disables, >=1 enables power saving (recommended: 1). +SOUND_POWER_SAVE_ON_AC=0 +SOUND_POWER_SAVE_ON_BAT=0 + +# Disable controller too (HDA only): Y/N. +SOUND_POWER_SAVE_CONTROLLER=N + +# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable. +# Drive can be powered on again by releasing (and reinserting) the eject lever +# or by pressing the disc eject button on newer models. +# Note: an UltraBay/MediaBay hard disk is never powered off. +BAY_POWEROFF_ON_AC=0 +BAY_POWEROFF_ON_BAT=0 +# Optical drive device to power off (default sr0). +BAY_DEVICE="sr0" + +# Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable. +RUNTIME_PM_ON_AC=on +RUNTIME_PM_ON_BAT=auto + +# Exclude PCI(e) device adresses the following list from Runtime PM +# (separate with spaces). Use lspci to get the adresses (1st column). +#RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6" +RUNTIME_PM_BLACKLIST="01:00.0" + +# Exclude PCI(e) devices assigned to the listed drivers from Runtime PM. +# Default when unconfigured is "amdgpu nouveau nvidia radeon" which +# prevents accidential power-on of dGPU in hybrid graphics setups. +# Use "" to disable the feature completely. +# Separate multiple drivers with spaces. +#RUNTIME_PM_DRIVER_BLACKLIST="amdgpu nouveau nvidia radeon" + +# Set to 0 to disable, 1 to enable USB autosuspend feature. +USB_AUTOSUSPEND=1 + +# Exclude listed devices from USB autosuspend (separate with spaces). +# Use lsusb to get the ids. +# Note: input devices (usbhid) are excluded automatically +#USB_BLACKLIST="1111:2222 3333:4444" + +# Bluetooth devices are excluded from USB autosuspend: +# 0=do not exclude, 1=exclude. +USB_BLACKLIST_BTUSB=0 + +# Phone devices are excluded from USB autosuspend: +# 0=do not exclude, 1=exclude (enable charging). +USB_BLACKLIST_PHONE=0 + +# Printers are excluded from USB autosuspend: +# 0=do not exclude, 1=exclude. +USB_BLACKLIST_PRINTER=1 + +# WWAN devices are excluded from USB autosuspend: +# 0=do not exclude, 1=exclude. +USB_BLACKLIST_WWAN=1 + +# Include listed devices into USB autosuspend even if already excluded +# by the blacklists above (separate with spaces). +# Use lsusb to get the ids. +#USB_WHITELIST="1111:2222 3333:4444" + +# Set to 1 to disable autosuspend before shutdown, 0 to do nothing +# (workaround for USB devices that cause shutdown problems). +#USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1 + +# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown +# on system startup: 0=disable, 1=enable. +# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below +# are ignored when this is enabled! +#RESTORE_DEVICE_STATE_ON_STARTUP=0 +RESTORE_DEVICE_STATE_ON_STARTUP=1 + +# Radio devices to disable on startup: bluetooth, wifi, wwan. +# Separate multiple devices with spaces. +#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan" + +# Radio devices to enable on startup: bluetooth, wifi, wwan. +# Separate multiple devices with spaces. +#DEVICES_TO_ENABLE_ON_STARTUP="wifi" + +# Radio devices to disable on shutdown: bluetooth, wifi, wwan. +# (workaround for devices that are blocking shutdown). +#DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan" + +# Radio devices to enable on shutdown: bluetooth, wifi, wwan. +# (to prevent other operating systems from missing radios). +#DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan" + +# Radio devices to enable on AC: bluetooth, wifi, wwan. +#DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan" + +# Radio devices to disable on battery: bluetooth, wifi, wwan. +#DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan" + +# Radio devices to disable on battery when not in use (not connected): +# bluetooth, wifi, wwan. +#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan" + +# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module +# required). Charging starts when the remaining capacity falls below the +# START_CHARGE_THRESH value and stops when exceeding the STOP_CHARGE_THRESH value. +# Main / Internal battery (values in %) +#START_CHARGE_THRESH_BAT0=75 +#STOP_CHARGE_THRESH_BAT0=80 +# Ultrabay / Slice / Replaceable battery (values in %) +#START_CHARGE_THRESH_BAT1=75 +#STOP_CHARGE_THRESH_BAT1=80 + +# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable. +#RESTORE_THRESHOLDS_ON_BAT=1 + +# ------------------------------------------------------------------------------ +# tlp-rdw - Parameters for the radio device wizard +# Possible devices: bluetooth, wifi, wwan. + +# Hints: +# - Parameters are disabled by default, remove the leading # to enable them +# - Separate multiple radio devices with spaces + +# Radio devices to disable on connect. +#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan" +#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan" +#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi" + +# Radio devices to enable on disconnect. +#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan" +#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT="" +#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT="" + +# Radio devices to enable/disable when docked. +#DEVICES_TO_ENABLE_ON_DOCK="" +#DEVICES_TO_DISABLE_ON_DOCK="" + +# Radio devices to enable/disable when undocked. +#DEVICES_TO_ENABLE_ON_UNDOCK="wifi" +#DEVICES_TO_DISABLE_ON_UNDOCK="" #+end_src -** GnuPG -:PROPERTIES: -:header-args+: :tangle ~/.gnupg/gpg-agent.conf -:END: - -#+begin_src conf -default-cache-ttl 43200 -max-cache-ttl 43200 - -default-cache-ttl-ssh 10800 -max-cache-ttl-ssh 10800 - -# pinentry-program /usr/bin/pinentry-qt -#+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