#+title: rc.org #+property: header-args :comments link :mkdirp yes :results silent * About This org file contains the configuration files of pretty much every program I use. The files are tangled (i.e. exported, or derived) from this file using =org-babel=. Note: This file is best viewed inside Emacs with org mode. * Configs This section contains the configuration files (dotfiles) of various programs I use. ** bspwm *** bspwmrc :PROPERTIES: :header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh" :END: #+begin_src sh sxhkd & sh ~/.fehbg & xfce4-panel -d & compton & sleep 0.5 && pasystray --notify=all & bspc monitor -d I II III IV V VI VII VIII IX X #bspc monitor eDP-1 -d I II III IV V #bspc monitor HDMI-1 -d VI VII VIII IX X #bspc config border_width 2 #bspc config window_gap 8 bspc config window_gap 0 bspc config bottom_padding 26 bspc config split_ratio 0.52 bspc config borderless_monocle true bspc config gapless_monocle true bspc config click_to_focus button1 bspc config directional_focus_tightness low #bspc rule -a Firefox desktop='^1' follow=on bspc rule -a Nightly desktop='^1' follow=on bspc rule -a Emacs desktop='^2' state=tiled follow=on #bspc rule -a Chromium desktop='^4' follow=on bspc rule -a URxvt state=floating bspc rule -a URxvt:tiled state=tiled bspc rule -a Connman-gtk state=floating bspc rule -a Xfce4-panel state=floating bspc rule -a TelegramDesktop state=floating bspc rule -a Ec state=floating bspc rule -a Pavucontrol state=floating bspc rule -a Eog state=floating bspc rule -a Seahorse state=floating bspc rule -a mpv state=floating bspc rule -a Evince state=floating bspc rule -a Meld state=floating bspc rule -a Autokey-gtk state=floating bspc rule -a Mousepad state=floating bspc rule -a Wrapper-1.0 state=floating bspc rule -a File-roller state=floating bspc rule -a Gnome-disks state=floating bspc rule -a Termite state=floating bspc rule -a Termite:tiled state=tiled bspc rule -a Thunderbird:Calendar state=floating bspc rule -a Audacity state=floating bspc rule -a Proof state=floating # pvs x-show-proof bspc rule -a Nm-connection-editor state=floating bspc rule -a Wire state=floating bspc rule -a discord state=floating bspc rule -a X2goclient state=floating bspc rule -a SimpleScreenRecorder state=floating bspc rule -a Gimp state=floating bspc rule -a Wrapper-2.0 state=floating bspc rule -a Zathura state=tiled #+end_src *** sxhkdrc :PROPERTIES: :header-args+: :tangle ~/.config/sxhkd/sxhkdrc :END: #+begin_src conf # # wm independent hotkeys # # terminal emulator super + {_,shift} + Return urxvt{_, -name tiled} #super + {_,shift} + Return # termite{_, --name=tiled} # program launcher super + space rofi -show run -display-run '> ' -display-window ' 🗔 ' super + alt + space xfce4-popup-whiskermenu # window finder super + backslash rofi -show window -display-run '> ' -display-window ' 🗔 ' # password manager alt + space rofi-pass # firefox #super + r # firefox # chromium #super + c # chromium -incognito # emacs super + e emacs # make sxhkd reload its configuration files: super + Escape pkill -USR1 -x sxhkd # volume {up,down} XF86Audio{Raise,Lower}Volume pamixer --allow-boost --{in,de}crease 5 # mute XF86AudioMute pamixer --toggle-mute 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 # Shadow shadow = false; # Enabled client-side shadows on windows. no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows. no-dnd-shadow = true; # Don't draw shadows on DND windows. clear-shadow = true; # Zero the part of the shadow's mask behind the # window. Fix some weirdness with ARGB windows. shadow-radius = 5; # The blur radius for shadows. (default 12) shadow-offset-x = -5; # The left offset for shadows. (default -15) shadow-offset-y = -5; # The top offset for shadows. (default -15) # shadow-opacity = 0.7; # The translucency for shadows. (default .75) # shadow-red = 0.0; # Red color value of shadow. (0.0 - 1.0, defaults to 0) # shadow-green = 0.0; # Green color value of shadow. (0.0 - 1.0, defaults to 0) # shadow-blue = 0.0; # Blue color value of shadow. (0.0 - 1.0, defaults to 0) shadow-exclude = [ "n:e:Notification", "class_g = 'Chromium'", "class_g = 'Dmenu'", "class_g = 'Firefox' && argb" ]; # Exclude conditions for shadows. # shadow-exclude = "n:e:Notification"; #shadow-exclude = [ "_GTK_FRAME_EXTENTS@:c" ] # Fix dual shadow on some gtk3 powered applications shadow-ignore-shaped = true; # Avoid drawing shadow on all shaped windows # (see also: --detect-rounded-corners) # Opacity menu-opacity = 1.0; # The opacity for menus. (default 1.0) #inactive-opacity = 0.9; # Default opacity of inactive windows. (0.0 - 1.0) # active-opacity = 0.8; # Default opacity for active windows. (0.0 - 1.0) frame-opacity = 1.0; # Opacity of window titlebars and borders. (0.1 - 1.0) # inactive-opacity-override = true; # Let inactive opacity set by 'inactive-opacity' overrides # value of _NET_WM_OPACITY. Bad choice. alpha-step = 0.06; # XRender backend: Step size for alpha pictures. Increasing # it may result in less X resource usage, # Yet fading may look bad. #inactive-dim = 0.5; # Dim inactive windows. (0.0 - 1.0) #inactive-dim-fixed = true; # Do not let dimness adjust based on window opacity. # blur-background = true; # Blur background of transparent windows. # Bad performance with X Render backend. # GLX backend is preferred. # blur-background-frame = true; # Blur background of opaque windows with transparent # frames as well. blur-background-fixed = true; # Do not let blur radius adjust based on window opacity. blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ]; # Exclude conditions for background blur. # Fading fading = false; # Fade windows during opacity changes. fade-delta = 3; # The time between steps in a fade in milliseconds. (default 10). fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028). fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03). # no-fading-openclose = true; # Avoid fade windows in/out when opening/closing. fade-exclude = [ ]; # Exclude conditions for fading. # Other backend = "glx" # Backend to use: "xrender" or "glx". GLX backend is typically # much faster but depends on a sane driver. mark-wmwin-focused = true; # Try to detect WM windows and mark them as active. mark-ovredir-focused = true; # Mark all non-WM but override-redirect windows active (e.g. menus). use-ewmh-active-win = true; # Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused # instead of using FocusIn/Out events. Usually more reliable but # depends on a EWMH-compliant WM. detect-rounded-corners = false; # Detect rounded corners and treat them as rectangular when --shadow-ignore- shaped is on. detect-client-opacity = true; # Detect _NET_WM_OPACITY on client windows, useful for window # managers not passing _NET_WM_OPACITY of client windows to frame # windows. refresh-rate = 0; # For --sw-opti: Specify refresh rate of the screen. 0 for auto. vsync = "drm"; # "none", "drm", "opengl", "opengl-oml", "opengl-swc", "opengl-mswc" # See man page for more details. dbe = false; # Enable DBE painting mode. Rarely needed. paint-on-overlay = true; # Painting on X Composite overlay window. Recommended. sw-opti = false; # Limit compton to repaint at most once every 1 / refresh_rate. # Incompatible with certain VSync methods. unredir-if-possible = false; # Unredirect all windows if a full-screen opaque window is # detected, to maximize performance for full-screen windows. focus-exclude = [ ]; # A list of conditions of windows that should always be considered # focused. detect-transient = true; # Use WM_TRANSIENT_FOR to group windows, and consider windows in # the same group focused at the same time. detect-client-leader = true; # Use WM_CLIENT_LEADER to group windows. invert-color-include = [ ]; # Conditions for windows to be painted with inverted color. # GLX backend # GLX backend fine-tune options. See man page for more info. glx-no-stencil = true; # Recommended. glx-copy-from-front = false; # Useful with --glx-swap-method, # glx-use-copysubbuffermesa = true; # Recommended if it works. Breaks VSync. # glx-no-rebind-pixmap = true; # Recommended if it works. glx-no-rebind-pixmap = true; # Recommended if it works. #glx-swap-method = "4"; # See man page. glx-swap-method = "4"; # See man page. # Window type settings wintypes: { tooltip = { fade = true; shadow = false; opacity = 1; focus = true; }; menu = { shadow = false; }; dropdown_menu = { shadow = false; }; popup_menu = { shadow = false; }; utility = { shadow = false; }; # fade: Fade the particular type of windows. # shadow: Give those windows shadow # opacity: Default opacity for the type of windows. # focus: Whether to always consider windows of this type focused. }; #+end_src ** Dunst :PROPERTIES: :header-args+: :tangle ~/.config/dunst/dunstrc :END: #+begin_src conf [global] #font = Ubuntu Mono 10.5 font = Inconsolata 11 # Path to default icons. icon_folders = /usr/share/icons/Moka/16x16/status/:/usr/share/icons/Moka/16x16/devices/:/usr/share/icons/Faba-Mono/16x16/status/:/usr/share/icons/Faba-Mono/16x16/devices/:/usr/share/icons/Moka/16x16/actions/:/usr/share/icons/Moka/16x16/categories/:/usr/share/icons/Moka/16x16/mimetypes/:/usr/share/icons/Moka/16x16/apps/:/usr/share/icons/Moka/16x16/places/:/usr/share/icons/Paper/16x16/status/ icon_position = left # bold # italic # strikethrough # underline markup = full # The format of the message. Possible variables are: # %a appname # %s summary # %b body # %i iconname (including its path) # %I iconname (without its path) # %p progress value if set ([ 0%] to [100%]) or nothing # Markup is allowed format = "%s\n%b" # Sort messages by urgency sort = yes # Show how many messages are currently hidden (because of geometry) indicate_hiddenl= no # Alignment of message text. # Possible values are "left", "center" and "right" alignment = center # The frequency with wich text that is longer than the notification # window allows bounces back and forth. # This option conflicts with 'word_wrap'. # Set to 0 to disable bounce_freq = 3 # show age of message if message is older than show_age_threshold seconds. # set to -1 to disable show_age_threshold = -1 # split notifications into multiple lines if they don't fit into geometry word_wrap = yes # ignore newlines '\n' in notifications ignore_newline = no # The geometry of the message window. # geometry [{width}]x{height}][+/-{x}+/-{y}] # The height is measured in number of notifications everything else in pixels. If the width # is omitted but the height is given ("-geometry x2"), the message window # expands over the whole screen (dmenu-like). If width is 0, # the window expands to the longest message displayed. # A positive x is measured from the left, a negative from the # right side of the screen. Y is measured from the top and down respectevly. # The width can be negative. In this case the actual width is the # screen width minus the width defined in within the geometry option. #geometry = "410x12-12+12" #geometry = "0x0-30-30" geometry = "260x12-30-30" # The transparency of the window. range: [0; 100] # This option will only work if a compositing windowmanager is present (e.g. xcompmgr, compiz, etc..) transparency = 0 # Don't remove messages, if the user is idle (no mouse or keyboard input) # for longer than idle_threshold seconds. # Set to 0 to disable. idle_threshold = 120 # Which monitor should the notifications be displayed on. monitor = 0 # Display notification on focused monitor. Possible modes are: # mouse: follow mouse pointer # keyboard: follow window with keyboard focus # none: don't follow anything # # "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property. # This should be the case for almost all modern windowmanagers. # # If this option is set to mouse or keyboard, the monitor option will be # ignored. follow = keyboard # should a notification popped up from history be sticky or # timeout as if it would normally do. sticky_history = yes # The height of a single line. If the height is smaller than the font height, # it will get raised to the font height. # This adds empty space above and under the text. line_height = 0 show_indicators = yes # Draw a line of 'separatpr_height' pixel height between two notifications. # Set to 0 to disable separator_height = 3 # padding between text and separator padding = 8 # horizontal padding horizontal_padding = 8 # Define a color for the separator. # possible values are: # * auto: dunst tries to find a color fitting to the background # * foreground: use the same color as the foreground # * frame: use the same color as the frame. # * anything else will be interpreted as a X color separator_color = foreground # print a notification on startup # This is mainly for error detection, since dbus (re-)starts dunst # automatically after a crash. startup_notification = false # dmenu path #dmenu = /usr/bin/dmenu -p dunst: dmenu = /usr/bin/rofi -dmenu -p dunst: # browser for opening urls in context menu browser = /usr/bin/firefox -new-tab [frame] width = 0 color = "#377222" [shortcuts] # shortcuts are specified as [modifier+][modifier+]...key # available modifiers are 'ctrl', 'mod1' (the alt-key), 'mod2', 'mod3' # and 'mod4' (windows-key) # xev might be helpful to find names for keys # close notification close = ctrl+space # close all notifications close_all = ctrl+shift+space # redisplay last message(s) # On the US keyboard layout 'grave' is normally above TAB and left of '1'. history = ctrl+shift+h # context menu context = ctrl+shift+period [urgency_low] # IMPORTANT: colors have to be defined in quotation marks. # Otherwise the '#' and following would be interpreted as a comment. background = "#1d2a30" foreground = "#71c2af" timeout = 3 [urgency_normal] background = "#1d2a30" foreground = "#71c2af" timeout = 0 [urgency_critical] background = "#1d2a30" foreground = "#ff9982" timeout = 0 # Every section that isn't one of the above is interpreted as a rules # to override settings for certain messages. # Messages can be matched by 'appname', 'summary', 'body' or 'icon' # and you can override the 'timeout', 'urgency', 'foreground', 'background' # and 'format'. # Shell-like globbing will get expanded. # # SCRIPTING # you can specify a script that gets run when the rule matches by setting # the 'script' option. # The script will be called as follows: # script appname summary body icon urgency # where urgency can be "LOW", "NORMAL" or "CRITICAL". # # NOTE: if you don't want a notification to be displayed, set the format to "" # NOTE: It might be helpful to run dunst -print in a terminal in order to find # fitting options for rules. #[espeak] # summary = "*" # script = dunst_espeak.sh #[script-test] # summary = "*script*" # script = dunst_test.sh #[ignore] ## This notification will not be displayed # summary = "foobar" # format = "" #[signed_on] # appname = Pidgin # summary = "*signed on*" # urgency = low # #[signed_off] # appname = Pidgin # summary = *signed off* # urgency = low # #[says] # appname = Pidgin # summary = *says* # urgency = critical # #[twitter] # appname = Pidgin # summary = *twitter.com* # urgency = normal # [xfpm-backlight] summary = *Brightness* urgency = low #+end_src ** Fontconfig :PROPERTIES: :header-args+: :tangle ~/.config/fontconfig/fonts.conf :comments none :END: #+begin_src xml rgb true hintslight true lcddefault ~/.fonts Helvetica Liberation Sans #+end_src ** Git *** gitconfig :PROPERTIES: :header-args+: :tangle ~/.gitconfig :END: **** user #+begin_src conf [user] name = Amin Bandali email = amin@aminb.org signingkey = 4E05246AB0BF7FFB #+end_src **** signing #+begin_src conf [commit] gpgsign = true # [format] # signoff = true #+end_src **** core #+begin_src conf [core] autocrlf = input # CRLF -> LF on commit editor = emacsclient -t excludesfile = ~/.gitignore_global pager = "less" #+end_src **** gpg #+begin_src conf [gpg] program = gpg2 #+end_src **** alias #+begin_src conf [alias] git = !exec git # handle nested git calls, e.g. git git status aliases = config --get-regexp '^alias\\.' a = add s = status sl = status --long c = checkout cb = checkout -b b = branch r = rebase p = pull pr = pull --rebase ps = push psf = push --force #+end_src **** color #+begin_src conf [color] ui = auto [color "status"] added = green bold changed = red bold untracked = red bold [color "branch"] current = green bold remote = magenta bold [color "diff"] new = green bold old = red bold #+end_src **** status #+begin_src conf [status] # showUntrackedFiles = all short=true branch=true #+end_src **** github #+begin_src conf [github] user = aminb #+end_src **** send-email #+begin_src conf [sendemail] smtpuser = amin@aminb.org smtpserver = nix.aminb.org smtpserverport = 587 smtpencryption = tls annotate = yes #+end_src *** gitignore :PROPERTIES: :header-args+: :tangle ~/.gitignore_global :END: #+begin_src conf *.orig *.py[co] *.sublime-workspace *~ .DS_Store *.elc *-autoloads.el #+end_src ** Latexmk :PROPERTIES: :header-args+: :tangle ~/.latexmkrc :END: #+begin_src conf $pdf_previewer = "start zathura %O %S"; $clean_ext = "aux out"; # $pdf_update_method = 4; # $pdf_update_command = "zathura %O %S"; # Synctex allows one to jump to from the PDF in Zathura to the source in Emacs # by Ctrl+click in the PDF. # Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex # editor. # $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S'; #+end_src ** 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") 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 ** 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", "/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 ** 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 ** isync *** mbsyncrc :PROPERTIES: :header-args+: :tangle ~/.mbsyncrc :END: #+begin_src conf # Global defaults CopyArrivalDate yes ###### IMAPAccount amin Host nix.aminb.org User amin@aminb.org PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin.gpg" SSLType IMAPS IMAPStore amin-remote Account amin MaildirStore amin-local Path ~/mail/amin/ Inbox ~/mail/amin/Inbox SubFolders Verbatim Channel amin Master :amin-remote: Slave :amin-local: Patterns * !dovecot* Create Both SyncState * ###### IMAPAccount uwaterloo Host connect.uwaterloo.ca User abandali PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/uwaterloo.gpg" SSLType IMAPS IMAPStore uwaterloo-remote Account uwaterloo MaildirStore uwaterloo-local Path ~/mail/uwaterloo/ Inbox ~/mail/uwaterloo/Inbox SubFolders Verbatim Channel uwaterloo Master :uwaterloo-remote: Slave :uwaterloo-local: Patterns * !dovecot* Create Both SyncState * #+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 ** 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 nix.aminb.org tls_fingerprint 65:DD:B8:32:D8:CD:F1:DC:B6:34:EE:35:04:18:AC:09:F3:1D:6D:20:F2:4A:E2:BD:64:48:B7:1F:90:BD:C4:BA tls_starttls on from amin@aminb.org user amin@aminb.org passwordeval gpg2 --no-tty -q -d ~/.passwd/amin.gpg # gnu account gnu host fencepost.gnu.org # use `msmtp -a gnu --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint tls_fingerprint 28:70:42:76:1C:EC:91:5F:D1:B3:27:A1:CD:3B:32:A4:8B:0B:DC:3A:CD:CA:F6:6F:E4:61:BA:69:D7:4D:0D:0B tls_starttls on from aminb@gnu.org user aminb passwordeval gpg2 --no-tty -q -d ~/.passwd/gnu.gpg # uwaterloo account uwaterloo host connect.uwaterloo.ca tls_starttls on from abandali@uwaterloo.ca user abandali passwordeval gpg2 --no-tty -q -d ~/.passwd/uwaterloo.gpg tls_trust_file /etc/ssl/certs/ca-certificates.crt # uwaterloo (friendly address) account uwaterloo-friendly : uwaterloo from amin.bandali@uwaterloo.ca # Set a default account account default : aminb #+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/mail # User configuration # # Here is where you can let notmuch know how you would like to be # addressed. Valid settings are # # name Your full name. # primary_email Your primary email address. # other_email A list (separated by ';') of other email addresses # at which you receive email. # # Notmuch will use the various email addresses configured here when # formatting replies. It will avoid including your own addresses in the # recipient list of replies, and will set the From address based on the # address to which the original email was addressed. # [user] name=Amin Bandali primary_email=amin@aminb.org other_email=abandali@uwaterloo.ca;amin.bandali@uwaterloo.ca;aminb@gnu.org; # Configuration for "notmuch new" # # The following options are supported here: # # tags A list (separated by ';') of the tags that will be # added to all messages incorporated by "notmuch new". # # ignore A list (separated by ';') of file and directory names # that will not be searched for messages by "notmuch new". # # NOTE: *Every* file/directory that goes by one of those # names will be ignored, independent of its depth/location # in the mail store. # [new] tags=new; #tags=unread;inbox; ignore=.uidvalidity;.mbsyncstate;/.*/dovecot*/ # Search configuration # # The following option is supported here: # # exclude_tags # A ;-separated list of tags that will be excluded from # search results by default. Using an excluded tag in a # query will override that exclusion. # [search] exclude_tags=deleted;spam; # Maildir compatibility configuration # # The following option is supported here: # # synchronize_flags Valid values are true and false. # # If true, then the following maildir flags (in message filenames) # will be synchronized with the corresponding notmuch tags: # # Flag Tag # ---- ------- # D draft # F flagged # P passed # R replied # S unread (added when 'S' flag is not present) # # The "notmuch new" command will notice flag changes in filenames # and update tags, while the "notmuch tag" and "notmuch restore" # commands will notice tag changes and update flags in filenames # [maildir] synchronize_flags=true # Cryptography related configuration # # The following option is supported here: # # gpg_path # binary name or full path to invoke gpg. # [crypto] gpg_path=gpg #+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:aminb@gnu.org or from:abandali@uwaterloo.ca or from:amin.bandali@uwaterloo.ca # initial tagging notmuch tag +inbox +unread -new -- tag:new # apply tags to lists # notmuch tag -inbox +lists/~sircmpwn/srht-admins -- folder:amin/lists/~sircmpwn/srht-admins notmuch tag -inbox +lists/~sircmpwn/srht-announce -- folder:amin/lists/~sircmpwn/srht-announce notmuch tag -inbox +lists/~sircmpwn/srht-dev -- folder:amin/lists/~sircmpwn/srht-dev notmuch tag -inbox +lists/~sircmpwn/srht-discuss -- folder:amin/lists/~sircmpwn/srht-discuss notmuch tag -inbox +lists/hackernewsletter -- folder:amin/lists/hackernewsletter notmuch tag -inbox +lists/haskell-weekly -- folder:amin/lists/haskell-weekly # # notmuch tag -inbox +lists/cs136 -- folder:uwaterloo/lists/cs136 notmuch tag -inbox +lists/se463 -- folder:uwaterloo/lists/se463 notmuch tag -inbox +lists/clvsingle -- folder:uwaterloo/lists/Clvsingle notmuch tag -inbox +lists/gsa -- folder:uwaterloo/lists/GSA notmuch tag -inbox +lists/math-grad -- folder:uwaterloo/lists/Math-grad notmuch tag -inbox +lists/scs-grads -- folder:uwaterloo/lists/scs-grads notmuch tag -inbox +lists/watform-students -- folder:uwaterloo/lists/Watform-students # # notmuch tag -inbox +lists/emacs-devel -- folder:gnu/l/emacs-devel notmuch tag -inbox +lists/emacs-orgmode -- folder:gnu/l/emacs-orgmode notmuch tag -inbox +lists/emacsconf-discuss -- folder:gnu/l/emacsconf-discuss notmuch tag -inbox +lists/fencepost-users -- folder:gnu/l/fencepost-users notmuch tag -inbox +lists/guix-devel -- folder:gnu/l/guix-devel notmuch tag -inbox +lists/guile-devel -- folder:gnu/l/guile-devel notmuch tag -inbox +lists/help-gnu-emacs -- folder:gnu/l/help-gnu-emacs notmuch tag -inbox +lists/info-gnu-emacs -- folder:gnu/l/info-gnu-emacs notmuch tag -inbox +lists/www-commits -- folder:gnu/l/www-commits notmuch tag -inbox +lists/www-discuss -- folder:gnu/l/www-discuss notmuch tag -inbox +webmasters -- folder:gnu/webmasters notmuch tag -inbox +lists/deepspec -- folder:gnu/l/deepspec notmuch tag -inbox +lists/haskell-cafe -- folder:gnu/l/haskell-cafe notmuch tag -inbox +lists/haskell-art -- folder:gnu/l/haskell-art notmuch tag -inbox +lists/notmuch -- folder:gnu/l/notmuch # #+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 *** gnu.sieve :PROPERTIES: :header-args+: :tangle ~/sieve/gnu.sieve :comments none :END: #+begin_src conf require [ "regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags", "include" ]; if anyof ( address :is "from" "webmasters@gnu.org", address :is "from" "webmasters-comment@gnu.org") { fileinto :create "webmasters"; stop; } include :personal "lists"; #+end_src *** lists.sieve :PROPERTIES: :header-args+: :tangle ~/sieve/lists.sieve :comments none :END: #+begin_src conf require [ "regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags", "include" ]; if anyof ( header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "", header :contains "list-id" "") { if header :regex "list-id" "<([a-z_0-9-]+)[.@]" { set :lower "listname" "${1}"; fileinto :create "l/${listname}"; } } #+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 =