aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--IDEAS.md2
-rw-r--r--Makefile125
-rw-r--r--README.md29
-rw-r--r--VERSION4
-rwxr-xr-xbin/qat.sh12
-rw-r--r--check/sh.sh4
-rw-r--r--git/config.mi5 (renamed from git/gitconfig.mi5)2
-rw-r--r--i3/config2
-rw-r--r--less/profile.d/less.sh2
-rw-r--r--lint/sh.sh4
-rw-r--r--man/man1/qat.1df19
-rw-r--r--man/man7/dotfiles.7df17
-rw-r--r--mutt/muttrc6
-rwxr-xr-xmutt/muttrc.d/src17
-rw-r--r--perlcritic/profile.d/perlcritic.sh2
-rw-r--r--perltidy/profile.d/perltidy.sh2
-rw-r--r--plenv/shrc.d/plenv.sh1
-rw-r--r--pyenv/profile.d/pyenv.sh5
-rw-r--r--pyenv/shrc.d/pyenv.sh18
-rw-r--r--sh/profile.d/systemd.sh4
-rw-r--r--sh/profile.d/visual.sh15
-rw-r--r--tidy/profile.d/tidy.sh2
-rw-r--r--tmux/tmux.conf2
-rw-r--r--vim/filetype.vim1
-rw-r--r--vim/vimrc.stub15
26 files changed, 216 insertions, 102 deletions
diff --git a/.gitignore b/.gitignore
index b2601fbc..6f90d859 100644
--- a/.gitignore
+++ b/.gitignore
@@ -98,6 +98,7 @@
/bin/pst.sh
/bin/pvi
/bin/pwg
+/bin/qat
/bin/quo
/bin/rep
/bin/rfcf
@@ -175,10 +176,11 @@
/games/uuu
/games/xyzzy
/games/zs
-/git/gitconfig
-/git/gitconfig.m4
+/git/config
+/git/config.m4
/git/template/hooks/pre-commit
/git/template/hooks/prepare-commit-msg
/git/template/hooks/post-update
/include/mktd.m4
+/less/less
/urxvt/ext/select
diff --git a/IDEAS.md b/IDEAS.md
index 7622dd97..092a604c 100644
--- a/IDEAS.md
+++ b/IDEAS.md
@@ -3,8 +3,6 @@ Ideas
* A wrapper `ksw(1df)` (kill-switch) that traps `SIGINT` to kill a called
program or loop immediately, rather than aborting a loop (is this possible?)
-* A wrapper `sil(1df)` or `nec(1df)` to turn `stty -echo` off for the duration
- of a paste?
* I can probably share my `psql()` completions/shortcuts after sanitizing them
a bit
* Wouldn't be too hard to add some HTTP BASIC authentication to `ix(1df)` to
diff --git a/Makefile b/Makefile
index 498af984..d27ad92e 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,9 @@
install-newsboat \
install-perlcritic \
install-perltidy \
+ install-plenv \
install-psql \
+ install-pyenv \
install-readline \
install-sh \
install-subversion \
@@ -88,6 +90,10 @@
.SUFFIXES:
.SUFFIXES: .awk .bash .m4 .mi5 .pl .sed .sh
+XDG_CACHE_HOME = $(HOME)/.cache
+XDG_CONFIG_HOME = $(HOME)/.config
+XDG_DATA_HOME = $(HOME)/.local/share
+
NAME = 'Tom Ryder'
EMAIL = tom@sanctum.geek.nz
KEY = FA09C06E1B670CD0B2F5DE60C14286EA77BB8872
@@ -179,6 +185,7 @@ BINS = bin/ap \
bin/pst \
bin/pvi \
bin/pwg \
+ bin/qat \
bin/quo \
bin/rep \
bin/rfcf \
@@ -275,7 +282,7 @@ GIT_TEMPLATE_HOOKS = git/template/hooks/post-update \
git/template/hooks/pre-commit \
git/template/hooks/prepare-commit-msg
-all: $(BINS) git/gitconfig $(GIT_TEMPLATE_HOOKS)
+all: $(BINS) git/config less/less $(GIT_TEMPLATE_HOOKS)
clean distclean:
rm -f -- \
@@ -286,9 +293,10 @@ clean distclean:
$(GIT_TEMPLATE_HOOKS) \
dillo/dillorc \
dillo/dillorc.m4 \
- git/gitconfig \
- git/gitconfig.m4 \
+ git/config \
+ git/config.m4 \
include/mktd.m4 \
+ less/less \
urxvt/ext/select \
vim/dist/*
@@ -335,13 +343,17 @@ dillo/dillorc: dillo/dillorc.m4
-D HOME=$(HOME) \
dillo/dillorc.m4 > $@
-git/gitconfig: git/gitconfig.m4
+git/config: git/config.m4
m4 \
-D NAME=$(NAME) \
-D EMAIL=$(EMAIL) \
-D KEY=$(KEY) \
-D SENDMAIL=$(SENDMAIL) \
- git/gitconfig.m4 > $@
+ -D XDG_CONFIG_HOME=$(XDG_CONFIG_HOME) \
+ git/config.m4 > $@
+
+less/less: less/lesskey
+ lesskey --output $@ less/lesskey
MAILDIR = $(HOME)/Mail
@@ -371,8 +383,8 @@ install-bash: check-bash install-sh
cp -p -- bash/bash_logout $(HOME)/.bash_logout
install-bash-completion: install-bash
- mkdir -p -- $(HOME)/.bash_completion.d $(HOME)/.config
- cp -p -- bash/bash_completion $(HOME)/.config
+ mkdir -p -- $(HOME)/.bash_completion.d $(XDG_CONFIG_HOME)
+ cp -p -- bash/bash_completion $(XDG_CONFIG_HOME)
cp -p -- bash/bash_completion.d/* $(HOME)/.bash_completion.d
install-bin: $(BINS) install-bin-man
@@ -381,9 +393,9 @@ install-bin: $(BINS) install-bin-man
-exec cp -p -- {} $(HOME)/.local/bin \;
install-bin-man:
- mkdir -p -- $(HOME)/.local/share/man/man1 $(HOME)/.local/share/man/man8
- cp -p -- man/man1/*.1df $(HOME)/.local/share/man/man1
- cp -p -- man/man8/*.8df $(HOME)/.local/share/man/man8
+ mkdir -p -- $(XDG_DATA_HOME)/man/man1 $(XDG_DATA_HOME)/man/man8
+ cp -p -- man/man1/*.1df $(XDG_DATA_HOME)/man/man1
+ cp -p -- man/man8/*.8df $(XDG_DATA_HOME)/man/man8
install-curl:
cp -p -- curl/curlrc $(HOME)/.curlrc
@@ -393,8 +405,8 @@ install-dillo: dillo/dillorc install-x
cp -p -- dillo/dillorc $(HOME)/.dillo/dillorc
install-dunst: install-x
- mkdir -p -- $(HOME)/.config/dunst
- cp -p -- dunst/dunstrc $(HOME)/.config/dunst
+ mkdir -p -- $(XDG_CONFIG_HOME)/dunst
+ cp -p -- dunst/dunstrc $(XDG_CONFIG_HOME)/dunst
install-emacs: emacs/bin/emacsm install-sh
mkdir -p -- $(HOME)/.local/bin
@@ -416,17 +428,18 @@ install-games: $(GAMES) install-games-man
-exec cp -p -- {} $(HOME)/.local/games \;
install-games-man:
- mkdir -p -- $(HOME)/.local/share/man/man6
- cp -p -- man/man6/*.6df $(HOME)/.local/share/man/man6
+ mkdir -p -- $(XDG_DATA_HOME)/man/man6
+ cp -p -- man/man6/*.6df $(XDG_DATA_HOME)/man/man6
-install-git: git/gitconfig $(GIT_TEMPLATE_HOOKS)
- cp -p -- git/gitconfig $(HOME)/.gitconfig
+install-git: git/config $(GIT_TEMPLATE_HOOKS)
+ mkdir -p -- $(XDG_CONFIG_HOME)/git
+ cp -p -- git/config $(XDG_CONFIG_HOME)/git/config
find git/template \
-type d -exec sh -c 'mkdir -p -- \
- $(HOME)/.git-template"$${1#git/template}"' \
+ $(XDG_CONFIG_HOME)/git/template"$${1#git/template}"' \
_ {} \; \
-o ! -name '*.*' -exec sh -c 'cp -p -- "$$1" \
- $(HOME)/.git-template"$${1#git/template}"' \
+ $(XDG_CONFIG_HOME)/git/template"$${1#git/template}"' \
_ {} \;
install-gnupg:
@@ -434,28 +447,30 @@ install-gnupg:
cp -p -- gnupg/*.conf $(HOME)/.gnupg
install-gtk:
- mkdir -p -- $(HOME)/.config/gtk-3.0
+ mkdir -p -- $(XDG_CONFIG_HOME)/gtk-3.0
cp -p -- gtk/gtkrc-2.0 $(HOME)/.gtkrc-2.0
- cp -p -- gtk/gtk-3.0/settings.ini $(HOME)/.config/gtk-3.0
+ cp -p -- gtk/gtk-3.0/settings.ini $(XDG_CONFIG_HOME)/gtk-3.0
install-i3: install-x
- mkdir -p -- $(HOME)/.i3
- cp -p -- i3/* $(HOME)/.i3
+ mkdir -p -- $(XDG_CONFIG_HOME)/i3
+ cp -p -- i3/* $(XDG_CONFIG_HOME)/i3
install-keychain: install-sh
cp -p -- keychain/profile.d/* $(HOME)/.profile.d
cp -p -- keychain/shrc.d/* $(HOME)/.shrc.d
-install-less:
- cp -p -- less/lesskey $(HOME)/.lesskey
- lesskey
+install-less: less/less
+ mkdir -p -- $(HOME)/.profile.d
+ cp -- less/profile.d/* $(HOME)/.profile.d
+ mkdir -p -- $(XDG_CONFIG_HOME)/less
+ cp -p -- less/less $(XDG_CONFIG_HOME)/less/key
install-mail:
cp -p -- mail/signature $(HOME)/.signature
install-man:
- mkdir -p -- $(HOME)/.local/share/man/man7
- cp -p -- man/man7/dotfiles.7df $(HOME)/.local/share/man/man7
+ mkdir -p -- $(XDG_DATA_HOME)/man/man7
+ cp -p -- man/man7/dotfiles.7df $(XDG_DATA_HOME)/man/man7
install-mpd: install-sh
mkdir -p -- $(HOME)/.mpd/playlists
@@ -463,21 +478,23 @@ install-mpd: install-sh
cp -p -- mpd/mpdconf $(HOME)/.mpdconf
install-mpv:
- mkdir -p -- $(HOME)/.config/mpv
- cp -p -- mpv/* $(HOME)/.config/mpv
+ mkdir -p -- $(XDG_CONFIG_HOME)/mpv
+ cp -p -- mpv/* $(XDG_CONFIG_HOME)/mpv
install-mutt: install-mail
- mkdir -p -- $(HOME)/.muttrc.d $(HOME)/.cache/mutt
- cp -p -- mutt/muttrc $(HOME)/.muttrc
- cp -p -- mutt/muttrc.d/src $(HOME)/.muttrc.d
+ mkdir -p -- $(XDG_CONFIG_HOME)/mutt \
+ $(XDG_CONFIG_HOME)/mutt/muttrc.d \
+ $(XDG_CACHE_HOME)/mutt
+ cp -p -- mutt/muttrc $(XDG_CACHE_HOME)/mutt
+ cp -p -- mutt/muttrc.d/src $(XDG_CONFIG_HOME)/mutt/muttrc.d
install-ncmcpp: install-mpd
mkdir -p -- $(HOME)/.ncmpcpp
cp -p -- ncmpcpp/config $(HOME)/.ncmpcpp
install-newsboat:
- mkdir -p -- $(HOME)/.config/newsboat $(HOME)/.local/share/newsboat
- cp -p -- newsboat/config $(HOME)/.config/newsboat
+ mkdir -p -- $(XDG_CONFIG_HOME)/newsboat $(XDG_DATA_HOME)/newsboat
+ cp -p -- newsboat/config $(XDG_CONFIG_HOME)/newsboat
install-mysql:
cp -p -- mysql/my.cnf $(HOME)/.my.cnf
@@ -491,11 +508,15 @@ install-ksh: check-ksh install-sh
install-login-shell: check-login-shell
sh install/login-shell.sh
-install-perlcritic:
- cp -p -- perlcritic/perlcriticrc $(HOME)/.perlcriticrc
+install-perlcritic: install-sh
+ cp -p -- perlcritic/profile.d/* $(HOME)/.profile.d
+ mkdir -p -- $(XDG_CONFIG_HOME)/perlcritic
+ cp -p -- perlcritic/perlcriticrc $(XDG_CONFIG_HOME)/perlcritic/perlcriticrc
-install-perltidy:
- cp -p -- perltidy/perltidyrc $(HOME)/.perltidyrc
+install-perltidy: install-sh
+ cp -p -- perltidy/profile.d/* $(HOME)/.profile.d
+ mkdir -p -- $(XDG_CONFIG_HOME)/perltidy
+ cp -p -- perltidy/perltidyrc $(XDG_CONFIG_HOME)/perltidy/perltidyrc
install-plenv: install-sh
cp -p -- plenv/profile.d/* $(HOME)/.profile.d
@@ -504,6 +525,10 @@ install-plenv: install-sh
install-psql:
cp -p -- psql/psqlrc $(HOME)/.psqlrc
+install-pyenv: install-sh
+ cp -p -- pyenv/profile.d/* $(HOME)/.profile.d
+ cp -p -- pyenv/shrc.d/* $(HOME)/.shrc.d
+
install-readline:
cp -p -- readline/inputrc $(HOME)/.inputrc
@@ -525,7 +550,8 @@ install-terminfo:
install-tidy: install-sh
cp -p -- tidy/profile.d/* $(HOME)/.profile.d
- cp -p -- tidy/tidyrc $(HOME)/.tidyrc
+ mkdir -p -- $(XDG_CONFIG_HOME)/tidy
+ cp -p -- tidy/tidyrc $(XDG_CONFIG_HOME)/tidy/tidyrc
install-tmux: tmux/tmux.conf install-terminfo
cp -p -- tmux/tmux.conf $(HOME)/.tmux.conf
@@ -537,7 +563,7 @@ install-urxvt: urxvt/ext/select
VIM = vim
VIMDIR = $(HOME)/.vim
-VIMRC = $(HOME)/.vim/vimrc
+VIMRC = $(VIMDIR)/vimrc
install-vim: install-vim-after \
install-vim-autoload \
@@ -556,23 +582,23 @@ install-vim-after: install-vim-after-ftplugin \
install-vim-after-syntax
install-vim-after-ftplugin: install-vim-compiler
- mkdir -p $(VIMDIR)/after/ftplugin
+ mkdir -p -- $(VIMDIR)/after/ftplugin
cp -p -- vim/after/ftplugin/*.vim $(VIMDIR)/after/ftplugin
install-vim-after-indent: install-vim-autoload
- mkdir -p $(VIMDIR)/after/indent
+ mkdir -p -- $(VIMDIR)/after/indent
cp -p -- vim/after/indent/*.vim $(VIMDIR)/after/indent
install-vim-after-plugin: install-vim-autoload
- mkdir -p $(VIMDIR)/after/plugin
+ mkdir -p -- $(VIMDIR)/after/plugin
cp -p -- vim/after/plugin/*.vim $(VIMDIR)/after/plugin
install-vim-after-syntax:
- mkdir -p $(VIMDIR)/after/syntax
+ mkdir -p -- $(VIMDIR)/after/syntax
cp -p -- vim/after/syntax/*.vim $(VIMDIR)/after/syntax
install-vim-autoload:
- mkdir -p $(VIMDIR)/autoload
+ mkdir -p -- $(VIMDIR)/autoload
cd vim && find autoload \
-type d -exec sh -c \
'mkdir -p -- $(VIMDIR)/"$$1"' _ {} \; \
@@ -632,19 +658,18 @@ install-wget:
install-x: check-xinit
mkdir -p -- \
- $(HOME)/.config \
- $(HOME)/.config/sxhkd \
+ $(XDG_CONFIG_HOME)/sxhkd \
$(HOME)/.xinitrc.d \
$(HOME)/.Xresources.d
- cp -p -- X/redshift.conf $(HOME)/.config
- cp -p -- X/sxhkdrc $(HOME)/.config/sxhkd
+ cp -p -- X/redshift.conf $(XDG_CONFIG_HOME)
+ cp -p -- X/sxhkdrc $(XDG_CONFIG_HOME)/sxhkd
cp -p -- X/xinitrc $(HOME)/.xinitrc
cp -p -- X/xinitrc.d/* $(HOME)/.xinitrc.d
cp -p -- X/Xresources $(HOME)/.Xresources
cp -p -- X/Xresources.d/* $(HOME)/.Xresources.d
install-zsh: check-zsh install-sh
- mkdir -p -- $(HOME)/.profile.d $(HOME)/.zshrc.d
+ mkdir -p -- $(HOME)/.zshrc.d
cp -p -- zsh/profile.d/* $(HOME)/.profile.d
cp -p -- zsh/zprofile $(HOME)/.zprofile
cp -p -- zsh/zshrc $(HOME)/.zshrc
diff --git a/README.md b/README.md
index 6346c455..a214c9ef 100644
--- a/README.md
+++ b/README.md
@@ -25,9 +25,9 @@ For the default `all` target, you'll need a POSIX-fearing userland, including
The installation `Makefile` overwrites things standing in the way of its
installed files without backing them up, so read the output of `make -n
-install` before running `make install` carefully, to make sure you aren't going to lose
-anything unexpected. If you're still not sure, install it in a temporary
-directory first, so you can explore:
+install` before running `make install` carefully, to make sure you aren't going
+to lose anything unexpected. If you're still not sure, install it in
+a temporary directory first, so you can explore:
$ tmpdir=$(mktemp -d)
$ make install HOME="$tmpdir"
@@ -47,9 +47,9 @@ dependencies:
* `install-readline`
* `install-vim`
-The `install-login-shell` target looks at your `SHELL` environment variable, and tries
-to figure out which shell's configuration files to install, falling back on
-`install-sh`.
+The `install-login-shell` target looks at your `SHELL` environment variable,
+and tries to figure out which shell's configuration files to install, falling
+back on `install-sh`.
The remaining files can be installed with the other `install-*` targets. Try
`awk -f bin/mftl.awk Makefile` in the project's root directory to see a list.
@@ -57,12 +57,12 @@ The remaining files can be installed with the other `install-*` targets. Try
### Configuration
To keep a set of `make` targets useful for a specific user or host, you can
-list them in a newline-separated file `~/.local/share/dotfiles.conf`, and
-install using that with the special `install-conf` target. This can include
-variable settings, too:
+list them in a newline-separated file `~/.config/dotfiles/config`, and install
+using that with the special `install-conf` target. This can include macro
+settings for the `Makefile`, too:
$ cd
- $ cat .local/share/dotfiles.conf
+ $ cat .config/dotfiles/config
install-bash
install-bin
EMAIL=you@example.com
@@ -264,8 +264,8 @@ off using a stub file installed in `~/.config/bash_completion`. The majority
of the time I just want to complete paths anyway, and this makes for a quicker
startup without a lot of junk functions in my Bash namespace.
-I do make some exceptions with completions defined in `.bash_completion.d`
-files, for things I really do get tired of typing repeatedly:
+I do make some exceptions with completions defined in files in
+`~/.bash_completion.d` for things I really do get tired of typing repeatedly:
* Bash builtins: commands, help topics, shell options, variables, etc.
* `find(1)`'s more portable options
@@ -299,8 +299,8 @@ colored cyan.
### Mutt
My mail is kept in individual Maildir-format directories under `~/mail`, with
-the system mail spool in e.g. `/var/mail/tejr` being where most unfiltered mail
-is sent. I use [Getmail](http://pyropus.ca/software/getmail/),
+the system mail spool in e.g. `/var/mail/tejr` being where most unfiltered new
+mail is spooled. I use [Getmail](http://pyropus.ca/software/getmail/),
[maildrop](https://www.courier-mta.org/maildrop/), and
[msmtp](https://marlam.de/msmtp/); the configurations for these are not
included here. I sign whenever I have some indication that the recipient might
@@ -573,6 +573,7 @@ These scripts are installed by the `install-bin` target:
[`plenv`](https://github.com/tokuhirom/plenv), filters out any modules in
`~/.plenv/non-cpan-modules`, and updates them all.
* `pwg(1df)` generates just one decent password with `pwgen(1)`.
+* `qat(1df)` disables `stty echo` for the duration of a paste.
* `rep(1df)` repeats a command a given number of times.
* `rgl(1df)` is a very crude interactive `grep(1)` loop.
* `shb(1df)` attempts to build shebang lines for scripts from the system paths.
diff --git a/VERSION b/VERSION
index c91aeb8e..46ee4f66 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-tejr dotfiles v8.35.1
-Tue, 12 May 2020 03:02:38 +0000
+tejr dotfiles v8.36.0
+Tue, 12 May 2020 12:05:52 +0000
diff --git a/bin/qat.sh b/bin/qat.sh
new file mode 100755
index 00000000..31f5e8dd
--- /dev/null
+++ b/bin/qat.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+restore() {
+ if [ -n "$stty" ] ; then
+ stty "$stty"
+ fi
+}
+trap restore EXIT
+if [ -t 0 ] ; then
+ stty=$(stty -g)
+ stty -echo
+fi
+cat
diff --git a/check/sh.sh b/check/sh.sh
index 4e816337..c3ff856a 100644
--- a/check/sh.sh
+++ b/check/sh.sh
@@ -1,9 +1,9 @@
set \
sh/profile \
- sh/profile.d/*.sh \
sh/shinit \
sh/shrc \
- sh/shrc.d/*.sh
+ */profile.d/*.sh \
+ */shrc.d/*.sh
for sh do
sh -n -- "$sh" || exit
done
diff --git a/git/gitconfig.mi5 b/git/config.mi5
index 11b815d1..fba79411 100644
--- a/git/gitconfig.mi5
+++ b/git/config.mi5
@@ -8,7 +8,7 @@
output = compact
[init]
- templateDir = ~/.git-template
+ templateDir = <% XDG_CONFIG_HOME %>/git/template
[log]
date = local
diff --git a/i3/config b/i3/config
index bb66a8d2..0840f1c8 100644
--- a/i3/config
+++ b/i3/config
@@ -85,7 +85,7 @@ mode "resize" {
# i3bar at bottom of screen
bar {
position bottom
- status_command i3status --config ~/.i3/status
+ status_command i3status --config ~/.config/i3/status
workspace_buttons yes
colors {
diff --git a/less/profile.d/less.sh b/less/profile.d/less.sh
new file mode 100644
index 00000000..75fd1bf0
--- /dev/null
+++ b/less/profile.d/less.sh
@@ -0,0 +1,2 @@
+LESSKEY=${XDG_CONFIG_HOME:-$HOME/.config}/less/key
+export LESSKEY
diff --git a/lint/sh.sh b/lint/sh.sh
index b0d28e5d..5884a1ed 100644
--- a/lint/sh.sh
+++ b/lint/sh.sh
@@ -1,7 +1,7 @@
set \
sh/profile \
- sh/profile.d/*.sh \
sh/shinit \
sh/shrc \
- sh/shrc.d/*.sh
+ */profile.d/*.sh \
+ */shrc.d/*.sh
shellcheck -e SC1090 -s sh -- "$@" || exit
diff --git a/man/man1/qat.1df b/man/man1/qat.1df
new file mode 100644
index 00000000..d7466b3a
--- /dev/null
+++ b/man/man1/qat.1df
@@ -0,0 +1,19 @@
+.TH QAT 1df "May 2020" "Manual page for qat"
+.SH NAME
+.B qat
+\- quiet cat for terminal pastes
+.SH SYNOPSIS
+.B qat
+| wc -l
+.br
+.B qat
+| grep pattern
+.SH DESCRIPTION
+.B qat
+switches the echo feature for stty(1) off for the duration of a cat(1). You
+can use this to paste stuff into a pipeline without the terminal echoing it
+back at you.
+.SH SEE ALSO
+stty(1)
+.SH AUTHOR
+Tom Ryder <tom@sanctum.geek.nz>
diff --git a/man/man7/dotfiles.7df b/man/man7/dotfiles.7df
index 29ae08b7..8de509f5 100644
--- a/man/man7/dotfiles.7df
+++ b/man/man7/dotfiles.7df
@@ -79,14 +79,14 @@ directory to see a list.
.PP
To keep a set of \f[C]make\f[] targets useful for a specific user or
host, you can list them in a newline\-separated file
-\f[C]~/.local/share/dotfiles.conf\f[], and install using that with the
+\f[C]~/.config/dotfiles/config\f[], and install using that with the
special \f[C]install\-conf\f[] target.
-This can include variable settings, too:
+This can include macro settings for the \f[C]Makefile\f[], too:
.IP
.nf
\f[C]
$\ cd
-$\ cat\ .local/share/dotfiles.conf
+$\ cat\ .config/dotfiles/config
install\-bash
install\-bin
EMAIL=you\@example.com
@@ -399,9 +399,9 @@ The majority of the time I just want to complete paths anyway, and this
makes for a quicker startup without a lot of junk functions in my Bash
namespace.
.PP
-I do make some exceptions with completions defined in
-\f[C]\&.bash_completion.d\f[] files, for things I really do get tired of
-typing repeatedly:
+I do make some exceptions with completions defined in files in
+\f[C]~/.bash_completion.d\f[] for things I really do get tired of typing
+repeatedly:
.IP \[bu] 2
Bash builtins: commands, help topics, shell options, variables, etc.
.IP \[bu] 2
@@ -441,7 +441,7 @@ The files started as a joke (\f[C]exec\ bash\f[]).
.PP
My mail is kept in individual Maildir\-format directories under
\f[C]~/mail\f[], with the system mail spool in e.g.
-\f[C]/var/mail/tejr\f[] being where most unfiltered mail is sent.
+\f[C]/var/mail/tejr\f[] being where most unfiltered new mail is spooled.
I use Getmail (http://pyropus.ca/software/getmail/),
maildrop (https://www.courier-mta.org/maildrop/), and
msmtp (https://marlam.de/msmtp/); the configurations for these are not
@@ -898,6 +898,9 @@ modules in \f[C]~/.plenv/non\-cpan\-modules\f[], and updates them all.
\f[C]pwg(1df)\f[] generates just one decent password with
\f[C]pwgen(1)\f[].
.IP \[bu] 2
+\f[C]qat(1df)\f[] disables \f[C]stty\ echo\f[] for the duration of a
+paste.
+.IP \[bu] 2
\f[C]rep(1df)\f[] repeats a command a given number of times.
.IP \[bu] 2
\f[C]rgl(1df)\f[] is a very crude interactive \f[C]grep(1)\f[] loop.
diff --git a/mutt/muttrc b/mutt/muttrc
index bf3a34d7..3af07a55 100644
--- a/mutt/muttrc
+++ b/mutt/muttrc
@@ -136,8 +136,8 @@ macro index,pager A \
# Shortcut to reload configuration
macro generic,index,browser,pager \\R \
- ':source ~/.muttrc<enter>:echo "Config reloaded!"<enter>' \
- 'Reload ~/.muttrc'
+ ':source ~/.config/mutt/muttrc<enter>:echo "Config reloaded!"<enter>' \
+ 'Reload muttrc'
# Machine or account specific settings
-source ~/.muttrc.d/src|
+source ~/.config/mutt/muttrc.d/src|
diff --git a/mutt/muttrc.d/src b/mutt/muttrc.d/src
index cc2eb4ef..8b2aad6b 100755
--- a/mutt/muttrc.d/src
+++ b/mutt/muttrc.d/src
@@ -1,6 +1,19 @@
#!/bin/sh
-# Helper script to emit the source all muttrc subfiles, in LC_COLLATE order
-for rc in "$HOME"/.muttrc.d/*.rc ; do
+
+# Build groups from address lists
+for rc in "$HOME"/.config/mutt/muttrc.d/groups/*.rc ; do
+ [ -e "$rc" ] || continue
+ group=$rc
+ group=${group##*/}
+ group=${group%.rc}
+ while read -r member ; do
+ printf 'group -group %s -addr %s\n' \
+ "$group" "$member"
+ done < "$rc"
+done
+
+# Emit the source all muttrc subfiles, in LC_COLLATE order
+for rc in "$HOME"/.config/mutt/muttrc.d/*.rc ; do
[ -e "$rc" ] || continue
cat -- "$rc"
done
diff --git a/perlcritic/profile.d/perlcritic.sh b/perlcritic/profile.d/perlcritic.sh
new file mode 100644
index 00000000..bb404c45
--- /dev/null
+++ b/perlcritic/profile.d/perlcritic.sh
@@ -0,0 +1,2 @@
+PERLCRITIC=${XDG_CONFIG_HOME:-$HOME/.config}/perlcritic/perlcriticrc
+export PERLCRITIC
diff --git a/perltidy/profile.d/perltidy.sh b/perltidy/profile.d/perltidy.sh
new file mode 100644
index 00000000..03ed0754
--- /dev/null
+++ b/perltidy/profile.d/perltidy.sh
@@ -0,0 +1,2 @@
+PERLTIDY=${XDG_CONFIG_HOME:-$HOME/.config}/perltidy/perltidyrc
+export PERLTIDY
diff --git a/plenv/shrc.d/plenv.sh b/plenv/shrc.d/plenv.sh
index 6e03618e..5848fd5b 100644
--- a/plenv/shrc.d/plenv.sh
+++ b/plenv/shrc.d/plenv.sh
@@ -15,3 +15,4 @@ plenv() {
;;
esac
}
+plenv rehash
diff --git a/pyenv/profile.d/pyenv.sh b/pyenv/profile.d/pyenv.sh
new file mode 100644
index 00000000..296df3ac
--- /dev/null
+++ b/pyenv/profile.d/pyenv.sh
@@ -0,0 +1,5 @@
+# Define env vars for pyenv if it appears to be in use
+[ -d "$HOME"/.pyenv ] || return
+PATH=$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH
+MANPATH=$HOME/.pyenv/versions/$(python -V|cut -d' ' -f2)/share/man:$MANPATH
+export MANPATH
diff --git a/pyenv/shrc.d/pyenv.sh b/pyenv/shrc.d/pyenv.sh
new file mode 100644
index 00000000..1c90f8f2
--- /dev/null
+++ b/pyenv/shrc.d/pyenv.sh
@@ -0,0 +1,18 @@
+# POSIX-compatible version of the pyenv Bash shell wrapper
+[ -d "$HOME"/.pyenv ] || return
+pyenv() {
+ case $1 in
+ rehash)
+ shift
+ eval "$(pyenv sh-rehash "$@")"
+ ;;
+ shell)
+ shift
+ eval "$(pyenv sh-shell "$@")"
+ ;;
+ *)
+ command pyenv "$@"
+ ;;
+ esac
+}
+pyenv rehash
diff --git a/sh/profile.d/systemd.sh b/sh/profile.d/systemd.sh
deleted file mode 100644
index a6e1b707..00000000
--- a/sh/profile.d/systemd.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-# If systemctl is installed, use $VISUAL as its editor, not $EDITOR
-command -v systemctl >/dev/null 2>&1 || return
-SYSTEMD_EDITOR=$VISUAL
-export SYSTEMD_EDITOR
diff --git a/sh/profile.d/visual.sh b/sh/profile.d/visual.sh
index 50b8b423..eb3c1143 100644
--- a/sh/profile.d/visual.sh
+++ b/sh/profile.d/visual.sh
@@ -1,3 +1,14 @@
-# For a visual editor, use whichever kind of vi we get when we invoke 'vi'
-VISUAL='vi'
+# For a visual editor, use Vim explicitly if we've got it, but otherwise any vi
+# implementation will be fine
+if command -v vim >/dev/null 2>&1 ; then
+ VISUAL='vim'
+else
+ VISUAL='vi'
+fi
export VISUAL
+
+# If systemctl is installed, use $VISUAL as its editor, not $EDITOR
+if command -v systemctl >/dev/null 2>&1 ; then
+ SYSTEMD_EDITOR=$VISUAL
+ export SYSTEMD_EDITOR
+fi
diff --git a/tidy/profile.d/tidy.sh b/tidy/profile.d/tidy.sh
index 177a8124..664a6536 100644
--- a/tidy/profile.d/tidy.sh
+++ b/tidy/profile.d/tidy.sh
@@ -1,3 +1,3 @@
# Set a configuration file path for tidy(1)
-HTML_TIDY=$HOME/.tidyrc
+HTML_TIDY=${XDG_CONFIG_HOME:-$HOME/.config}/tidy/tidyrc
export HTML_TIDY
diff --git a/tmux/tmux.conf b/tmux/tmux.conf
index 96d052a3..05e21f81 100644
--- a/tmux/tmux.conf
+++ b/tmux/tmux.conf
@@ -69,7 +69,7 @@ bind-key s choose-session
set-option -g status-left '[#S] '
# Username, hostname, and the current date on the right side of the status bar
-set-option -g status-right ' (mail:#(msc)) [#H] %F %T'
+set-option -g status-right ' (mail:#(msc)) [#h] %F %T'
# Update the status bar every second
set-option -g status-interval 1
diff --git a/vim/filetype.vim b/vim/filetype.vim
index e1bdf728..1e34f42c 100644
--- a/vim/filetype.vim
+++ b/vim/filetype.vim
@@ -107,6 +107,7 @@ augroup filetypedetect
\,.gitconfig
\,.gitmodules
\,gitconfig
+ \,~/.config/git/config
\ setfiletype gitconfig
" Git rebase manifests
autocmd BufNewFile,BufRead
diff --git a/vim/vimrc.stub b/vim/vimrc.stub
index d50cee55..f9ad4d4f 100644
--- a/vim/vimrc.stub
+++ b/vim/vimrc.stub
@@ -1,13 +1,16 @@
" We have a big, important decision to make here.
"
" Check that we’re not running in 'compatible' mode, nor that the environment
-" calls for the same, and that we’re running Vim v7.0.0 or newer. If it’s all
-" clear, we can load the main vimrc file from ~/.vim/vimrc to use Vim in all
-" of its incompatible glory, and then stop sourcing the rest of this file.
+" calls for the same, that we’re running Vim v7.0.0 or newer, and that we
+" haven't been invoked as just plain `vi`. If it’s all clear, we can load the
+" main vimrc file from ~/.vim/vimrc to use Vim in all of its incompatible
+" glory, and then stop sourcing the rest of this file.
"
-if !&compatible && !exists('$POSIXLY_CORRECT') && v:version >= 700
- runtime vimrc
- finish
+if !&compatible && !exists('$POSIXLY_CORRECT')
+ if v:version >=700 && v:progname !=# 'vi'
+ runtime vimrc
+ finish
+ endif
endif
" If we got this far, it means we’re running a tiny, 'compatible', and/or