X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/08146d0e9a7916a3ace810c30ca52d1721d1a00f..0222fcc1771a8c5bf465370c8fcda57103f935af:/rc.org diff --git a/rc.org b/rc.org index 3e879ea..2ffab89 100644 --- a/rc.org +++ b/rc.org @@ -11,7 +11,732 @@ Note: This file is best viewed inside Emacs with org mode. * Configs -** =git= +This section contains the configuration files (dotfiles) of various +programs I use. + +** bspwm + +*** bspwmrc +:PROPERTIES: +:header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh" +:END: + +#+begin_src sh :tangle no +sxhkd & +sh ~/.fehbg & +xfce4-panel -d & +compton & +sleep 0.5 && pasystray --notify=all & + +bspc monitor -d I II III IV V VI VII VIII IX X +#bspc monitor eDP-1 -d I II III IV V +#bspc monitor HDMI-1 -d VI VII VIII IX X + +#bspc config border_width 2 +#bspc config window_gap 8 +bspc config window_gap 0 + +bspc config bottom_padding 26 + +bspc config split_ratio 0.52 +bspc config borderless_monocle true +bspc config gapless_monocle true +bspc config click_to_focus button1 +bspc config directional_focus_tightness low + +#bspc rule -a Firefox desktop='^1' follow=on +bspc rule -a Nightly desktop='^1' follow=on +bspc rule -a Emacs desktop='^2' state=tiled follow=on +#bspc rule -a Chromium desktop='^4' follow=on +bspc rule -a URxvt state=floating +bspc rule -a URxvt:tiled state=tiled +bspc rule -a Connman-gtk state=floating +bspc rule -a Xfce4-panel state=floating +bspc rule -a TelegramDesktop state=floating +bspc rule -a Ec state=floating +bspc rule -a Pavucontrol state=floating +bspc rule -a Eog state=floating +bspc rule -a Seahorse state=floating +bspc rule -a mpv state=floating +bspc rule -a Evince state=floating +bspc rule -a Meld state=floating +bspc rule -a Autokey-gtk state=floating +bspc rule -a Mousepad state=floating +bspc rule -a Wrapper-1.0 state=floating +bspc rule -a File-roller state=floating +bspc rule -a Gnome-disks state=floating +bspc rule -a Termite state=floating +bspc rule -a Termite:tiled state=tiled +bspc rule -a Thunderbird:Calendar state=floating +bspc rule -a Audacity state=floating +bspc rule -a Proof state=floating # pvs x-show-proof +bspc rule -a Nm-connection-editor state=floating +bspc rule -a Wire state=floating +bspc rule -a discord state=floating +bspc rule -a X2goclient state=floating +bspc rule -a SimpleScreenRecorder state=floating +bspc rule -a Gimp state=floating +bspc rule -a Wrapper-2.0 state=floating +bspc rule -a Zathura state=tiled +#+end_src + +*** sxhkdrc +:PROPERTIES: +:header-args+: :tangle ~/.config/sxhkd/sxhkdrc +:END: + +#+begin_src conf :tangle no +# +# 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} +#+end_src + +** compton +:PROPERTIES: +:header-args+: :tangle ~/.config/compton.conf +:END: + +#+begin_src conf :tangle no +# Shadow +shadow = false; # Enabled client-side shadows on windows. +no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows. +no-dnd-shadow = true; # Don't draw shadows on DND windows. +clear-shadow = true; # Zero the part of the shadow's mask behind the + # window. Fix some weirdness with ARGB windows. +shadow-radius = 5; # The blur radius for shadows. (default 12) +shadow-offset-x = -5; # The left offset for shadows. (default -15) +shadow-offset-y = -5; # The top offset for shadows. (default -15) +# shadow-opacity = 0.7; # The translucency for shadows. (default .75) +# shadow-red = 0.0; # Red color value of shadow. (0.0 - 1.0, defaults to 0) +# shadow-green = 0.0; # Green color value of shadow. (0.0 - 1.0, defaults to 0) +# shadow-blue = 0.0; # Blue color value of shadow. (0.0 - 1.0, defaults to 0) +shadow-exclude = [ "n:e:Notification", "class_g = 'Chromium'", "class_g = 'Dmenu'", "class_g = 'Firefox' && argb" ]; # Exclude conditions for shadows. +# shadow-exclude = "n:e:Notification"; +#shadow-exclude = [ "_GTK_FRAME_EXTENTS@:c" ] # Fix dual shadow on some gtk3 powered applications +shadow-ignore-shaped = true; # Avoid drawing shadow on all shaped windows + # (see also: --detect-rounded-corners) + +# Opacity +menu-opacity = 1.0; # The opacity for menus. (default 1.0) +#inactive-opacity = 0.9; # Default opacity of inactive windows. (0.0 - 1.0) +# active-opacity = 0.8; # Default opacity for active windows. (0.0 - 1.0) +frame-opacity = 1.0; # Opacity of window titlebars and borders. (0.1 - 1.0) +# inactive-opacity-override = true; # Let inactive opacity set by 'inactive-opacity' overrides + # value of _NET_WM_OPACITY. Bad choice. +alpha-step = 0.06; # XRender backend: Step size for alpha pictures. Increasing + # it may result in less X resource usage, + # Yet fading may look bad. +#inactive-dim = 0.5; # Dim inactive windows. (0.0 - 1.0) +#inactive-dim-fixed = true; # Do not let dimness adjust based on window opacity. +# blur-background = true; # Blur background of transparent windows. + # Bad performance with X Render backend. + # GLX backend is preferred. +# blur-background-frame = true; # Blur background of opaque windows with transparent + # frames as well. +blur-background-fixed = true; # Do not let blur radius adjust based on window opacity. +blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ]; + # Exclude conditions for background blur. + +# Fading +fading = false; # Fade windows during opacity changes. +fade-delta = 3; # The time between steps in a fade in milliseconds. (default 10). +fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028). +fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03). +# no-fading-openclose = true; # Avoid fade windows in/out when opening/closing. +fade-exclude = [ ]; # Exclude conditions for fading. + +# Other +backend = "glx" # Backend to use: "xrender" or "glx". GLX backend is typically + # much faster but depends on a sane driver. +mark-wmwin-focused = true; # Try to detect WM windows and mark them as active. +mark-ovredir-focused = true; # Mark all non-WM but override-redirect windows active (e.g. menus). +use-ewmh-active-win = true; # Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused + # instead of using FocusIn/Out events. Usually more reliable but + # depends on a EWMH-compliant WM. +detect-rounded-corners = false; # Detect rounded corners and treat them as rectangular when --shadow-ignore- shaped is on. +detect-client-opacity = true; # Detect _NET_WM_OPACITY on client windows, useful for window + # managers not passing _NET_WM_OPACITY of client windows to frame + # windows. +refresh-rate = 0; # For --sw-opti: Specify refresh rate of the screen. 0 for auto. +vsync = "drm"; # "none", "drm", "opengl", "opengl-oml", "opengl-swc", "opengl-mswc" + # See man page for more details. +dbe = false; # Enable DBE painting mode. Rarely needed. +paint-on-overlay = true; # Painting on X Composite overlay window. Recommended. +sw-opti = false; # Limit compton to repaint at most once every 1 / refresh_rate. + # Incompatible with certain VSync methods. +unredir-if-possible = false; # Unredirect all windows if a full-screen opaque window is + # detected, to maximize performance for full-screen windows. +focus-exclude = [ ]; # A list of conditions of windows that should always be considered + # focused. +detect-transient = true; # Use WM_TRANSIENT_FOR to group windows, and consider windows in + # the same group focused at the same time. +detect-client-leader = true; # Use WM_CLIENT_LEADER to group windows. +invert-color-include = [ ]; # Conditions for windows to be painted with inverted color. + +# GLX backend # GLX backend fine-tune options. See man page for more info. +glx-no-stencil = true; # Recommended. +glx-copy-from-front = false; # Useful with --glx-swap-method, +# glx-use-copysubbuffermesa = true; # Recommended if it works. Breaks VSync. +# glx-no-rebind-pixmap = true; # Recommended if it works. +glx-no-rebind-pixmap = true; # Recommended if it works. +#glx-swap-method = "4"; # See man page. +glx-swap-method = "4"; # See man page. + +# Window type settings +wintypes: +{ + tooltip = { fade = true; shadow = false; opacity = 1; focus = true; }; + menu = { shadow = false; }; + dropdown_menu = { shadow = false; }; + popup_menu = { shadow = false; }; + utility = { shadow = false; }; + # fade: Fade the particular type of windows. + # shadow: Give those windows shadow + # opacity: Default opacity for the type of windows. + # focus: Whether to always consider windows of this type focused. +}; +#+end_src + +** dovecot +:PROPERTIES: +:header-args+: :tangle "/sudo::/etc/dovecot/dovecot.conf" +:END: + +#+begin_src conf +protocols = imap + +listen = 127.0.0.1 +log_path = /var/log/dovecot.log +info_log_path = /var/log/dovecot-info.log + +ssl = no +disable_plaintext_auth = no + +auth_verbose = yes +auth_mechanisms = plain + +passdb { + driver = passwd-file + args = /etc/dovecot/passwd +} + +userdb { + driver = static + args = uid=amin gid=amin home=/home/amin/mail/%d/%n + default_fields = mail=maildir:/home/amin/mail/%d/%n/mail +} + +# mail_home = /home/amin/mail/%d/%n +# mail_location = maildir:/home/amin/mail/%d/%n/mail:LAYOUT=fs:INBOX=/home/amin/mail/%d/%n/mail/Inbox + +# namespace { +# inbox = yes +# separator = / +# } + +mail_plugins = $mail_plugins fts fts_lucene + +plugin { + fts = lucene + fts_lucene = whitespace_chars=@. + fts_autoindex = yes +} +#+end_src + +** Dunst +:PROPERTIES: +:header-args+: :tangle ~/.config/dunst/dunstrc +:END: + +#+begin_src conf +[global] +#font = Ubuntu Mono 10.5 +font = Inconsolata 11 + +# Path to default icons. +icon_folders = /usr/share/icons/Moka/16x16/status/:/usr/share/icons/Moka/16x16/devices/:/usr/share/icons/Faba-Mono/16x16/status/:/usr/share/icons/Faba-Mono/16x16/devices/:/usr/share/icons/Moka/16x16/actions/:/usr/share/icons/Moka/16x16/categories/:/usr/share/icons/Moka/16x16/mimetypes/:/usr/share/icons/Moka/16x16/apps/:/usr/share/icons/Moka/16x16/places/:/usr/share/icons/Paper/16x16/status/ + +icon_position = left +# bold +# italic +# strikethrough +# underline +markup = full +# The format of the message. Possible variables are: +# %a appname +# %s summary +# %b body +# %i iconname (including its path) +# %I iconname (without its path) +# %p progress value if set ([ 0%] to [100%]) or nothing +# Markup is allowed +format = "%s\n%b" +# Sort messages by urgency +sort = yes +# Show how many messages are currently hidden (because of geometry) +indicate_hiddenl= no +# Alignment of message text. +# Possible values are "left", "center" and "right" +alignment = center +# The frequency with wich text that is longer than the notification +# window allows bounces back and forth. +# This option conflicts with 'word_wrap'. +# Set to 0 to disable +bounce_freq = 3 +# show age of message if message is older than show_age_threshold seconds. +# set to -1 to disable +show_age_threshold = -1 +# split notifications into multiple lines if they don't fit into geometry +word_wrap = yes +# ignore newlines '\n' in notifications +ignore_newline = no +# The geometry of the message window. +# geometry [{width}]x{height}][+/-{x}+/-{y}] +# The height is measured in number of notifications everything else in pixels. If the width +# is omitted but the height is given ("-geometry x2"), the message window +# expands over the whole screen (dmenu-like). If width is 0, +# the window expands to the longest message displayed. +# A positive x is measured from the left, a negative from the +# right side of the screen. Y is measured from the top and down respectevly. +# The width can be negative. In this case the actual width is the +# screen width minus the width defined in within the geometry option. +#geometry = "410x12-12+12" +#geometry = "0x0-30-30" +geometry = "260x12-30-30" +# The transparency of the window. range: [0; 100] +# This option will only work if a compositing windowmanager is present (e.g. xcompmgr, compiz, etc..) +transparency = 0 +# Don't remove messages, if the user is idle (no mouse or keyboard input) +# for longer than idle_threshold seconds. +# Set to 0 to disable. +idle_threshold = 120 +# Which monitor should the notifications be displayed on. +monitor = 0 +# Display notification on focused monitor. Possible modes are: +# mouse: follow mouse pointer +# keyboard: follow window with keyboard focus +# none: don't follow anything +# +# "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property. +# This should be the case for almost all modern windowmanagers. +# +# If this option is set to mouse or keyboard, the monitor option will be +# ignored. +follow = keyboard +# should a notification popped up from history be sticky or +# timeout as if it would normally do. +sticky_history = yes +# The height of a single line. If the height is smaller than the font height, +# it will get raised to the font height. +# This adds empty space above and under the text. +line_height = 0 + +show_indicators = yes + +# Draw a line of 'separatpr_height' pixel height between two notifications. +# Set to 0 to disable +separator_height = 3 +# padding between text and separator +padding = 8 +# horizontal padding +horizontal_padding = 8 +# Define a color for the separator. +# possible values are: +# * auto: dunst tries to find a color fitting to the background +# * foreground: use the same color as the foreground +# * frame: use the same color as the frame. +# * anything else will be interpreted as a X color +separator_color = foreground +# print a notification on startup +# This is mainly for error detection, since dbus (re-)starts dunst +# automatically after a crash. +startup_notification = false +# dmenu path +#dmenu = /usr/bin/dmenu -p dunst: +dmenu = /usr/bin/rofi -dmenu -p dunst: +# browser for opening urls in context menu +browser = /usr/bin/firefox -new-tab +[frame] +width = 0 +color = "#377222" +[shortcuts] +# shortcuts are specified as [modifier+][modifier+]...key +# available modifiers are 'ctrl', 'mod1' (the alt-key), 'mod2', 'mod3' +# and 'mod4' (windows-key) +# xev might be helpful to find names for keys +# close notification +close = ctrl+space +# close all notifications +close_all = ctrl+shift+space +# redisplay last message(s) +# On the US keyboard layout 'grave' is normally above TAB and left of '1'. +history = ctrl+shift+h +# context menu +context = ctrl+shift+period +[urgency_low] +# IMPORTANT: colors have to be defined in quotation marks. +# Otherwise the '#' and following would be interpreted as a comment. +background = "#1d2a30" +foreground = "#71c2af" +timeout = 3 +[urgency_normal] +background = "#1d2a30" +foreground = "#71c2af" +timeout = 0 +[urgency_critical] +background = "#1d2a30" +foreground = "#ff9982" +timeout = 0 + +# Every section that isn't one of the above is interpreted as a rules +# to override settings for certain messages. +# Messages can be matched by 'appname', 'summary', 'body' or 'icon' +# and you can override the 'timeout', 'urgency', 'foreground', 'background' +# and 'format'. +# Shell-like globbing will get expanded. +# +# SCRIPTING +# you can specify a script that gets run when the rule matches by setting +# the 'script' option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format to "" +# NOTE: It might be helpful to run dunst -print in a terminal in order to find +# fitting options for rules. +#[espeak] +# summary = "*" +# script = dunst_espeak.sh +#[script-test] +# summary = "*script*" +# script = dunst_test.sh +#[ignore] +## This notification will not be displayed +# summary = "foobar" +# format = "" +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +[xfpm-backlight] + summary = *Brightness* + urgency = low +#+end_src + +** Fontconfig +:PROPERTIES: +:header-args+: :tangle ~/.config/fontconfig/fonts.conf :comments none +:END: + +#+begin_src xml + + + + + + rgb + + + + + true + + + + + hintslight + + + + + true + + + + + lcddefault + + + ~/.fonts + + + + Helvetica + + Liberation Sans + + + +#+end_src + +** getmail + +*** getmailrc +:PROPERTIES: +:header-args+: :tangle ~/.getmail/getmailrc +:END: + +#+begin_src conf +[retriever] +type = SimplePOP3SSLRetriever +server = fencepost.gnu.org +username = bandali +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 +#+end_src + +*** getmail.service +:PROPERTIES: +:header-args+: :tangle ~/.config/systemd/user/getmail.service +:END: + +#+begin_src conf :tangle no +[Unit] +Description=getmail service + +[Service] +Type=oneshot +ExecStart=/usr/bin/getmail +StandardOutput=syslog +StandardError=syslog +#+end_src + +*** getmail.timer +:PROPERTIES: +:header-args+: :tangle ~/.config/systemd/user/getmail.timer +:END: + +#+begin_src conf :tangle no +[Unit] +Description=getmail timer + +[Timer] +OnCalendar=*:0/30 +Persistent=true +Unit=getmail.service + +[Install] +WantedBy=timers.target +#+end_src + +** Git *** gitconfig :PROPERTIES: @@ -22,14 +747,14 @@ Note: This file is best viewed inside Emacs with org mode. #+begin_src conf [user] name = Amin Bandali - email = amin@aminb.org - # signingkey = 4E05246AB0BF7FFB + email = bandali@gnu.org + signingkey = BE6273738E616D6D1B3A08E8A21A020248816103 #+end_src **** signing #+begin_src conf -# [commit] -# gpgsign = true +[commit] + gpgsign = true # [format] # signoff = true #+end_src @@ -65,6 +790,8 @@ Note: This file is best viewed inside Emacs with org mode. pr = pull --rebase ps = push psf = push --force + nmam = "!f() { notmuch show --format=raw $1 | git am -; }; f" + nmam3 = "!f() { notmuch show --format=raw $1 | git am -3 -; }; f" #+end_src **** color @@ -97,6 +824,16 @@ Note: This file is best viewed inside Emacs with org mode. user = aminb #+end_src +**** send-email +#+begin_src conf +[sendemail] + smtpuser = bandali + smtpserver = fencepost.gnu.org + smtpserverport = 587 + smtpencryption = tls + annotate = yes +#+end_src + *** gitignore :PROPERTIES: :header-args+: :tangle ~/.gitignore_global @@ -111,3 +848,5164 @@ Note: This file is best viewed inside Emacs with org mode. *.elc *-autoloads.el #+end_src + +** GnuPG +:PROPERTIES: +:header-args+: :tangle ~/.gnupg/gpg-agent.conf +:END: + +#+begin_src conf +default-cache-ttl 43200 +max-cache-ttl 43200 + +default-cache-ttl-ssh 10800 +max-cache-ttl-ssh 10800 + +# pinentry-program /usr/bin/pinentry-qt +#+end_src + +** GTK + +*** gtk-2.0 +:PROPERTIES: +:header-args+: :tangle ~/.gtkrc-2.0 +:END: + +#+begin_src conf +gtk-theme-name="Greybird" +gtk-icon-theme-name="Paper" +gtk-font-name="Ubuntu 10" +gtk-menu-images=0 +# gtk-key-theme-name = "Emacs" +#+end_src + +*** gtk-3.0 +:PROPERTIES: +:header-args+: :tangle ~/.config/gtk-3.0/settings.ini +:END: + +#+begin_src conf :tangle no +[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 +#+end_src + +** [[https://github.com/Leinnan/i3gs][i3gs]] +:PROPERTIES: +:header-args+: :tangle ~/.config/i3gs/config +:END: + +#+begin_src conf :comments none :tangle no +borders_width=0 0 2 0 +separator_width=10 + +#[mpd] +#preset=MPD +#title=  +#borders_color=#7FDBFF + +[ram] +preset=RAM +title=  +borders_color=#3D9970 + +#[cpu] +#preset=CPU +#title=  +#borders_color=#2ECC40 + +#[hdd] +#preset=HDD +#title=  +#borders_color=#01FF70 + +[volume] +command=volume-info +title= +borders_color=#7FDBFF + +[battery] +preset=BAT +command=battery-percentage-time +title=  +borders_color=#39CCCC + +[wifi] +preset=WIFI +title=  +borders_color=#01FF70 + +[date] +preset=DATE +command=date '+%-I:%M, %a %b %d ' +title=  +borders_color=#FFDC00 +separator_width=0 +#+end_src + +** i3status +:PROPERTIES: +:header-args+: :tangle ~/.config/i3status/config +:END: + +#+begin_src conf :comments none +# i3status configuration file. +# see "man i3status" for documentation. + +# It is important that this file is edited as UTF-8. +# The following line should contain a sharp s: +# ß +# If the above line is not correctly displayed, fix your editor first! + +general { + colors = true + interval = 5 + output_format = "i3bar" +} + +# order += "ipv6" +order += "disk /" +order += "disk /data" +order += "wireless _first_" +order += "ethernet _first_" +order += "battery 0" +order += "volume master" +order += "load" +order += "tztime local" + +wireless _first_ { + format_up = "W:%quality %essid %ip" + format_down = "W: down" +} + +ethernet _first_ { + # if you use %speed, i3status requires root privileges + format_up = "E: %ip (%speed)" + format_down = "E: down" +} + +battery 0 { + format = "%status %percentage %remaining (%consumption)" + path = "/sys/class/power_supply/BAT%d/uevent" + low_threshold = "10" + threshold_type = "percentage" + last_full_capacity = true + integer_battery_capacity = true + hide_seconds = true +} + +tztime local { + format = "%-I:%M%P %a %b %d" +} + +volume master { + format = "♪ %volume" + format_muted = "🔇 %volume" + device = "pulse" +} + +load { + format = "%1min" +} + +disk "/" { + format = "/ %avail" +} + +disk "/data" { + format = "/data %avail" +} +#+end_src + +** isync + +*** mbsyncrc +:PROPERTIES: +:header-args+: :tangle ~/.mbsyncrc +:END: + +#+begin_src conf +# Global defaults +CopyArrivalDate yes +Create Both +Expunge Both + +###### +IMAPAccount amin +Host mail.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 + +IMAPAccount amin-dovecot +Host 127.0.0.1 +Port 143 +User amin@aminb.org +PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin-dovecot.gpg" +SSLType None + +IMAPStore amin-local +Account amin-dovecot + +Channel amin +Master :amin-remote: +Slave :amin-local: +Patterns * + +###### +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 + +IMAPAccount uwaterloo-dovecot +Host 127.0.0.1 +Port 143 +User abandali@uwaterloo.ca +PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/uwaterloo-dovecot.gpg" +SSLType None + +IMAPStore uwaterloo-local +Account uwaterloo-dovecot + +Channel uwaterloo +Master :uwaterloo-remote: +Slave :uwaterloo-local: +Patterns * +#+end_src + +*** mbsync.service +:PROPERTIES: +:header-args+: :tangle ~/.config/systemd/user/mbsync.service +:END: + +#+begin_src conf :tangle no +[Unit] +Description=mbsync service + +[Service] +Type=oneshot +ExecStart=/usr/bin/mbsync -Va +StandardOutput=syslog +StandardError=syslog +#+end_src + +*** mbsync.timer +:PROPERTIES: +:header-args+: :tangle ~/.config/systemd/user/mbsync.timer +:END: + +#+begin_src conf :tangle no +[Unit] +Description=mbsync timer + +[Timer] +OnCalendar=*:0/15 +Persistent=true +Unit=mbsync.service + +[Install] +WantedBy=timers.target +#+end_src + +** Latexmk +:PROPERTIES: +:header-args+: :tangle ~/.latexmkrc +:END: + +#+begin_src conf +$pdf_previewer = "start zathura %O %S"; +$clean_ext = "aux out"; + +# $pdf_update_method = 4; +# $pdf_update_command = "zathura %O %S"; + +# Synctex allows one to jump to from the PDF in Zathura to the source in Emacs +# by Ctrl+click in the PDF. +# Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex +# editor. +# $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S'; +#+end_src + +** libinput + +Improve XPS 15 9560's touchpad experience. + +# begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "plasma")) "/sudo::/etc/X11/xorg.conf.d/30-touchpad.conf") +#+begin_src conf :tangle no +Section "InputClass" + Identifier "libinput touchpad catchall" + Driver "libinput" + MatchIsTouchpad "on" + Option "ClickMethod" "clickfinger" + Option "NaturalScrolling" "true" + Option "Tapping" "on" + Option "TappingButtonMap" "lrm" +EndSection +#+end_src + +** mpd +:PROPERTIES: +:header-args+: :tangle ~/.config/mpd/mpd.conf +:END: + +#+begin_src 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 ), 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 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" +# +############################################################################### +#+end_src + +** msmtp +:PROPERTIES: +:header-args+: :tangle ~/.msmtprc +:END: + +#+begin_src conf +# 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 mail.aminb.org +# use `msmtp -a aminb --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint +tls_fingerprint C7:A4:2E:A3:11:FA:80:45:C4:29:D6:62:4D:73:DB:34:43:67:8F:16:F1:2E:54:43:06:1B:41:B6:A9:09:E0:37 +tls_starttls on +from amin@aminb.org +user amin@aminb.org +passwordeval gpg2 --no-tty -q -d ~/.passwd/amin.gpg + +account bandali-me : aminb +from amin@bandali.me + +# 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 93:59:52:1D:A6:95:13:31:7C:81:ED:DB:A5:BA:B5:2B:C8:BC:38:3E:71:A5:DF:8C:80:46:C1:E0:5D:2D:F4:E3 +tls_starttls on +from bandali@gnu.org +user bandali +passwordeval gpg2 --no-tty -q -d ~/.passwd/gnu.gpg + +# gnu (old) +account gnu-aminb : gnu +from aminb@gnu.org +account gnu-amin : gnu +from amin@gnu.org +account gnu-mab : gnu +from mab@gnu.org + +# 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 + +# Set a default account +account default : aminb +#+end_src + +** ncmpcpp + +*** config +:PROPERTIES: +:header-args+: :tangle ~/.ncmpcpp/config +:END: + +#+begin_src conf :tangle no +############################################################## +## 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 = +# +#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 "_", 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 +# +#+end_src + +*** bindings +:PROPERTIES: +:header-args+: :tangle ~/.ncmpcpp/bindings +:END: + +#+begin_src conf :tangle no +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 +#+end_src + +** notmuch + +*** notmuch-config +:PROPERTIES: +:header-args+: :tangle ~/.notmuch-config +:END: + +#+begin_src conf +# .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/oldmail + +# 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=bandali@gnu.org;abandali@uwaterloo.ca; + +# 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 +#+end_src + +*** pre-new hook +:PROPERTIES: +:header-args+: :tangle ~/mail/.notmuch/hooks/pre-new :shebang "#!/bin/sh" +:END: + +#+begin_src 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 +#+end_src + +*** post-new hook +:PROPERTIES: +:header-args+: :tangle ~/mail/.notmuch/hooks/post-new :shebang "#!/bin/sh" +:END: + +#+begin_src sh +# apply sent tag to messages sent by me +notmuch tag -new +sent -- from:amin@aminb.org or from:bandali@gnu.org or from:aminb@gnu.org or from:amin@gnu.org or from:mab@gnu.org or from:abandali@uwaterloo.ca + +# initial tagging +notmuch tag -latest -- tag:latest +notmuch tag +inbox +unread +latest -new -- tag:new + + +# apply tags to lists + +# +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 +notmuch tag -inbox +banking -- folder:amin/banking +notmuch tag -inbox +work -- folder:amin/work +# + +# +notmuch tag -inbox +uw/cs136 -- folder:uwaterloo/lists/cs136 +notmuch tag -inbox +uw/cs846 -- folder:uwaterloo/lists/cs846 +notmuch tag -inbox +uw/ece750 -- folder:uwaterloo/lists/ece750 +notmuch tag -inbox +uw/se212 -- folder:uwaterloo/lists/se212 +notmuch tag -inbox +uw/se463 -- folder:uwaterloo/lists/se463 + +notmuch tag -inbox +lists/alloytools -- folder:uwaterloo/lists/alloytools +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 +# + +# +notmuch tag -inbox +l/emacs-devel -- folder:gnu/l/emacs-devel +notmuch tag -inbox +l/emacs-orgmode -- folder:gnu/l/emacs-orgmode +notmuch tag -inbox +l/emacsconf-discuss -- folder:gnu/l/emacsconf-discuss +notmuch tag -inbox +l/fencepost-users -- folder:gnu/l/fencepost-users +notmuch tag -inbox +l/guix-devel -- folder:gnu/l/guix-devel +notmuch tag -inbox +l/guile-devel -- folder:gnu/l/guile-devel +notmuch tag -inbox +l/help-gnu-emacs -- folder:gnu/l/help-gnu-emacs +notmuch tag -inbox +l/info-gnu-emacs -- folder:gnu/l/info-gnu-emacs +notmuch tag -inbox +l/www-commits -- folder:gnu/l/www-commits +notmuch tag -inbox +l/www-discuss -- folder:gnu/l/www-discuss +notmuch tag -inbox +webmasters -- folder:gnu/webmasters + +notmuch tag -inbox +l/deepspec -- folder:gnu/l/deepspec +notmuch tag -inbox +l/haskell-cafe -- folder:gnu/l/haskell-cafe +notmuch tag -inbox +l/haskell-art -- folder:gnu/l/haskell-art +notmuch tag -inbox +l/notmuch -- folder:gnu/l/notmuch + +notmuch tag -inbox +l/~aminb/test-priv -- folder:gnu/l/~aminb/test-priv +notmuch tag -inbox +l/~sircmpwn/sr.ht-admins -- folder:gnu/l/~sircmpwn/sr.ht-admins +notmuch tag -inbox +l/~sircmpwn/sr.ht-announce -- folder:gnu/l/~sircmpwn/sr.ht-announce +notmuch tag -inbox +l/~sircmpwn/sr.ht-dev -- folder:gnu/l/~sircmpwn/sr.ht-dev +notmuch tag -inbox +l/~sircmpwn/sr.ht-discuss -- folder:gnu/l/~sircmpwn/sr.ht-discuss +# + +notmuch tag -inbox -unread +archive/notmuch -- path:archive/notmuch/** +notmuch tag -inbox -unread +archive/emacs-devel -- path:archive/emacs-devel/** +#+end_src + +*** notmuch.service +:PROPERTIES: +:header-args+: :tangle ~/.config/systemd/user/notmuch.service +:END: + +#+begin_src conf :tangle no +[Unit] +Description=notmuch service + +[Service] +Type=oneshot +ExecStart=/usr/bin/notmuch new +StandardOutput=syslog +StandardError=syslog +#+end_src + +*** notmuch.timer +:PROPERTIES: +:header-args+: :tangle ~/.config/systemd/user/notmuch.timer +:END: + +#+begin_src conf :tangle no +[Unit] +Description=notmuch timer + +[Timer] +OnCalendar=*:0/5 +Persistent=true +Unit=notmuch.service + +[Install] +WantedBy=timers.target +#+end_src + +** offlineimap + +*** offlineimaprc +:PROPERTIES: +:header-args+: :tangle ~/.offlineimaprc +:END: + +#+begin_src conf :tangle no +[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 +#+end_src + +*** offlineimap.py +:PROPERTIES: +:header-args+: :tangle ~/.offlineimap.py +:END: + +#+begin_src python :tangle no +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() +#+end_src + +** pigeonhole +*** amin.sieve +:PROPERTIES: +:header-args+: :tangle ~/mail/aminb.org/amin/sieve/amin.sieve :comments none +:END: + +#+begin_src conf +require ["regex", "variables", "fileinto", "envelope", + "mailbox", "imap4flags", "include"]; + +# webmasters +if anyof ( + address :is "from" ["webmasters@gnu.org", "webmasters-comment@gnu.org"]) { + fileinto :create "gnu.webmasters"; + stop; +} + +include :personal "lists"; +#+end_src + +*** lists.sieve +:PROPERTIES: +:header-args+: :tangle ~/mail/aminb.org/amin/sieve/lists.sieve :comments none +:END: + +#+begin_src conf +require ["regex", "variables", "fileinto", "envelope", + "mailbox", "imap4flags", "include"]; + +# mailing lists +if anyof ( + header :contains "list-id" + [ "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + , "" + ] ) { + if header :regex "list-id" "<([a-z_0-9-]+)[.@]" { + set :lower "listname" "${1}"; + fileinto :create "gnu.${listname}"; + stop; + } +} + +# sr.ht lists, with dots ('.') omitted +if anyof ( + header :contains "list-id" + [ "<~bandali/public-inbox@lists.sr.ht>" + , "<~sircmpwn/sr.ht-admins@lists.sr.ht>" + , "<~sircmpwn/sr.ht-announce@lists.sr.ht>" + , "<~sircmpwn/sr.ht-dev@lists.sr.ht>" + , "<~sircmpwn/sr.ht-discuss@lists.sr.ht>" + ] ) { + if header :regex "list-id" "(~[a-z_0-9-]+)/([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)@" { + set :lower "username" "${1}"; + set :lower "listname" "${2}${3}${4}${5}${6}${7}"; + fileinto :create "gnu.${username}.${listname}"; + stop; + } +} +#+end_src + +** polybar + +*** config +:PROPERTIES: +:header-args+: :tangle ~/.config/polybar/config +:END: + +#+begin_src conf :tangle no +;===================================================== +; +; 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 = +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 = + +icon-prev =  +icon-stop =  +icon-play =  +icon-pause =  +icon-next =  + +label-song-maxlen = 25 +label-song-ellipsis = true + +[module/xbacklight] +type = internal/xbacklight + +format =