#!perl
# .pshrc
# Author: Possum
# Description: Some useful subroutines, aliases, etc. for psh

use strict;
use warnings;

sub stty_stuff {
	unless ($^O eq 'openbsd') {
		print `fortune -as | cowsay`;
	}
	`stty erase ^?`;
	`stty -ixon`;
}
	
sub is_interactive {
	unless ( $ENV{TERM} ) {
		$Psh::interactive = 0;
		return 0;
	} else {
		return 1;
	}
}

sub hostname {
	return `hostname`;
}

sub color_by_hostname {
	use Digest::MD5 qw/md5_hex/;
	my $hostname = hostname().2;
	my $sum = int(md5_hex($hostname));
	return $sum % 7 +1;
}

sub cdoldpwd {
	my $temppwd = $ENV{PWD};
	$ENV{PWD} = $ENV{OLDPWD};
	$ENV{OLDPWD} = $temppwd;
	chdir($ENV{PWD});
	return;
}

sub sbin_apps {
	my @paths;
	foreach('/usr/local/','/usr/','/') {
		push (@paths,$_.'sbin/');
	}
	my @apps;
	foreach (@paths) {
		push (@apps,split(/ /,`find $_ -executable -printf "%f\ " `));
	}
	return @apps;
}

sub set_aliases {
	Psh::evl(<<EOF);
alias ls='ls -FCh';
alias ll='ls -l';
alias lla='ls -la';
alias la='ls -a';
alias ...='cdoldpwd';
alias sudo='/usr/bin/sudo';
alias ~='cd ~';
EOF
	Psh::evl("alias ls='ls --color=auto -FCh'") unless $^O =~/bsd/i;
	if (hostname() eq 'haruko') {
		Psh::evl(<<EOF);
alias aoeu='setxkbmap us';
alias asdf='setxkbmap us -variant dvorak';
alias less='vimpager';
EOF
	}
}

sub completion {
	Psh::evl(<<EOF);
complete module standard;
complete module perl;
complete -f -x '!*.+(tar|TAR|tgz|TGZ)*' tar;
complete -f -A command -F sbin_apps sudo;
complete -f -A hostname ssh scp;
EOF
}

sub strategies {
	Psh::evl('strategy add auto_cd');
}

sub env_vars {
	$ENV{MPD_HOST}='canti.flcl';
	$ENV{XAUTHORITY}=$ENV{HOME}.'/.Xauthority';
}

sub psh_options {
	Psh::evl("option path=['/usr/local/bin','/usr/bin','/bin','/opt/bin','/usr/i686-pc-linux-gnu/gcc-bin/4.1.2','/usr/qt/3/bin','/usr/games/bin','/home/possum/bin'];");
	Psh::evl('option ps1=sub {
		return \'\[\033[01;3\'.color_by_hostname().\'m\]\u@\h\[\033[01;34m\] \W \[\033[00m\][\'.$i++.\'] \$ \';
	}');
}

sub init {
	if ($ENV{TERM}) {
		set_aliases();
		stty_stuff();
		completion();
		strategies();
		env_vars();
		psh_options();
	}
}

init;

