| @@ -1,22 +1,157 @@ | |||||
| # mutt-wizard | |||||
| % mw(1) Version 1.0 | mutt-wizard man page | |||||
| Get this great stuff without effort: | |||||
| <!--- | |||||
| Before | |||||
| - A full-featured and autoconfigured email client on the terminal with neomutt | |||||
| - Mail stored offline so you can view and write email while away from internet and keep backups. | |||||
| This is via the "offline" option, but you want this. | |||||
| To test man page: | |||||
| Specifically, this wizard: | |||||
| pandoc README.md -s -t man | /usr/bin/man -l - | |||||
| - Has a database of IMAP4/POP3 and SMTP servers and ports. If mutt-wizard doesn't know your server's IMAP4/POP3/SMTP, it will prompt. | |||||
| - Creates dotfiles for `neomutt`, `isync`, `msmtp` and `getmail` | |||||
| - Encrypts and stores locally your password using [pass](https://www.passwordstore.org/), accessible only by your GPG key | |||||
| - Handles as many as nine separate email accounts automatically | |||||
| - Auto-creates bindings to switch between accounts or between mailboxes | |||||
| - Can automatically set mail updates using `crontab` | |||||
| - Provides sensible defaults and an attractive appearance for the neomutt email client | |||||
| The generate: | |||||
| ## Install and Use | |||||
| pandoc README.md -s -t man -o mw.1 | |||||
| ---> | |||||
| NAME | |||||
| ==== | |||||
| **mw** — mutt-wizard - add, list, remove email configurations for mbsync, getmail and mutt. Sync email without mutt. | |||||
| SYNOPSIS | |||||
| ======== | |||||
| **mw** \[\<command\>\|\<email\>\] | |||||
| | *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/<email> | |||||
| ~/.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 | 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/). | 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. | 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 | |||||
| \<https://support.google.com/accounts/answer/6010255\>. | |||||
| **Protonmail accounts** | |||||
| : Protonmail users must use the Protonmail Bridge | |||||
| \<https://protonmail.com/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: <https://github.com/rpuntaie/mutt-wizard/issues> | |||||
| AUTHORS | |||||
| ======= | |||||
| *Luke Smith \<foo@example.org\>* | |||||
| : Original author, started in 2018. | |||||
| Github \<https://github.com/lukesmithxyz/mutt-wizard\> | |||||
| Gitlab \<https://gitlab.com/lukesmithxyz/mutt-wizard\> | |||||
| *Roland Puntaier \<roland.puntaier\@gmail.com\>* | |||||
| : Bugfixes, Improvements in 2019. | |||||
| GitHub: \<https://github.com/rpuntaie/mutt-wizard\> | |||||
| - 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) | |||||
| @@ -7,6 +7,11 @@ if [ -z "$prefix" ]; then | |||||
| esac | esac | ||||
| fi | fi | ||||
| VERSION="2.0" | |||||
| _MW_="mutt-wizard" | |||||
| _MW_generated="mutt-wizard-generated" | |||||
| mwconfigdir=${XDG_CONFIG_HOME:-$HOME/.config} | mwconfigdir=${XDG_CONFIG_HOME:-$HOME/.config} | ||||
| # Main mutt config location | # Main mutt config location | ||||
| mwmuttdir="$mwconfigdir/mutt" | mwmuttdir="$mwconfigdir/mutt" | ||||
| @@ -14,17 +19,17 @@ mwmuttrc="$mwmuttdir/muttrc" | |||||
| # Directory for account settings | # Directory for account settings | ||||
| mwaccmuttdir="$mwmuttdir/accounts" | mwaccmuttdir="$mwmuttdir/accounts" | ||||
| # Generated at every full sync | # Generated at every full sync | ||||
| mwgenmuttaccs=$mwmuttdir/mw_accounts.muttrc | |||||
| mwgenmuttaccs=$mwmuttdir/mw_generated.muttrc | |||||
| # Location of mail storage | # Location of mail storage | ||||
| mwmaildir="${MAILDIR:-$HOME/mail}" | mwmaildir="${MAILDIR:-$HOME/mail}" | ||||
| # Regex to confirm valid email address | # Regex to confirm valid email address | ||||
| mwemailre=".\+@.\+\\..\+" | mwemailre=".\+@.\+\\..\+" | ||||
| mwshare="$prefix/share/mutt-wizard" | |||||
| mwshare="$prefix/share/$_MW_" | |||||
| mwmbsyncrc="$mwconfigdir/isync/mbsyncrc" | mwmbsyncrc="$mwconfigdir/isync/mbsyncrc" | ||||
| mwgetmaildir=$mwconfigdir/getmail # POP3 | mwgetmaildir=$mwconfigdir/getmail # POP3 | ||||
| mwmsmtprc="$mwconfigdir/msmtp/config" | 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" | mwmbsyncbin="$prefix/bin/mbsync -c $mwmbsyncrc" | ||||
| mwgetmailbin="$prefix/bin/getmail" | mwgetmailbin="$prefix/bin/getmail" | ||||
| msmtpbin="$prefix/bin/msmtp" | msmtpbin="$prefix/bin/msmtp" | ||||
| @@ -32,7 +37,7 @@ msmtpbin="$prefix/bin/msmtp" | |||||
| _mwtakeaddr(){ | _mwtakeaddr(){ | ||||
| mwaccmaildir="$mwmaildir/$mwaddr" # mail dir is $MAILDIR/email | mwaccmaildir="$mwmaildir/$mwaddr" # mail dir is $MAILDIR/email | ||||
| mwacccachedir=$mwcachedir/${mwaddr//[.@]/_} # @ cannot stay because of mutt, . could | 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" | [ -n "$mwidnum" ] && mwaccmuttrc="$mwaccmuttdir/$mwidnum-$mwaddr.mwonofftype.$mwtype.muttrc" | ||||
| } | } | ||||
| @@ -45,6 +50,14 @@ _mwlist() { | |||||
| } | } | ||||
| _mwadd() { | _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 <yourgpgemail>\`.\\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 | _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" | 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)" | mwserverinfo="$(grep "^$mwdomain" "$mwshare/domains.csv" 2>/dev/null)" | ||||
| if [ -z "$mwserverinfo" ]; then | 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 "Usually you find them by an internet search.\\n" | ||||
| printf "Type the IMAP/POP3 server (excluding the port number)\\n\033[36m\t" | printf "Type the IMAP/POP3 server (excluding the port number)\\n\033[36m\t" | ||||
| read -r mwurl | read -r mwurl | ||||
| @@ -105,7 +118,7 @@ EOF | |||||
| fi | fi | ||||
| # if the user has a pass entry he could provide it via mwpass | # if the user has a pass entry he could provide it via mwpass | ||||
| if [ -z "$mwpass" ]; then | if [ -z "$mwpass" ]; then | ||||
| mwpass=mutt-wizard-$mwaddr | |||||
| mwpass=$_MW_-$mwaddr | |||||
| _mwgetpass | _mwgetpass | ||||
| fi | fi | ||||
| _mwtakeaddr | _mwtakeaddr | ||||
| @@ -154,7 +167,7 @@ _mwprotonfinger() { | |||||
| _mwmbsync() { | _mwmbsync() { | ||||
| mkdir -p "${mwmbsyncrc%/*}" | 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" <<EOF | cat >> "$mwmbsyncrc" <<EOF | ||||
| IMAPStore $mwaddr-remote | IMAPStore $mwaddr-remote | ||||
| Host $mwurl | Host $mwurl | ||||
| @@ -177,7 +190,7 @@ Patterns * !"[Gmail]" !"[Gmail]/All Mail" | |||||
| Create Both | Create Both | ||||
| SyncState * | SyncState * | ||||
| MaxMessages 0 | MaxMessages 0 | ||||
| # End mw profile | |||||
| # End $_MW_ profile | |||||
| EOF | EOF | ||||
| } | } | ||||
| @@ -211,8 +224,10 @@ _mwprofiles() { | |||||
| if [ "$mwtype" = "offline" ]; then # not online, actually outside mutt | if [ "$mwtype" = "offline" ]; then # not online, actually outside mutt | ||||
| if [ "${mwkind::3}" = "pop" ]; then | if [ "${mwkind::3}" = "pop" ]; then | ||||
| ! type "$prefix/bin/getmail" >/dev/null && printf "\033[31mFor POP3 \`getmail\` must be installed to use \`mw\`. You can do that afterwards.\\n\033[0m" | |||||
| _mwpop | _mwpop | ||||
| else | 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 | _mwmbsync | ||||
| fi | fi | ||||
| _mwsmtp | _mwsmtp | ||||
| @@ -241,14 +256,19 @@ _mwtryconnect() { | |||||
| fi | fi | ||||
| if [ -n "$mwmailboxes" ]; then | if [ -n "$mwmailboxes" ]; then | ||||
| mwspoolfile=$(echo "$mwmailboxes" | grep -i -m 1 inbox | sed -ne 's/.*/+\0/p') | 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" | 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} | echo "$mwmailboxes" | xargs -I {} mkdir -p "$mwaccmaildir/{}/"{cur,new,tmp} | ||||
| return 0 | return 0 | ||||
| else | 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 | return 1 | ||||
| fi | fi | ||||
| } | } | ||||
| @@ -300,7 +320,7 @@ _mwdelete() { | |||||
| if [ -f "$mwgetmaildir/$mwaddr" ]; then | if [ -f "$mwgetmaildir/$mwaddr" ]; then | ||||
| rm -f "$mwgetmaildir/$mwaddr" &>/dev/null | rm -f "$mwgetmaildir/$mwaddr" &>/dev/null | ||||
| else | 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 | fi | ||||
| else | else | ||||
| sed -i "/${mwaccmuttrc//\//\\\/}/d" "$mwmuttrc" &>/dev/null | sed -i "/${mwaccmuttrc//\//\\\/}/d" "$mwmuttrc" &>/dev/null | ||||
| @@ -346,10 +366,17 @@ _mwasktype() { | |||||
| esac | esac | ||||
| done | done | ||||
| fi | 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() { | _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//")" | mwaddrs="$(find "$mwaccmuttdir" -type f | grep -o "[1-9]-.*.muttrc" | sed "s/\.muttrc//")" | ||||
| for mwaddrsentry in $mwaddrs; do | for mwaddrsentry in $mwaddrs; do | ||||
| mwtype="$(echo "$mwaddrsentry" | sed "s/\.mwonofftype\./ /" | awk '{print $2}')" | mwtype="$(echo "$mwaddrsentry" | sed "s/\.mwonofftype\./ /" | awk '{print $2}')" | ||||
| @@ -360,7 +387,7 @@ _mwpurge() { | |||||
| _mwdelete | _mwdelete | ||||
| done | done | ||||
| rm -rf "$mwaccmuttdir"/[1-9]-*.muttrc "$mwcachedir" "$mwgenmuttaccs" | 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 | crontab -l | sed '/mw sync/d' | crontab - >/dev/null | ||||
| echo "All configs and account settings have been purged." | echo "All configs and account settings have been purged." | ||||
| } | } | ||||
| @@ -417,14 +444,14 @@ _mwgenmwaccmuttrc() { | |||||
| if [ "$mwtype" = "offline" ]; then | if [ "$mwtype" = "offline" ]; then | ||||
| ! grep "source $mwaccmuttrc" "$mwgenmuttaccs" &>/dev/null && echo "source $mwaccmuttrc" >> $mwgenmuttaccs | ! grep "source $mwaccmuttrc" "$mwgenmuttaccs" &>/dev/null && echo "source $mwaccmuttrc" >> $mwgenmuttaccs | ||||
| else #online | 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 | fi | ||||
| # (re-)generate mwaccmuttrc ... | # (re-)generate mwaccmuttrc ... | ||||
| mwmuttsync=$(printf '<sync-mailbox><enter-command>source %s<enter><change-folder>!<enter>;<check-stats>' $mwaccmuttrc) | mwmuttsync=$(printf '<sync-mailbox><enter-command>source %s<enter><change-folder>!<enter>;<check-stats>' $mwaccmuttrc) | ||||
| cat > "$mwaccmuttrc" <<EOF | cat > "$mwaccmuttrc" <<EOF | ||||
| # vim: filetype=muttrc | # vim: filetype=muttrc | ||||
| # muttrc file for account $mwaddr | # muttrc file for account $mwaddr | ||||
| # generated by mw | |||||
| # generated by $_MW_ | |||||
| set from = "$mwaddr" | set from = "$mwaddr" | ||||
| EOF | EOF | ||||
| @@ -522,9 +549,9 @@ if [ "$(uname)" = "Darwin" ]; then | |||||
| _mwnotify() { osascript -e "display notification \"$2 in $1\" with title \"You've got Mail\" subtitle \"Account: $1\"" ;} | _mwnotify() { osascript -e "display notification \"$2 in $1\" with title \"You've got Mail\" subtitle \"Account: $1\"" ;} | ||||
| else | else | ||||
| if type notify-send >/dev/null; then | if type notify-send >/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 | else | ||||
| _mwnotify() { echo "mutt-wizard: 📬 $2 new mail(s) in \`$1\` account." ;} | |||||
| _mwnotify() { echo "mw: 📬 $2 new mail(s) in \`$1\` account." ;} | |||||
| fi | fi | ||||
| fi | fi | ||||
| @@ -539,11 +566,11 @@ _mwaddr() { | |||||
| _mwgenmuttaccs(){ | _mwgenmuttaccs(){ | ||||
| mkdir -p "$mwmuttdir" "$mwaccmuttdir" | mkdir -p "$mwmuttdir" "$mwaccmuttdir" | ||||
| [ ! -f "$mwmuttrc" ] && echo "# vim: filetype=muttrc" > "$mwmuttrc" && echo "muttrc created." | [ ! -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" <<EOF | cat > "$mwgenmuttaccs" <<EOF | ||||
| # vim: filetype=muttrc | # vim: filetype=muttrc | ||||
| # generated by mw | |||||
| # generated by $_MW_ | |||||
| macro index gM '<shell-escape>mw<enter>' "sync all mail" | macro index gM '<shell-escape>mw<enter>' "sync all mail" | ||||
| @@ -672,43 +699,32 @@ if [ "$#" -gt 1 ]; then | |||||
| return 1 | return 1 | ||||
| fi | 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 <yourgpgemail>\`.\\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 | if [ "$1" = "" ]; then | ||||
| _mwsync | _mwsync | ||||
| else | else | ||||
| case "$1" in | case "$1" in | ||||
| ls) _mwlist ;; | |||||
| list|ls) _mwlist ;; | |||||
| add) _mwadd ;; | add) _mwadd ;; | ||||
| pass) _mwpick "change the password of" && _mwgetpass ;; | 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 ;; | purge) _mwpurge ;; | ||||
| cron) _mwcron ;; | cron) _mwcron ;; | ||||
| sync) _mwsync ;; | sync) _mwsync ;; | ||||
| *@*) _mwsync $1 ;; | *@*) _mwsync $1 ;; | ||||
| --version|-v) echo "mutt-wizard version 0.9" ;; | |||||
| --version|-v) echo "$_MW_ $VERSION" ;; | |||||
| --help|-h) cat <<EOF | --help|-h) cat <<EOF | ||||
| mw: mutt-wizard, auto-configure and sync email accounts for mutt, | |||||
| mw: $_MW_ $VERSION, auto-configure and sync email accounts for mutt, | |||||
| including mutt-independent sync of mail with \`isync\` or download of POP3 mail with \`getmail\`. | including mutt-independent sync of mail with \`isync\` or download of POP3 mail with \`getmail\`. | ||||
| Commands: | Commands: | ||||
| add Add and autoconfigure an email address (9 max.) | |||||
| ls List configured accounts | |||||
| delete Pick an account to delete | |||||
| purge Delete all accounts and settings | |||||
| cron Enable or disable an autosync via cronjob | |||||
| sync sync/download mail based on config in $mwmbsyncrc and $mwgetmaildir | |||||
| --help|-h Print this message | |||||
| add Add and configure an email address (9 max.) | |||||
| list List configured accounts | |||||
| remove Pick an account to remove | |||||
| purge Remove all accounts and settings | |||||
| cron Enable or disable an autosync via cronjob | |||||
| sync sync/download mail based on config in $mwmbsyncrc and $mwgetmaildir | |||||
| --help|-h Print this message | |||||
| --version|-v Prints version | |||||
| With no parameter all configured emails are synced and all account muttrc's are created. | With no parameter all configured emails are synced and all account muttrc's are created. | ||||
| With a parameter containing a @, an mail is assumed and that account is synced. | With a parameter containing a @, an mail is assumed and that account is synced. | ||||
| @@ -1,265 +1,414 @@ | |||||
| .TH MW 1 mutt-wizard | |||||
| .\" Automatically generated by Pandoc 2.7.3 | |||||
| .\" | |||||
| .TH "mw" "1" "" "Version 1.0" "mutt-wizard man page" | |||||
| .hy | |||||
| .SH NAME | .SH NAME | ||||
| mw \- mutt-wizard \- autoconfigure email accounts for neomutt and isync | |||||
| .PP | |||||
| \f[B]mw\f[R] \[em] mutt-wizard - add, list, remove email configurations | |||||
| for mbsync, getmail and mutt. | |||||
| Sync email without mutt. | |||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||
| .B mw | |||||
| <command> | |||||
| .PP | |||||
| \f[B]mw\f[R] [<command>|<email>] | |||||
| .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 | .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 | .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 | .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 | .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 | .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 | .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 | .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 | .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/<email> | |||||
| \[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 | .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 | .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 | .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 | |||||
| <https://support.google.com/accounts/answer/6010255>. | |||||
| .TP | .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 <https://github.com/lukesmithxyz/mutt-wizard> or Gitlab <https://gitlab.com/lukesmithxyz/mutt-wizard> 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 <https://support.google.com/accounts/answer/6010255>. | |||||
| .B Protonmail accounts | |||||
| Protonmail users must use the Protonmail Bridge <https://protonmail.com/bridge/> to access their IMAP and SMTP servers. | |||||
| .B \f[B]Protonmail accounts\f[R] | |||||
| Protonmail users must use the Protonmail Bridge | |||||
| <https://protonmail.com/bridge/> to access their IMAP and SMTP servers. | |||||
| This too should be configured before running mutt-wizard. | 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 | |||||
| <https://github.com/cruegge/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 | .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 | .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 | .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 | .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 | .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 | .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: <https://github.com/rpuntaie/mutt-wizard/issues> | |||||
| .SH AUTHORS | |||||
| .TP | .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 <foo\[at]example.org>\f[R] | |||||
| Original author, started in 2018. | |||||
| .RS | |||||
| .PP | |||||
| Github <https://github.com/lukesmithxyz/mutt-wizard> | |||||
| .PP | |||||
| Gitlab <https://gitlab.com/lukesmithxyz/mutt-wizard> | |||||
| .RE | |||||
| .TP | .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 <luke@lukesmith.xyz> originally in 2018. | |||||
| Tests, Bugfixes, Improvements by Roland Puntaier <roland.puntaier@gmail.com> in 2019. | |||||
| .B \f[I]Roland Puntaier <roland.puntaier\[at]gmail.com>\f[R] | |||||
| Bugfixes, Improvements in 2019. | |||||
| .RS | |||||
| .PP | |||||
| GitHub: <https://github.com/rpuntaie/mutt-wizard> | |||||
| .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 | .SH LICENSE | ||||
| .PP | |||||
| GPLv3 | GPLv3 | ||||
| .SH SEE ALSO | .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) | |||||