diff --git a/Cargo.lock b/Cargo.lock index 29c119c..c32f836 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -226,6 +226,14 @@ dependencies = [ "termcolor", ] +[[package]] +name = "everest" +version = "0.1.0" + +[[package]] +name = "everest-sync" +version = "0.1.0" + [[package]] name = "fastrand" version = "1.5.0" @@ -390,6 +398,10 @@ dependencies = [ "uuid", ] +[[package]] +name = "himalaya-sync" +version = "0.1.0" + [[package]] name = "hostname" version = "0.3.1" @@ -574,6 +586,14 @@ dependencies = [ "quoted_printable", ] +[[package]] +name = "makalu" +version = "0.1.0" + +[[package]] +name = "makalu-sync" +version = "0.1.0" + [[package]] name = "maplit" version = "1.0.2" diff --git a/Cargo.toml b/Cargo.toml index 2d15d5c..cd627ac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,11 @@ [workspace] members = [ "email-manager", + # "email-synchronizer", + # "contact-manager", + # "contact-synchronizer", + # "calendar-manager", + # "calendar-synchronizer", + # "task-manager", + # "task-synchronizer", ] diff --git a/README.md b/README.md index 159854e..2335814 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,44 @@ -# 📫 Himalaya -[![gh-actions](https://github.com/soywod/himalaya/workflows/deployment/badge.svg)](https://github.com/soywod/himalaya/actions?query=workflow%3Adeployment) -[![gh-actions](https://github.com/soywod/himalaya/workflows/tests/badge.svg)](https://github.com/soywod/himalaya/actions?query=workflow%3Atests) -[![gh-actions](https://github.com/soywod/himalaya/workflows/nix-build/badge.svg)](https://github.com/soywod/himalaya/actions?query=workflow%3Anix-build) -[![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/himalaya.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/himalaya) +# :mage: Himalaya -CLI email manager - -*The project is under active development. Do not use in production before the -`v1.0.0` (see the [roadmap](https://github.com/soywod/himalaya/milestone/5)).* +Himalaya is a suite of independent [Personal Information +Management](https://en.wikipedia.org/wiki/Personal_information_manager) +command-line tools. ![image](https://user-images.githubusercontent.com/10437171/138774902-7b9de5a3-93eb-44b0-8cfb-6d2e11e3b1aa.png) -## Motivation - -Bringing emails to the terminal is a *pain*. First, because they are sensitive -data. Secondly, the existing TUIs ([Mutt](http://www.mutt.org/), -[NeoMutt](https://neomutt.org/), [Alpine](https://alpine.x10host.com/), -[aerc](https://aerc-mail.org/)…) are really hard to configure. They require time -and patience. - -The aim of Himalaya is to extract the email logic into a simple (yet solid) CLI -API that can be used directly from the terminal, from scripts, from UIs… -Possibilities are endless! - -## Installation - -```sh -# As root: -curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/install.sh | sudo sh - -# As a regular user: -curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/install.sh | PREFIX=~/.local sh -``` - -*See the [wiki](https://github.com/soywod/himalaya/wiki) for other installation -methods.* - -## Configuration - -```toml -# ~/.config/himalaya/config.toml - -name = "Your full name" -downloads-dir = "/abs/path/to/downloads" -signature = """ --- -Regards, -""" - -[gmail] -default = true -email = "your.email@gmail.com" - -imap-host = "imap.gmail.com" -imap-port = 993 -imap-login = "your.email@gmail.com" -imap-passwd-cmd = "pass show gmail" - -smtp-host = "smtp.gmail.com" -smtp-port = 465 -smtp-login = "your.email@gmail.com" -smtp-passwd-cmd = "security find-internet-password -gs gmail -w" -``` - -*See the -[wiki](https://github.com/soywod/himalaya/wiki/Configuration:config-file) for -all the options.* - ## Features -- Mailbox listing -- Email listing and filtering -- Email composition based on `$EDITOR` -- Email manipulation (copy/move/delete) -- Multi-accounting -- IDLE mode for real-time notifications -- Vim plugin -- Completions for bash/zsh/fish -- JSON output -- … +### :mailbox: [Email](https://github.com/soywod/himalaya/blob/set-up-multi-crate/email-manager/README.md) -*See the [wiki](https://github.com/soywod/himalaya/wiki) for all the features.* +Himalaya proposes a command-line API to manage your emails (listing, searching, +reading, copying, moving, deleting…). It is also shipped with a [Vim +plugin](https://github.com/soywod/himalaya/blob/set-up-multi-crate/email-manager/vim/README.md). +A [TUI](https://github.com/soywod/himalaya/pull/155) and an [Emacs +plugin](https://github.com/soywod/himalaya/issues/142https://github.com/soywod/himalaya/issues/142) +are in progress by the community. A +[synchronizer](https://github.com/soywod/himalaya/blob/set-up-multi-crate/email-synchronizer/README.md) +should also come soon. + +### :card_index: [Contact](https://github.com/soywod/himalaya/blob/set-up-multi-crate/contact-manager/README.md) (TODO) + +Himalaya plans to propose a command-line API to manage your contacts through +the [CardDAV](https://en.wikipedia.org/wiki/CardDAV) protocol. It may come in +the future with a Vim plugin, an Emacs plugin, a TUI and a synchronizer. + +### :date: [Calendar](https://github.com/soywod/himalaya/blob/set-up-multi-crate/calendar-manager/README.md) (TODO) + +Himalaya plans to propose a command-line API to manage your calendar through +the [CalDAV](https://en.wikipedia.org/wiki/CalDAV) protocol. It may come in the +future with a Vim plugin, an Emacs plugin, a TUI and a synchronizer. + +### :stopwatch: [Tasks](https://github.com/soywod/himalaya/blob/set-up-multi-crate/task-manager/README.md) (TODO) + +Himalaya plans to propose a command-line API to manage your tasks and your time +through the [CalDAV](https://en.wikipedia.org/wiki/CalDAV) protocol. It may +come in the future with a Vim plugin, an Emacs plugin, a TUI and a +synchronizer. The tool already exists in [another +repository](https://github.com/soywod/unfog): it needs to be rewritten and +added to the Himalaya suite. ## Sponsoring @@ -89,13 +47,3 @@ all the options.* [![ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi&logoColor=ffffff)](https://ko-fi.com/soywod) [![buy-me-a-coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee&logoColor=000000)](https://www.buymeacoffee.com/soywod) [![liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay&logoColor=222222)](https://liberapay.com/soywod) - -## Credits - -- [IMAP RFC3501](https://tools.ietf.org/html/rfc3501) -- [Iris](https://github.com/soywod/iris.vim), the himalaya predecessor -- [isync](https://isync.sourceforge.io/), an email synchronizer for offline usage -- [NeoMutt](https://neomutt.org/), an email terminal user interface -- [Alpine](http://alpine.x10host.com/alpine/alpine-info/), an other email terminal user interface -- [mutt-wizard](https://github.com/LukeSmithxyz/mutt-wizard), a tool over NeoMutt and isync -- [rust-imap](https://github.com/jonhoo/rust-imap), a rust IMAP lib diff --git a/calendar-manager/Cargo.toml b/calendar-manager/Cargo.toml new file mode 100644 index 0000000..773f8ca --- /dev/null +++ b/calendar-manager/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "makalu" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/calendar-manager/README.md b/calendar-manager/README.md new file mode 100644 index 0000000..0803956 --- /dev/null +++ b/calendar-manager/README.md @@ -0,0 +1,3 @@ +# :date: Makalu + +TODO diff --git a/calendar-manager/src/main.rs b/calendar-manager/src/main.rs new file mode 100644 index 0000000..b976a3f --- /dev/null +++ b/calendar-manager/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + unimplemented!("The calendar manager is not implemented yet."); +} diff --git a/calendar-synchronizer/Cargo.toml b/calendar-synchronizer/Cargo.toml new file mode 100644 index 0000000..e8ceb02 --- /dev/null +++ b/calendar-synchronizer/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "makalu-sync" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/calendar-synchronizer/README.md b/calendar-synchronizer/README.md new file mode 100644 index 0000000..424b3a7 --- /dev/null +++ b/calendar-synchronizer/README.md @@ -0,0 +1,3 @@ +# :date: :repeat: Makalu synchronizer + +TODO diff --git a/calendar-synchronizer/src/main.rs b/calendar-synchronizer/src/main.rs new file mode 100644 index 0000000..5c0b198 --- /dev/null +++ b/calendar-synchronizer/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + unimplemented!("The calendar synchronizer is not implemented yet."); +} diff --git a/contact-manager/Cargo.toml b/contact-manager/Cargo.toml new file mode 100644 index 0000000..381a02e --- /dev/null +++ b/contact-manager/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "everest" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/contact-manager/README.md b/contact-manager/README.md new file mode 100644 index 0000000..ca02fa6 --- /dev/null +++ b/contact-manager/README.md @@ -0,0 +1,3 @@ +# :card_index: Everest + +TODO diff --git a/contact-manager/src/main.rs b/contact-manager/src/main.rs new file mode 100644 index 0000000..b379e2d --- /dev/null +++ b/contact-manager/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + unimplemented!("The contact manager is not implemented yet."); +} diff --git a/contact-synchronizer/Cargo.toml b/contact-synchronizer/Cargo.toml new file mode 100644 index 0000000..eacd867 --- /dev/null +++ b/contact-synchronizer/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "everest-sync" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/contact-synchronizer/README.md b/contact-synchronizer/README.md new file mode 100644 index 0000000..58acef6 --- /dev/null +++ b/contact-synchronizer/README.md @@ -0,0 +1,3 @@ +# :card_index: :repeat: Everest synchronizer + +TODO diff --git a/contact-synchronizer/src/main.rs b/contact-synchronizer/src/main.rs new file mode 100644 index 0000000..ecef320 --- /dev/null +++ b/contact-synchronizer/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + unimplemented!("The contact synchronizer is not implemented yet."); +} diff --git a/email-manager/Cargo.toml b/email-manager/Cargo.toml index 9e19b97..e4c29d1 100644 --- a/email-manager/Cargo.toml +++ b/email-manager/Cargo.toml @@ -4,6 +4,7 @@ description = "CLI email manager" version = "0.5.1" authors = ["soywod "] edition = "2018" +default-run = "himalaya" [dependencies] ammonia = "3.1.2" diff --git a/email-manager/README.md b/email-manager/README.md new file mode 100644 index 0000000..6dbb13b --- /dev/null +++ b/email-manager/README.md @@ -0,0 +1,92 @@ +# :mailbox: Himalaya [![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/himalaya.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/himalaya) + +![image](https://user-images.githubusercontent.com/10437171/138774902-7b9de5a3-93eb-44b0-8cfb-6d2e11e3b1aa.png) + +## Motivation + +Bringing emails to the terminal is a *pain*. First, because they are sensitive +data. Secondly, the existing TUIs ([Mutt](http://www.mutt.org/), +[NeoMutt](https://neomutt.org/), [Alpine](https://alpine.x10host.com/), +[aerc](https://aerc-mail.org/)…) are really hard to configure. They require time +and patience. + +The aim of Himalaya is to extract the email logic into a simple (yet solid) CLI +API that can be used directly from the terminal, from scripts, from UIs… +Possibilities are endless! + +## Installation + +```sh +# As root: +curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/email-manager/install.sh | sudo sh + +# As a regular user: +curl -sSL https://raw.githubusercontent.com/soywod/himalaya/master/email-manager/install.sh | PREFIX=~/.local sh +``` + +*See the [wiki](https://github.com/soywod/himalaya/wiki) for other installation +methods.* + +## Configuration + +```toml +# ~/.config/himalaya/config.toml + +name = "Your full name" +downloads-dir = "/abs/path/to/downloads" +signature = """ +-- +Regards, +""" + +[gmail] +default = true +email = "your.email@gmail.com" + +imap-host = "imap.gmail.com" +imap-port = 993 +imap-login = "your.email@gmail.com" +imap-passwd-cmd = "pass show gmail" + +smtp-host = "smtp.gmail.com" +smtp-port = 465 +smtp-login = "your.email@gmail.com" +smtp-passwd-cmd = "security find-internet-password -gs gmail -w" +``` + +*See the +[wiki](https://github.com/soywod/himalaya/wiki/Configuration:config-file) for +all the options.* + +## Features + +- Mailbox listing +- Email listing and filtering +- Email composition based on `$EDITOR` +- Email manipulation (copy/move/delete) +- Multi-accounting +- IDLE mode for real-time notifications +- Vim plugin +- Completions for bash/zsh/fish +- JSON output +- … + +*See the [wiki](https://github.com/soywod/himalaya/wiki) for all the features.* + +## Sponsoring + +[![github](https://img.shields.io/badge/-GitHub%20Sponsors-fafbfc?logo=GitHub%20Sponsors)](https://github.com/sponsors/soywod) +[![paypal](https://img.shields.io/badge/-PayPal-0079c1?logo=PayPal&logoColor=ffffff)](https://www.paypal.com/paypalme/soywod) +[![ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi&logoColor=ffffff)](https://ko-fi.com/soywod) +[![buy-me-a-coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee&logoColor=000000)](https://www.buymeacoffee.com/soywod) +[![liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay&logoColor=222222)](https://liberapay.com/soywod) + +## Credits + +- [IMAP RFC3501](https://tools.ietf.org/html/rfc3501) +- [Iris](https://github.com/soywod/iris.vim), the himalaya predecessor +- [isync](https://isync.sourceforge.io/), an email synchronizer for offline usage +- [NeoMutt](https://neomutt.org/), an email terminal user interface +- [Alpine](http://alpine.x10host.com/alpine/alpine-info/), an other email terminal user interface +- [mutt-wizard](https://github.com/LukeSmithxyz/mutt-wizard), a tool over NeoMutt and isync +- [rust-imap](https://github.com/jonhoo/rust-imap), a rust IMAP lib diff --git a/email-synchronizer/Cargo.toml b/email-synchronizer/Cargo.toml new file mode 100644 index 0000000..7d72047 --- /dev/null +++ b/email-synchronizer/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "himalaya-sync" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/email-synchronizer/README.md b/email-synchronizer/README.md new file mode 100644 index 0000000..af5a45e --- /dev/null +++ b/email-synchronizer/README.md @@ -0,0 +1,3 @@ +# :mailbox: :repeat: Himalaya synchronizer + +TODO diff --git a/email-synchronizer/src/main.rs b/email-synchronizer/src/main.rs new file mode 100644 index 0000000..97de372 --- /dev/null +++ b/email-synchronizer/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + unimplemented!("The email synchronizer is not implemented yet."); +} diff --git a/task-manager/Cargo.toml b/task-manager/Cargo.toml new file mode 100644 index 0000000..f4229b4 --- /dev/null +++ b/task-manager/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "lhotse" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/task-manager/README.md b/task-manager/README.md new file mode 100644 index 0000000..96ed25e --- /dev/null +++ b/task-manager/README.md @@ -0,0 +1,3 @@ +# :stopwatch: Lhotse + +TODO diff --git a/task-manager/src/main.rs b/task-manager/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/task-manager/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/task-synchronizer/Cargo.toml b/task-synchronizer/Cargo.toml new file mode 100644 index 0000000..4d7bb86 --- /dev/null +++ b/task-synchronizer/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "lhotse-sync" +version = "0.1.0" +edition = "2018" + +[dependencies] diff --git a/task-synchronizer/README.md b/task-synchronizer/README.md new file mode 100644 index 0000000..c290b78 --- /dev/null +++ b/task-synchronizer/README.md @@ -0,0 +1,3 @@ +# :stopwatch: :repeat: Lhotse synchronizer + +TODO diff --git a/task-synchronizer/src/main.rs b/task-synchronizer/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/task-synchronizer/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}