Skip to content
This repository has been archived by the owner on Jul 5, 2020. It is now read-only.

Latest commit

 

History

History
5296 lines (4541 loc) · 148 KB

rc.org

File metadata and controls

5296 lines (4541 loc) · 148 KB

rc.org

About

This org file contains the configuration files of pretty much every program I use. The files are tangled (i.e. exported, or derived) from this file using org-babel.

Note: This file is best viewed inside Emacs with org mode.

Configs

This section contains the configuration files (dotfiles) of various programs I use.

bspwm

bspwmrc

:header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang “#!/bin/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

sxhkdrc

:header-args+: :tangle ~/.config/sxhkd/sxhkdrc
#
# 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

XF86AudioMicMute
	pactl set-source-mute 1 toggle

# 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}

XF86RotateWindows
	toggle-tablet

#
# 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}

compton

:header-args+: :tangle ~/.config/compton.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.
};

Dunst

:header-args+: :tangle ~/.config/dunst/dunstrc
[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

Fontconfig

:header-args+: :tangle ~/.config/fontconfig/fonts.conf :comments none
<?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>

Git

gitconfig

:header-args+: :tangle ~/.gitconfig

user

[user]
    name = Amin Bandali
    email = amin@aminb.org
    signingkey = 4E05246AB0BF7FFB

signing

[commit]
    gpgsign = true
# [format]
#     signoff = true

core

[core]
    autocrlf = input  # CRLF -> LF on commit
    editor = emacsclient -t
    excludesfile = ~/.gitignore_global
    pager = "less"

gpg

[gpg]
    program = gpg2

alias

[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

color

[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

status

[status]
    # showUntrackedFiles = all
    short=true
    branch=true

github

[github]
	user = aminb

send-email

[sendemail]
	smtpuser = amin@aminb.org
	smtpserver = nix.aminb.org
	smtpserverport = 587
	smtpencryption = tls
	annotate = yes

gitignore

:header-args+: :tangle ~/.gitignore_global
*.orig
*.py[co]
*.sublime-workspace
*~
.DS_Store
*.elc
*-autoloads.el
:header-args+: :tangle ~/.config/i3gs/config
borders_width=0 0 2 0
separator_width=10

#[mpd]
#preset=MPD
#title=<span weight='heavy' fgcolor='#7FDBFF'> </span>
#borders_color=#7FDBFF

[ram]
preset=RAM
title=<span weight='heavy' fgcolor='#3D9970'> </span>
borders_color=#3D9970

#[cpu]
#preset=CPU
#title=<span weight='heavy' fgcolor='#2ECC40'> </span>
#borders_color=#2ECC40

#[hdd]
#preset=HDD
#title=<span weight='heavy' fgcolor='#01FF70'> </span>
#borders_color=#01FF70

[volume]
command=volume-info
title=<span weight='heavy' fgcolor='#7FDBFF'></span>
borders_color=#7FDBFF

[battery]
preset=BAT
command=battery-percentage-time
title=<span weight='heavy' fgcolor='#39CCCC'> </span>
borders_color=#39CCCC

[wifi]
preset=WIFI
title=<span weight='heavy' fgcolor='#01FF70'> </span>
borders_color=#01FF70

[date]
preset=DATE
command=date '+%-I:%M, %a %b %d '
title=<span weight='heavy' fgcolor='#FFDC00'> </span>
borders_color=#FFDC00
separator_width=0

Latexmk

:header-args+: :tangle ~/.latexmkrc
$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';

libinput

Improve XPS 15 9560’s touchpad experience.

Section "InputClass"
    Identifier "libinput touchpad catchall"
    Driver "libinput"
    MatchIsTouchpad "on"
    Option "ClickMethod" "clickfinger"
    Option "NaturalScrolling" "true"
    Option "Tapping" "on"
    Option "TappingButtonMap" "lrm"
EndSection

getmail

getmailrc

:header-args+: :tangle ~/.getmail/getmailrc
[retriever]
type = SimplePOP3SSLRetriever
server = fencepost.gnu.org
username = aminb
password_command = ("gpg2", "--no-tty", "-q", "-d", "/home/amin/.passwd/gnu.gpg")
port = 995
use_apop = True

[destination]
type = Maildir
path = ~/mail/gnu/Inbox/

[options]
delete = True

getmail.service

:header-args+: :tangle ~/.config/systemd/user/getmail.service
[Unit]
Description=getmail service

[Service]
Type=oneshot
ExecStart=/usr/bin/getmail
StandardOutput=syslog
StandardError=syslog

getmail.timer

:header-args+: :tangle ~/.config/systemd/user/getmail.timer
[Unit]
Description=getmail timer

[Timer]
OnCalendar=*:0/30
Persistent=true
Unit=getmail.service

[Install]
WantedBy=timers.target

GnuPG

:header-args+: :tangle ~/.gnupg/gpg-agent.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

GTK

gtk-2.0

:header-args+: :tangle ~/.gtkrc-2.0
gtk-theme-name="Greybird"
gtk-icon-theme-name="Paper"
gtk-font-name="Ubuntu 10"
gtk-menu-images=0
# gtk-key-theme-name = "Emacs"

gtk-3.0

:header-args+: :tangle ~/.config/gtk-3.0/settings.ini
[Settings]
gtk-icon-theme-name = Paper
# gtk-theme-name = Adwaita

gtk-theme-name = Greybird
# gtk-theme-name = Arc-Darker
# gtk-theme-name = Numix-ArchBlue

gtk-font-name = Ubuntu 10
# gtk-key-theme-name = Emacs

isync

mbsyncrc

:header-args+: :tangle ~/.mbsyncrc
# Global defaults
CopyArrivalDate yes

######
IMAPAccount amin
Host nix.aminb.org
User amin@aminb.org
PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin.gpg"
SSLType IMAPS

IMAPStore amin-remote
Account amin

MaildirStore amin-local
Path ~/mail/amin/
Inbox ~/mail/amin/Inbox
SubFolders Verbatim

Channel amin
Master :amin-remote:
Slave :amin-local:
Patterns * !dovecot*
Create Both
SyncState *

######
IMAPAccount uwaterloo
Host connect.uwaterloo.ca
User abandali
PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/uwaterloo.gpg"
SSLType IMAPS

IMAPStore uwaterloo-remote
Account uwaterloo

MaildirStore uwaterloo-local
Path ~/mail/uwaterloo/
Inbox ~/mail/uwaterloo/Inbox
SubFolders Verbatim

Channel uwaterloo
Master :uwaterloo-remote:
Slave :uwaterloo-local:
Patterns * !dovecot*
Create Both
SyncState *

mbsync.service

:header-args+: :tangle ~/.config/systemd/user/mbsync.service
[Unit]
Description=mbsync service

[Service]
Type=oneshot
ExecStart=/usr/bin/mbsync -Va
StandardOutput=syslog
StandardError=syslog

mbsync.timer

:header-args+: :tangle ~/.config/systemd/user/mbsync.timer
[Unit]
Description=mbsync timer

[Timer]
OnCalendar=*:0/15
Persistent=true
Unit=mbsync.service

[Install]
WantedBy=timers.target

mpd

:header-args+: :tangle ~/.config/mpd/mpd.conf
# An example configuration file for MPD.
# Read the user manual for documentation: http://www.musicpd.org/doc/user/


# Files and directories #######################################################
#
# This setting controls the top directory which MPD will search to discover the
# available audio files and add them to the daemon's online database. This 
# setting defaults to the XDG directory, otherwise the music directory will be
# be disabled and audio files will only be accepted over ipc socket (using
# file:// protocol) or streaming files over an accepted protocol.
#
music_directory		"~/usr/music"
#
# This setting sets the MPD internal playlist directory. The purpose of this
# directory is storage for playlists created by MPD. The server will use 
# playlist files not created by the server but only if they are in the MPD
# format. This setting defaults to playlist saving being disabled.
#
playlist_directory		"~/.mpd/playlists"
#
# This setting sets the location of the MPD database. This file is used to
# load the database at server start up and store the database while the 
# server is not up. This setting defaults to disabled which will allow
# MPD to accept files over ipc socket (using file:// protocol) or streaming
# files over an accepted protocol.
#
db_file			"~/.mpd/database"
# 
# These settings are the locations for the daemon log files for the daemon.
# These logs are great for troubleshooting, depending on your log_level
# settings.
#
# The special value "syslog" makes MPD use the local syslog daemon. This
# setting defaults to logging to syslog, otherwise logging is disabled.
#
log_file			"~/.mpd/log"
#
# This setting sets the location of the file which stores the process ID
# for use of mpd --kill and some init scripts. This setting is disabled by
# default and the pid file will not be stored.
#
pid_file			"~/.mpd/pid"
#
# This setting sets the location of the file which contains information about
# most variables to get MPD back into the same general shape it was in before
# it was brought down. This setting is disabled by default and the server 
# state will be reset on server start up.
#
state_file			"~/.mpd/state"
#
# The location of the sticker database.  This is a database which
# manages dynamic information attached to songs.
#
sticker_file			"~/.mpd/sticker.sql"
#
###############################################################################


# General music daemon options ################################################
#
# This setting specifies the user that MPD will run as. MPD should never run as
# root and you may use this setting to make MPD change its user ID after
# initialization. This setting is disabled by default and MPD is run as the
# current user.
#
#user				"nobody"
#
# This setting specifies the group that MPD will run as. If not specified
# primary group of user specified with "user" setting will be used (if set).
# This is useful if MPD needs to be a member of group such as "audio" to
# have permission to use sound card.
#
#group				"nogroup"
#
# This setting sets the address for the daemon to listen on. Careful attention
# should be paid if this is assigned to anything other then the default, any.
# This setting can deny access to control of the daemon. Not effective if
# systemd socket activiation is in use.
#
# For network
#bind_to_address		"any"
#
# And for Unix Socket
#bind_to_address		"~/.mpd/socket"
#
# This setting is the TCP port that is desired for the daemon to get assigned
# to.
#
#port				"6600"
#
# This setting controls the type of information which is logged. Available 
# setting arguments are "default", "secure" or "verbose". The "verbose" setting
# argument is recommended for troubleshooting, though can quickly stretch
# available resources on limited hardware storage.
#
#log_level			"default"
#
# If you have a problem with your MP3s ending abruptly it is recommended that 
# you set this argument to "no" to attempt to fix the problem. If this solves
# the problem, it is highly recommended to fix the MP3 files with vbrfix
# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
# point gapless MP3 playback can be enabled.
#
#gapless_mp3_playback			"yes"
#
# Setting "restore_paused" to "yes" puts MPD into pause mode instead
# of starting playback after startup.
#
#restore_paused "no"
#
# This setting enables MPD to create playlists in a format usable by other
# music players.
#
#save_absolute_paths_in_playlists	"no"
#
# This setting defines a list of tag types that will be extracted during the
# audio file discovery process. The complete list of possible values can be
# found in the user manual.
#metadata_to_use	"artist,album,title,track,name,genre,date,composer,performer,disc"
#
# This setting enables automatic update of MPD's database when files in 
# music_directory are changed.
#
#auto_update	"yes"
#
# Limit the depth of the directories being watched, 0 means only watch
# the music directory itself.  There is no limit by default.
#
#auto_update_depth "3"
#
###############################################################################


# Symbolic link behavior ######################################################
#
# If this setting is set to "yes", MPD will discover audio files by following 
# symbolic links outside of the configured music_directory.
#
#follow_outside_symlinks	"yes"
#
# If this setting is set to "yes", MPD will discover audio files by following
# symbolic links inside of the configured music_directory.
#
#follow_inside_symlinks		"yes"
#
###############################################################################


# Zeroconf / Avahi Service Discovery ##########################################
#
# If this setting is set to "yes", service information will be published with
# Zeroconf / Avahi.
#
#zeroconf_enabled		"yes"
#
# The argument to this setting will be the Zeroconf / Avahi unique name for
# this MPD server on the network.
#
#zeroconf_name			"Music Player"
#
###############################################################################


# Permissions #################################################################
#
# If this setting is set, MPD will require password authorization. The password
# setting can be specified multiple times for different password profiles.
#
#password                        "password@read,add,control,admin"
#
# This setting specifies the permissions a user has who has not yet logged in. 
#
#default_permissions             "read,add,control,admin"
#
###############################################################################


# Database #######################################################################
#

#database {
#       plugin "proxy"
#       host "other.mpd.host"
#       port "6600"
#}

# Input #######################################################################
#

input {
        plugin "curl"
#       proxy "proxy.isp.com:8080"
#       proxy_user "user"
#       proxy_password "password"
}

#
###############################################################################

# Audio Output ################################################################
#

audio_output {
    type    "pulse"
    name    "pulse audio"
}

audio_output {
    type    "fifo"
    name    "my_fifo"
    path    "/tmp/mpd.fifo"
    format  "44100:16:2"
}

# MPD supports various audio output types, as well as playing through multiple 
# audio outputs at the same time, through multiple audio_output settings 
# blocks. Setting this block is optional, though the server will only attempt
# autodetection for one sound card.
#
# An example of an ALSA output:
#
#audio_output {
#	type		"alsa"
#	name		"My ALSA Device"
##	device		"hw:0,0"	# optional
##	mixer_type      "hardware"	# optional
##	mixer_device	"default"	# optional
##	mixer_control	"PCM"		# optional
##	mixer_index	"0"		# optional
#}
#
# An example of an OSS output:
#
#audio_output {
#	type		"oss"
#	name		"My OSS Device"
##	device		"/dev/dsp"	# optional
##	mixer_type      "hardware"	# optional
##	mixer_device	"/dev/mixer"	# optional
##	mixer_control	"PCM"		# optional
#}
#
# An example of a shout output (for streaming to Icecast):
#
#audio_output {
#	type		"shout"
#	encoder		"vorbis"		# optional
#	name		"My Shout Stream"
#	host		"localhost"
#	port		"8000"
#	mount		"/mpd.ogg"
#	password	"hackme"
#	quality		"5.0"
#	bitrate		"128"
#	format		"44100:16:1"
##	protocol	"icecast2"		# optional
##	user		"source"		# optional
##	description	"My Stream Description"	# optional
##	url		"http://example.com"	# optional
##	genre		"jazz"			# optional
##	public		"no"			# optional
##	timeout		"2"			# optional
##	mixer_type      "software"		# optional
#}
#
# An example of a recorder output:
#
#audio_output {
#	type		"recorder"
#	name		"My recorder"
#	encoder		"vorbis"		# optional, vorbis or lame
#	path		"/var/lib/mpd/recorder/mpd.ogg"
##	quality		"5.0"			# do not define if bitrate is defined
#	bitrate		"128"			# do not define if quality is defined
#	format		"44100:16:1"
#}
#
# An example of a httpd output (built-in HTTP streaming server):
#
#audio_output {
#	type		"httpd"
#	name		"My HTTP Stream"
#	encoder		"vorbis"		# optional, vorbis or lame
#	port		"8000"
#	bind_to_address	"0.0.0.0"		# optional, IPv4 or IPv6
##	quality		"5.0"			# do not define if bitrate is defined
#	bitrate		"128"			# do not define if quality is defined
#	format		"44100:16:1"
#	max_clients	"0"			# optional 0=no limit
#}
#
# An example of a pulseaudio output (streaming to a remote pulseaudio server)
#
#audio_output {
#	type		"pulse"
#	name		"My Pulse Output"
##	server		"remote_server"		# optional
##	sink		"remote_server_sink"	# optional
#}
#
# An example of a winmm output (Windows multimedia API).
#
#audio_output {
#	type		"winmm"
#	name		"My WinMM output"
##	device		"Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#		or
##	device		"0"		# optional
##	mixer_type	"hardware"	# optional
#}
#
# An example of an openal output.
#
#audio_output {
#	type		"openal"
#	name		"My OpenAL output"
##	device		"Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
#}
#
# An example of an sndio output.
#
#audio_output {
#	type		"sndio"
#	name		"sndio output"
#	mixer_type	"software"
#}
#
# An example of an OS X output:
#
#audio_output {
#	type		"osx"
#	name		"My OS X Device"
##	device		"Built-in Output"	# optional
##	channel_map      "-1,-1,0,1"	# optional
#}
#
## Example "pipe" output:
#
#audio_output {
#	type		"pipe"
#	name		"my pipe"
#	command		"aplay -f cd 2>/dev/null"
## Or if you're want to use AudioCompress
#	command		"AudioCompress -m | aplay -f cd 2>/dev/null"
## Or to send raw PCM stream through PCM:
#	command		"nc example.org 8765"
#	format		"44100:16:2"
#}
#
## An example of a null output (for no audio output):
#
#audio_output {
#	type		"null"
#	name		"My Null Output"
#	mixer_type      "none"			# optional
#}
#
###############################################################################


# Normalization automatic volume adjustments ##################################
#
# This setting specifies the type of ReplayGain to use. This setting can have
# the argument "off", "album", "track" or "auto". "auto" is a special mode that
# chooses between "track" and "album" depending on the current state of
# random playback. If random playback is enabled then "track" mode is used.
# See <http://www.replaygain.org> for more details about ReplayGain.
# This setting is off by default.
#
#replaygain			"album"
#
# This setting sets the pre-amp used for files that have ReplayGain tags. By
# default this setting is disabled.
#
#replaygain_preamp		"0"
#
# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
# By default this setting is disabled.
#
#replaygain_missing_preamp	"0"
#
# This setting enables or disables ReplayGain limiting.
# MPD calculates actual amplification based on the ReplayGain tags
# and replaygain_preamp / replaygain_missing_preamp setting.
# If replaygain_limit is enabled MPD will never amplify audio signal
# above its original level. If replaygain_limit is disabled such amplification
# might occur. By default this setting is enabled.
#
#replaygain_limit		"yes"
#
# This setting enables on-the-fly normalization volume adjustment. This will
# result in the volume of all playing audio to be adjusted so the output has 
# equal "loudness". This setting is disabled by default.
#
#volume_normalization		"no"
#
###############################################################################

# Character Encoding ##########################################################
#
# If file or directory names do not display correctly for your locale then you 
# may need to modify this setting.
#
#filesystem_charset		"UTF-8"
#
###############################################################################

msmtp

:header-args+: :tangle ~/.msmtprc
# Set default values for all following accounts.
defaults
port 587
tls on
auth on
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

# aminb
account aminb
host nix.aminb.org
tls_fingerprint 65:DD:B8:32:D8:CD:F1:DC:B6:34:EE:35:04:18:AC:09:F3:1D:6D:20:F2:4A:E2:BD:64:48:B7:1F:90:BD:C4:BA
tls_starttls on
from amin@aminb.org
user amin@aminb.org
passwordeval gpg2 --no-tty -q -d ~/.passwd/amin.gpg

# gnu
account gnu
host fencepost.gnu.org
# use `msmtp -a gnu --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint
tls_fingerprint 28:70:42:76:1C:EC:91:5F:D1:B3:27:A1:CD:3B:32:A4:8B:0B:DC:3A:CD:CA:F6:6F:E4:61:BA:69:D7:4D:0D:0B
tls_starttls on
from aminb@gnu.org
user aminb
passwordeval gpg2 --no-tty -q -d ~/.passwd/gnu.gpg

# uwaterloo
account uwaterloo
host connect.uwaterloo.ca
tls_starttls on
from abandali@uwaterloo.ca
user abandali
passwordeval gpg2 --no-tty -q -d ~/.passwd/uwaterloo.gpg
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# uwaterloo (friendly address)
account uwaterloo-friendly : uwaterloo
from amin.bandali@uwaterloo.ca

# Set a default account
account default : aminb

ncmpcpp

config

:header-args+: :tangle ~/.ncmpcpp/config
##############################################################
## This is the example configuration file. Copy it to       ##
## $HOME/.ncmpcpp/config or $XDG_CONFIG_HOME/ncmpcpp/config ##
## and set up your preferences.                             ##
##############################################################
#
##### directories ######
##
## Directory for storing ncmpcpp related files.
## Changing it is useful if you want to store
## everything somewhere else and provide command
## line setting for alternative location to config
## file which defines that while launching ncmpcpp.
##
#
ncmpcpp_directory = ~/.ncmpcpp
#
##
## Directory for storing downloaded lyrics. It
## defaults to ~/.lyrics since other MPD clients
## (eg. ncmpc) also use that location.
##
#
#lyrics_directory = ~/.lyrics
#
##### connection settings #####
#
#mpd_host = localhost
#
#mpd_port = 6600
#
#mpd_connection_timeout = 5
#
## Needed for tag editor and file operations to work.
##
mpd_music_dir = ~/usr/music
#
#mpd_crossfade_time = 5
#
##### music visualizer #####
##
## Note: In order to make music visualizer work you'll
## need to use mpd fifo output, whose format parameter
## has to be set to 44100:16:1 for mono visualization
## or 44100:16:2 for stereo visualization. Example
## configuration (it has to be put into mpd.conf):
##
## audio_output {
##        type            "fifo"
##        name            "Visualizer feed"
##        path            "/tmp/mpd.fifo"
##        format          "44100:16:2"
## }
##
#
visualizer_fifo_path = /tmp/mpd.fifo
#
##
## Note: Below parameter is needed for ncmpcpp
## to determine which output provides data for
## visualizer and thus allow syncing between
## visualization and sound as currently there
## are some problems with it.
##
#
visualizer_output_name = my fifo
#
##
## If you set format to 44100:16:2, make it 'yes'.
##
visualizer_in_stereo = yes
#
##
## Multiply received samples by given value. Very
## useful for proper visualization of quiet music.
##
#visualizer_sample_multiplier = 1
#
##
## Note: Below parameter defines how often ncmpcpp
## has to "synchronize" visualizer and audio outputs.
## 30 seconds is optimal value, but if you experience
## synchronization problems, set it to lower value.
## Keep in mind that sane values start with >=10.
##
#
visualizer_sync_interval = 30
#
##
## Note: To enable spectrum frequency visualization
## you need to compile ncmpcpp with fftw3 support.
##
#
## Available values: spectrum, wave, wave_filled, ellipse.
##
visualizer_type = spectrum
#
#visualizer_look = ●▮
visualizer_look = "●•"
#
#visualizer_color = blue, cyan, green, yellow, magenta, red
#
## Alternative subset of 256 colors for terminals that support it.
##
#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
#
##### system encoding #####
##
## ncmpcpp should detect your charset encoding
## but if it failed to do so, you can specify
## charset encoding you are using here.
##
## Note: You can see whether your ncmpcpp build
## supports charset detection by checking output
## of `ncmpcpp --version`.
##
## Note: Since MPD uses UTF-8 by default, setting
## this option makes sense only if your encoding
## is different.
##
#
#system_encoding = ""
#
##### delays #####
#
## Time of inactivity (in seconds) after playlist
## highlighting will be disabled (0 = always on).
##
#playlist_disable_highlight_delay = 5
#
## Defines how long messages are supposed to be visible.
##
#message_delay_time = 5
#
##### song format #####
##
## For a song format you can use:
##
## %l - length
## %f - filename
## %D - directory
## %a - artist
## %A - album artist
## %t - title
## %b - album
## %y - date
## %n - track number (01/12 -> 01)
## %N - full track info (01/12 -> 01/12)
## %g - genre
## %c - composer
## %p - performer
## %d - disc
## %C - comment
## %P - priority
## $R - begin right alignment
##
## If you want to make sure that a part of the format is displayed
## only when certain tags are present, you can archieve it by
## grouping them with brackets, e.g. '{%a - %t}' will be evaluated
## to 'ARTIST - TITLE' if both tags are present or '' otherwise.
## It is also possible to define a list of alternatives by providing
## several groups and separating them with '|', e.g. '{%t}|{%f}'
## will be evaluated to 'TITLE' or 'FILENAME' if the former is not
## present.
##
## Note: If you want to set limit on maximal length of a tag, just
## put the appropriate number between % and character that defines
## tag type, e.g. to make album take max. 20 terminal cells, use '%20b'.
##
## In addition, formats support markers used for text attributes.
## They are followed by character '$'. After that you can put:
##
## - 0 - default window color (discards all other colors)
## - 1 - black
## - 2 - red
## - 3 - green
## - 4 - yellow
## - 5 - blue
## - 6 - magenta
## - 7 - cyan
## - 8 - white
## - 9 - end of current color
## - b - bold text
## - u - underline text
## - r - reverse colors
## - a - use alternative character set
##
## If you don't want to use a non-color attribute anymore, just put it
## again, but this time insert character '/' between '$' and attribute
## character, e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag
## or filename with reversed colors.
##
## If you want to use 256 colors and/or background colors in formats
## (the naming scheme is described below in section about color
## definitions), it can be done with the syntax $(COLOR), e.g. to set
## the artist tag to one of the non-standard colors and make it have
## yellow background, you need to write $(197_yellow)%a$(end). Note
## that for standard colors this is interchangable with attributes
## listed above.
##
## Note: colors can be nested.
##
#
#song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
#
#song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f}
#
#song_library_format = {%n - }{%t}|{%f}
#
#
#alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
#
#alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
#
#now_playing_prefix = $b
#
#now_playing_suffix = $/b
#
#browser_playlist_prefix = "$2playlist$9 "
#
#selected_item_prefix = $6
#
#selected_item_suffix = $9
#
#modified_item_prefix = $3> $9
#
##
## Note: attributes are not supported for the following variables.
##
#song_window_title_format = {%a - }{%t}|{%f}
##
## Note: Below variables are used for sorting songs in browser.
## The sort mode determines how songs are sorted, and can be used
## in combination with a sort format to specify a custom sorting format.
## Available values for browser_sort_mode are "name", "mtime", "format"
## and "noop".
##
#
#browser_sort_mode = name
#
#browser_sort_format = {%a - }{%t}|{%f} {(%l)}
#
##### columns settings #####
##
## syntax of song columns list format is "column column etc."
##
## - syntax for each column is:
##
## (width of the column)[color of the column]{displayed tag}
##
## Note: Width is by default in %, if you want a column to
## have fixed size, add 'f' after the value, e.g. (10)[white]{a}
## will be the column that take 10% of screen (so the real width
## will depend on actual screen size), whereas (10f)[white]{a}
## will take 10 terminal cells, no matter how wide the screen is.
##
## - color is optional (if you want the default one,
##   leave the field empty).
##
## Note: You can give a column additional attributes by putting appropriate
## character after displayed tag character. Available attributes are:
##
## - r - column will be right aligned
## - E - if tag is empty, empty tag marker won't be displayed
##
## You can also:
##
## - give a column custom name by putting it after attributes,
##   separated with character ':', e.g. {lr:Length} gives you
##   right aligned column of lengths named "Length".
##
## - define sequence of tags, that have to be displayed in case
##   predecessor is empty in a way similar to the one in classic
##   song format, i.e. using '|' character, e.g. {a|c|p:Owner}
##   creates column named "Owner" that tries to display artist
##   tag and then composer and performer if previous ones are
##   not available.
##
#
#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}
#
##### various settings #####
#
##
## Note: Custom command that will be executed each
## time song changes. Useful for notifications etc.
##
#execute_on_song_change = ""
#
#playlist_show_mpd_host = no
#
#playlist_show_remaining_time = no
#
#playlist_shorten_total_times = no
#
#playlist_separate_albums = no
#
##
## Note: Possible display modes: classic, columns.
##
#playlist_display_mode = columns
#
#browser_display_mode = classic
#
#search_engine_display_mode = classic
#
#playlist_editor_display_mode = classic
#
#discard_colors_if_item_is_selected = yes
#
#incremental_seeking = yes
#
#seek_time = 1
#
#volume_change_step = 2
#
#autocenter_mode = no
#
#centered_cursor = no
#
##
## Note: You can specify third character which will
## be used to build 'empty' part of progressbar.
##
#progressbar_look = =>
progressbar_look = "─╼╶"
#progressbar_look = "─⊙╶"
#
#progressbar_boldness = yes
#
## Available values: database, playlist.
##
#default_place_to_search_in = database
#
## Available values: classic, alternative.
##
#user_interface = classic
#
#data_fetching_delay = yes
#
## Available values: artist, album_artist, date, genre, composer, performer.
##
#media_library_primary_tag = artist
#
## Available values: wrapped, normal.
##
#default_find_mode = wrapped
#
#default_tag_editor_pattern = %n - %t
#
#header_visibility = yes
#
#statusbar_visibility = yes
#
#titles_visibility = yes
#
#header_text_scrolling = yes
#
#cyclic_scrolling = no
#
#lines_scrolled = 2
#
#follow_now_playing_lyrics = no
#
#fetch_lyrics_for_current_song_in_background = no
#
#store_lyrics_in_song_dir = no
#
#generate_win32_compatible_filenames = yes
#
#allow_for_physical_item_deletion = no
#
##
## Note: If you set this variable, ncmpcpp will try to
## get info from last.fm in language you set and if it
## fails, it will fall back to english. Otherwise it will
## use english the first time.
##
## Note: Language has to be expressed as an ISO 639 alpha-2 code.
##
#lastfm_preferred_language = en
#
#show_hidden_files_in_local_browser = no
#
##
## How shall screen switcher work?
##
## - "previous" - switch between the current and previous screen.
## - "screen1,...,screenN" - switch between given sequence of screens.
##
## Screens available for use: help, playlist, browser, search_engine,
## media_library, playlist_editor, tag_editor, outputs, visualizer, clock.
##
#screen_switcher_mode = playlist, browser
#
##
## Note: You can define startup screen
## by choosing screen from the list above.
##
#startup_screen = playlist
#
##
## Note: You can define startup slave screen
## by choosing screen from the list above or
## an empty value for no slave screen.
##
#startup_slave_screen = ""
#
#startup_slave_screen_focus = no
#
##
## Default width of locked screen (in %).
## Acceptable values are from 20 to 80.
##
#
#locked_screen_width_part = 50
#
#ask_for_locked_screen_width_part = yes
#
#jump_to_now_playing_song_at_start = yes
#
#ask_before_clearing_playlists = yes
#
#clock_display_seconds = no
#
#display_volume_level = yes
#
#display_bitrate = no
#
#display_remaining_time = no
#
## Available values: none, basic, extended, perl.
##
#regular_expressions = perl
#
##
## Note: If below is enabled, ncmpcpp will ignore leading
## "The" word while sorting items in browser, tags in
## media library, etc.
##
#ignore_leading_the = no
#
#block_search_constraints_change_if_items_found = yes
#
#mouse_support = yes
#
#mouse_list_scroll_whole_page = yes
#
#empty_tag_marker = <empty>
#
#tags_separator = " | "
#
#tag_editor_extended_numeration = no
#
#media_library_sort_by_mtime = no
#
#enable_window_title = yes
#
##
## Note: You can choose default search mode for search
## engine. Available modes are:
##
## - 1 - use mpd built-in searching (no regexes, pattern matching)
## - 2 - use ncmpcpp searching (pattern matching with support for regexes,
##       but if your mpd is on a remote machine, downloading big database
##       to process it can take a while
## - 3 - match only exact values (this mode uses mpd function for searching
##       in database and local one for searching in current playlist)
##
#
#search_engine_default_search_mode = 1
#
#external_editor = nano
#
## Note: set to yes if external editor is a console application.
##
#use_console_editor = yes
#
##### colors definitions #####
##
## It is possible to set a background color by setting a color
## value "<foreground>_<background>", e.g. red_black will set
## foregound color to red and background color to black.
##
## In addition, for terminals that support 256 colors it
## is possible to set one of them by using a number in range
## [1, 256] instead of color name, e.g. numerical value
## corresponding to red_black is 2_1. To find out if the
## terminal supports 256 colors, run ncmpcpp and check out
## the bottom of the help screen for list of available colors
## and their numerical values.
##
## Note: due to technical limitations of ncurses, if 256 colors
## are used, it is possible to either use only the colors with
## default background color, or all pairs from 1_1 up to 254_127,
## depending on the ncurses version used.
##
#
#colors_enabled = yes
#
#empty_tag_color = cyan
#
#header_window_color = default
#
#volume_color = default
#
#state_line_color = default
#
#state_flags_color = default
#
#main_window_color = yellow
#
#color1 = white
#
#color2 = green
#
#main_window_highlight_color = yellow
#
#progressbar_color = black
#
#progressbar_elapsed_color = green
#
#statusbar_color = default
#
#alternative_ui_separator_color = black
#
#active_column_color = red
#
#window_border_color = green
#
#active_window_border = red
#

bindings

:header-args+: :tangle ~/.ncmpcpp/bindings
def_key "j"
    scroll_down
def_key "k"
    scroll_up

def_key "ctrl-u"
    page_up
def_key "ctrl-d"
    page_down

def_key "h"
    previous_column
def_key "l"
    next_column

def_key "."
    show_lyrics

def_key "n"
    next_found_item
def_key "N"
    previous_found_item

def_key "J"
    move_sort_order_down
def_key "K"
    move_sort_order_up

notmuch

notmuch-config

:header-args+: :tangle ~/.notmuch-config
# .notmuch-config - Configuration file for the notmuch mail system
#
# For more information about notmuch, see https://notmuchmail.org

# Database configuration
#
# The only value supported here is 'path' which should be the top-level
# directory where your mail currently exists and to where mail will be
# delivered in the future. Files should be individual email messages.
# Notmuch will store its database within a sub-directory of the path
# configured here named ".notmuch".
#
[database]
path=/home/amin/mail

# User configuration
#
# Here is where you can let notmuch know how you would like to be
# addressed. Valid settings are
#
#	name		Your full name.
#	primary_email	Your primary email address.
#	other_email	A list (separated by ';') of other email addresses
#			at which you receive email.
#
# Notmuch will use the various email addresses configured here when
# formatting replies. It will avoid including your own addresses in the
# recipient list of replies, and will set the From address based on the
# address to which the original email was addressed.
#
[user]
name=Amin Bandali
primary_email=amin@aminb.org
other_email=abandali@uwaterloo.ca;amin.bandali@uwaterloo.ca;aminb@gnu.org;

# Configuration for "notmuch new"
#
# The following options are supported here:
#
#	tags	A list (separated by ';') of the tags that will be
#		added to all messages incorporated by "notmuch new".
#
#	ignore	A list (separated by ';') of file and directory names
#		that will not be searched for messages by "notmuch new".
#
#		NOTE: *Every* file/directory that goes by one of those
#		names will be ignored, independent of its depth/location
#		in the mail store.
#
[new]
tags=new;
#tags=unread;inbox;
ignore=.uidvalidity;.mbsyncstate;/.*/dovecot*/

# Search configuration
#
# The following option is supported here:
#
#	exclude_tags
#		A ;-separated list of tags that will be excluded from
#		search results by default.  Using an excluded tag in a
#		query will override that exclusion.
#
[search]
exclude_tags=deleted;spam;

# Maildir compatibility configuration
#
# The following option is supported here:
#
#	synchronize_flags      Valid values are true and false.
#
#	If true, then the following maildir flags (in message filenames)
#	will be synchronized with the corresponding notmuch tags:
#
#		Flag	Tag
#		----	-------
#		D	draft
#		F	flagged
#		P	passed
#		R	replied
#		S	unread (added when 'S' flag is not present)
#
#	The "notmuch new" command will notice flag changes in filenames
#	and update tags, while the "notmuch tag" and "notmuch restore"
#	commands will notice tag changes and update flags in filenames
#
[maildir]
synchronize_flags=true

# Cryptography related configuration
#
# The following option is supported here:
#
#	gpg_path
#		binary name or full path to invoke gpg.
#
[crypto]
gpg_path=gpg

pre-new hook

:header-args+: :tangle ~/mail/.notmuch/hooks/pre-new :shebang “#!/bin/sh”
touch /tmp/gnusieve.log
sieve-filter -eW -o postmaster_address=postmaster@aminb.org \
	     -o mail_location=maildir:$MAILDIR/gnu:LAYOUT=fs:INBOX=$MAILDIR/gnu/Inbox ~/sieve/gnu.sieve INBOX delete &>>/tmp/gnusieve.log

post-new hook

:header-args+: :tangle ~/mail/.notmuch/hooks/post-new :shebang “#!/bin/sh”
# apply sent tag to messages sent by me
notmuch tag -new +sent -- from:amin@aminb.org or from:aminb@gnu.org or from:abandali@uwaterloo.ca or from:amin.bandali@uwaterloo.ca

# initial tagging
notmuch tag -latest -- tag:latest
notmuch tag +inbox +unread +latest -new -- tag:new


# apply tags to lists

# <aminb>
notmuch tag -inbox +lists/~sircmpwn/srht-admins   -- folder:amin/lists/~sircmpwn/srht-admins
notmuch tag -inbox +lists/~sircmpwn/srht-announce -- folder:amin/lists/~sircmpwn/srht-announce
notmuch tag -inbox +lists/~sircmpwn/srht-dev      -- folder:amin/lists/~sircmpwn/srht-dev
notmuch tag -inbox +lists/~sircmpwn/srht-discuss  -- folder:amin/lists/~sircmpwn/srht-discuss

notmuch tag -inbox +lists/hackernewsletter -- folder:amin/lists/hackernewsletter
notmuch tag -inbox +lists/haskell-weekly   -- folder:amin/lists/haskell-weekly

notmuch tag -inbox +pay -- folder:amin/pay
# </aminb>

# <uw>
notmuch tag -inbox +uw/cs136 -- folder:uwaterloo/lists/cs136
notmuch tag -inbox +uw/se463 -- folder:uwaterloo/lists/se463

notmuch tag -inbox +lists/clvsingle        -- folder:uwaterloo/lists/Clvsingle
notmuch tag -inbox +lists/gsa              -- folder:uwaterloo/lists/GSA
notmuch tag -inbox +lists/math-grad        -- folder:uwaterloo/lists/Math-grad
notmuch tag -inbox +lists/scs-grads        -- folder:uwaterloo/lists/scs-grads
notmuch tag -inbox +lists/watform-students -- folder:uwaterloo/lists/Watform-students
# </uw>

# <gnu>
notmuch tag -inbox +lists/emacs-devel       -- folder:gnu/l/emacs-devel
notmuch tag -inbox +lists/emacs-orgmode     -- folder:gnu/l/emacs-orgmode
notmuch tag -inbox +lists/emacsconf-discuss -- folder:gnu/l/emacsconf-discuss
notmuch tag -inbox +lists/fencepost-users   -- folder:gnu/l/fencepost-users
notmuch tag -inbox +lists/guix-devel        -- folder:gnu/l/guix-devel
notmuch tag -inbox +lists/guile-devel       -- folder:gnu/l/guile-devel
notmuch tag -inbox +lists/help-gnu-emacs    -- folder:gnu/l/help-gnu-emacs
notmuch tag -inbox +lists/info-gnu-emacs    -- folder:gnu/l/info-gnu-emacs
notmuch tag -inbox +lists/www-commits       -- folder:gnu/l/www-commits
notmuch tag -inbox +lists/www-discuss       -- folder:gnu/l/www-discuss
notmuch tag -inbox +webmasters              -- folder:gnu/webmasters

notmuch tag -inbox +lists/deepspec          -- folder:gnu/l/deepspec
notmuch tag -inbox +lists/haskell-cafe      -- folder:gnu/l/haskell-cafe
notmuch tag -inbox +lists/haskell-art       -- folder:gnu/l/haskell-art
notmuch tag -inbox +lists/notmuch           -- folder:gnu/l/notmuch
# </gnu>

notmuch tag -inbox -unread +archive/notmuch     -- path:archive/notmuch/**
notmuch tag -inbox -unread +archive/emacs-devel -- path:archive/emacs-devel/**

notmuch.service

:header-args+: :tangle ~/.config/systemd/user/notmuch.service
[Unit]
Description=notmuch service

[Service]
Type=oneshot
ExecStart=/usr/bin/notmuch new
StandardOutput=syslog
StandardError=syslog

notmuch.timer

:header-args+: :tangle ~/.config/systemd/user/notmuch.timer
[Unit]
Description=notmuch timer

[Timer]
OnCalendar=*:0/5
Persistent=true
Unit=notmuch.service

[Install]
WantedBy=timers.target

offlineimap

offlineimaprc

:header-args+: :tangle ~/.offlineimaprc
[general]
pythonfile = ~/.offlineimap.py
accounts = Gmail, aminb
maxsyncaccounts = 3

[Account Gmail]
localrepository = GmailL
remoterepository = GmailR

[Account aminb]
localrepository = aminbL
remoterepository = aminbR

[Repository GmailL]
type = Maildir
localfolders = ~/Maildir/Gmail

[Repository GmailR]
type = IMAP
remotehost = imap.gmail.com
remoteusereval = mailuser("gmail")
remotepasseval = mailpasswd("gmail")
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
ssl = yes
folderfilter = lambda foldername: foldername not in '[Gmail]/All Mail'
maxconnections = 1
realdelete = no

[Repository aminbL]
type = Maildir
localfolders = ~/Maildir/aminb

[Repository aminbR]
type = IMAP
remotehost = mail.aminb.org
remoteusereval = mailuser("aminb")
remotepasseval = mailpasswd("aminb")
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
ssl = yes
folderfilter = lambda foldername: foldername not in 'dovecot.sieve'
maxconnections = 1
realdelete = no

offlineimap.py

:header-args+: :tangle ~/.offlineimap.py
import os
import subprocess

def mailpasswd(acct):
    acct = os.path.basename(acct)
    path = "/home/amin/.passwd/%s.gpg" % acct
    args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
    try:
        return subprocess.check_output(args).strip()
    except subprocess.CalledProcessError:
        return ""

def mailuser(acct):
    acct = os.path.basename(acct)
    path = "/home/amin/.passwd/%s" % acct
    args = ["cat", path]
    try:
        return subprocess.check_output(args).strip()
    except subprocess.CalledProcessError:
        return ""

def prime_gpg_agent():
  ret = False
  i = 1
  while not ret:
    ret = (mailpasswd("prime") == "prime")
    if i > 2:
      from offlineimap.ui import getglobalui
      sys.stderr.write("Error reading in passwords. Terminating.\n")
      getglobalui().terminate()
    i += 1
  return ret

prime_gpg_agent()

pigeonhole

gnu.sieve

:header-args+: :tangle ~/sieve/gnu.sieve :comments none
require [ "regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags", "include" ];

if anyof (
  address :is "from" "webmasters@gnu.org",
  address :is "from" "webmasters-comment@gnu.org") {
  fileinto :create "webmasters";
  stop;
}

include :personal "lists";

lists.sieve

:header-args+: :tangle ~/sieve/lists.sieve :comments none
require [ "regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags",
 "include" ];

if anyof (
    header :contains "list-id" "<emacs-devel.gnu.org>",
    header :contains "list-id" "<emacs-orgmode.gnu.org>",
    header :contains "list-id" "<emacsconf-discuss.gnu.org>",
    header :contains "list-id" "<fencepost-users.gnu.org>",
    header :contains "list-id" "<guix-devel.gnu.org>",
    header :contains "list-id" "<guile-devel.gnu.org>",
    header :contains "list-id" "<help-gnu-emacs.gnu.org>",
    header :contains "list-id" "<info-gnu-emacs.gnu.org>",
    header :contains "list-id" "<www-commits.gnu.org>",
    header :contains "list-id" "<www-discuss.gnu.org>",
    header :contains "list-id" "<deepspec.lists.cs.princeton.edu>",
    header :contains "list-id" "<haskell-cafe.haskell.org>",
    header :contains "list-id" "<haskell-art.we.lurk.org>",
    header :contains "list-id" "<notmuch.notmuchmail.org>") {
    if header :regex "list-id" "<([a-z_0-9-]+)[.@]" {
        set :lower "listname" "${1}";
        fileinto :create "l/${listname}";
    }
}

polybar

config

:header-args+: :tangle ~/.config/polybar/config
;=====================================================
;
;   To learn more about how to configure Polybar
;   go to https://github.com/jaagr/polybar
;
;   The README contains alot of information
;
;=====================================================

[colors]
;background = ${xrdb:color0:#222}
background = #222
background-alt = #444
;foreground = ${xrdb:color7:#222}
foreground = #eee
foreground-alt = #888
primary = #ffb52a
secondary = #e60053
alert = #bd2c40

[bar/main]
;monitor = ${env:MONITOR:HDMI-1}
width = 100%
height = 27
;offset-x = 1%
;offset-y = 1%
radius = 3.0
fixed-center = true

background = ${colors.background}
foreground = ${colors.foreground}

line-size = 3
line-color = #f00

border-size = 4
border-color = #00000000

padding-left = 0
padding-right = 2

module-margin-left = 2
module-margin-right = 2

font-0 = Ubuntu:fontformat=truetype:antialias=true:pixelsize=9;1
font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
font-2 = Wuncon Siji:pixelsize=10;1
font-3 = FontAwesome:pixelsize=10;1

modules-left = bspwm xwindow
modules-center = 
modules-right = volume filesystem mail xkeyboard memory cpu temperature date powermenu

tray-position = right
tray-padding = 1
;tray-transparent = true
;tray-background = #0063ff
tray-maxsize = 18

wm-restack = bspwm

;override-redirect = true

scroll-up = bspwm-desknext
scroll-down = bspwm-deskprev

[module/xwindow]
type = internal/xwindow
label = %title:0:50:...%

[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock

format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.secondary}

label-layout = %layout%
label-layout-underline = ${colors.secondary}

label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-background = ${colors.secondary}
label-indicator-underline = ${colors.secondary}

[module/filesystem]
type = internal/fs
interval = 25

mount-0 = /

label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.foreground-alt}

[module/bspwm]
type = internal/bspwm

label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2

label-occupied = %index%
label-occupied-padding = 2

label-urgent = %index%!
label-urgent-background = ${colors.alert}
label-urgent-padding = 2

label-empty = %index%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2

[module/i3]
type = internal/i3
format = <label-state> <label-mode>
index-sort = true
wrapping-scroll = false

; Only show workspaces on the same output as the bar
;pin-workspaces = true

label-mode-padding = 2
label-mode-foreground = #000
label-mode-background = ${colors.primary}

; focused = Active workspace on focused monitor
label-focused = %index%
label-focused-background = ${module/bspwm.label-focused-background}
label-focused-underline = ${module/bspwm.label-focused-underline}
label-focused-padding = ${module/bspwm.label-focused-padding}

; unfocused = Inactive workspace on any monitor
label-unfocused = %index%
label-unfocused-padding = ${module/bspwm.label-occupied-padding}

; visible = Active workspace on unfocused monitor
label-visible = %index%
label-visible-background = ${self.label-focused-background}
label-visible-underline = ${self.label-focused-underline}
label-visible-padding = ${self.label-focused-padding}

; urgent = Workspace with urgency hint set
label-urgent = %index%
label-urgent-background = ${module/bspwm.label-urgent-background}
label-urgent-padding = ${module/bspwm.label-urgent-padding}

[module/mpd]
type = internal/mpd
format-online = <label-song>  <icon-prev> <icon-stop> <toggle> <icon-next>

icon-prev = 
icon-stop = 
icon-play = 
icon-pause = 
icon-next = 

label-song-maxlen = 25
label-song-ellipsis = true

[module/xbacklight]
type = internal/xbacklight

format = <label> <bar>
label = BL

bar-width = 10
bar-indicator = |
bar-indicator-foreground = #ff
bar-indicator-font = 2
bar-fill = ─
bar-fill-font = 2
bar-fill-foreground = #9f78e1
bar-empty = ─
bar-empty-font = 2
bar-empty-foreground = ${colors.foreground-alt}

[module/backlight-acpi]
inherit = module/xbacklight
type = internal/backlight
;card = intel_backlight
card = mba6x_backlight

[module/cpu]
type = internal/cpu
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #f90000
label = %percentage%%

[module/memory]
type = internal/memory
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #4bffdc
label = %percentage_used%%

[module/wlan]
type = internal/network
interface = 
interval = 3.0

format-connected = <ramp-signal> <label-connected>
format-connected-underline = #9f78e1
label-connected = %essid%

format-disconnected =
;format-disconnected = <label-disconnected>
;format-disconnected-underline = ${self.format-connected-underline}
;label-disconnected = %ifname% disconnected
;label-disconnected-foreground = ${colors.foreground-alt}

ramp-signal-0 = 
ramp-signal-1 = 
ramp-signal-2 = 
ramp-signal-3 = 
ramp-signal-4 = 
ramp-signal-foreground = ${colors.foreground-alt}

[module/eth]
type = internal/network
interface = 
interval = 3.0

format-connected-underline = #55aa55
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = %local_ip%

format-disconnected =
;format-disconnected = <label-disconnected>
;format-disconnected-underline = ${self.format-connected-underline}
;label-disconnected = %ifname% disconnected
;label-disconnected-foreground = ${colors.foreground-alt}

[module/date]
type = internal/date
interval = 5

date =
date-alt = " %Y-%m-%d"

time = %H:%M
time-alt = %H:%M:%S

format-prefix = 
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #0a6cf5

label = %date% %time%

[module/volume]
type = internal/volume

format-volume = <label-volume> <bar-volume>
label-volume = vol
label-volume-foreground = ${root.foreground}

format-muted-prefix = " "
format-muted-foreground = ${colors.foreground-alt}
label-muted = mute

bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 2
bar-volume-fill = ─
bar-volume-fill-font = 2
bar-volume-empty = ─
bar-volume-empty-font = 2
bar-volume-empty-foreground = ${colors.foreground-alt}

[module/battery]
type = internal/battery
battery = BAT0
adapter = ADP1
full-at = 64

format-charging = <animation-charging> <label-charging>
format-charging-underline = #ffb52a

format-discharging = <ramp-capacity> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}

format-full-prefix = " "
format-full-prefix-foreground = ${colors.foreground-alt}
format-full-underline = ${self.format-charging-underline}

ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-foreground = ${colors.foreground-alt}

animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-foreground = ${colors.foreground-alt}
animation-charging-framerate = 750

[module/temperature]
type = internal/temperature
thermal-zone = 1
warn-temperature = 66

format = <ramp> <label>
format-underline = #f50a4d
format-warn = <ramp> <label-warn>
format-warn-underline = ${self.format-underline}

label = %temperature%
label-warn = %temperature%
label-warn-foreground = ${colors.secondary}

ramp-0 = 
ramp-1 = 
ramp-2 = 
ramp-foreground = ${colors.foreground-alt}

[module/powermenu]
type = custom/menu

format-spacing = 1

label-open = 
label-open-foreground = ${colors.secondary}
label-close =  cancel
label-close-foreground = ${colors.secondary}
label-separator = |
label-separator-foreground = ${colors.foreground-alt}

menu-0-0 = reboot
menu-0-0-exec = menu-open-1
menu-0-1 = power off
menu-0-1-exec = menu-open-2

menu-1-0 = cancel
menu-1-0-exec = menu-open-0
menu-1-1 = reboot
menu-1-1-exec = sudo reboot

menu-2-0 = power off
menu-2-0-exec = sudo poweroff
menu-2-1 = cancel
menu-2-1-exec = menu-open-0

[module/mail]
type = custom/script
interval = 60
format = <label>
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #0a6cf5
exec = notmuch count tag:unread

[settings]
screenchange-reload = true
;compositing-background = xor
;compositing-background = screen
;compositing-foreground = source
;compositing-border = over

[global/wm]
margin-top = 0
margin-bottom = 0

; vim:ft=dosini

polybar-launch

:header-args+: :tangle ~/.local/bin/polybar-launch :shebang “#!/usr/bin/env sh”
# Terminate already running bar instances
killall -q polybar

# Wait until the processes have been shut down
while pgrep -x polybar >/dev/null; do sleep 1; done

# Launch main bar
polybar main &

echo "Bars launched..."

PowerTOP

:header-args+: :tangle “/sudo::/etc/systemd/system/powertop.service”
[Unit]
Description=Powertop tunings

[Service]
ExecStart=/usr/bin/powertop --auto-tune
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

ranger

rc.conf

:header-args+: :tangle ~/.config/ranger/rc.conf
# ===================================================================
# This file contains the default startup commands for ranger.
# To change them, it is recommended to create the file
# ~/.config/ranger/rc.conf and add your custom commands there.
#
# If you copy this whole file there, you may want to set the environment
# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
#
# The purpose of this file is mainly to define keybindings and settings.
# For running more complex python code, please create a plugin in "plugins/" or
# a command in "commands.py".
#
# Each line is a command that will be run before the user interface
# is initialized.  As a result, you can not use commands which rely
# on the UI such as :delete or :mark.
# ===================================================================

# ===================================================================
# == Options
# ===================================================================

# How many columns are there, and what are their relative widths?
set column_ratios 1,3,4

# Which files should be hidden? (regular expression)
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$

# Show hidden files? You can toggle this by typing 'zh'
set show_hidden false

# Ask for a confirmation when running the "delete" command?
# Valid values are "always" (default), "never", "multiple"
# With "multiple", ranger will ask only if you delete multiple files at once.
set confirm_on_delete multiple

# Which script is used to generate file previews?
# ranger ships with scope.sh, a script that calls external programs (see
# README for dependencies) to preview images, archives, etc.
set preview_script ~/.config/ranger/scope.sh

# Use the external preview script or display simple plain text previews?
set use_preview_script true

# Open all images in this directory when running certain image viewers
# like feh or sxiv?  You can still open selected files by marking them.
set open_all_images true

# Be aware of version control systems and display information.
set vcs_aware false

# State of the three backends git, hg, bzr. The possible states are
# disabled, local (only show local info), enabled (show local and remote
# information).
set vcs_backend_git enabled
set vcs_backend_hg disabled
set vcs_backend_bzr disabled

# Preview images in full color with the external command "w3mimgpreview"?
# This requires the console web browser "w3m" and a supported terminal.
# It has been successfully tested with "xterm" and "urxvt" without tmux.
set preview_images true

# Use a unicode "..." character to mark cut-off filenames?
set unicode_ellipsis false

# Show dotfiles in the bookmark preview box?
set show_hidden_bookmarks true

# Which colorscheme to use?  These colorschemes are available by default:
# default, jungle, snow
set colorscheme default

# Preview files on the rightmost column?
# And collapse (shrink) the last column if there is nothing to preview?
set preview_files true
set preview_directories true
set collapse_preview true

# Save the console history on exit?
set save_console_history true

# Draw the status bar on top of the browser window (default: bottom)
set status_bar_on_top false

# Draw a progress bar in the status bar which displays the average state of all
# currently running tasks which support progress bars?
set draw_progress_bar_in_status_bar true

# Draw borders around columns?
set draw_borders true

# Display the directory name in tabs?
set dirname_in_tabs false

# Enable the mouse support?
set mouse_enabled true

# Display the file size in the main column or status bar?
set display_size_in_main_column true
set display_size_in_status_bar true

# Display files tags in all columns or only in main column?
set display_tags_in_all_columns true

# Set a title for the window?
set update_title false

# Set the title to "ranger" in the tmux program?
set update_tmux_title false

# Shorten the title if it gets long?  The number defines how many
# directories are displayed at once, 0 turns off this feature.
set shorten_title 3

# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
set tilde_in_titlebar false

# How many directory-changes or console-commands should be kept in history?
set max_history_size 20
set max_console_history_size 50

# Try to keep so much space between the top/bottom border when scrolling:
set scroll_offset 8

# Flush the input after each key hit?  (Noticable when ranger lags)
set flushinput true

# Padding on the right when there's no preview?
# This allows you to click into the space to run the file.
set padding_right true

# Save bookmarks (used with mX and `X) instantly?
# This helps to synchronize bookmarks between multiple ranger
# instances but leads to *slight* performance loss.
# When false, bookmarks are saved when ranger is exited.
set autosave_bookmarks true

# You can display the "real" cumulative size of directories by using the
# command :get_cumulative_size or typing "dc".  The size is expensive to
# calculate and will not be updated automatically.  You can choose
# to update it automatically though by turning on this option:
set autoupdate_cumulative_size false

# Turning this on makes sense for screen readers:
set show_cursor false

# One of: size, basename, mtime, type
set sort natural

# Additional sorting options
set sort_reverse false
set sort_case_insensitive true
set sort_directories_first true

# Enable this if key combinations with the Alt Key don't work for you.
# (Especially on xterm)
set xterm_alt_key false

# ===================================================================
# == Local Options
# ===================================================================
# You can set local options that only affect a single directory.

# Examples:
# setlocal path=~/downloads sort mtime

# ===================================================================
# == Command Aliases in the Console
# ===================================================================

alias e    edit
alias q    quit
alias q!   quitall
alias qall quitall
alias setl setlocal

alias filter     scout -prt
alias find       scout -aet
alias mark       scout -mr
alias unmark     scout -Mr
alias search     scout -rs
alias search_inc scout -rts
alias travel     scout -aefiklst

# ===================================================================
# == Define keys for the browser
# ===================================================================

# Basic
map     Q quit!
map     q quit
copymap q ZZ ZQ

map R     reload_cwd
map <C-r> reset
map <C-l> redraw_window
map <C-c> abort
map <esc> change_mode normal

map i display_file
map ? help
map W display_log
map w taskview_open
map S shell $SHELL

map :  console
map ;  console
map !  console shell 
map @  console -p6 shell  %%s
map #  console shell -p 
map s  console shell 
map r  chain draw_possible_programs; console open_with 
map f  console find 
map cd console cd 

# Tagging / Marking
map t       tag_toggle
map ut      tag_remove
map "<any>  tag_toggle tag=%any
map <Space> mark_files toggle=True
map v       mark_files all=True toggle=True
map uv      mark_files all=True val=False
map V       toggle_visual_mode
map uV      toggle_visual_mode reverse=True

# For the nostalgics: Midnight Commander bindings
map <F1> help
map <F3> display_file
map <F4> edit
map <F5> copy
map <F6> cut
map <F7> console mkdir 
map <F8> console delete
map <F10> exit

# In case you work on a keyboard with dvorak layout
map <UP>       move up=1
map <DOWN>     move down=1
map <LEFT>     move left=1
map <RIGHT>    move right=1
map <HOME>     move to=0
map <END>      move to=-1
map <PAGEDOWN> move down=1   pages=True
map <PAGEUP>   move up=1     pages=True
map <CR>       move right=1
map <DELETE>   console delete
map <INSERT>   console touch 

# VIM-like
copymap <UP>       k
copymap <DOWN>     j
copymap <LEFT>     h
copymap <RIGHT>    l
copymap <HOME>     gg
copymap <END>      G
copymap <PAGEDOWN> <C-F>
copymap <PAGEUP>   <C-B>

map J  move down=0.5  pages=True
map K  move up=0.5    pages=True
copymap J <C-D>
copymap K <C-U>

# Jumping around
map H     history_go -1
map L     history_go 1
map ]     move_parent 1
map [     move_parent -1
map }     traverse

map gh cd ~
map ge cd /etc
map gu cd /usr
map gd cd /dev
map gl cd -r .
map gL cd -r %f
map go cd /opt
map gv cd /var
map gm cd /media
map gM cd /mnt
map gs cd /srv
map gr cd /
map gR eval fm.cd(ranger.RANGERDIR)
map g/ cd /
map g? cd /usr/share/doc/ranger

# External Programs
map E  edit
map du shell -p du --max-depth=1 -h --apparent-size
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
map yp shell -d echo -n %d/%f | xsel -i
map yd shell -d echo -n %d    | xsel -i
map yn shell -d echo -n %f    | xsel -i

# Filesystem Operations
map =  chmod

map cw console rename 
map A  eval fm.open_console('rename ' + fm.thisfile.basename)
map I  eval fm.open_console('rename ' + fm.thisfile.basename, position=7)

map pp paste
map po paste overwrite=True
map pl paste_symlink relative=False
map pL paste_symlink relative=True
map phl paste_hardlink
map pht paste_hardlinked_subtree

map dd cut
map ud uncut
map da cut mode=add
map dr cut mode=remove

map yy copy
map uy uncut
map ya copy mode=add
map yr copy mode=remove

# Temporary workarounds
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
map dG  eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
map dj  eval fm.cut(dirarg=dict(down=1), narg=quantifier)
map dk  eval fm.cut(dirarg=dict(up=1), narg=quantifier)
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
map yG  eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
map yj  eval fm.copy(dirarg=dict(down=1), narg=quantifier)
map yk  eval fm.copy(dirarg=dict(up=1), narg=quantifier)

# Searching
map /  console search 
map n  search_next
map N  search_next forward=False
map ct search_next order=tag
map cs search_next order=size
map ci search_next order=mimetype
map cc search_next order=ctime
map cm search_next order=mtime
map ca search_next order=atime

# Tabs
map <C-n>     tab_new ~
map <C-w>     tab_close
map <TAB>     tab_move 1
map <S-TAB>   tab_move -1
map <A-Right> tab_move 1
map <A-Left>  tab_move -1
map gt        tab_move 1
map gT        tab_move -1
map gn        tab_new ~
map gc        tab_close
map uq        tab_restore
map <a-1>     tab_open 1
map <a-2>     tab_open 2
map <a-3>     tab_open 3
map <a-4>     tab_open 4
map <a-5>     tab_open 5
map <a-6>     tab_open 6
map <a-7>     tab_open 7
map <a-8>     tab_open 8
map <a-9>     tab_open 9

# Sorting
map or toggle_option sort_reverse
map os chain set sort=size;      set sort_reverse=False
map ob chain set sort=basename;  set sort_reverse=False
map on chain set sort=natural;   set sort_reverse=False
map om chain set sort=mtime;     set sort_reverse=False
map oc chain set sort=ctime;     set sort_reverse=False
map oa chain set sort=atime;     set sort_reverse=False
map ot chain set sort=type;      set sort_reverse=False

map oS chain set sort=size;      set sort_reverse=True
map oB chain set sort=basename;  set sort_reverse=True
map oN chain set sort=natural;   set sort_reverse=True
map oM chain set sort=mtime;     set sort_reverse=True
map oC chain set sort=ctime;     set sort_reverse=True
map oA chain set sort=atime;     set sort_reverse=True
map oT chain set sort=type;      set sort_reverse=True

map dc get_cumulative_size

# Settings
map zc    toggle_option collapse_preview
map zd    toggle_option sort_directories_first
map zh    toggle_option show_hidden
map <C-h> toggle_option show_hidden
map zi    toggle_option flushinput
map zm    toggle_option mouse_enabled
map zp    toggle_option preview_files
map zP    toggle_option preview_directories
map zs    toggle_option sort_case_insensitive
map zu    toggle_option autoupdate_cumulative_size
map zv    toggle_option use_preview_script
map zf    console filter 

# Bookmarks
map `<any>  enter_bookmark %any
map '<any>  enter_bookmark %any
map m<any>  set_bookmark %any
map um<any> unset_bookmark %any

map m<bg>   draw_bookmarks
copymap m<bg>  um<bg> `<bg> '<bg>

# Generate all the chmod bindings with some python help:
eval for arg in "rwxXst": cmd("map +u{0} shell -d chmod u+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +g{0} shell -d chmod g+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +o{0} shell -d chmod o+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +a{0} shell -d chmod a+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +{0}  shell -d chmod u+{0} %s".format(arg))

eval for arg in "rwxXst": cmd("map -u{0} shell -d chmod u-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -g{0} shell -d chmod g-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -o{0} shell -d chmod o-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -a{0} shell -d chmod a-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -{0}  shell -d chmod u-{0} %s".format(arg))

# ===================================================================
# == Define keys for the console
# ===================================================================
# Note: Unmapped keys are passed directly to the console.

# Basic
cmap <tab>   eval fm.ui.console.tab()
cmap <s-tab> eval fm.ui.console.tab(-1)
cmap <ESC>   eval fm.ui.console.close()
cmap <CR>    eval fm.ui.console.execute()
cmap <C-l>   redraw_window

copycmap <ESC> <C-c>
copycmap <CR>  <C-j>

# Move around
cmap <up>    eval fm.ui.console.history_move(-1)
cmap <down>  eval fm.ui.console.history_move(1)
cmap <left>  eval fm.ui.console.move(left=1)
cmap <right> eval fm.ui.console.move(right=1)
cmap <home>  eval fm.ui.console.move(right=0, absolute=True)
cmap <end>   eval fm.ui.console.move(right=-1, absolute=True)

# Line Editing
cmap <backspace>  eval fm.ui.console.delete(-1)
cmap <delete>     eval fm.ui.console.delete(0)
cmap <C-w>        eval fm.ui.console.delete_word()
cmap <C-k>        eval fm.ui.console.delete_rest(1)
cmap <C-u>        eval fm.ui.console.delete_rest(-1)
cmap <C-y>        eval fm.ui.console.paste()

# And of course the emacs way
copycmap <up>        <C-p>
copycmap <down>      <C-n>
copycmap <left>      <C-b>
copycmap <right>     <C-f>
copycmap <home>      <C-a>
copycmap <end>       <C-e>
copycmap <delete>    <C-d>
copycmap <backspace> <C-h>

# Note: There are multiple ways to express backspaces.  <backspace> (code 263)
# and <backspace2> (code 127).  To be sure, use both.
copycmap <backspace> <backspace2>

# This special expression allows typing in numerals:
cmap <allow_quantifiers> false

# ===================================================================
# == Pager Keybindings
# ===================================================================

# Movement
pmap  <down>      pager_move  down=1
pmap  <up>        pager_move  up=1
pmap  <left>      pager_move  left=4
pmap  <right>     pager_move  right=4
pmap  <home>      pager_move  to=0
pmap  <end>       pager_move  to=-1
pmap  <pagedown>  pager_move  down=1.0  pages=True
pmap  <pageup>    pager_move  up=1.0    pages=True
pmap  <C-d>       pager_move  down=0.5  pages=True
pmap  <C-u>       pager_move  up=0.5    pages=True

copypmap <UP>       k  <C-p>
copypmap <DOWN>     j  <C-n> <CR>
copypmap <LEFT>     h
copypmap <RIGHT>    l
copypmap <HOME>     g
copypmap <END>      G
copypmap <C-d>      d
copypmap <C-u>      u
copypmap <PAGEDOWN> n  f  <C-F>  <Space>
copypmap <PAGEUP>   p  b  <C-B>

# Basic
pmap     <ESC> pager_close
copypmap <ESC> q Q i <F3>
pmap E      edit_file

# ===================================================================
# == Taskview Keybindings
# ===================================================================

# Movement
tmap <up>        taskview_move up=1
tmap <down>      taskview_move down=1
tmap <home>      taskview_move to=0
tmap <end>       taskview_move to=-1
tmap <pagedown>  taskview_move down=1.0  pages=True
tmap <pageup>    taskview_move up=1.0    pages=True
tmap <C-d>       taskview_move down=0.5  pages=True
tmap <C-u>       taskview_move up=0.5    pages=True

copytmap <UP>       k  <C-p>
copytmap <DOWN>     j  <C-n> <CR>
copytmap <HOME>     g
copytmap <END>      G
copytmap <C-u>      u
copytmap <PAGEDOWN> n  f  <C-F>  <Space>
copytmap <PAGEUP>   p  b  <C-B>

# Changing priority and deleting tasks
tmap J          eval -q fm.ui.taskview.task_move(-1)
tmap K          eval -q fm.ui.taskview.task_move(0)
tmap dd         eval -q fm.ui.taskview.task_remove()
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1)
tmap <pageup>   eval -q fm.ui.taskview.task_move(0)
tmap <delete>   eval -q fm.ui.taskview.task_remove()

# Basic
tmap <ESC> taskview_close
copytmap <ESC> q Q w <C-c>

scope.sh

:header-args+: :tangle ~/.config/ranger/scope.sh :shebang “#!/usr/bin/env sh”
# ranger supports enhanced previews.  If the option "use_preview_script"
# is set to True and this file exists, this script will be called and its
# output is displayed in ranger.  ANSI color codes are supported.

# NOTES: This script is considered a configuration file.  If you upgrade
# ranger, it will be left untouched. (You must update it yourself.)
# Also, ranger disables STDIN here, so interactive scripts won't work properly

# Meanings of exit codes:
# code | meaning    | action of ranger
# -----+------------+-------------------------------------------
# 0    | success    | success. display stdout as preview
# 1    | no preview | failure. display no preview at all
# 2    | plain text | display the plain content of the file
# 3    | fix width  | success. Don't reload when width changes
# 4    | fix height | success. Don't reload when height changes
# 5    | fix both   | success. Don't ever reload

# Meaningful aliases for arguments:
path="$1"    # Full path of the selected file
width="$2"   # Width of the preview pane (number of fitting characters)
height="$3"  # Height of the preview pane (number of fitting characters)

maxln=200    # Stop after $maxln lines.  Can be used like ls | head -n $maxln

# Find out something about the file:
mimetype=$(file --mime-type -Lb "$path")
extension=${path##*.}

# Functions:
# runs a command and saves its output into $output.  Useful if you need
# the return value AND want to use the output in a pipe
try() { output=$(eval '"$@"'); }

# writes the output of the previouosly used "try" command
dump() { echo "$output"; }

# a common post-processing function used after most commands
trim() { head -n "$maxln"; }

# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success
highlight() { command highlight "$@"; test $? = 0 -o $? = 141; }

case "$extension" in
    # Archive extensions:
    7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
    rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
        try als "$path" && { dump | trim; exit 0; }
        try acat "$path" && { dump | trim; exit 3; }
        try bsdtar -lf "$path" && { dump | trim; exit 0; }
        exit 1;;
    rar)
        try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;;
    # PDF documents:
    pdf)
        try pdftotext -l 10 -nopgbrk -q "$path" - && \
            { dump | trim | fmt -s -w $width; exit 0; } || exit 1;;
    # BitTorrent Files
    torrent)
        try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;;
    # HTML Pages:
    htm|html|xhtml)
        try w3m    -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
        try lynx   -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
        try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
        ;; # fall back to highlight/cat if the text browsers fail
esac

case "$mimetype" in
    # Syntax highlight for text files:
    text/* | */xml)
        try highlight --out-format=ansi "$path" && { dump | trim; exit 5; } || exit 2;;
    # Ascii-previews of images:
    image/*)
        img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;;
    # Display information about media files:
    video/* | audio/*)
        exiftool "$path" && exit 5
        # Use sed to remove spaces so the output fits into the narrow window
        try mediainfo "$path" && { dump | trim | sed 's/  \+:/: /;';  exit 5; } || exit 1;;
esac

exit 1

redshift

:header-args+: :tangle ~/.config/redshift.conf :comments none
; Global settings for redshift
[redshift]
; Set the day and night screen temperatures (Neutral is 6500K)
;temp-day=5700
;temp-night=3500

;temp-day=6500
temp-day=6200
;temp-night=4800
;temp-night=5000
;temp-night=4500
temp-night=4000

; Enable/Disable a smooth transition between day and night
; 0 will cause a direct change from day to night screen temperature.
; 1 will gradually increase or decrease the screen temperature.
transition=1

; Set the screen brightness. Default is 1.0.
;brightness=0.9
; It is also possible to use different settings for day and night
; since version 1.8.
;brightness-day=0.7
;brightness-night=0.4
; Set the screen gamma (for all colors, or each color channel
; individually)
;gamma=0.8
;gamma=1.0
;gamma=0.8:0.7:0.8
; This can also be set individually for day and night since
; version 1.10.
;gamma-day=0.8:0.7:0.8
;gamma-night=0.6

; Set the location-provider: 'geoclue2' or 'manual'
; type 'redshift -l list' to see possible values.
; The location provider settings are in a different section.
;location-provider=manual
location-provider=geoclue2

; Set the adjustment-method: 'randr', 'vidmode'
; type 'redshift -m list' to see all possible values.
; 'randr' is the preferred method, 'vidmode' is an older API.
; but works in some cases when 'randr' does not.
; The adjustment method settings are in a different section.
adjustment-method=randr

; Configuration of the location-provider:
; type 'redshift -l PROVIDER:help' to see the settings.
; ex: 'redshift -l manual:help'
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.
;[manual]
;lat=48.1
;lon=11.6

; Configuration of the adjustment-method
; type 'redshift -m METHOD:help' to see the settings.
; ex: 'redshift -m randr:help'
; In this example, randr is configured to adjust screen 1.
; Note that the numbering starts from 0, so this is actually the
; second screen. If this option is not specified, Redshift will try
; to adjust _all_ screens.
;[randr]
;screen=1

rofi

:header-args+: :tangle ~/.config/rofi/config
rofi.font: Ubuntu Mono 13
! rofi.font: Inconsolata 16
! rofi.font: Iosevka 13
! rofi.font: Source Code Pro 11
rofi.modi: run,window
! rofi.width: 640
rofi.width: 600
!rofi.location: 2
!rofi.yoffset: 200
rofi.monitor: -1
!rofi.lines: 10

!rofi.theme: /usr/share/rofi/themes//Arc.rasi
!rofi.theme: /usr/share/rofi/themes//Paper.rasi
!rofi.theme: /usr/share/rofi/themes//sidebar.rasi

rofi.theme: /usr/share/rofi/themes//gruvbox-light.rasi

rofi-pass

:header-args+: :tangle ~/.config/rofi-pass/config
# permanently set alternative root dir
# root=/path/to/root

# rofi command. Make sure to have "$@" as last argument
_rofi () {
    #rofi -no-auto-select -kb-accept-entry "!Return" -i -no-levenshtein-sort "$@"
    rofi -i -no-auto-select -kb-accept-entry "!Return" "$@"
}

# xdotool needs the keyboard layout to be set using setxkbmap
# You can do this in your autostart scripts (e.g. xinitrc)

# If for some reason, you cannot do this, you can set the command here.
# and set fix_layout to true
fix_layout=false

layout_cmd () {
  setxkbmap us
}

# fields to be used
URL_field='url'
USERNAME_field='user'
AUTOTYPE_field='autotype'

# delay to be used for :delay keyword
delay=2

## Programs to be used
# Editor
EDITOR='gvim -f'

# Browser
BROWSER='chromium'

## Misc settings

default_do='menu' # menu, autotype, copyPass, typeUser, typePass, copyUser, copyUrl, viewEntry, typeMenu, actionMenu, copyMenu, openUrl
auto_enter='false'
notify='false'
default_autotype='user :tab pass'

# color of the help messages
# leave empty for autodetection
help_color="#4872FF"

# Clipboard settings
# Possible options: primary, clipboard, both
clip=primary

# Options for generating new password entries
# default_user is also used for password files that have no user field.
default_user=aminb
default_user2=aminban
password_length=30

# Custom Keybindings
#autotype="Alt+1"
autotype="Alt+m"
type_user="Alt+2"
type_pass="Alt+3"
open_url="Alt+4"
copy_name="Alt+u"
copy_url="Alt+l"
copy_pass="Alt+p"
show="Alt+o"
copy_entry="Alt+2"
type_entry="Alt+1"
copy_menu="Alt+c"
action_menu="Alt+a"
type_menu="Alt+t"
help="Alt+h"
switch="Alt+x"
insert_pass="Alt+n"

sway

:header-args+: :tangle ~/.config/sway/config
exec xrdb .Xresources
exec dunst
### Variables
# super
set $mod Mod4
# alt
set $mod2 Mod1
set $left h
set $down j
set $up k
set $right l
set $term urxvt
set $menu rofi -show run -display-run '> ' -display-window ' 🗔 '

### Output configuration
#
# Default wallpaper (more resolutions are available in __DATADIR__/backgrounds/sway/)
output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
#
# Example configuration:
#
#   output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs

### Idle configuration
#
# Example configuration:
#
#exec swayidle \
#    timeout 300 'swaylock -c 000000' \
#    timeout 600 'swaymsg "output * dpms off"' \
#       resume 'swaymsg "output * dpms on"' \
#    before-sleep 'swaylock -c 000000'
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 600 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.

### Input configuration

input "1739:31251:DLL07BE:01_06CB:7A13_Touchpad" {
    dwt enabled
    tap enabled
    natural_scroll enabled
    middle_emulation enabled
    click_method clickfinger
}

input "1:1:AT_Translated_Set_2_keyboard" {
    repeat_delay 200
    repeat_rate 45
    xkb_layout us,ir
    xkb_options ctrl:nocaps,altwin:swap_alt_win,ctrl:rctrl_ralt,grp:shifts_toggle
}


### Key bindings
#
# Basics:
#
    # start a terminal
    bindsym $mod+Return exec $term

    # kill focused window
    bindsym $mod+Shift+q kill

    # start your launcher
    bindsym $mod+d exec $menu

    # Drag floating windows by holding down $mod and left mouse button.
    # Resize them with right mouse button + $mod.
    # Despite the name, also works for non-floating windows.
    # Change normal to inverse to use left mouse button for resizing and right
    # mouse button for dragging.
    floating_modifier $mod normal

    # reload the configuration file
    bindsym $mod+Shift+c reload

    # exit sway (logs you out of your wayland session)
    bindsym $mod+Shift+e exit

    bindsym $mod+apostrophe exec rofi-light        # rofi-based brightness chooser
    bindsym XF86MonBrightnessUp exec light -A 5    # increase screen brightness
    bindsym XF86MonBrightnessDown exec light -U 5  # decrease screen brightness

    bindsym XF86AudioRaiseVolume exec pamixer --allow-boost --increase 5
    bindsym XF86AudioLowerVolume exec pamixer --allow-boost --decrease 5
    bindsym XF86AudioMute exec pamixer --toggle-mute
    bindsym XF86AudioMicMute exec pactl set-source-mute 1 toggle

    # original sway workspace switch and window move
    bindsym $mod+bracketleft workspace prev
    bindsym $mod+bracketright workspace next
    bindsym $mod+braceleft move container to workspace prev
    bindsym $mod+braceright move container to workspace next

    # bspwm-esque workspace switch and window move
    bindsym $mod2+bracketleft exec sway-ws-util switch prev
    bindsym $mod2+bracketright exec sway-ws-util switch next
    bindsym $mod2+braceleft exec sway-ws-util move prev follow
    bindsym $mod2+braceright exec sway-ws-util move next follow
#
# Moving around:
#
    # Move your focus around
    bindsym $mod+$left focus left
    bindsym $mod+$down focus down
    bindsym $mod+$up focus up
    bindsym $mod+$right focus right
    # or use $mod+[up|down|left|right]
    bindsym $mod+Left focus left
    bindsym $mod+Down focus down
    bindsym $mod+Up focus up
    bindsym $mod+Right focus right

    # _move_ the focused window with the same, but add Shift
    bindsym $mod+Shift+$left move left
    bindsym $mod+Shift+$down move down
    bindsym $mod+Shift+$up move up
    bindsym $mod+Shift+$right move right
    # ditto, with arrow keys
    bindsym $mod+Shift+Left move left
    bindsym $mod+Shift+Down move down
    bindsym $mod+Shift+Up move up
    bindsym $mod+Shift+Right move right
#
# Workspaces:
#
    # switch to workspace
    bindsym $mod+1 workspace 1
    bindsym $mod+2 workspace 2
    bindsym $mod+3 workspace 3
    bindsym $mod+4 workspace 4
    bindsym $mod+5 workspace 5
    bindsym $mod+6 workspace 6
    bindsym $mod+7 workspace 7
    bindsym $mod+8 workspace 8
    bindsym $mod+9 workspace 9
    bindsym $mod+0 workspace 10
    # move focused container to workspace
    bindsym $mod+Shift+1 move container to workspace 1
    bindsym $mod+Shift+2 move container to workspace 2
    bindsym $mod+Shift+3 move container to workspace 3
    bindsym $mod+Shift+4 move container to workspace 4
    bindsym $mod+Shift+5 move container to workspace 5
    bindsym $mod+Shift+6 move container to workspace 6
    bindsym $mod+Shift+7 move container to workspace 7
    bindsym $mod+Shift+8 move container to workspace 8
    bindsym $mod+Shift+9 move container to workspace 9
    bindsym $mod+Shift+0 move container to workspace 10
    # Note: workspaces can have any name you want, not just numbers.
    # We just use 1-10 as the default.
#
# Layout stuff:
#
    # You can "split" the current object of your focus with
    # $mod+b or $mod+v, for horizontal and vertical splits
    # respectively.
    bindsym $mod+b splith
    bindsym $mod+v splitv

    # Switch the current container between different layout styles
    bindsym $mod+s layout stacking
    bindsym $mod+w layout tabbed
    bindsym $mod+e layout toggle split

    # Make the current focus fullscreen
    bindsym $mod+f fullscreen

    # Toggle the current focus between tiling and floating mode
    bindsym $mod+Shift+space floating toggle

    # Swap focus between the tiling area and the floating area
    bindsym $mod+space focus mode_toggle

    # move focus to the parent container
    bindsym $mod+a focus parent
#
# Scratchpad:
#
    # Sway has a "scratchpad", which is a bag of holding for windows.
    # You can send windows there and get them back later.

    # Move the currently focused window to the scratchpad
    bindsym $mod+Shift+minus move scratchpad

    # Show the next scratchpad window or hide the focused scratchpad window.
    # If there are multiple scratchpad windows, this command cycles through them.
    bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
    # left will shrink the containers width
    # right will grow the containers width
    # up will shrink the containers height
    # down will grow the containers height
    bindsym $left resize shrink width 10px
    bindsym $down resize grow height 10px
    bindsym $up resize shrink height 10px
    bindsym $right resize grow width 10px

    # ditto, with arrow keys
    bindsym Left resize shrink width 10px
    bindsym Down resize grow height 10px
    bindsym Up resize shrink height 10px
    bindsym Right resize grow width 10px

    # return to default mode
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+Shift+r mode "resize"

#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
    position bottom
    colors {
        statusline #ffffff
        background #323232
        inactive_workspace #32323200 #32323200 #5c5c5c
    }
    status_command i3gs ~/.config/i3gs/config
}

include /etc/sway/config.d/*

TLP

enigma

plasma

# ------------------------------------------------------------------------------
# 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

# 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=""

X

xprofile

:header-args+: :tangle ~/.xprofile

~/.xprofile is similar in style to ~/.xinitrc, but on the contrary, it’s automatically sourced by LightDM, my display manager of choice.

xset -b  # disable bell
xset r rate 200 45  # repeat delay (ms) and rate (repeats/sec)

# setxkbmap -option compose:ralt

setxkbmap -option ctrl:nocaps          # turn capslock into control
setxkbmap -option altwin:swap_alt_win  # swap alt and super

if [ $(hostname) = "plasma" ]
then
    setxkbmap -option ctrl:rctrl_ralt  # turn right control into right alt
fi

if [ $(hostname) = "enigma" ]
then
    xmodmap -e "keycode 135 = Alt_R"  # remap menu key to alt
fi

light -Scrs "intel_backlight" 2

source $HOME/.zprofile

export _JAVA_AWT_WM_NONREPARENTING=1
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true'

if [ $(hostname) = "plasma" ]
then
    unlock-def-gk.py &
fi

bspwm &

X resources

Xresources

:header-args+: :tangle (when (eq system-type ‘gnu/linux) “~/.Xresources”)
#include ".Xresources.d/fonts"
! #include ".Xresources.d/colors"
#include ".Xresources.d/emacs"
#include ".Xresources.d/rxvt-unicode"

Xresources.d

fonts
:header-args+: :tangle (when (eq system-type ‘gnu/linux) “~/.Xresources.d/fonts”)
Xft.lcdfilter: lcddefault
Xft.antialias: true
Xft.autohint: 0
Xft.hinting: true
Xft.hintstyle: hintslight
! Xft.hintstyle: hintfull
Xft.rgba: rgb
Xft.dpi: 96
colors
:header-args+: :tangle (when (eq system-type ‘gnu/linux) “~/.Xresources.d/colors”)
#include "gruvbox-light.xresources"
! #include "gruvbox-dark.xresources"
#include "gruvbox-urxvt256.xresources"
! -----------------------------------------------------------------------------
! File: gruvbox-light.xresources
! Description: Retro groove colorscheme generalized
! Author: morhetz <morhetz@gmail.com>
! Source: https://github.com/morhetz/gruvbox-generalized
! Last Modified: 6 Sep 2014
! -----------------------------------------------------------------------------

! hard contrast: *background: #f9f5d7
*background: #fbf1c7
! soft contrast: *background: #f2e5bc
*foreground: #3c3836
! Black + DarkGrey
*color0:  #fdf4c1
*color8:  #928374
! DarkRed + Red
*color1:  #cc241d
*color9:  #9d0006
! DarkGreen + Green
*color2:  #98971a
*color10: #79740e
! DarkYellow + Yellow
*color3:  #d79921
*color11: #b57614
! DarkBlue + Blue
*color4:  #458588
*color12: #076678
! DarkMagenta + Magenta
*color5:  #b16286
*color13: #8f3f71
! DarkCyan + Cyan
*color6:  #689d6a
*color14: #427b58
! LightGrey + White
*color7:  #7c6f64
*color15: #3c3836
! -----------------------------------------------------------------------------
! File: gruvbox-dark.xresources
! Description: Retro groove colorscheme generalized
! Author: morhetz <morhetz@gmail.com>
! Source: https://github.com/morhetz/gruvbox-generalized
! Last Modified: 6 Sep 2014
! -----------------------------------------------------------------------------

! hard contrast: *background: #1d2021
*background: #282828
! soft contrast: *background: #32302f
*foreground: #ebdbb2
! Black + DarkGrey
*color0:  #282828
*color8:  #928374
! DarkRed + Red
*color1:  #cc241d
*color9:  #fb4934
! DarkGreen + Green
*color2:  #98971a
*color10: #b8bb26
! DarkYellow + Yellow
*color3:  #d79921
*color11: #fabd2f
! DarkBlue + Blue
*color4:  #458588
*color12: #83a598
! DarkMagenta + Magenta
*color5:  #b16286
*color13: #d3869b
! DarkCyan + Cyan
*color6:  #689d6a
*color14: #8ec07c
! LightGrey + White
*color7:  #a89984
*color15: #ebdbb2
! -----------------------------------------------------------------------------
! File: gruvbox-urxvt256.xresources
! Description: Retro groove colorscheme generalized
! Author: morhetz <morhetz@gmail.com>
! Source: https://github.com/morhetz/gruvbox-generalized
! Last Modified: 13 Dec 2013
! -----------------------------------------------------------------------------

URxvt.color24:  #076678
URxvt.color66:  #427b58
URxvt.color88:  #9d0006
URxvt.color96:  #8f3f71
URxvt.color100: #79740e
URxvt.color108: #8ec07c
URxvt.color109: #83a598
URxvt.color130: #af3a03
URxvt.color136: #b57614
URxvt.color142: #b8bb26
URxvt.color167: #fb4934
URxvt.color175: #d3869b
URxvt.color208: #fe8019
URxvt.color214: #fabd2f
URxvt.color223: #ebdbb2
URxvt.color228: #f2e5bc
URxvt.color229: #fbf1c7
URxvt.color230: #f9f5d7
URxvt.color234: #1d2021
URxvt.color235: #282828
URxvt.color236: #32302f
URxvt.color237: #3c3836
URxvt.color239: #504945
URxvt.color241: #665c54
URxvt.color243: #7c6f64
URxvt.color244: #928374
URxvt.color245: #928374
URxvt.color246: #a89984
URxvt.color248: #bdae93
URxvt.color250: #d5c4a1
emacs
:header-args+: :tangle (when (eq system-type ‘gnu/linux) “~/.Xresources.d/emacs”)
Emacs.menuBar: off
Emacs.toolBar: off
Emacs.verticalScrollBars: off
Emacs.cursorBlink: off
Emacs.FontBackend: xft,x
! Emacs.font: Ubuntu Mono-12
! Emacs.font: Triplicate T4C-11
! Emacs.font: Ubuntu Mono-10.5
! Emacs.font: Ubuntu Mono-12
! Emacs.font: Iosevka-11

! Emacs.font: Fira Mono:size=15
! Emacs.font: DejaVu Sans Mono:size=15
! Emacs.font: Inconsolata:size=17
! Emacs.font: Inconsolata:size=16
! Emacs.font: Inconsolata LGC:size=14
! Emacs.font: Source Code Pro Medium-10.5
Emacs.font: Ubuntu Mono:size=16
! Emacs.font: Iosevka:size=16
rxvt-unicode
:header-args+: :tangle (when (eq system-type ‘gnu/linux) “~/.Xresources.d/rxvt-unicode”)
! Font
URxvt.font:             xft:ubuntu mono:pixelsize=16:antialias=true:hinting=true, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true
URxvt.boldFont:         xft:ubuntu mono:pixelsize=16:antialias=true:hinting=true:bold, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true:bold
URxvt.italicFont:       xft:ubuntu mono:pixelsize=16:antialias=true:hinting=true:italic, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true:italic
URxvt.bolditalicFont:   xft:ubuntu mono:pixelsize=16:antialias=true:hinting=true:bold:italic, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true:bolditalic

URxvt.xftAntialias:     true
URxvt.letterSpace:      0

URxvt.depth:                0
URxvt.loginShell:           true
URxvt.saveLines:            100000
URxvt.internalBorder:       3
URxvt.lineSpace:            0
URxvt.scrollBar:            false
URxvt.scrollStyle:          rxvt
URxvt*scrollTtyOutput:      false
URxvt*scrollWithBuffer:     true
URxvt*scrollTtyKeypress:    true
URxvt.keysym.Shift-Up:      command:\033]720;1\007
URxvt.keysym.Shift-Down:    command:\033]721;1\007

URxvt.perl-ext-common:      default,clipboard,url-select,keyboard-select
URxvt.perl-ext:             bidi
URxvt.bidi.enabled:         1
URxvt.url-select.launcher:  firefox
URxvt.url-select.underline: true
URxvt.keysym.M-u:           perl:url-select:select_next
URxvt.keysym.M-Escape:      perl:keyboard-select:activate
URxvt.keysym.M-s:           perl:keyboard-select:search
URxvt.url-launcher:         /usr/bin/firefox
URxvt.matcher.button:       1
URxvt.iso14755:             false
URxvt.iso14755_53:          false
URxvt.keysym.M-c:           perl:clipboard:copy
URxvt.keysym.M-v:           perl:clipboard:paste
URxvt.keysym.C-A-V:         perl:clipboard:paste_escaped
URxvt.keysym.C-Up:          font-size:increase
URxvt.keysym.C-Down:        font-size:decrease
URxvt.keysym.C-S-Up:        font-size:incglobal
URxvt.keysym.C-S-Down:      font-size:decglobal
URxvt.keysym.C-equal:       font-size:reset
!URxvt.keysym.C-question:   font-size:show

URxvt.iconFile:             /usr/share/icons/Paper/48x48/apps/utilities-terminal.png

!urxvt*foreground: white
!urxvt*background: black

!*color0:  #2E3436
!*color1:  #a40000
!*color2:  #4E9A06
!*color3:  #C4A000
!*color4:  #3465A4
!*color5:  #75507B
!*color6:  #ce5c00
!*color7:  #babdb9
!*color8:  #555753
!*color9:  #EF2929
!*color10: #8AE234
!*color11: #FCE94F
!*color12: #729FCF
!*color13: #AD7FA8
!*color14: #fcaf3e
!*color15: #EEEEEC

!URxvt.foreground: #C8C8C8
!URxvt.background: #FFFFFF

!! black
!*color0:  #2E3436
!*color8:  #555753
!! red
!*color1:  #a40000
!*color9:  #EF2929
!! green
!*color2:  #4E9A06
!*color10: #8AE234
!! yellow
!*color3:  #C4A000
!*color11: #FCE94F
!! blue
!*color4:  #3465A4
!*color12: #729FCF
!! purple
!*color5:  #75507B
!*color13: #AD7FA8
!! orange (replaces cyan)
!*color6:  #ce5c00
!*color14: #fcaf3e
!! white
!*color7:  #babdb9
!*color15: #EEEEEC

! Tango colour theme for rxvt-unicode
URxvt.background: #FFFFFF
URxvt.foreground: #000000

! Black
URxvt.color0: #2E3436
URxvt.color8: #757773

! Red
URxvt.color1: #CC0000
URxvt.color9: #EF2929

! Green
URxvt.color2: #4E9A06
URxvt.color10: #8AE234

! Yellow
URxvt.color3: #C4A000
URxvt.color11: #FCE94F

! Blue
URxvt.color4: #3465A4
URxvt.color12: #729FCF

! Magenta
URxvt.color5: #75507B
URxvt.color13: #AD7FA8

!! Cyan
!URxvt.color6: #06989A
!URxvt.color14: #34E2E2
! orange (replaces cyan)
*color6:  #ce5c00
*color14: #fcaf3e

! White
URxvt.color7: #D3D7CF
URxvt.color15: #EEEEEC

XDG

:header-args+: :tangle ~/.config/user-dirs.dirs
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOCUMENTS_DIR="$HOME/usr/docs"
XDG_DOWNLOAD_DIR="$HOME/usr/dls"
XDG_MUSIC_DIR="$HOME/usr/music"
XDG_PICTURES_DIR="$HOME/usr/pics"
XDG_PUBLICSHARE_DIR="$HOME/usr/Public"
XDG_TEMPLATES_DIR="$HOME/usr/Templates"
XDG_VIDEOS_DIR="$HOME/usr/vids"

Zathura

:header-args+: :tangle ~/.config/zathura/zathurarc
set smooth-scroll true
set selection-clipboard clipboard
set zoom-step 05
set default-bg "#272727"
set statusbar-bg "#272727"
set inputbar-bg "#373737"

Zsh

My zsh setup is built on Zim. Further, my zshrc references fzf, zsh-autosuggestions, and zsh-autopair; so be sure to have them installed.

zimrc

:header-args+: :tangle ~/.zimrc
#################
# CORE SETTINGS #
#################

#
# Zim settings
#

# Select what modules you would like enabled.
# The second line of modules may depend on options set by modules in the first
# line. These dependencies are noted on the respective module's README.md.
zmodules=(directory environment git git-info history input ssh utility custom \
          syntax-highlighting history-substring-search prompt completion)


###################
# MODULE SETTINGS #
###################

#
# Prompt
#

# Set your desired prompt here
zprompt_theme='pure'
#PURE_PROMPT_SYMBOL=λ
#PURE_PROMPT_SYMBOL=δ
PURE_PROMPT_SYMBOL=➜

#
# Completion
#

# set an optional host-specific filename for the completion cache file
# if none is provided, the default '.zcompdump' is used.
#zcompdump_file=".zcompdump-${HOST}-${ZSH_VERSION}"

#
# Utility
#

# Uncomment to enable command correction prompts
# See: http://zsh.sourceforge.net/Doc/Release/Options.html#Input_002fOutput
setopt CORRECT

#
# Environment
#

# Set the string below to the desired terminal title format string.
# The terminal title is redrawn upon directory change, however, variables like 
# ${PWD} are only evaluated once. Use prompt expansion strings for dynamic data:
#   http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Simple-Prompt-Escapes
# The example below uses the following format: 'username@host:/current/directory'
ztermtitle='%n@%m:%~'

#
# Input
#

# Uncomment to enable double-dot expansion.
# This appends '../' to your input for each '.' you type after an initial '..'
#zdouble_dot_expand='true'

#
# Syntax-Highlighting
#

# This determines what highlighters will be used with the syntax-highlighting module.
# Documentation of the highlighters can be found here:
#   https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
# For (u)rxvt, termite and gnome-terminal users,
# removing the 'cursor' highlighter will fix the disappearing cursor problem
#zhighlighters=(main brackets cursor)
zhighlighters=(main brackets pattern)


#
# SSH
#

# Load these ssh identities with the ssh module
zssh_ids=(id_rsa plasma_id_rsa id_ed25519 id_rsa_aur)


#
# Pacman
#

# Set (optional) pacman front-end.
zpacman_frontend='yay'

# Load any helper scripts as defined here
#zpacman_helper=(aur)

zlogin

:header-args+: :tangle ~/.zlogin
#
# User configuration sourced by login shells
#

# Initialize zim
[[ -s ${ZIM_HOME}/login_init.zsh ]] && source ${ZIM_HOME}/login_init.zsh

zprofile

:header-args+: :tangle ~/.zprofile
#PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"
#PATH=$HOME/.gem/ruby/2.4.0/bin:$PATH
export PATH=$HOME/.local/bin:$HOME/.cabal/bin:$HOME/.cargo/bin:$HOME/.elan/bin:$PATH
export XDG_CONFIG_HOME=$HOME/.config
export XDG_DATA_HOME=$HOME/.local/share
export XDG_DATA_DIRS=/usr/local/share:/usr/share
export MAILDIR="$HOME/mail"
export CVS_RSH=ssh
#export MATHMODELS=$HOME/src/eiffel/mathmodels
#export RUST_SRC_PATH=~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src
#export PATH=$PATH:$HOME/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/

# Eiffel2Java stuff
#export JAVA_HOME=/usr/lib/jvm/default
#export CPATH=$CPATH:"$JAVA_HOME/include:$JAVA_HOME/include/linux"
#export LIBRARY_PATH=$LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server"
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server"

#export PATH="$HOME/usr/build/pvs:$PATH"
#export SBCLISP_HOME=/usr/share/sbcl-source
#export PVS_LIBRARY_PATH="$HOME/usr/build/pvs/nasalib"

export MOZ_USE_XINPUT2=1  # precise scrolling in firefox

#export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
#export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"

if [ -e /home/amin/.nix-profile/etc/profile.d/nix.sh ]; then . /home/amin/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer

zshenv

:header-args+: :tangle ~/.zshenv
# Ensure that a non-login, non-interactive shell has a defined environment.
if [[ "$SHLVL" -eq 1 && ! -o LOGIN && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then
  source "${ZDOTDIR:-$HOME}/.zprofile"
fi

zshrc

:header-args+: :tangle ~/.zshrc
# Bash-like navigation
#export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
#export WORDCHARS='*?-[]~=&;!#$%^(){}<>'
export WORDCHARS='*?[]~=&;!#$%^(){}<>'
#ZLE_SPACE_SUFFIX_CHARS=$'|&'

#disable -r time       # disable shell reserved word
#alias time='time -p'  # -p for POSIX output

# rehash if last command was pacaur or pacman
# (so that zsh picks up changes in $PATH immediately)
TRAPUSR1() { rehash}; precmd() { [[ $history[$[ HISTCMD -1 ]] == *(pacaur|pacman)* ]] && killall -USR1 zsh }

#
# User configuration sourced by interactive shells
#

# Change default zim location
export ZIM_HOME=${ZDOTDIR:-${HOME}}/.zim

# Start zim
[[ -s ${ZIM_HOME}/init.zsh ]] && source ${ZIM_HOME}/init.zsh

ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
#ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold' 

setopt globdots

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
source ~/.zsh/zsh-autopair/autopair.zsh


### fzf ###

source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh

# Accept history selection instead of putting it on
# the command line
fzf-history-widget-accept() {
  fzf-history-widget
  zle accept-line
}
#zle     -N   fzf-history-widget-accept
#bindkey '^R' fzf-history-widget-accept

# alt+c preview
export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200'"

### fzf ###


# aliases
alias mpv="mpv --ytdl-format mp4"
alias mv="mv -iv"
alias cp="cp -iv"
alias scl=systemctl
alias jcl=journalctl
alias m="mbsync -Va; getmail; notmuch new"
alias best="youtube-dl -f best"
alias nixx="ssh amin@nix.aminb.org"
alias fence="ssh aminb@fencepost.gnu.org"

aur() {
   cd ~/usr/build
   git clone https://aur.archlinux.org/${1}.git
   cd ${1}
}

# i-beam cursor
echo -e "\033[5 q"
#echo -e "\033[6 q"

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 Rofi to ask and light to set an exact brightness value.

battery-percentage-time

:header-args+: :tangle ~/.local/bin/battery-percentage-time :shebang “#!/bin/sh”
dbus_send() {
	label=$1
	dbus-send --print-reply=literal --system \
		--dest=org.freedesktop.UPower \
		/org/freedesktop/UPower/devices/battery_BAT0 \
		org.freedesktop.DBus.Properties.Get \
		string:org.freedesktop.UPower.Device \
		string:"${label}" | awk '{print $3}'
}

perc=$(dbus_send 'Percentage')
state=$(dbus_send 'State')

if [ "$state" -eq 2 ]; then  # Discharging
	secs=$(dbus_send 'TimeToEmpty')
elif [ "$state" -eq 1 ]; then  # Charging
	secs=$(dbus_send 'TimeToFull')
fi

printf '%s%%%%%2dh%02dm \n' "$perc" $((secs / 3600)) $((secs % 3600 / 60))

rofi-light

:header-args+: :tangle ~/.local/bin/rofi-light :shebang “#!/bin/bash”
cur=$(light -G)
val=$(rofi -dmenu -mesg "light    $cur" -p "light -S " -l 0 -width 12)
light -S $val

s (run sway)

:header-args+: :tangle ~/.local/bin/s :shebang “#!/bin/bash”
export _JAVA_AWT_WM_NONREPARENTING=1
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true'
light -Scrs "intel_backlight" 2
source $HOME/.zprofile
sway

sway-ws-util

:header-args+: :tangle ~/.local/bin/sway-ws-util :shebang “#!/bin/bash”
curr_ws=$(swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true).name')
[[ $curr_ws -eq 1 ]] && prev_ws=10 || prev_ws=$((curr_ws-1))
[[ $curr_ws -eq 10 ]] && next_ws=1 || next_ws=$((curr_ws+1))
dest_ws=-1
op=-1

if [ "$1" = "switch" ] || [ "$1" = "move" ]; then
  op="$1"
  if [ "$2" = "prev" ]; then
    dest_ws="$prev_ws"
  elif [ "$2" = "next" ]; then
    dest_ws="$next_ws"
  else
    echo "Usage: $0 $1 {prev|next} [follow]"
    exit 1
  fi
else
  echo "Usage: $0 {switch|move} {prev|next} [follow]"
  exit 1
fi

if [ "$op" = "switch" ]; then
  sway workspace "$dest_ws"
elif [ "$op" = "move" ]; then
  sway move container to workspace "$dest_ws"
  if [ "$3" = "follow" ]; then
    sway workspace "$dest_ws"
  fi
fi

toggle-layout

:header-args+: :tangle ~/.local/bin/toggle-layout :shebang “#!/bin/bash”
lang="$(setxkbmap -print | grep xkb_symbols | cut -d'+' -f 2)"

if [ "$lang" = "us" ]; then
    setxkbmap ir
else
    setxkbmap us
    # xmodmap $HOME/.Xmodmap
fi

toggle-presentation-mode

:header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang “#!/bin/bash”
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T

toggle-tablet

:header-args+: :tangle ~/.local/bin/toggle-tablet :shebang “#!/bin/bash”

This script toggles between a ‘normal’ mode and a ‘tablet’ mode, doing a few things:

  • rotates the screen using xrandr, so that rotating the physical display of my X220t would have the laptop’s battery on the right hand side,
  • enables touch screen,
  • properly rotates the stylus pen and touch screen pointers, and
  • toggles between RGB and Vertical BGR sub-pixel order.
case $(xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation) in
    0)  # Screen is not rotated, we should rotate it right (90°)
           xrandr -o 3
           xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation -s 1
           xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Device_Enabled -s 1
           xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Wacom_Rotation -s 1
           xfconf-query -c xsettings -p /Xft/RGBA -s vbgr
           ;;
    1)  # Currently top is rotated right, we should set it normal (0°)
          xrandr -o 0
          xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation -s 0
          xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Wacom_Rotation -s 0
          xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Device_Enabled -s 0
          xfconf-query -c xsettings -p /Xft/RGBA -s rgb
          ;;
    *)
           echo "Unknown result from 'xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation'" >&2
           exit 1
           ;;
esac

unlock-def-gk.py

:header-args+: :tangle ~/.local/bin/unlock-def-gk.py :shebang “#!/usr/bin/env python2”
import gnomekeyring as gk
# list_item_ids_sync('login')[0] == 1L
gk.unlock_sync('Default_keyring',gk.item_get_info_sync('login',1L).get_secret())

volume-info

:header-args+: :tangle ~/.local/bin/volume-info :shebang “#!/bin/sh”
cur_vol=$(pamixer --get-volume)

if [ $(pamixer --get-mute) = true ]; then
  printf 'mt \n' "$cur_vol"
else
  printf '%02d \n' "$cur_vol"
fi

wp

My little wallpaper changer script.

wp

:header-args+: :tangle ~/.local/bin/wp :shebang “#!/bin/bash”
export DISPLAY=:0

case "$1" in
  "day")
    feh --bg-scale $HOME/usr/pics/island_day_by_arsenixc-d6ctqon.jpg
    ;;
  "night")
    feh --bg-scale $HOME/usr/pics/island_night_by_arsenixc-d6cz757.jpg
    ;;
  *)
    echo $"Usage: $0 {day|night}"
    exit 1
esac

wp-auto

:header-args+: :tangle ~/.local/bin/wp-auto :shebang “#!/bin/bash”
SED=$(which sed)
ROFI=$(which rofi)

export DISPLAY=:0
HOUR=$(date +%H)

if [ -z "${SED}" ]
then
    echo "Did not find 'sed', script cannot continue."
    exit 1
fi
if [ -z "${ROFI}" ]
then
    echo "Did not find rofi, there is no point to continue."
    exit 1
fi

###
# Create if not exists, then removes #include of .theme file (if present) and add the selected theme to the end.
# Repeated calls should leave the config clean-ish
###
function set_theme()
{
    CDIR="${HOME}/.config/rofi/"
    if [ ! -d "${CDIR}" ]
    then
        mkdir -p ${CDIR}
    fi
    if [ -f "${CDIR}/config" ]
    then
        ${SED} -i "/rofi\.theme: .*\.rasi$/d" "${CDIR}/config"
    fi
    echo "rofi.theme: ${1}" >> "${CDIR}/config"

}

if [ "$HOUR" -gt "19" ] || [ "$HOUR" -lt "7" ]
    then
        feh --bg-scale $HOME/usr/pics/island_night_by_arsenixc-d6cz757.jpg
        xrdb -merge $HOME/.Xresources.d/gruvbox-dark.xresources
        set_theme "/usr/share/rofi/themes//gruvbox-dark.rasi"
    else
        feh --bg-scale $HOME/usr/pics/island_day_by_arsenixc-d6ctqon.jpg
        xrdb -merge $HOME/.Xresources.d/gruvbox-light.xresources
        set_theme "/usr/share/rofi/themes//gruvbox-light.rasi"
fi

wp.service

:header-args+: :tangle ~/.config/systemd/user/wp.service
[Unit]
Description=wallpaper service

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c %h/.local/bin/wp-auto

wp.timer

:header-args+: :tangle ~/.config/systemd/user/wp.timer
[Unit]
[Unit]
Description=wallpaper timer

[Timer]
OnCalendar=07,21:00
Unit=wp.service
Persistent=true

[Install]
WantedBy=timers.target

zathura-sync.sh

:header-args+: :tangle ~/.local/bin/zathura-sync.sh :shebang “#!/bin/sh”
pos="$1"
pdffile="$2"
zathura --synctex-forward "$pos" "$pdffile" || \
    (
    zathura -x "emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'" "$pdffile" &
    sleep 1; zathura --synctex-forward "$pos" "$pdffile" )

Fun :)

eat-em

:header-args+: :tangle ~/.local/bin/eat-em :shebang “#!/bin/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

invade-em

:header-args+: :tangle ~/.local/bin/invade-em :shebang “#!/bin/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