X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/be76c6db0ab38f4c8f3c4209a10b47087610f26f..f1516d514c999d36839ff7f6e70f63a7d4c43390:/rc.org?ds=inline diff --git a/rc.org b/rc.org index 97d7cc9..99a27b2 100644 --- a/rc.org +++ b/rc.org @@ -14,47 +14,6 @@ Note: This file is best viewed inside Emacs with org mode. This section contains the configuration files (dotfiles) of various programs I use. -** [[https://github.com/afewmail/afew][afew]] -:PROPERTIES: -:header-args+: :tangle ~/.config/afew/config -:END: - -#+begin_quote -an initial tagging script for notmuch mail -#+end_quote - -#+begin_src conf -# This is the default filter chain -[SpamFilter] -#[ClassifyingFilter] -[KillThreadsFilter] -#[ListMailsFilter] -[ArchiveSentMailsFilter] -sent_tag = sent -[InboxFilter] - -#[Filter.1] -#query = 'folder:amin/lists/.haskell-cafe' -#tags = +lists;+lists/haskell-cafe -#message = lists/haskell-cafe - -#[Filter.2] -#query = 'folder:amin/lists/.haskell-weekly' -#tags = +lists;+lists/haskell-weekly -#message = lists/haskell-weekly - -#[Filter.3] -#query = 'folder:amin/lists/.hackernewsletter' -#tags = +lists;+lists/hackernewsletter -#message = lists/hackernewsletter - - -#[FolderNameFilter] -#folder_blacklist = Inbox -#maildir_separator = /. -#folder_transforms = Drafts:draft Junk:spam Trash:deleted Sent:sent Archive:archive lists/haskell-cafe:lists/haskell-cafe -#+end_src - ** bspwm *** bspwmrc @@ -62,11 +21,11 @@ sent_tag = sent :header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh" :END: -#+begin_src sh +#+begin_src sh :tangle no sxhkd & sh ~/.fehbg & xfce4-panel -d & -#compton & +compton & sleep 0.5 && pasystray --notify=all & bspc monitor -d I II III IV V VI VII VIII IX X @@ -85,7 +44,7 @@ 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 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 @@ -126,7 +85,7 @@ bspc rule -a Zathura state=tiled :header-args+: :tangle ~/.config/sxhkd/sxhkdrc :END: -#+begin_src conf +#+begin_src conf :tangle no # # wm independent hotkeys # @@ -177,6 +136,9 @@ XF86Audio{Raise,Lower}Volume XF86AudioMute pamixer --toggle-mute +XF86AudioMicMute + pactl set-source-mute 1 toggle + # playback control XF86Audio{Play,Prev,Next} mpc {toggle,prev,next} @@ -204,6 +166,9 @@ super + apostrophe #XF86KbdBrightness{Up,Down} # kbdlight {up,down} +XF86RotateWindows + toggle-tablet + # # bspwm hotkeys # @@ -323,7 +288,7 @@ super + {Left,Down,Up,Right} :header-args+: :tangle ~/.config/compton.conf :END: -#+begin_src conf +#+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. @@ -424,6 +389,52 @@ wintypes: }; #+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 @@ -623,7 +634,7 @@ timeout = 0 ** Fontconfig :PROPERTIES: -:header-args+: :tangle ~/.config/fontconfig/fonts.conf +:header-args+: :tangle ~/.config/fontconfig/fonts.conf :comments none :END: #+begin_src xml @@ -660,13 +671,71 @@ timeout = 0 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 @@ -678,14 +747,14 @@ timeout = 0 #+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 @@ -721,6 +790,8 @@ timeout = 0 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 @@ -753,6 +824,16 @@ timeout = 0 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 @@ -768,83 +849,6 @@ timeout = 0 *-autoloads.el #+end_src -** Latexmk -:PROPERTIES: -:header-args+: :tangle ~/.latexmkrc -:END: - -#+begin_src conf -$pdf_previewer = "start zathura %O %S"; -$clean_ext = "aux out"; - -# $pdf_update_method = 4; -# $pdf_update_command = "zathura %O %S"; - -# Synctex allows one to jump to from the PDF in Zathura to the source in Emacs -# by Ctrl+click in the PDF. -# Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex -# editor. -# $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S'; -#+end_src - -** getmail - -*** getmailrc -:PROPERTIES: -:header-args+: :tangle ~/.getmail/getmailrc -:END: - -#+begin_src conf -[retriever] -type = SimplePOP3SSLRetriever -server = fencepost.gnu.org -username = aminb -password_command = ("gpg2", "--no-tty", "-q", "-d", "~/.passwd/gnu.gpg") -port = 995 -use_apop = True - -[destination] -type = Maildir -path = ~/mail/gnu/Inbox/ - -[options] -delete = True -#+end_src - -*** getmail.service -:PROPERTIES: -:header-args+: :tangle ~/.config/systemd/user/getmail.service -:END: - -#+begin_src conf :tangle no -[Unit] -Description=getmail service - -[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 - ** GnuPG :PROPERTIES: :header-args+: :tangle ~/.gnupg/gpg-agent.conf @@ -893,6 +897,133 @@ 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 @@ -903,10 +1034,12 @@ gtk-font-name = Ubuntu 10 #+begin_src conf # Global defaults CopyArrivalDate yes +Create Both +Expunge Both ###### IMAPAccount amin -Host nix.aminb.org +Host mail.aminb.org User amin@aminb.org PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin.gpg" SSLType IMAPS @@ -914,39 +1047,45 @@ SSLType IMAPS IMAPStore amin-remote Account amin -MaildirStore amin-local -Path ~/mail/amin/ -Inbox ~/mail/amin/Inbox -SubFolders Verbatim +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 * !dovecot* -Create Both -SyncState * +Patterns * ###### IMAPAccount uwaterloo Host connect.uwaterloo.ca -User mbandali +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 +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 * !dovecot* -Create Both -SyncState * +Patterns * #+end_src *** mbsync.service @@ -983,51 +1122,4793 @@ Unit=mbsync.service WantedBy=timers.target #+end_src -* Scripts - -This section contains various useful scripts and the ones used by the -programs above. For instance, =toggle-tablet= for switching to and -from tablet mode on my X220T, =toggle-presentation-mode= for toggling -Xfce's presentation mode which keeps the screen awake, and -=rofi-light= a small utility that uses [[https://github.com/DaveDavenport/rofi][Rofi]] to ask and [[https://github.com/haikarainen/light][light]] to set an -exact brightness value. - -** rofi-light +** Latexmk :PROPERTIES: -:header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash" +:header-args+: :tangle ~/.latexmkrc :END: -#+begin_src bash -cur=$(light -G) -val=$(rofi -dmenu -mesg "light $cur" -p "light -S " -l 0 -width 8) -light -S $val +#+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 -** toggle-layout -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash" -:END: +** libinput -#+begin_src bash -lang="$(setxkbmap -print | grep xkb_symbols | cut -d'+' -f 2)" +Improve XPS 15 9560's touchpad experience. -if [ "$lang" = "us" ]; then - setxkbmap ir -else - setxkbmap us - # xmodmap $HOME/.Xmodmap -fi +# 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 -** toggle-presentation-mode +** mpd :PROPERTIES: -:header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash" +:header-args+: :tangle ~/.config/mpd/mpd.conf :END: -#+begin_src bash -xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T -#+end_src +#+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 =