diff options
-rwxr-xr-x | include/genzshrc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/include/genzshrc b/include/genzshrc new file mode 100755 index 0000000..21a022a --- /dev/null +++ b/include/genzshrc @@ -0,0 +1,52 @@ +#!/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); |