diff options
Diffstat (limited to '.config')
-rw-r--r-- | .config/Makefile | 2 | ||||
-rw-r--r-- | .config/bash/rc.d/10_hist.sh | 2 | ||||
-rw-r--r-- | .config/bash/rc.d/90_emacs.sh | 22 | ||||
-rw-r--r-- | .config/emacs/custom.el | 24 | ||||
-rw-r--r-- | .config/emacs/init.el | 183 | ||||
-rw-r--r-- | .config/emacs/wl.el | 16 | ||||
-rw-r--r-- | .config/git/config | 7 | ||||
-rw-r--r-- | .config/maildirproc/att.rc | 471 | ||||
-rw-r--r-- | .config/maildirproc/purdue.rc | 395 | ||||
-rw-r--r-- | .config/offlineimap/config | 26 | ||||
-rw-r--r-- | .config/offlineimaprc | 51 | ||||
-rw-r--r-- | .config/pacman/makepkg.conf | 2 | ||||
-rw-r--r-- | .config/symlinks | 1 | ||||
l--------- | .config/systemd/user/default.target.wants/mail.target | 1 | ||||
l--------- | .config/systemd/user/mail.target.wants/offlineimap.service | 1 | ||||
l--------- | .config/systemd/user/mail.target.wants/offlineimap.timer | 1 | ||||
-rw-r--r-- | .config/systemd/user/offlineimap.timer.d/length.conf | 2 |
17 files changed, 386 insertions, 821 deletions
diff --git a/.config/Makefile b/.config/Makefile index 5274756..3b7ebb1 100644 --- a/.config/Makefile +++ b/.config/Makefile @@ -21,7 +21,7 @@ clean: .PHONY: all clean ${HOME}/.folders: ${HOME}/Maildir $(MAKEFILE_LIST) - find -L $< -mindepth 2 -maxdepth 2 \( -type f -name "maildirfolder" -o -type d -name new -o -type d -name tmp -o -type d -name cur \) -printf '%P\0' | xargs -r0 dirname -z -- | sort -zu | xargs -0 printf -- '.%s\n' | grep -vP '^\.FOLDERS.Ham.20(?!1[56])' > '$@' + find -L $< -mindepth 2 -maxdepth 2 \( -type f -name "maildirfolder" -o -type d -name new -o -type d -name tmp -o -type d -name cur \) -printf '%P\0' | xargs -r0 dirname -z -- | sort -zu | xargs -0 printf -- '.%s\n' > '$@' ${GIT_DIR}/info/exclude: ${HOME}/.git.info.exclude.in $(shell echo .??*/) ( cat $<; find $^ -type f -name 'CACHEDIR.TAG' -printf '%h\n'|sed 's@^\./@/@' ) > $@ diff --git a/.config/bash/rc.d/10_hist.sh b/.config/bash/rc.d/10_hist.sh index d7c6bfc..6b2c4f1 100644 --- a/.config/bash/rc.d/10_hist.sh +++ b/.config/bash/rc.d/10_hist.sh @@ -2,7 +2,7 @@ # don't overwrite GNU Midnight Commander's setting of `ignorespace'. HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups -HISTFILE=${XDG_CACHE_HOME}/bash/history +HISTFILE=${XDG_DATA_HOME}/bash/history HISTTIMEFORMAT='[%Y-%m-%d %H:%M] ' HISTSIZE=5000 shopt -s histappend # append to the history file, don't overwrite it diff --git a/.config/bash/rc.d/90_emacs.sh b/.config/bash/rc.d/90_emacs.sh index 79d5e61..90e771c 100644 --- a/.config/bash/rc.d/90_emacs.sh +++ b/.config/bash/rc.d/90_emacs.sh @@ -35,17 +35,23 @@ if [[ $TERM == eterm* ]]; then # before the hostname is set, otherwise it will set # (default-directory) to an invalid TRAMP string. # - # Because the hostname is compared to (system-name) to - # check if it is localhost, "$(hostname -f)" may need - # to be used instead of $HOSTNAME, if - # $HOSTNAME/$(hostname) doesn't return a qualified - # domain. - local hostname=$HOSTNAME - [[ $hostname = *.* ]] || hostname="$(hostname -f)" + # The hostname is compared to (system-name) to check + # if it is localhost. In Emacs 25, (system-name) is + # just gethostname(2), and in Bash 4.2, $HOSTNAME is + # also just gethostname(2). + # + # As an aside, Emacs and Bash deal with hostnames > + # 255 bytes differently. They both use 255 bytes for + # the initial call, but Bash won't retry with a bigger + # limit, but Emacs will. I don't care, because + # besides such long hostnames being uncommon, Linux's + # HOST_NAME_MAX on i686 and x86_64 is only 64, so it's + # actually impossible. IDK about other kernels or + # architectures. printf '\eAnSiT%s %s\n' \ u "$USER" \ c "$PWD" \ - h "$hostname" + h "$HOSTNAME" } # Set the shell's X11 display (emacs -> shell) _emacs_set_shell_DISPLAY() { diff --git a/.config/emacs/custom.el b/.config/emacs/custom.el index 8e72fec..04c1bec 100644 --- a/.config/emacs/custom.el +++ b/.config/emacs/custom.el @@ -33,14 +33,27 @@ (quote ("xelatex -interaction nonstopmode -output-directory %o %f" "xelatex -interaction nonstopmode -output-directory %o %f" "xelatex -interaction nonstopmode -output-directory %o %f"))) '(org-src-fontify-natively t) - '(package-selected-packages - (quote - (yaml-mode smart-tabs-mode scss-mode sass-mode page-break-lines nginx-mode mediawiki markdown-mode jabber graphviz-dot-mode gradle-mode go-mode glsl-mode editorconfig dtrt-indent coffee-mode cmake-mode bison-mode))) '(ruby-deep-arglist nil) '(ruby-deep-indent-paren nil) '(safe-local-variable-values (quote - ((Nginx-indent-tabs-mode) + ((Fill-Column . 64) + (eval c-set-offset + (quote arglist-close) + 0) + (eval c-set-offset + (quote arglist-intro) + (quote ++)) + (eval c-set-offset + (quote case-label) + 0) + (eval c-set-offset + (quote statement-case-open) + 0) + (eval c-set-offset + (quote substatement-open) + 0) + (Nginx-indent-tabs-mode) (Nginx-indent-level . 4) (Nginx-indent-level . 8) (c-set-style . "K&R")))) @@ -49,7 +62,8 @@ '(smtpmail-smtp-server "plus.smtp.mail.yahoo.com") '(smtpmail-smtp-service 587) '(tramp-use-ssh-controlmaster-options nil) - '(uniquify-buffer-name-style (quote post-forward-angle-brackets) nil (uniquify))) + '(uniquify-buffer-name-style (quote post-forward-angle-brackets) nil (uniquify)) + '(use-package-verbose (quote debug))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 88cf870..200daad 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -5,9 +5,8 @@ (let ((xdg-cache-home (file-name-as-directory (or (getenv "XDG_CACHE_HOME") "~/.cache"))) (xdg-data-home (file-name-as-directory (or (getenv "XDG_DATA_HOME") "~/.local/share")))) (setq - custom-file (concat user-emacs-directory "custom.el") wl-init-file (concat user-emacs-directory "wl.el") - eshell-directory-name (concat xdg-data-home "emacs/eshell/") ;; actually should be split betweenc config and data + eshell-directory-name (concat xdg-data-home "emacs/eshell/") ;; actually should be split between config and data ido-save-directory-list-file (concat xdg-data-home "emacs/ido.last.el") package-user-dir (concat xdg-cache-home "emacs/elpa") @@ -19,6 +18,9 @@ tramp-persistency-file-name (concat xdg-cache-home "emacs/tramp-cache.el") )) +(setq custom-file (concat user-emacs-directory "custom.el")) +(load custom-file 'noerror) + ;;;; The basics that I can't use Emacs without ;;;;;;;;;;;;;;;;;;;;;;; (show-paren-mode 1) (column-number-mode 1) @@ -38,7 +40,6 @@ point-entered minibuffer-avoid-prompt face minibuffer-prompt )) -(load custom-file 'noerror) ;;;; Early settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -47,112 +48,81 @@ (set-face-attribute 'default nil :height 80) -;;;; Bootstrap el-get ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; This downloads and installs el-get (package management) if isn't -;; installed. - -;; Derived from ELPA installation -;; http://tromey.com/elpa/install.html -(defun eval-url (url) - (let ((buffer (url-retrieve-synchronously url))) - (save-excursion - (set-buffer buffer) - (goto-char (point-min)) - (re-search-forward "^$" nil 'move) - (eval-region (point) (point-max)) - (kill-buffer (current-buffer))))) - -(add-to-list 'load-path (concat el-get-dir "el-get")) -(unless (require 'el-get nil t) - (let ((el-get-install-branch "master")) ;; live life on the edge - (eval-url "https://github.com/dimitri/el-get/raw/master/el-get-install.el"))) +;;;; Package management ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;; Install packages ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; This is kinda funny how it works. -;; -;; package.el/ELPA (The standard package manager in Emacs 24) has -;; terrible programatic management. It's great at installing packages, -;; but only interactively. So, I -;; 1) Disable package.el from getting loading all downloaded packages -;; 2) Use el-get to load a specified list of packages from elpa. -;; -;; This is also nice because I can do event-based programming for what -;; to do once a package is loaded, using :after. - -;; For some reason, el-get adds a bunch of 3rd-party repos to -;; package-archives. I guess I'm ok with that? I don't have to -;; manage them. +;; package.el +(require 'package) +(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) (setq package-enable-at-startup nil) - -;; What packages el-get should get from ELPA (if it gets them at all) -(setq el-get-sources '( - ;; Minor modes - (:name dtrt-indent :type elpa ;; Detect indent style for existing files - :after (dtrt-indent-mode 1)) - (:name page-break-lines :type elpa ;; Display form-feeds pretty - :before (advice-add 'page-break-lines-mode-maybe - :override #'page-break-lines-mode) - :after (global-page-break-lines-mode 1)) - (:name smart-tabs-mode :type elpa ;; Indent with tabs, align with spaces - :after (progn - (smart-tabs-mode 1) - (apply 'smart-tabs-insinuate - (mapcar 'car smart-tabs-insinuate-alist)))) - ;; Major modes - (:name bison-mode :type elpa) - (:name cmake-mode :type elpa) - (:name coffee-mode :type elpa - :after (add-hook 'coffee-mode-hook +(package-initialize) +;; use-package.el +(setq use-package-always-ensure t) +(add-to-list 'load-path (concat user-emacs-directory "use-package")) +(require 'use-package) +(require 'bind-key) + +;; Minor modes +(use-package dtrt-indent ;; Detect indent style for existing files + :config (dtrt-indent-mode 1)) +(use-package page-break-lines ;; Display form-feeds pretty + :init (advice-add 'page-break-lines-mode-maybe + :override #'page-break-lines-mode) + :config (global-page-break-lines-mode 1)) +(use-package smart-tabs-mode ;; Indent with tabs, align with spaces + :config (progn + (smart-tabs-mode 1) + (apply 'smart-tabs-insinuate + (mapcar 'car smart-tabs-insinuate-alist)))) +(use-package editorconfig) +;; Major modes +(use-package bison-mode + :mode (("\\.l\\'" . bison-mode) + ("\\.y\\'" . bison-mode) + ("\\.jison\\'" . jison-mode))) +(use-package coffee-mode + :mode ("\\.coffee\\'" + "\\.iced\\'" + "\\Cakefile\\'" + "\\.cson\\'") + :interpreter "coffee" + :config (add-hook 'coffee-mode-hook '(lambda () (set (make-local-variable 'tab-width) 2) (set (make-local-variable 'indent-tabs-mode) nil) ))) - (:name glsl-mode :type elpa) - (:name go-mode :type elpa) - (:name gradle-mode :type elpa) - (:name graphviz-dot-mode :type elpa) - (:name haml-mode :type elpa) - (:name markdown-mode :type elpa - :after (add-to-list 'auto-mode-alist '("\\.ronn\\'" . markdown-mode))) - (:name mediawiki :type elpa) - (:name nginx-mode :type elpa - :after (put 'nginx-indent-level 'safe-local-variable 'integerp)) - (:name scss-mode :type elpa) - (:name yaml-mode :type elpa) - (:name editorconfig :type elpa) - )) -;; What packages el-get should install, both from above, and its -;; internal list of sources. -(el-get 'sync (append - '(el-get) - ;; Minor modes - '(dtrt-indent - page-break-lines - smart-tabs-mode - editorconfig - ) - ;; Major modes - (if (file-exists-p "~/Maildir") ; wanderlust is huge, only use on emailing boxes - '(apel flim semi wanderlust) - '()) - '( - ;;nxhtml ; nxhtml is invasive, only enable if actively using - bison-mode - cmake-mode - coffee-mode - glsl-mode - go-mode - gradle-mode - graphviz-dot-mode - haml-mode - markdown-mode - mediawiki - nginx-mode - php-mode-improved - scss-mode - yaml-mode - ))) +;;(use-package php-mode-improved +;; :mode (("\\.php[s34]?\\'" . php-mode) +;; ("\\.phtml\\'" . php-mode) +;; ("\\.inc\\'" . php-mode)) +;; :config (add-hook 'php-mode-hook +;; '(lambda () +;; (c-set-offset 'cpp-macro 0) +;; ))) +(use-package cmake-mode :mode ("CMakeLists\\.txt\\'" "\\.cmake\\'")) +(use-package glsl-mode :mode ("\\.vert\\'" "\\.frag\\'" "\\.geom\\'" "\\.glsl\\'")) +(use-package go-mode :mode "\\.go\\'") +(use-package graphviz-dot-mode :mode ("\\.dot\\'" "\\.gv\\'")) +(use-package haml-mode :mode "\\.haml\\'") +(use-package less-css-mode :mode "\\.less\\'") +(use-package markdown-mode :mode ("\\.markdown\\'" "\\.md\\'" "\\.ronn\\'")) +(use-package nginx-mode :mode ("nginx\\.conf\\'" "/nginx/.+\\.conf\\'")) +(use-package php-mode :mode ("\\.php[s345t]?\\'" "/\\.php_cs\\(\\.dist\\)?\\'" "\\.phtml\\'" "/Amkfile\\'" "\\.amk\\'")) +(use-package scss-mode :mode "\\.scss\\'") +(use-package yaml-mode :mode "\\.e?ya?ml\\'") + +;;(use-package nxhtml) ; nxhtml is invasive, only enable if actively using + +(if (file-exists-p "~/Maildir") + ;;'(apel flim semi wanderlust) + (use-package wanderlust + :config (progn + (define-mail-user-agent + 'wl-user-agent + 'wl-user-agent-compose + 'wl-draft-send + 'wl-draft-kill + 'mail-send-hook) + (setq mail-user-agent 'wl-user-agent)))) ;; Misc. crap @@ -325,11 +295,6 @@ sh-script.el is broken." (set (make-local-variable 'tab-width) 4) )) -(add-hook 'php-mode-hook - '(lambda () - (c-set-offset 'cpp-macro 0) - )) - (add-hook 'tex-mode-hook '(lambda () (set (make-local-variable 'tab-always-indent) nil) @@ -343,5 +308,7 @@ sh-script.el is broken." (add-to-list 'auto-mode-alist '("PKGBUILD" . sh-mode)) (add-to-list 'auto-mode-alist '("SRCBUILD" . sh-mode)) +(add-to-list 'auto-mode-alist '("\\.mak\\'" . makefile-gmake-mode)) (add-to-list 'auto-mode-alist '("\\.jad\\'" . java-mode)) + (put 'downcase-region 'disabled nil) diff --git a/.config/emacs/wl.el b/.config/emacs/wl.el index e9e61bd..c27c87e 100644 --- a/.config/emacs/wl.el +++ b/.config/emacs/wl.el @@ -1,24 +1,17 @@ ;; mode:-*-emacs-lisp-*- -(setq user-mail-address "lukeshu@sbcglobal.net") +(setq user-mail-address "lukeshu@lukeshu.com") ;; wanderlust (setq ;; Misc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - wl-local-domain "lukeshu.ath.cx" + wl-local-domain "lan.lukeshu.com" wl-icon-directory "~/.emacs.d/el-get/wanderlust/icons" + wl-message-id-domain user-mail-address ;; Network ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This only deals with sending--I use offlineimap to fetch - wl-draft-send-mail-function 'wl-draft-send-mail-with-smtp - ;; The following settings are Yahoo!'s SMTP servers: - wl-smtp-connection-type (quote ssl) - wl-smtp-authenticate-type "login" - wl-smtp-posting-server "plus.smtp.mail.yahoo.com" - ;wl-smtp-posting-server "outbound.att.net" - wl-smtp-posting-port 465 - wl-smtp-posting-user user-mail-address - wl-message-id-domain user-mail-address + wl-draft-send-mail-function 'wl-draft-send-mail-with-sendmail ;; Folders/File system ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; elmo-maildir-folder-path "~/Maildir" ;; where I store my mail @@ -45,7 +38,6 @@ ;; Writing wl-from (concat user-full-name " <" user-mail-address ">") ;; From: line - ;;wl-organization "Foo Corp" wl-fcc-force-as-read t ;; mark sent messages as read mime-edit-split-message nil ;; don't split long messages diff --git a/.config/git/config b/.config/git/config index 71c68f6..4fe81a5 100644 --- a/.config/git/config +++ b/.config/git/config @@ -1,13 +1,8 @@ [user] name = Luke Shumaker - email = lukeshu@sbcglobal.net + email = lukeshu@lukeshu.com [color] ui = auto -[sendemail] - smtpencryption = ssl - smtpserver = plus.smtp.mail.yahoo.com - smtpuser = lukeshu@sbcglobal.net - smtpserverport = 465 [push] default = matching [alias] diff --git a/.config/maildirproc/att.rc b/.config/maildirproc/att.rc index ecd9c20..67335e7 100644 --- a/.config/maildirproc/att.rc +++ b/.config/maildirproc/att.rc @@ -5,12 +5,9 @@ import os.path import subprocess import datetime import re +# +# Mail attribute utilities -processor.maildir_base = "~/Maildir" -processor.auto_reload_rcfile = True - -# FIXME: this doesn't handle the case where someone replies `To` you -# directly an `Cc`s the list. def mailman_domain(mail, domain): """ Return a string that is the list-name for a mailman domain @@ -38,7 +35,19 @@ def ezmlm_domain(mail, domain): return m.group(1) return None -def is_to_or_from(mail,address): +def majordomo_domain(mail, domain): + """ + Return a string that is the list-name for a majordomo domain + """ + m = mail["List-Id"].matches("^(.*<|)([^<]*)\."+re.escape(domain)) + if m: + return m.group(2) + for hdr in [ 'To', 'Cc', 'From' ]: + m = mail[hdr].matches("((\w|-)*)@"+re.escape(domain)) + if m: + return m.group(1) + +def is_to_or_from(mail, address): """ Return true if [mail] is to or from an address that contains [address]. """ @@ -47,7 +56,7 @@ def is_to_or_from(mail,address): or mail["From"].contains(address) or mail["Reply-To"].contains(address) or mail.target.contains(address)) -def is_to_or_from_re(mail,address): +def is_to_or_from_re(mail, address): """ Return true if [mail] is to or from an address that matches the regex [address]. @@ -55,17 +64,9 @@ def is_to_or_from_re(mail,address): return ( mail["From"].matches(address) or mail.target.matches(address)) -def move_ham(mail,folder): - y = datetime.datetime.now().year - folder = "FOLDERS.Ham."+str(y)+folder - dir = processor.maildir_base+"/"+folder - if not os.path.isfile(dir+"/maildirfolder"): - os.makedirs(dir+"/tmp", 0o777, True) - os.makedirs(dir+"/new", 0o777, True) - os.makedirs(dir+"/cur", 0o777, True) - open(dir+"/maildirfolder", 'a').close() - mail.move(folder) - +# +# bogofilter utilites + def bogofilter_auto(mail): p = subprocess.Popen( ["bogofilter", "-u", "-v", "-I", mail.path], @@ -82,26 +83,26 @@ def bogofilter_ham(mail): subprocess.call(["bogofilter", "-S", "-n", "-I", mail.path]) def bogofilter_spam(mail): subprocess.call(["bogofilter", "-N", "-s", "-I", mail.path]) +# +# The core of my filters -def handle_incoming_ham_training(mail): - bogofilter_ham(mail) - handle_incoming_ham(mail) -def handle_incoming_spam_training(mail): - bogofilter_spam(mail) - mail.move("FOLDERS.Spam") - -def handle_incoming_ham(mail): - my_filters(mail) -def handle_incoming_spam(mail): - mail.move("FOLDERS.Spam") - -def handle_incoming_unknown(mail): - # Filter spam +def move_ham(mail, folder): + y = datetime.datetime.now().year + folder = "FOLDERS.Ham."+str(y)+folder + dir = processor.maildir_base+"/"+folder + if not os.path.isfile(dir+"/maildirfolder"): + os.makedirs(dir+"/tmp", 0o777, True) + os.makedirs(dir+"/new", 0o777, True) + os.makedirs(dir+"/cur", 0o777, True) + open(dir+"/maildirfolder", 'a').close() + mail.move(folder) - # Whitelist - if ( +def my_whitelist(mail): + return ( False + or is_to_or_from(mail, "@opengroup.org") or is_to_or_from(mail, "@purestorage.com") + or is_to_or_from(mail, "@vger.kernel.org") or is_to_or_from(mail, "Bryan@ChankTunUnGi.onmicrosoft.com") or is_to_or_from(mail, "cacnedcomms@gmail.com") or is_to_or_from(mail, "fsf.org") @@ -110,6 +111,8 @@ def handle_incoming_unknown(mail): or is_to_or_from(mail, "parabolagnulinux.org") or mail["From"] == "3174451635@mms.att.net" or mail["From"] == "MAILER-DAEMON@yahoo.com" + or mail["From"].contains("@careereco.com") + or mail["From"].contains("@ciholas.com") or mail["From"].contains("@e.oldnational.com>") or mail["From"].contains("@facebookmail.com>") or mail["From"].contains("@gandi.net") @@ -126,8 +129,10 @@ def handle_incoming_unknown(mail): or mail["From"].contains("@post.oreilly.com>") or mail["From"].contains("@scouting.org>") or mail["From"].contains("@solutionsinplastic.com>") - or mail["From"].contains("@startcom.org>") + or mail["From"].contains("@startcom.org>") or mail["From"].contains("@usfirst.org>") + or mail["From"].contains("@vectren.com") + or mail["From"].contains("@vectrenemail.com") or mail["From"].contains("@wolframalpha.com>") or mail["From"].contains("Promo@email.newegg.com") or mail["From"].contains("info@email2.mysimplemobile.com") @@ -140,52 +145,38 @@ def handle_incoming_unknown(mail): or mail["Subject"].contains("[Maintenance]") or mail["Subject"].contains("[PATCH") or mail["Subject"].contains("[systemd-devel]") - ): - handle_incoming_ham_training(mail) - return - - spam = bogofilter_auto(mail) - if spam == 0: - handle_incoming_spam(mail) - return - elif spam == 1: - handle_incoming_ham(mail) - return - elif spam == 2: - mail.move("FOLDERS.MysteryMeat") - return - else: - mail.move("FOLDERS.BogoFail") - return + ) def my_filters(mail): - if is_to_or_from(mail,"@purestorage.com"): - move_ham(mail, ".purestorage") - return - - # Sort mail from various mailing lists - # https://lists.gnu.org/mailman/options/bug-librejs/lukeshu@sbcglobal.net - # https://lists.nongnu.org/mailman/options/libreboot/lukeshu@sbcglobal.net - # https://mail.gnome.org/mailman/options/networkmanager-list/lukeshu@sbcglobal.net - for pair in [ [ 'gnu.org', 'gnu' ], - [ 'nongnu.org', 'nongnu' ], - [ 'gnome.org', 'gnome' ], + # .software.* (GNU Mailman) + for pair in [ [ 'gnu.org', 'gnu' ], # https://lists.gnu.org/mailman/options/bug-librejs/lukeshu@sbcglobal.net + [ 'nongnu.org', 'nongnu' ], # https://lists.nongnu.org/mailman/options/libreboot/lukeshu@sbcglobal.net + [ 'gnome.org', 'gnome' ], # https://mail.gnome.org/mailman/options/networkmanager-list/lukeshu@sbcglobal.net [ 'archlinux.org', 'archlinux' ], [ 'lists.freedesktop.org', 'freedesktop' ], [ 'lists.fedorahosted.org', 'fedorahosted' ], [ 'lists.arthurdejong.org', 'arthurdejong' ], [ 'lists.stanford.edu', 'stanford' ], + [ 'mailman.stanford.edu', 'stanford' ], [ 'lists.parabola.nu', 'parabola' ], [ 'parabola.nu', 'parabola' ] ]: list = mailman_domain(mail, pair[0]) if list: move_ham(mail, ".software."+pair[1]+"."+list) return + # .software.* (EZMLM) for pair in [ [ 'list.cr.yp.to', 'djb' ] ]: list = ezmlm_domain(mail, pair[0]) if list: move_ham(mail, ".software."+pair[1]+"."+list) return + # .software.* (Majordomo) + for pair in [ [ 'vger.kernel.org', 'kernel' ] ]: + list = majordomo_domain(mail, pair[0]) + if list: + move_ham(mail, ".software."+pair[1]+"."+list) + return + # .software.parabola if ( False or is_to_or_from(mail, "parabolagnulinux.org") @@ -194,53 +185,75 @@ def my_filters(mail): ): move_ham(mail, ".software.parabola") return - - # Sort mail from some social websites - if mail["From"].matches("facebook(|mail)\.com"): - move_ham(mail, ".Social.Facebook") + # .software.POSIX + if is_to_or_from(mail, "austin-group-l@opengroup.org"): + move_ham(mail, ".software.POSIX") return - - if ( - False - or mail["From"].matches("identi\.ca") - or mail["From"].matches("statusnet") - ): - move_ham(mail, ".Social.Identica") + # .software.TravisCI + if mail["From"].contains("builds@travis-ci.org"): + move_ham(mail, ".software.TravisCI") return - + # .software + for address in [ + "@archlinux.org", + "@canonical.org", + "@cnuk.org", + "@core3.amsl.com", + "@defectivebydesign.org", + "@eff.org", + "@fedorahosted.org", + "@foocorp.net", + "@fsf.org", + "@github.com", + "@gitorious.org", + "@gnome.org", + "@gnu.org", + "@ietf.org", + "@kde.org", + "@lists.fedorahosted.org", + "@mozilla.org", + "@nongnu.org", + "@sourceforge.com", + "@thyrsus.com", + ]: + if is_to_or_from(mail, address): + move_ham(mail, ".software") + return + # .servers if ( False or mail["From"].contains("@gandi.net") or mail["From"].contains("@ramhost.us") or mail["From"].contains("@startcom.org") + or mail["From"].contains("@startssl.com") + or mail["From"].contains("@vultr.com") or (mail["From"].contains("@2co.com") and mail["Subject"].contains("RAM Host")) ): - move_ham(mail, ".lukeshu-com") + move_ham(mail, ".servers") + return + # .Social.* + if mail["From"].matches("facebook(|mail)\.com"): + move_ham(mail, ".Social.Facebook") + return + if mail["From"].matches("identi\.ca|statusnet"): + move_ham(mail, ".Social.Identica") return - if mail["From"].matches("twitter\.com"): move_ham(mail, ".Social.Twitter") return - if mail["From"].matches("@xkcd\.com"): move_ham(mail, ".Social.xkcd") return - - if mail["From"].matches("schwab\.com"): - move_ham(mail, ".schwab") - return - - if mail["From"].matches("@ebay\.com"): - move_ham(mail, ".ebay") + if is_to_or_from(mail, "linkedin.com"): + move_ham(mail, ".Social.LinkedIn") return - - # Sort mail related to Troop 276 + # .BSA if ( False or mail["List-Id"].contains("troopmailinglist.troop276.net") - or is_to_or_from(mail, "t276_announcements@att.net") or mail["Subject"].matches("troop") or mail["Subject"].matches("merit\s*badge") + or is_to_or_from(mail, "t276_announcements@att.net") or is_to_or_from(mail, "Bryan@ChankTunUnGi.onmicrosoft.com") or is_to_or_from(mail, "basu@maharjan.org") or is_to_or_from(mail, "cacnedcomms@gmail.com") @@ -259,10 +272,105 @@ def my_filters(mail): or is_to_or_from(mail, "trdindy@comcast.net") or is_to_or_from(mail, "wjensen111@aol.com") ): - move_ham(mail, ".BoyScouts") + move_ham(mail, ".BSA") + return + # .FRC + for address in [ "@ni.com", "@usfirst.org", "@firstinspires.org" ]: + if is_to_or_from(mail, address): + move_ham(mail, ".FRC") + return + # .FRC.829 + if ( + False + or mail["Subject"].matches("\b829\b") + or is_to_or_from(mail, "wcxctrack829@aim.com") # Pat + or is_to_or_from(mail, "william.walk@gmail.com") + ): + move_ham(mail, ".FRC.829") + return + # .FRC.1024 + if ( + False + or mail["Subject"].matches("\b1024\b") + or mail["Subject"].matches("kil-?a-?bytes") + or is_to_or_from(mail, "BBonahoom@stanleyworks.com") + or is_to_or_from(mail, "bryanbonahoom@gmail.com") + or is_to_or_from(mail, "allison.m.babcock@gmail.com") + or is_to_or_from(mail, "cdewalt3@yahoo.com") + or is_to_or_from(mail, "dave.nelson@ecolab.com") + or is_to_or_from(mail, "dickaustin190@yahoo.com") + or is_to_or_from(mail, "djnels1@comcast.net") # Dave and Julie Nelson + or is_to_or_from(mail, "gamefreak207@gmail.com") # Brett Leedy + or is_to_or_from(mail, "jason.zielke@gmail.com") + or is_to_or_from(mail, "jeffreysmith@msdlt.k12.in.us") + or is_to_or_from(mail, "sarahlittell@comcast.net") + or is_to_or_from(mail, "silioso@gmail.com") + or is_to_or_from(mail, "skiplittell@comcast.net") + or is_to_or_from(mail, "tswilson4801@att.net") + ): + move_ham(mail, ".FRC.1024") + return + # .FRC.4272 + if ( + False + or mail["Subject"].matches("\b4272\b") + or mail["Subject"].contains("[ME297]") + or is_to_or_from(mail, "firstteam4272@gmail.com") + or is_to_or_from(mail, "@tscstudents.net") + or is_to_or_from(mail, "abenyeho@purdue.edu") + or is_to_or_from(mail, "Henry65@purdue.edu") + or is_to_or_from(mail, "chang282@purdue.edu") + ): + move_ham(mail, ".FRC.4272") + return + # .Purdue.* + if ( + False + or mail["Subject"].contains("[PASE]") + or is_to_or_from(mail, "Purduealumni@purdue.edu") + or is_to_or_from(mail, "pase@purdue.edu") + ): + move_ham(mail, ".Purdue.PASE") + return + if mail["Subject"].contains("[PLUG]"): + move_ham(mail, ".Purdue.PLUG") + return + if is_to_or_from(mail, "@cerias.purdue.edu"): + move_ham(mail, ".Purdue.CERIAS") + return + if ( + False + or is_to_or_from(mail, "purduehackers@gmail.com") + or is_to_or_from(mail, "royfu@purdue.edu") + or is_to_or_from(mail, "usmannkhan@purdue.edu") + ): + move_ham(mail, ".Purdue.Hackers") + return + if ( + False + or mail["Subject"].contains("[CS Opportunity Update]") + or mail["Subject"].contains("[CS Majors]") + ): + move_ham(mail, ".Purdue.CS") + return + if ( + False + or is_to_or_from(mail, "askcco@purdue.edu") + or is_to_or_from_re(mail, "pmx-auto-approve\+.*@purdue\.edu") + or is_to_or_from(mail, "evertrue@purdue.edu") + or is_to_or_from(mail, "college.response@purdue.edu") + or is_to_or_from(mail, "purduepresident@purdue.edu") + or is_to_or_from(mail, "@prf.org") + ): + move_ham(mail, ".Purdue.misc") + return + # .misc.* + if mail["From"].matches("schwab\.com"): + move_ham(mail, ".misc.schwab") + return + if mail["From"].matches("@ebay\.com"): + move_ham(mail, ".misc.ebay") return - - # Sort mail from misc people if ( False or is_to_or_from(mail, "margieshu@sbcglobal.net") @@ -270,15 +378,6 @@ def my_filters(mail): ): move_ham(mail, ".misc.Mom") return - - for address in [ - "nintendo.com", - "nintendo-news.com", - ]: - if mail["From"].contains(address): - move_ham(mail, ".misc.Nintendo") - return - for address in [ "@lpi.org", "@pearson.com", @@ -288,96 +387,6 @@ def my_filters(mail): if mail["From"].contains(address): move_ham(mail, ".misc.CompTIA") return - - # Sort mail from FRC people - # Generic - for address in [ "@ni.com", "@usfirst.org" ]: - if is_to_or_from(mail,address): - move_ham(mail, ".FRC") - return - # FRC 829 - for address in [ - "wcxctrack829@aim.com", # Pat - "william.walk@gmail.com", - ]: - if is_to_or_from(mail,address): - move_ham(mail, ".FRC.829") - return - if mail["Subject"].matches("\b829\b"): - move_ham(mail, ".FRC.829") - return - # FRC 1024 - for address in [ - "BBonahoom@stanleyworks.com", - "bryanbonahoom@gmail.com", - "allison.m.babcock@gmail.com", - "cdewalt3@yahoo.com", - "dave.nelson@ecolab.com", - "dickaustin190@yahoo.com", - "djnels1@comcast.net", # Dave and Julie Nelson - "gamefreak207@gmail.com", # Brett Leedy - "jason.zielke@gmail.com", - "jeffreysmith@msdlt.k12.in.us", - "sarahlittell@comcast.net", - "silioso@gmail.com", - "skiplittell@comcast.net", - "tswilson4801@att.net", - ]: - if is_to_or_from(mail,address): - move_ham(mail, ".FRC.1024") - return - for subject_re in [ "\b1024\b", "kil-?a-?bytes" ]: - if mail["Subject"].matches(subject_re): - move_ham(mail, ".FRC.1024") - return - # FRC 4272 - if mail["Subject"].matches("\b4272\b"): - move_ham(mail, ".FRC.4272") - return - - # Catch BS things because of CS classes before the general - # software filters - if mail["Subject"].contains("[Quizroom]"): - mail.delete() - return - - # Sort mail from software people - for address in [ - "@archlinux.org", - "@canonical.org", - "@cnuk.org", - "@core3.amsl.com", - "@defectivebydesign.org", - "@eff.org", - "@fedorahosted.org", - "@foocorp.net", - "@fsf.org", - "@github.com", - "@gitorious.org", - "@gnome.org", - "@gnu.org", - "@ietf.org", - "@kde.org", - "@lists.fedorahosted.org", - "@mozilla.org", - "@nongnu.org", - "@sourceforge.com", - "@thyrsus.com", - ]: - if is_to_or_from(mail,address): - move_ham(mail, ".software") - return - - # Sort mail from the school newspaper - if ( - False - or is_to_or_from(mail, "@lnnorthstar.org") - or is_to_or_from(mail, "lnnorthstar.org@tigertech.net") - ): - move_ham(mail, ".HighSchool.Newspaper") - return - - # Sort misc newsletters if ( False or mail["From"].contains("newsletter") @@ -404,49 +413,10 @@ def my_filters(mail): or mail["From"].contains("sales@solutionsinplastic.com") or mail["From"].contains("social@goodwillindy.org") or mail["From"].contains("support@support.digitalocean.com") + or mail["From"].contains("@pardonsnowden.org") ): move_ham(mail, ".misc.Newsletters") return - - if ( - False - or mail["From"].contains("@msdlt.k12.in.us") - or mail["From"].contains("ltschoolfoundation@gmail.com") - or mail["From"].contains("naviance.com") - or is_to_or_from(mail, "ibwhite@comcast.net") - or mail["Subject"].contains("IOA") - or mail["From"].contains("nths.org") - or mail["Subject"].contains("NTHS") - or mail["Subject"].contains("National Technical Honor Society") - or mail["Subject"].contains("NHS") - or mail["Subject"].contains("National Honor Society") - ): - move_ham(mail, ".HighSchool") - return - - # from college stuff - if ( - False - or mail["Subject"].contains("NYLF") # National Youth Leadership Conference - or mail["Subject"].contains("NSHSS") - ): - move_ham(mail, ".College.Societies") - return - if ( - False - or mail["From"].contains("admissions@") - or mail["Subject"].contains("college") - # now we get to the BS - or mail["From"].contains("@dreamitdoitindiana.com") - or mail["From"].contains("@indianatechinfo.org") - ): - move_ham(mail, ".College") - return - - if mail["From"].contains("@projectwonderful.com"): - move_ham(mail, ".misc.ProjectWonderful") - return - if ( False or mail["From"].matches("@localhost") @@ -454,7 +424,7 @@ def my_filters(mail): or mail["From"].matches("@[^,>]*\.lan") or mail["To"].matches("luke@") ): - move_ham(mail, ".LocalSystems") + move_ham(mail, ".misc.LocalSystems") return if ( False @@ -466,10 +436,47 @@ def my_filters(mail): return move_ham(mail, "") +# +# call the above +def handle_incoming_ham_training(mail): + bogofilter_ham(mail) + handle_incoming_ham(mail) +def handle_incoming_spam_training(mail): + bogofilter_spam(mail) + mail.move("FOLDERS.Spam") + +def handle_incoming_ham(mail): + my_filters(mail) +def handle_incoming_spam(mail): + mail.move("FOLDERS.Spam") + +def handle_incoming_unknown(mail): + # Whitelist + if my_whitelist(mail): + handle_incoming_ham_training(mail) + return + + spam = bogofilter_auto(mail) + if spam == 0: + handle_incoming_spam(mail) + return + elif spam == 1: + handle_incoming_ham(mail) + return + elif spam == 2: + mail.move("FOLDERS.MysteryMeat") + return + else: + mail.move("FOLDERS.BogoFail") + return + +# hook the above functions into the maildirproc processor +processor.maildir_base = "~/Maildir" +processor.auto_reload_rcfile = True handle_mapping = { "Inbox": handle_incoming_unknown, - "Bulk Mail": handle_incoming_unknown, + "Bulk Mail": handle_incoming_unknown, # fucking Yahoo! "FOLDERS.Spam.training": handle_incoming_spam_training, "FOLDERS.Ham.training": handle_incoming_ham_training, } diff --git a/.config/maildirproc/purdue.rc b/.config/maildirproc/purdue.rc deleted file mode 100644 index 11b0d46..0000000 --- a/.config/maildirproc/purdue.rc +++ /dev/null @@ -1,395 +0,0 @@ -# -*- mode: python; indent-tabs-mode: t -*- - -import os -import subprocess - -processor.maildir_base = "~/Maildir.purdue" -processor.auto_reload_rcfile = True - -def is_to_or_from(mail,address): - """ - Return true if [mail] is to or from an address that contains [address]. - """ - return ( - mail["From"].contains(address) - or mail.target.contains(address)) -def is_to_or_from_re(mail,address): - """ - Return true if [mail] is to or from an address that matches the - regex [address]. - """ - return ( - mail["From"].matches(address) - or mail.target.matches(address)) - -def piazza_topic(mail, topic): - return ( - False - or is_to_or_from(mail, topic+" on Piazza") - or mail["Subject"].contains(topic+" on Piazza") - or (is_to_or_from(mail, "@piazza.com>") and mail["Subject"].contains(" in "+topic+": ")) - ) - -def my_filters(mail): - # Generic stuff ######################################################## - - if is_to_or_from(mail,"@purestorage.com"): - mail.move("INBOX.purestorage") - return - - if ( - False - or mail["Subject"].contains("[PASE]") - or is_to_or_from(mail,"Purduealumni@purdue.edu") - or is_to_or_from(mail,"pase@purdue.edu") - ): - mail.move("INBOX.crap.PASE") - return - - if mail["Subject"].contains("[PLUG]"): - mail.move("INBOX.crap.PLUG") - return - - if mail["From"].matches(".*bursar.*@purdue\.edu"): - mail.move("INBOX.tuition") - return - - if mail["From"].contains("mailhub-admin@purdue.edu"): - mail.move("INBOX.crap.mailhub-admin") - return - - if mail["From"].matches("pmx-.*@purdue.edu"): - mail.move("INBOX.crap.spam") - return - - if is_to_or_from(mail,"linkedin.com"): - mail.move("INBOX.crap.LinkedIn") - return - - if is_to_or_from(mail,"follet.com"): - mail.move("INBOX.Follet") - return - - if ( - False - or is_to_or_from(mail,"@edrtrust.com") - or is_to_or_from(mail,"@propertysolutions.com") - or is_to_or_from(mail,"collegestationapartments@gmail.com") - or is_to_or_from_re(mail,"collegestationca\..*@gmail.com") - ): - mail.move("INBOX.housing.CollegeStation") - return - if ( - False - or is_to_or_from(mail,"@hunterlp.com") - or is_to_or_from(mail, "@duke-energy.com") - or is_to_or_from(mail, "@alerts.comcast.net") - or is_to_or_from(mail, "rentpayment.com") - or is_to_or_from(mail, "@vectren.com") - or is_to_or_from(mail, "@vectrenemail.com") - or is_to_or_from(mail, "@apartments247.com") - ): - mail.move("INBOX.housing.BeauJardin") - return - - if mail["From"].matches("facebook(|mail)\.com"): - mail.move("INBOX.crap.Facebook") - return - - if is_to_or_from(mail,"@cerias.purdue.edu"): - mail.move("INBOX.crap.CERIAS") - return - - if ( - False - or is_to_or_from(mail,"royfu@purdue.edu") - or is_to_or_from(mail,"usmannkhan@purdue.edu") - ): - mail.move("INBOX.crap.Hackers") - return - - if ( - False - or is_to_or_from(mail,"@cable.comcast.com") - or is_to_or_from(mail,"@apexsystemsinc.com") - ): - mail.move("INBOX.work.2013.Comcast") - return - - if ( - False - or is_to_or_from(mail,"@qualcomm.com") - or is_to_or_from(mail,"@Cartus.com") - or is_to_or_from(mail,"@quicinc.com") - ): - mail.move("INBOX.work.2015.qualcomm") - return - - if ( - False - or mail["Subject"].contains("[CS Opportunity Update]") - or mail["Subject"].contains("[CS Majors]") - ): - mail.move("INBOX.crap.CS") - return - if (mail["From"].contains("shumakl@cs.purdue.edu") and mail["Subject"].matches("^cron:")): - mail.move("INBOX.crap.cron") - return - - if is_to_or_from(mail,"austin-group-l@opengroup.org"): - mail.move("INBOX.POSIX") - return - - if mail["From"].contains("builds@travis-ci.org"): - mail.move("INBOX.crap.TravisCI") - return - - # # Fall 2012 ############################################################ - - # # SCI210 (Teaming principles) - # if mail["Subject"].contains("Fall-2012-SCI-21000-001:"): - # mail.move("INBOX.classes.2012-2.SCI210") - # # CS180 (Java) - # if mail["Subject"].contains("fall-2012-cs-18000"): - # mail.move("INBOX.classes.2012-2.CS180") - # return - # if piazza_topic(mail, "CS 18000"): - # mail.move("INBOX.classes.2012-2.CS180.Piazza") - # return - # # SOC100 - # if mail["Subject"].contains("Fall-2012-SOC-10000"): - # mail.move("INBOX.classes.2012-2.SOC100") - # return - - # # Spring 2013 ########################################################## - - # # CS240 (C) - # if mail["Subject"].contains("[CS240] Submission result for"): - # mail.move("INBOX.classes.2013-1.CS240.autograder") - # return - # if mail["Subject"].contains("[CS240]") or mail["Subject"].contains("Spring-2013-CS-24000"): - # mail.move("INBOX.classes.2013-1.CS240") - # return - # if piazza_topic(mail, "CS 240"): - # mail.move("INBOX.classes.2013-1.CS240.Piazza") - # return - # # PHYS220 - # if mail["Subject"].matches(".*(PHYS|CHIP)\s*220.*") or is_to_or_from(mail,"srdas@purdue.edu"): - # mail.move("INBOX.classes.2013-1.PHYS220") - # return - # # SOC220 (Social Problems) - # if mail["Subject"].contains("Spring-2013-SOC-22000"): - # mail.move("INBOX.classes.2013-1.SOC220") - # return - - # # Fall 2013 ############################################################ - - # # CS250 (Computer Architecture) - # if mail["Subject"].contains("Fall-2013-CS-25000"): - # mail.move("INBOX.classes.2013-2.CS250") - # return - # if piazza_topic(mail, "CS 250") or piazza_topic(mail, "CS 250-FALL2013"): - # mail.move("INBOX.classes.2013-2.CS250.Piazza") - # return - # # CS251 (Intro Algo) - # if mail["Subject"].contains("Fall-2013-CS-25100"): - # mail.move("INBOX.classes.2013-2.CS251") - # return - # if piazza_topic(mail, "CS 251"): - # mail.move("INBOX.classes.2013-2.CS251.Piazza") - # return - # # SPAN101 - # if mail["Subject"].contains("Fall-2013-SPAN-10100"): - # mail.move("INBOX.classes.2013-2.SPAN101") - # return - # # MA261 (Calc III) - # if mail["Subject"].contains("Fall-2013-MA-26100"): - # mail.move("INBOX.classes.2013-2.MA261") - # return - # # MA265 (Linear Algebra) - # if mail["Subject"].contains("Fall-2013-MA-26500"): - # mail.move("INBOX.classes.2013-2.MA265") - # return - - # # Spring 2014 ########################################################## - - # # COM217 - # if mail["Subject"].contains("Spring-2014-COM-21700-004"): - # mail.move("INBOX.classes.2014-1.COM217") - # return - # if mail["From"].contains("mixable") and mail["Subject"].matches("^COM 21700"): - # mail.move("INBOX.classes.2014-1.COM217.Mixable") - # return - # # CS252 (Systems Programming) - # if piazza_topic(mail, "CS 25200"): - # mail.move("INBOX.classes.2014-1.CS252.Piazza") - # return - # # CS307 (Software Engineering) - # if is_to_or_from(mail, "dunsmore@purdue.edu") or mail["Subject"].contains("Spring-2014-CS-30700-LE1"): - # mail.move("INBOX.classes.2014-1.CS307") - # return - # # SPAN102 - # if mail["Subject"].contains("spring-2014-span-102"): - # mail.move("INBOX.classes.2014-1.SPAN102") - # return - # # STAT350 - # if is_to_or_from(mail, "ssellke@purdue.edu"): - # mail.move("INBOX.classes.2014-1.STAT350") - # return - # if piazza_topic(mail, "STAT 35000 (SELLKE)"): - # mail.move("INBOX.classes.2014-1.STAT350.Piazza") - # return - - # # Fall 2014 ############################################################ - - # # CS334 (Graphics) - # if (is_to_or_from(mail, "lin553@purdue.edu") or mail["Subject"].contains("Fall-2014-CS-33400")): - # mail.move("INBOX.classes.2014-2.CS334") - # return - # # CS354 (OS) - # if piazza_topic(mail, "CS 354"): - # mail.move("INBOX.classes.2014-2.CS354.Piazza") - # return - # # CS381 (Algo) - # if piazza_topic(mail, "CS 381"): - # mail.move("INBOX.classes.2014-2.CS381.Piazza") - # return - # # CS456 (Programming languages) - # if piazza_topic(mail, "CS 456"): - # mail.move("INBOX.classes.2014-2.CS456.Piazza") - # return - # # MA416 - # if mail["Subject"].contains("Fall-2014-MA-41600"): - # mail.move("INBOX.classes.2014-2.MA416") - # return - # # PHYS221 - # if (False - # or is_to_or_from(mail, "cui@purdue.edu") - # or is_to_or_from(mail, "shina@purdue.edu") - # or is_to_or_from(mail, "ajith@purdue.edu") - # ): - # mail.move("INBOX.classes.2014-2.PHYS221") - # return - - # # Spring 2015 ######################################################### - - # # CS352 (Compilers) - # if is_to_or_from(mail, "wjg@cs.purdue.edu"): - # mail.move("INBOX.classes.2015-1.CS352") - # return - # if piazza_topic(mail, "CS 352"): - # mail.move("INBOX.classes.2015-1.CS352.Piazza") - # return - # # CS408 (Software testing) - # if (False - # or mail["Subject"].contains("spring-2015-cs-40800") - # or is_to_or_from(mail, "li1471@purdue.edu") - # or is_to_or_from(mail, "kirby@purdue.edu") - # or is_to_or_from(mail, "webb39@purdue.edu") - # or is_to_or_from(mail, "Jkou@purdue.edu") - # or is_to_or_from(mail, "nstodda@purdue.edu") - # or is_to_or_from(mail, "aryker@purdue.edu") # TA - # ): - # mail.move("INBOX.classes.2015-1.CS408") - # return - # # CS448 (Databases) - # if piazza_topic(mail, "CS 44800"): - # mail.move("INBOX.classes.2015-1.CS448.Piazza") - # return - # if mail["Subject"].matches("CS *448"): - # mail.move("INBOX.classes.2015-1.CS448") - # return - # # ME297 (FRC) - # if (False - # or mail["Subject"].contains("[ME297]") - # or is_to_or_from(mail, "heller5@purdue.edu") - # ): - # mail.move("INBOX.classes.2015-1.ME297") - # return - # # SOC324 (Criminology) - # if mail["Subject"].contains("spring-2015-soc-32400"): - # mail.move("INBOX.classes.2015-1.SOC324") - # return - - # # Fall 2015 ############################################################ - - # # CHM 490 (History & Philosophy of Science) - # if is_to_or_from(mail, "gmbodner@purdue.edu"): - # mail.move("INBOX.classes.2015-2.CHM490") - # return - # # CS 334 (Graphics) - # if ( - # False - # or mail["Subject"].contains("fall-2015-cs-33400-le1") - # or is_to_or_from(mail, "aliaga@purdue.edu") - # or is_to_or_from(mail, "abejara@purdue.edu") - # ): - # mail.move("INBOX.classes.2015-2.CS334") - # return - # if piazza_topic(mail, "CS 334"): - # mail.move("INBOX.classes.2015-2.CS334.Piazza") - # return - # # CS 490 (Senior Project) - # if is_to_or_from(mail, "anesen@purdue.edu"): - # mail.move("INBOX.classes.2015-2.CS490") - # return - # if piazza_topic(mail, "CS 49000"): - # mail.move("INBOX.classes.2015-2.CS490.Piazza") - # return - # # MA 416 (Probability) - # if mail["Subject"].contains("fall-2015-ma-41600"): - # mail.move("INBOX.classes.2015-2.MA416") - # return - # if piazza_topic(mail, "SELLKE 416 "): - # mail.move("INBOX.classes.2015-2.MA416.Piazza") - # return - - # # FRC 4272 - # if mail["Subject"].contains("[ME297]"): - # mail.move("INBOX.classes.2015-2.FRC4272") - # return - - # Spring 2016 ########################################################## - - # # CS 422 (Networking) - # if ( - # False - # or mail["Subject"].contains("spring-2016-cs-42200") - # or is_to_or_from(mail, "rkarandi@cs.purdue.edu") - # ): - # mail.move("INBOX.classes.2016-1.CS422") - # return - # # CS 456 (Programming Languages) - # if piazza_topic(mail, "CS 456"): - # mail.move("INBOX.classes.2016-1.CS456.Piazza") - # return - # # VFS 491 (Mafia in the Movies) - # if ( - # False - # or mail["Subject"].contains("spring-2016-fvs-49100") - # or is_to_or_from(mail, "lawton@purdue.edu") - # ): - # mail.move("INBOX.classes.2016-1.FVS491") - # return - # # FRC 4272 - # if ( - # False - # or mail["Subject"].contains("[ME297]") - # or is_to_or_from(mail, "firstteam4272@gmail.com") - # or is_to_or_from(mail, "@tscstudents.net") - # or is_to_or_from(mail, "abenyeho@purdue.edu") - # or is_to_or_from(mail, "Henry65@purdue.edu") - # or is_to_or_from(mail, "chang282@purdue.edu") - # ): - # mail.move("INBOX.classes.2016-1.FRC4272") - # return - - # Everything else ##################################################### - mail.move("INBOX.ham"); - -handle_mapping = { - "INBOX": my_filters, - } -processor.maildirs = handle_mapping.keys() -for mail in processor: - handle_mapping[mail.maildir](mail) diff --git a/.config/offlineimap/config b/.config/offlineimap/config new file mode 100644 index 0000000..2fc6ecc --- /dev/null +++ b/.config/offlineimap/config @@ -0,0 +1,26 @@ +# -*- Mode: Conf -*- +[general] +accounts = ATT +metadata = ~/.local/share/offlineimap + +## AT&T ############################################################### + +[Account ATT] +localrepository = Local-Main +remoterepository = Remote-SBCGlobal + +[Repository Local-Main] +type = Maildir +localfolders = ~/Maildir +sep = . +folderfilter = lambda folder: folder in [ 'Inbox', 'Bulk Mail' ] + +[Repository Remote-SBCGlobal] +type = IMAP +ssl = yes +sslcacertfile = /etc/ssl/certs/ca-certificates.crt +auth_mechanisms = PLAIN +remotehost = imap.mail.yahoo.com +remoteuser = lukeshu@sbcglobal.net +folderfilter = lambda folder: folder in [ 'Inbox', 'Bulk Mail' ] +idlefolders = [ 'Inbox', 'Bulk Mail' ] diff --git a/.config/offlineimaprc b/.config/offlineimaprc deleted file mode 100644 index c1390c5..0000000 --- a/.config/offlineimaprc +++ /dev/null @@ -1,51 +0,0 @@ -# -*- Mode: Conf -*- -[general] -accounts = ATT,Purdue - -## AT&T ############################################################### - -[Account ATT] -localrepository = Local-Main -remoterepository = Remote-SBCGlobal - -[Repository Local-Main] -type = Maildir -localfolders = ~/Maildir -sep = . -folderfilter = lambda folder: folder in [ 'Inbox', 'Bulk Mail' ] - -[Repository Remote-SBCGlobal] -type = IMAP -ssl = yes -sslcacertfile = /etc/ssl/certs/ca-certificates.crt -remotehost = imap.mail.yahoo.com -remoteuser = lukeshu@sbcglobal.net -folderfilter = lambda folder: folder in [ 'Inbox', 'Bulk Mail' ] - -## Purdue ############################################################ - -[Account Purdue] -localrepository = Local-Purdue -remoterepository = Remote-PurdueMS - -[Repository Local-Purdue] -type = Maildir -localfolders = ~/Maildir.purdue -sep = . -folderfilter = lambda foldername: re.search('INBOX', foldername) - -[Repository Remote-PurdueMyMail] -type = IMAP -ssl = yes -cert_fingerprint = 2189e7d568d93352fcdccaa24137856191703c4a -remotehost = mymail.purdue.edu -remoteuser = shumakl -folderfilter = lambda foldername: re.search('INBOX', foldername) - -[Repository Remote-PurdueMS] -type = IMAP -ssl = yes -remotehost = outlook.office365.com -remoteuser = shumakl@purdue.edu -folderfilter = lambda foldername: re.search('INBOX', foldername) -sslcacertfile = /etc/ssl/certs/ca-certificates.crt diff --git a/.config/pacman/makepkg.conf b/.config/pacman/makepkg.conf index dc3c5ba..2e627b8 100644 --- a/.config/pacman/makepkg.conf +++ b/.config/pacman/makepkg.conf @@ -7,7 +7,7 @@ LOGDEST="${LIBREHOME:-$HOME}/packages/logdest" PACKAGER="Luke Shumaker <lukeshu@sbcglobal.net>" -MAKEFLAGS="-j3" +MAKEFLAGS="-j$(($(nproc)+1))" if type ccache &>/dev/null; then f=false diff --git a/.config/symlinks b/.config/symlinks index 8d92ec8..550f444 100644 --- a/.config/symlinks +++ b/.config/symlinks @@ -24,7 +24,6 @@ .config/selected_editor .selected_editor .config/X11/login .vnc/xstartup -.config/offlineimaprc .offlineimaprc .cache/offlineimap .offlineimap # Directories diff --git a/.config/systemd/user/default.target.wants/mail.target b/.config/systemd/user/default.target.wants/mail.target new file mode 120000 index 0000000..40ca36d --- /dev/null +++ b/.config/systemd/user/default.target.wants/mail.target @@ -0,0 +1 @@ +/usr/lib/systemd/user/mail.target
\ No newline at end of file diff --git a/.config/systemd/user/mail.target.wants/offlineimap.service b/.config/systemd/user/mail.target.wants/offlineimap.service new file mode 120000 index 0000000..aacc641 --- /dev/null +++ b/.config/systemd/user/mail.target.wants/offlineimap.service @@ -0,0 +1 @@ +/usr/lib/systemd/user/offlineimap.service
\ No newline at end of file diff --git a/.config/systemd/user/mail.target.wants/offlineimap.timer b/.config/systemd/user/mail.target.wants/offlineimap.timer new file mode 120000 index 0000000..0644e30 --- /dev/null +++ b/.config/systemd/user/mail.target.wants/offlineimap.timer @@ -0,0 +1 @@ +/usr/lib/systemd/user/offlineimap.timer
\ No newline at end of file diff --git a/.config/systemd/user/offlineimap.timer.d/length.conf b/.config/systemd/user/offlineimap.timer.d/length.conf new file mode 100644 index 0000000..c010b38 --- /dev/null +++ b/.config/systemd/user/offlineimap.timer.d/length.conf @@ -0,0 +1,2 @@ +[Timer] +OnUnitInactiveSec=5m |