summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/gtk-3.0/settings.ini3
-rw-r--r--.config/mutt/muttrc2
-rwxr-xr-x.config/notmuch/default/hooks/post-new2
-rw-r--r--.config/sway/config450
-rw-r--r--.debpaste.rc3
-rw-r--r--.emacs.d/early-init.el2
-rw-r--r--.emacs.d/eshell/alias3
-rw-r--r--.emacs.d/init.el672
-rw-r--r--.gtkrc-2.02
-rw-r--r--.mbsyncrc116
-rw-r--r--.shinit4
-rw-r--r--archive/.config/i3/config (renamed from .config/i3/config)2
-rwxr-xr-xarchive/bin/choose-wallpaper (renamed from bin/choose-wallpaper)0
-rw-r--r--archive/perl5/Desktop.pm (renamed from perl5/Local/Desktop.pm)0
-rwxr-xr-xarchive/scripts/desktop/dmenu_ssh (renamed from scripts/desktop/dmenu_ssh)0
-rwxr-xr-xarchive/scripts/desktop/dmenu_window (renamed from scripts/desktop/dmenu_window)0
-rwxr-xr-xarchive/scripts/desktop/i3-startup-always (renamed from scripts/desktop/i3-startup-always)0
-rwxr-xr-xbin/debpaste542
-rwxr-xr-xbin/movemymail4
-rw-r--r--lib-src/certs/fastmail.crt41
-rwxr-xr-xscripts/desktop/sway-ftp-master3
21 files changed, 645 insertions, 1206 deletions
diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini
deleted file mode 100644
index 7e447047..00000000
--- a/.config/gtk-3.0/settings.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[Settings]
-gtk-key-theme-name=Emacs
-gtk-application-prefer-dark-theme=0
diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc
index 2825f7ec..25e097be 100644
--- a/.config/mutt/muttrc
+++ b/.config/mutt/muttrc
@@ -29,7 +29,7 @@ unset crypt_use_gpgme # Some Debian services require inline sigs.
unset mark_old # Better with mbsync.
unset wait_key
-mailboxes +inbox +notes +sent +ham +spam +junk +trash
+mailboxes +inbox +notes +sent +junk +trash
ignore *
unignore From: Subject: To: Cc: Date: Reply-To: Message-Id:
diff --git a/.config/notmuch/default/hooks/post-new b/.config/notmuch/default/hooks/post-new
index b46d08bd..1774b148 100755
--- a/.config/notmuch/default/hooks/post-new
+++ b/.config/notmuch/default/hooks/post-new
@@ -1,7 +1,7 @@
#!/bin/sh
# mark all spam as spam, and as read, for Gnus
-notmuch tag -unread +spam -- folder:junk folder:spam
+notmuch tag -unread +spam -- folder:junk
# mark all trash as trash, and as read, for Gnus
notmuch tag -unread +deleted -- folder:trash
diff --git a/.config/sway/config b/.config/sway/config
index dbd62231..69678c08 100644
--- a/.config/sway/config
+++ b/.config/sway/config
@@ -11,10 +11,16 @@ client.placeholder #000000 #000000 #FFFFF6 #AA9E9F #AA9E9F
client.background #FFFFF6
-# Use Mouse+Mod4 to drag floating windows to their wanted position
floating_modifier Mod4
-
mouse_warping output
+focus_wrapping no
+popup_during_fullscreen leave_fullscreen
+
+input type:keyboard repeat_rate 25
+input type:keyboard repeat_delay 380
+seat * hide_cursor 5000
+
+output * bg ~/src/dotfiles/lib-src/img/green_gobbler.png tile
# Key binding strategy:
#
@@ -32,228 +38,180 @@ mouse_warping output
# than one keypress with the other hand, which is worth avoiding.
mode "C-i-" {
- # make a fresh Emacs frame -- typically this gets invoked only on
- # empty workspaces, as otherwise I use commands under `C-x 5` to get
- # more Emacs frames
bindsym e exec emacsclient -ncw15, mode "default"
+ bindsym BackSpace exec foot, mode "default"
+ bindsym b exec firefox -new-window, mode "default"
# override the script's usual logic to start a fresh, non-debug daemon
bindsym Ctrl+Mod1+e exec emacsclient -ncw8 --spw/installed, \
mode "default"
- # special daemon instance for debugging primary instance & Gnus
+ # special daemon instance for debugging primary instance and for Gnus
bindsym r exec emacsclient -ncw8 -sgdbmacs, mode "default"
# Fresh Emacs frame and get a shell in HOME. Without this it's
- # C-i e M-& which is too many keys esp. compared to C-i DEL
- bindsym Return exec emacsclient -ncw15 -e \
+ # C-i e M-& which is too many keys esp. compared to C-i DEL.
+ bindsym Return exec emacsclient -ncw15 -e \
"(let ((default-directory (expand-file-name "'"'~/'"'")) \
- (display-buffer-overriding-action \
- '(display-buffer-same-window \
- . ((inhibit-same-window . nil))))) \
- (transient-cycles-cmd-spw/eshell-jump-from-here))", \
+ (display-buffer-overriding-action \
+ '(display-buffer-same-window \
+ . ((inhibit-same-window . nil))))) \
+ (transient-cycles-cmd-spw/eshell-jump-from-here))", \
mode "default"
- # start a terminal emulator
- bindsym BackSpace exec foot, mode "default"
-
- # make a fresh browser window
- bindsym b exec firefox -new-window, mode "default"
-
- # lock screen -- relies on swayidle
- # note that this won't lock other VTs (lock-session*s*
- # requires root password)
- bindsym l exec loginctl lock-session, mode "default"
-
- # go to sleep -- swayidle will lock screen
- bindsym --locked Ctrl+l exec systemctl suspend, mode "default"
-
- # kill focused window
- bindsym k kill, mode "default"
-
- # sway sample config says to pipe dmenu into `xargs swaymsg exec --`
- # but doesn't seem necessary with wofi
-
- bindsym p exec wofi --show=drun -i, mode "default"
-
- bindsym Ctrl+p exec wofi --show=run -i, mode "default"
+ # lock screen, go to sleep -- these rely on swayidle
+ # note that this won't lock other VTs (lock-sessions requires root pw)
+ bindsym l exec loginctl lock-session, mode "default"
+ bindsym --locked Ctrl+l exec systemctl suspend, mode "default"
+ bindsym p exec wofi --show=drun -i, mode "default"
bindsym s exec ~/src/dotfiles/scripts/desktop/wofi_ssh, mode "default"
-
bindsym Mod1+g exec makoctl dismiss --all, mode "default"
- # enter fullscreen mode for the focused container
- bindsym f fullscreen toggle, mode "default"
-
- # toggle tiling / floating
- bindsym t floating toggle, mode "default"
-
- # change focus between tiling / floating windows
- bindsym Tab focus mode_toggle, mode "default"
-
- # # when screen is divided into two containers where at least one might
- # # have several tabs, as I usually have it, this works well to go back
- # # and forth
- # bindsym o focus_wrapping workspace, focus parent, focus right, \
- # focus_wrapping yes, mode "default"
+ bindsym t floating toggle, mode "default"
+ bindsym Tab focus mode_toggle, mode "default"
bindsym o exec papersway-msg other column, mode "default"
-
- # switch to workspace
- bindsym 1 workspace 1, mode "default"
- bindsym 2 workspace 2, mode "default"
- bindsym 3 workspace 3, mode "default"
- bindsym 4 workspace 4, mode "default"
- bindsym 5 workspace 5, mode "default"
- bindsym 6 workspace 6, mode "default"
- bindsym 7 workspace 7, mode "default"
- bindsym 8 workspace 8, mode "default"
- bindsym 9 workspace 9, mode "default"
- bindsym 0 workspace 10, mode "default"
- bindsym F1 workspace 11:F1, mode "default"
- bindsym F2 workspace 12:F2, mode "default"
- bindsym F3 workspace 13:F3, mode "default"
- bindsym F4 workspace 14:F4, mode "default"
- bindsym F5 workspace 15:F5, mode "default"
- bindsym F6 workspace 16:F6, mode "default"
- bindsym F7 workspace 17:F7, mode "default"
- bindsym F8 workspace 18:F8, mode "default"
- bindsym F9 workspace 19:F9, mode "default"
- bindsym F10 workspace 20:F10, mode "default"
- bindsym F11 workspace 21:F11, mode "default"
- bindsym F12 workspace 22:F12, mode "default"
- bindsym semicolon workspace back_and_forth, mode "default"
-
- # move focused container to workspace
- bindsym Mod1+1 move container to workspace 1, mode "default"
- bindsym Mod1+2 move container to workspace 2, mode "default"
- bindsym Mod1+3 move container to workspace 3, mode "default"
- bindsym Mod1+4 move container to workspace 4, mode "default"
- bindsym Mod1+5 move container to workspace 5, mode "default"
- bindsym Mod1+6 move container to workspace 6, mode "default"
- bindsym Mod1+7 move container to workspace 7, mode "default"
- bindsym Mod1+8 move container to workspace 8, mode "default"
- bindsym Mod1+9 move container to workspace 9, mode "default"
- bindsym Mod1+0 move container to workspace 10, mode "default"
- bindsym Mod1+F1 move container to workspace 11:F1, mode "default"
- bindsym Mod1+F2 move container to workspace 12:F2, mode "default"
- bindsym Mod1+F3 move container to workspace 13:F3, mode "default"
- bindsym Mod1+F4 move container to workspace 14:F4, mode "default"
- bindsym Mod1+F5 move container to workspace 15:F5, mode "default"
- bindsym Mod1+F6 move container to workspace 16:F6, mode "default"
- bindsym Mod1+F7 move container to workspace 17:F7, mode "default"
- bindsym Mod1+F8 move container to workspace 18:F8, mode "default"
- bindsym Mod1+F9 move container to workspace 19:F9, mode "default"
- bindsym Mod1+F10 move container to workspace 20:F10, mode "default"
- bindsym Mod1+F11 move container to workspace 21:F11, mode "default"
- bindsym Mod1+F12 move container to workspace 22:F12, mode "default"
- bindsym Mod1+semicolon move container to workspace back_and_forth, \
- mode "default"
- bindsym Mod1+Ctrl+semicolon move container to workspace back_and_forth, \
- workspace back_and_forth, mode "default"
-
- # next unused workspace
- bindsym j exec papersway-msg fresh-workspace, mode "default"
- # sends window to next unused but doesn't change view
- bindsym Mod1+j exec papersway-msg fresh-workspace send, mode "default"
- # sends window to next unused and changes view
- bindsym Mod1+Ctrl+j exec \
- papersway-msg fresh-workspace take, mode "default"
+ # Pre-papersway version: was useful as I'd typically have two columns
+ # with at least one containing several tabs.
+ # bindsym o focus_wrapping workspace, focus parent, focus right, \
+ # focus_wrapping yes, mode "default"
+
+ bindsym 1 workspace 1, mode "default"
+ bindsym 2 workspace 2, mode "default"
+ bindsym 3 workspace 3, mode "default"
+ bindsym 4 workspace 4, mode "default"
+ bindsym 5 workspace 5, mode "default"
+ bindsym 6 workspace 6, mode "default"
+ bindsym 7 workspace 7, mode "default"
+ bindsym 8 workspace 8, mode "default"
+ bindsym 9 workspace 9, mode "default"
+ bindsym 0 workspace 10, mode "default"
+ bindsym F1 workspace 11:F1, mode "default"
+ bindsym F2 workspace 12:F2, mode "default"
+ bindsym F3 workspace 13:F3, mode "default"
+ bindsym F4 workspace 14:F4, mode "default"
+ bindsym F5 workspace 15:F5, mode "default"
+ bindsym F6 workspace 16:F6, mode "default"
+ bindsym F7 workspace 17:F7, mode "default"
+ bindsym F8 workspace 18:F8, mode "default"
+ bindsym F9 workspace 19:F9, mode "default"
+ bindsym F10 workspace 20:F10, mode "default"
+ bindsym F11 workspace 21:F11, mode "default"
+ bindsym F12 workspace 22:F12, mode "default"
+ bindsym semicolon workspace back_and_forth, mode "default"
+
+ bindsym Mod1+1 move container to workspace 1, mode "default"
+ bindsym Mod1+2 move container to workspace 2, mode "default"
+ bindsym Mod1+3 move container to workspace 3, mode "default"
+ bindsym Mod1+4 move container to workspace 4, mode "default"
+ bindsym Mod1+5 move container to workspace 5, mode "default"
+ bindsym Mod1+6 move container to workspace 6, mode "default"
+ bindsym Mod1+7 move container to workspace 7, mode "default"
+ bindsym Mod1+8 move container to workspace 8, mode "default"
+ bindsym Mod1+9 move container to workspace 9, mode "default"
+ bindsym Mod1+0 move container to workspace 10, mode "default"
+ bindsym Mod1+F1 move container to workspace 11:F1, mode "default"
+ bindsym Mod1+F2 move container to workspace 12:F2, mode "default"
+ bindsym Mod1+F3 move container to workspace 13:F3, mode "default"
+ bindsym Mod1+F4 move container to workspace 14:F4, mode "default"
+ bindsym Mod1+F5 move container to workspace 15:F5, mode "default"
+ bindsym Mod1+F6 move container to workspace 16:F6, mode "default"
+ bindsym Mod1+F7 move container to workspace 17:F7, mode "default"
+ bindsym Mod1+F8 move container to workspace 18:F8, mode "default"
+ bindsym Mod1+F9 move container to workspace 19:F9, mode "default"
+ bindsym Mod1+F10 move container to workspace 20:F10, mode "default"
+ bindsym Mod1+F11 move container to workspace 21:F11, mode "default"
+ bindsym Mod1+F12 move container to workspace 22:F12, mode "default"
+ bindsym Mod1+semicolon \
+ move container to workspace back_and_forth, mode "default"
+ bindsym Mod1+Ctrl+semicolon \
+ move container to workspace back_and_forth, \
+ workspace back_and_forth, mode "default"
+
+ bindsym j exec papersway-msg fresh-workspace, mode "default"
+ bindsym Mod1+j exec papersway-msg fresh-workspace send, mode "default"
+ bindsym Mod1+Ctrl+j \
+ exec papersway-msg fresh-workspace take, mode "default"
bindsym comma exec papersway-msg absorb_expel left, mode "default"
bindsym period exec papersway-msg absorb_expel right, mode "default"
- # reload the configuration file
- bindsym Ctrl+Mod1+c reload, mode "default"
- # exit i3 (logs you out of your X session)
- bindsym Ctrl+Mod1+Shift+e exit
-
- bindsym g mode "C-i g-"
-
- # bindsym bracketleft exec debian-ftp-master-cut-note, mode "default"
- # bindsym Ctrl+bracketleft exec xdo-evince-highlight, mode "default"
-
- # Workspaces do not ever get assigned to particular purposes / windows
- # don't get assigned to particular workspaces. If I can't find where
- # I was working on something, there's my bindings to `workspace
- # {next,prev}_on_output`. Long-running processes like builds, for
- # example, stay in the workspace(s) where I'm working on that
- # task/project
- #
- # Previously I thought that instead of having them on a dedicated
- # workspace, windows that are almost always open should be put on the
- # scratcpad:
- #
- # Note that we have to move to scratchpad at startup ('move to
- # scratchpad' below), or the toggle key won't work.
- #
- # Once every so often I'll have to launch the program, and then
- # immediately use the toggle key to make it visible. This is a
- # bit inelegant, but much more reliable than binding the key to a
- # script which starts the program if it's not around and otherwise
- # toggles
+ bindsym Ctrl+Mod1+c reload, mode "default"
+ bindsym Ctrl+Mod1+Shift+e exit
+
+ # Workspaces do not ever get assigned to particular purposes / windows
+ # don't get assigned to particular workspaces. If I can't find where
+ # I was working on something, there's my bindings to `workspace
+ # {next,prev}_on_output`. Long-running processes like builds, for
+ # example, stay in the workspace(s) where I'm working on that
+ # task/project
+ #
+ # Previously I thought that instead of having them on a dedicated
+ # workspace, windows that are almost always open should be put on the
+ # scratcpad:
+ #
+ # Note that we have to move to scratchpad at startup ('move to
+ # scratchpad' below), or the toggle key won't work.
+ #
+ # Once every so often I'll have to launch the program, and then
+ # immediately use the toggle key to make it visible. This is a
+ # bit inelegant, but much more reliable than binding the key to a
+ # script which starts the program if it's not around and otherwise
+ # toggles
#
# However, I now think that scratchpad windows are unwieldy for
# various reasons, so just having them as regular windows with
- # shortcuts to get back to them is better.
-
- bindsym n exec swaymsg '[title="\[mosh\] tmux default on athena"]' focus \
- || foot ssh-and-tmux athena.silentflame.com, mode "default"
+ # shortcuts to get back to them [all gone since papersway] is better.
bindsym c [con_mark=caffeinated] inhibit_idle none; \
- inhibit_idle open, mark caffeinated; mode "default"
+ inhibit_idle open, mark caffeinated; mode "default"
bindsym Ctrl+c [con_mark=caffeinated] inhibit_idle none, \
mark --toggle caffeinated; mode "default"
- # # The two % values are for melete. Cf. `spw/maybe-scale-basic-faces'.
- # #
- # # This says: shrink such that an Emacs frame taking up the rest of the
- # # width can fit two 80-column windows, with Debian's fonts-hack at
- # # height 105. So should be <33. Sometimes we'll be able to fit an
- # # 80-column frame in the smaller part of the split, but usually we
- # # won't: the point is to ensure we can use Emacs with two 80-column
- # # windows, as is usual, while also displaying something narrower.
+ # The two % values are for melete. Cf. `spw/maybe-scale-basic-faces'.
+
+ # This says: shrink such that an Emacs frame taking up the rest of the
+ # width can fit two 80-column windows, with Debian's fonts-hack at
+ # height 105. So should be <33. Sometimes we'll be able to fit an
+ # 80-column frame in the smaller part of the split, but usually we
+ # won't: the point is to ensure we can use Emacs with two 80-column
+ # windows, as is usual, while also displaying something narrower.
# bindsym minus resize set width 31 ppt, mode "default"
- # # And this says: ensure that the current window can be an Emacs frame
- # # with at least 80 columns. Based on Debian's fonts-hack scaled up to
- # # height 120 by `spw/maybe-scale-basic-faces'.
+
+ # And this says: ensure that the current window can be an Emacs frame
+ # with at least 80 columns. Based on Debian's fonts-hack scaled up to
+ # height 120 by `spw/maybe-scale-basic-faces'.
# bindsym equal resize set width 43 ppt, mode "default"
bindsym minus exec papersway-msg cols decr, mode "default"
bindsym equal exec papersway-msg cols incr, mode "default"
- bindsym Ctrl+y exec ~/src/dotfiles/scripts/desktop/sway-ftp-master-cut-note , mode "default"
+ bindsym Ctrl+y exec \
+ ~/src/dotfiles/scripts/desktop/sway-ftp-master-cut-note, \
+ mode "default"
- bindsym --locked Ctrl+g mode "default"
+ bindsym g mode "C-i g-"
+ bindsym --locked Ctrl+g mode "default"
}
bindsym --locked Ctrl+i mode "C-i-"
-for_window [con_mark=caffeinated] inhibit_idle open
-
-for_window [title="ftp-master GNU mc session"] mark mc
-for_window [title="ftp-master dak command session"] mark dak
-
-focus_wrapping no
-
-# change focus
-bindsym Ctrl+7 exec papersway-msg focus left \
- || swaymsg focus left
-bindsym Ctrl+0 exec papersway-msg focus right \
- || swaymsg focus right
-bindsym Ctrl+8 focus down
-bindsym Ctrl+9 focus up
-
-# move focused window
-bindsym Mod1+Ctrl+7 exec papersway-msg move left || swaymsg move left
-bindsym Mod1+Ctrl+0 exec papersway-msg move right || swaymsg move right
-bindsym Mod1+Ctrl+8 move down
-bindsym Mod1+Ctrl+9 move up
-
-bindsym Ctrl+5 kill
-bindsym Ctrl+6 exec papersway-msg monocle toggle
+# launchers
+mode "C-i g-" {
+ bindsym g exec thunar, mode "default"
+ bindsym a exec foot alsamixer, mode "default"
+ bindsym y exec foot yapet, mode "default"
+ bindsym w exec \
+ ~/src/dotfiles/scripts/desktop/whitenoise , mode "default"
+ bindsym f exec \
+ ~/src/dotfiles/scripts/desktop/sway-ftp-master, mode "default"
+ bindsym s mode "default", \
+ exec grim -c ~/tmp/$(hostname -s)_$(date +%F_%H.%M.%S).png
+ bindsym x exec wdisplays, mode "default"
-# bindsym Ctrl+apostrophe layout toggle splith splitv tabbed
+ bindsym Ctrl+g mode "default"
+}
# Cycle through all workspaces.
# Warp the cursor to a point on the screen which is hopefully a titlebar.
@@ -261,107 +219,81 @@ bindsym Ctrl+6 exec papersway-msg monocle toggle
# e.g., a VNC client has grabbed the keyboard upon entry to the workspace.
bindsym Ctrl+1 seat - cursor set 0 0, exec papersway-msg workspace prev
bindsym Ctrl+4 seat - cursor set 0 0, exec papersway-msg workspace next
-bindsym Mod1+Ctrl+1 seat - cursor set 0 0, exec \
- papersway-msg move_workspace prev
-bindsym Mod1+Ctrl+4 seat - cursor set 0 0, exec \
- papersway-msg move_workspace next
+bindsym Mod1+Ctrl+1 seat - cursor set 0 0, \
+ exec papersway-msg move_workspace prev
+bindsym Mod1+Ctrl+4 seat - cursor set 0 0, \
+ exec papersway-msg move_workspace next
bindsym Ctrl+2 focus output left
bindsym Mod1+Ctrl+2 move workspace to output left
bindsym Ctrl+3 focus output right
bindsym Mod1+Ctrl+3 move workspace to output right
-# Start swaybar to display a workspace bar (plus the system information
-# i3status finds out, if available)
-bar {
- # i3status is designed to be highly performant so it continues
- # to be refreshed when the system is under load; we're giving
- # up some of that with papersway, but let's see if it
- # actually matters
- status_command papersway --i3status
-
- # default behaviour is to cycle through workspaces when scroll
- # wheel is used on the bar. However, don't think I've ever
- # used this deliberately, and often I do it by mistake, so
- # let's disable it
- bindsym button4 nop
- bindsym button5 nop
-
- colors {
- background #E5E5E5
- focused_background #FFFFF6
- statusline #000000
- separator #000000
-
- focused_workspace #000000 #B4EEB4 #000000
- active_workspace #000000 #FFFFF6 #000000
- inactive_workspace #000000 #E5E5E5 #000000
- urgent_workspace #000000 #702020 #FFFFF6
- binding_mode #000000 #EECD82 #000000
- }
-
- # Leave papersway to disable the workspace buttons once it has started
- # handling workspaces.
-
- position bottom
- strip_workspace_numbers yes
- status_edge_padding 11
- tray_padding 0
-
- workspace_min_width 50
-}
+bindsym Ctrl+5 kill
+bindsym Ctrl+6 exec papersway-msg monocle toggle
-# single key launching
-mode "C-i g-" {
- # start a graphical file manager
- bindsym g exec thunar , mode "default"
+bindsym Ctrl+7 exec papersway-msg focus left
+bindsym Ctrl+8 focus down
+bindsym Ctrl+9 focus up
+bindsym Ctrl+0 exec papersway-msg focus right
- # open virt-viewer pointed at develacc
- bindsym d exec develacc-please , mode "default"
+bindsym Mod1+Ctrl+7 exec papersway-msg move left
+bindsym Mod1+Ctrl+8 move down
+bindsym Mod1+Ctrl+9 move up
+bindsym Mod1+Ctrl+0 exec papersway-msg move right
- bindsym y exec foot yapet , mode "default"
- bindsym w exec ~/src/dotfiles/scripts/desktop/whitenoise , mode "default"
+bindsym --locked XF86AudioRaiseVolume \
+ exec pactl set-sink-volume @DEFAULT_SINK@ +5%
+bindsym --locked XF86AudioLowerVolume \
+ exec pactl set-sink-volume @DEFAULT_SINK@ -5%
+bindsym --locked XF86AudioMute \
+ exec pactl set-sink-mute @DEFAULT_SINK@ toggle
- # connect to Debian's ftp-master server for ftpteam work
- bindsym f exec ~/src/dotfiles/scripts/desktop/sway-ftp-master , mode "default"
+bindsym --locked XF86MonBrightnessUp exec brightnessctl set +10%
+bindsym --locked XF86MonBrightnessDown exec brightnessctl set 10%-
- bindsym s mode "default", \
- exec grim -c ~/tmp/$(hostname -s)_$(date +%F_%H.%M.%S).png
+bar {
+ status_command papersway --i3status
- bindsym x exec wdisplays , mode "default"
+ # Avoid accidentally scrolling through workspaces.
+ bindsym button4 nop
+ bindsym button5 nop
- bindsym Ctrl+g mode "default"
+ colors {
+ background #E5E5E5
+ focused_background #FFFFF6
+ statusline #000000
+ separator #000000
+
+ focused_workspace #000000 #B4EEB4 #000000
+ active_workspace #000000 #FFFFF6 #000000
+ inactive_workspace #000000 #E5E5E5 #000000
+ urgent_workspace #000000 #702020 #FFFFF6
+ binding_mode #000000 #EECD82 #000000
+ }
+
+ # Leave papersway to disable the ws buttons once it has started.
+ position bottom
+ strip_workspace_numbers yes
+ status_edge_padding 11
+ tray_padding 0
+ workspace_min_width 50
}
-bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
-bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
-bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
-
-bindsym --locked XF86MonBrightnessUp exec brightnessctl set +10%
-bindsym --locked XF86MonBrightnessDown exec brightnessctl set 10%-
-
-popup_during_fullscreen leave_fullscreen
-
-# windows that should always float
for_window [title="^Ediff"] floating enable
no_focus [title="Firefox . Sharing Indicator"]
-for_window [title="Firefox . Sharing Indicator"] floating enable, \
- move position 0 0
-
-input type:keyboard repeat_rate 25
-input type:keyboard repeat_delay 380
-
-seat * hide_cursor 5000
+for_window [title="Firefox . Sharing Indicator"] \
+ floating enable, move position 0 0
+for_window [con_mark=caffeinated] inhibit_idle open
+for_window [title="ftp-master GNU mc session"] mark mc
+for_window [title="ftp-master dak command session"] mark dak
exec mako
exec swayidle -w
exec emacsclient --spw/update-environment
exec emacsclient -sgdbmacs --spw/no-start --spw/update-environment
-
exec_always fcitx5 -d --replace
exec blueman-applet
exec nm-applet --indicator
-output * bg ~/src/dotfiles/lib-src/img/green_gobbler.png tile
-
include ~/.config/sway/$(hostname)/*
diff --git a/.debpaste.rc b/.debpaste.rc
deleted file mode 100644
index 2a5a08f1..00000000
--- a/.debpaste.rc
+++ /dev/null
@@ -1,3 +0,0 @@
-User: spwhitton
-Expires: 86400
-Server: https://paste.debian.net/
diff --git a/.emacs.d/early-init.el b/.emacs.d/early-init.el
index a3793e15..08a4aa02 100644
--- a/.emacs.d/early-init.el
+++ b/.emacs.d/early-init.el
@@ -1,6 +1,6 @@
;;; early-init.el --- frames conf. -*- lexical-binding:t;no-byte-compile:t -*-
-;; Copyright (C) 2020-2022 Sean Whitton <spwhitton@spwhitton.name>
+;; Copyright (C) 2020-2023 Sean Whitton <spwhitton@spwhitton.name>
;;
;; This file is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/.emacs.d/eshell/alias b/.emacs.d/eshell/alias
index 5e66ab3b..3016144c 100644
--- a/.emacs.d/eshell/alias
+++ b/.emacs.d/eshell/alias
@@ -1,7 +1,7 @@
alias grep-queued { cd /ssh:ssh.upload.debian.org: && *grep $* /srv/upload.debian.org/queued/run/log }
alias grep-dak { cd /ssh:ftp-master.debian.org: && *grep $* /srv/ftp-master.debian.org/log/current }
alias push-develacc-dotfiles-branch git push -f origin develacc/develacc-"${hostname}":develacc-"${hostname}"
-alias sbuild-prerelease sbuild --dpkg-source-opts='-Zgzip -z1 --format=1.0 -sn' $*
+alias sbuild-prerelease sbuild --dpkg-source-opts='-Zgzip -z1 --format=1.0 -sn' $* --no-run-lintian
alias sbuild-lts quilt pop -a; git is-clean ':!debian/patches/' && sbuild --no-clean-source --no-run-lintian $*
alias dpkg-bp-lts quilt pop -a; git is-clean && dpkg-buildpackage -S -nc --force-sign $*
alias dpkg-buildpackage-lts dpkg-bp-lts $*
@@ -18,6 +18,7 @@ alias afsid apt-file --filter-suites unstable $*
alias grepcopy grep -Eir '(copyright|©)' *
alias pdfwords pdftotext "$1" - | wc -w
alias dlp lp -o sides=two-sided-long-edge $*
+alias pdd dd bs=4M status=progress conv=fdatasync $*
alias tail-dak { cd /ssh:ftp-master.debian.org:/srv/ftp-master.debian.org/log && tail -f current }
alias tail-queued { cd /ssh:ssh.upload.debian.org:/srv/upload.debian.org/queued/run && tail -f log }
alias package-plan-unpack ~/src/dotfiles/scripts/debian/package-plan-unpack "$1"; cd "/tmp/$1"
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
index 87dde3cd..fb1e49d8 100644
--- a/.emacs.d/init.el
+++ b/.emacs.d/init.el
@@ -23,11 +23,6 @@
;; matching ~/.emacs.d/*.el, since the "spw-" and "spw--" prefixes would be
;; for a file called "spw.el" with a defined API, providing an `spw' feature.
;;
-;; Prefer using the customise interface for variables, faces and enabling and
-;; disabling global minor modes, except when we want to associate an extended
-;; comment to a number of settings (typically we use the customise interface's
-;; facility for adding comments for only short comments).
-;;
;; Aim for compatibility with the version of Emacs included in Debian stable.
;;
;; Bind only key sequences reserved for users or which are already bound to
@@ -82,21 +77,32 @@
;;;; Customisation & appearance
-(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.
+;; The customisation system is additionally used to save safe local variable
+;; values, SSL certificate overrides etc. (cf. `customize-push-and-save').
+;; Most of these should not be committed to git: they're often host-specific,
+;; usually only relevant for a short time, and sometimes private.
+;; So we use a disposable, local custom file, and `custom-theme-set-faces',
+;; `customize-set-variable' and `custom-theme-set-variables' in this file.
+;; (Re `setopt' vs. `customize-set-variable': former is for when we're making
+;; a dynamic change that is not just host-specific but session-specific.)
+(load (setq custom-file (expand-file-name "custom" user-emacs-directory))
+ 'noerror 'nomessage 'nosuffix)
+
+(custom-theme-set-faces
+ 'user
'(default ((t (:weight medium :height 105 :foundry "SRC" :family "Hack"))))
+ '(fixed-pitch ((t (:foundry "SRC" :family "Hack"))))
+ '(variable-pitch ((t (:weight regular :height 120
+ :foundry "bitstream" :family "Bitstream Charter"))))
+ ;; We want to handle the `variable-pitch'/`variable-pitch-text' distinction
+ ;; using `spw/maybe-scale-basic-faces' instead.
+ '(variable-pitch-text ((t (:inherit variable-pitch))))
+
'(comint-highlight-prompt ((t (:inherit minibuffer-prompt :weight bold))))
'(fill-column-indicator ((t (:background "light gray"))))
- '(fixed-pitch ((t (:foundry "SRC" :family "Hack"))))
- '(org-code ((t (:inherit (shadow fixed-pitch)))))
- '(org-date ((t (:inherit fixed-pitch :foreground "Purple" :underline t))))
- '(org-verbatim ((t (:inherit (shadow fixed-pitch)))))
- '(region ((t (:extend t :background "#EECD82"))) nil "Colour is from the Lucid build.")
- '(variable-pitch ((t (:weight regular :height 120 :foundry "bitstream" :family "Bitstream Charter"))))
- '(variable-pitch-text ((t (:inherit variable-pitch))) nil "Handled by `spw/maybe-scale-basic-faces' instead."))
+
+ ;; The colour is from the Lucid build of Emacs.
+ '(region ((t (:extend t :background "#EECD82")))))
;; Set background colour but don't touch text terminals.
(dolist (ws '(x pgtk w32 ns))
@@ -109,13 +115,13 @@
`(,ws
. ((background-color
. ,(pcase (daemonp)
- ('nil "honeydew") ("gdbmacs" "linen") (_ "#FFFFF6")))))))
+ ('nil "#F0FFF0") ("gdbmacs" "#F5F5DC") (_ "#FFFFF6")))))))
(defun spw/maybe-scale-basic-faces (frame)
- "Entry for `window-size-change-functions' to increase font sizes
-from those set by `custom-set-faces' for frames on wide monitors,
-except where doing so would itself prevent fitting two 80-column
-windows side-by-side in the frame."
+ "Entry for `window-size-change-functions' to increase font sizes,
+relative to those set by the call to `custom-theme-set-faces' above, for
+frames on wide monitors, except where doing so would itself prevent fitting
+two 80-column windows side-by-side in the frame."
(when (display-graphic-p frame)
(let ((wide-monitor-p (> (cadddr (assoc 'geometry
(frame-monitor-attributes frame)))
@@ -167,32 +173,17 @@ windows side-by-side in the frame."
(set-terminal-parameter nil 'background-mode 'light)))
(add-hook 'tty-setup-hook #'spw/set-tmux-background-mode)
-(custom-set-variables
- ;; custom-set-variables 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.
+(custom-theme-set-variables
+ 'user
'(Man-notify-method 'aggressive)
'(after-save-hook '(executable-make-buffer-file-executable-if-script-p))
- '(appt-display-diary nil)
- '(appt-display-interval 6)
'(async-shell-command-buffer 'rename-buffer)
'(auth-source-save-behavior nil)
'(auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-saves/" t)))
'(backup-by-copying-when-linked t)
'(backup-directory-alist '(("." . "~/.emacs.d/backups/")))
- '(bongo-default-directory "~/annex/music/")
- '(bongo-insert-album-covers t)
- '(bongo-insert-whole-directory-trees t)
- '(bongo-mode-line-indicator-mode nil)
- '(bongo-prefer-library-buffers nil)
'(c-default-style "linux")
'(calc-kill-line-numbering nil)
- '(calendar-date-display-form
- '((format "%s-%.2d-%.2d %.3s" year (string-to-number month)
- (string-to-number day) dayname)))
- '(calendar-date-style 'iso)
- '(calendar-week-start-day 1)
'(column-number-mode t)
'(comint-prompt-read-only t)
'(compilation-scroll-output 'first-error)
@@ -202,223 +193,66 @@ windows side-by-side in the frame."
'(copy-region-blink-delay 0)
'(copyright-names-regexp "Sean Whitton")
'(copyright-year-ranges t)
- '(cperl-close-paren-offset -4 nil nil "See `cperl-indent-parens-as-block'.")
- '(cperl-indent-level 4)
- '(cperl-indent-parens-as-block t nil nil "Makes it easier to use longer names for subroutines.")
- '(cperl-lineup-step 1)
'(cursor-type 'box)
- '(cycle-spacing-actions '(just-one-space) nil nil "Restore Emacs 28 behaviour of M-SPC.")
+
+ ;; C-u M-\ to delete only before point, M-SPC M-SPC to delete only after.
+ '(cycle-spacing-actions '(just-one-space (delete-space-after -)))
+
'(dabbrev-case-fold-search t)
- '(diary-file "~/doc/emacs-diary")
- '(diary-list-entries-hook '(diary-include-other-diary-files diary-sort-entries))
- '(diary-mark-entries-hook '(diary-mark-included-diary-files))
- '(dired-clean-up-buffers-too nil)
- '(dired-dwim-target t)
- '(dired-free-space 'separate)
- '(dired-isearch-filenames t)
- '(dired-listing-switches "--group-directories-first -alh")
- '(dired-omit-files "\\`[.]?#\\|\\`[.][.]?\\'\\|\\`\\.git\\'")
- '(dired-recursive-copies 'always)
'(display-fill-column-indicator-character 32)
'(ediff-split-window-function 'split-window-horizontally)
'(eldoc-minor-mode-string nil)
'(emacs-lisp-docstring-fill-column 75)
'(enable-recursive-minibuffers t)
- '(eshell-cmpl-cycle-completions nil nil nil "This makes Eshell completions a bit more like bash's.")
- '(eshell-cmpl-ignore-case t)
- '(eshell-hist-ignoredups 'erase)
- '(eshell-history-append t)
- '(eshell-history-size 5000)
- '(eshell-save-history-on-exit nil)
- '(eshell-visual-commands
- '("vi" "screen" "tmux" "top" "htop" "less" "more" "mutt" "locmaint" "gen-DSA"
- "gen-DLA" "gen-ELA"))
'(fill-column 78)
- '(font-lock-maximum-decoration '((lisp-mode . 1) (consfigurator-lisp-mode . 1) (t . t)))
+ '(font-lock-maximum-decoration
+ '((lisp-mode . 1) (consfigurator-lisp-mode . 1) (t . t)))
'(gc-cons-threshold 16777216)
'(gdb-many-windows t)
- '(gdb-show-main t nil nil "This is helpful when gdb-many-windows is turned off.")
- '(git-rebase-confirm-cancel nil)
+
+ ;; This is helpful when gdb-many-windows is turned off.
+ '(gdb-show-main t)
+
'(global-so-long-mode t)
- '(gnus-article-skip-boring t)
- '(gnus-auto-center-summary nil)
- '(gnus-auto-select-next 'slightly-quietly)
- '(gnus-buttonized-mime-types
- '("text/x-\\(?:diff\\|patch\\)" "multipart/\\(?:alternative\\|signed\\)"))
- '(gnus-directory "~/local/News/")
- '(gnus-extra-headers '(To Cc List-Id))
- '(gnus-gcc-mark-as-read t)
- '(gnus-global-score-files '("~/doc/News/"))
- '(gnus-interactive-exit 'quiet)
- '(gnus-kill-files-directory "~/src/athpriv/News/")
- '(gnus-kill-summary-on-exit t nil nil "Would prefer nil but t seems advisable for notmuch groups.")
- '(gnus-large-ephemeral-newsgroup 8000)
- '(gnus-large-newsgroup 8000)
- '(gnus-mark-article-hook '(spw/gnus-mark-article-hook))
- '(gnus-message-archive-group "sent")
- '(gnus-message-archive-method '(nnmaildir "fmail" (directory "~/.fmail/")))
- '(gnus-permanently-visible-groups "^nnmaildir\\+fmail:\\(?:notes\\|sent\\)$")
- '(gnus-read-newsrc-file nil)
- '(gnus-refer-thread-use-search '(("nnmaildir:fmail")))
- '(gnus-save-killed-list
- "^\\(?:[^n]\\|n[^n]\\|nn[^s]\\|nns[^e]\\|nnse[^l]\\|nnsel[^e]\\|nnsele[^c]\\|nnselec[^t]\\|nnselect[^:]\\)")
- '(gnus-save-newsrc-file nil)
- '(gnus-search-default-engines '((nnmaildir . notmuch)))
- '(gnus-search-notmuch-remove-prefix "~/.fmail/")
- '(gnus-secondary-select-methods '((nnmaildir "fmail" (directory "~/.fmail/"))))
- '(gnus-sum-thread-tree-false-root "")
- '(gnus-sum-thread-tree-indent " ")
- '(gnus-sum-thread-tree-leaf-with-other "├► ")
- '(gnus-sum-thread-tree-root "")
- '(gnus-sum-thread-tree-single-leaf "╰► ")
- '(gnus-sum-thread-tree-vertical "│")
- '(gnus-summary-line-format "%U%R%z %(%12&user-date; %*%-23,23f%) %B%s\12")
- '(gnus-summary-mode-line-format "Gnus: %u&summary;%g [%A] %Z")
- '(gnus-summary-thread-gathering-function 'gnus-gather-threads-by-references)
- '(gnus-suppress-duplicates t)
- '(gnus-thread-sort-functions
- '(gnus-thread-sort-by-number gnus-thread-sort-by-total-score))
- '(gnus-topic-display-empty-topics nil)
- '(gnus-update-message-archive-method t)
- '(gnus-user-date-format-alist
- '((32042 . "%2l:%M%#p") (118823 . "Yest %2l:%M%#p") (604800 . "%a %2l:%M%#p")
- (16102447 . "%d %B") (t . "%Y-%b-%d")))
- '(haskell-indentation-layout-offset 4)
- '(haskell-indentation-left-offset 4)
'(help-window-keep-selected t)
- '(holiday-bahai-holidays nil)
- '(holiday-hebrew-holidays nil)
- '(holiday-islamic-holidays nil)
- '(howm-directory "~/doc/howm/")
- '(howm-file-name-format "%Y/%Y-%m-%d-%H%M.org")
- '(howm-keyword-file "~/doc/howm/.howm-keys")
- '(howm-view-use-grep t)
- '(icomplete-hide-common-prefix nil)
- '(icomplete-in-buffer t)
- '(icomplete-mode t)
- '(icomplete-show-matches-on-no-input t)
- '(icomplete-tidy-shadowed-file-names t)
'(imenu-auto-rescan t)
+ '(inferior-lisp-program "sbcl")
'(initial-major-mode 'spw/scratch-lisp-interaction-mode)
'(kill-read-only-ok t)
- '(log-edit-hook
- '(log-edit-insert-message-template log-edit-insert-cvs-template
- log-edit-insert-changelog
- spw/log-edit-show-diff) nil nil "Drop log-edit-show-files to avoid its window becoming most recently used for C-x o.")
- '(mail-envelope-from 'header nil nil "Bypass MTA rewriting user@localhost.")
- '(mail-specify-envelope-from t nil nil "Bypass MTA rewriting user@localhost.")
+
+ ;; Bypass MTA rewriting user@localhost.
+ '(mail-envelope-from 'header)
+ '(mail-specify-envelope-from t)
+
'(mail-user-agent 'gnus-user-agent)
'(mailscripts-detach-head-from-existing-branch 'ask)
'(mailscripts-extract-patches-branch-prefix "mail/")
'(mailscripts-project-library 'project)
- '(major-mode-remap-alist '((perl-mode . cperl-mode)) nil nil "cperl-mode doesn't try to indent lines within a POD, and usefully font locks scalars that are members of hashes and arrays.")
- '(make-pointer-invisible t nil nil "Works only for self-insert chars and undone by changes in window manager focus, but less annoying than `mouse-avoidance-mode'.")
- '(message-auto-save-directory "~/tmp/" nil nil "So locmaint will catch them.")
- '(message-citation-line-format "On %a %d %b %Y at %I:%M%p %Z, %N wrote:\12")
- '(message-citation-line-function 'message-insert-formatted-citation-line)
- '(message-forward-as-mime nil nil nil "For compatibility.")
- '(message-forward-before-signature nil nil nil "For compatibility.")
- '(message-forward-included-headers
- '("^From:" "^Subject:" "^Date:" "^To:" "^Cc:" "^Message-ID:") nil nil "For compatibility.")
- '(message-ignored-resent-headers
- "^Return-receipt\\|^X-Gnus\\|^Gnus-Warning:\\|^>?From \\|^Delivered-To:\\|^\\(?:X-\\)?Content-Length:\\|^X-UIDL:\\|^X-TUID:\\|^\\(?:X-\\)?Status:\\|^Lines:")
- '(message-make-forward-subject-function '(message-forward-subject-fwd) nil nil "For compatibility.")
- '(message-sendmail-envelope-from 'header nil nil "Bypass MTA rewriting user@localhost.")
- '(message-wash-forwarded-subjects t)
+
+ ;; `cperl-mode' doesn't try to indent lines within a POD, and usefully font
+ ;; locks scalars that are members of hashes and arrays.
+ '(major-mode-remap-alist '((perl-mode . cperl-mode)))
+
+ ;; Works only for self-insert chars and undone by changes in window manager
+ ;; focus, but less annoying than `mouse-avoidance-mode'.
+ '(make-pointer-invisible t)
+
'(minibuffer-follows-selected-frame nil)
- '(mm-decrypt-option 'known)
- '(mm-default-directory "~/tmp/")
- '(mm-file-name-rewrite-functions
- '(mm-file-name-delete-control mm-file-name-delete-gotchas
- mm-file-name-trim-whitespace
- mm-file-name-collapse-whitespace
- mm-file-name-replace-whitespace))
- '(mml-secure-openpgp-encrypt-to-self t nil nil "So I can read copies in my sent mail directory.")
- '(mml-secure-openpgp-sign-with-sender t)
'(mode-line-compact 'long)
- '(mouse-drag-copy-region t nil nil "X primary selection-like behaviour within Emacs even when not available outside.")
- '(mouse-highlight 1 nil nil "See `make-pointer-invisible'.")
+
+ ;; X primary selection-like behaviour within Emacs even when not available
+ ;; outside.
+ '(mouse-drag-copy-region t)
+
+ ;; See `make-pointer-invisible'.
+ '(mouse-highlight 1)
+
'(mouse-yank-at-point t)
'(native-comp-async-jobs-number 1)
'(native-comp-async-report-warnings-errors 'silent)
- '(nnmail-extra-headers '(To Cc List-Id))
- '(notmuch-address-use-company nil)
- '(nov-text-width 78)
- '(org-adapt-indentation t nil nil "Sometimes set to nil in .dir-locals.el, e.g. in ~/doc/newpapers.")
- '(org-agenda-entry-text-maxlines 3)
- '(org-agenda-files "~/doc/emacs-org-agenda-files")
- '(org-agenda-persistent-filter t)
- '(org-agenda-remove-times-when-in-prefix 'beg)
- '(org-agenda-restore-windows-after-quit nil nil nil "Interacts badly with `tab-bar-history-mode'.")
- '(org-agenda-skip-deadline-if-done t)
- '(org-agenda-skip-deadline-prewarning-if-scheduled 3)
- '(org-agenda-skip-scheduled-if-deadline-is-shown 'not-today)
- '(org-agenda-skip-scheduled-if-done t)
- '(org-agenda-skip-timestamp-if-done t)
- '(org-agenda-start-on-weekday nil)
- '(org-agenda-sticky t)
- '(org-agenda-timegrid-use-ampm t)
- '(org-agenda-todo-ignore-scheduled 'future)
- '(org-agenda-window-setup 'current-window)
- '(org-archive-location "~/doc/archive/howm/archive.org::* From %s")
- '(org-archive-save-context-info '(time file olpath))
- '(org-archive-subtree-save-file-p t)
- '(org-blank-before-new-entry '((heading . t) (plain-list-item . auto)))
- '(org-bookmark-names-plist nil nil nil "Turn off to avoid git merge conflicts.")
- '(org-cycle-separator-lines 0)
- '(org-deadline-warning-days 60)
- '(org-default-notes-file "~/doc/howm/refile.org")
- '(org-directory "~/doc/howm/")
- '(org-enforce-todo-checkbox-dependencies t)
- '(org-enforce-todo-dependencies t)
- '(org-fold-catch-invisible-edits 'show)
- '(org-fold-show-context-detail
- '((agenda . local) (bookmark-jump . lineage) (isearch . lineage)
- (default . ancestors-full)))
- '(org-footnote-section "Notes")
- '(org-imenu-depth 4)
- '(org-list-allow-alphabetical nil nil nil "So I can start lines with \"P. 211 - \" to refer to p. 211 not start a list.")
- '(org-list-demote-modify-bullet
- '(("-" . "+") ("+" . "*") ("*" . "-") ("1." . "-") ("1)" . "-")))
- '(org-list-use-circular-motion t)
- '(org-log-done 'time)
- '(org-log-into-drawer t)
- '(org-log-repeat nil nil nil "Cluttering, and information probably in git.")
- '(org-log-states-order-reversed nil)
- '(org-outline-path-complete-in-steps nil nil nil "Desirable with `icomplete-mode'.")
- '(org-read-date-prefer-future 'time)
- '(org-refile-allow-creating-parent-nodes 'confirm)
- '(org-refile-targets '((org-agenda-files :maxlevel . 5) (nil :maxlevel . 5)))
- '(org-refile-use-outline-path 'file)
- '(org-special-ctrl-a/e t)
- '(org-special-ctrl-k t)
- '(org-startup-folded nil)
- '(org-startup-indented nil nil nil "Ensures buffer text doesn't go beyond 80 columns.")
- '(org-tags-match-list-sublevels 'indented)
- '(org-todo-keyword-faces
- '(("SOMEDAY" :foreground "#0000FF" :weight bold)
- ("NEXT" :foreground "#DD0000" :weight bold)))
- '(org-todo-keywords
- '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
- (sequence "WAITING(w@)" "SOMEDAY(s)" "|" "CANCELLED(c)")))
- '(org-treat-S-cursor-todo-selection-as-state-change nil)
- '(org-treat-insert-todo-heading-as-state-change t)
- '(org-use-fast-todo-selection 'expert)
- '(org-yank-folded-subtrees nil)
'(proced-enable-color-flag t)
'(proced-show-remote-processes t)
'(project-switch-commands 'project-prefix-or-any-command)
- '(rcirc-default-full-name "Sean Whitton [spwhitton@spwhitton.name]")
- '(rcirc-default-nick "spwhitton")
- '(rcirc-default-user-name "spwhitton")
- '(rcirc-display-server-buffer nil)
- '(rcirc-log-directory "~/local/irclogs")
- '(rcirc-log-filename-function 'spw/rcirc-generate-log-filename)
- '(rcirc-log-flag t)
- '(rcirc-time-format "%b/%d %H:%M ")
- '(rcirc-track-abbreviate-flag nil)
- '(rcirc-track-ignore-server-buffer-flag t)
- '(rcirc-track-minor-mode t)
'(read-buffer-completion-ignore-case t)
'(read-file-name-completion-ignore-case t)
'(read-mail-command 'gnus)
@@ -427,38 +261,55 @@ windows side-by-side in the frame."
'(remember-notes-buffer-name "*scratch*")
'(remote-file-name-inhibit-delete-by-moving-to-trash t)
'(require-final-newline t)
- '(save-interprogram-paste-before-kill nil nil nil "See <https://debbugs.gnu.org/53728>.")
- '(save-place-mode t nil nil "If quitting Emacs is slow, set `save-place-forget-unreadable-files' to nil.")
+
+ ;; See <https://debbugs.gnu.org/53728>.
+ '(save-interprogram-paste-before-kill nil)
+
+ ;; If quitting Emacs is slow set `save-place-forget-unreadable-files' to nil.
+ '(save-place-mode t)
+
'(savehist-additional-variables '(compile-history log-edit-comment-ring))
'(savehist-mode t)
'(select-active-regions 'only)
'(select-enable-primary t)
'(send-mail-function 'sendmail-send-it)
'(shell-command-prompt-show-cwd t)
- '(show-paren-when-point-in-periphery t nil nil "Useful for C-M-d.")
+
+ ;; Useful for C-M-d.
+ '(show-paren-when-point-in-periphery t)
+
'(shr-max-width 78)
'(slime-load-failed-fasl 'never)
'(tab-bar-history-mode t)
'(tab-bar-show 1)
- '(tramp-auto-save-directory "~/.emacs.d/auto-saves/" nil nil "Put TRAMP auto-saves under local `user-emacs-directory'.")
- '(tramp-backup-directory-alist '(("." . "~/.emacs.d/backups/")) nil nil "Put TRAMP backups under remote ~/.emacs.d/.")
+ '(text-mode-ispell-word-completion nil)
+
+ ;; Put TRAMP auto-saves under local `user-emacs-directory'.
+ '(tramp-auto-save-directory "~/.emacs.d/auto-saves/")
+ ;; Put TRAMP backups under remote ~/.emacs.d/.
+ '(tramp-backup-directory-alist '(("." . "~/.emacs.d/backups/")))
+
'(tramp-copy-size-limit nil)
'(tramp-default-method "rsync")
- '(tramp-use-connection-share nil nil nil "Rely on my ~/.ssh/config.")
- '(tramp-verbose 1 nil nil "Manual says this should improve performance.")
+
+ ;; Rely on my ~/.ssh/config.
+ '(tramp-use-connection-share nil)
+
+ ;; Manual says this should improve performance.
+ '(tramp-verbose 1)
+
'(transient-cycles-buffer-siblings-mode t)
'(transient-cycles-tab-bar-mode t)
- '(transient-cycles-window-buffers-cycle-backwards-key [134217777] nil nil "M-1.")
- '(transient-cycles-window-buffers-cycle-forwards-key [134217780] nil nil "M-4.")
+ '(transient-cycles-window-buffers-cycle-backwards-key [134217777]) ; M-1
+ '(transient-cycles-window-buffers-cycle-forwards-key [134217780]) ; M-4
'(transient-cycles-window-buffers-mode t)
'(uniquify-buffer-name-style 'forward nil (uniquify))
'(use-short-answers t)
- '(vc-deduce-backend-nonvc-modes t)
- '(vc-find-revision-no-save t)
- '(vc-follow-symlinks t)
- '(vc-git-diff-switches '("--patch-with-stat" "-M" "-C") nil nil "We might also consider -B.")
- '(vc-git-print-log-follow t)
- '(view-read-only t nil nil "Rebind otherwise useless self-insert keys, and means existing C-x C-r, C-x 4 r etc. usable for getting into mode.")
+
+ ;; Rebind otherwise useless self-insert keys, and means existing C-x C-r,
+ ;; C-x 4 r etc. usable for getting into the mode.
+ '(view-read-only t)
+
'(warning-suppress-types '((comp)))
'(window-combination-resize t)
'(x-stretch-cursor t))
@@ -522,6 +373,11 @@ available are present in the `load-path'."
for form = `(add-hook ',hook #',function)
if name collect `(with-eval-after-load ',name ,form) else collect form)))
+(defmacro spw/feature-add-to-list (list-var feature &rest elements)
+ (declare (indent 2))
+ `(with-eval-after-load ',feature
+ ,@(cl-loop for el in elements collect `(add-to-list ',list-var ,el))))
+
(cl-defmacro spw/define-skeleton
(command (mode &key abbrev key (file `',mode)
(map (intern (concat (symbol-name mode) "-map")))
@@ -1187,6 +1043,14 @@ To be used only when it seems to be necessary."
;;; Icomplete
+(custom-theme-set-variables
+ 'user
+ '(icomplete-hide-common-prefix nil)
+ '(icomplete-in-buffer t)
+ '(icomplete-mode t)
+ '(icomplete-show-matches-on-no-input t)
+ '(icomplete-tidy-shadowed-file-names t))
+
;; Possibly we could call `minibuffer-complete-word' if we know we're
;; completing the name of a Lisp symbol.
(spw/reclaim-keys-from minibuffer minibuffer-local-completion-map " " "?")
@@ -1641,6 +1505,21 @@ the non-side windows deleted by `delete-other-windows' will also reappear."
;;;; The Emacs shell
+(custom-theme-set-variables
+ 'user
+ ;; This makes Eshell completions a bit more like bash's.
+ '(eshell-cmpl-cycle-completions nil)
+
+ '(eshell-cmpl-ignore-case t)
+ '(eshell-hist-ignoredups 'erase)
+ '(eshell-history-append t)
+ '(eshell-history-size 5000)
+ '(eshell-save-history-on-exit nil))
+(spw/feature-add-to-list eshell-modules-list esh-module
+ 'eshell-elecslash 'eshell-tramp 'eshell-xtra)
+(spw/feature-add-to-list eshell-visual-commands em-term
+ "locmaint" "gen-DSA" "gen-ELA")
+
(with-eval-after-load 'esh-cmd
(add-hook 'eshell-pre-command-hook
(lambda ()
@@ -1683,11 +1562,6 @@ the non-side windows deleted by `delete-other-windows' will also reappear."
(with-eval-after-load 'esh-mode
(define-key eshell-mode-map "\C-zp" #'spw/eshell-cd-project-root))
-;; Work around Emacs bug #54977.
-(with-eval-after-load 'esh-module
- (mapc (apply-partially #'add-to-list 'eshell-modules-list)
- '(eshell-elecslash eshell-tramp eshell-xtra)))
-
(spw/define-skeleton spw/eshell-libexec
(eshell-mode :abbrev "le" :file "esh-mode")
"" "" "~/" '(eshell-electric-forward-slash) "src/dotfiles/scripts/")
@@ -2796,6 +2670,7 @@ Called by '~/src/dotfiles/bin/emacsclient --spw/update-environment'."
;; `compile' or `project-compile' is called, and one Emacs frame/tab for GUD.
(defun spw/run-or-restore-gud (arg)
(interactive "P")
+ (require 'gdb-mi)
(if (or arg (not (and (bound-and-true-p gud-comint-buffer)
(get-buffer-process gud-comint-buffer))))
;; Start a new debugging session even if one already exists.
@@ -2875,6 +2750,43 @@ Called by '~/src/dotfiles/bin/emacsclient --spw/update-environment'."
;;;; Composing mail
+(custom-theme-set-variables
+ 'user
+ ;; So locmaint will catch them.
+ '(message-auto-save-directory "~/tmp/")
+
+ '(message-citation-line-format "On %a %d %b %Y at %I:%M%p %Z, %N wrote:\12")
+ '(message-citation-line-function 'message-insert-formatted-citation-line)
+
+ ;; For compatibility.
+ '(message-forward-as-mime nil)
+ '(message-forward-before-signature nil)
+ '(message-forward-included-headers
+ '("^From:" "^Subject:" "^Date:" "^To:" "^Cc:" "^Message-ID:"))
+ '(message-make-forward-subject-function '(message-forward-subject-fwd))
+
+ '(message-ignored-resent-headers
+ "^Return-receipt\\|^X-Gnus\\|^Gnus-Warning:\\|^>?From \\|^Delivered-To:\\|^\\(?:X-\\)?Content-Length:\\|^X-UIDL:\\|^X-TUID:\\|^\\(?:X-\\)?Status:\\|^Lines:")
+
+ ;; Bypass MTA rewriting user@localhost.
+ '(message-sendmail-envelope-from 'header)
+
+ '(message-wash-forwarded-subjects t)
+ '(mm-decrypt-option 'known)
+ '(mm-default-directory "~/tmp/")
+ '(mm-file-name-rewrite-functions
+ '(mm-file-name-delete-control mm-file-name-delete-gotchas
+ mm-file-name-trim-whitespace
+ mm-file-name-collapse-whitespace
+ mm-file-name-replace-whitespace))
+
+ ;; So I can read copies in my sent mail directory.
+ '(mml-secure-openpgp-encrypt-to-self t)
+
+ '(mml-secure-openpgp-sign-with-sender t)
+ '(nnmail-extra-headers '(To Cc List-Id))
+ '(notmuch-address-use-company nil))
+
(defvar spw/debian-bts-pseudoheader-regexp
;; "^\\([A-Za-z][a-z]+: [^ ]+\\|[cC]ontrol: .+\\)$"
"^[A-Za-z][a-z]+: [^ ]+"
@@ -3075,6 +2987,16 @@ mutt's review view, after exiting EDITOR."
;;;; Dired
+(custom-theme-set-variables
+ 'user
+ '(dired-clean-up-buffers-too nil)
+ '(dired-dwim-target t)
+ '(dired-free-space 'separate)
+ '(dired-isearch-filenames t)
+ '(dired-listing-switches "--group-directories-first -alh")
+ '(dired-omit-files "\\`[.]?#\\|\\`[.][.]?\\'\\|\\`\\.git\\'")
+ '(dired-recursive-copies 'always))
+
;; this is the way you're meant to request dired-aux, not just dired-x,
;; according to (info "(dired-x) Installation")
(with-eval-after-load 'dired (require 'dired-x))
@@ -3184,6 +3106,59 @@ mutt's review view, after exiting EDITOR."
;;;; Gnus
+(custom-theme-set-variables
+ 'user
+ '(gnus-article-skip-boring t)
+ '(gnus-auto-center-summary nil)
+ '(gnus-auto-select-next 'slightly-quietly)
+ '(gnus-buttonized-mime-types
+ '("text/x-\\(?:diff\\|patch\\)" "multipart/\\(?:alternative\\|signed\\)"))
+ '(gnus-directory "~/local/News/")
+ '(gnus-extra-headers '(To Cc List-Id))
+ '(gnus-gcc-mark-as-read t)
+ '(gnus-global-score-files '("~/doc/News/"))
+ '(gnus-interactive-exit 'quiet)
+ '(gnus-kill-files-directory "~/src/athpriv/News/")
+
+ ;; Would prefer nil but t seems advisable for notmuch groups.
+ '(gnus-kill-summary-on-exit t)
+
+ '(gnus-large-ephemeral-newsgroup 8000)
+ '(gnus-large-newsgroup 8000)
+ '(gnus-mark-article-hook '(spw/gnus-mark-article-hook))
+ '(gnus-message-archive-group "sent")
+ '(gnus-message-archive-method '(nnmaildir "fmail" (directory "~/.fmail/")))
+ '(gnus-permanently-visible-groups "^nnmaildir\\+fmail:\\(?:notes\\|sent\\)$")
+ '(gnus-read-newsrc-file nil)
+ '(gnus-refer-thread-use-search '(("nnmaildir:fmail")))
+ '(gnus-save-killed-list
+ "^\\(?:[^n]\\|n[^n]\\|nn[^s]\\|nns[^e]\\|nnse[^l]\\|nnsel[^e]\\|nnsele[^c]\\|nnselec[^t]\\|nnselect[^:]\\)")
+ '(gnus-save-newsrc-file nil)
+ '(gnus-search-default-engines '((nnmaildir . notmuch)))
+ '(gnus-search-notmuch-remove-prefix "~/.fmail/")
+ '(gnus-secondary-select-methods
+ '((nnmaildir "fmail" (directory "~/.fmail/"))))
+ '(gnus-sum-thread-tree-false-root "")
+ '(gnus-sum-thread-tree-indent " ")
+ '(gnus-sum-thread-tree-leaf-with-other "├► ")
+ '(gnus-sum-thread-tree-root "")
+ '(gnus-sum-thread-tree-single-leaf "╰► ")
+ '(gnus-sum-thread-tree-vertical "│")
+ '(gnus-summary-line-format "%U%R%z %(%12&user-date; %*%-23,23f%) %B%s\12")
+ '(gnus-summary-mode-line-format "Gnus: %u&summary;%g [%A] %Z")
+ '(gnus-summary-thread-gathering-function 'gnus-gather-threads-by-references)
+ '(gnus-suppress-duplicates t)
+ '(gnus-thread-sort-functions
+ '(gnus-thread-sort-by-number gnus-thread-sort-by-total-score))
+ '(gnus-topic-display-empty-topics nil)
+ '(gnus-update-message-archive-method t)
+ '(gnus-user-date-format-alist
+ '((32042 . "%2l:%M%#p")
+ (118823 . "Yest %2l:%M%#p")
+ (604800 . "%a %2l:%M%#p")
+ (16102447 . "%d %B")
+ (t . "%Y-%b-%d"))))
+
(with-eval-after-load 'gnus
(cond ((spw/on-host-p "chiark.greenend.org.uk")
(setq gnus-select-method
@@ -3905,25 +3880,39 @@ unread."
(gnus-summary-goto-article article)))
(advice-add 'org-gnus-follow-link :around #'spw/org-gnus-follow-link)
-(defun spw/gnus-fastmail-trash (n)
+(defun spw/gnus-purelymail-trash (n)
(interactive "p")
(gnus-summary-move-article n "nnmaildir+fmail:trash"))
(with-eval-after-load 'gnus-sum
(define-key gnus-summary-mode-map
- [remap gnus-summary-delete-article] #'spw/gnus-fastmail-trash))
+ [remap gnus-summary-delete-article] #'spw/gnus-purelymail-trash))
-(defun spw/gnus-fastmail-learn-spam (n)
+(defun spw/gnus-purelymail-learn-spam (n)
(interactive "p")
(save-excursion (gnus-summary-mark-forward n))
- (gnus-summary-move-article n "nnmaildir+fmail:spam")
+ (gnus-summary-move-article n "nnmaildir+fmail:junk")
(gnus-summary-next-unread-article))
(with-eval-after-load 'gnus-sum
- (define-key gnus-summary-mode-map [f5] #'spw/gnus-fastmail-learn-spam)
- (define-key gnus-summary-mode-map "\C-z\C-s" #'spw/gnus-fastmail-learn-spam))
+ (define-key gnus-summary-mode-map [f5] #'spw/gnus-purelymail-learn-spam)
+ (define-key gnus-summary-mode-map "\C-z\C-s" #'spw/gnus-purelymail-learn-spam))
;;;; rcirc
+(custom-theme-set-variables
+ 'user
+ '(rcirc-default-full-name "Sean Whitton [spwhitton@spwhitton.name]")
+ '(rcirc-default-nick "spwhitton")
+ '(rcirc-default-user-name "spwhitton")
+ '(rcirc-display-server-buffer nil)
+ '(rcirc-log-directory "~/local/irclogs")
+ '(rcirc-log-filename-function 'spw/rcirc-generate-log-filename)
+ '(rcirc-log-flag t)
+ '(rcirc-time-format "%b/%d %H:%M ")
+ '(rcirc-track-abbreviate-flag nil)
+ '(rcirc-track-ignore-server-buffer-flag t)
+ '(rcirc-track-minor-mode t))
+
(defun spw/rcirc-generate-log-filename (process target)
(concat (file-name-concat (format-time-string "%Y/%m")
(process-name process) (or target "server"))
@@ -4003,6 +3992,24 @@ unread."
;;;; VC
+(custom-theme-set-variables
+ 'user
+ '(git-rebase-confirm-cancel nil)
+ '(vc-deduce-backend-nonvc-modes t)
+ '(vc-find-revision-no-save t)
+ '(vc-follow-symlinks t)
+
+ ;; We might also consider -B.
+ '(vc-git-diff-switches '("--patch-with-stat" "-M" "-C"))
+
+ '(vc-git-print-log-follow t))
+
+;; Avoid `log-edit-show-files' window becoming most recently used for C-x o.
+(with-eval-after-load 'log-edit
+ (customize-set-variable 'log-edit-hook
+ (delete 'log-edit-show-files log-edit-hook)))
+(spw/feature-add-to-list log-edit-hook log-edit 'spw/log-edit-show-diff)
+
(require 'git-commit nil t)
(spw/when-library-available mailscripts
@@ -4015,7 +4022,7 @@ unread."
"vt" notmuch-extract-thread-patches-to-project
"vw" mailscripts-extract-message-patches-to-project))
-;; Emacs 30: move into `custom-set-variables'.
+;; Emacs 30: move into `custom-theme-set-variables' call.
(when (>= emacs-major-version 30)
(setopt vc-git-log-switches '("--format=fuller" "--stat")))
@@ -4320,6 +4327,7 @@ unread."
#'org-d20-d%
#'org-d20-d20)))))
+(customize-set-variable 'nov-text-width 78)
(spw/when-library-available nov
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)))
@@ -4333,6 +4341,11 @@ unread."
(dolist (hook '(html-mode-hook css-mode-hook))
(add-hook hook 'rainbow-mode)))
+(custom-theme-set-variables
+ 'user
+ '(haskell-indentation-layout-offset 4)
+ '(haskell-indentation-left-offset 4))
+
(spw/feature-add-hook subword-mode haskell-mode)
;; Use a local hook to turn on an appropriate indentation mode. Use
@@ -4353,6 +4366,14 @@ unread."
(spw/feature-add-hook orgtbl-mode message)
+(custom-theme-set-variables
+ 'user
+ '(bongo-default-directory "~/annex/music/")
+ '(bongo-insert-album-covers t)
+ '(bongo-insert-whole-directory-trees t)
+ '(bongo-mode-line-indicator-mode nil)
+ '(bongo-prefer-library-buffers nil))
+
(spw/feature-add-hook (lambda ()
(dired-hide-details-mode
(if bongo-dired-library-mode 1 -1)))
@@ -4464,15 +4485,6 @@ unread."
(with-temp-buffer (call-interactively #'hyperspec-lookup)))
(global-set-key "\C-cgh" #'spw/hyperspec-lookup)
-;; `inf-lisp' says this is a defcustom and `slime' says it is a defvar, so
-;; `custom-save-variables' will print the NOW field in the corresponding
-;; argument to `custom-set-variables' as t or nil depending on whether or not
-;; `inf-lisp' and/or `slime' happen to be loaded, and possibly even depending
-;; on the order in which they were loaded. To prevent spurious changes to the
-;; NOW field randomly showing up in git diffs of init.el, set the variable
-;; without using the customisation interface.
-(setq inferior-lisp-program "sbcl")
-
(defvar spw/last-command-was-slime-async-eval nil)
(defvar spw/last-slime-async-eval-command-frame nil)
@@ -4786,6 +4798,97 @@ before uploading to NEW again." \n \n
;;;; Org-mode
+(custom-theme-set-faces
+ 'user
+ '(org-code ((t (:inherit (shadow fixed-pitch)))))
+ '(org-date ((t (:inherit fixed-pitch :foreground "Purple" :underline t))))
+ '(org-verbatim ((t (:inherit (shadow fixed-pitch))))))
+
+(custom-theme-set-variables
+ 'user
+ ;; Sometimes set to nil in .dir-locals.el, e.g. in ~/doc/newpapers.
+ '(org-adapt-indentation t nil)
+
+ '(org-agenda-entry-text-maxlines 3)
+ '(org-agenda-files "~/doc/emacs-org-agenda-files")
+ '(org-agenda-persistent-filter t)
+ '(org-agenda-remove-times-when-in-prefix 'beg)
+
+ ;; Interacts badly with `tab-bar-history-mode'.
+ '(org-agenda-restore-windows-after-quit nil)
+
+ '(org-agenda-skip-deadline-if-done t)
+ '(org-agenda-skip-deadline-prewarning-if-scheduled 3)
+ '(org-agenda-skip-scheduled-if-deadline-is-shown 'not-today)
+ '(org-agenda-skip-scheduled-if-done t)
+ '(org-agenda-skip-timestamp-if-done t)
+ '(org-agenda-start-on-weekday nil)
+ '(org-agenda-sticky t)
+ '(org-agenda-timegrid-use-ampm t)
+ '(org-agenda-todo-ignore-scheduled 'future)
+ '(org-agenda-window-setup 'current-window)
+ '(org-archive-location "~/doc/archive/howm/archive.org::* From %s")
+ '(org-archive-save-context-info '(time file olpath))
+ '(org-archive-subtree-save-file-p t)
+ '(org-blank-before-new-entry '((heading . t) (plain-list-item . auto)))
+
+ ;; Turn off to avoid git merge conflicts.
+ '(org-bookmark-names-plist nil)
+
+ '(org-cycle-separator-lines 0)
+ '(org-deadline-warning-days 60)
+ '(org-default-notes-file "~/doc/howm/refile.org")
+ '(org-directory "~/doc/howm/")
+ '(org-enforce-todo-checkbox-dependencies t)
+ '(org-enforce-todo-dependencies t)
+ '(org-fold-catch-invisible-edits 'show)
+ '(org-fold-show-context-detail
+ '((agenda . local) (bookmark-jump . lineage) (isearch . lineage)
+ (default . ancestors-full)))
+ '(org-footnote-section "Notes")
+ '(org-imenu-depth 4)
+
+ ;; So I can start lines with \"P. 211 - \" to refer to p. 211, rather than
+ ;; starting a list.
+ '(org-list-allow-alphabetical nil)
+
+ '(org-list-demote-modify-bullet
+ '(("-" . "+") ("+" . "*") ("*" . "-") ("1." . "-") ("1)" . "-")))
+ '(org-list-use-circular-motion t)
+ '(org-log-done 'time)
+ '(org-log-into-drawer t)
+
+ ;; Cluttering, and information probably in git.
+ '(org-log-repeat nil)
+
+ '(org-log-states-order-reversed nil)
+
+ ;; Desirable with `icomplete-mode'.
+ '(org-outline-path-complete-in-steps nil)
+
+ '(org-read-date-prefer-future 'time)
+ '(org-refile-allow-creating-parent-nodes 'confirm)
+ '(org-refile-targets '((org-agenda-files :maxlevel . 5) (nil :maxlevel . 5)))
+ '(org-refile-use-outline-path 'file)
+ '(org-special-ctrl-a/e t)
+ '(org-special-ctrl-k t)
+ '(org-startup-folded nil)
+
+ ;; Ensures buffer text doesn't go beyond 80 columns.
+ '(org-startup-indented nil)
+
+ '(org-tags-match-list-sublevels 'indented)
+ '(org-todo-keyword-faces
+ '(("SOMEDAY" :foreground "#0000FF" :weight bold)
+ ("NEXT" :foreground "#DD0000" :weight bold)))
+ '(org-todo-keywords
+ '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
+ (sequence "WAITING(w@)" "SOMEDAY(s)" "|" "CANCELLED(c)")))
+ '(org-treat-S-cursor-todo-selection-as-state-change nil)
+ '(org-treat-insert-todo-heading-as-state-change t)
+ '(org-use-fast-todo-selection 'expert)
+ '(org-yank-folded-subtrees nil))
+
(global-set-key "\C-coc" #'org-capture)
(global-set-key "\C-col" #'org-store-link)
(global-set-key "\C-coa" #'org-agenda)
@@ -4987,8 +5090,7 @@ Called by doccheckin script."
;; setting this means if we type C-c C-e o O then the PDF opens for inspection
(setq org-odt-preferred-output-format "pdf")
-(with-eval-after-load 'org
- (add-to-list 'org-file-apps '(system . "xdg-open %s")))
+(spw/feature-add-to-list org-file-apps org '(system . "xdg-open %s"))
;; ... but also ensure we get a .docx (would be better to make
;; `org-odt-preferred-output-format' accept a list)
@@ -5328,6 +5430,23 @@ different occasions."
;;;; Diary
+(custom-theme-set-variables
+ 'user
+ '(appt-display-diary nil)
+ '(appt-display-interval 6)
+ '(calendar-date-display-form
+ '((format "%s-%.2d-%.2d %.3s" year (string-to-number month)
+ (string-to-number day) dayname)))
+ '(calendar-date-style 'iso)
+ '(calendar-week-start-day 1)
+ '(diary-file "~/doc/emacs-diary")
+ '(diary-list-entries-hook
+ '(diary-include-other-diary-files diary-sort-entries))
+ '(diary-mark-entries-hook '(diary-mark-included-diary-files))
+ '(holiday-bahai-holidays nil)
+ '(holiday-hebrew-holidays nil)
+ '(holiday-islamic-holidays nil))
+
;; Don't bind `diary' globally as for viewing purposes we use Org agenda
;; bindings, and for editing purposes just C-x b suffices.
(global-set-key "\C-cC" #'calendar)
@@ -5422,6 +5541,13 @@ We don't use the FILES parameter in the entry for \"d\" in
;;;; Howm
+(custom-theme-set-variables
+ 'user
+ '(howm-directory "~/doc/howm/")
+ '(howm-file-name-format "%Y/%Y-%m-%d-%H%M.org")
+ '(howm-keyword-file "~/doc/howm/.howm-keys")
+ '(howm-view-use-grep t))
+
(setq howm-prefix "\C-cc"
;; Use Org-mode style because our notes are in `org-mode'.
@@ -5519,6 +5645,18 @@ We don't use the FILES parameter in the entry for \"d\" in
;;;; Perl
+(custom-theme-set-variables
+ 'user
+ ;; See `cperl-indent-parens-as-block'.
+ '(cperl-close-paren-offset -4)
+
+ '(cperl-indent-level 4)
+
+ ;; Makes it easier to use longer names for subroutines.
+ '(cperl-indent-parens-as-block t)
+
+ '(cperl-lineup-step 1))
+
(defun spw/perl-add-use (module)
(interactive "suse ")
(let ((line (concat "use " module
diff --git a/.gtkrc-2.0 b/.gtkrc-2.0
deleted file mode 100644
index 62d8ede9..00000000
--- a/.gtkrc-2.0
+++ /dev/null
@@ -1,2 +0,0 @@
-include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"
-gtk-key-theme-name = "Emacs"
diff --git a/.mbsyncrc b/.mbsyncrc
index 995f5df0..3eb4264e 100644
--- a/.mbsyncrc
+++ b/.mbsyncrc
@@ -1,62 +1,51 @@
-# -*- mode: conf-space; -*-
-
-# ---- defaults
-
Create Near
-# FastMail always expunges server-side. mbsync author says this is a
-# really bad idea. Let's just have mbsync expunge client-side.
-Expunge Near
+Expunge Both
SyncState *
-# ---- stores
-
-MaildirStore fmmaildir
+MaildirStore pmmaildir
Path ~/.fmail/
Inbox ~/.fmail/inbox
-# Flatten .
-
-# Trash option doesn't seem to work. Setting Trash to trash and
-# Expunge to Near makes deleted mail get moved into the trash folder,
-# but it is left marked as deleted so it the FastMail IMAP server
-# won't add it to the folder, however many times mbsync tries to put
-# it there. So just unbind deletion in mutt for now.
-# Trash trash
-
-IMAPAccount fastmail
-Host imap.fastmail.com
-User spwhitton@fastmail.com
-AuthMechs LOGIN
-PassCmd "cat ~/local/auth/fmailsyncpass"
-SSLType IMAPS
-SSLVersions TLSv1.2
-CertificateFile ~/src/dotfiles/lib-src/certs/fastmail.crt
+IMAPAccount purelymail
+Host imap.purelymail.com
+User spwhitton@spwhitton.name
+AuthMechs LOGIN
+PassCmd "cat ~/local/auth/fmailsyncpass"
+SSLType IMAPS
+SSLVersions TLSv1.3
SystemCertificates no
+CertificateFile /etc/ssl/certs/ISRG_Root_X1.pem
+
+IMAPStore pmimap
+Account purelymail
-IMAPStore fmimap
-Account fastmail
-# UseNamespace no
-# PathDelimiter .
+Channel pmaili
+Far :pmimap:INBOX
+Near :pmmaildir:
-# ---- mailboxes
+Channel pmails
+Far :pmimap:Sent
+Near :pmmaildir:sent
-Channel fmaili
-Far :fmimap:INBOX
-Near :fmmaildir:
+Channel pmailj
+Far :pmimap:Junk
+Near :pmmaildir:junk
-Channel fmails
-Far :fmimap:"Sent Items"
-Near :fmmaildir:sent
+Channel pmailt
+Far :pmimap:Trash
+Near :pmmaildir:trash
-# if I find myself wanting to separate listservs into different
-# folders within Lists/ on the server side (unlikely because I am
-# using notmuch), something like this should allow downloading all of
-# them without the INBOX.Lists prefix:
+# notes written on smartphone
+Channel pmailn
+Far :pmimap:Notes
+Near :pmmaildir:notes
-# Channel fmaill
-# Far :fmimap:Lists/
-# Near :fmmaildir:
-# Patterns * !INBOX
+Group purelymail
+Channel pmaili
+Channel pmails
+Channel pmailj
+Channel pmailt
+Channel pmailn
# So long as I'm using a mail provider that supports Sieve, can install this
# to deliver all mail which has a List-Id into a separate Lists folder. The
@@ -83,38 +72,3 @@ Near :fmmaildir:sent
# {
# keep;
# }
-
-# Channel lists
-# Far :fmimap:Lists
-# Near :fmmaildir:lists
-
-Channel fmailt
-Far :fmimap:Trash
-Near :fmmaildir:trash
-
-Channel fmailj
-Far :fmimap:"Junk Mail"
-Near :fmmaildir:junk
-
-Channel spamtraining
-Far :fmimap:Training/Spam
-Near :fmmaildir:spam
-
-Channel hamtraining
-Far :fmimap:Training/Ham
-Near :fmmaildir:ham
-
-# notes from tablet computer / smartphone
-Channel notes
-Far :fmimap:Notes
-Near :fmmaildir:notes
-
-Group fastmail
-Channel fmaili
-Channel fmails
-Channel fmailt
-# Channel lists
-Channel notes
-Channel fmailj
-Channel spamtraining
-Channel hamtraining
diff --git a/.shinit b/.shinit
index 342a2e01..2ee29f95 100644
--- a/.shinit
+++ b/.shinit
@@ -10,6 +10,9 @@ ls --version 2>/dev/null | grep -q "GNU coreutils" \
grep --version 2>/dev/null | grep -q "GNU grep" \
&& alias grep="grep --color=auto"
+alias doas="doas "
+alias sudo="sudo "
+
alias e="$EDITOR"
alias d="emacsclient -te '(dired \".\")'"
alias ta="tmux new-session -A -s default -c ~"
@@ -28,6 +31,7 @@ alias arsync="rsync -aSHAXc --partial --numeric-ids --info=progress2"
alias axrsync="rsync -aSHAXxc --partial --numeric-ids --info=progress2"
# To have a terminal emulator exit upon remote tmux detach, like my C-i s.
alias sshta="exec ssh-and-tmux"
+alias pdd="dd bs=4M status=progress conv=fdatasync"
upenv () {
# don't want to do this outside of tmux as then tmux show-environment will
diff --git a/.config/i3/config b/archive/.config/i3/config
index 470fd3f7..ffb81c9b 100644
--- a/.config/i3/config
+++ b/archive/.config/i3/config
@@ -2,7 +2,7 @@
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
-# ** not yet adjusted for or tested with PaperWM-inspired i3status-wrapper **
+# ** not updated for, or tested with, papersway **
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
diff --git a/bin/choose-wallpaper b/archive/bin/choose-wallpaper
index 5fc14c83..5fc14c83 100755
--- a/bin/choose-wallpaper
+++ b/archive/bin/choose-wallpaper
diff --git a/perl5/Local/Desktop.pm b/archive/perl5/Desktop.pm
index 858e57cd..858e57cd 100644
--- a/perl5/Local/Desktop.pm
+++ b/archive/perl5/Desktop.pm
diff --git a/scripts/desktop/dmenu_ssh b/archive/scripts/desktop/dmenu_ssh
index 76d9aa72..76d9aa72 100755
--- a/scripts/desktop/dmenu_ssh
+++ b/archive/scripts/desktop/dmenu_ssh
diff --git a/scripts/desktop/dmenu_window b/archive/scripts/desktop/dmenu_window
index 8dc33fde..8dc33fde 100755
--- a/scripts/desktop/dmenu_window
+++ b/archive/scripts/desktop/dmenu_window
diff --git a/scripts/desktop/i3-startup-always b/archive/scripts/desktop/i3-startup-always
index b2a02e25..b2a02e25 100755
--- a/scripts/desktop/i3-startup-always
+++ b/archive/scripts/desktop/i3-startup-always
diff --git a/bin/debpaste b/bin/debpaste
deleted file mode 100755
index 72e8ce2c..00000000
--- a/bin/debpaste
+++ /dev/null
@@ -1,542 +0,0 @@
-#!/usr/bin/perl -w
-#
-
-=head1 NAME
-
-debpaste - http://paste.debian.net/ XML-RPC client
-
-=cut
-
-# Author: Hanno Hecker <vetinari@ankh-morp.org>
-# Licence: AGPL 3.0 (http://www.fsf.org/licensing/licenses/agpl-3.0.html)
-# Version: $Id: debpaste 25 2012-11-18 07:21:02Z vetinari $
-# SVN: http://svn.ankh-morp.org:8080/tools/paste-dn/
-#
-# Required:
-# deb: perl-base perl-modules
-# libtimedate-perl libfrontier-rpc-perl libtext-iconv-perl
-#
-# ToDo:
-# * "get" formatting?
-# * wishlist :)
-#
-use strict;
-use Getopt::Long;
-use Pod::Usage;
-my %config;
-my $VERSION = '1.1 ($Rev: 25 $)';
-
-=head1 SYNOPSIS
-
-B<debpaste> ACTION [OPTIONS] [CODE|ID]
-
-=head1 ACTIONS
-
-=over 4
-
-=item add
-
-Usage: debpaste add [OPTIONS] [CODE]
-
-Adds a new paste to L<http://paste.debian.net/>. If no code is given on the
-command line, it will read from stdin.
-
-Your paste infos are saved to I<~/.debpaste.history>
-
-=item del
-
-Usage: debpaste del [OPTIONS] ID
-
-Deletes paste with id ID. This must be an ID which you have pasted before
-(and is in your history file)
-
-=item get
-
-Usage: debpaste get [OPTIONS] ID
-
-Fetches the paste with id ID from L<http://paste.debian.net>. To C<download>
-a paste use something like
-
- debpaste get --noheader ID > OUTFILE
-
-=item lang
-
-Usage: debpaste lang [OPTIONS]
-
-Dumps the list of available languages for syntax highlighting, use the
-B<--lang=LANG> option when B<add>ing a paste.
-
-=item edit
-
-Usage: debpaste edit [OPTIONS] ID
-
-Downloads the paste with id ID, spawns an editor, and sends the edited file
-as new paste.
-
-=item expire
-
-Usage: debpaste expire [OPTIONS] [ID]
-
-Removes the entry ID from history file. If no ID is given it removes all
-entries which are expired.
-
-=back
-
-=head1 OPTIONS
-
-=over 4
-
-=item --user=USERNAME
-
-paste as USERNAME instead of C<anonymous>
-
-=item --server=URL
-
-use URL instead of http://paste.debian.net/server.pl
-
-=item --hidden
-
-post as hidden entry
-
-=item --noproxy
-
-do not use the http proxy given in the environment variable C<http_proxy>
-
-=item --lang=LANG
-
-use LANG for syntax highlight ('debpaste lang' for available languages)
-
-=item --expires=SEC
-
-expires in SEC seconds (default: 259200 = 72h)
-
-=item --encoding=ENC
-
-when adding new paste, use ENC as encoding of file, default: UTF-8
-
-=item --noheader
-
-when B<get>ting entries, don't print header, just dump the paste to stdout.
-
-=item --version
-
-print version and exit
-
-=back
-
-=cut
-
-binmode(STDOUT, ":utf8");
-binmode(STDERR, ":utf8");
-
-$0 =~ s#.*/##;
-
-=head1 FILES
-
-=over 4
-
-=item ~/.debpaste.rc
-
-The right place for setting default options like the username or expire values.
-Format is C<KeyInAnYCase: value>, example:
-
- User: Vetinari
- Expires: 86400
-
-=item ~/.debpaste.history
-
-All info about pastes done with B<debpaste> are recorded here. This file
-is used to keep a record for B<del>eting entries after pasting. Use
-B<debpaste expire> to remove old entries.
-
-=back
-
-=cut
-
-my $settings = $ENV{HOME}."/.debpaste.rc";
-
-## Don't change, edit $settings file:
-## KeYInAnyCaSE: value
-## AnoThErKey: other-value
-my $history = $ENV{HOME}."/.debpaste.history";
-%config = (
- server => "http://paste.debian.net/server.pl",
- user => "anonymous",
- lang => "",
- expires => 86400 * 3, #
- history_file => $history,
- no_get_header => 0,
- hidden => 0,
-);
-my $action = "help";
-my %help = (
- 'add' => "\n"
- ."Usage: $0 add [OPTIONS] [CODE]\n"
- ." Adds a new paste to http://paste.debian.net/\n"
- ." If no code is given on the command line, it will read from\n"
- ." stdin.\n"
- ." Your paste infos are saved to $history\n",
- 'get' => "\n"
- ."Usage: $0 get [OPTIONS] ID\n"
- ." Fetches the paste with id ID from paste.debian.net\n"
- ." To 'download' a paste use something like\n"
- ." $0 get --noheader ID > OUTFILE\n",
- 'del' => "\n"
- ."Usage: $0 del [OPTIONS] ID\n"
- ." Deletes paste with id ID. This must be an ID which you have\n"
- ." pasted before (and is in your history file)\n",
- 'lang' => "\n"
- ."Usage: $0 lang [OPTIONS]\n"
- ." Dumps the list of available languages for syntax highlighting\n",
- 'edit' => "\n"
- ."Usage: $0 edit [OPTIONS] ID\n"
- ." Downloads the paste with id ID, spawns an editor (\$EDITOR)\n"
- ." and sends the edited file as new paste\n",
- 'expire' => "\n"
- ."Usage: $0 expire [OPTIONS] [ID]\n"
- ." Removes the entry ID from history file. If no ID is given,\n"
- ." it removes all entries which are expired.\n",
- # 'help' => "FIXME: help",
- );
-
-if (@ARGV and $ARGV[0] !~ /^-/) {
- $action = shift @ARGV;
-}
-
-&read_settings();
-
-GetOptions(
- "user=s" => \$config{user},
- "server=s" => \$config{server},
- "expires=s" => \$config{expires},
- "lang=s" => \$config{lang},
- "encoding=s"=> \$config{encoding},
- "noheader" => \$config{no_get_header},
- "hidden" => \$config{hidden},
- "help" => sub { pod2usage(-exitval => 0, -verbose => 2) },
- "version" => sub { print "debpaste v$VERSION\n"; exit 0; },
- )
- or pod2usage(-exitval => 1, -verbose => 2);
-
-if ($action and $action eq "help") {
- $action = shift @ARGV
- if (@ARGV and $ARGV[0] !~ /^-/);
- &help($action);
- exit 0;
-}
-
-my $paste = PasteDN->new(%config);
-if ($paste->can($action) and $action ne "new" and $action !~ /^_/) {
- $paste->$action();
-}
-else {
- die "$0: err... unknown action $action...\n";
-}
-
-sub read_settings {
- open SET, $settings
- or return;
- while (defined (my $line = <SET>)) {
- next unless $line =~ /^(\w+):\s+(.*)$/;
- my ($key, $value) = (lc $1, $2);
- unless (exists $config{$key}) {
- warn "$0: unknown config key '$key' found\n";
- next;
- }
- ($config{$key} = $value) =~ s/^\s*(.*?)\s*$/$1/;
- }
- close SET;
-}
-
-sub help {
- my $msg = "";
- ($msg = $help{$_[0]}."\n") if (exists $help{$_[0]});
- pod2usage(-exitval => 0, -verbose => 2, -message => $msg);
-}
-
-###################################################################
-
-package PasteDN;
-use Frontier::Client;
-use Date::Parse;
-use POSIX qw(strftime);
-use File::Temp qw(tempfile);
-use Text::Iconv;
-
-sub new {
- my $me = shift;
- my %args = @_;
- my $type = ref($me) || $me;
- my $self = {};
- bless $self, $type;
- foreach (keys %args) {
- $self->{$_} = $args{$_};
- }
- unless (exists $self->{editor}) {
- $self->{editor} = $ENV{EDITOR} ?
- $ENV{EDITOR} : ($ENV{VISUAL} ?
- $ENV{VISUAL} : "/usr/bin/editor");
- }
- $self->{encoding} = "UTF-8" unless $self->{encoding};
- $self->{expires} += time;
- my %fc = ( url => $self->{server} );
- unless ($self->{noproxy}) {
- $fc{proxy} = $ENV{http_proxy} if $ENV{http_proxy};
- }
- $self->{_service} = Frontier::Client->new(%fc);
- $self;
-}
-
-sub _to_utf8 {
- my ($self,$txt) = @_;
- my $enc = $self->{encoding};
- return $txt if $enc eq "UTF-8";
-
- my $i = eval { Text::Iconv->new($enc, "UTF-8"); };
- die "$0: unsupported encoding $enc\n" if $@;
-
- my $new = $i->convert($txt);
- return $txt unless $new;
- return $new;
-}
-
-sub _error {
- my ($self, $msg) = @_;
- unlink $self->{_tempfile} if $self->{_tempfile};
- die "$0: $msg\n";
-}
-
-sub lang {
- my $self = shift;
- my $rc = $self->{_service}->call("paste.getLanguages");
- die $rc->{statusmessage},"\n" if $rc->{rc};
- ## print $rc->{statusmessage},"\n";
- print "Available syntax highlights:\n";
- foreach (@{$rc->{langs}}) {
- print " $_\n";
- }
-}
-
-sub get {
- my $self = shift;
- my $id = shift @ARGV;
- die "$0: no id given\n" unless $id;
- my $rc = $self->{_service}->call("paste.getPaste", $id);
- die $rc->{statusmessage},"\n" if $rc->{rc};
- # ugly, but dates are ok then...
- # FIXME: probably only works with paste.d.n's timezone:
- my $stime = str2time($rc->{submitdate}, "CET") - 3600;
- my $sub_date = strftime('%Y-%m-%d %H:%M:%S', localtime $stime);
- my $exp_date = strftime('%Y-%m-%d %H:%M:%S',
- localtime($stime + $rc->{expiredate}));
- unless ($self->{no_get_header}) {
- print "User: ", $rc->{submitter}, "\n",
- "Date: $sub_date\n",
- "Expires: $exp_date\n",
- "---------------------------------\n";
- }
- print $rc->{code},"\n";
-}
-
-sub edit {
- my $self = shift;
- my $id = shift @ARGV;
- die "$0: no id given\n" unless $id;
-
- my $rc = $self->{_service}->call("paste.getPaste", $id);
- die $rc->{statusmessage},"\n" if $rc->{rc};
- my $new = $self->_spawn_editor($rc->{code});
- if (!$new or ($new eq $rc->{code})) {
- print "$0: not changed, aborting...\n";
- exit 0;
- }
- ## FIXME: text from paste.debian.net is probably UTF-8
- ## $new = $self->_to_utf8($new);
- $rc = $self->{_service}->call("paste.addPaste", $new,
- $self->{user},
- $self->{expires} - time,
- $self->{lang},
- $self->{hidden});
- die $rc->{statusmessage},"\n"
- if $rc->{rc};
- print $rc->{statusmessage},"\n";
- print "To delete this entry, use: $0 del $rc->{id}\n";
- $self->_save_entry($rc);
-}
-
-sub _spawn_editor {
- my ($self, $txt) = @_;
- my $fh;
-
- ($fh, $self->{_tempfile}) = tempfile("debpaste.XXXXXX", DIR => "/tmp");
-
- $self->_error("Could not create temp file: $!")
- unless ($fh and $self->{_tempfile});
- print $fh $txt or $self->_error("Could not print to tempfile: $!");
- close $fh or $self->_error("Failed to close tempfile: $!");
-
- if (system($self->{editor}, $self->{_tempfile}) != 0) {
- $self->_error("failed to execute: $!")
- if $? == -1;
-
- $self->_error(sprintf('child died with signal %d, %s coredump',
- ($? & 127), ($? & 128) ? 'with' : 'without'))
- if $? & 127;
-
- $self->_error(sprintf('editor exited with value %d', $? >> 8));
- }
-
- open FH, $self->{_tempfile}
- or $self->_error("Failed to open temp file: $!");
- {
- local $/ = undef;
- $txt = <FH>;
- };
- close FH;
- unlink $self->{_tempfile};
- return $txt;
-}
-
-sub delete { $_[0]->del(); }
-sub del {
- my $self = shift;
- my %entry = ();
- my $id = shift @ARGV;
- die "$0: no id given\n" unless $id;
- open FILE, $self->{history_file}
- or die "$0: failed to open history file: $!\n";
- {
- local $/ = "\n\n";
- while (<FILE>) {
- s#^[\n\s]+##ms;
- s#[\n\s]+$##ms;
- next unless $_;
- %entry = map { /^(\S+):\s*(.*?)\s*$/;
- ($1, $2 ? $2 : "") } split /\n/, $_;
- last if ($entry{Entry} and $entry{Entry} eq $id);
- %entry = ();
- }
- }
- die "$0: Entry for $id not found...\n" unless $entry{Entry};
- die "$0: No Digest for $id\n" unless $entry{Digest};
- die "$0: Entry $id expired at ", scalar(localtime($entry{Expires})),"\n"
- if ($entry{Expires} and $entry{Expires} < time);
-
- my $rc = $self->{_service}->call("paste.deletePaste", $entry{Digest});
- die $rc->{statusmessage},"\n" if $rc->{rc};
- print $rc->{statusmessage},"\n",
- "$0: deleted paste id ",$rc->{id},"\n";
- $self->_expire($rc->{id});
-}
-
-sub expire {
- my $self = shift;
- my $id = shift @ARGV;
- $self->_expire($id);
-}
-
-sub _expire {
- my ($self, $id) = @_;
- my @history = ();
- my %entry;
- my @ids = ();
- open FILE, $self->{history_file}
- or return;
- {
- local $/ = "\n\n";
- while (<FILE>) {
- s#^[\n\s]+##ms;
- s#[\n\s]+$##ms;
- next unless $_;
- %entry = map { /^(\S+):\s*(.*?)\s*$/;
- ($1, $2 ? $2 : "") } split /\n/, $_;
-
- ## print "ID: $entry{Entry}\n";
- if ($id) {
- if ($entry{Entry} and $entry{Entry} eq $id) {
- push @ids, $entry{Entry};
- next;
- }
- }
- elsif ($entry{Expires} and $entry{Expires} < time) {
- push @ids, $entry{Entry};
- next;
- }
- push @history, { %entry };
- }
- }
- close FILE;
- open FILE, ">", $self->{history_file}
- or die "$0: Failed to open history file: $!\n";
- foreach my $h (@history) {
- foreach (keys %{$h}) {
- next unless $_;
- print FILE "$_: $h->{$_}\n";
- }
- print FILE "\n";
- }
- close FILE or die "$0: failed to write: $!\n";
- print "$0: expired ", scalar(@ids), " entries from history",
- (@ids ? ": ".join(", ", @ids) : ""), "\n";
-}
-
-sub add {
- my $self = shift;
-
- my $code = undef;
- if (@ARGV) {
- $code = join("\n", @ARGV);
- }
- else {
- { local $/ = undef; $code = <STDIN>; }
- }
- die "$0: no code given\n"
- unless $code;
-
- $code = $self->_to_utf8($code);
- my $rc = $self->{_service}->call("paste.addPaste", $code,
- $self->{user},
- $self->{expires} - time,
- $self->{lang},
- $self->{hidden});
- die $rc->{statusmessage},"\n"
- if $rc->{rc};
- print $rc->{statusmessage},"\n";
- print "To delete this entry, use: $0 del $rc->{id}\n";
- $self->_save_entry($rc);
-}
-
-sub _save_entry {
- my ($self, $rc) = @_;
- # return unless $self->{save_pastes};
- my $file = $self->{history_file}
- or return;
- open FILE, ">>", $file or die "$0: failed to open $file: $!\n";
- seek FILE, 0, 2 or die "$0: Failed to seek: $!\n";
- print FILE "Server: ", $self->{server}, "\n",
- "Entry: ", $rc->{id}, "\n",
- "Lang: ", $self->{lang}, "\n",
- "Expires: ", $self->{expires},"\n",
- "Hidden: ", $self->{hidden}, "\n",
- "Digest: ", $rc->{digest}, "\n\n"
- or die "$0: Failed to save paste: $!\n";
- close FILE or die "$0: Failed to save paste: $!\n";
-}
-
-=head1 DOWNLOAD
-
-L<http://ankh-morp.org/code/paste-dn/debpaste> or
-L<SVN|http://svn.ankh-morp.org:8080/tools/paste-dn/>
-
-=head1 NOTES
-
-Renamed to C<debpaste> at Rev. 20
-
-=head1 AUTHOR
-
-Hanno Hecker <vetinari@ankh-morp.org>
-
-=cut
-
-
-# vim: ts=4 sw=4 expandtab syn=perl
diff --git a/bin/movemymail b/bin/movemymail
index fbe76178..06671043 100755
--- a/bin/movemymail
+++ b/bin/movemymail
@@ -45,11 +45,11 @@ if (hostfqdn eq "athena.silentflame.com") {
system "imap-dl", "$ENV{HOME}/.config/mailscripts/imap-dl.gmail";
}
-eval { system "mbsync", "fastmail" };
+eval { system "mbsync", "purelymail" };
if (my $exception = $@) {
local $ENV{XDG_RUNTIME_DIR} = "/run/user/$<";
system "notify-send", "--urgency=critical", "--icon=dialog-warning",
- "'mbsync fastmail' exited nonzero";
+ "'mbsync purelymail' exited nonzero";
die $exception;
}
diff --git a/lib-src/certs/fastmail.crt b/lib-src/certs/fastmail.crt
deleted file mode 100644
index ce40ed30..00000000
--- a/lib-src/certs/fastmail.crt
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHQDCCBiigAwIBAgIQDIVbcGvDCrksnNDtiwrz5zANBgkqhkiG9w0BAQsFADBZ
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMTMwMQYDVQQDEypE
-aWdpQ2VydCBHbG9iYWwgRzIgVExTIFJTQSBTSEEyNTYgMjAyMCBDQTEwHhcNMjMx
-MDA0MDAwMDAwWhcNMjQxMTAxMjM1OTU5WjBoMQswCQYDVQQGEwJBVTERMA8GA1UE
-CBMIVmljdG9yaWExEjAQBgNVBAcTCU1lbGJvdXJuZTEZMBcGA1UEChMQRmFzdE1h
-aWwgUHR5IEx0ZDEXMBUGA1UEAwwOKi5mYXN0bWFpbC5jb20wggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIK7bTmFkD3zDvFKpT6h2CRrTgKa+cnZ7zToRQ
-VdREXU+wDaqccWbihBR0sGhYeoUfqkjQfrFMyqK/FrGEB/ZWyxAx6q5HFnBQTuQV
-q2Cdf08lo+eLdGIOl+ojV2OVIA+C88z/Pfvj8Peqo13b/LpKoWDxsMEeR1CfW3yX
-oEVi/avIc2U0yoZ6YfqGQ9U/QX2gQMD1GqA1BIiCfxUr7bZxtAyL19y+Z87EtL9d
-GGTBV+Gjh/DyATMmy1kwLcoZXT3Gnieq2ensqROUxpQ2Y0U7iww55kU86Clx9KnR
-KqsWJGwbLtpQ+NFFbyDC/5tTTR6iNbetOGcPA6xpnsbFgI4TAgMBAAGjggPzMIID
-7zAfBgNVHSMEGDAWgBR0hYDAZsffN97PvSk3qgMdvu3NFzAdBgNVHQ4EFgQUA9QH
-pLBlScA8j+iaCIfKtcdi5/owgYEGA1UdEQR6MHiCDiouZmFzdG1haWwuY29tggxm
-YXN0bWFpbC5jb22CFSouY2FsZGF2LmZhc3RtYWlsLmNvbYIWKi5jYXJkZGF2LmZh
-c3RtYWlsLmNvbYITY2FsZGF2LmZhc3RtYWlsLmNvbYIUY2FyZGRhdi5mYXN0bWFp
-bC5jb20wPgYDVR0gBDcwNTAzBgZngQwBAgIwKTAnBggrBgEFBQcCARYbaHR0cDov
-L3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU
-BggrBgEFBQcDAQYIKwYBBQUHAwIwgZ8GA1UdHwSBlzCBlDBIoEagRIZCaHR0cDov
-L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0R2xvYmFsRzJUTFNSU0FTSEEyNTYy
-MDIwQ0ExLTEuY3JsMEigRqBEhkJodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGln
-aUNlcnRHbG9iYWxHMlRMU1JTQVNIQTI1NjIwMjBDQTEtMS5jcmwwgYcGCCsGAQUF
-BwEBBHsweTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFEG
-CCsGAQUFBzAChkVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRH
-bG9iYWxHMlRMU1JTQVNIQTI1NjIwMjBDQTEtMS5jcnQwDAYDVR0TAQH/BAIwADCC
-AX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA7s3QZNXbGs7FXLedtM0TojKHRny8
-7N7DUUhZRnEftZsAAAGK+6wcvgAABAMARzBFAiA1ar7gEFUKD92a7bFkHwfpr7+p
-cMteU3TFN/cAI5gQjQIhANlbUK6ZblyoqFpkwCKNh2K58PykaD0bhnVbAZm0GNTp
-AHUASLDja9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGK+6wcugAABAMA
-RjBEAiAeKRWzn6XRdBByYajuV0IXKIXgbBnDd2ENiQ6kG1IwjgIgOz5x3UUwkSDP
-UZtmUJQtxhJ/i3ILE0F7IxQO6b+ENx0AdwDatr9rP7W2Ip+bwrtca+hwkXFsu1GE
-hTS9pD0wSNf7qwAAAYr7rBymAAAEAwBIMEYCIQCwbOuNCRajD/F6G3282N7bUUZL
-S4xKCxuZ13jubGtnOQIhAMMAO2kzNNtvSo7ST2dxiQ9BUR1ynMSfujEwRCgcWpia
-MA0GCSqGSIb3DQEBCwUAA4IBAQAait3EVZ7lQG8hkwLWJ8Jb0o1k+A51l0os8f/n
-l3e5c3OlQztLhsjTwrJjuWVBPPH2ckyAqlu/nb1ZAoaK9r/6AhYVVMSkgE+VKzQH
-n0H7FECB7agejypxXSxu9oqD/3bg+m7spM+vfBuOu9nAmJY7b+CGrbCrgiYomG8n
-ELgz8t4U2oVhpHX1B6vO3e/wUjFjH9otSRz3hFr6D6YyV4nLyNofSQs9K8Mcbf/w
-/KgvcnN2csFHkRmYBMb96Jtdj58nydsu/Cwyhru39SN1gkXpWL8L6p28TOqZlssb
-kV289dZ2GuIsRAoaTWE5qtlMVmr/KknKqgaO/o+rLlagFiWh
------END CERTIFICATE-----
diff --git a/scripts/desktop/sway-ftp-master b/scripts/desktop/sway-ftp-master
index 0a36feee..bd74cb95 100755
--- a/scripts/desktop/sway-ftp-master
+++ b/scripts/desktop/sway-ftp-master
@@ -6,13 +6,14 @@
#
# GPL-3 or later
+# BROKEN: Needs updating for transition from Local::Desktop to papersway
+
use 5.032;
use strict;
use warnings;
use lib "$ENV{HOME}/src/dotfiles/perl5";
use JSON;
-use Local::Desktop;
sub walk_tree (&$) {
my ($pred, $tree) = @_;