diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml index 59e6ce7..07739e5 100644 --- a/alacritty/alacritty.yml +++ b/alacritty/alacritty.yml @@ -318,7 +318,7 @@ colors: # # Window opacity as a floating point number from `0.0` to `1.0`. # The value `0.0` is completely transparent and `1.0` is opaque. -background_opacity: 0.95 +background_opacity: 0.80 #selection: #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" diff --git a/awesome/init.fnl b/awesome/init.fnl index 73bd098..5f4436b 100644 --- a/awesome/init.fnl +++ b/awesome/init.fnl @@ -72,7 +72,7 @@ (if (= "syl\n" stdout) (global laptop true) (global laptop false)))) -(local laptop true) +(local laptop false) ;; Table of layouts to cover with awful.layout.inc, order matters. (set awful.layout.layouts [ @@ -179,16 +179,25 @@ :bg_empty beautiful.bg_normal } :layout { - :spacing (dpi 10) + :spacing (dpi 5) :spacing_widget { :valign "center" :halign "center" :widget wibox.container.place } - :layout wibox.layout.flex.horizontal + :layout wibox.layout.flex.horizontal } })) + ;; (set s.mytaglistbg ( { + ;; 1 { + ;; s.mytaglist + ;; } + ;; :widget wibox.container.background + ;; :shape gears.shape.rounded_bar + ;; :bg beautiful.bg_normal + ;; })) + ;; Create a tasklist widget (set s.mytasklist (awful.widget.tasklist { :screen s @@ -204,7 +213,8 @@ :spacing (dpi 20) :spacing_widget { 1 { - :forced_width (dpi 5) :forced_height (dpi 20) + :forced_width (dpi 5) + :forced_height (dpi 20) :widget wibox.widget.separator } :valign "center" @@ -254,7 +264,8 @@ :spacing (dpi 20) :spacing_widget { 1 { - :forced_width (dpi 5) :forced_height (dpi 20) + :forced_width (dpi 5) + :forced_height (dpi 20) :widget wibox.widget.separator } :valign "center" @@ -386,6 +397,8 @@ (set s.mysystray { 1 { 1 { 1 (wibox.widget.systray) :widget wibox.container.margin :right (dpi 10) + :top (dpi 2) + :bottom (dpi 2) :left (dpi 10)} :widget wibox.container.background :shape gears.shape.rounded_bar @@ -400,7 +413,7 @@ 1 s.cpuwidget 2 s.volumewidget 3 (if laptop s.batterywidget s.myemptywidget) - 4 s.mysystray + 4 (if (= s.index 1) s.mysystray) 5 s.mylayoutbox } :widget wibox.container.background diff --git a/awesome/keybindings.fnl b/awesome/keybindings.fnl index 6c41da5..932c6d9 100644 --- a/awesome/keybindings.fnl +++ b/awesome/keybindings.fnl @@ -95,7 +95,7 @@ {:description "restore minimized" :group "client"}) ;; Prompt - (awful.key [ modkey ] "r" (fn [] (awful.spawn "/home/chris/.dotfiles/rofi/launchers-git/run.sh")) + (awful.key [ modkey ] "Menu" (fn [] (awful.spawn "/home/chris/.dotfiles/rofi/launchers-git/run.sh")) {:description "run prompt" :group "launcher"}) (awful.key [ modkey shift ctrl ] "x" (fn [] @@ -143,7 +143,7 @@ {:description "launch eshell in new emacs frame" :group "apps" }) (awful.key [ modkey ] "e" (fn [] (awful.spawn "emacsclient -c -a 'emacs'")) {:description "launch new emacs frame" :group "apps" }) - (awful.key [ modkey ] "p" (fn [] (awful.spawn "rofi-pass")) + (awful.key [ modkey ] "p" (fn [] (awful.spawn "rofi-rbw")) {:description "select pass" :group "apps" }) (awful.key [ modkey shift ] "w" (fn [] (awful.spawn "libreoffice --writer")) {:description "Open Writer" :group "apps" }) diff --git a/picom.conf b/picom.conf index 23bbc1e..3a37b8f 100644 --- a/picom.conf +++ b/picom.conf @@ -1,64 +1,42 @@ -################################# -# Corners # -################################# -# requires: https://github.com/sdhand/compton +# Corners corner-radius = 14.0; rounded-corners-exclude = [ #"window_type = 'normal'", "class_g = 'awesome'", - # "class_g = 'URxvt'", "class_g = 'XTerm'", "class_g = 'kitty'", # "class_g = 'emacs'", - # "name_g = 'EXWM workspace'", - # "class_g = 'Polybar'", - # "class_g = 'mpv'", - # "class_g = 'qutebrowser'", - #"class_g = 'TelegramDesktop'", - # "class_g = 'firefox'", "class_g = 'Thunderbird'", - # "class_g = 'Alacritty'" ]; round-borders = 12; round-borders-exclude = [ #"class_g = 'TelegramDesktop'", ]; -################################# -# Shadows # -################################# - - +#Shadows # Enabled client-side shadows on windows. Note desktop windows # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, # unless explicitly requested using the wintypes option. -# -# shadow = false shadow = true; # The blur radius for shadows, in pixels. (defaults to 12) -# shadow-radius = 12 shadow-radius = 13; # The opacity of shadows. (0.0 - 1.0, defaults to 0.75) -shadow-opacity = .65 +shadow-opacity = .75; # The left offset for shadows, in pixels. (defaults to -15) -# shadow-offset-x = -15 shadow-offset-x = 2; # The top offset for shadows, in pixels. (defaults to -15) -# shadow-offset-y = -15 shadow-offset-y = 2; # Avoid drawing shadows on dock/panel windows. This option is deprecated, # you should use the *wintypes* option in your config file instead. -# # no-dock-shadow = false # Don't draw shadows on drag-and-drop windows. This option is deprecated, # you should use the *wintypes* option in your config file instead. -# # no-dnd-shadow = false # Red color value of shadow (0.0 - 1.0, defaults to 0). @@ -97,11 +75,6 @@ shadow-exclude = [ "class_g = 'awesome'", # "class_g = 'qutebrowser'", "class_g = 'slop'", - # "class_g = 'qutebrowser'", - # "class_g = 'mpv'", - # "class_g = 'microsoft teams - insiders'", - # "class_g = 'Polybar'", - # "class_g = 'Rofi'", "_GTK_FRAME_EXTENTS@:c" ]; @@ -109,30 +82,23 @@ shadow-exclude = [ # be painted in, such as a dock window region. Use # shadow-exclude-reg = "x10+0+0" # for example, if the 10 pixels on the bottom of the screen should not have shadows painted on. -# shadow-exclude-reg = "x0+0+0" # Crop shadow of a window fully on a particular Xinerama screen to the screen. # xinerama-shadow-crop = false - -################################# -# Fading # -################################# - - +# Fading # Fade windows in/out when opening/closing and when opacity changes, # unless no-fading-openclose is used. -# fading = false fading = true; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) # fade-in-step = 0.028 -fade-in-step = 0.3; +fade-in-step = 0.01; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) # fade-out-step = 0.03 -fade-out-step = 0.3; +fade-out-step = 0.01; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) # fade-delta = 10 @@ -307,7 +273,6 @@ backend = "glx"; # Enable/disable VSync. -# vsync = false vsync = true # Enable remote control via D-Bus. See the *D-BUS API* section below for more details. @@ -325,41 +290,32 @@ mark-ovredir-focused = true; # Try to detect windows with rounded corners and don't consider them # shaped windows. The accuracy is not very high, unfortunately. -# -# detect-rounded-corners = false detect-rounded-corners = true; # Detect '_NET_WM_OPACITY' on client windows, useful for window managers # not passing '_NET_WM_OPACITY' of client windows to frame windows. -# -# detect-client-opacity = false detect-client-opacity = true; # Specify refresh rate of the screen. If not specified or 0, picom will # try detecting this with X RandR extension. -# -# refresh-rate = 60 -refresh-rate = 0 +refresh-rate = 0; # Limit picom to repaint at most once every 1 / 'refresh_rate' second to # boost performance. This should not be used with # vsync drm/opengl/opengl-oml # as they essentially does sw-opti's job already, # unless you wish to specify a lower refresh rate than the actual value. -# # sw-opti = # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, # rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy, # provided that the WM supports it. -# -use-ewmh-active-win = true +use-ewmh-active-win = true; # Unredirect all windows if a full-screen opaque window is detected, # to maximize performance for full-screen windows. Known to cause flickering # when redirecting/unredirecting windows. paint-on-overlay may make the flickering less obvious. -# -# unredir-if-possible = false +unredir-if-possible = true; # Delay before unredirecting the window, in milliseconds. Defaults to 0. # unredir-if-possible-delay = 0 @@ -371,14 +327,14 @@ use-ewmh-active-win = true # in the same group focused at the same time. # # detect-transient = false -detect-transient = true +detect-transient = true; # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same # group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if # detect-transient is enabled, too. # # detect-client-leader = false -detect-client-leader = true +detect-client-leader = true; # Resize damaged region by a specific number of pixels. # A positive value enlarges it while a negative one shrinks it. @@ -402,8 +358,7 @@ detect-client-leader = true # Might cause incorrect opacity when rendering transparent content (but never # practically happened) and may not work with blur-background. # My tests show a 15% performance boost. Recommended. -# -# glx-no-stencil = false +glx-no-stencil = true # GLX backend: Avoid rebinding pixmap on window damage. # Probably could improve performance on rapid window content changes, @@ -418,7 +373,7 @@ detect-client-leader = true # The opposing option is use-damage # # no-use-damage = false -use-damage = true +use-damage = true; # Use X Sync fence to sync clients' draw calls, to make sure all draw # calls are finished before picom starts drawing. Needed on nvidia-drivers diff --git a/rofi/launchers-git/blurry.rasi b/rofi/launchers-git/blurry.rasi index b949c30..01aaa24 100644 --- a/rofi/launchers-git/blurry.rasi +++ b/rofi/launchers-git/blurry.rasi @@ -63,7 +63,7 @@ window { } mainbox { - border-radius: 35px; + border-radius: 16; background-color: @transparent; text-color: @base05; transparency: "real"; diff --git a/scripts/fm6000 b/scripts/fm6000 new file mode 100755 index 0000000..2fd96cc --- /dev/null +++ b/scripts/fm6000 @@ -0,0 +1,343 @@ +#!/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; +} + +sub shell { + return (split '/', $ENV{SHELL})[-1]; +} + +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(); +