diff options
author | Yaroslav <contact@yaroslavps.com> | 2020-04-09 01:30:04 +0300 |
---|---|---|
committer | Yaroslav <contact@yaroslavps.com> | 2020-04-09 01:30:04 +0300 |
commit | d5c97e78d80177119421f9dade324b04f2b00126 (patch) | |
tree | 7a637bf2a8ea613f7480301434e778ad6d8b6f42 | |
parent | 2a7d8cecace432898722b0d2c7a2543e1057cf74 (diff) | |
download | swayrice-d5c97e78d80177119421f9dade324b04f2b00126.tar.gz swayrice-d5c97e78d80177119421f9dade324b04f2b00126.zip |
mail scripts for aerc+mbsync; goodbye neomutt
-rw-r--r-- | dotfiles/.config/aerc/aerc.conf | 162 | ||||
-rw-r--r-- | dotfiles/.config/aerc/binds.conf | 100 | ||||
-rw-r--r-- | dotfiles/.config/waybar/config | 12 | ||||
-rw-r--r-- | dotfiles/.config/waybar/style.css | 1 | ||||
-rw-r--r-- | dotfiles/.gnupg/gpg-agent.conf | 3 | ||||
-rwxr-xr-x | dotfiles/.local/bin/barmailstatus | 14 | ||||
-rwxr-xr-x | dotfiles/.local/bin/mailsync | 43 | ||||
-rwxr-xr-x | dotfiles/.local/bin/newssync | 3 | ||||
-rwxr-xr-x | dotfiles/.local/bin/pacsync | 9 | ||||
-rwxr-xr-x | install.sh | 4 |
10 files changed, 344 insertions, 7 deletions
diff --git a/dotfiles/.config/aerc/aerc.conf b/dotfiles/.config/aerc/aerc.conf new file mode 100644 index 0000000..5163fae --- /dev/null +++ b/dotfiles/.config/aerc/aerc.conf @@ -0,0 +1,162 @@ +# +# aerc main configuration + +[ui] +# +# Describes the format for each row in a mailbox view. This field is compatible +# with mutt's printf-like syntax. +# +# Default: +index-format=%D %-17.17n %s + +# +# See time.Time#Format at https://godoc.org/time#Time.Format +# +# Default: 2006-01-02 03:04 PM (ISO 8601 + 12 hour time) +timestamp-format=2006-01-02 03:04 PM + +# +# Width of the sidebar, including the border. +# +# Default: 20 +sidebar-width=20 + +# +# Message to display when viewing an empty folder. +# +# Default: (no messages) +empty-message=(no messages) + +# Message to display when no folders exists or are all filtered +# +# Default: (no folders) +empty-dirlist=(no folders) + +# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel +# +# Default: false +mouse-enabled=false + +# +# Ring the bell when new messages are received +# +# Default: yes +new-message-bell=true + +# Describes the format string to use for the directory list +# +# Default: %n %>r +dirlist-format=%n %>r + +# List of space-separated criteria to sort the messages by, see *sort* +# command in *aerc*(1) for reference. Prefixing a criterion with "-r " +# reverses that criterion. +# +# Example: "from -r date" +# +# Default: "" +sort= + +# Moves to next message when the current message is deleted +# +# Default: false +next-message-on-delete=true + +[viewer] +# +# Specifies the pager to use when displaying emails. Note that some filters +# may add ANSI codes to add color to rendered emails, so you may want to use a +# pager which supports ANSI codes. +# +# Default: less -R +pager=less -R + +# +# If an email offers several versions (multipart), you can configure which +# mimetype to prefer. For example, this can be used to prefer plaintext over +# html emails. +# +# Default: text/plain,text/html +alternatives=text/plain,text/html + +# +# Default setting to determine whether to show full headers or only parsed +# ones in message viewer. +# +# Default: false +show-headers=false + +# +# Layout of headers when viewing a message. To display multiple headers in the +# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if +# none of their specified headers are present in the message. +# +# Default: From|To,Cc|Bcc,Date,Subject +header-layout=From|To,Cc|Bcc,Date,Subject + +# Whether to always show the mimetype of an email, even when it is just a single part +# +# Default: false +always-show-mime=false + +[compose] +# +# Specifies the command to run the editor with. It will be shown in an embedded +# terminal, though it may also launch a graphical window if the environment +# supports it. Defaults to $EDITOR, or vi. +editor= + +# +# Default header fields to display when composing a message. To display +# multiple headers in the same row, separate them with a pipe, e.g. "To|From". +# +# Default: To|From,Subject +header-layout=To|From,Subject + +[filters] +# +# Filters allow you to pipe an email body through a shell command to render +# certain emails differently, e.g. highlighting them with ANSI escape codes. +# +# The first filter which matches the email's mimetype will be used, so order +# them from most to least specific. +# +# You can also match on non-mimetypes, by prefixing with the header to match +# against (non-case-sensitive) and a comma, e.g. subject,text will match a +# subject which contains "text". Use header,~regex to match against a regex. +subject,~^\[PATCH=awk -f /usr/share/aerc/filters/hldiff +text/html=/usr/share/aerc/filters/html +#text/html=lynx -stdin +text/*=awk -f /usr/share/aerc/filters/plaintext +#image/*=catimg -w $(tput cols) - + +[triggers] +# +# Triggers specify commands to execute when certain events occur. +# +# Example: +# new-email=exec notify-send "New email from %n" "%s"<Enter> + +# +# Executed when a new email arrives in the selected folder +new-email=exec mpv "$HOME/.local/share/soundalerts/mail.mp3"<Enter> + +[templates] +# Templates are used to populate email bodies automatically. +# + +# The directories where the templates are stored. It takes a colon-separated +# list of directories. +# +# default: /usr/share/aerc/templates/ +template-dirs=/usr/share/aerc/templates/ + +# The template to be used for quoted replies. +# +# default: quoted_reply +quoted-reply=quoted_reply + +# The template to be used for forward as body. +# +# default: forward_as_body +forwards=forward_as_body diff --git a/dotfiles/.config/aerc/binds.conf b/dotfiles/.config/aerc/binds.conf new file mode 100644 index 0000000..ee72ab5 --- /dev/null +++ b/dotfiles/.config/aerc/binds.conf @@ -0,0 +1,100 @@ +# Binds are of the form <key sequence> = <command to run> +# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>" +# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit +<C-p> = :prev-tab<Enter> +<C-n> = :next-tab<Enter> +<C-t> = :term<Enter> + +[messages] +q = :exec killall -42 waybar<Enter>:quit<Enter> + +j = :next<Enter> +<Down> = :next<Enter> +<C-d> = :next 50%<Enter> +<C-f> = :next 100%<Enter> +<PgDn> = :next -s 100%<Enter> + +k = :prev<Enter> +<Up> = :prev<Enter> +<C-u> = :prev 50%<Enter> +<C-b> = :prev 100%<Enter> +<PgUp> = :prev -s 100%<Enter> +g = :select 0<Enter> +G = :select -1<Enter> + +J = :next-folder<Enter> +K = :prev-folder<Enter> + +<Enter> = :view<Enter> +d = :move Trash<Enter> +D = :delete<Enter> +A = :archive flat<Enter> + +C = :compose<Enter> + +rr = :reply -a<Enter> +rR = :exec mailsync<Enter> +rq = :reply -aq<Enter> +Rr = :reply<Enter> +Rq = :reply -q<Enter> + +c = :cf<space> +$ = :term<space> +! = :term<space> +| = :pipe<space> + +/ = :search<space> +\ = :filter<space> +n = :next-result<Enter> +N = :prev-result<Enter> + +[view] +q = :close<Enter> +| = :pipe<space> +D = :delete<Enter> +S = :save<space> +A = :archive flat<Enter> + +f = :forward<Enter> +rr = :reply -a<Enter> +rq = :reply -aq<Enter> +Rr = :reply<Enter> +Rq = :reply -q<Enter> + +H = :toggle-headers<Enter> +<C-k> = :prev-part<Enter> +<C-j> = :next-part<Enter> +J = :next<Enter> +K = :prev<Enter> + +[compose] +# Keybindings used when the embedded terminal is not selected in the compose +# view +$ex = <C-x> +<C-k> = :prev-field<Enter> +<C-j> = :next-field<Enter> +<tab> = :next-field<Enter> + +[compose::editor] +# Keybindings used when the embedded terminal is selected in the compose view +$noinherit = true +$ex = <C-x> +<C-k> = :prev-field<Enter> +<C-j> = :next-field<Enter> +<C-p> = :prev-tab<Enter> +<C-n> = :next-tab<Enter> + +[compose::review] +# Keybindings used when reviewing a message to be sent +y = :send<Enter> +n = :abort<Enter> +q = :abort<Enter> +e = :edit<Enter> +a = :attach<space> + +[terminal] +$noinherit = true +$ex = <C-x> + +<C-p> = :prev-tab<Enter> +<C-n> = :next-tab<Enter> diff --git a/dotfiles/.config/waybar/config b/dotfiles/.config/waybar/config index a708bb1..8db1eec 100644 --- a/dotfiles/.config/waybar/config +++ b/dotfiles/.config/waybar/config @@ -17,11 +17,12 @@ "custom/rec-status", "custom/swaykbd", "custom/ds4battery", - "backlight", + "custom/mail-status", "custom/pac-status", "custom/news-status", "custom/vpn-status", "network", + "backlight", "battery#bat0", "battery#bat1", "custom/right-decorator-black", @@ -177,8 +178,15 @@ "interval": "once", "exec": "barvpnstatus" }, + "custom/mail-status": { + "format": "<span color=\"#5b8277\">📧</span> {}", + "signal": 8, + "interval": "once", + "exec": "barmailstatus", + "tooltip": false + }, "custom/pac-status": { - "format": "<span color=\"#5b8277\"></span> {}", + "format": "<span color=\"#5b8277\"></span> {}", "signal": 7, "interval": "once", "exec": "barpacstatus", diff --git a/dotfiles/.config/waybar/style.css b/dotfiles/.config/waybar/style.css index 75f63a3..0b244e0 100644 --- a/dotfiles/.config/waybar/style.css +++ b/dotfiles/.config/waybar/style.css @@ -65,6 +65,7 @@ window#waybar { #custom-ds4battery, #custom-rec-status, #custom-vpn-status, +#custom-mail-status, #custom-pac-status, #custom-news-status, #custom-swaykbd { diff --git a/dotfiles/.gnupg/gpg-agent.conf b/dotfiles/.gnupg/gpg-agent.conf new file mode 100644 index 0000000..1d09028 --- /dev/null +++ b/dotfiles/.gnupg/gpg-agent.conf @@ -0,0 +1,3 @@ +allow-preset-passphrase +max-cache-ttl 86400 +default-cache-ttl 86400 diff --git a/dotfiles/.local/bin/barmailstatus b/dotfiles/.local/bin/barmailstatus new file mode 100755 index 0000000..d40a73d --- /dev/null +++ b/dotfiles/.local/bin/barmailstatus @@ -0,0 +1,14 @@ +#!/bin/sh + +total=0 + +# Check all accounts/mailboxes for new mail. +for mailbox in "$HOME/.local/share/mail/"* +do + account="$(echo "$mailbox" | sed "s/.*\///")" + newcount=$(find "$HOME/.local/share/mail/$account/INBOX/new/" "$HOME/.local/share/mail/$account/Inbox/new/" "$HOME/.local/share/mail/$account/inbox/new/" -type f 2> /dev/null | wc -l) + total=$((total + newcount)) +done + +[ $total -gt 0 ] && echo "$total" + diff --git a/dotfiles/.local/bin/mailsync b/dotfiles/.local/bin/mailsync new file mode 100755 index 0000000..9da6270 --- /dev/null +++ b/dotfiles/.local/bin/mailsync @@ -0,0 +1,43 @@ +#!/bin/sh +# Sync mail and give notification if there is new mail. + +# Run only if user logged in (prevent cron errors) +w | grep "^$USER\W" >/dev/null || exit + +# Check several times before giving up, useful when just waking up from sleep +# since internet is usually not available right away +wget -q --tries=5 --timeout=20 --spider 1.1.1.1 > /dev/null || exit + +# Source the needed env variables so that it can function properly from cron +. ~/.cache/sessionenv + +thereis=0 + +# Run mbsync. You can feed this script different settings. +if [ $# -eq 0 ]; then + mbsync -a +else + mbsync "$@" +fi + +# Check all accounts/mailboxes for new mail. Notify if there is new content. +for mailbox in "$HOME/.local/share/mail/"* +do + account="$(echo "$mailbox" | sed "s/.*\///")" + newcount=$(find "$HOME/.local/share/mail/$account/INBOX/new/" "$HOME/.local/share/mail/$account/Inbox/new/" "$HOME/.local/share/mail/$account/inbox/new/" -type f -newer "$HOME/.cache/lastmailsync" 2> /dev/null | wc -l) + if [ "$newcount" -gt "0" ]; then + notify-send "📬 Email" "$newcount new mail(s) in \`$account\` mailbox." + thereis=1 + fi +done + +if [ $thereis = 1 ]; then + mpv "$HOME/.local/share/soundalerts/mail.mp3" > /dev/null + killall -42 waybar +fi + +notmuch new 2>/dev/null + +# Create a touch file that indicates the time of the last run of mailsync +touch "$HOME/.cache/lastmailsync" + diff --git a/dotfiles/.local/bin/newssync b/dotfiles/.local/bin/newssync index 607188d..ebe41e1 100755 --- a/dotfiles/.local/bin/newssync +++ b/dotfiles/.local/bin/newssync @@ -1,5 +1,8 @@ #!/bin/sh +# Run only if user logged in (prevent cron errors) +w | grep "^$USER\W" >/dev/null || exit + # Don't try to update feed if newsboat is already running if pidof newsboat; then exit diff --git a/dotfiles/.local/bin/pacsync b/dotfiles/.local/bin/pacsync index f96996a..9e745c8 100755 --- a/dotfiles/.local/bin/pacsync +++ b/dotfiles/.local/bin/pacsync @@ -1,5 +1,8 @@ #!/bin/sh +# Run only if user logged in (prevent cron errors) +w | grep "^$USER\W" >/dev/null || exit + # Don't try to sync if pacman is already running if pidof pacman; then exit @@ -12,12 +15,12 @@ wget -q --tries=5 --timeout=20 --spider 1.1.1.1 > /dev/null || exit # Source the needed env variables so that it can function properly from cron . ~/.cache/sessionenv -notify-send " System upgrade" "Syncing repositories and downloading packages..." +notify-send " System upgrade" "Syncing repositories and downloading packages..." touch ~/.cache/pacsynclive killall -41 waybar -sudo pacman -Syuw --noconfirm || notify-send " System upgrade" \ +sudo pacman -Syuw --noconfirm || notify-send " System upgrade" \ "Error downloading updates. Check your internet connection or that you have the required permissions" rm -f ~/.cache/pacsynclive @@ -26,5 +29,5 @@ killall -41 waybar upno=$(pacman -Qu | wc -l) if [ $upno -lt 0 ]; then - notify-send " System upgrade" "Repository sync finished. $upno updates are available" + notify-send " System upgrade" "Repository sync finished. $upno updates are available" fi @@ -10,7 +10,7 @@ fi CLONEDIR=$PWD # Install some basic programs -pacman -Sy --noconfirm base-devel zsh man networkmanager openvpn neovim sway swaylock swayidle waybar egl-wayland imv swaybg xorg-server-xwayland termite kitty qt5-wayland wl-clipboard dbus tmux htop bemenu mupdf mpd ncmpcpp mpc mpv mplayer libnotify mako cronie rsync grim slop ffmpeg w3m youtube-dl youtube-viewer newsboat wget curl krita inkscape darktable gcc make fontconfig pkg-config fakeroot papirus-icon-theme alsa-utils pulseaudio pulseaudio-bluetooth imagemagick ntfs-3g unzip unrar gnome-themes-standard gtk-engine-murrine telegram-desktop qt5ct r udisks2 perl-term-readline-gnu transmission-cli python-pynvim python-pip calcurse acpi acpid gnupg noto-fonts-cjk noto-fonts-emoji ttf-joypixels powerline-fonts python-pygit2 polkit polkit-gnome zathura zathura-pdf-mupdf zathura-djvu gst-libav vifm blueman bluez acpilight powertop accountsservice lightdm xdg-user-dirs abook ranger terminus-font qutebrowser jq stow wdiff texlive-most pandoc units +pacman -Sy --noconfirm base-devel zsh man networkmanager openvpn neovim sway swaylock swayidle waybar egl-wayland imv swaybg xorg-server-xwayland termite kitty qt5-wayland wl-clipboard dbus tmux htop bemenu mupdf mpd ncmpcpp mpc mpv mplayer libnotify mako cronie rsync grim slop ffmpeg w3m youtube-dl youtube-viewer newsboat wget curl krita inkscape darktable gcc make fontconfig pkg-config fakeroot papirus-icon-theme alsa-utils pulseaudio pulseaudio-bluetooth imagemagick ntfs-3g unzip unrar gnome-themes-standard gtk-engine-murrine telegram-desktop qt5ct r udisks2 perl-term-readline-gnu transmission-cli transmission-remote-gtk python-pynvim python-pip calcurse acpi acpid gnupg noto-fonts-cjk noto-fonts-emoji ttf-joypixels powerline-fonts python-pygit2 polkit polkit-gnome zathura zathura-pdf-mupdf zathura-djvu gst-libav vifm blueman bluez acpilight powertop accountsservice lightdm xdg-user-dirs abook ranger terminus-font qutebrowser jq stow wdiff texlive-most pandoc units # Copy system config files cp system/sudoers /etc/ @@ -37,7 +37,7 @@ chown -R "$1:$1" build cd build sudo -u "$1" "git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si" -yay -S --noconfirm ttf-symbola stig pam-gnupg mutt-wizard-git ncpamixer lightdm-mini-greeter plymouth-git mimeo xdg-utils-mimeo cli-visualizer transgui-gtk +yay -S --noconfirm aerc ttf-symbola stig pam-gnupg ncpamixer lightdm-mini-greeter plymouth-git mimeo xdg-utils-mimeo cli-visualizer cd "$CLONEDIR" |