From b32510419020a152817ebedbf89012af86b88eb5 Mon Sep 17 00:00:00 2001 From: Roey Darwish Dror Date: Sun, 4 Nov 2018 16:41:17 +0200 Subject: [PATCH] Add a flag for installing extra packages (fix #11) --- README.md | 3 +++ src/main.rs | 23 +++++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 807ef3f..48dc049 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,9 @@ this tool will refuse to work with drive paths which don't start with `/dev/disk After the installation is done you can either boot from it immediately or use `arch-chroot` to perform further customizations before your first boot. +### Flags +* `-p / --extra-packages` - Specify extra packages to install. For example: `-p htop tmux` + ## What exactly does it do? This tool doesn't aspire to be a generic installer for Arch Linux. Instead, it does the minimum diff --git a/src/main.rs b/src/main.rs index ea0f327..2de4510 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,12 +37,23 @@ HOOKS=(base udev block filesystems keyboard fsck)"; enum App { #[structopt(name = "create", about = "Create a new Arch Linux USB")] Create { - #[structopt(parse(from_os_str))] + #[structopt( + parse(from_os_str), + help = "Path starting with /dev/disk/by-id for the USB drive" + )] disk: PathBuf, + + #[structopt( + short = "p", + long = "extra-packages", + value_name = "package", + help = "Additional pacakges to install" + )] + extra_packages: Vec, }, } -fn create(disk: PathBuf) -> Result<(), Error> { +fn create(disk: PathBuf, extra_packages: Vec) -> Result<(), Error> { let sgdisk = Tool::find("sgdisk")?; let sync = Tool::find("sync")?; let pacstrap = Tool::find("pacstrap")?; @@ -125,7 +136,8 @@ fn create(disk: PathBuf) -> Result<(), Error> { "networkmanager", "btrfs-progs", "broadcom-wl", - ]).run(ErrorKind::Pacstrap)?; + ]).args(extra_packages) + .run(ErrorKind::Pacstrap)?; let fstab = genfstab .execute() @@ -189,7 +201,10 @@ fn main() { } let result = match app { - App::Create { disk } => create(disk), + App::Create { + disk, + extra_packages, + } => create(disk, extra_packages), }; match result {