diff options
author | Luke Shumaker <shumakl@purdue.edu> | 2015-02-06 15:17:51 -0500 |
---|---|---|
committer | Luke Shumaker <shumakl@purdue.edu> | 2015-02-06 15:17:51 -0500 |
commit | dab097d5000c4697761b6985cb3512f7bce0147f (patch) | |
tree | 7b81b7826a1e23822955560f0f73dc09cda6c8e8 | |
parent | f50b49ef26f5c692bda1f3f13cd38f9f4f395300 (diff) | |
parent | a6f973687fb4a1a4558f74f7da595b6902a5dce0 (diff) |
Merge remote-tracking branch 'origin/master' into purdue-cs/master
Conflicts:
.config/X11/clientrc
.config/bash/rc.d/emacs.sh
.config/cron/make-config
.config/emacs/custom.el
.config/emacs/init.el
.config/git/config
.config/login.sh
.config/selected_editor
.local/bin/config-path
81 files changed, 939 insertions, 613 deletions
diff --git a/.config/.gitignore b/.config/.gitignore index b5b3b3c..829cfee 100644 --- a/.config/.gitignore +++ b/.config/.gitignore @@ -2,18 +2,20 @@ # Ignore things I don't care enough about to track /Trolltech.conf -/vlc -/purple +/ImageMagick/ +/menus/ +/purple/ +/vlc/ -# some 3d graphics toolkit -/Kitware # KDE color picker -/colors +/colors/ # binary, not helpful to track /dconf/user +/icedtea-web/security/*certs # Ignore these files that if I tracked them, would be a separate repo -/libreoffice -/transmission -/gimp-* -/netbeans +/deluge/ +/gimp-*/ +/libreoffice/ +/netbeans/ +/transmission/ diff --git a/.config/Makefile b/.config/Makefile index 829b820..909486d 100644 --- a/.config/Makefile +++ b/.config/Makefile @@ -2,10 +2,10 @@ SHELL = /bin/bash -GITDIR = ${HOME}/.git +GIT_DIR = ${HOME}/.git targets = \ - ${GITDIR}/info/exclude \ + ${GIT_DIR}/info/exclude \ ${HOME}/.folders \ ${XDG_CACHE_HOME}/config-symlinks/cookie \ ${XDG_CACHE_HOME}/cron/cookie @@ -14,9 +14,9 @@ all: $(targets) clean: rm -f $(targets) -${HOME}/.folders: ${HOME}/Maildir - ( echo '..'; find $< -maxdepth 2 -type f -name "maildirfolder" -printf '%h\n'|sed -r 's@.*/(.*\.)(.*)@.\1\2@' )|sort>'$@' -${GITDIR}/info/exclude: ${HOME}/.git.info.exclude.in $(shell echo .??*/) +${HOME}/.folders: ${HOME}/Maildir $(MAKEFILE_LIST) + find $< -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 -0 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@^\./@/@' ) > $@ ${XDG_CACHE_HOME}/cron/cookie: ${XDG_CONFIG_HOME}/cron @@ -35,6 +35,7 @@ ${HOME}/Maildir/%: | ${HOME}/Maildir mkdir -p '$@'/{cur,new,tmp} touch '$@'/maildirfolder +.DELETE_ON_ERROR: .PHONY: FORCE PHONY FORCE: ; PHONY: ; diff --git a/.config/X11/clientrc b/.config/X11/clientrc index c139519..4478db0 100644..100755 --- a/.config/X11/clientrc +++ b/.config/X11/clientrc @@ -1,9 +1,7 @@ #!/bin/sh -# -# ~/.xinitrc -# -# Executed by startx (run your window manager from here) +# Load system xinit modules (disabled) +# Remove "false &&" to enable if false && [ -d /etc/X11/xinit/xinitrc.d ]; then echo ' ==> Running scripts in Entering xinitrc.d/*' for f in /etc/X11/xinit/xinitrc.d/*; do @@ -20,7 +18,10 @@ if [ -f "$usermodmap" ]; then fi exec gnome-session -# exec startkde -# exec startxfce4 -# ...or the Window Manager of your choice -#exec wmii + +trap "rm -f $(printf '%q' "${XDG_RUNTIME_DIR}/x11-wm@${DISPLAY}")" EXIT +mkfifo "${XDG_RUNTIME_DIR}/x11-wm@${DISPLAY}" + +cat "${XDG_RUNTIME_DIR}/x11-wm@${DISPLAY}" & +systemctl --user start "wm@${DISPLAY}.target" & +wait diff --git a/.config/X11/defaults b/.config/X11/defaults index 3c958ac..b9a0582 100644 --- a/.config/X11/defaults +++ b/.config/X11/defaults @@ -6,6 +6,8 @@ ! Tango-dark URxvt.background: #2E3436 URxvt.foreground: #EEEEEC +URxvt.color4: #729FCF +URxvt.color12: #729FCF URxvt.scrollstyle: plain URxvt.scrollBar_floating: true diff --git a/.config/bash/aliases.sh b/.config/bash/aliases.sh index c9a1987..28b9923 100644 --- a/.config/bash/aliases.sh +++ b/.config/bash/aliases.sh @@ -6,10 +6,11 @@ # Set up colors and settings for ls/dir/vdir # ###################################################################### if [ -x "`which dircolors`" ]; then - eval "`dircolors -b`" + eval "$(dircolors -p | cat - "${XDG_CONFIG_HOME}/dir_colors" | + dircolors -b -)" alias ls='ls -1v --color=auto' alias dir='dir -v --color=auto' - alias vdir='vdir -v--color=auto' + alias vdir='vdir -v --color=auto' for xgrep in ${PATH//:/\/*grep }/*grep; do if [ -f "$xgrep" ]; then @@ -43,16 +44,11 @@ alias gitk='gitk --all --date-order' alias userctl='systemctl --user' ###################################################################### -# Remember lat/long for redshift # -###################################################################### -redshift='redshift -l39.9030:85.9979' -alias gtk-redshift="gtk-$redshift" -alias redshift="$redshift" -unset redshift - -###################################################################### # Some almost-function aliases # ###################################################################### alias lock="clear; away -C 'This terminal is locked'" alias plock="term-title Terminal Locked;lock" mvln() { mv $1 $2; ln -s $2 $1; } +jarls() { jar tf "$1" | sed -n 's/\.class$//p' | LC_ALL=C sort | xargs -r -d $'\n' javap -classpath "$1"; } +tarls() { local file; for file in "$@"; do bsdtar tf "$file" | sed "s|^|$file:|"; done; } +jarmain() { jarls "$1" 2>/dev/null | grep -E '(^[a-z]|public static void main\(java\.lang\.String\[\]\))' | grep -B1 '^ '; } diff --git a/.config/bash/rc.d/emacs.sh b/.config/bash/rc.d/emacs.sh index b402932..354c8f3 100644 --- a/.config/bash/rc.d/emacs.sh +++ b/.config/bash/rc.d/emacs.sh @@ -5,12 +5,13 @@ if [[ $TERM == eterm* ]]; then EDITOR=$SELECTED_EDITOR VISUAL=$SELECTED_EDITOR export SELECTED_EDITOR EDITOR VISUAL + export PAGER=cat ## Primatives for interacting with Emacs ############################### # _emacs_run LISP _emacs_run() { - emacsclient -f "$HOME/.emacs.d/server-$HOSTNAME/server" -e "$*" 2>/dev/null + emacsclient -f "$HOME/.emacs.d/server-$HOSTNAME/server" -a false -e "$*" 2>/dev/null } # _emacs_quote UNQUOTED_STRING _emacs_quote() { @@ -85,6 +86,7 @@ if [[ $TERM == eterm* ]]; then # Set the shell's X11 display (emacs -> shell) _emacs_set_shell_DISPLAY() { export DISPLAY=$(_emacs_unquote "$(_emacs_run "(cdr (assoc 'display (frame-parameters)))")") + [[ $DISPLAY != nil ]] || unset DISPLAY } ## Do those things ##################################################### @@ -94,5 +96,7 @@ if [[ $TERM == eterm* ]]; then _emacs_set_remote_dir _emacs_set_shell_DISPLAY } - PROMPT_COMMAND=_emacs_PROMPT_COMMAND + if _emacs_run '()' >/dev/null; then + PROMPT_COMMAND=_emacs_PROMPT_COMMAND + fi fi diff --git a/.config/cron/make-config b/.config/cron/make-config index 516334a..30985df 100644 --- a/.config/cron/make-config +++ b/.config/cron/make-config @@ -1,2 +1,2 @@ -# m h dom mon dow command -*/5 * * * * $HOME/.local/bin/cronic bash -c '{ . $HOME/.local/lib/path.sh && . $HOME/.local/lib/xdg.sh && make -C $XDG_CONFIG_HOME; } 2>&1' +#m h dom mon dow command +*/5 * * * * $HOME/.local/bin/cronic bash -l -c 'make -C "$XDG_CONFIG_HOME"' diff --git a/.config/dir_colors b/.config/dir_colors new file mode 100644 index 0000000..80484e8 --- /dev/null +++ b/.config/dir_colors @@ -0,0 +1 @@ +OTHER_WRITABLE 01;34;45 diff --git a/.config/emacs/custom.el b/.config/emacs/custom.el index 646f467..aca35b0 100644 --- a/.config/emacs/custom.el +++ b/.config/emacs/custom.el @@ -4,7 +4,9 @@ ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(custom-enabled-themes (quote (tango-dark))) - '(custom-safe-themes (quote ("9f443833deb3412a34d2d2c912247349d4bd1b09e0f5eaba11a3ea7872892000" "bb08c73af94ee74453c90422485b29e5643b73b05e8de029a6909af6a3fb3f58" "82d2cac368ccdec2fcc7573f24c3f79654b78bf133096f9b40c20d97ec1d8016" "1b8d67b43ff1723960eb5e0cba512a2c7a2ad544ddb2533a90101fd1852b426e" "628278136f88aa1a151bb2d6c8a86bf2b7631fbea5f0f76cba2a0079cd910f7d" "06f0b439b62164c6f8f84fdda32b62fb50b6d00e8b01c2208e55543a6337433a" "1e7e097ec8cb1f8c3a912d7e1e0331caeed49fef6cff220be63bd2a6ba4cc365" "71b172ea4aad108801421cc5251edb6c792f3adbaecfa1c52e94e3d99634dee7" "fc5fcb6f1f1c1bc01305694c59a1a861b008c534cae8d0e48e4d5e81ad718bc6" default))) + '(custom-safe-themes + (quote + ("9f443833deb3412a34d2d2c912247349d4bd1b09e0f5eaba11a3ea7872892000" "bb08c73af94ee74453c90422485b29e5643b73b05e8de029a6909af6a3fb3f58" "82d2cac368ccdec2fcc7573f24c3f79654b78bf133096f9b40c20d97ec1d8016" "1b8d67b43ff1723960eb5e0cba512a2c7a2ad544ddb2533a90101fd1852b426e" "628278136f88aa1a151bb2d6c8a86bf2b7631fbea5f0f76cba2a0079cd910f7d" "06f0b439b62164c6f8f84fdda32b62fb50b6d00e8b01c2208e55543a6337433a" "1e7e097ec8cb1f8c3a912d7e1e0331caeed49fef6cff220be63bd2a6ba4cc365" "71b172ea4aad108801421cc5251edb6c792f3adbaecfa1c52e94e3d99634dee7" "fc5fcb6f1f1c1bc01305694c59a1a861b008c534cae8d0e48e4d5e81ad718bc6" default))) '(erc-nick "lukeshu") '(explicit-shell-file-name "/bin/bash") '(global-whitespace-mode nil) @@ -17,10 +19,13 @@ '(safe-local-variable-values (quote ((Nginx-indent-tabs-mode) (Nginx-indent-level . 4) (Nginx-indent-level . 8)))) '(scroll-bar-mode nil) '(scss-compile-at-save nil) - '(send-mail-function (quote smtpmail-send-it))) + '(send-mail-function (quote smtpmail-send-it)) + '(smtpmail-smtp-server "plus.smtp.mail.yahoo.com") + '(smtpmail-smtp-service 587) + '(uniquify-buffer-name-style (quote post-forward-angle-brackets) nil (uniquify))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - ) + '(term-color-blue ((t (:background "#729fcf" :foreground "#729fcf"))))) diff --git a/.config/emacs/emacsutils.el b/.config/emacs/emacsutils.el deleted file mode 100644 index 966d16e..0000000 --- a/.config/emacs/emacsutils.el +++ /dev/null @@ -1,13 +0,0 @@ -(defun mailto-compose-mail (mailto-url) - (if (and (stringp mailto-url) - (string-match "\\`mailto:" mailto-url)) - (progn - (require 'rfc2368) - (let* ((headers (mapcar (lambda (h) (cons (intern (car h)) (cdr h))) - (rfc2368-parse-mailto-url mailto-url))) - (good-headers (remove-if (lambda (h) (member (car h) '(Body))) headers)) - (body (cdr (assoc 'Body headers)))) - (wl-draft good-headers nil nil body))))) - -(defun emacs-terminal-emulator (program) - (ansi-term program))
\ No newline at end of file diff --git a/.config/emacs/init.el b/.config/emacs/init.el index c21e19b..08b356f 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -1,14 +1,26 @@ -;; Preliminary settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(setq notify-method 'notify-via-libnotify) -(add-to-list 'load-path "~/.emacs.d/") -(setq server-auth-dir (locate-user-emacs-file (concat "server-" (system-name) "/"))) -(setq custom-file "~/.emacs.d/custom.el") +;; This config requires Emacs 24(+?) +;;;; Use XDG-ish locations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(setq xdg-cache-home (file-name-as-directory (or (getenv "XDG_CACHE_HOME") "~/.cache"))) +(setq + package-user-dir (concat xdg-cache-home "emacs/elpa") + ido-save-directory-list-file (concat xdg-cache-home "emacs/ido.last.el") + el-get-dir (concat xdg-cache-home "emacs/el-get/") + eshell-directory-name (concat xdg-cache-home "emacs/eshell/") + wl-score-files-directory (concat xdg-cache-home "emacs/wl-score-files/") + elmo-msgdb-directory (concat xdg-cache-home "emacs/elmo-msgdb/") + elmo-cache-directory (concat xdg-cache-home "emacs/elmo-cache/") + auto-save-list-file-prefix (concat xdg-cache-home "emacs/auto-save-list/saves-") + tramp-persistency-file-name (concat xdg-cache-home "emacs/tramp-cache.el") + custom-file (concat user-emacs-directory "custom.el") + wl-init-file (concat user-emacs-directory "wl.el") + ) ;;;; The basics that I can't use Emacs without ;;;;;;;;;;;;;;;;;;;;;;; (show-paren-mode 1) (column-number-mode 1) (line-number-mode 1) (ido-mode 1) +(unless (daemonp) (server-mode 1)) (when (require 'whitespace nil t) (setq whitespace-style '( tab-mark @@ -17,11 +29,18 @@ empty )) (global-set-key "\C-cw" 'global-whitespace-mode)) +(setq minibuffer-prompt-properties '( + read-only t + point-entered minibuffer-avoid-prompt + face minibuffer-prompt + )) (load custom-file 'noerror) + ;;;; Early settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This isn't particularly important, but set it before doing a whole ;; lot (loading packages), so there isn't a weird change in text size. +(setq notify-method 'notify-via-libnotify) (set-face-attribute 'default nil :height 93) @@ -40,39 +59,105 @@ (eval-region (point) (point-max)) (kill-buffer (current-buffer))))) -(add-to-list 'load-path "~/.emacs.d/el-get/el-get") +(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"))) ;;;; 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-base programming for what +;; to do once a package is loaded, using :after. (add-to-list 'package-archives '("ELPA" . "http://tromey.com/elpa/")) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.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 '( - (:name nxhtml - :type http - :url "http://ourcomments.org/Emacs/DL/elisp/nxhtml/zip/nxhtml-2.08-100425.zip" - :build ("unzip nxhtml-2.08-100425.zip") - :load "nxhtml/autostart.el") - )) - + ;; 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 + :after (progn + (define-global-minor-mode global-page-break-lines-mode + page-break-lines-mode page-break-lines-mode + :group 'page-break-lines) + (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 coffee-mode :type elpa + :after (add-hook 'coffee-mode-hook + '(lambda () + (set (make-local-variable 'tab-width) 2) + (set (make-local-variable 'indent-tabs-mode) nil) + ))) + (:name graphviz-dot-mode :type elpa) + (:name markdown-mode :type elpa + :after (add-to-list 'auto-mode-alist '("\\.ronn\\'" . markdown-mode))) + (:name nginx-mode :type elpa + :after (put 'nginx-indent-level 'safe-local-variable 'integerp)) + (:name scss-mode :type elpa) + )) +;; What packages el-get should install, both from above, and it's +;; internal list of sources. (el-get 'sync '(el-get -; nxhtml - apel flim semi wanderlust - smarttabs - )) - + ;; Minor modes + dtrt-indent + smart-tabs-mode + page-break-lines + ;; Major modes + apel flim semi wanderlust + graphviz-dot-mode + markdown-mode + nginx-mode + ;;nxhtml ; nxhtml is invasive, only enable if actively using + php-mode-improved + )) + ;; Misc. crap -(tool-bar-mode -1) +(when (fboundp 'tool-bar-mode) (tool-bar-mode -1)) + +(defun align-regexp--use-spaces (orig-fun &rest args) + "Use spaces for alignment" + (let ((indent-tabs-mode nil)) + (apply orig-fun args))) +(advice-add 'align-regexp :around #'align-regexp--use-spaces) -;(require 'go-mode-load) +(defun sh-smie-sh-rules--fix (args) + "Replace :after \"then\" with :after \"if\" because Emacs 24 +sh-script.el is broken." + (if (equal args (list :after "then")) + (list :after "if") + args)) +(advice-add 'sh-smie-sh-rules :filter-args #'sh-smie-sh-rules--fix) + +(require 'go-mode-load nil t) + +;; Make the mouse work in an xterm +(when (fboundp 'xterm-mouse-mode) + (xterm-mouse-mode 1) + (add-hook 'after-make-frame-functions + '(lambda (frame) + (if xterm-mouse-mode (xterm-mouse-mode 1)) + ))) + +;; Use mailcrypt to encrypt/decrypt email (when (require 'mailcrypt nil t) (mc-setversion "gpg") (add-hook 'wl-summary-mode-hook 'mc-install-read-mode) @@ -111,7 +196,7 @@ ;; Backup settings (setq backup-by-copying t ;; don't clobber symlinks - backup-directory-alist '(("." . "~/.emacs.d/saves")) ;; don't litter my fs tree + backup-directory-alist '(("." . "~/.cache/emacs/saves")) ;; don't litter my fs tree delete-old-versions t kept-new-versions 6 kept-old-versions 2 @@ -124,47 +209,29 @@ browse-url-browser-function 'browse-url-generic ) -;(load "mdmua") -(load "emacsutils") +;; Ediff settings +(setq + ediff-window-setup-function 'ediff-setup-windows-plain + ediff-split-window-function 'split-window-horizontally + ) + (set-default 'truncate-lines t) (setq inhibit-startup-screen t server-use-tcp t) -(setq org-log-done 'time) -(setq gamegrid-user-score-file-directory "/var/games/emacs/") -;(xclip-mode 1) - -(defun toggle-fullscreen (&optional f) - (interactive) - (let ((current-value (frame-parameter nil 'fullscreen))) - (set-frame-parameter nil 'fullscreen - (if (equal 'fullboth current-value) - (if (boundp 'old-fullscreen) old-fullscreen nil) - (progn (setq old-fullscreen current-value) - 'fullboth))))) -(global-set-key [f11] 'toggle-fullscreen) ;; Automatically load smerge mode for merge files -(defun sm-try-smerge () +(defun try-smerge-mode () (save-excursion (goto-char (point-min)) (when (re-search-forward "^<<<<<<< " nil t) (smerge-mode 1)))) -(add-hook 'find-file-hook 'sm-try-smerge t) +(add-hook 'find-file-hook 'try-smerge-mode t) -;; Al my weird mode-specific settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; All my weird mode-specific settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-hook 'text-mode-hook 'turn-on-auto-fill) -; for term-mode -;; (add-hook 'after-make-frame-functions -;; (lambda (frame) -;; (set-variable 'term-default-fg-color -;; (face-foreground 'default)) -;; (set-variable 'term-default-bg-color -;; (face-background 'default))) -;; t) - (add-hook 'lisp-mode-hook '(lambda () (set (make-local-variable 'indent-tabs-mode) nil) @@ -175,21 +242,14 @@ (set (make-local-variable 'indent-tabs-mode) nil) )) -(add-hook 'coffee-mode-hook - '(lambda () - (set (make-local-variable 'tab-width) 2) - )) - (add-hook 'term-mode-hook '(lambda () - (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *") - (make-local-variable 'mouse-yank-at-point) - ;(make-local-variable 'transient-mark-mode) - (setq mouse-yank-at-point t) - ;(setq transient-mark-mode nil) (auto-fill-mode -1) + (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *") + (set (make-local-variable 'mouse-yank-at-point) t) (setq tab-width 8 ) - (setq autopair-dont-activate t) ;; Don't let autopair break ansi-term + (setq truncate-lines nil) + (set (make-local-variable 'autopair-dont-activate) t) ;; Don't let autopair break ansi-term )) (add-hook 'ruby-mode-hook @@ -199,38 +259,21 @@ (set (make-local-variable 'tab-width) 4) )) -(add-hook 'coffee-mode-hook +(add-hook 'php-mode-hook '(lambda () - (set (make-local-variable 'indent-tabs-mode) nil) + (c-set-offset 'cpp-macro 0) + )) + +(add-hook 'tex-mode-hook + '(lambda () + (set (make-local-variable 'tab-always-indent) nil) + (set (make-local-variable 'indent-tabs-mode) t) + )) + +(add-hook 'sh-mode-hook + '(lambda () + (sh-electric-here-document-mode 0) )) (add-to-list 'auto-mode-alist '("PKGBUILD" . sh-mode)) (add-to-list 'auto-mode-alist '("SRCBUILD" . sh-mode)) -(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) -(add-to-list 'auto-mode-alist '("\\.ronn\\'" . markdown-mode)) - -;(require 'flymake) -;(add-hook 'php-mode-hook (lambda() (flymake-mode 1))) -;(define-key php-mode-map '[M-S-up] 'flymake-goto-prev-error) -;(define-key php-mode-map '[M-S-down] 'flymake-goto-next-error) - -;(setq tramp-debug-buffer t) -;(setq tramp-verbose 10) - -;; (add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e") -;; (require 'mu4e) -;; (require 'mu4e-speedbar) - -;; (setq -;; mu4e-maildir "~/Maildir" ;; top-level Maildir -;; mu4e-sent-folder "/.Sent" ;; folder for sent messages -;; mu4e-drafts-folder "/.Draft" ;; unfinished messages -;; mu4e-trash-folder "/.Trash" ;; trashed messages -;; mu4e-refile-folder "/archive") ;; saved messages -;; (setq mu4e-get-mail-command "offlineimap") -;; (setq mu4e-use-fancy-chars "t") -;; ;; enable inline images -;; (setq mu4e-view-show-images t) -;; ;; use imagemagick, if available -;; (when (fboundp 'imagemagick-register-types) -;; (imagemagick-register-types)) diff --git a/.config/emacs/wl.el b/.config/emacs/wl.el index a169249..e9e61bd 100644 --- a/.config/emacs/wl.el +++ b/.config/emacs/wl.el @@ -21,18 +21,16 @@ wl-message-id-domain user-mail-address ;; Folders/File system ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - elmo-msgdb-directory "~/.emacs.d/elmo" ;; where elmo keeps all its stuff - elmo-cache-directory "~/.emacs.d/elmo-cache" ;; where elmo keeps all its stuff elmo-maildir-folder-path "~/Maildir" ;; where I store my mail ;; note: all below are dirs (Maildirs) under elmo-maildir-folder-path ;; the '.'-prefix is for marking them as maildirs - wl-fcc "..Sent" ;; sent msgs go to the "sent"-folder - wl-default-folder "..Ham" ;; my main inbox - wl-draft-folder "..Draft" ;; store drafts in 'postponed' - wl-trash-folder "..Trash" ;; put trash in 'trash' - wl-spam-folder "..Bulk Mail" ;; put spam in 'Bulk Mail' - wl-queue-folder "..queue" ;; we don't use this + wl-fcc ".Sent" ;; sent msgs go to the "sent"-folder + wl-default-folder ".FOLDERS.Ham" ;; my main inbox + wl-draft-folder ".Draft" ;; store drafts in 'postponed' + wl-trash-folder ".Trash" ;; put trash in 'trash' + wl-spam-folder ".FOLDERS.Spam.training" ;; put spam in 'Bulk Mail' + wl-queue-folder ".FOLDERS.Queue" ;; we don't use this ;; check this folder periodically, and update modeline ;wl-biff-check-folder-list '(".todo") ;; check every 180 seconds diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini index 9801ab0..78116f3 100644 --- a/.config/gtk-3.0/settings.ini +++ b/.config/gtk-3.0/settings.ini @@ -1,7 +1,7 @@ -[Settings] +[Settings] gtk-theme-name=oxygen-gtk gtk-icon-theme-name=oxygen -gtk-fallback-icon-theme=gnome +gtk-fallback-icon-theme=mate gtk-font-name=Sans 10 gtk-cursor-theme-name=Vanilla-DMZ gtk-cursor-theme-size=0 diff --git a/.config/icons/default/index.theme b/.config/icons/default/index.theme index dd26337..6652f01 100644 --- a/.config/icons/default/index.theme +++ b/.config/icons/default/index.theme @@ -1,4 +1,5 @@ -# This file is written by LXAppearance. Do not edit.[Icon Theme] +# This file is written by LXAppearance. Do not edit. +[Icon Theme] Name=Default Comment=Default Cursor Theme Inherits=Vanilla-DMZ diff --git a/.config/irbrc b/.config/irbrc index cda5ada..15d362a 100644 --- a/.config/irbrc +++ b/.config/irbrc @@ -1,5 +1,7 @@ # -*- mode: Ruby -*- require 'rubygems' unless defined? Gem # only needed in 1.8 require 'irb/ext/save-history' +require 'fileutils' IRB.conf[:SAVE_HISTORY] = 5000 IRB.conf[:HISTORY_FILE] = "#{ENV['XDG_CACHE_HOME']}/irb/history" +FileUtils.mkdir_p(File.dirname(IRB.conf[:HISTORY_FILE])) diff --git a/.config/login.d/00_coredumps.sh b/.config/login.d/00_coredumps.sh new file mode 100644 index 0000000..8fcc61b --- /dev/null +++ b/.config/login.d/00_coredumps.sh @@ -0,0 +1 @@ +ulimit -c unlimited # save core dumps diff --git a/.local/lib/path.sh b/.config/login.d/00_path.sh index a45f8fd..a45f8fd 100644 --- a/.local/lib/path.sh +++ b/.config/login.d/00_path.sh diff --git a/.config/login.d/00_umask.sh b/.config/login.d/00_umask.sh new file mode 100644 index 0000000..8e71ad5 --- /dev/null +++ b/.config/login.d/00_umask.sh @@ -0,0 +1 @@ +umask 022 diff --git a/.config/login.d/01_locale.sh b/.config/login.d/01_locale.sh new file mode 100644 index 0000000..2e4f3c4 --- /dev/null +++ b/.config/login.d/01_locale.sh @@ -0,0 +1,3 @@ +if { [[ $LANG = C ]] || [[ -z $LANG ]]; } && grep '^en_US.UTF-8\s' /etc/locale.gen &>/dev/null; then + export LANG=en_US.UTF-8 +fi diff --git a/.config/login.d/01_xdg.sh b/.config/login.d/01_xdg.sh new file mode 100644 index 0000000..2e0b42c --- /dev/null +++ b/.config/login.d/01_xdg.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# This should be readable by /bin/sh, but I'm going to assume bash. + +# Sets up XDG environmental variables, so programs using them don't have to +# worry about checking if they are set. +# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +[[ -n $XDG_DATA_HOME ]] || export XDG_DATA_HOME="$HOME/.local/share" +[[ -n $XDG_CONFIG_HOME ]] || export XDG_CONFIG_HOME="$HOME/.config" +[[ -n $XDG_DATA_DIRS ]] || export XDG_DATA_DIRS="/usr/local/share/:/usr/share/" +[[ -n $XDG_CONFIG_DIRS ]] || export XDG_CONFIG_DIRS="/etc/xdg" +[[ -n $XDG_CACHE_HOME ]] || export XDG_CACHE_HOME="$HOME/.cache" + +# Check if XDG_RUNTIME_DIR is set, but has a bogus setting +if [[ -n $XDG_RUNTIME_DIR ]] && [[ ! -d $XDG_RUNTIME_DIR ]]; then + unset XDG_RUNTIME_DIR +fi + +# Set XDG_RUNTIME_DIR if we can +if [[ -z $XDG_RUNTIME_DIR ]] && type flock &>/dev/null; then + _diy_xdg_runtime_login() { + export XDG_RUNTIME_DIR="$XDG_CACHE_HOME/xdg-runtime-dir/$HOSTNAME" + readonly XDG_RUNTIME_DIR + # There's a race condition here, between the `ln -s` and `flock`. + # But it's not like I'll be hammering a box with logins. + if [[ ! -d "$XDG_CACHE_HOME" ]]; then + local tmp="$(mktemp --tmpdir -- "${USER}@${HOSTNAME}-runtime.XXXXXXXXXX")" + mkdir -p -- "$XDG_CACHE_HOME/xdg-runtime-dir" + ln -sfT -- "$tmp" "$XDG_RUNTIME_DIR" + fi + if ! [[ /dev/fd/7 -ef "$XDG_CACHE_HOME/xdg-runtime-dir/.lock" ]]; then + exec 7 >"$XDG_CACHE_HOME/xdg-runtime-dir/.lock" + fi + if flock -sn 7; then + trap _diy_xdg_runtime_logout EXIT + fi + } + _diy_xdg_runtime_logout() { + if flock -xn 7; then + rm -rf -- "$(readlink "$XDG_RUNTIME_DIR")" + fi + } + _diy_xdg_runtime_login +fi diff --git a/.config/login.d/02_tmpdir.sh b/.config/login.d/02_tmpdir.sh new file mode 100644 index 0000000..293064e --- /dev/null +++ b/.config/login.d/02_tmpdir.sh @@ -0,0 +1,21 @@ +if [[ ! -d "$HOME/tmp/$HOSTNAME" ]]; then + tmp="$(mktemp --tmpdir -d "$USER@$HOSTNAME-tmpdir.XXXXXXXXXXXXXXXXXXX")" + mkdir -p -- "$HOME/tmp" + ln -sf "$tmp" "$HOME/tmp/$HOSTNAME" + unset tmp +fi +export TMPDIR="$HOME/tmp/$HOSTNAME" +if type flock &>/dev/null; then + if [[ "$(readlink -f /dev/fd/7)" != "$(readlink -f "$TMPDIR/.uselock")" ]]; then + exec 7>"$TMPDIR/.uselock" + fi + if flock -sn 7; then + _logout_tmpdir_cleanup() { + if flock -xn 7; then + rm -rf -- "$(readlink -f "$TMPDIR")" + rm -- "$TMPDIR" + fi + } + trap _logout_tmpdir_cleanup EXIT + fi +fi diff --git a/.config/login.d/10_goroot.sh b/.config/login.d/10_goroot.sh new file mode 100644 index 0000000..89d1037 --- /dev/null +++ b/.config/login.d/10_goroot.sh @@ -0,0 +1,3 @@ +if [[ -z $GOROOT ]]; then + export GOROOT=/homes/shumakl/.prefix.$(uname -m)/go +fi diff --git a/.config/login.d/10_gpg.sh b/.config/login.d/10_gpg.sh new file mode 100644 index 0000000..cf3c88c --- /dev/null +++ b/.config/login.d/10_gpg.sh @@ -0,0 +1,3 @@ +if [[ -z $GPGKEY ]] && [[ -f "${HOME}/.gnupg/gpg.conf" ]]; then + export GPGKEY=`sed -nr 's/^\s*default-key\s+//p' "${GNUPG_HOME:-${HOME}/.gnupg}/gpg.conf"` +fi diff --git a/.config/login.d/10_java.sh b/.config/login.d/10_java.sh new file mode 100644 index 0000000..3c49368 --- /dev/null +++ b/.config/login.d/10_java.sh @@ -0,0 +1,6 @@ +_JAVA_OPTIONS='' +_JAVA_OPTIONS+=' -Dawt.useSystemAAFontSettings=on' +_JAVA_OPTIONS+=' -Dswing.aatext=true' +_JAVA_OPTIONS+=' -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' +_JAVA_OPTIONS+=" -Djava.io.tmpdir=$TMPDIR" +export _JAVA_OPTIONS diff --git a/.config/login.d/10_selected-editor.sh b/.config/login.d/10_selected-editor.sh new file mode 100644 index 0000000..c1c18fb --- /dev/null +++ b/.config/login.d/10_selected-editor.sh @@ -0,0 +1,11 @@ +# PAM seems to be setting EDITOR... +if [[ $EDITOR = /usr/bin/vi ]]; then + unset EDITOR +fi +if [[ -f "$HOME/.selected_editor" ]]; then + . "$HOME/.selected_editor" + export SELECTED_EDITOR + export ALTERNATE_EDITOR + export EDITOR="${EDITOR:-$SELECTED_EDITOR}" + export VISUAL="${VISUAL:-$SELECTED_EDITOR}" +fi diff --git a/.config/login.d/10_spell-check.sh b/.config/login.d/10_spell-check.sh new file mode 100644 index 0000000..9a24b7e --- /dev/null +++ b/.config/login.d/10_spell-check.sh @@ -0,0 +1,3 @@ +if [[ -z "$DICTIONARY" ]] && [[ -n "$LANG" ]]; then + export DICTIONARY="${LANG%%.*}" +fi diff --git a/.config/login.d/10_xauthority.sh b/.config/login.d/10_xauthority.sh new file mode 100644 index 0000000..a27202c --- /dev/null +++ b/.config/login.d/10_xauthority.sh @@ -0,0 +1,4 @@ +# This was needed once with SSH and Fedora boxes. +if [[ -z $XAUTHORITY ]]; then + export XAUTHORITY="$HOME/.Xauthority" +fi diff --git a/.config/login.d/90_dot-runtime.sh b/.config/login.d/90_dot-runtime.sh new file mode 100644 index 0000000..fb7ecd6 --- /dev/null +++ b/.config/login.d/90_dot-runtime.sh @@ -0,0 +1,2 @@ +mkdir -p -- ~/.runtime +ln -sfT -- "$XDG_RUNTIME_DIR" ~/.runtime/"$HOSTNAME" diff --git a/.config/login.local.sh b/.config/login.local.sh deleted file mode 100644 index bead00c..0000000 --- a/.config/login.local.sh +++ /dev/null @@ -1,10 +0,0 @@ -# PAM seems to be setting EDITOR... -if [[ $EDITOR = /usr/bin/vi ]]; then - unset EDITOR -fi -if { [[ $LANG = C ]] || [[ -z $LANG ]]; } && grep '^en_US.UTF-8\s' /etc/locale.gen &>/dev/null; then - export LANG=en_US.UTF-8 -fi -if [[ -z $GOROOT ]]; then - export GOROOT=/homes/shumakl/.prefix.$(uname -m)/go -fi diff --git a/.config/login.sh b/.config/login.sh index 09c768a..353861a 100644 --- a/.config/login.sh +++ b/.config/login.sh @@ -9,91 +9,8 @@ # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. -umask 022 -## Paths ############################################################# - -. "$HOME/.local/lib/path.sh" - -# TMPDIR ############################################################# - -if [[ ! -d "$HOME/tmp/$HOSTNAME" ]]; then - tmp="$(mktemp --tmpdir -d "$USER@$HOSTNAME-tmpdir.XXXXXXXXXXXXXXXXXXX")" - mkdir -p -- "$HOME/tmp" - ln -sf "$tmp" "$HOME/tmp/$HOSTNAME" - unset tmp -fi -export TMPDIR="$HOME/tmp/$HOSTNAME" -if type flock &>/dev/null; then - if [[ "$(readlink -f /dev/fd/7)" != "$(readlink -f "$TMPDIR/.uselock")" ]]; then - exec 7>"$TMPDIR/.uselock" - fi - if flock -sn 7; then - _logout_tmpdir_cleanup() { - if flock -xn 7; then - rm -rf -- "$(readlink -f "$TMPDIR")" - rm -- "$TMPDIR" - fi - } - trap _logout_tmpdir_cleanup EXIT - fi -fi - - - -# XDG ################################################################ - -. "$HOME/.local/lib/xdg.sh" -mkdir -p -- "$HOME/.runtime" -ln -sfT -- "$XDG_RUNTIME_DIR" "$HOME/.runtime/$HOSTNAME" - -# Box-specific stuff ################################################# - -if [[ -f "$XDG_CONFIG_HOME/login.local.sh" ]]; then - . "$XDG_CONFIG_HOME/login.local.sh" -fi - -# Settings ########################################################### - -# Spell check -if [[ -z "$DICTIONARY" ]] && [[ -n "$LANG" ]]; then - export DICTIONARY="${LANG%%.*}" -fi - -# Text editor -if [[ -f "$HOME/.selected_editor" ]]; then - . "$HOME/.selected_editor" - export SELECTED_EDITOR - export ALTERNATE_EDITOR - export EDITOR="${EDITOR:-$SELECTED_EDITOR}" - export VISUAL="${VISUAL:-$SELECTED_EDITOR}" -fi - -# GPG -if [[ -z $GPGKEY ]] && [[ -f "${HOME}/.gnupg/gpg.conf" ]]; then - echo 'login: Setting GPGKEY' - export GPGKEY=`sed -nr 's/^\s*default-key\s+//p' "${HOME}/.gnupg/gpg.conf"` -fi -if [[ -f $XDG_RUNTIME_DIR/gpg ]]; then - echo 'login: Setting gpg-agent info:' - cat "$XDG_RUNTIME_DIR/gpg" - . "$XDG_RUNTIME_DIR/gpg" - export GPG_AGENT_INFO - #export SSH_AUTH_SOCK -fi - -# Java -_JAVA_OPTIONS='' -_JAVA_OPTIONS+=' -Dawt.useSystemAAFontSettings=on' -_JAVA_OPTIONS+=' -Dswing.aatext=true' -_JAVA_OPTIONS+=' -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' -if [[ -n $TMPDIR ]]; then - _JAVA_OPTIONS+=" -Djava.io.tmpdir=$TMPDIR" -fi -export _JAVA_OPTIONS - -# X11 -if [[ -z $XAUTHORITY ]]; then - export XAUTHORITY="$HOME/.Xauthority" - #export XAUTHORITY=$XDG_RUNTIME_DIR/Xauthority -fi +for file in "${XDG_CONFIG_HOME:-$HOME/.config}/login.d/"*.sh; do + . "$file" +done +unset file diff --git a/.config/lxpanel/default/config b/.config/lxpanel/default/config index e19a7d1..e0d2b50 100644 --- a/.config/lxpanel/default/config +++ b/.config/lxpanel/default/config @@ -1,4 +1 @@ [Command] -FileManager=v-editor %s -Terminal=urxvt -c %s -Logout=bash -c 'echo quit >> $WMII_DIR/ctl' diff --git a/.config/maildirproc/att.rc b/.config/maildirproc/att.rc index 381ce8f..6b31260 100644 --- a/.config/maildirproc/att.rc +++ b/.config/maildirproc/att.rc @@ -1,7 +1,9 @@ # -*- mode: python; indent-tabs-mode: t -*- import os +import os.path import subprocess +import datetime processor.maildir_base = "~/Maildir" processor.auto_reload_rcfile = True @@ -24,6 +26,16 @@ 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) def bogofilter_auto(mail): p = subprocess.Popen( @@ -37,28 +49,53 @@ def bogofilter_auto(mail): "Error running bogofilter: Return code = {0!r}".format( p.returncode)) return p.returncode - def bogofilter_ham(mail): subprocess.call(["bogofilter", "-S", "-n", "-I", mail.path]) - def bogofilter_spam(mail): subprocess.call(["bogofilter", "-N", "-s", "-I", mail.path]) -def handle_incoming_spam_training(mail): - bogofilter_spam(mail) - mail.move(".Bulk Mail") - 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(".Bulk Mail") + mail.move("FOLDERS.Spam") def handle_incoming_unknown(mail): # Filter spam + + # Whitelist + if ( + False + or is_to_or_from(mail, "fsf.org") + or is_to_or_from(mail, "gnu.org") + or is_to_or_from(mail, "parabola.nu") + or is_to_or_from(mail, "parabolagnulinux.org") + or mail["From"] == "MAILER-DAEMON@yahoo.com" + or mail["From"].contains("@facebookmail.com>") + or mail["From"].contains("@gandi.net") + or mail["From"].contains("@goodwillindy.org>") + or mail["From"].contains("@lpi.org>") + or mail["From"].contains("@msdlt.k12.in.us>") + or mail["From"].contains("@parabola.nu") + or mail["From"].contains("@post.oreilly.com>") + or mail["From"].contains("@scouting.org>") + or mail["From"].contains("@wolframalpha.com>") + or mail["From"].contains("parabolagnulinux.org") + or mail["List-Id"].matches(".*\.(gnu|gnome|archlinux|parabolagnulinuxlibre)\.org") + or mail["List-Id"].matches(".*\.parabola\.nu") + or mail["Subject"].contains("[Dev]") + 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: @@ -68,10 +105,10 @@ def handle_incoming_unknown(mail): handle_incoming_ham(mail) return elif spam == 2: - # maybe spam + mail.move("FOLDERS.MysteryMeat") return else: - mail.move(".Error") + mail.move("FOLDERS.BogoFail") return def my_filters(mail): @@ -82,7 +119,7 @@ def my_filters(mail): or mail["List-Id"].matches(list+"\.gnu\.org") or mail["Subject"].contains('['+list+']') ): - mail.move(".software."+list) + move_ham(mail,".software."+list) return # Sort mail from other software mailing lists @@ -91,67 +128,54 @@ def my_filters(mail): or mail["List-Id"].matches("social-discuss\.gnu\.org") or mail["Subject"].contains("social-discuss") ): - mail.move(".software.social") + move_ham(mail,".software.social") return if mail["List-Id"].matches("networkmanager-list\.gnome\.org"): - mail.move(".software.networkmanager") + move_ham(mail,".software.networkmanager") return - if mail["List-Id"].matches("maintenance.lists.parabolagnulinux.org"): - if mail["From"].contains("monit@"): - if mail["Message-Id"].contains("@repo.parabolagnulinux.org"): - if mail["Subject"].matches("^\[Maintenance\] monit alert -- (Execution|Connection) (succeeded|failed) sshd$"): - mail.move(".software.parabola-maintenance.monit-repo.sshd") - return - mail.move(".software.parabola-maintenance.monit-repo") - return - if mail["Message-Id"].contains("@rshg054.dnsready.net"): - mail.move(".software.parabola-maintenance.monit-rshg054") - return - if mail["Subject"].matches("Cron <.*@repo>"): - mail.move(".software.parabola-maintenance.cron-repo") - return - if mail["Subject"].matches("Cron <.*@rshg054>"): - mail.move(".software.parabola-maintenance.cron-rshg054") - return - mail.move(".software.parabola-maintenance") + if mail["List-Id"].matches("maintenance\.lists\.parabola(gnulinux\.org|\.nu)"): + move_ham(mail,".software.parabola.maintenance") return - if is_to_or_from(mail, "parabola.nu"): - mail.move(".software.parabola-labs") + if is_to_or_from(mail, "labs@parabola.nu"): + move_ham(mail,".software.parabola.labs") return if ( False - or mail["List-Id"].matches("parabolagnulinux.org") + or mail["List-Id"].matches("parabolagnulinux\.org") + or mail["List-Id"].matches("parabola\.nu") or is_to_or_from(mail, "parabolagnulinux.org") or is_to_or_from(mail, "kiwwwi.com.ar") + or is_to_or_from(mail, "parabola.nu") ): if mail["Subject"].contains("[Django]"): - mail.move(".software.parabola-maintenance.django") + move_ham(mail,".software.parabola.maintenance.django") + return + else: + move_ham(mail,".software.parabola.dev") return - mail.move(".software.parabola-dev") - return if (mail["List-Id"].matches("pacman-dev.archlinux.org")): - mail.move(".software.pacman-dev") + move_ham(mail,".software.pacman-dev") return - if (mail["List-Id"].matches("systemd-devel.lists.freedesktop.org")): - mail.move(".software.systemd-devel") + if (mail["List-Id"].matches("systemd-devel.lists.freedesktop.org") or is_to_or_from(mail, "systemd-devel@lists.freedesktop.org")): + move_ham(mail,".software.systemd-devel") return for subject_re in [ "\[Stow-[^\]]*\].*", ]: if mail["Subject"].matches(subject_re): - mail.move(".software") + move_ham(mail,".software") return # Sort mail from some social websites if mail["From"].matches("facebook(|mail)\.com"): - mail.move(".Social.Facebook") + move_ham(mail,".Social.Facebook") return if ( @@ -159,15 +183,24 @@ def my_filters(mail): or mail["From"].matches("identi\.ca") or mail["From"].matches("statusnet") ): - mail.move(".Social.Identica") + move_ham(mail,".Social.Identica") return + if ( + False + or mail["From"].contains("@gandi.net") + or mail["From"].contains("@ramhost.us") + or mail["From"].contains("@startcom.org") + ): + move_ham(mail,".lukeshu-com") + return + if mail["From"].matches("twitter\.com"): - mail.move(".Social.Twitter") + move_ham(mail,".Social.Twitter") return if mail["From"].matches("@xkcd\.com"): - mail.move(".Social.xkcd") + move_ham(mail,".Social.xkcd") return # Sort mail related to Troop 276 @@ -191,30 +224,24 @@ def my_filters(mail): or is_to_or_from(mail,"mytroop.us") or is_to_or_from(mail,"crossroadsbsa.org") ): - mail.move(".Troop276") + move_ham(mail,".BoyScouts") return # Sort mail from misc people - if mail["From"].matches("margieshu@sbcglobal\.net"): - mail.move(".misc.Mom") + if ( + False + or is_to_or_from(mail,"margieshu@sbcglobal.net") + or is_to_or_from(mail,"3174451635@mms.att.net") + ): + move_ham(mail,".misc.Mom") return for address in [ - "justicejade10@aol.com", - "parsonsjade@aol.com", - "parsonstjade@gmail.com", - "jadparso@umail.iu.edu", - ]: - if is_to_or_from(mail,address): - mail.move(".misc.Jade") - return - - for address in [ "nintendo.com", "nintendo-news.com", ]: if mail["From"].contains(address): - mail.move(".misc.Nintendo") + move_ham(mail,".misc.Nintendo") return for address in [ @@ -223,7 +250,7 @@ def my_filters(mail): "CompTIA", ]: if mail["From"].contains(address): - mail.move(".misc.CompTIA") + move_ham(mail,".misc.CompTIA") return # Sort mail from FRC people @@ -248,37 +275,38 @@ def my_filters(mail): "william.walk@gmail.com", ]: if is_to_or_from(mail,address): - mail.move(".School.Robotics") + move_ham(mail,".School.Robotics") return for subject_re in [ "robotics", - "1024", + "\b1024\b", + "\b4272\b", "kil-?a-?bytes", ]: if mail["Subject"].matches(subject_re): - mail.move(".School.Robotics") + move_ham(mail,".School.Robotics") return # Sort mail from software people for address in [ "@archlinux.org", + "@canonical.org", + "@cnuk.org", + "@eff.org", + "@foocorp.net", "@fsf.org", "@github.com", - "canonical.org", - "cnuk.org", - "eff.org", - "esr@thyrsus.com", - "foocorp.net", - "gitorious.org", - "gnome.org", - "gnu.org", - "ietf.org", - "kde.org", - "sourceforge.com", + "@gitorious.org", + "@gnome.org", + "@gnu.org", + "@ietf.org", + "@kde.org", + "@sourceforge.com", + "@thyrsus.com", "trustees@core3.amsl.com", ]: if is_to_or_from(mail,address): - mail.move(".software") + move_ham(mail,".software") return @@ -288,16 +316,16 @@ def my_filters(mail): or is_to_or_from(mail, "@lnnorthstar.org") or is_to_or_from(mail, "lnnorthstar.org@tigertech.net") ): - mail.move(".School.Newspaper") + move_ham(mail,".School.Newspaper") return # Sort mail from various employers/people who pay me if is_to_or_from(mail, "@precisepath.com"): - mail.move(".Work.PrecisePath") + move_ham(mail,".Work.PrecisePath") return if is_to_or_from(mail,"susyphil@aol.com"): - mail.move(".Work.PMCH") + move_ham(mail,".Work.PMCH") for address in [ "d.farrar@comcast.net", @@ -305,7 +333,7 @@ def my_filters(mail): "@vmware.com", ]: if is_to_or_from(mail,address): - mail.move(".Work.FAST") + move_ham(mail,".Work.FAST") return # Sort misc newsletters @@ -319,12 +347,13 @@ def my_filters(mail): or mail["From"].contains("info@demandprogress.org") or (mail["From"].contains("@sparkfun.com") and mail["Message-Id"].contains("rsgsv.net")) ): - mail.move(".misc.Newsletters") + 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") @@ -334,7 +363,7 @@ def my_filters(mail): or mail["Subject"].contains("NHS") or mail["Subject"].contains("National Honor Society") ): - mail.move(".School") + move_ham(mail,".School") return # from college stuff @@ -343,50 +372,47 @@ def my_filters(mail): or mail["Subject"].contains("NYLF") # National Youth Leadership Conference or mail["Subject"].contains("NSHSS") ): - mail.move(".College.Societies") + move_ham(mail,".College.Societies") return if ( False - #or mail["From"].contains(".edu") or mail["From"].contains("admissions@") - #or mail["From"].contains("college") - #or mail["From"].contains("university") or mail["Subject"].contains("college") # now we get to the BS or mail["From"].contains("@dreamitdoitindiana.com") or mail["From"].contains("@indianatechinfo.org") ): - mail.move(".College") + move_ham(mail,".College") return if mail["From"].contains("@projectwonderful.com"): - mail.move(".ProjectWonderful") + move_ham(mail,".misc.ProjectWonderful") return if ( False or mail["From"].matches("@localhost") or mail["From"].matches("@[^,>]*\.local") - or mail["From"].matches("@[^,>]*\.lukeshu\.ath\.cx") + or mail["From"].matches("@[^,>]*\.lan") or mail["To"].matches("luke@") ): - mail.move(".LocalSystems") + move_ham(mail,".LocalSystems") return if ( False or mail["Subject"].contains("password") or mail["Subject"].contains("account") ): - mail.move(".misc.accounts") + move_ham(mail,".misc.accounts") return - mail.move(".Ham") + move_ham(mail,"") handle_mapping = { - ".": handle_incoming_unknown, - ".spam-training": handle_incoming_spam_training, - ".ham-training": handle_incoming_ham_training, - #".Ham": handle_incoming_ham, + "Inbox": handle_incoming_unknown, + "Bulk Mail": handle_incoming_unknown, + "FOLDERS.Spam.training": handle_incoming_spam_training, + "FOLDERS.Ham.training": handle_incoming_ham_training, } processor.maildirs = handle_mapping.keys() for mail in processor: diff --git a/.config/maildirproc/purdue.rc b/.config/maildirproc/purdue.rc index 6d4b913..9f6bf37 100644 --- a/.config/maildirproc/purdue.rc +++ b/.config/maildirproc/purdue.rc @@ -70,21 +70,38 @@ def my_filters(mail): 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") - or is_to_or_from(mail, "@duke-energy.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") + ): + 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 is_to_or_from(mail,"royfu@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.Comcast") + mail.move("INBOX.work.2013.Comcast") return if ( @@ -100,20 +117,24 @@ def my_filters(mail): # 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 @@ -123,33 +144,40 @@ def my_filters(mail): 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 @@ -163,11 +191,11 @@ def my_filters(mail): if mail["From"].contains("mixable") and mail["Subject"].matches("^COM 21700"): mail.move("INBOX.classes.2014-1.COM217.Mixable") return - # CS252 + # CS252 (Systems Programming) if piazza_topic(mail, "CS 25200"): mail.move("INBOX.classes.2014-1.CS252.Piazza") return - # CS307 + # 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 @@ -183,6 +211,65 @@ def my_filters(mail): 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) + # ME297 (FRC) + if mail["Subject"].contains("[ME297]"): + mail.move("INBOX.classes.2015-1.ME297") + return + # SOC324 (Criminology) + handle_mapping = { "INBOX": my_filters, } diff --git a/.config/offlineimaprc b/.config/offlineimaprc index d027001..36b382c 100644 --- a/.config/offlineimaprc +++ b/.config/offlineimaprc @@ -12,21 +12,15 @@ remoterepository = Remote-SBCGlobal type = Maildir localfolders = ~/Maildir sep = . -folderfilter = lambda foldername: not re.search('(Trash|Del|-old|Draft)', foldername) -# transforms local -> remote -nametrans = lambda foldername: re.sub('^$', 'Inbox', re.sub('^'+re.escape('%(sep)s'), '', foldername)) +folderfilter = lambda folder: folder in [ 'Inbox', 'Bulk Mail' ] [Repository Remote-SBCGlobal] type = IMAP ssl = yes -cert_fingerprint = a6ee8d759eb76dafacffffc47c4507d51f444984 +cert_fingerprint = 9751f610c2631b3d4e63afcd096e5eb94c1f6fc8 remotehost = imap.mail.yahoo.com remoteuser = lukeshu@sbcglobal.net -folderfilter = lambda foldername: not re.search('(Trash|Del)', foldername) - -# transforms remote -> local -# we must assume that sep=/ on the remote IMAP server. -nametrans = lambda foldername: '/'+re.sub('^Inbox$', '', foldername) +folderfilter = lambda folder: folder in [ 'Inbox', 'Bulk Mail' ] ## Purdue ############################################################ diff --git a/.config/pacman/makepkg.conf b/.config/pacman/makepkg.conf new file mode 100644 index 0000000..8389fb5 --- /dev/null +++ b/.config/pacman/makepkg.conf @@ -0,0 +1,24 @@ +#!/phony/bash + +PKGDEST="${LIBREHOME:-$HOME}/packages/pkgdest" +SRCDEST="${LIBREHOME:-$HOME}/packages/srcdest" +SRCPKGDEST="${LIBREHOME:-$HOME}/packages/srcpkgdest" +LOGDEST="${LIBREHOME:-$HOME}/packages/logdest" + +PACKAGER="Luke Shumaker <lukeshu@sbcglobal.net>" + +MAKEFLAGS="-j3" + +if type ccache &>/dev/null; then + f=false + for i in "${!BUILDENV[@]}"; do + if [[ "${BUILDENV[$i]}" == '!ccache' ]]; then + BUILDENV[$i]='ccache' + f=true + fi + done + if [[ $f == false ]]; then + BUILDENV+=('ccache') + fi + unset f i +fi diff --git a/.config/redshift.conf b/.config/redshift.conf new file mode 100644 index 0000000..ef83f3f --- /dev/null +++ b/.config/redshift.conf @@ -0,0 +1,13 @@ +[redshift] +; Don't mess with the color, just brightness +temp-day=6500K +temp-night=6500K +brightness-day=1.0 +brightness-night=0.65 + +location-provider=manual +transition=0 + +[manual] +lat=39.9030 +lon=-85.9979 diff --git a/.config/selected_editor b/.config/selected_editor index 86d680f..6c700da 100644 --- a/.config/selected_editor +++ b/.config/selected_editor @@ -1,6 +1,6 @@ -SELECTED_EDITOR="emacsclient -a '' -f '$HOME/.emacs.d/server-$HOSTNAME/server' -c" +SELECTED_EDITOR="emacsclient -f '$HOME/.emacs.d/server-$HOSTNAME/server' -c" if [[ -n $SSH_CONNECTION ]]; then - SELECTED_EDITOR+=" -nw" + SELECTED_EDITOR+=' -nw' fi ALTERNATE_EDITOR='/usr/bin/vim' VISUAL="$SELECTED_EDITOR" diff --git a/.config/ssh/config b/.config/ssh/config index d60058f..4a58c28 100644 --- a/.config/ssh/config +++ b/.config/ssh/config @@ -4,21 +4,34 @@ Host * ControlPath ~/.runtime/%l/ssh-%r@%h:%p Compression yes +# Purdue ################################################### + Host lore HostName lore.cs.purdue.edu - User shumakl - Host data HostName data.cs.purdue.edu +Host *.cs.purdue.edu User shumakl -Host repo - Port 1863 - HostName repo.parabolagnulinux.org +# Parabola ################################################# -Host rshg054 +Host parabola.nu Port 1863 - HostName parabolagnulinux.org + User lukeshu + +# Personal ################################################# Host lukeshu.com Port 1863 + User lukeshu + +Host build64-par + Port 22 + User luke + ForwardX11 yes + ForwardX11Trusted yes + +Host build64-par-far + Port 1864 + HostName lukeshu.com + User luke diff --git a/.config/systemd/user/default.target.wants/batterymon.service b/.config/systemd/user/default.target.wants/batterymon.service deleted file mode 100644 index c8abc0d..0000000 --- a/.config/systemd/user/default.target.wants/batterymon.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Battery monitor - -[Service] -Type=simple -ExecStart=/usr/bin/batterymon 20 "amixer sset Master unmute 100%; espeak 'PLUG ME IN'; sleep 7;" - -[Install] -WantedBy=default.target diff --git a/.config/systemd/user/default.target.wants/emacs-daemon.service b/.config/systemd/user/default.target.wants/emacs-daemon.service index ef8f65f..e3a3cc0 100644..120000 --- a/.config/systemd/user/default.target.wants/emacs-daemon.service +++ b/.config/systemd/user/default.target.wants/emacs-daemon.service @@ -1,9 +1 @@ -[Unit] -Description=Emacs deamon - -[Service] -Type=forking -ExecStart=/bin/bash -l -c 'emacs --daemon' - -[Install] -WantedBy=default.target +../emacs-daemon.service
\ No newline at end of file diff --git a/.config/systemd/user/default.target.wants/gpg-agent.service b/.config/systemd/user/default.target.wants/gpg-agent.service deleted file mode 100644 index 93c12b0..0000000 --- a/.config/systemd/user/default.target.wants/gpg-agent.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description="GnuPG agent daemon" - -[Service] -Type=forking -ExecStart=/usr/bin/gpg-agent --daemon --write-env-file ${XDG_RUNTIME_DIR}/gpg - -[Install] -WantedBy=default.target diff --git a/.config/systemd/user/dunst@.service b/.config/systemd/user/dunst@.service new file mode 100644 index 0000000..568af3f --- /dev/null +++ b/.config/systemd/user/dunst@.service @@ -0,0 +1,10 @@ +[Unit] +Description=Dunst notification-daemon on X display %I +Documentation=man:dunst(1) +StopWhenUnneeded=true + +[Service] +Type=simple +Environment=DISPLAY=%I +ExecStart=/usr/bin/dunst +Restart=always diff --git a/.config/systemd/user/emacs-daemon.service b/.config/systemd/user/emacs-daemon.service new file mode 100644 index 0000000..279d83a --- /dev/null +++ b/.config/systemd/user/emacs-daemon.service @@ -0,0 +1,10 @@ +[Unit] +Description=Emacs deamon + +[Service] +Type=forking +ExecStart=/bin/bash -l -c 'emacs --daemon' +ExecStop=/bin/bash -l -c 'emacsclient -e "(kill-emacs)"' + +[Install] +WantedBy=default.target diff --git a/.config/systemd/user/lxpanel@.service b/.config/systemd/user/lxpanel@.service new file mode 100644 index 0000000..71e2114 --- /dev/null +++ b/.config/systemd/user/lxpanel@.service @@ -0,0 +1,11 @@ +[Unit] +Description=LXDE Desktop Panel on X display %I +Documentation=man:lxpanel(1) +StopWhenUnneeded=true +After=wm@%i.target + +[Service] +Type=simple +Environment=DISPLAY=%I +ExecStart=/usr/bin/lxpanel +Restart=always diff --git a/.config/systemd/user/maildirproc@.service b/.config/systemd/user/maildirproc@.service new file mode 100644 index 0000000..bdca746 --- /dev/null +++ b/.config/systemd/user/maildirproc@.service @@ -0,0 +1,10 @@ +[Unit] +Description=maildirproc mail filter + +[Service] +Type=simple +ExecStart=/usr/bin/maildirproc -r ${HOME}/.config/maildirproc/%I.rc +Restart=on-failure + +[Install] +WantedBy=default.target diff --git a/.config/systemd/user/rbar@.service b/.config/systemd/user/rbar@.service new file mode 100644 index 0000000..18d6201 --- /dev/null +++ b/.config/systemd/user/rbar@.service @@ -0,0 +1,7 @@ +[Unit] +Description=WMII rbar %I +StopWhenUnneeded=true + +[Service] +Type=simple +ExecStart=/usr/bin/bash -c '%h/.wmii-hg/rbar %I' diff --git a/.config/systemd/user/redshift@.service b/.config/systemd/user/redshift@.service new file mode 100644 index 0000000..b4ef3bb --- /dev/null +++ b/.config/systemd/user/redshift@.service @@ -0,0 +1,11 @@ +[Unit] +Description=Redshift display colour temperature adjustment on X display %I +Documentation=http://jonls.dk/redshift/ +StopWhenUnneeded=true + +[Service] +Type=simple +Environment=DISPLAY=%I +ExecStart=/usr/bin/redshift +ExecStopPost=/usr/bin/redshift -x +Restart=always diff --git a/.config/systemd/user/vncserver@.service b/.config/systemd/user/vncserver@.service new file mode 100644 index 0000000..2433977 --- /dev/null +++ b/.config/systemd/user/vncserver@.service @@ -0,0 +1,13 @@ +[Unit] +Description=VNC virtual desktop %I +Conflicts=x0vncserver@%i.service + +[Service] +Type=simple +Restart=always + +ExecStart=/bin/bash -l -c 'vncserver -fg %I' +ExecStopPost=/bin/rm /tmp/.X%I-lock /tmp/.X11-unix/X%I + +[Install] +WantedBy=default.target diff --git a/.config/systemd/user/wm@.target b/.config/systemd/user/wm@.target new file mode 100644 index 0000000..ac91fa1 --- /dev/null +++ b/.config/systemd/user/wm@.target @@ -0,0 +1,3 @@ +[Unit] +Description=Window Manager on display %I +Requires=wmii@%i.service diff --git a/.config/systemd/user/wmii@.service b/.config/systemd/user/wmii@.service new file mode 100644 index 0000000..0442fca --- /dev/null +++ b/.config/systemd/user/wmii@.service @@ -0,0 +1,14 @@ +[Unit] +Description=Window Manager Improved Improved on X display %I +Documentation=file:/usr/share/doc/wmii/wmii.pdf +Before=wm@%i.target +StopWhenUnneeded=true + +[Service] +# This assumes that you write READY=1 to $NOTIFY_SOCKET in wmiirc +Type=notify +NotifyAccess=all + +Environment=DISPLAY=%I +ExecStart=/usr/bin/bash -l -c 'exec 8>${XDG_RUNTIME_DIR}/x11-wm@%I; exec /usr/bin/wmii' +ExecStop=/usr/bin/wmiir xwrite /ctl Quit diff --git a/.config/systemd/user/wmii@.service.wants/lxpanel@.service b/.config/systemd/user/wmii@.service.wants/lxpanel@.service new file mode 120000 index 0000000..06ed03f --- /dev/null +++ b/.config/systemd/user/wmii@.service.wants/lxpanel@.service @@ -0,0 +1 @@ +../lxpanel@.service
\ No newline at end of file diff --git a/.config/systemd/user/wmii@.service.wants/rbar@97_acpi.service b/.config/systemd/user/wmii@.service.wants/rbar@97_acpi.service new file mode 120000 index 0000000..286989e --- /dev/null +++ b/.config/systemd/user/wmii@.service.wants/rbar@97_acpi.service @@ -0,0 +1 @@ +../rbar@.service
\ No newline at end of file diff --git a/.config/systemd/user/wmii@.service.wants/rbar@99_clock.service b/.config/systemd/user/wmii@.service.wants/rbar@99_clock.service new file mode 120000 index 0000000..286989e --- /dev/null +++ b/.config/systemd/user/wmii@.service.wants/rbar@99_clock.service @@ -0,0 +1 @@ +../rbar@.service
\ No newline at end of file diff --git a/.config/systemd/user/wmii@.service.wants/xcompmgr@.service b/.config/systemd/user/wmii@.service.wants/xcompmgr@.service new file mode 120000 index 0000000..be8518c --- /dev/null +++ b/.config/systemd/user/wmii@.service.wants/xcompmgr@.service @@ -0,0 +1 @@ +../xcompmgr@.service
\ No newline at end of file diff --git a/.config/systemd/user/x0vncserver@.service b/.config/systemd/user/x0vncserver@.service new file mode 100644 index 0000000..3ee349f --- /dev/null +++ b/.config/systemd/user/x0vncserver@.service @@ -0,0 +1,9 @@ +[Unit] +Description=VNC server for real X display %I +Conflicts=vncserver@%i.service +StopWhenUnneeded=true + +[Service] +Type=simple +ExecStart=/usr/bin/x0vncserver display=%I PasswordFile=%h/.vnc/passwd +Restart=always diff --git a/.config/systemd/user/xcompmgr@.service b/.config/systemd/user/xcompmgr@.service new file mode 100644 index 0000000..85decd2 --- /dev/null +++ b/.config/systemd/user/xcompmgr@.service @@ -0,0 +1,10 @@ +[Unit] +Description=Composite Window-Effects Manger on X display %I +Documentation=man:xcompmgr(1) +StopWhenUnneeded=true + +[Service] +Type=simple +Environment=DISPLAY=%I +ExecStart=/usr/bin/xcompmgr +Restart=always diff --git a/.config/wmii-hg/autostart b/.config/wmii-hg/autostart deleted file mode 100755 index cd040b3..0000000 --- a/.config/wmii-hg/autostart +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -. include.sh - -daemon xcompmgr &> /dev/null -daemon lxpanel &> /dev/null -daemon nm-applet &> /dev/null -daemon dunst &> /dev/null -daemon clipit -dn &> /dev/null - -#Action rbar_cpu 01 & -#Action rbar_wifi 97 & -#Action rbar_battery 98 & -Action rbar_clock 99 & diff --git a/.config/wmii-hg/config.sh b/.config/wmii-hg/config.sh index 4889aac..7ef8305 100644 --- a/.config/wmii-hg/config.sh +++ b/.config/wmii-hg/config.sh @@ -7,13 +7,13 @@ LEFT=b RIGHT=f HIST="$XDG_CACHE_HOME/wmii/history" -mkdir -p "${HIST%/*}" +mkdir -p -- "${HIST%/*}" # Colors tuples: "<text> <background> <border>" . theme-tango-dark Event() { - event=$1; shift; + local event=$1; shift; case "$event" in ## Mouse event meanings: ## MouseDown = mouse down @@ -25,6 +25,8 @@ Event() { ## 1 = left ## 2 = middle ## 3 = right + ## 4 = scroll up + ## 5 = scroll down ## Custom (non-WMII-generated) events WmiircStart) ## No args @@ -36,22 +38,18 @@ Event() { < "`conffile rules`" expand_variables >> $WMII_DIR/rules < "`conffile ctl-init`" expand_variables >> $WMII_DIR/ctl scansection Key | cut -sf2 >> $WMII_DIR/keys - # Configure X11 - hsetroot -solid "$WMII_BACKGROUND" + #hsetroot -solid "$WMII_BACKGROUND" # Clear the LBar and RBar find $WMII_DIR/{l,r}bar -type f -delete # Populate the LBar by emulating [Create|Focus]Tag events - seltag=`sed 1q $WMII_DIR/tag/sel/ctl` - lstags | while read tag; do + local tag seltag="$(sed 1q $WMII_DIR/tag/sel/ctl)" + while read -r tag; do Event CreateTag "$tag" if [ "$tag" = "$seltag" ]; then Event FocusTag "$tag" fi - done - - # Run the autostart action - Action autostart 2>/dev/null & + done < <(lstags) ;; WmiircQuit) ## No args echo ' ==> Stopping wmiirc' @@ -65,11 +63,13 @@ Event() { echo " -> Unmounting WMII_DIR=$WMII_DIR..." fusermount -u "$WMII_DIR" echo " -> Removing mountpoint WMII_DIR=$WMII_DIR..." - rmdir "$WMII_DIR";; + rmdir -p "$WMII_DIR" 2>/dev/null;; ## WMII-meta events Quit) ## No args - echo ' ==> wmii quit: unmounting' trap - EXIT + if [ -S "$NOTIFY_SOCKET" ]; then + echo STOPPING=1 | socat STDIO UNIX-SENDTO:"$NOTIFY_SOCKET" + fi Event WmiircUnmount Event WmiircQuit;; Warning) ## $@=string @@ -99,26 +99,29 @@ Event() { NotUrgent) ## $1=client $2=[Manager|Client] ;; ClientMouseDown) ## $1=client $2=button - client=$1 - button=$2 + local client=$1 + local button=$2 case $button in 1) ;; 2) ;; 3) { - case `wmii9menu Delete Fullscreen` in + case $(wmii9menu Delete Fullscreen) in Delete) echo kill >> $WMII_DIR/client/$client/ctl;; Fullscreen) echo Fullscreen on >> $WMII_DIR/client/$1/ctl;; esac }& ;; + 4) ;; + 5) ;; esac;; ClientClick) ## $1=client $2=button ;; Unresponsive) ## $1=client - client=$1 - client_name=`cat $WMII_DIR/client/$client/label` + local client=$1 + local client_name=$(< $WMII_DIR/client/$client/label) + local msg resp msg="The client \`${client_name}' is not responding." msg+=" What would you like to do?" { @@ -138,13 +141,13 @@ Event() { DestroyTag) ## $1=tag rm $WMII_DIR/lbar/$1;; FocusTag) ## $1=tag - echo colors "$WMII_FOCUSCOLORS" >> $WMII_DIR/lbar/$1;; + echo colors "$WMII_FOCUSCOLORS" >> $WMII_DIR/lbar/$1;; UnfocusTag) ## $1=tag - echo colors "$WMII_NORMCOLORS" >> $WMII_DIR/lbar/$1;; - UrgentTag) ## $1=tag $2=[Manager|Client] - echo "$WMII_URGENTCOLORS" >> $WMII_DIR/lbar/$1;; - NotUrgentTag) ## $1=tag $2=[Manager|Client] - echo "$WMII_NORMCOLORS" >> $WMII_DIR/lbar/$1;; + echo colors "$WMII_NORMCOLORS" >> $WMII_DIR/lbar/$1;; + UrgentTag) ## $1=[Manager|Client] $2=tag + echo colors "$WMII_URGENTCOLORS" >> $WMII_DIR/lbar/$2;; + NotUrgentTag) ## $1=[Manager|Client] $2=tag + echo colors "$WMII_NORMCOLORS" >> $WMII_DIR/lbar/$2;; ## LeftBar events (usually tag buttons) LeftBarMouseDown) ## $1=button $2=bar_item @@ -157,17 +160,20 @@ Event() { ## RightBar events RightBarMouseDown) ## $1=button $2=bar_item - ;; + local button=$1 + local item=$2 + local name=${item#[0-9][0-9]_} + name=${name%.*} + Action "rbar_$name" "$button" & ;; RightBarClick) ## $1=button $2=bar_item ;; RightMouseDND) ## $1=button $2=bar_item Event RightBarClick "$@";; esac -} ## End Event +} -# Key Bindings Key() { - key=$1 + local key=$1 case "$key" in ## Moving around @@ -218,33 +224,34 @@ Key() { ## Running programs $MODKEY-a) ## Open wmii actions menu - Action $(path_ls $WMII_CONFPATH | wimenu -h "${HIST}.actions" -n 5000) & ;; + local action + action="$(path_ls "$WMII_CONFPATH" | wimenu -h "${HIST}.actions" -n 5000)" || return + Action "$action" & ;; $MODKEY-x) ## Open program menu - PATH=$_PATH setsid $(path_ls $PATH | wimenu -h "${HIST}.progs" -n 5000) & ;; + local command + command="$(path_ls "$_PATH" | wimenu -h "${HIST}.progs" -n 5000)" || return + ( PATH=$_PATH; unset _PATH NOTIFY_SOCKET; exec $command ) & ;; $MODKEY-Return) ## Launch a terminal - PATH=$_PATH setsid x-terminal-emulator & ;; + ( PATH=$_PATH; unset _PATH NOTIFY_SOCKET; exec x-terminal-emulator ) & ;; ## Tag actions $MODKEY-t) ## Change to another tag - { - tag=$(lstags | wimenu -h "${HIST}.tags" -n 50) || return - echo view $tag >> $WMII_DIR/ctl - }& ;; + local tag + tag=$(lstags | wimenu -h "${HIST}.tags" -n 50) || return + echo view "$tag" >> $WMII_DIR/ctl;; $MODKEY-Shift-t) ## Retag the selected client + local sel tag sel=$(sed 1q $WMII_DIR/client/sel/ctl) - { - tag=$(lstags | wimenu -h "${HIST}.tags" -n 50) || return - echo "$tag" >> $WMII_DIR/client/$sel/tags - }& ;; + tag=$(lstags | wimenu -h "${HIST}.tags" -n 50) || return + echo "$tag" >> $WMII_DIR/client/$sel/tags;; esac -} ## End Key +} Action() { - prog=`path_which "$WMII_CONFPATH" $1`; shift + local prog=$(path_which "$WMII_CONFPATH" "$1"); shift if [ -n "$prog" ]; then - "$prog" "$@" - return $? + exec "$prog" "$@" else - return 1 + exec false fi -} ## End Action +} diff --git a/.config/wmii-hg/fixes.sh b/.config/wmii-hg/fixes.sh deleted file mode 100644 index 5858859..0000000 --- a/.config/wmii-hg/fixes.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# Fix various deficiencies in either the shell or the filesystem - -## -# Usage: ls DIRECTORY -# Linux's 9p kernel module sometimes omits entries in directory listings -## -unalias ls &>/dev/null -ls() { - local real_ls=("$(which ls)" -1F) - [ $# = 0 ] && set -- "$PWD" - f="${1/#${WMII_DIR}/}" - if [ "$f" = "$1" ]; then - "${real_ls[@]}" "$f" - else - wmiir ls "$f" - fi -} - -## -# Usage: setsid cmd [arguments...] -# I like wmiir's setsid better than linux-utils' -## -setsid() { wmiir setsid "$@"; } diff --git a/.config/wmii-hg/quit b/.config/wmii-hg/quit index 27d9052..341468e 100755 --- a/.config/wmii-hg/quit +++ b/.config/wmii-hg/quit @@ -1,3 +1,7 @@ #!/bin/bash -. include.sh -echo quit >> $WMII_DIR/ctl +if type systemctl &>/dev/null; then + systemctl --user stop "wmii@$DISPLAY.service" +else + . include.sh + echo quit >> $WMII_DIR/ctl +fi diff --git a/.config/wmii-hg/rbar b/.config/wmii-hg/rbar new file mode 100755 index 0000000..9aaa485 --- /dev/null +++ b/.config/wmii-hg/rbar @@ -0,0 +1,9 @@ +#!/bin/bash +IFS=: +read -r name prefix DISPLAY <<<"$1" +export DISPLAY + +id=$1 +name=${id#[0-9][0-9]_} + +exec "$0"_"$name" "${id}" diff --git a/.config/wmii-hg/rbar.sh b/.config/wmii-hg/rbar.sh new file mode 100644 index 0000000..4f6faf1 --- /dev/null +++ b/.config/wmii-hg/rbar.sh @@ -0,0 +1,20 @@ +#!/bin/bash +setup_trap() { + trap "rm -f -- ${HOME}/n/wmii*/rbar/${1}" EXIT +} + +write() { + dirs=("${HOME}"/n/wmii*/rbar/) + sponge|tee -a "${dirs[@]/%/${1}}" > /dev/null +} + +set -eE +shopt -s nullglob +case "$1" in + 1) left-click;; + 2) middle-click;; + 3) right-click;; + 4) scroll-up;; + 5) scroll-down;; + [0-9][0-9]_*) update "$1";; +esac diff --git a/.config/wmii-hg/rbar_acpi b/.config/wmii-hg/rbar_acpi new file mode 100755 index 0000000..bdcdf0f --- /dev/null +++ b/.config/wmii-hg/rbar_acpi @@ -0,0 +1,18 @@ +#!/bin/bash + +update() { + id=$1 + setup_trap "${id}.*" + + while true; do + acpi -bt | sed -r \ + -e 's/^([A-Z])[a-z]+ ([0-9]+):/\1\2:/' \ + -e 's/\s*degrees\s*/°/g' | + cat -n | while read -r n line; do + printf "label %s\n" "$line" | write "${id}.${n}" + done + sleep 1 + done +} + +. "$(dirname "$0")/rbar.sh" diff --git a/.config/wmii-hg/rbar_battery b/.config/wmii-hg/rbar_battery deleted file mode 100755 index f632f7e..0000000 --- a/.config/wmii-hg/rbar_battery +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -. include.sh - -priority=$1 - -while connected_to_x_server; do - printf 'label %s\n' "$(acpi -b)" >> "$WMII_DIR/rbar/${priority}_battery" - sleep 1 -done diff --git a/.config/wmii-hg/rbar_clock b/.config/wmii-hg/rbar_clock index 6aecb92..a09f016 100755 --- a/.config/wmii-hg/rbar_clock +++ b/.config/wmii-hg/rbar_clock @@ -1,9 +1,16 @@ #!/bin/bash -. include.sh -priority=$1 +update() { + id=$1 + setup_trap "$id" -while connected_to_x_server; do - printf 'label %s\n' "$(date)" >> "$WMII_DIR/rbar/${priority}_clock" - sleep .5 -done + while true; do + { + printf 'label ' + date +'%a, %F %T %Z(%:::z)' + } | write "$id" + sleep .5 + done +} + +. "$(dirname "$0")/rbar.sh" diff --git a/.config/wmii-hg/rbar_cpu b/.config/wmii-hg/rbar_cpu deleted file mode 100755 index 5531e60..0000000 --- a/.config/wmii-hg/rbar_cpu +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -. include.sh - -priority=$1 - -while connected_to_x_server; do - # This doesn't work for me, it shows capacity - #echo -n 'Core MHz:' $(cat /proc/cpuinfo | grep 'cpu MHz' | sed 's/.*: //g; s/\..*//g;') >> "$WMII_DIR/rbar/${priority}_cpu" - # This actually displays %idle - echo 'label CPU: [ '$(tail -n3 ~/tmp/cputime|sed -ur 's/\s\s+/\t/g'|cut -f2,11|sed 's/\t\(.*\)/(\1)/')' ]' >> "$WMII_DIR/rbar/${priority}_cpu" - sleep 1 -done diff --git a/.config/wmii-hg/rbar_wifi b/.config/wmii-hg/rbar_wifi index 18395a3..195df7c 100755 --- a/.config/wmii-hg/rbar_wifi +++ b/.config/wmii-hg/rbar_wifi @@ -1,9 +1,65 @@ #!/bin/bash -. include.sh -priority=$1 +iwinfo() { + local interface=$1 + iwconfig "$interface" | + sed -r 's/ {2,}/\n/g' | + sed -e '/^\s*$/d' -e 's/:\s*/=/' \ + -e '1s/^/Interface=/' \ + -e '2s/^/MAC Protocol=/' +} -while connected_to_x_server; do - echo 'label Wlan0:' $(iwconfig wlan0 | sed 's/ /\n/g' | grep Quality) >> "$WMII_DIR/rbar/${priority}_wifi" - sleep 1 -done +update() { + local id + id=$1 + setup_trap "$id" + while true; do + { + printf 'label ' + iwinfo wlp2s0|grep -E '^(ESSID|Link Quality)='|sed 'N;s/\n/ | /' + } | write "$id" + sleep 1 + done +} + +right-click() { + local list cur item + + list=() + IFS='' + while read -r line; do + list+=("$line") + done < <({ netctl-auto list; printf '> %s\n' 'New Network' 'Disable All' 'Enable All';} | sed 's,$,$,' | column -s '$' -t) + + cur='' + for item in "${list[@]}"; do + if [[ "$item" = '* '* ]]; then + cur="$item" + fi + done + + item=$(wmii9menu -i "$cur" "${list[@]}") + case "$item" in + '') + # Nothing selected + ;; + '* '*) + # Already selected; do nothing + ;; + '> New Network'*) + urxvt +sb -title wifi-menu -e sudo wifi-menu + ;; + '> Disable All'*) + sudo netctl-auto disable-all + ;; + '> Enable All'*) + sudo netctl-auto enable-all + ;; + *) + # NB: do NOT quote $item; we need to strip whitespace + sudo netctl-auto switch-to $item + ;; + esac +} + +. "$(dirname "$0")/rbar.sh" diff --git a/.config/wmii-hg/rules b/.config/wmii-hg/rules index cf735c9..3576983 100644 --- a/.config/wmii-hg/rules +++ b/.config/wmii-hg/rules @@ -4,5 +4,7 @@ /nm-applet/ floating=off +/^FLTK:FLTK:/ floating=always + /Emacs|Navigator/ force-tags=+sel floating=never /.*/ floating=off diff --git a/.config/wmii-hg/theme-tango b/.config/wmii-hg/theme-tango index e0e35d4..f4c20a2 100644 --- a/.config/wmii-hg/theme-tango +++ b/.config/wmii-hg/theme-tango @@ -7,4 +7,3 @@ TANGO_plum=( "#ad7fa8" "#75507b" "#5c3566") TANGO_red=( "#ef2929" "#cc0000" "#a40000") TANGO_alum=( "#eeeeec" "#d3d7cf" "#babdb6" "#888a85" "#555753" "#2e3436") - diff --git a/.config/wmii-hg/util.sh b/.config/wmii-hg/util.sh index 71dbc41..b28a3b6 100644 --- a/.config/wmii-hg/util.sh +++ b/.config/wmii-hg/util.sh @@ -1,8 +1,5 @@ #!/bin/bash -# I moved "fixes" into a separate file because it isn't so much configuration... -. fixes.sh - ################################################################################ # Added shell features # ################################################################################ @@ -25,17 +22,17 @@ dquote() { # Usage: expand_variables # Expands variables read from /dev/stdin ## -expand_variables() { - while read; do - eval printf "'%s\n'" "$(dquote "$REPLY")" +expand_variables() ( + IFS='' + while read -r line; do + eval printf "'%s\n'" "$(dquote "$line")" done -} +) is_mounted() { local dir="$(readlink -m $1)" local mntpnt="$(cut -d' ' -f2 /proc/mounts|grep -Fx -- "$dir")" [[ $dir = "$mntpnt" ]] - return $? } ################################################################################ @@ -72,7 +69,7 @@ path_which() { # Lists wmii tags ## lstags() { - ls "$WMII_DIR/tag" | sed -e 's@/$@@' -e '/^sel$/d' + ls "$WMII_DIR/tag" | sed -e 's,/$,,' -e '/^sel$/d' } ################################################################################ @@ -85,7 +82,6 @@ lstags() { ## connected_to_x_server() { xdpyinfo &>/dev/null - return $? } ################################################################################ @@ -93,32 +89,25 @@ connected_to_x_server() { ################################################################################ ## -# Usage: scansection [SECTION] +# Usage: scansection SECTION # Reads the doc comments from a section of wmiirc. -# If SECTION is not given, it reads all doc comments. ## scansection() { - local file=$(conffile config.sh) local sec=$1 - local tmp=$(mktemp --tmpdir wmii-scansecion.XXXXXXXXXX) - # Isolate the sections we want. - if [ -n "$sec" ]; then - # Find the section - < "$file" sed -n "/^\s*$sec\s*()/,/##\s*End $sec/p" | sed '1d;$d'> "$tmp" - else - # Remove extra lines that mark the end of a section - < "$file" sed "/\s*}\s*##\s*End\s/d" > "$tmp" - fi - < "$tmp" sed -n '/##/p' | while read; do - var="$(echo "$REPLY" | sed -nr 's/^\s*(.*)\)\s*##.*/\1/p')" - comment="$(echo "$REPLY" | sed -r 's/.*## ?//')" - if [ -z "$var" ]; then + + local file=$(conffile config.sh) + # Isolate the section we want. + < "$file" sed -n "/^\s*$sec\s*()/,/^}/{ /##/p }" | + # Parse each line. + while read -r line; do + symbol="$(sed -nr 's/^\s*(.*)\)\s*##.*/\1/p' <<<"$line")" + comment="$(sed -r 's/.*## ?//' <<<"$line")" + if [ -z "$symbol" ]; then printf '%s\n' "$comment" else - printf '\t%s\t%s\n' "$(echo "$var"|expand_variables)" "$comment" + printf '\t%s\t%s\n' "$(expand_variables <<<"$symbol")" "$comment" fi done - rm -- "$tmp" } ## diff --git a/.config/wmii-hg/wmiirc b/.config/wmii-hg/wmiirc index a6bc4b4..6fd348f 100755 --- a/.config/wmii-hg/wmiirc +++ b/.config/wmii-hg/wmiirc @@ -1,15 +1,24 @@ #!/bin/bash -export _PATH="$PATH" -export PATH="$WMII_CONFPATH:$PATH" +unset WMII_NAMESPACE +unset WMII_DIR + +if [[ -z $_PATH ]]; then + export _PATH="$PATH" + export PATH="$WMII_CONFPATH:$PATH" +fi . include.sh wmiir xwrite /event WmiircQuit # close any existing wmiirc's Event WmiircStart +# Notify systemd that we're ready +if [ -S "$NOTIFY_SOCKET" ]; then + echo READY=1 | socat STDIO UNIX-SENDTO:"$NOTIFY_SOCKET" +fi trap "Event Quit" EXIT -wmiir read /event 2>/dev/null | while read event; do +while read -r event; do Event $event -done +done < <(wmiir read /event 2>/dev/null) @@ -1,6 +1,7 @@ # DO NOT EDIT! This file will be overwritten by LXAppearance. # Any customization should be done in ~/.gtkrc-2.0.mine instead. +include "/home/luke/.gtkrc-2.0.mine" gtk-theme-name="oxygen-gtk" gtk-icon-theme-name="oxygen" gtk-font-name="Sans 10" @@ -16,4 +17,3 @@ gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle="hintfull" gtk-xft-rgba="rgb" -include "/home/luke/.gtkrc-2.0.mine" diff --git a/.gtkrc-2.0.mine b/.gtkrc-2.0.mine index 4e2ef9a..3cb099a 100644 --- a/.gtkrc-2.0.mine +++ b/.gtkrc-2.0.mine @@ -1 +1 @@ -gtk-fallback-icon-theme="gnome" +gtk-fallback-icon-theme="mate" diff --git a/.local/.gitignore b/.local/.gitignore new file mode 100644 index 0000000..8d0c87d --- /dev/null +++ b/.local/.gitignore @@ -0,0 +1 @@ +/share/ diff --git a/.local/bin/config-path b/.local/bin/config-path index d0afa4a..7cd1fcd 100755 --- a/.local/bin/config-path +++ b/.local/bin/config-path @@ -3,17 +3,13 @@ # All the prefixes to consider prefixes=( "$HOME" - "$HOME/.local.`uname -m`" + "$HOME/.local.$(uname -m)" "$HOME/.local" - "$HOME/.prefix.`uname -m`" + "$HOME/.prefix.$(uname -m)" "$HOME/.prefix" "$HOME"/.gem/ruby/* ) -###################################################################### - -IFS=: - in_array() { local needle=$1; shift local haystack=("$@") @@ -46,32 +42,33 @@ var_done() { declare -p $1 } -###################################################################### - -# Import existing values -var_init PATH -var_init MANPATH -var_init LD_LIBRARY_PATH -var_init RUBYLIB -var_init PERL5LIB - -# Scan through prefixes -for prefix in "${prefixes[@]}"; do - var_add PATH "$prefix/bin" "$prefix/sbin" - var_add MANPATH "$prefix/share/man" - var_add LD_LIBRARY_PATH "$prefix"/lib{,32,64} - var_add RUBYLIB "$prefix"/lib{,32,64} - var_add PERL5LIB "$prefix"/lib{,32,64}/perl5 -done +main() { + IFS=: + # Import existing values + var_init PATH + var_init MANPATH + var_init LD_LIBRARY_PATH + var_init RUBYLIB + var_init PERL5LIB + # Scan through prefixes + for prefix in "${prefixes[@]}"; do + var_add PATH "$prefix/bin" "$prefix/sbin" + var_add MANPATH "$prefix/share/man" + var_add LD_LIBRARY_PATH "$prefix"/lib{,32,64} + var_add RUBYLIB "$prefix"/lib{,32,64} + var_add PERL5LIB "$prefix"/lib{,32,64}/perl5 + done + # Finally, print the values + # The `sed` bit here is the only time we call an external program + { + var_done PATH + var_done MANPATH + var_done LD_LIBRARY_PATH + var_done RUBYLIB + var_done PERL5LIB + } | sed 's/^declare \(-\S* \)*//' +} -# Finally, print our values -# The `sed` bit here is the only time we call an external program -{ - var_done PATH - var_done MANPATH - var_done LD_LIBRARY_PATH - var_done RUBYLIB - var_done PERL5LIB -} | sed 's/^declare \(-\S* \)*//' +main "$@" diff --git a/.local/bin/pick b/.local/bin/pick index ed2d44d..7458041 100755 --- a/.local/bin/pick +++ b/.local/bin/pick @@ -19,8 +19,8 @@ if [[ $1 = -s ]]; then shift # Scan to find a running instance for prog in "$@"; do - if [[ -n "`pgrep $prog`" ]]; then - printf '%s\n' "$prog" + if [[ -n "$(pgrep "${prog%% *}")" ]]; then + printf -- '%s\n' "$prog" exit 0 fi done @@ -28,11 +28,11 @@ fi # Scan to find one that is installed for prog in "$@"; do - if [[ -x "`which $prog 2>/dev/null`" ]]; then - printf '%s\n' "$prog" + if [[ -x "$(which "${prog%% *}" 2>/dev/null)" ]]; then + printf -- '%s\n' "$prog" exit 0 fi done -printf '%s\n' "$cmd: no suitable program found" +printf -- '%s\n' "$cmd: no suitable program found" >&2 exit 1 diff --git a/.local/bin/x-pdf b/.local/bin/x-pdf index 1b23a3d..8f9ef60 100755 --- a/.local/bin/x-pdf +++ b/.local/bin/x-pdf @@ -1,4 +1,3 @@ #!/bin/sh -`pick evince okular xpdf` "$@" -exit $? +exec $(pick atril zathura mupdf okular evince xpdf 'emacsclient -c') "$@" diff --git a/.local/bin/x-terminal-emulator b/.local/bin/x-terminal-emulator index 049b081..2e158cf 100755 --- a/.local/bin/x-terminal-emulator +++ b/.local/bin/x-terminal-emulator @@ -1,4 +1,3 @@ #!/bin/sh -`pick emacsterm urxvt gnome-terminal xterm` "$@" -exit $? +exec $(pick 'emacsterm -c' 'urxvt' 'xterm' 'gnome-terminal') "$@" diff --git a/.local/bin/x-www-browser b/.local/bin/x-www-browser index bbd8943..b0b05e0 100755 --- a/.local/bin/x-www-browser +++ b/.local/bin/x-www-browser @@ -1,4 +1,3 @@ #!/bin/sh -`pick -s conkeror iceweasel icecat firefox` "$@" -exit $? +exec $(pick -s iceweasel icecat firefox conkeror) "$@" diff --git a/.local/bin/xmessage b/.local/bin/xmessage index bd30b5e..46647e0 100755 --- a/.local/bin/xmessage +++ b/.local/bin/xmessage @@ -1,2 +1,2 @@ #!/bin/sh -gxmessage $@ -fn 'Monospace' +exec gxmessage "$@" -fn 'Monospace' diff --git a/.local/lib/xdg.sh b/.local/lib/xdg.sh deleted file mode 100644 index 2241d2e..0000000 --- a/.local/lib/xdg.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# This should be readable by /bin/sh, but I'm going to assume bash. - -# Sets up XDG environmental variables, so programs using them don't have to -# worry about checking if they are set. -# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html - -[[ -n $XDG_DATA_HOME ]] || export XDG_DATA_HOME="$HOME/.local/share" -[[ -n $XDG_CONFIG_HOME ]] || export XDG_CONFIG_HOME="$HOME/.config" -[[ -n $XDG_DATA_DIRS ]] || export XDG_DATA_DIRS="/usr/local/share/:/usr/share/" -[[ -n $XDG_CONFIG_DIRS ]] || export XDG_CONFIG_DIRS="/etc/xdg" -[[ -n $XDG_CACHE_HOME ]] || export XDG_CACHE_HOME="$HOME/.cache" - -# Check if XDG_RUNTIME_DIR is set, but has a bogus setting -if [[ -n $XDG_RUNTIME_DIR ]] && [[ ! -d $XDG_RUNTIME_DIR ]]; then - unset XDG_RUNTIME_DIR -fi - -# Set XDG_RUNTIME_DIR if we can -if [[ -z $XDG_RUNTIME_DIR ]] && [[ -n $TMPDIR ]]; then - export XDG_RUNTIME_DIR="$TMPDIR/xdg-runtime" - install -dm0700 "$XDG_RUNTIME_DIR" -fi |