#!/usr/bin/env perl
use strict;
use warnings;

my $zshrc = "$ENV{HOME}/.zshrc";
my $zsource = "$ENV{HOME}/packages/zsh/etc/rc";
my %subst = (
	ZDIR => "$ENV{HOME}/packages/zsh/etc",
	HOME => $ENV{HOME},
);
my ($command, $args);

sub substitute($) {
	my $string = shift;
	my ($param, $value);
	while (($param, $value) = each(%subst)) {
		$string =~ s/\$($param|\{$param\})/$value/g;
	}
	return($string);
}

sub parse($) {
	my $file = shift;
	my $fh;
	open($fh, '<', $file) or die("Can't open $file: $!");
	while(<$fh>) {
		chomp;
		s/^\s*//;
		if (/^#/ or $_ eq '') {
			next
		}
		if (/^(\S+)(?:\s+(.+))?$/ and deploy($1, $2)) {
			next;
		}
		print;
		print "\n";
	}
	close($fh);
}

sub deploy($;$) {
	my ($command, $args) = @_;
	my $plain_args = substitute($args || '');
	if ($command =~ /^x?source$/ and -r $plain_args) {
		print "## source $plain_args\n";
		parse($plain_args);
		return(1);
	}
	return(0);
}

parse($zsource);