346 lines
13 KiB
Perl
Executable file
346 lines
13 KiB
Perl
Executable file
#!/usr/bin/env perl
|
||
|
||
# Dilbert themed system info fetch tool
|
||
# https://github.com/anhsirk0/fetch-master-6000
|
||
|
||
use strict;
|
||
use Term::ANSIColor;
|
||
use Getopt::Long;
|
||
|
||
my $length = 13;
|
||
my $gap = 3;
|
||
my $margin = 2;
|
||
my $color = 'yellow';
|
||
|
||
my $wally;
|
||
my $dogbert;
|
||
my $alice;
|
||
my $phb;
|
||
my $asok;
|
||
my $help;
|
||
my $not_de;
|
||
my $random;
|
||
|
||
my @colors = (
|
||
'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',
|
||
'bright_red', 'bright_green', 'bright_yellow',
|
||
'bright_blue', 'bright_magenta', 'bright_cyan', 'bright_white'
|
||
);
|
||
|
||
sub get_os {
|
||
my $os = `lsb_release -sd`;
|
||
# for BSD
|
||
unless ($os) { $os = `uname -s`; }
|
||
for($os){
|
||
s/"//;
|
||
s/ .*//;
|
||
s/"//;
|
||
chomp;
|
||
}
|
||
return $os;
|
||
}
|
||
|
||
sub get_de {
|
||
my $de = $ENV{XDG_CURRENT_DESKTOP};
|
||
unless ($de) { $de = $ENV{XDG_SESSION_DESKTOP} };
|
||
unless ($de) { $de = $ENV{DESKTOP_SESSION} };
|
||
# return $de;
|
||
return "awesome";
|
||
}
|
||
|
||
sub shell {
|
||
# return (split '/', $ENV{SHELL})[-1];
|
||
return "fish";
|
||
}
|
||
|
||
sub kernel {
|
||
my $ke = `uname -r`;
|
||
$ke =~ s/-.*//;
|
||
chomp $ke;
|
||
return $ke
|
||
}
|
||
|
||
sub packages {
|
||
# for arch based
|
||
my $pacs = `pacman -Q`;
|
||
# for debian based
|
||
unless ($pacs) { $pacs = `dpkg-query -f '\n' -W`; }
|
||
# for fedora
|
||
unless ($pacs) { $pacs = `yum list installed`; }
|
||
# for BSD
|
||
unless ($pacs) { $pacs = `pkg info`; }
|
||
|
||
my $count = $pacs =~ tr/\n//;
|
||
return $count;
|
||
}
|
||
|
||
sub uptime {
|
||
my $time = `uptime`;
|
||
for($time) {
|
||
s/.*up\s+//;
|
||
s/,\s+[0-9]+ user.*//;
|
||
s/ //g;
|
||
s/,/:/g;
|
||
s/[a-z]+//g;
|
||
chomp
|
||
}
|
||
|
||
my @time = reverse(split ":", $time);
|
||
if (scalar @time == 2) {
|
||
$time[0] =~ s/^0//; # remove starting '0' (01 -> 1)
|
||
$time = $time[1]. "h, " . $time[0] . "m";
|
||
} elsif (scalar @time == 3) {
|
||
$time[0] =~ s/^0//; # remove starting '0' (01 -> 1)
|
||
$time = $time[2]. "d, " . $time[1]. "h, " . $time[0] . "m";
|
||
} else {
|
||
$time .= "m";
|
||
}
|
||
return $time;
|
||
}
|
||
|
||
# today's internet usage via vnstat
|
||
sub usage {
|
||
my $data = `vnstat`;
|
||
my $today;
|
||
foreach my $line (split '\n', $data) {
|
||
if ($line =~ /today/) {
|
||
$today = (split '\|', $line)[2];
|
||
$today =~ s/^ *//;
|
||
}
|
||
}
|
||
return $today;
|
||
}
|
||
|
||
sub format_info {
|
||
my %info = %{(shift)};
|
||
# format => "MARGIN PLACEHOLDER GAP NAME"
|
||
my $text = ' ' x $margin . colored($info{'placeholder'}, $info{'color'});
|
||
$text .= ' ' x (7 + $gap - length $info{'placeholder'});
|
||
$text .= $info{'name'} . ' ' x ($length - length $info{'name'});
|
||
return $text;
|
||
}
|
||
|
||
sub get_info {
|
||
my $os = get_os();
|
||
my $ke = kernel();
|
||
my $de = get_de();
|
||
my $sh = shell();
|
||
my $up = uptime();
|
||
my $pac = packages();
|
||
my $de_placeholder = 'DE';
|
||
my $vnstat = '-1';
|
||
my $usg;
|
||
|
||
GetOptions (
|
||
"help" => \$help,
|
||
"os=s" => \$os,
|
||
"kernel=s" => \$ke,
|
||
"de=s" => \$de,
|
||
"shell=s" => \$sh,
|
||
"uptime=s" => \$up,
|
||
"packages=i" => \$pac,
|
||
"margin=i" => \$margin,
|
||
"length=i" => \$length,
|
||
"gap=i" => \$gap,
|
||
"color=s" => \$color,
|
||
"not_de" => \$not_de,
|
||
"vnstat:s" => \$vnstat,
|
||
"wally" => \$wally,
|
||
"dogbert" => \$dogbert,
|
||
"alice" => \$alice,
|
||
"phb" => \$phb,
|
||
"asok" => \$asok,
|
||
"random" => \$random,
|
||
);
|
||
|
||
if ($help) {
|
||
print_help();
|
||
exit;
|
||
}
|
||
|
||
if ($not_de) {
|
||
$de_placeholder = 'WM';
|
||
}
|
||
|
||
if ($vnstat eq '') {
|
||
$vnstat = usage();
|
||
}
|
||
|
||
if ($color eq "random") {
|
||
$color = @colors[int(rand scalar @colors)];
|
||
}
|
||
|
||
my %usg = (
|
||
'placeholder' => 'VNSTAT',
|
||
'color' => 'magenta',
|
||
'name' => $vnstat
|
||
);
|
||
|
||
my %os = (
|
||
'placeholder' => 'OS',
|
||
'color' => 'bright_green',
|
||
'name' => $os,
|
||
);
|
||
|
||
my %ke = (
|
||
'placeholder' => 'KERNEL',
|
||
'color' => 'blue',
|
||
'name' => $ke,
|
||
);
|
||
|
||
my %de = (
|
||
'placeholder' => $de_placeholder,
|
||
'color' => 'bright_red',
|
||
'name' => $de,
|
||
);
|
||
|
||
my %sh = (
|
||
'placeholder' => 'SHELL',
|
||
'color' => 'yellow',
|
||
'name' => $sh,
|
||
);
|
||
|
||
my %up = (
|
||
'placeholder' => 'UPTIME',
|
||
'color' => 'bright_magenta',
|
||
'name' => $up,
|
||
);
|
||
|
||
my %pac = (
|
||
'placeholder' => 'PACKAGE',
|
||
'color' => 'cyan',
|
||
'name' => $pac,
|
||
);
|
||
|
||
$os = format_info(\%os);
|
||
$ke = format_info(\%ke);
|
||
$de = format_info(\%de);
|
||
$sh = format_info(\%sh);
|
||
$up = format_info(\%up);
|
||
$pac = format_info(\%pac);
|
||
$usg = format_info(\%usg);
|
||
|
||
my $i = 0;
|
||
my @info;
|
||
$info[$i++] = ' ' x ($length + $gap + 7 + $margin);
|
||
$info[$i++] = $os;
|
||
if ($vnstat eq '-1' ) { $info[$i++] = $ke; }
|
||
$info[$i++] = $de;
|
||
$info[$i++] = $sh;
|
||
$info[$i++] = $up;
|
||
$info[$i++] = $pac;
|
||
unless ($vnstat eq '-1' ) { $info[$i++] = $usg; }
|
||
$info[$i++] = ' ' x ($length + $gap + 7 + $margin);
|
||
|
||
return @info;
|
||
}
|
||
|
||
sub main {
|
||
my @info = get_info();
|
||
if ($random) {
|
||
my @arr = map { 0 } (1..6);
|
||
$arr[int rand(6)] = 1;
|
||
($wally, $dogbert, $alice, $phb, $asok) = splice @arr, 0, 4;
|
||
}
|
||
|
||
my $text = "\n";
|
||
if ($wally) {
|
||
$text .= colored(q{ ╭} . '─' x ($length + $margin + $gap + 7) . '╮', $color) . "\n";
|
||
$text .= colored(q{ .-'''-. │}, $color) . $info[0] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | | │}, $color) . $info[1] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ⪜|---_---|⪛ ╭│}, $color) . $info[2] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ Ͼ|__(_)__|Ͽ ││}, $color) . $info[3] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | _ | ││}, $color) . $info[4] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | | ╯│}, $color) . $info[5] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ˏ====○====ˎ │}, $color) . $info[6] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ / \ │}, $color) . $info[7] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ╰} . '─' x ($length + $margin + $gap + 7) . '╯', $color) . "\n";
|
||
} elsif ($dogbert) {
|
||
$text .= colored(q{ ╭} . '─' x ($length + $margin + $gap + 7) . '╮', $color) . "\n";
|
||
$text .= colored(q{ │}, $color) . $info[0] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ .-----. │}, $color) . $info[1] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ .` `. ╭│}, $color) . $info[2] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ / /-() ()-\ \ ││}, $color) . $info[3] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ \_| ○ |_/ ││}, $color) . $info[4] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ '. .' ╯│}, $color) . $info[5] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ `-._.-' │}, $color) . $info[6] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ │}, $color) . $info[7] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ╰} . '─' x ($length + $margin + $gap + 7) . '╯', $color) . "\n";
|
||
} elsif ($alice) {
|
||
$text .= colored(q{ ..-.. ╭} . '─' x ($length + $margin + $gap + 7) . '╮', $color) . "\n";
|
||
$text .= colored(q{ (~ ~) │}, $color) . $info[0] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ( ) │}, $color) . $info[1] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ( ~~~~~~~ ) ╭│}, $color) . $info[2] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ( | . . | ) ││}, $color) . $info[3] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ( | (_) | ) ││}, $color) . $info[4] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ( | | ) ╯│}, $color) . $info[5] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ (.,.,.| === |.,.,.) │}, $color) . $info[6] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ '.___.' │}, $color) . $info[7] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ / \ ╰} . '─' x ($length + $margin + $gap + 7) . '╯', $color) . "\n";
|
||
} elsif ($phb) {
|
||
$text .= colored(q{ @ @ ╭} . '─' x ($length + $margin + $gap + 7) . '╮', $color) . "\n";
|
||
$text .= colored(q{ @@ ..-.. @@ │}, $color) . $info[0] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ @@@' _ _ '@@@ │}, $color) . $info[1] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ @( . . )@ ╭│}, $color) . $info[2] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | (_) | ││}, $color) . $info[3] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | _ | ││}, $color) . $info[4] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ |_ _| ╯│}, $color) . $info[5] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ /|_'---'_|\ │}, $color) . $info[6] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ / | '\_/' | \ │}, $color) . $info[7] . colored('│', $color) . "\n";
|
||
$text .= colored(q{/ | | | | \ ╰} . '─' x ($length + $margin + $gap + 7) . '╯', $color) . "\n";
|
||
} elsif ($asok) {
|
||
$text .= colored(q{ ╭} . '─' x ($length + $margin + $gap + 7) . '╮', $color) . "\n";
|
||
$text .= colored(q{ @@@@@@@@@ │}, $color) . $info[0] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | | │}, $color) . $info[1] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | _ _ | ╭│}, $color) . $info[2] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ Ͼ| ○ ○ |Ͽ ││}, $color) . $info[3] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | u | ││}, $color) . $info[4] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | --- | ╯│}, $color) . $info[5] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ / `-._.-´ \ │}, $color) . $info[6] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | │}, $color) . $info[7] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ╰} . '─' x ($length + $margin + $gap + 7) . '╯', $color) . "\n";
|
||
} else {
|
||
$text .= colored(q{ ╭} . '─' x ($length + $margin + $gap + 7) . '╮', $color) . "\n";
|
||
$text .= colored(q{ დოოოოოდ │}, $color) . $info[0] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | | │}, $color) . $info[1] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | | ╭│}, $color) . $info[2] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ |-ᱛ ᱛ-| ││}, $color) . $info[3] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ Ͼ ∪ Ͽ ││}, $color) . $info[4] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ | | ╯│}, $color) . $info[5] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ ˏ`-.ŏ.-´ˎ │}, $color) . $info[6] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ @ │}, $color) . $info[7] . colored('│', $color) . "\n";
|
||
$text .= colored(q{ @ ╰} . '─' x ($length + $margin + $gap + 7) . '╯', $color) . "\n";
|
||
}
|
||
|
||
$text .= "\n";
|
||
print $text;
|
||
}
|
||
|
||
sub print_help {
|
||
print "usage: fm6000 [options]\n\n";
|
||
print "-c, --color=STR Base color\n";
|
||
print "-w, --wally Display Wally \n";
|
||
print "-dog, --dogbert Display Dogbert \n";
|
||
print "-al, --alice Display Alice \n";
|
||
print "-phb, --phb Display Pointy haired Boss \n";
|
||
print "-as, --asok Display Asok \n";
|
||
print "-r, --random Display Random Art \n";
|
||
print "-n, --not_de To use 'WM' instead of 'DE'\n";
|
||
print "-o, --os=STR OS name\n";
|
||
print "-k or --kernel=STR Kernel version\n";
|
||
print "-de or --de=STR Desktop environment name\n";
|
||
print "-s or --shell=STR Shell name\n";
|
||
print "-u or --uptime=STR Uptime\n";
|
||
print "-pa or --package=INT Number of packages\n";
|
||
print "-v or --vnstat=STR Use vnstat instead of kernel\n";
|
||
print "-m or --margin=INT Spaces on the left side of info\n";
|
||
print "-g or --gap=INT Spaces between info and info_value\n";
|
||
print "-l or --length=INT Length of the board ( > 14)\n\n";
|
||
print "available colors: \n";
|
||
print join(", ", splice(@colors, 0, 7)) . ", random\n";
|
||
print join(", ", @colors) . "\n";
|
||
}
|
||
|
||
main();
|
||
|