diff --git a/Cargo.lock b/Cargo.lock index a11400f..74f0e05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,40 +37,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "clap" -version = "3.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" -dependencies = [ - "atty", - "bitflags", - "clap_lex", - "indexmap", - "strsim", - "termcolor", - "textwrap", -] - -[[package]] -name = "clap_lex" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] - -[[package]] -name = "clap_mangen" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "105180c05a72388d5f5e4e4f6c79eecb92497bda749fa8f963a16647c5d5377f" -dependencies = [ - "clap", - "roff", -] - [[package]] name = "colored" version = "2.0.0" @@ -128,12 +94,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hermit-abi" version = "0.1.19" @@ -143,16 +103,6 @@ dependencies = [ "libc", ] -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg", - "hashbrown", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -165,6 +115,15 @@ version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +[[package]] +name = "man" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf5fa795187a80147b1ac10aaedcf5ffd3bbeb1838bda61801a1c9ad700a1c9" +dependencies = [ + "roff", +] + [[package]] name = "num" version = "0.2.1" @@ -229,12 +188,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "os_str_bytes" -version = "6.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" - [[package]] name = "proc-macro2" version = "1.0.43" @@ -275,9 +228,9 @@ dependencies = [ [[package]] name = "roff" -version = "0.2.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" +checksum = "e33e4fb37ba46888052c763e4ec2acfedd8f00f62897b630cadb6298b833675e" [[package]] name = "size_format" @@ -289,12 +242,6 @@ dependencies = [ "num", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "syn" version = "1.0.99" @@ -306,21 +253,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" - [[package]] name = "thiserror" version = "1.0.34" @@ -358,11 +290,10 @@ name = "vento" version = "1.0.0" dependencies = [ "anyhow", - "clap", - "clap_mangen", "colored", "dirs", "fs_extra", + "man", "size_format", ] @@ -388,15 +319,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index c379ab9..2b345c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,8 @@ repository = "https://codeberg.org/nixgoat/vento" license = "GPL-3.0-or-later" keywords = ["utility", "file-manager", "inventory"] categories = ["command-line-utilities", "filesystem"] + +build = "build.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] @@ -19,5 +21,7 @@ colored = "2.0.0" fs_extra = "1.2.0" anyhow = "1.0.65" size_format = "1.0.2" -clap = "3.2.22" -clap_mangen = "0.1.11" + +[build-dependencies] +man = "0.3.0" +anyhow = "1.0.65" diff --git a/Makefile.toml b/Makefile.toml new file mode 100644 index 0000000..aaab86a --- /dev/null +++ b/Makefile.toml @@ -0,0 +1,32 @@ +[tasks.install-binary] +command = "cargo" +args = ["install", "--path", "."] + +[tasks.install-manpages] +condition = { platforms = ["linux", "mac"] } +script = [ + "cp /tmp/vento-man/* $HOME/.local/share/man/man1/", + "rm -rf /tmp/vento-man" +] + +[tasks.install] +dependencies = [ + "install-binary", + "install-manpages" +] + +[tasks.clean-binary] +command = "cargo" +args = ["clean"] + +[tasks.clean-manpages] +condition = { platforms = ["linux", "mac"] } +script = [ + "rm -rf /tmp/vento-man" +] + +[tasks.clean] +dependencies = [ + "clean-binary", + "clean-manpages" +] diff --git a/README.md b/README.md index d1a54cb..050e344 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,21 @@ Vento is a utility which allows you to manage your files as if you're playing an ## Install -Clone it using Git and build it with [Cargo](https://rustup.rs/)! +Clone the repository using Git. ``` $ git clone https://codeberg.org/nixgoat/vento.git && cd vento +``` + +The recommended method to install Vento is to use [cargo-make](https://crates.io/crates/cargo-make/0.3.54#usage-conditions-structure). This will install the binary and the manpages for Vento. + +``` +$ cargo make install +``` + +Otherwise you can build and install it with [Cargo](https://rustup.rs/). This will however not install the manpages. + +``` $ cargo install --path . ``` diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..75b7eb1 --- /dev/null +++ b/build.rs @@ -0,0 +1,110 @@ +/* + * Vento, a CLI inventory for your files. + * Copyright (C) 2022 Lux Aliaga + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +use anyhow::Result; +use man::prelude::*; +use std::env; +use std::fs::{create_dir_all, File}; +use std::io::Write; + +fn main() -> Result<()> { + if cfg!(unix) { + let pages = [vento()?, take()?, drop()?]; + + let tempdir = env::temp_dir().join("vento-man"); + + create_dir_all(tempdir.clone())?; + + for page in 0..pages.len() { + let tempfile = tempdir.join(pages[page].clone().1); + let mut file = File::create(tempfile).unwrap(); + write!(&mut file, "{}", pages[page].clone().0).unwrap(); + } + } + Ok(()) +} + +fn vento() -> Result<(String, String)> { + let page = Manual::new("vento") + .about("a CLI inventory for your files") + .author(Author::new("Lux Aliaga").email("they@mint.lgbt")) + .description("List files and directories in the currently active inventory, the files in SLOT, the files in DIRECTORY or the files in DIRECTORY in SLOT.") + .flag( + Flag::new() + .short("-s") + .long("--switch") + .help("Switches inventory slots"), + ) + .flag( + Flag::new() + .short("-i") + .long("--init") + .help("Initializes Vento with all its respective directories"), + ) + .flag( + Flag::new() + .short("-h") + .long("--help") + .help("Shows the help message"), + ) + .arg(Arg::new("[SLOT]")) + .arg(Arg::new("[DIRECTORY]")) + .custom( + Section::new("before starting") + .paragraph("Vento will first need to initialize the respective directories before usage. Do this by running vento -i.") + ) + .render(); + + Ok((page, String::from("vento.1"))) +} + +fn take() -> Result<(String, String)> { + let page = Manual::new("take") + .about("a file grabber for Vento") + .author(Author::new("Lux Aliaga").email("they@mint.lgbt")) + .description("Take FILE and put it in the inventory.") + .option( + Opt::new("slot") + .short("-s") + .long("--slot") + .help("The slot to put the file in"), + ) + .arg(Arg::new("FILE")) + .render(); + + Ok((page, String::from("take.1"))) +} + +fn drop() -> Result<(String, String)> { + let page = Manual::new("drop") + .about("a file dropper for Vento") + .author(Author::new("Lux Aliaga").email("they@mint.lgbt")) + .description("Take FILE off the inventory and drop it in DESTINATION.") + .option( + Opt::new("slot") + .short("-s") + .long("--slot") + .help("The slot to take the file from"), + ) + .arg(Arg::new("FILE")) + .arg(Arg::new("[DESTINATION]")) + .render(); + + Ok((page, String::from("drop.1"))) +}