diff --git a/applications/about.desktop b/applications/about.desktop
new file mode 100644
index 0000000..ecf421f
--- /dev/null
+++ b/applications/about.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=About Mabox Linux
+Comment=About Mabox Linux
+Exec=about-mabox
+Icon=mbcc
+Type=Application
+Categories=System;
diff --git a/bin/about-mabox b/bin/about-mabox
new file mode 100755
index 0000000..a43ca13
--- /dev/null
+++ b/bin/about-mabox
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+yad --title="About Mabox" --window-icon=mbcc \
+ --about \
+ --pname="Mabox Linux" \
+ --pversion="$(lsb_release -rs) $(lsb_release -cs)" \
+ --image=mbcc \
+ --comments="Fast and Lightweight, ready to use Openbox Desktop" \
+ --copyright="Copyright 2016-2022, Daniel Napora " \
+ --license=GPL3 \
+ --website="https://maboxlinux.org" \
+ --website-label=maboxlinux.org \
+ --authors="Daniel Napora "
diff --git a/bin/mb-canvas b/bin/mb-canvas
new file mode 100755
index 0000000..cf2d026
--- /dev/null
+++ b/bin/mb-canvas
@@ -0,0 +1,386 @@
+#!/bin/bash
+## An Imagemagick Script To Generate Wallpapers.
+## Based on https://github.com/adi1090x/canvas by Aditya Shakya (adi1090x)
+## Modified by Daniel Napora for Mabox Linux to run from menu
+
+
+
+case $LANG in
+ pl*)
+ IMWG="Generator Tapet"
+ PICKCOLOR="Pobierz kolor z ekranu"
+ PICKCOLORS="Pobierz kolory z ekranu"
+ PICKEDCOLOR="Pobrany kolor"
+ PICKNEXT="Pobierz nastepny"
+ PICKEDALL="GenerujÄ™ tapetÄ™..."
+ ;;
+ *)
+ IMWG="ImageMagick Wallpaper Generator"
+ PICKCOLOR="Pick color from screen"
+ PICKCOLORS="Pick colors from screen"
+ PICKEDCOLOR="Picked color"
+ PICKNEXT="Please pick next..."
+ PICKEDALL="Generating Wallpaper..."
+ ;;
+esac
+
+
+DIR="$(xdg-user-dir PICTURES)/mb-canvas"
+
+size="$(xrandr --current | grep '*' | uniq | awk '{print $1}')"
+name="mb-canvas_$(date +%Y-%m-%d_%I-%M-%S).png"
+#SETTER="feh --bg-scale";
+SETTER="nitrogen --set-scaled --save"
+#picker_app="gpick -s -o --no-newline"
+picker_app="xcolor"
+
+if [[ ! -d "$DIR" ]]; then
+ mkdir -p "$DIR"
+fi
+
+set_bg() {
+ $SETTER "$DIR/$name"
+}
+
+
+## Pick the colors
+color_picker() {
+
+ if [[ "$SOLID" == "true" ]]; then
+ notify-send.sh "$IMWG" "$PICKCOLOR" -i mbcc --expire-time=120000
+ color=$($picker_app)
+ elif [[ "$GRADIENT" == "true" ]] || [[ "$RGRADIENT" == "true" ]] || [[ "$TGRADIENT" == "true" ]]; then
+ notify-send.sh "$IMWG" "$PICKCOLORS: 2" -i mbcc --expire-time=120000
+ color1=$($picker_app)
+ FNAME="/tmp/${color1:1:6}.png"
+ convert -size 100x100 xc:"$color1" "$FNAME"
+ notify-send.sh "$PICKEDCOLOR 1" "$color1\n $PICKNEXT..." --icon="$FNAME" --expire-time=120000
+ color2=$($picker_app)
+ FNAME="/tmp/${color2:1:6}.png"
+ convert -size 100x100 xc:"$color2" "$FNAME"
+ notify-send.sh "$PICKEDCOLOR 2" "$color1\n $PICKEDALL" --icon="$FNAME" --expire-time=120000
+ color="$color1-$color2"
+ elif [[ "$BGRADIENT" == "true" ]]; then
+ notify-send.sh "$IMWG" "$PICKCOLORS: 4" -i mbcc --expire-time=120000
+ color1=$($picker_app)
+ FNAME="/tmp/${color1:1:6}.png"
+ convert -size 100x100 xc:"$color1" "$FNAME"
+ notify-send.sh "$PICKEDCOLOR 1" "$color1\n $PICKNEXT..." --icon="$FNAME" --expire-time=120000
+ color2=$($picker_app)
+ FNAME="/tmp/${color2:1:6}.png"
+ convert -size 100x100 xc:"$color2" "$FNAME"
+ notify-send.sh "$PICKEDCOLOR 2" "$color2\n $PICKNEXT..." --icon="$FNAME" --expire-time=120000
+ color3=$($picker_app)
+ FNAME="/tmp/${color3:1:6}.png"
+ convert -size 100x100 xc:"$color3" "$FNAME"
+ notify-send.sh "$PICKEDCOLOR 3" "$color3\n $PICKNEXT..." --icon="$FNAME" --expire-time=120000
+ color4=$($picker_app)
+ FNAME="/tmp/${color4:1:6}.png"
+ convert -size 100x100 xc:"$color4" "$FNAME"
+ notify-send.sh "$PICKEDCOLOR 4" "$color4\n $PICKEDALL" --icon="$FNAME" --expire-time=120000
+ fi
+}
+
+## Get colors
+get_color() {
+ while true; do
+ color_picker
+ break
+ done
+}
+## Generate a solid color wallpaper
+solid() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_color
+ color="$RCOLOR"
+ else
+ get_color
+ fi
+ convert -size "$size" canvas:"$color" "$DIR/$name"
+ set_bg
+}
+
+## Generate a linear gradient wallpaper
+linear_gradient() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_color
+ color="$RCOLOR"
+
+ get_random_number "360"
+ angle="$RNUM"
+ else
+ get_color
+ #{ echo; read -p ${ORANGE}"Enter the rotation angle (default is 0): "${BLUE} angle; }
+ fi
+ name="linear_$name"
+ convert -size "$size" -define gradient:angle="${angle:-0}" gradient:"$color" "$DIR/$name"
+ set_bg
+}
+
+## Generate a radial gradient wallpaper
+radial_gradient() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_color
+ color1="$RCOLOR"
+ get_random_color
+ color="$color1-$RCOLOR"
+
+ get_random_number "360"
+ angle="$RNUM"
+
+ getRandomShape
+ shape="$RSHAPE"
+ else
+ get_color
+ { echo; read -p ${ORANGE}"Shape? [ 1.diagonal | 2.ellipse | 3.maximum | 4.minimum ] (1/2/3/4): "${BLUE}; }
+ if [[ $REPLY == "1" ]]; then
+ shape='diagonal'
+ elif [[ $REPLY == "2" ]]; then
+ shape='ellipse'
+ elif [[ $REPLY == "3" ]]; then
+ shape='maximum'
+ elif [[ $REPLY == "4" ]]; then
+ shape='minimum'
+ fi
+ { echo; read -p ${ORANGE}"Enter the rotation angle (default is 0): "${BLUE} angle; }
+ fi
+ name="radial_$name"
+ convert -size "$size" -define gradient:extent="${shape:-maximum}" -define gradient:angle="${angle:-0}" radial-gradient:"$color" "$DIR/$name"
+ set_bg
+}
+
+## Generate a twisted gradient wallpaper
+twisted_gradient() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_color
+ color1="$RCOLOR"
+ get_random_color
+ color="$color1-$RCOLOR"
+
+ get_random_number "500"
+ twist="$RNUM"
+ else
+ get_color
+ { echo; read -p ${ORANGE}"Enter the twisting amount (maximum 500): "${BLUE} twist; }
+ fi
+ name="twisted_$name"
+ convert -size "$size" gradient:"$color" -swirl "${twist:-150}" "$DIR/$name"
+ set_bg
+}
+
+## Generate a 4 point gradient wallpaper
+bilinear_gradient() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_color
+ color1="$RCOLOR"
+ get_random_color
+ color2="$RCOLOR"
+ get_random_color
+ color3="$RCOLOR"
+ get_random_color
+ color4="$RCOLOR"
+
+ get_random_number "2"
+ if [[ "$RNUM" == "1" ]]; then
+ answer="s"
+ else
+ answer="r"
+ fi
+ else
+ get_color
+ { echo; read -p ${ORANGE}"Smooth or Regular? (s/r): "${BLUE} answer; }
+ fi
+ name="bilinear_$name"
+ if [[ $answer == "s" ]] || [[ $answer == "S" ]]; then
+ { echo; echo -n ${CYAN}"Please wait... "; }
+ convert \( xc:"$color1" xc:"$color2" +append \) \( xc:"$color3" xc:"$color4" +append \) -append -size "$size" xc: +swap -fx 'v.p{i/(w-1),j/(h-1)}' "$DIR/$name"
+ else
+ convert \( xc:"$color1" xc:"$color2" +append \) \( xc:"$color3" xc:"$color4" +append \) -append -filter triangle -resize "$size"\! "$DIR/$name"
+ fi
+ set_bg
+}
+
+## Generate a plasma wallpaper
+plasma() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_number "3"
+
+ if [[ "$RNUM" == "1" ]]; then
+ answer="r"
+ elif [[ "$RNUM" == "2" ]]; then
+ answer="t"
+ get_random_number "500"
+ twist="$RNUM"
+ else
+ answer="c"
+ get_random_color
+ color="$RCOLOR"
+ fi
+ else
+ { echo; read -p ${ORANGE}"Random, Twisted or Custom colors? (r/t/c): "${BLUE} answer; }
+ fi
+ name="plasma_$name"
+ if [[ $answer == "r" ]] || [[ $answer == "R" ]]; then
+ convert -size "$size" plasma: "$DIR/$name"
+ elif [[ $answer == "t" ]] || [[ $answer == "T" ]]; then
+ if [[ "$RANDOMIZE" != "true" ]]; then
+ { echo; read -p ${ORANGE}"Enter the twisting amount (maximum 500): "${BLUE} twist; }
+ fi
+ convert -size "$size" plasma:fractal -swirl "${twist:-150}" "$DIR/$name"
+ else
+ if [[ "$RANDOMIZE" != "true" ]]; then
+ { echo; read -p ${ORANGE}"Enter the colors name or hex (format: color1-color2): "${GREEN} color; }
+ fi
+ convert -size "$size" plasma:"$color" "$DIR/$name"
+ fi
+ set_bg
+}
+
+## Generate a random, multi-colored blurred/gradient wallpaper
+blurred_noise() {
+ if [[ "$RANDOMIZE" == "true" ]]; then
+ get_random_number "30"
+ blur="$RNUM"
+ else
+ { echo; read -p ${ORANGE}"Enter the blur strength (maximum 30): "${BLUE} blur; }
+ fi
+ convert -size "100x56" xc: +noise Random "/tmp/noise.png"
+ convert "/tmp/noise.png" -virtual-pixel tile -blur 0x"${blur:-14}" -auto-level -resize "$size" "$DIR/$name"
+ set_bg
+}
+
+## Generate random number lower than giver parameter
+get_random_number() {
+ RNUM=$(( ($RANDOM % $1) + 1 ))
+}
+
+## Generate random color
+get_random_color() {
+ RCOLOR="#"
+ for i in 1 2 3 4 5 6
+ do
+ get_random_number "16"
+ case $RNUM in
+ "1") NEXTDIGIT="1";;
+ "2") NEXTDIGIT="2";;
+ "3") NEXTDIGIT="3";;
+ "4") NEXTDIGIT="4";;
+ "5") NEXTDIGIT="5";;
+ "6") NEXTDIGIT="6";;
+ "7") NEXTDIGIT="7";;
+ "8") NEXTDIGIT="8";;
+ "9") NEXTDIGIT="9";;
+ "10") NEXTDIGIT="A";;
+ "11") NEXTDIGIT="B";;
+ "12") NEXTDIGIT="C";;
+ "13") NEXTDIGIT="D";;
+ "14") NEXTDIGIT="E";;
+ "15") NEXTDIGIT="F";;
+ "16") NEXTDIGIT="0";;
+ esac
+ RCOLOR="$RCOLOR$NEXTDIGIT"
+ done
+}
+
+## Generate random shape option
+getRandomShape() {
+ get_random_number "4"
+ case $RNUM in
+ "1") RSHAPE="diagonal";;
+ "2") RSHAPE="ellipse";;
+ "3") RSHAPE="maximum";;
+ "4") RSHAPE="minimum";;
+ esac
+}
+
+## Generate random wallpaper
+randomize() {
+ get_random_number "7"
+ case $RNUM in
+ "1") solid;;
+ "2") linear_gradient;;
+ "3") radial_gradient;;
+ "4") twisted_gradient;;
+ "5") bilinear_gradient;;
+ "6") plasma;;
+ "7") blurred_noise;;
+ esac
+}
+
+
+## Parse the arguments
+options=$(getopt -o S:,s,l,r,t,b,p,B,h,a,R,n --long size:,solid,linear,radial,twisted,bilinear,plasma,blurred,help,autobg,randomize,no-preview -- "$@")
+eval set -- "$options"
+
+while true; do
+ case "$1" in
+ -S|--size)
+ shift;
+ size=$1
+ ;;
+ -s|--solid)
+ SOLID="true"
+ COLOR=$1
+ ;;
+ -l|--linear)
+ GRADIENT="true"
+ ;;
+ -r|--radial)
+ RGRADIENT="true"
+ ;;
+ -t|--twisted)
+ TGRADIENT="true"
+ ;;
+ -b|--bilinear)
+ BGRADIENT="true"
+ ;;
+ -p|--plasma)
+ PLASMA="true"
+ ;;
+ -B|--blurred)
+ NOISE="true"
+ ;;
+ -a|--autobg)
+ AUTOBG="true"
+ ;;
+ -R|--randomize)
+ RANDOMIZE="true"
+ ;;
+ -n|--no-preview)
+ NOFEH="true"
+ ;;
+ -h|--help)
+ usage
+ exit
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+ shift
+done
+
+## Main Execution
+
+Prerequisite
+
+if [[ "$SOLID" == "true" ]]; then
+ solid
+elif [[ "$GRADIENT" == "true" ]]; then
+ linear_gradient
+elif [[ "$RGRADIENT" == "true" ]]; then
+ radial_gradient
+elif [[ "$TGRADIENT" == "true" ]]; then
+ twisted_gradient
+elif [[ "$BGRADIENT" == "true" ]]; then
+ bilinear_gradient
+elif [[ "$PLASMA" == "true" ]]; then
+ plasma
+elif [[ "$NOISE" == "true" ]]; then
+ blurred_noise
+elif [[ "$RANDOMIZE" == "true" ]]; then
+ randomize
+else
+ usage
+fi