From a5c8362f7b33e995f8fb3e18c0c236052fdb23b0 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Sun, 15 Jan 2017 23:32:57 +0100 Subject: [PATCH] home-manager: improve command line option handling --- README.md | 11 ++++++++- home-manager/home-manager | 49 ++++++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 179fcf158..f86fb90f3 100644 --- a/README.md +++ b/README.md @@ -119,9 +119,18 @@ First create a file `~/.nixpkgs/home.nix` containing To activate this configuration you can then run ``` -$ home-manager switch ~/.nixpkgs/home.nix +$ home-manager switch ``` +or if you are not feeling so lucky, + +``` +$ home-manager build +``` + +which will create a `result` link to a directory containing an +activation script and the generated home directory files. + [Nix]: https://nixos.org/nix/ [NixOS]: https://nixos.org/ [Nixpkgs]: https://nixos.org/nixpkgs/ diff --git a/home-manager/home-manager b/home-manager/home-manager index 380a2fa0a..9f25f3212 100644 --- a/home-manager/home-manager +++ b/home-manager/home-manager @@ -66,22 +66,55 @@ function doListPackages() { } function doHelp() { - echo "Usage: $0 COMMAND" + echo "Usage: $0 [OPTION] COMMAND" + echo + echo "Options" + echo + echo " -f FILE The home configuration file. Default is ~/.nixpkgs/home.nix" + echo " -n Do a dry run, only prints what actions would be taken" + echo " -h Print this help" echo echo "Commands" echo " help Print this help" - echo " build CONF Build configuration into result directory" - echo " switch CONF Build and activate configuration" + echo " build Build configuration into result directory" + echo " switch Build and activate configuration" echo " generations List all home environment generations" echo " packages List all packages installed in home-manager-path" } -case "$1" in +CONFIG_FILE="$HOME/.nixpkgs/home.nix" + +while getopts f:nh opt; do + case $opt in + f) + CONFIG_FILE=$OPTARG + ;; + n) + export DRY_RUN=1 + ;; + h) + doHelp + exit 0 + ;; + *) + echo "Unknown option -$OPTARG" >&2 + doHelp >&2 + exit 1 + ;; + esac +done + +# Get rid of the options. +shift "$((OPTIND-1))" + +cmd="$*" + +case "$cmd" in build) - doBuild "$2" "result" + doBuild "$CONFIG_FILE" "result" ;; switch) - doSwitch "$2" + doSwitch "$CONFIG_FILE" ;; generations) doListGens @@ -93,8 +126,8 @@ case "$1" in doHelp ;; *) - echo "Unknown command: $1" - doHelp + echo "Unknown command: $cmd" + doHelp >&2 exit 1 ;; esac