-#!/usr/bin/perl
-# Filename: grml-quickconfig
-# Purpose: get fast access to some basic grml-scripts
-# Authors: Michael Schierl <schierlm-public@gmx.de>, Alexander Wirt <formorer@grml.org>
-# Bug-Reports: see http://grml.org/bugs/
-# License: This file is licensed under the GPL v2.
-################################################################################
-
-# menu with quick config options
-
-use Term::ReadKey;
-use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
-
-# enable alternate charset support (needed for screen)
-print "\e(B\e)0";
-
-open (my $fh, '/proc/cmdline');
-my $cmdline = <$fh>;
-close($fh);
-
-my $color = 1 unless $cmdline =~ /nocolor/;
-
-# variables for nice display
-if ($color) {
- $W = "\e[0;32;1m"; # White
- $N = "\x0f\e[0m"; # Normal
- $M = "\e[0;35;1m"; # Magenta (for commands)
- $B = "\e[0;34;1m\x0e"; # Blue, line drawing characters
-} else {
- $B = "\x0e";
- $N = "\x0f";
-}
-
-$HLINE=$B."x".$N; # A single horizontal line drawing character
-
-# menu options
-%menu_commands = (
- d => 'grml-lang de',
- a => 'grml-lang at',
- c => 'grml-lang ch',
- u => 'grml-lang us',
- s => 'grml-lang es',
- n => 'grml-network',
- e => 'netcardconfig',
- i => 'grml-info',
- h => 'grml2hd',
- m => 'pdmenu -c',
- q => 'exit',
-# x and Return are handled manually
-);
-
-# window managers
-%windowmanagers = (
- a => 'awesome',
- d => 'dwm',
- e => 'evilwm',
- f => 'fluxbox',
- v => 'fvwm',
- 2 => 'fvwm2',
- c => 'fvwm-crystal',
- j => 'jwm',
- o => 'openbox',
- k => 'pekwm',
- r => 'ratpoison',
- t => 'twm',
- 9 => 'w9wm',
- w => 'windowlab',
- i => 'wmii',
- n => 'wm-ng',
-);
-
-sub getKey
-{
- print "Press a key: ".$M;
- ReadMode 4; # Turn off controls keys
-
- # HACK: this is necessary because startx/Xorg sets the console where it outputs
- # to non-blocking mode
- $flags = fcntl(STDIN, F_GETFL, 0) or die "Can't get flags for STDIN: $!\n";
- $flags = fcntl(STDIN, F_SETFL, $flags & ~O_NONBLOCK) or die "Can't set flags for STDIN: $!\n";
-
- while (not defined ($x = ReadKey(0))) {}
- ReadMode 0; # Reset tty mode before exiting
- return $x;
-}
-
-# main loop
-while(1) {
-# main loop
- $command="";
- while($command eq "") {
- print <<"EOF";
-
- ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N}
- $HLINE Welcome to ${M}grml-quickconfig${M} $HLINE
- $HLINE Press a highlighted key to perform an action, or press $HLINE
- $HLINE ${W}Return${N} or ${W}q${N} to go back to the shell. $HLINE
- ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N}
- $HLINE Set keyboard layout (${M}grml-lang${N}): ${W}d${N}e ${W}a${N}t ${W}c${N}h e${W}s${N} ${W}u${N}s $HLINE
- $HLINE Configure ${W}n${N}etwork (${M}grml-network${N}) $HLINE
- $HLINE -> Configure ${W}e${N}thernet card directly (${M}netcardconfig${N}) $HLINE
- ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N}
- $HLINE Show ${W}i${N}nformation about grml (${M}grml-info${N}) $HLINE
- $HLINE Start ${W}x${N} (${M}grml-x${N}) $HLINE
- $HLINE Show an application ${W}m${N}enu (${M}pdmenu${N}) $HLINE
- $HLINE Install grml to ${W}h${N}ard disk (${M}grml2hd${N}) $HLINE
- ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N}
-
-EOF
- $x = getKey();
-
- print $N.$/.$/;
- if (defined($menu_commands{$x})) {
- $command = $menu_commands{$x};
- } elsif ($x eq "\n" || $x eq ' ') {
- $command= 'exit';
- } elsif ($x eq "x") {
- print <<"EOF";
-
- ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N}
- $HLINE Select a window manager (unsorted list): $HLINE
- $HLINE Press any other key to return to the main menu. $HLINE
- ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N}
- $HLINE ${W}a${N}wesome ${W}d${N}wm ${W}e${N}vilwm ${W}f${N}luxbox f${W}v${N}wm fvwm${W}2${N} fvwm-${W}c${N}rystal ${W}j${N}wm ${N}$HLINE
- $HLINE ${W}o${N}penbox pe${W}k${N}wm ${W}r${N}atpoison ${W}t${N}wm w${W}9${N}wm ${W}w${N}indowlab wm${W}i${N}i wm-${W}n${N}g ${N}$HLINE
- ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N}
-
-EOF
- $x = getKey();
-
- print $N.$/.$/;
- if (defined($windowmanagers{$x})) {
- $command = "su - grml -c 'grml-x ".$windowmanagers{$x}."'";
- } else {
- print "Unknown key, not bound to a windowmanager.\n";
- print "Returning to main menu.\n";
- }
- } else {
- print "Unknown key.\n";
- }
- }
-
-# reenable input buffering
- system "stty", 'icanon', 'eol', '^@';
-
- if ($command eq "exit") {
- last;
- }
- print $W . "Running command: " . $M . $command . $N . $/;
- system($command);
- print $/;
-}
-print "Happy hacking!\n";
-
-## END OF FILE #################################################################
-# vim: ai expandtab ft=perl