{ cfg, config, lib, pkgs, ... }: let inherit (lib) concatStrings singleton; tinc = cfg.tincPackage; hostsType = builtins.typeOf cfg.hosts; hosts = if hostsType == "package" then # use package as is cfg.hosts else if hostsType == "path" then # use path to generate a package pkgs.stdenv.mkDerivation { name = "custom-retiolum-hosts"; src = cfg.hosts; installPhase = '' mkdir $out find . -name .git -prune -o -type f -print0 | xargs -0 cp --target-directory $out ''; } else abort "The option `services.retiolum.hosts' must be set to a package or a path" ; iproute = cfg.iproutePackage; retiolumExtraHosts = import (pkgs.runCommand "retiolum-etc-hosts" { } '' generate() { (cd ${hosts} printf \'\' for i in `ls`; do names=$(hostnames $i) for j in `sed -En 's|^ *Aliases *= *(.+)|\1|p' $i`; do names="$names $(hostnames $j)" done sed -En ' s|^ *Subnet *= *([^ /]*)(/[0-9]*)? *$|\1 '"$names"'|p ' $i done | sort printf \'\' ) } case ${cfg.generateEtcHosts} in short) hostnames() { echo "$1"; } generate ;; long) hostnames() { echo "$1.${cfg.network}"; } generate ;; both) hostnames() { echo "$1.${cfg.network} $1"; } generate ;; *) echo '""' ;; esac > $out ''); confDir = pkgs.runCommand "retiolum" { # TODO text executable = true; preferLocalBuild = true; } '' set -euf mkdir -p $out ln -s ${hosts} $out/hosts cat > $out/tinc.conf < $out/tinc-up <