diff options
| author | lassulus <lass@aidsballs.de> | 2015-05-07 14:38:29 +0200 | 
|---|---|---|
| committer | tv <tv@krebsco.de> | 2015-05-19 23:17:20 +0200 | 
| commit | b00142aeaf026a132460d4780001cf95903360c7 (patch) | |
| tree | e67457732733fb20d967878f48b98be6dfe09234 | |
| parent | cd8770b4d3839ff47b4fc922e6c93f10e6e1f09a (diff) | |
prelude.sh: use nixpkgs.{url,rev} as remote nixpkgs
| -rw-r--r-- | lib/prelude.sh | 64 | ||||
| -rw-r--r-- | modules/common/nixpkgs.nix | 16 | 
2 files changed, 79 insertions, 1 deletions
| diff --git a/lib/prelude.sh b/lib/prelude.sh index 00fa92a..98cbea0 100644 --- a/lib/prelude.sh +++ b/lib/prelude.sh @@ -1,14 +1,56 @@ +# clone_or_update : [user@]hostname x local_dir x git_url x git_rev -> () +clone_or_update() {( +  target=$1 +  nixpkgs_dir=$2 +  git_url=$3 +  git_rev=$4 + +  echo ' +    set -euf + +    if [ ! -d "$nixpkgs_dir" ]; then +      mkdir -p "$nixpkgs_dir" +    fi + +    cd "$nixpkgs_dir" + +    if [ ! -e "$nixpkgs_dir"/.git ]; then +      git init +    fi + +    if git remote -v | grep -q "^config\>"; then +      git remote remove config +    fi + +    git remote add config "$git_url" +    git fetch config + +    git checkout "$git_rev" +  ' | ssh "$target" env nixpkgs_dir="$nixpkgs_dir" git_url="$git_url" git_rev="$git_rev" /bin/sh +)} +  # deploy : nixos-config x [user@]hostname -> ()  deploy() {(    main=$1    target=$2 +  nixpkgs_dir='/var/tmp/nixpkgs' + +  git_url=$(nixpkgs_url $main) +  git_rev=$(nixpkgs_rev $main) + +  if [ $git_url = '' ] || [ $git_rev = '' ]; then +    echo "specify nixpkgs.url and nixpkgs.rev in $main !" +    exit 23 +  fi    filter=$(rsync_filter "$main")    echo "$filter" \      | rsync -f '. -' -zvrlptD --delete-excluded ./ "$target":/etc/nixos/ -  ssh "$target" nixos-rebuild switch -I nixos-config=/etc/nixos/"$main" +  clone_or_update "$target" "$nixpkgs_dir" "$git_url" "$git_rev" +  ssh "$target" nixos-rebuild switch -I nixos-config=/etc/nixos/"$main" -I nixpkgs="$nixpkgs_dir" +  )}  # rsync_filter : nixos-config -> rsync-filter @@ -185,6 +227,26 @@ make_parent_dirs() {    fi  } +# nixpkgs_url : nixos-config -> git_url +nixpkgs_url() { +  nix-instantiate \ +      -I nixos-config="$1" \ +      --eval \ +      --json \ +      -E '(import <nixos-config> {config={}; pkgs={};}).nixpkgs.url' \ +    | jq -r . +} + +# nixpkgs_rev : nixos-config -> git_rev +nixpkgs_rev() { +  nix-instantiate \ +      -I nixos-config="$1" \ +      --eval \ +      --json \ +      -E '(import <nixos-config> {config={}; pkgs={};}).nixpkgs.rev' \ +    | jq -r . 2> /dev/null +} +  # verbose COMMAND [ARGS...]  verbose() {    echo "$@" >&2 diff --git a/modules/common/nixpkgs.nix b/modules/common/nixpkgs.nix new file mode 100644 index 0000000..09b8867 --- /dev/null +++ b/modules/common/nixpkgs.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ +  options = { +    nixpkgs.url = mkOption { +      type = types.string; +      description = "url of the remote repo"; +    }; +    nixpkgs.rev= mkOption { +      type = types.string; +      description = "revision of the remote repo"; +    }; +  }; +} | 
