From 99b7057042bee72abe8848468e262a11c8383c1b Mon Sep 17 00:00:00 2001 From: Roland Puntaier Date: Tue, 3 Sep 2019 21:41:39 +0200 Subject: [PATCH] mw.1 generated from README.md with pandoc --- README.md | 467 ++++++++++++++++++++++++++++------------ bin/mw | 106 +++++---- mw.1 | 627 +++++++++++++++++++++++++++++++++--------------------- 3 files changed, 778 insertions(+), 422 deletions(-) diff --git a/README.md b/README.md index 76d5f04..78fa366 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,157 @@ -# mutt-wizard +% mw(1) Version 1.0 | mutt-wizard man page -Get this great stuff without effort: + + + + +NAME +==== + +**mw** — mutt-wizard - add, list, remove email configurations for mbsync, getmail and mutt. Sync email without mutt. + +SYNOPSIS +======== + +**mw** \[\\|\\] + +| *mw* Same as *mw sync* +| *mw add* Add and configure an email address (9 max.) +| *mw list* List configured accounts +| *mw remove* Pick an account to remove +| *mw purge* Remove all accounts and settings +| *mw cron* Enable or disable an autosync via cronjob +| *mw sync* Sync mail based on config in *.config/isync/mbsyncrc* and *.config/getmail/\** +| *mw --help|-h* Print this message +| *mw --version|-v* Print version + +DESCRIPTION +=========== + +**mw** configures **mbsync**, **getmail**, **msmtp** and **mutt** in one go, or just **mutt**. +Note, **mutt** stands for **mutt** or **neomutt**, but **mw** settings was only tested with **neomutt**. + +COMMANDS +======== + +Without command parameter **sync** is assumed. +If a parameter contains *@* an email is assumed and synced. + +*add* + +: Add new email. + + - First you decide, whether you want to configure + - **mbsync**, **getmail**, **msmtp** to sync emails independently from **mutt** using **mw**, + - or just **mutt**. + For an IMAP server **mutt** becomes very slow. + Normally you enter **y**. + - It asks you the **email address**. + - It has a **database** of IMAP4/POP3 and SMTP servers and ports. + If you are lucky, your email server is there. + Else it will prompt you. + +*ls|list* + +: List all email accounts configured by mutt-wizard + +*rm|remove* + +: Remove the configuration files for an already configured email + +*purge* + +: Removes all mw generated mutt settings and + *.config/mutt/accounts/1-\*** + *.config/isync/mbsyncrc* + *.config/getmail/** + *.config/msmtp/config* + +*cron* + +: toggle a cronjob that periodically syncs mail + +*sync* + +: syncs mail for all email accounts managed by *mw* (whose paths end in the email). + This is the default, if no parameter is given. + If an email address is given, only that email is synced. + + + - Every **mw** sync run will re-generate the **mutt** configuration + from the configuration files for **mbsync**, **getmail** and **msmtp**. + So you could edit them after or not use *mw add* at all. + + Just keep the *Path*, *path* and *account* ending in the email address. + + Files are under *.config* or *$XDG_CONFIG_HOME*: + + ``` + ~/.config/isync/mbsync (since not mbsync's default, you would need a -c option. Use mw, instead). + ~/.config/msmtp/config + ~/.config/getmail/ + ~/.config/mutt/mw_generated.muttrc + ``` + + - The generated **mutt** configuration has these bindings + - *ixy/Mxy/Cxy* bindings to switch/move/copy to mailbox (x and y stand for other letters) + - *i[1-9]* bindings to switch account + + - */usr/share/mutt-wizard/mutt-wizard.muttrc* is linked in your *muttrc*. + Have this line there, if you prefer your own settings: + + ``` + # source /usr/share/mutt-wizard/mutt-wizard.muttrc + ``` + + You will need to keep the binding of *i,g,C,M* to *noop*, though, + because of the generated bindings in the account muttrc. + Else you can overwrite certain things after the uncommented sourcing line. + + +DEPENDENCIES +============ + +- *pass* - [pass](https://www.passwordstore.org/) safely encrypts passwords (**required for email setup**) +- *gnupg* - needed by *pass* +- *mutt/neomutt* - the email client (*mutt* untested). +- *isync's mbsync* - syncs the mail +- *getmail* - used for POP3 +- *msmtp* - sends the email + +Optional: + +- *w3m* - view HTML email and images in **mutt**. + +- *notmuch* - index and search mail. + If the configuration file in *$NOTMUCH_CONFIG* is not there, *mw add* will create it. + +- *libnotify* - allows notifications when syncing mail with *mw* + +- *abook* - a terminal-based address book. + +- A cron manager (e.g. *cronie*) - if you want to enable the auto-sync feature. + +- *pam-gnupg* - To provide your GPG key at login and never after. + See [directions](https://github.com/cruegge/pam-gnupg). + + Alternatively increasing *default-cache-ttl* and + *max-cache-ttl* in *gpg-agent.conf* avoid constant password requests. + +- *urlscan* - outputs urls in mail + + +INSTALLATION +============ ``` git clone https://github.com/rpuntaie/mutt-wizard @@ -26,130 +161,186 @@ sudo make install User of Arch-based distros can also install mutt-wizard from the AUR as [mw-git](https://aur.archlinux.org/packages/mw-git/). -The mutt-wizard is run with the command `mw`. -Once everything is setup, you'll use `neomutt` to access your mail. - -- `mw add` -- add a new email account -- `mw ls` -- list existing accounts -- `mw pass` -- revise an account's password -- `mw delete` -- deleted an added account -- `mw purge` -- delete all accounts and settings (**DANGER**) -- `mw cron` -- toggle/configure a cronjob to sync mail -- `mw sync` or `mw` -- sync all your emails. Optionally add the email address, to sync only one. - -## Dependencies - -- `neomutt` - the email client -- `isync` - downloads and syncs the mail -- `msmtp` - sends the email -- `pass` - safely encrypts passwords (required at install) - -There's a chance of errors if you use a slow-release distro like Ubuntu, Debian or Mint. -If you get errors in `neomutt`, install the most recent version manually or manually remove the offending lines in the config in `/usr/share/mutt-wizard/mutt-wizard.muttrc`. - -### Optional - -- `w3m` - view HTML email and images in neomutt. -- `notmuch` - index and search mail. - Install it and run `notmuch setup`. - Tell it where your mail is (`$MAILDIR` or `~/Mail`). - Although, `mw` will do this automatically, if you haven't set notmuch up before. - You can run it in mutt with `S`. - Run `notmuch new` to process new mail. - Although, `mw sync` does this for you. -- `libnotify`/`libnotify-bin` - allows notifications when syncing mail with `mw sync` -- `abook` - a terminal-based address book. - Pressing tab while typing an address to send mail to will suggest contacts that are in your abook. -- A cron manager - if you want to enable the auto-sync feature. -- `pam-gnupg` - this is a more general program that I use. - It automatically logs you into your GPG key on login so you will never need to input your password once logged on to your system. - Check out the repo and directions [here](https://github.com/cruegge/pam-gnupg). -- `urlscan` - outputs urls in mail to browser. - -## Neomutt user interface - -To give you an example of the interface, here's an idea: - -- `m` - send mail (uses your default `$EDITOR` to write) -- `j`/`k` - next/previous mail, `J/K` same, without skipping deleted, and also when viewing mails -- `ctrl-d/f`/`ctrl-u/b` - down and up a half page / full page -- `l` - open mail, or attachment page or attachment -- `h` - the opposite of `l` -- `dd` - delete mail, `u` undelete -- `r`/`gr` - reply/reply all to highlighted mail -- `s` - save selected mail or selected attachment -- `ixy` - Press `i` followed by the two initial mailbox letters to go there -- `Mxy` and `Cxy` - For `M`ove and `C`opy to the according mailbox, e.g. `Msp` means "move to Spam". -- `i#` - Press `i` followed by a number 1-9 to go to a different account. - If you add 9 accounts via mutt-wizard, they will each be assigned a number. -- `ga` to add address/person to abook and `Tab` while typing address to complete one from book. -- `?` - see all keyboard shortcuts -- `ctrl-j`/`ctrl-k` - move up and down in sidebar, `ctrl-l` opens mailbox. -- `gu` - open a menu to select a url you want to open in you browser (needs urlscan). -- `S` - search for a mail -- `gl` - limit by substring of subject -- `gL` - undo limit -- `gm / gM` - call mutt-wizard's `mw sync` for one / all mail accounts -- `^u` within input field / command line, will clear it, `^a` and `^e` go to beginning or end, `^g` aborts - -Look into `/usr/share/mutt-wizard.muttrc` to see all bindings. - -## New stuff and improvements since the original release - -- honors `$MAILDIR`, `$XDG_CONFIG_HOME`, `$XDG_CACHE_HOME`, if defined. -- `gm/gM` to sync mail inside `mutt`, as `o/O` has a `mutt` assignment already. -- Make channel name equal to email address to avoid choosing a new name for the same thing. -- `isync`/`mbsync` has replaced `offlineimap` as the backend. - Offlineimap was error-prone, bloated, used obsolete Python 2 modules and required separate steps to install the system. -- `mw` is now an installed program instead of just a script needed to be kept in your mutt folder. -- `dialog` is no longer used (le bloat) and the interface is simply text commands. -- More autogenerated shortcuts that allow quickly moving and copying mail between boxes. -- More elegant attachment handling. - Image/video/pdf attachments without relying on the neomutt instance. -- abook integration by default. -- The messy template files and other directories have been moved or removed, leaving a clean config folder. -- msmtp configs moved to `~/.config/` and mail default location moved to `~/Mail`, reducing mess in `~`. -- `pass` is used as a password manager instead of separately saving passwords. -- Script is POSIX sh compliant. -- Error handling for the many people who don't read or follow directions. - Less errors generally. -- Addition of a manual `man mw`. - -## Help the Project! - -- Try mutt-wizard out on weird machines and weird email addresses and report any errors. -- Open a PR to add new server information into `domains.csv` so their users can more easily use mutt-wizard. - -mutt-wizard is free/libre software, licensed under the GPLv3. - -## Details for Tinkerers - -- The critical `mutt`/`neomutt` files are in `~/.config/mutt/` (or `$XDG_CONFIG_HOME/mutt`) -- Put whatever global settings you want into `muttrc`. - `mutt-wizard` will add some lines to this file which you shouldn't remove unless you know what you're doing. - But you can move them up/down over your personal config lines if you need to. - If you get binding conflict errors in mutt, you might need to do this. -- Each of the accounts that `mutt-wizard` generates will have custom settings set in a separate file in `accounts/`. - You can edit these freely if you want to tinker with settings specific to an account. -- In `/usr/share/mutt-wizard` are several global config files, including `mutt-wizard`'s default settings. - You can overwride this in your `muttrc` if you wish. - To avoid insertion of the line sourcing the default settings, - have a commented `# source /usr/share/mutt-wizard/mutt-wizard.muttrc` in your muttrc. - -## Watch out for these things: - -- For Gmail accounts, remember also to enable third-party ("""less secure""") applications before attempting installation. - You might also need to manually "Enable IMAP" in the settings. -- Protonmail accounts will require you to set up "Protonmail Bridge" to access PM's IMAP and SMTP servers. - Configure that before running mutt-wizard. -- If you have a university email, or enterprise-hosted email for work, there might be other hurdles or two-factor authentication you have to jump through. - Some, for example, will want you to create a separate IMAP password, etc. -- `isync` is not fully UTF-8 compatible, so non-Latin characters may be garbled (although sync should succeed). - `mw` will also not autocreate mailbox shortcuts since it is looking for English mailbox names. +MUTT-WIZARD\'S NEOMUTT CONFIGURATION +==================================== + +Once everything is setup, you'll use **mutt** to access your mail. + +Mutt usage with the accompanied */usr/share/mutt-wizard.muttrc*: + +- *?* - see all keyboard shortcuts + +**syncing** + +- *gm / gM* - call mutt-wizard's *mw sync* for one / all mail accounts + +**mailboxes,accounts** + +- *ixy* - To go to **mailbox**. +- *Mxy*, *Cxy* - For *M*ove and *C*opy to the according mailbox, e.g. *Msp* means "move to Spam". +- *i#* - Press *i* followed by a number 1-9 to go to a **different account**. + +*xy* are + +- two first letters of mailbox letters or +- first letter of first path entry + second letter of second path entries + +**searching** + +- *S* - search for a mail using *notmuch* +- *gl* - limit by substring of subject +- *gL* - undo limit + + +**composing** + +- *ga* - to add address/person to *abook* and *Tab* while typing address to complete one from book. +- *m/r/gr/f* - new/reply/group reply/forward **message**, using your default *$EDITOR* to write. + Then you enter the **compose screen**. +- *a* - to add attachments +- *s/t/c/b/d* - to change the subject/to/CC/BCC/description. +- *S* - to change the signature/encryption +- *y* - to send the mail. + +**delete,undelete,save** + +- *dd* - delete mail +- *u* - undelete +- *$* - apply the mailbox changes + *set trash* is set per default. Deleted mails will land there. +- *s* - save selected mail or selected attachment + +**moving around** + +- *gu* - open a menu to select a url you want to open in you browser (needs urlscan). +- *j*/*k* - next/previous mail, *J/K* same, without skipping deleted, and also when viewing mails +- *ctrl-d/f*/*ctrl-u/b* - down and up a half page / full page +- *l* - open mail, or attachment page or attachment +- *h* - the opposite of *l* + +**sidebar** + +- *B* - toggles +- *ctrl-j*/*ctrl-k* - move up and down +- *ctrl-l/o* - opens mailbox + +**input field/command line** + +- *ctrl-u* will clear it +- *ctrl-a*, *ctrl-e* go to beginning or end, *ctrl-g* aborts + +Look into */usr/share/mutt-wizard.muttrc* to see all bindings. + + +DETAILS +======= + +**Encoding** + + *isync* is not fully UTF-8 compatible. + Non-Latin characters may be garbled (although sync should succeed). + *mw* will also not auto-create mailbox shortcuts since it is looking for English mailbox names. I strongly recommend you to set your email language to English on your mail server to avoid these problems. -## To-do +**Mail location** + +: Mail is downloaded to a folder named after your email + in *\$MAILDIR*, which defaults to *\$HOME/Mail/*, the default for mutt. + Neither **mw remove** nor **mw purge** will delete downloaded mail. + Do that manually. + +**Gmail accounts** + +: Google will require you to allow \"less-secure\" (third party) + applications or use two-factor authentication in order to access + their IMAP servers to download your mail. + If you use Gmail, be sure to handle this before running mutt-wizard + \. + +**Protonmail accounts** + +: Protonmail users must use the Protonmail Bridge + \ to access their IMAP and SMTP + servers. This too should be configured before running mutt-wizard. + +**Enterprise and university accounts** + +: Many universities and businesses might host their domain\'s email + via Google or another service. + This often requires a special IMAP/SMTP-specific password + that you must generate and use. Again, mutt-wizard can handle these + systems, but only once they have been set up. + + +FILES +===== + +*/user/bin/mw* + +: The main script to manage and sync emails. + +*/user/bin/mwimage*, */user/bin/mwopen* + +: Used by the mailcap file that comes with mutt-wizard. + +*/usr/share/mutt-wizard/mutt-wizard.muttrc* + +: Default mutt settings. + +*/usr/share/mutt-wizard/mailcap* + +: Default mailcap file. + +*/usr/share/mutt-wizard/domains.csv* + +: Email server database. + + +BUGS +==== + +GitHub Issues: + + +AUTHORS +======= + +*Luke Smith \* + +: Original author, started in 2018. + + Github \ + + Gitlab \ + +*Roland Puntaier \* + +: Bugfixes, Improvements in 2019. + + GitHub: \ + + - Honors *$MAILDIR*, *$XDG_CONFIG_HOME*, *$XDG_CACHE_HOME*, if defined. + - *gm/gM* to sync mail inside *mutt*, as *o/O* has a *mutt* assignment already. + - Other more vim-like shortcut changes + - Make channel name equal to email address to avoid choosing a new name for the same thing. + - *remove|rm* instead of *delete*, *list|ls* instead of only *ls* + - *wm* integrates *mailsync*, not to overload the system namespace and because of code reuse + - *wm* generates *mutt* config on every full sync, + - to reflect changes in mailboxes in the shortcuts + - to reflect changes in *mbsync/getmail* config in *mutt* config + - *urlscan* instead of *urlview* + - Added tests and made bug fixes + - Generate man page from readme, to avoid duplicate descriptions + + +LICENSE +======= + +GPLv3 + +SEE ALSO +======== + +**neomutt**(1), **neomuttrc**(1) **mbsync**(1), **msmtp**(1), +**notmuch**(1), **abook**(1) -- Add ~~Mac OS~~/BSD compatibility (the script should work for Mac OS now) -- ~~Out-of-the-box compatibility with Protonmail Bridge~~ (I believe this is done, but more bug-testing is welcome since I don't have PM) -- Option to keep configuration for accounts that failed to connect (maybe) diff --git a/bin/mw b/bin/mw index c68220f..9896086 100755 --- a/bin/mw +++ b/bin/mw @@ -7,6 +7,11 @@ if [ -z "$prefix" ]; then esac fi +VERSION="2.0" + +_MW_="mutt-wizard" +_MW_generated="mutt-wizard-generated" + mwconfigdir=${XDG_CONFIG_HOME:-$HOME/.config} # Main mutt config location mwmuttdir="$mwconfigdir/mutt" @@ -14,17 +19,17 @@ mwmuttrc="$mwmuttdir/muttrc" # Directory for account settings mwaccmuttdir="$mwmuttdir/accounts" # Generated at every full sync -mwgenmuttaccs=$mwmuttdir/mw_accounts.muttrc +mwgenmuttaccs=$mwmuttdir/mw_generated.muttrc # Location of mail storage mwmaildir="${MAILDIR:-$HOME/mail}" # Regex to confirm valid email address mwemailre=".\+@.\+\\..\+" -mwshare="$prefix/share/mutt-wizard" +mwshare="$prefix/share/$_MW_" mwmbsyncrc="$mwconfigdir/isync/mbsyncrc" mwgetmaildir=$mwconfigdir/getmail # POP3 mwmsmtprc="$mwconfigdir/msmtp/config" -mwsharerc="$mwshare/mutt-wizard.muttrc" -mwcachedir="${XDG_CACHE_HOME:-$HOME/.cache}/mutt-wizard" +mwsharerc="$mwshare/$_MW_.muttrc" +mwcachedir="${XDG_CACHE_HOME:-$HOME/.cache}/$_MW_" mwmbsyncbin="$prefix/bin/mbsync -c $mwmbsyncrc" mwgetmailbin="$prefix/bin/getmail" msmtpbin="$prefix/bin/msmtp" @@ -32,7 +37,7 @@ msmtpbin="$prefix/bin/msmtp" _mwtakeaddr(){ mwaccmaildir="$mwmaildir/$mwaddr" # mail dir is $MAILDIR/email mwacccachedir=$mwcachedir/${mwaddr//[.@]/_} # @ cannot stay because of mutt, . could - [ -z "$mwpass" ] || mwpass=mutt-wizard-$mwaddr + [ -z "$mwpass" ] || mwpass=$_MW_-$mwaddr [ -n "$mwidnum" ] && mwaccmuttrc="$mwaccmuttdir/$mwidnum-$mwaddr.mwonofftype.$mwtype.muttrc" } @@ -45,6 +50,14 @@ _mwlist() { } _mwadd() { + type gpg >/dev/null 2>&1 && GPG="gpg" || GPG="gpg2" + [ -z "$PASSWORD_STORE_DIR" ] && PASSWORD_STORE_DIR="$HOME/.password-store" + [ -r "$PASSWORD_STORE_DIR/.gpg-id" ] && + "$GPG" --list-secret-keys $(cat "$PASSWORD_STORE_DIR/.gpg-id") >/dev/null 2>&1 || { + printf "\`pass\` must be installed and initialized to encrypt passwords.\\nBe sure it is installed and run \`pass init \`.\\n" + printf "If you don't have a GPG public private key pair, run \`$GPG --full-gen-key\` first.\\n" + return 1 + } _mwcheckcert && _mwcheckinternet && _mwasktype && _mwaskinfo && _mwprofiles && _mwtryconnect && _mwfinalize || _mwdelete } @@ -68,7 +81,7 @@ _mwaskinfo() { printf "\\nSearching for \033[32m%s\033[0m in \033[34m\`domains.csv\`\033[0m..." "$mwdomain" mwserverinfo="$(grep "^$mwdomain" "$mwshare/domains.csv" 2>/dev/null)" if [ -z "$mwserverinfo" ]; then - printf "Your email domain is not known to mutt-wizard.\\nType in your settings.\\n" + printf "Your email domain is not known to $_MW_.\\nType in your settings.\\n" printf "Usually you find them by an internet search.\\n" printf "Type the IMAP/POP3 server (excluding the port number)\\n\033[36m\t" read -r mwurl @@ -105,7 +118,7 @@ EOF fi # if the user has a pass entry he could provide it via mwpass if [ -z "$mwpass" ]; then - mwpass=mutt-wizard-$mwaddr + mwpass=$_MW_-$mwaddr _mwgetpass fi _mwtakeaddr @@ -154,7 +167,7 @@ _mwprotonfinger() { _mwmbsync() { mkdir -p "${mwmbsyncrc%/*}" - [ -f "$mwmbsyncrc" ] && sed -i "/IMAPStore $mwaddr-remote$/,/# End mw profile/d" "$mwmbsyncrc" + [ -f "$mwmbsyncrc" ] && sed -i "/IMAPStore $mwaddr-remote$/,/# End $_MW_ profile/d" "$mwmbsyncrc" cat >> "$mwmbsyncrc" </dev/null && printf "\033[31mFor POP3 \`getmail\` must be installed to use \`mw\`. You can do that afterwards.\\n\033[0m" _mwpop else + ! type "$prefix/bin/mbsync" >/dev/null && printf "\033[31mFor IMAP \`mbsync\` must be installed to use \`mw\`. You can do that afterwards.\\n\033[0m" _mwmbsync fi _mwsmtp @@ -241,14 +256,19 @@ _mwtryconnect() { fi if [ -n "$mwmailboxes" ]; then mwspoolfile=$(echo "$mwmailboxes" | grep -i -m 1 inbox | sed -ne 's/.*/+\0/p') - [ -z "$mwspoolfile" ] && printf "\033[31m\033[31mNo spoolfile.\033[0m\\n" && return 1 + [ -z "$mwspoolfile" ] && printf "\033[31mNo spoolfile.\033[0m\\n" && return 1 printf "\033[32mMailboxes detected.\033[0m\\n" + if [ -z "$mwserverinfo" ]; then + printf "\033[32mPlease add the line below at https://github.com/rpuntaie/mutt-wizard/issues/1\033[0m\\n\\n" + printf "\033[31m$mwservice,$mwurl,$mwport,$mwsurl,$mwsport\0330m\\n\\n" + fi + echo "$mwmailboxes" | xargs -I {} mkdir -p "$mwaccmaildir/{}/"{cur,new,tmp} return 0 else - printf "\033[31m\033[31mLog-on not successful.\033[0m\\n" - printf "It seems that either you inputted the wrong password or server settings, or there are other requirements for your account out of the control of mutt-wizard.\\n" + printf "\033[31mLog-on not successful.\033[0m\\n" + printf "It seems that either you entered the wrong password or server settings, or there are other requirements for your account out of the control of $_MW_.\\n" return 1 fi } @@ -300,7 +320,7 @@ _mwdelete() { if [ -f "$mwgetmaildir/$mwaddr" ]; then rm -f "$mwgetmaildir/$mwaddr" &>/dev/null else - sed -i "/IMAPStore $mwaddr-remote$/,/# End mw profile/d" "$mwmbsyncrc" &>/dev/null + sed -i "/IMAPStore $mwaddr-remote$/,/# End $_MW_ profile/d" "$mwmbsyncrc" &>/dev/null fi else sed -i "/${mwaccmuttrc//\//\\\/}/d" "$mwmuttrc" &>/dev/null @@ -346,10 +366,17 @@ _mwasktype() { esac done fi + if [ "$mwtype" == "offline" ]; then + ! type "$prefix/bin/msmtp" >/dev/null && printf "\033[31m\`msmtp\` must be installed. You can do that afterwards.\\n\033[0m" + else + ! ( type mutt >/dev/null || type neomutt >/dev/null ) && printf "\033[31m\`mutt\` must be installed. You can do that afterwards.\\n\033[0m" + fi + + return 0 } _mwpurge() { - _mwconfirm "delete all mutt-wizard data" || exit + _mwconfirm "Remove all $_MW_ data" || exit mwaddrs="$(find "$mwaccmuttdir" -type f | grep -o "[1-9]-.*.muttrc" | sed "s/\.muttrc//")" for mwaddrsentry in $mwaddrs; do mwtype="$(echo "$mwaddrsentry" | sed "s/\.mwonofftype\./ /" | awk '{print $2}')" @@ -360,7 +387,7 @@ _mwpurge() { _mwdelete done rm -rf "$mwaccmuttdir"/[1-9]-*.muttrc "$mwcachedir" "$mwgenmuttaccs" - sed -i "/\# mw-autogenerated/d" "$mwmuttrc" + sed -i "/\# $_MW_generated/d" "$mwmuttrc" crontab -l | sed '/mw sync/d' | crontab - >/dev/null echo "All configs and account settings have been purged." } @@ -417,14 +444,14 @@ _mwgenmwaccmuttrc() { if [ "$mwtype" = "offline" ]; then ! grep "source $mwaccmuttrc" "$mwgenmuttaccs" &>/dev/null && echo "source $mwaccmuttrc" >> $mwgenmuttaccs else #online - ! grep "source $mwaccmuttrc" "$mwmuttrc" &>/dev/null && echo "source $mwaccmuttrc # mw-autogenerated" >> $mwmuttrc + ! grep "source $mwaccmuttrc" "$mwmuttrc" &>/dev/null && echo "source $mwaccmuttrc # $_MW_generated" >> $mwmuttrc fi # (re-)generate mwaccmuttrc ... mwmuttsync=$(printf 'source %s!;' $mwaccmuttrc) cat > "$mwaccmuttrc" </dev/null; then - _mwnotify() { notify-send "mutt-wizard" "📬 $2 new mail(s) in \`$1\` account." ;} + _mwnotify() { notify-send "mw" "📬 $2 new mail(s) in \`$1\` account." ;} else - _mwnotify() { echo "mutt-wizard: 📬 $2 new mail(s) in \`$1\` account." ;} + _mwnotify() { echo "mw: 📬 $2 new mail(s) in \`$1\` account." ;} fi fi @@ -539,11 +566,11 @@ _mwaddr() { _mwgenmuttaccs(){ mkdir -p "$mwmuttdir" "$mwaccmuttdir" [ ! -f "$mwmuttrc" ] && echo "# vim: filetype=muttrc" > "$mwmuttrc" && echo "muttrc created." - ! grep "source $mwsharerc" "$mwmuttrc" >/dev/null && echo "source $mwsharerc # mw-autogenerated" >> "$mwmuttrc" - ! grep "source $mwgenmuttaccs" "$mwmuttrc" >/dev/null && echo "source $mwgenmuttaccs # mw-autogenerated" >> "$mwmuttrc" + ! grep "source $mwsharerc" "$mwmuttrc" >/dev/null && echo "source $mwsharerc # $_MW_generated" >> "$mwmuttrc" + ! grep "source $mwgenmuttaccs" "$mwmuttrc" >/dev/null && echo "source $mwgenmuttaccs # $_MW_generated" >> "$mwmuttrc" cat > "$mwgenmuttaccs" <mw' "sync all mail" @@ -672,43 +699,32 @@ if [ "$#" -gt 1 ]; then return 1 fi -type gpg >/dev/null 2>&1 && GPG="gpg" || GPG="gpg2" -[ -z "$PASSWORD_STORE_DIR" ] && PASSWORD_STORE_DIR="$HOME/.password-store" -[ -r "$PASSWORD_STORE_DIR/.gpg-id" ] && - "$GPG" --list-secret-keys $(cat "$PASSWORD_STORE_DIR/.gpg-id") >/dev/null 2>&1 || { - printf "\`pass\` must be installed and initialized to encrypt passwords.\\nBe sure it is installed and run \`pass init \`.\\n" - printf "If you don't have a GPG public private key pair, run \`$GPG --full-gen-key\` first.\\n" - exit -} -! type "$prefix/bin/mbsync" >/dev/null && printf "\`mbsync\` must be installed to run mutt-wizard.\\n" && exit -! type "$prefix/bin/msmtp" >/dev/null && printf "\`msmtp\` must be installed.\\n" && exit -! ( type mutt >/dev/null || type neomutt >/dev/null ) && printf "\`mutt\` must be installed.\\n" && exit - if [ "$1" = "" ]; then _mwsync else case "$1" in - ls) _mwlist ;; + list|ls) _mwlist ;; add) _mwadd ;; pass) _mwpick "change the password of" && _mwgetpass ;; - delete) _mwpick delete && _mwconfirm "delete the \`$mwaddr\` profile" && _mwdelete ;; + remove|rm) _mwpick remove && _mwconfirm "remove the \`$mwaddr\` profile" && _mwdelete ;; purge) _mwpurge ;; cron) _mwcron ;; sync) _mwsync ;; *@*) _mwsync $1 ;; - --version|-v) echo "mutt-wizard version 0.9" ;; + --version|-v) echo "$_MW_ $VERSION" ;; --help|-h) cat < +.PP +\f[B]mw\f[R] [|] +.PP +\ \ \ \f[I]mw\f[R] Same as \f[I]mw sync\f[R] +.PD 0 +.P +.PD +\ \ \ \f[I]mw add\f[R] Add and configure an email address (9 max.) +.PD 0 +.P +.PD +\ \ \ \f[I]mw list\f[R] List configured accounts +.PD 0 +.P +.PD +\ \ \ \f[I]mw remove\f[R] Pick an account to remove +.PD 0 +.P +.PD +\ \ \ \f[I]mw purge\f[R] Remove all accounts and settings +.PD 0 +.P +.PD +\ \ \ \f[I]mw cron\f[R] Enable or disable an autosync via cronjob +.PD 0 +.P +.PD +\ \ \ \f[I]mw sync\f[R] Sync mail based on config in +\f[I].config/isync/mbsyncrc\f[R] and \f[I].config/getmail/*\f[R] +.PD 0 +.P +.PD +\ \ \ \f[I]mw \[en]help|-h\f[R] Print this message +.PD 0 +.P +.PD +\ \ \ \f[I]mw \[en]version|-v\f[R] Print version .SH DESCRIPTION -.B mw -takes a user email account and sets up a terminal-based email interface with it for -.B neomutt. -This can include offline email with -.B mbsync -or -.B getmail -and configs for -.B msmtp -for sending mail, and passwords automatically encrypted and stored with -.B pass. +.PP +\f[B]mw\f[R] configures \f[B]mbsync\f[R], \f[B]getmail\f[R], +\f[B]msmtp\f[R] and \f[B]mutt\f[R] in one go, or just \f[B]mutt\f[R]. +Note, \f[B]mutt\f[R] stands for \f[B]mutt\f[R] or \f[B]neomutt\f[R], but +\f[B]mw\f[R] settings was only tested with \f[B]neomutt\f[R]. .SH COMMANDS -Without command parameter -.I sync -is assumed. -If a parameter contains -.I @ -an email is assumed and synced. +.PP +Without command parameter \f[B]sync\f[R] is assumed. +If a parameter contains *\[at]* an email is assumed and synced. .TP -.B add -configure an email account +.B \f[I]add\f[R] +Add new email. +.RS +.IP \[bu] 2 +First you decide, whether you want to configure +.RS 2 +.IP \[bu] 2 +\f[B]mbsync\f[R], \f[B]getmail\f[R], \f[B]msmtp\f[R] to sync emails +independently from \f[B]mutt\f[R] using \f[B]mw\f[R], +.IP \[bu] 2 +or just \f[B]mutt\f[R]. +For an IMAP server \f[B]mutt\f[R] becomes very slow. +Normally you enter \f[B]y\f[R]. +.RE +.IP \[bu] 2 +It asks you the \f[B]email address\f[R]. +.IP \[bu] 2 +It has a \f[B]database\f[R] of IMAP4/POP3 and SMTP servers and ports. +If you are lucky, your email server is there. +Else it will prompt you. +.RE .TP -.B ls -list all email accounts configured by mutt-wizard +.B \f[I]ls|list\f[R] +List all email accounts configured by mutt-wizard .TP -.B delete -delete the configuration files for an already configured email account +.B \f[I]rm|remove\f[R] +Remove the configuration files for an already configured email .TP -.B purge -.I totally -purges all local -.I .config/mutt/accounts/1-* -.I mbsyncrc -and -.I .config/msmtp/config -settings. +.B \f[I]purge\f[R] +Removes all mw generated mutt settings and *.config/mutt/accounts/1-*** +\f[I].config/isync/mbsyncrc\f[R] *.config/getmail/** +\f[I].config/msmtp/config\f[R] .TP -.B cron -toggle a cronjob that will periodically sync mail with +.B \f[I]cron\f[R] +toggle a cronjob that periodically syncs mail .TP -.B sync -syncs all emails. +.B \f[I]sync\f[R] +syncs mail for all email accounts managed by \f[I]mw\f[R] (whose paths +end in the email). +This is the default, if no parameter is given. +If an email address is given, only that email is synced. +.RS +.IP \[bu] 2 +Every \f[B]mw\f[R] sync run will re-generate the \f[B]mutt\f[R] +configuration from the configuration files for \f[B]mbsync\f[R], +\f[B]getmail\f[R] and \f[B]msmtp\f[R]. +So you could edit them after or not use \f[I]mw add\f[R] at all. +.RS 2 +.PP +Just keep the \f[I]Path\f[R], \f[I]path\f[R] and \f[I]account\f[R] +ending in the email address. +.PP +Files are under \f[I].config\f[R] or \f[I]$XDG_CONFIG_HOME\f[R]: +.IP +.nf +\f[C] +\[ti]/.config/isync/mbsync (since not mbsync\[aq]s default, you would need a -c option. Use mw, instead). +\[ti]/.config/msmtp/config +\[ti]/.config/getmail/ +\[ti]/.config/mutt/mw_generated.muttrc +\f[R] +.fi +.RE +.IP \[bu] 2 +The generated \f[B]mutt\f[R] configuration has these bindings +.RS 2 +.IP \[bu] 2 +\f[I]ixy/Mxy/Cxy\f[R] bindings to switch/move/copy to mailbox (x and y +stand for other letters) +.IP \[bu] 2 +\f[I]i[1-9]\f[R] bindings to switch account +.RE +.IP \[bu] 2 +\f[I]/usr/share/mutt-wizard/mutt-wizard.muttrc\f[R] is linked in your +\f[I]muttrc\f[R]. +Have this line there, if you prefer your own settings: +.RS 2 +.IP +.nf +\f[C] +# source /usr/share/mutt-wizard/mutt-wizard.muttrc +\f[R] +.fi +.PP +You will need to keep the binding of \f[I]i,g,C,M\f[R] to +\f[I]noop\f[R], though, because of the generated bindings in the account +muttrc. +Else you can overwrite certain things after the uncommented sourcing +line. +.RE +.RE +.SH DEPENDENCIES +.IP \[bu] 2 +\f[I]pass\f[R] - pass (https://www.passwordstore.org/) safely encrypts +passwords (\f[B]required for email setup\f[R]) +.IP \[bu] 2 +\f[I]gnupg\f[R] - needed by \f[I]pass\f[R] +.IP \[bu] 2 +\f[I]mutt/neomutt\f[R] - the email client (\f[I]mutt\f[R] untested). +.IP \[bu] 2 +\f[I]isync\[cq]s mbsync\f[R] - syncs the mail +.IP \[bu] 2 +\f[I]getmail\f[R] - used for POP3 +.IP \[bu] 2 +\f[I]msmtp\f[R] - sends the email +.PP +Optional: +.IP \[bu] 2 +\f[I]w3m\f[R] - view HTML email and images in \f[B]mutt\f[R]. +.IP \[bu] 2 +\f[I]notmuch\f[R] - index and search mail. +If the configuration file in \f[I]$NOTMUCH_CONFIG\f[R] is not there, +\f[I]mw add\f[R] will create it. +.IP \[bu] 2 +\f[I]libnotify\f[R] - allows notifications when syncing mail with +\f[I]mw\f[R] +.IP \[bu] 2 +\f[I]abook\f[R] - a terminal-based address book. +.IP \[bu] 2 +A cron manager (e.g.\ \f[I]cronie\f[R]) - if you want to enable the +auto-sync feature. +.IP \[bu] 2 +\f[I]pam-gnupg\f[R] - To provide your GPG key at login and never after. +See directions (https://github.com/cruegge/pam-gnupg). +.RS 2 +.PP +Alternatively increasing \f[I]default-cache-ttl\f[R] and +\f[I]max-cache-ttl\f[R] in \f[I]gpg-agent.conf\f[R] avoid constant +password requests. +.RE +.IP \[bu] 2 +\f[I]urlscan\f[R] - outputs urls in mail +.SH INSTALLATION +.IP +.nf +\f[C] +git clone https://github.com/rpuntaie/mutt-wizard +cd mutt-wizard +sudo make install +\f[R] +.fi +.PP +User of Arch-based distros can also install mutt-wizard from the AUR as +mw-git (https://aur.archlinux.org/packages/mw-git/). +.SH MUTT-WIZARD\[aq]S NEOMUTT CONFIGURATION +.PP +Once everything is setup, you\[cq]ll use \f[B]mutt\f[R] to access your +mail. +.PP +Mutt usage with the accompanied \f[I]/usr/share/mutt-wizard.muttrc\f[R]: +.IP \[bu] 2 +\f[I]?\f[R] - see all keyboard shortcuts +.PP +\f[B]syncing\f[R] +.IP \[bu] 2 +\f[I]gm / gM\f[R] - call mutt-wizard\[cq]s \f[I]mw sync\f[R] for one / +all mail accounts +.PP +\f[B]mailboxes,accounts\f[R] +.IP \[bu] 2 +\f[I]ixy\f[R] - To go to \f[B]mailbox\f[R]. +.IP \[bu] 2 +\f[I]Mxy\f[R], \f[I]Cxy\f[R] - For \f[I]M\f[R]ove and \f[I]C\f[R]opy to +the according mailbox, e.g.\ \f[I]Msp\f[R] means \[lq]move to Spam\[rq]. +.IP \[bu] 2 +\f[I]i#\f[R] - Press \f[I]i\f[R] followed by a number 1-9 to go to a +\f[B]different account\f[R]. +.PP +\f[I]xy\f[R] are +.IP \[bu] 2 +two first letters of mailbox letters or +.IP \[bu] 2 +first letter of first path entry + second letter of second path entries +.PP +\f[B]searching\f[R] +.IP \[bu] 2 +\f[I]S\f[R] - search for a mail using \f[I]notmuch\f[R] +.IP \[bu] 2 +\f[I]gl\f[R] - limit by substring of subject +.IP \[bu] 2 +\f[I]gL\f[R] - undo limit +.PP +\f[B]composing\f[R] +.IP \[bu] 2 +\f[I]ga\f[R] - to add address/person to \f[I]abook\f[R] and +\f[I]Tab\f[R] while typing address to complete one from book. +.IP \[bu] 2 +\f[I]m/r/gr/f\f[R] - new/reply/group reply/forward \f[B]message\f[R], +using your default \f[I]$EDITOR\f[R] to write. +Then you enter the \f[B]compose screen\f[R]. +.IP \[bu] 2 +\f[I]a\f[R] - to add attachments +.IP \[bu] 2 +\f[I]s/t/c/b/d\f[R] - to change the subject/to/CC/BCC/description. +.IP \[bu] 2 +\f[I]S\f[R] - to change the signature/encryption +.IP \[bu] 2 +\f[I]y\f[R] - to send the mail. +.PP +\f[B]delete,undelete,save\f[R] +.IP \[bu] 2 +\f[I]dd\f[R] - delete mail +.IP \[bu] 2 +\f[I]u\f[R] - undelete +.IP \[bu] 2 +\f[I]$\f[R] - apply the mailbox changes \f[I]set trash\f[R] is set per +default. +Deleted mails will land there. +.IP \[bu] 2 +\f[I]s\f[R] - save selected mail or selected attachment +.PP +\f[B]moving around\f[R] +.IP \[bu] 2 +\f[I]gu\f[R] - open a menu to select a url you want to open in you +browser (needs urlscan). +.IP \[bu] 2 +\f[I]j\f[R]/\f[I]k\f[R] - next/previous mail, \f[I]J/K\f[R] same, +without skipping deleted, and also when viewing mails +.IP \[bu] 2 +\f[I]ctrl-d/f\f[R]/\f[I]ctrl-u/b\f[R] - down and up a half page / full +page +.IP \[bu] 2 +\f[I]l\f[R] - open mail, or attachment page or attachment +.IP \[bu] 2 +\f[I]h\f[R] - the opposite of \f[I]l\f[R] +.PP +\f[B]sidebar\f[R] +.IP \[bu] 2 +\f[I]B\f[R] - toggles +.IP \[bu] 2 +\f[I]ctrl-j\f[R]/\f[I]ctrl-k\f[R] - move up and down +.IP \[bu] 2 +\f[I]ctrl-l/o\f[R] - opens mailbox +.PP +\f[B]input field/command line\f[R] +.IP \[bu] 2 +\f[I]ctrl-u\f[R] will clear it +.IP \[bu] 2 +\f[I]ctrl-a\f[R], \f[I]ctrl-e\f[R] go to beginning or end, +\f[I]ctrl-g\f[R] aborts +.PP +Look into \f[I]/usr/share/mutt-wizard.muttrc\f[R] to see all bindings. .SH DETAILS +.PP +\f[B]Encoding\f[R] +.PP +\f[I]isync\f[R] is not fully UTF-8 compatible. +Non-Latin characters may be garbled (although sync should succeed). +\f[I]mw\f[R] will also not auto-create mailbox shortcuts since it is +looking for English mailbox names. +I strongly recommend you to set your email language to English on your +mail server to avoid these problems. .TP -.B Mail location -If the user chooses to keep offline email with -.B isync, -it will be kept in -.I $MAILDIR -which defaults to -.I $HOME/Mail/ -, the default for mutt. -.B notmuch -can be used to index and search this mail by giving this directory when first running -.B notmuch setup. -If you have not set up notmuch before, mutt-wizard will automatically set it up in the background the first time you add an account. +.B \f[B]Mail location\f[R] +Mail is downloaded to a folder named after your email in +\f[I]$MAILDIR\f[R], which defaults to \f[I]$HOME/Mail/\f[R], the default +for mutt. +Neither \f[B]mw remove\f[R] nor \f[B]mw purge\f[R] will delete +downloaded mail. +Do that manually. .TP -.B muttrc files -mutt-wizard will create a muttrc file for each created account holding account-specific details. These will appear in -.I $XDG_CONFIG_HOME/mutt/accounts/. -$XGD_CONFIG_HOME defaults to ~/.config. -Note that mutt-wizard will also source these files and create the bindings to switch between them, and these will appear in your default -.I $XDG_CONFIG_HOME/mutt/muttrc -file. +.B \f[B]Gmail accounts\f[R] +Google will require you to allow \[dq]less-secure\[dq] (third party) +applications or use two-factor authentication in order to access their +IMAP servers to download your mail. +If you use Gmail, be sure to handle this before running mutt-wizard +. .TP -.B Mail deletion -Neither -.B delete -or -.B purge -will delete downloaded mail for for safety (and time)'s sake. If you want to delete downloaded mail, do so manually by removing it from the directory above. -.TP -.B Default settings -mutt-wizard has many default settings that focus on making it aesthetically pleasing and supplying more vim-like bindings. These can be found in -.I /usr/share/mutt-wizard/mutt-wizard.muttrc -and the default mailcap file can be found in -.I /usr/share/mutt-wizard/mailcap. -After the line sourcing the mutt-wizard default, you can overwrite settings in your -.I $XDG_CONFIG_HOME/mutt/muttrc, -Else you can keep mutt-wizard from adding a sourcing line, if you have the following comment in your muttrc: -.B # source /usr/share/mutt-wizard/mutt-wizard.muttrc -.TP -.B Detecting server settings -mutt-wizard has a repository of email services and their server information kept in -.I /usr/share/mutt-wizard/domains.csv -which is used to automatically configure email settings. -If your email provider is not found there, it will prompt you to input your email service's IMAP and SMTP server information which can usually be found by searching online. - -If you would like to help develop mutt-wizard for others, you are invited to add this service information to -.I domains.csv -on mutt-wizard's Github or Gitlab pages. -.TP -.B Gmail accounts -Google will require you to allow "less-secure" (third party) applications or use two-factor authentication in order to access their IMAP servers to download your mail. -If you use Gmail, be sure to handle this before running mutt-wizard . -.B Protonmail accounts -Protonmail users must use the Protonmail Bridge to access their IMAP and SMTP servers. +.B \f[B]Protonmail accounts\f[R] +Protonmail users must use the Protonmail Bridge + to access their IMAP and SMTP servers. This too should be configured before running mutt-wizard. -.B Enterprise and university accounts -Many universities and businesses might host their domain's email via Google or another service. -This often requires a special IMAP/SMTP-specific password that you must generate and use. -Again, mutt-wizard can handle these systems, but only once they've been set up. -.TP -.B Password decryption -mutt-wizard uses -.I pass -and therefore -.I gpg -to decrypt your passwords. -Provided your GPG key has a password, this might mean that you will be prompted for your GPG password the first time you sync or send mail in a session. -Once your password is cached, it might also expire later as well. - -Because of this I strongly recommend the program -.I pam-gnupg - which automatically unlocks your GPG password on login and keeps it active. -This gives you secure access to all your email accounts on your system without ever having to input a password. - -If you don't want to use this program, you can also increase the cache time of an inputted GPG password with the -.I default-cache-ttl -and -.I max-cache-ttl -variables in your -.I -gpg-agent.conf. -.SH MUTT-WIZARD'S NEOMUTT CONFIGURATION -Here is a list of not only mutt-wizard's particular defaults, but what you need, to get the most out of email accounts configured with mutt-wizard. -.TP -.B Color -mutt-wizard's default settings add color to messages in the index and color mail details to make them easier to see. -New mail, in addition to being marked by the typical N, will also be bold. .TP -.B Movement with h/j/k/l -Use vim-like keys to go down with -.I j -or up with -.I k -in index and open mail. -.I J -and -.I K. -do not skip deleted mails and go to next/previous mail, when in open mail. -.I l -opens mail, then the attachment view, then an attachment, while -.I h -is the reverse. -In the mail index, -.I ctrl-d/f -and -.I ctrl-u/b -go down and up by a half / full page and -.I gg -and -.I G -go to the very top and very bottom. +.B \f[B]Enterprise and university accounts\f[R] +Many universities and businesses might host their domain\[aq]s email via +Google or another service. +This often requires a special IMAP/SMTP-specific password that you must +generate and use. +Again, mutt-wizard can handle these systems, but only once they have +been set up. +.SH FILES .TP -.B Search mail -If you have -.B notmuch -configured with your proper mail directory (see above), you may run -.I S -to search for mail containing any given sequence. -Even without notmuch, -.I gl -limits mail, showing only those with the given sequence in the subject while -.I gL -shows all mail (same as limiting to "all"). +.B \f[I]/user/bin/mw\f[R] +The main script to manage and sync emails. .TP -.B Deleting mail -.I dd -deletes mail, while -.I u -undeletes it. -.I $ -saves your mailbox, finalizing deletion. If you have a -.I Trash -box, deleted mail is moved there. If you want it to skip that and simply be deleted, comment out or remove the -.I set trash -line in that account's muttrc. +.B \f[I]/user/bin/mwimage\f[R], \f[I]/user/bin/mwopen\f[R] +Used by the mailcap file that comes with mutt-wizard. .TP -.B Send mail -.I m -creates a new mail message; -.I r -replies to the selected message; -.I gr -replies all to the selected message and -.I f -fowards the selected message. +.B \f[I]/usr/share/mutt-wizard/mutt-wizard.muttrc\f[R] +Default mutt settings. .TP -.B Compose mail screen -Once you write mail and save the buffer you will be brought to the compose screen. Press -.I a -to add attachments, use -.I s/t/c/b/d -to change the subject/to/CC/BCC/description. Press -.I S -to change the signature/encryption. Press -.I y -to send the mail. +.B \f[I]/usr/share/mutt-wizard/mailcap\f[R] +Default mailcap file. .TP -.B Saving and autocompleting email addresses with abook -Install the optional dependency abook and you will be able to save the sender's email address with -.I ga. -Once this is done, when you are typing in any email/contact prompt, you may press -.I Tab -to find contacts matching your input. Although abook is often used with mutt, it is also a useful program in its own right. -.TP -.B Switching and moving mail between mailboxes -The -.I i -key is paired with the two inital letters of a mailbox, isp: go to spam, ... -Similar -.I Cxy -will copy mail and -.I Mxy -will move mail to the according boxe. -.TP -.B Switching between accounts -mutt-wizard can configure as many as nine accounts each numbered by the lowest available number when configured. Press -.I i -followed by an account's number to change to that account: i2, i5, etc. -.I gu -to open a menu to select a url you want to open in you browser. -.TP -.B Sidebar -mutt-wizard enables the sidebar by default which displays your account's boxes with mail tallies. -.I B -will toggle the sidebar. Move up and down in it with -.I ctrl-k/j. -Open a box with -.I ctrl-o -or -.I ctrl-l +.B \f[I]/usr/share/mutt-wizard/domains.csv\f[R] +Email server database. +.SH BUGS +.PP +GitHub Issues: +.SH AUTHORS .TP -.B Input field / command line -.I ctrl-u -within input field / command line, will clear it -.I ctrl-a / ctl-e -go to beginning or end. -.I ctrl-g -aborts. +.B \f[I]Luke Smith \f[R] +Original author, started in 2018. +.RS +.PP +Github +.PP +Gitlab +.RE .TP -.B More information -Remember that you can press -.I ? -at any time in neomutt to get a list of all key-bindings and functions. This list can also vary for different context menus. -.SH AUTHORS -Written by Luke Smith originally in 2018. -Tests, Bugfixes, Improvements by Roland Puntaier in 2019. +.B \f[I]Roland Puntaier \f[R] +Bugfixes, Improvements in 2019. +.RS +.PP +GitHub: +.IP \[bu] 2 +Honors +\f[I]\f[R]M\f[I]\f[R]A\f[I]\f[R]I\f[I]\f[R]L\f[I]\f[R]D\f[I]\f[R]I\f[I]\f[R]R\f[I]*,*XDG_CONFIG_HOME\f[R], +\f[I]$XDG_CACHE_HOME\f[R], if defined. +.IP \[bu] 2 +\f[I]gm/gM\f[R] to sync mail inside \f[I]mutt\f[R], as \f[I]o/O\f[R] has +a \f[I]mutt\f[R] assignment already. +.IP \[bu] 2 +Other more vim-like shortcut changes +.IP \[bu] 2 +Make channel name equal to email address to avoid choosing a new name +for the same thing. +.IP \[bu] 2 +\f[I]remove|rm\f[R] instead of \f[I]delete\f[R], \f[I]list|ls\f[R] +instead of only \f[I]ls\f[R] +.IP \[bu] 2 +\f[I]wm\f[R] integrates \f[I]mailsync\f[R], not to overload the system +namespace and because of code reuse +.IP \[bu] 2 +\f[I]wm\f[R] generates \f[I]mutt\f[R] config on every full sync, +.RS 2 +.IP \[bu] 2 +to reflect changes in mailboxes in the shortcuts +.IP \[bu] 2 +to reflect changes in \f[I]mbsync/getmail\f[R] config in \f[I]mutt\f[R] +config +.RE +.IP \[bu] 2 +\f[I]urlscan\f[R] instead of \f[I]urlview\f[R] +.IP \[bu] 2 +Added tests and made bug fixes +.IP \[bu] 2 +Generate man page from readme, to avoid duplicate descriptions +.RE .SH LICENSE +.PP GPLv3 .SH SEE ALSO -.BR neomutt (1), -.BR neomuttrc (1) -.BR mbsync (1), -.BR msmtp (1), -.BR notmuch (1), -.BR abook (1) +.PP +\f[B]neomutt\f[R](1), \f[B]neomuttrc\f[R](1) \f[B]mbsync\f[R](1), +\f[B]msmtp\f[R](1), \f[B]notmuch\f[R](1), \f[B]abook\f[R](1)