diff --git a/.gitignore b/.gitignore
index 610dd86..29bd421 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
 *.bak
 backup/*
-deb/*
+deb/build.sh
+deb/rebuild.sh
+deb/*.deb
 .remote-sync.json
 *.sync-conflict-*
diff --git a/deb/yggdrasil/DEBIAN/control b/deb/yggdrasil/DEBIAN/control
new file mode 100644
index 0000000..b18de08
--- /dev/null
+++ b/deb/yggdrasil/DEBIAN/control
@@ -0,0 +1,9 @@
+Package: yggdrasil
+Version: 0.4.0
+Section: utils
+Priority: optional
+Architecture: all
+Depends: bash, lsb-release, apt-transport-https, ruby-dev, snapd, npm, python3-pip, libnotify-bin, wget, curl, software-properties-common, terminator
+Maintainer: Francois B. (Makoto) <shakasan@sirenacorp.be>
+Description: Customize Linux Mint & other Ubuntu derivatives made easier. This is a post install script.
+Homepage: https://makotonoblog.be/
diff --git a/deb/yggdrasil/DEBIAN/postinst b/deb/yggdrasil/DEBIAN/postinst
new file mode 100755
index 0000000..43880da
--- /dev/null
+++ b/deb/yggdrasil/DEBIAN/postinst
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+UNDERLINE=$(tput sgr 0 1)
+BOLD=$(tput bold)
+ROUGE=$(tput setaf 1)
+VERT=$(tput setaf 2)
+JAUNE=$(tput setaf 3)
+BLEU=$(tput setaf 4)
+MAUVE=$(tput setaf 5)
+CYAN=$(tput setaf 6)
+BLANC=$(tput setaf 7)
+NORMAL=$(tput sgr0)
+INV=$(tput smso)
+BOLDROUGE=${BOLD}${ROUGE}
+BOLDVERT=${BOLD}${VERT}
+BOLDJAUNE=${BOLD}${JAUNE}
+BOLDBLEU=${BOLD}${BLEU}
+BOLDMAUVE=${BOLD}${MAUVE}
+BOLDCYAN=${BOLD}${CYAN}
+BOLDBLANC=${BOLD}${BLANC}
+
+printf "\n\n"
+printf $BOLDJAUNE
+printf "██╗   ██╗ ██████╗  ██████╗ ██████╗ ██████╗  █████╗ ███████╗██╗██╗     \n"
+printf "╚██╗ ██╔╝██╔════╝ ██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔════╝██║██║     \n"
+printf " ╚████╔╝ ██║  ███╗██║  ███╗██║  ██║██████╔╝███████║███████╗██║██║     \n"
+printf "  ╚██╔╝  ██║   ██║██║   ██║██║  ██║██╔══██╗██╔══██║╚════██║██║██║     \n"
+printf "   ██║   ╚██████╔╝╚██████╔╝██████╔╝██║  ██║██║  ██║███████║██║███████╗\n"
+printf "   ╚═╝    ╚═════╝  ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚═╝╚══════╝\n"
+printf "$BOLDROUGE                 Customize Linux Mint & Ubuntu derivatives made easier\n"
+printf "$BOLDBLANC                     GPLv3 - Francois B. (Makotosan) - makotonoblog.be\n"
+printf "\n"
+printf $NORMAL
+printf "You just have to type "$VERT"yggdrasil.sh"$NORMAL" in a terminal and follow the menus.\n"
+printf "A headless mode is also available, type "$VERT"yggdrasil -h"$NORMAL" for more informations.\n"
+printf "Enjoy ;-)\n\n"
diff --git a/deb/yggdrasil/opt/yggdrasil/LICENSE b/deb/yggdrasil/opt/yggdrasil/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {one line to give the program's name and a brief idea of what it does.}
+    Copyright (C) {year}  {name of author}
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    {project}  Copyright (C) {year}  {fullname}
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/deb/yggdrasil/opt/yggdrasil/core_functions.sh b/deb/yggdrasil/opt/yggdrasil/core_functions.sh
new file mode 100644
index 0000000..3c3bf07
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/core_functions.sh
@@ -0,0 +1,623 @@
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#------------------------------------------------------------------------------#
+# core functions                                                               #
+#------------------------------------------------------------------------------#
+
+#
+# display a simple message + CR
+#
+function smsgn () {
+    printf "$*\n"
+}
+
+#
+# display a simple message
+#
+function smsg () {
+    printf "$*"
+}
+
+#
+# display a message + notification
+#
+function msg () {
+  printf "\n"
+  printf $JAUNE
+  if [ "$#" -gt "0" ]; then
+    printf "$*\n"
+    /usr/bin/notify-send -t 7000 "$*"
+  fi
+  printf $NORMAL
+}
+
+#
+# display a message between [ ] depending of the ret_code
+#
+function retCode () {
+  typeset ret_code="$1"
+  if [ $ret_code == 0 ]; then
+    printf "[ "$BOLDVERT"OK"$NORMAL" ] "
+  else
+    printf "[ "$BOLDROUGE"!!"$NORMAL" ] "
+  fi
+  printf "\n"
+}
+
+#
+# run a shell command and display a message between [ ] depending on the ret_code
+#
+function runCmd () {
+  typeset cmd="$1"
+  typeset txt="$2"
+  typeset ret_code
+
+  printf "[CMD] $txt "
+  printf "\n[CMD] $txt : $cmd\n" &>> $logFile
+  eval $cmd" &>> $logFile"
+  ret_code=$?
+  retCode $ret_code
+}
+
+#
+# display a message + notification + ask to push a key to continue
+#
+function pressKey () {
+  printf "$*\n"
+  if which mpg123 >/dev/null; then
+    mpg123 -q /opt/yggdrasil/notify.mp3 &
+  fi
+  printf $INV
+  read -p "Press <Enter> key to continue ..."
+  printf $NORMAL
+}
+
+#
+# check if OS is Mint
+#
+function isMint () {
+  OS=`lsb_release -d | awk -F':' '{print $2}' | awk -F'\t' '{print $2}'`
+  if [[ $OS == *"Linux Mint 18"* ]]; then
+    return 0
+  else
+    return 1
+  fi
+}
+
+#
+# check if DE is Mate
+#
+function isMate () {
+  if [[ $DESKTOP_SESSION == *"mate"* ]]; then
+    return 0
+  else
+    return 1
+  fi
+}
+
+#
+# check and install required dependencies for Yggdrasil
+#
+function yggInit () {
+  typeset ret_code
+
+  if ! grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep -q ubuntu-make; then
+    printf "[INIT][UMAKE] PPA not found, adding PPA...\n"
+    printf "[INIT][UMAKE] PPA not found, adding PPA...\n" &>> $logFile
+    addPPA "ubuntu-desktop/ubuntu-make"
+  else
+    printf "[INIT][UMAKE] PPA found [ "$BOLDVERT"OK"$NORMAL" ] \n"
+  fi
+
+  printf "[INIT][APT] update "
+  printf "\n[INIT][APT] update\n" &>> $logFile
+  sudo apt-get update &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+
+  printf "[INIT]"
+  installPackage apt "apt-transport-https"
+
+  if ! which umake >/dev/null; then
+    printf "[INIT][UMAKE] not found, installing...\n"
+    printf "\n[INIT][UMAKE] not found, installing...\n" &>> $logFile
+    installPackage apt "ubuntu-make"
+  else
+    printf "[INIT][UMAKE] found [ "$BOLDVERT"OK"$NORMAL" ] \n"
+  fi
+
+  if ! which gem >/dev/null; then
+    printf "[INIT][GEM] not found, installing...\n"
+    printf "\n[INIT][GEM] not found, installing...\n" &>> $logFile
+    installPackage apt "ruby-dev"
+  else
+    printf "[INIT][GEM] found [ "$BOLDVERT"OK"$NORMAL" ] \n"
+  fi
+
+  if ! which snap >/dev/null; then
+    printf "[INIT][SNAP] not found, installing...\n"
+    printf "\n[INIT][SNAP] not found, installing...\n" &>> $logFile
+    installPackage apt "snapd"
+  else
+    printf "[INIT][SNAP] found [ "$BOLDVERT"OK"$NORMAL" ] \n"
+  fi
+
+  if ! which npm >/dev/null; then
+    printf "[INIT][NPM] not found, installing...\n"
+    printf "\n[INIT][NPM] not found, installing...\n" &>> $logFile
+    installPackage apt "npm"
+  else
+    printf "[INIT][NPM] found [ "$BOLDVERT"OK"$NORMAL" ] \n"
+  fi
+
+  if ! which pip3 >/dev/null; then
+    printf "[INIT][PIP] not found, installing...\n"
+    printf "\n[INIT][PIP] not found, installing...\n" &>> $logFile
+    printf "[INIT]"
+    installPackage apt "python3-pip"
+    printf "[INIT]"
+    installPackage pip "pip"
+    printf "[INIT]"
+    installPackage pip "setuptools"
+  else
+    printf "[INIT][PIP] found [ "$BOLDVERT"OK"$NORMAL" ] \n"
+    printf "[INIT]"
+    installPackage pip "pip"
+    printf "[INIT]"
+    installPackage pip "setuptools"
+  fi
+}
+
+
+#
+# system update
+#TODO: add pip, npm, gem
+#
+function updateSystem () {
+  typeset ret_code
+
+  printf "[APT] update "
+  printf "\n[APT] update\n" &>> $logFile
+  sudo apt-get update &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+
+  printf "[APT] upgrade "
+  printf "\n[APT] upgrade\n" &>> $logFile
+  sudo apt-get -y upgrade &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+
+  printf "[APT] dist-upgrade "
+  printf "\n[APT] dist-upgrade\n" &>> $logFile
+  sudo apt-get -y dist-upgrade &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+
+  if which snap >/dev/null; then
+    printf "[SNAP] refresh "
+    printf "\n[SNAP] refresh\n" &>> $logFile
+    sudo snap refresh &>> $logFile
+    ret_code=$?
+    retCode $ret_code
+  fi
+
+  repoAdded=0
+}
+
+#
+# add ppa
+# input : ppa name
+#
+function addPPA () {
+  typeset ret_code
+
+  if ! grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep -q $*; then
+    printf "[PPA] adding : $* "
+    printf "\n[PPA] adding $*\n" &>> $logFile
+    sudo add-apt-repository -y "ppa:"$* &>> $logFile
+    ret_code=$?
+    retCode $ret_code
+  else
+    printf "[PPA] PPA already added [ "$BOLDVERT"OK"$NORMAL" ] \n"
+  fi
+}
+
+#
+# add repo's key
+# input : file's url OR keyserver + key
+#
+function addKey () {
+  typeset ret_code
+
+  case $# in
+    "1")
+      printf "[REPO] adding key from file : $1 "
+      printf "\n[REPO] adding key from file $1\n" &>> $logFile
+      wget -qO - $1 | sudo apt-key add - &>> $logFile
+      ret_code=$?
+      retCode $ret_code
+      ;;
+    "2")
+      printf "[REPO] adding key $2 from $1 "
+      printf "\n[REPO] adding key $2 from $1\n" &>> $logFile
+      gpg --keyserver $1 --recv-keys $2 &>> $logFile \
+      && gpg -a --export $2 | sudo apt-key add - &>> $logFile
+      ret_code=$?
+      retCode $ret_code
+      ;;
+  esac
+}
+
+#
+# create new entry in /etc/apt/source.list.d/
+# input : filename, repo, src repo
+#
+function addRepo () {
+  typeset ret_code
+  printf "[REPO] adding : $2 in $1 "
+  printf "\n[REPO] adding $2 in $1\n" &>> $logFile
+  echo $2 | sudo tee /etc/apt/sources.list.d/$1 &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+  if [ "$#" -eq 3 ]; then
+    printf "[REPO] adding : $3 in $1 "
+    printf "\n[REPO] adding $3 in $1\n" &>> $logFile
+    echo $3 | sudo tee -a /etc/apt/sources.list.d/$1 &>> $logFile
+    ret_code=$?
+    retCode $ret_code
+  fi
+}
+
+#
+# install package manually
+# input : url of package, package name
+#
+function installPackageDpkg () {
+  printf "[PKG] Installing $2 from $1 "
+  printf "\n[PKG] installing $2 from $1\n" &>> $logFile
+  cd /tmp \
+  && wget -q -O $2 $1 \
+  && sudo dpkg -i $2 \
+  && sudo apt-get install -fy &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+}
+
+#
+# install package from repositories
+# input : package manager, package name
+# package manager available : apt, pip, npm, gem, snap
+# TODO: add apm, flatpak, umake?
+#
+function installPackage () {
+  typeset pkg="$2"
+  typeset ret_code
+
+  case $1 in
+  "apt")
+    printf "[APT] Installing $pkg "
+    printf "\n[APT] installing $pkg\n" &>> $logFile
+    sudo apt-get install -fy $pkg &>> $logFile
+    ret_code=$?
+    retCode $ret_code
+    ;;
+  "pip")
+    if which pip3 >/dev/null; then
+      printf "[PIP] Installing $pkg "
+      printf "\n[PIP] installing $pkg\n" &>> $logFile
+      sudo -H pip3 install --upgrade $pkg &>> $logFile
+      ret_code=$?
+      retCode $ret_code
+    fi
+    ;;
+  "npm")
+    if which npm >/dev/null; then
+      printf "[NPM] Installing $pkg "
+      printf "\n[NPM] installing $pkg\n" &>> $logFile
+      sudo npm install -g $pkg &>> $logFile
+      ret_code=$?
+      retCode $ret_code
+    fi
+    ;;
+  "gem")
+    if which gem >/dev/null; then
+      printf "[GEM] Installing $pkg "
+      printf "\n[GEM] installing $pkg\n" &>> $logFile
+      sudo gem install $pkg &>> $logFile
+      ret_code=$?
+      retCode $ret_code
+    fi
+    ;;
+  "snap")
+    if which snap >/dev/null; then
+      printf "[SNAP] Installing $pkg "
+      printf "\n[SNAP] installing $pkg\n" &>> $logFile
+      sudo snap install $pkg --classic &>> $logFile
+      ret_code=$?
+      retCode $ret_code
+    fi
+    ;;
+  esac
+}
+
+#
+# check dependency and install it if necessary
+# input : package manager, package name, cmd/bin to check
+#
+function checkAndInstallDep () {
+  if ! which $3 >/dev/null; then
+    printf "[DEP] dependency $2 not found [ "$BOLDROUGE"!!"$NORMAL" ]\n"
+    printf "[DEP] dependency $2 not found\n" &>> $logFile
+    case $1 in
+      "apt")
+        installPackage apt $2
+        ;;
+      "npm")
+        installPackage npm $2
+        ;;
+      "pip")
+        installPackage pip $2
+        ;;
+      "gem")
+        installPackage gem $2
+        ;;
+      "snap")
+        installPackage snap $2
+        ;;
+    esac
+  fi
+}
+
+#
+# add specific repository for a given package
+# input : unique ID, apt cache update yes/no
+#
+function addSpecificRepoFct () {
+  for i in $AppsRepo; do
+    appRepo=(${i//;/ })
+    if [ "${appRepo[0]}" == "$1" ]; then
+      printf "[ADD_REPO] for package : $1, "
+      printf "add repo by function : ${appRepo[1]} \n"
+      eval "${appRepo[1]}"
+      repoAdded=$(($repoAdded+1))
+    fi
+  done
+  if [ "$2" == "yes" ]; then
+    updateSystem
+  fi
+  unset i
+  unset appRepo
+}
+
+#
+# find and execute Pre/Post install functions for a specific app
+# input : unique ID
+#
+function processAppTrtFct () {
+  for i in $AppsTrtFct; do
+    appTrtFct=(${i//;/ })
+    if [ "${appTrtFct[0]}" == "$1" ]; then
+      printf "[TRT_FCT] for package : $1, "
+      printf "processing function : ${appTrtFct[1]} \n"
+      eval "${appTrtFct[1]}"
+    fi
+  done
+}
+
+#
+# install all about a specific category from Apps array app list (headless)
+# input : category name
+#
+function installAppsFromList () {
+  msg "Installing apps from $1 category"
+  for i in $Apps; do
+    app=(${i//;/ })
+    if [ "${app[2]}" == "$1" ]; then
+      addSpecificRepoFct ${app[3]}
+    fi
+  done
+  unset i
+  unset app
+  if [ "$repoAdded" -gt "0" ]; then
+    updateSystem
+  fi
+  for i in $Apps; do
+    app=(${i//;/ })
+    if [ "${app[2]}" == "$1" ]; then
+      installPackage ${app[1]} ${app[0]}
+      processAppTrtFct ${app[3]}
+    fi
+  done
+}
+
+#
+# generate install apps menu about a specific category from Apps array app list (Menu)
+# input : category name
+#
+function installAppsFromListMenu () {
+  for i in $Apps; do
+    app=(${i//;/ })
+    if [ "${app[2]}" == "$1" ]; then
+      list+=("${app[3]}" "${app[3]}" "ON")
+    fi
+  done
+
+  pkg=$(whiptail \
+  --title "Yggdrasil $version - App Install ($1)" \
+  --checklist \
+  "Select app to install and press OK" 25 80 19 \
+  "${list[@]}" 3>&1 1>&2 2>&3)
+
+  exitstatus=$?
+  if [ $exitstatus = 0 ]; then
+    for pkgToInstall in $pkg; do
+      for i in $Apps; do
+        app=(${i//;/ })
+        if [ "${app[3]}" == "${pkgToInstall//\"}" ]; then
+          addSpecificRepoFct ${app[3]}
+        fi
+      done
+    done
+    unset i
+    unset app
+    unset pkgToInstall
+    if [ "$repoAdded" -gt "0" ]; then
+      updateSystem
+    fi
+    for pkgToInstall in $pkg; do
+      for i in $Apps; do
+        app=(${i//;/ })
+        if [ "${app[3]}" == "${pkgToInstall//\"}" ]; then
+          installPackage ${app[1]} ${app[0]}
+          processAppTrtFct ${app[3]}
+        fi
+      done
+    done
+  fi
+  unset list
+  pressKey
+}
+
+#
+# create app shortcut
+# inputs : bin to exec, icon path, category, name, local/global, start w/ session
+#
+function createAppShortcut () {
+  typeset ret_code
+
+  shortcut='[Desktop Entry]\n'
+  shortcut+='Encoding=UTF-8\n'
+  shortcut+='Terminal=0\n'
+  shortcut+='Exec='$1'\n'
+  shortcut+='Icon='$2'\n'
+  shortcut+='Type=Application\n'
+  if [ "$6" == "start" ]; then
+    shortcut+='X-MATE-Autostart-enabled=true\n\n'
+  else
+    shortcut+='Categories='$3';\n'
+  fi
+  shortcut+='StartupNotify=true\n'
+  shortcut+='Name='$4'\n'
+  shortcut+='GenericName='$4'\n'
+  shortcut+='Comment='
+
+  if [ "$5" == "global" ]; then
+    smsg "creating shortcut for $4 "
+    echo -e $shortcut > /usr/share/applications/"$4".desktop
+    ret_code=$?
+    retCode $ret_code
+  else
+    mkdir -p /home/$myHomedir/.local/share/applications
+    smsg "creating shortcut for $4 "
+    echo -e $shortcut > /home/"$myHomedir"/.local/share/applications/"$4".desktop
+    ret_code=$?
+    retCode $ret_code
+  fi
+}
+
+#
+# show Yggdrasil logo
+#
+function dispLogo () {
+  printf "\n"
+  printf $BOLDJAUNE
+  printf "██╗   ██╗ ██████╗  ██████╗ ██████╗ ██████╗  █████╗ ███████╗██╗██╗     \n"
+  printf "╚██╗ ██╔╝██╔════╝ ██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔════╝██║██║     \n"
+  printf " ╚████╔╝ ██║  ███╗██║  ███╗██║  ██║██████╔╝███████║███████╗██║██║     \n"
+  printf "  ╚██╔╝  ██║   ██║██║   ██║██║  ██║██╔══██╗██╔══██║╚════██║██║██║     \n"
+  printf "   ██║   ╚██████╔╝╚██████╔╝██████╔╝██║  ██║██║  ██║███████║██║███████╗\n"
+  printf "   ╚═╝    ╚═════╝  ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚═╝╚══════╝\n"
+  printf "$BOLDROUGE                 Customize Linux Mint & Ubuntu derivatives made easier\n"
+  printf "$BOLDBLANC         ver "$version" - GPLv3 - Francois B. (Makotosan) - makotonoblog.be\n"
+	printf "\n"
+}
+
+#
+# show usage for headless mode
+#
+function usage () {
+  dispLogo
+  dispSysInfos
+  printf "\n"
+	printf $NORMAL
+	printf "Usage : yggdrasil [options]\n\n"
+  printf " "$BOLDVERT"-f"$NORMAL" : full install (see doc for more details)\n"
+  printf " "$BOLDVERT"-c"$NORMAL" : install gtk themes and icons\n"
+  printf " "$BOLDVERT"-u"$NORMAL" : update system (apt,snap,...)\n"
+	printf " "$BOLDVERT"-v"$NORMAL" : show verison number\n"
+  printf " "$BOLDVERT"-h"$NORMAL" : show help & informations\n"
+  printf "\n"
+}
+
+function dispSysInfos () {
+  # CPU Architecture
+  printf $BOLDVERT"Architecture : "$NORMAL
+  uname -m
+
+  # Current user homedir
+  printf $BOLDVERT"User (userdir) :"$NORMAL" $myHomedir\n"
+
+  # Linux Distro Name
+  printf $BOLDVERT"OS : "$NORMAL
+  lsb_release -d | awk -F':' '{print $2}' | awk -F'\t' '{print $2}'
+
+  # Kernel version
+  printf $BOLDVERT"Kernel : "$NORMAL
+  uname -r
+
+  # Desktop Name
+  printf $BOLDVERT"Desktop : "$NORMAL
+  case $XDG_CURRENT_DESKTOP in
+    "ENLIGHTENMENT")
+      printf "Enlightenment"
+      printf "\n"
+      ;;
+    "GNOME")
+      printf "Gnome"
+      printf "\n"
+      ;;
+    "KDE")
+      printf "KDE"
+      printf "\n"
+      ;;
+    "LXDE")
+      printf "LXDE"
+      printf "\n"
+      ;;
+    "MATE")
+      printf "Mate"
+      printf "\n"
+      ;;
+    "XFCE")
+      printf "XFCE"
+      printf "\n"
+      ;;
+    "X-Cinnamon")
+      printf "Cinnamon"
+      printf "\n"
+      ;;
+    "Unity")
+      printf "Unity"
+      printf "\n"
+      ;;
+  esac
+
+  # Screen Resolution
+  printf $BOLDVERT"Screen resolution : "$NORMAL
+  xdpyinfo | sed -n 's/.*dim.* \([0-9]*x[0-9]*\) .*/\1/pg' | tr '\n' ' '
+  printf "\n"
+
+  # Type of Shell
+  printf $BOLDVERT"Shell : "$NORMAL
+	shellType=$(ps -p $PPID -o cmd --no-heading)
+  shellType=${shellType/-}
+  shellType=${shellType//*\/}
+  printf $shellType"\n"
+}
\ No newline at end of file
diff --git a/deb/yggdrasil/opt/yggdrasil/install_functions.sh b/deb/yggdrasil/opt/yggdrasil/install_functions.sh
new file mode 100644
index 0000000..6b50e74
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/install_functions.sh
@@ -0,0 +1,927 @@
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#-----------------------------------------------------------------------------#
+# install functions                                                           #
+#-----------------------------------------------------------------------------#
+
+#
+# install Base Apps (headless)
+#
+function installBase () {
+  msg "Installing Base Apps"
+  installAppsFromList base
+}
+
+#
+# install Base Apps (Menu)
+#
+function installBaseMenu () {
+  installAppsFromListMenu base
+}
+
+#
+# install Office Apps (headless)
+#
+function installOffice () {
+  msg "Installing Office Apps"
+  installAppsFromList office
+}
+
+#
+# install Office Apps (Menu)
+#
+function installOfficeMenu () {
+  installAppsFromListMenu office
+}
+
+#
+# install Multimedia Apps (headless)
+#
+function installMultimedia () {
+  msg "Installing Multimedia Apps"
+  installAppsFromList multimedia
+}
+
+#
+# install Multimedia Apps (Menu)
+#
+function installMultimediaMenu () {
+  installAppsFromListMenu multimedia
+}
+
+#
+# install eBook Apps (headless)
+#
+function installEbook () {
+  msg "Installing eBook Apps"
+  installAppsFromList ebook
+}
+
+#
+# install eBook Apps (Menu)
+#
+function installEbookMenu () {
+  installAppsFromListMenu ebook
+}
+
+#
+# install Internet Apps (headless)
+#
+function installInternet () {
+  msg "Installing Internet Apps"
+  echo "opera-stable opera-stable/add-deb-source boolean false" | sudo debconf-set-selections
+  installAppsFromList internet
+}
+
+#
+# install Internet Apps (Menu)
+#
+function installInternetMenu () {
+  echo "opera-stable opera-stable/add-deb-source boolean false" | sudo debconf-set-selections
+  installAppsFromListMenu internet
+}
+
+#
+# Viber (headless)
+#
+function installViber () {
+  installPackageDpkg http://download.cdn.viber.com/cdn/desktop/Linux/viber.deb \
+                     viber.deb
+}
+
+#
+# Viber (Menu)
+#
+function installViberMenu () {
+  msg "Install Viber"
+  installPackageDpkg http://download.cdn.viber.com/cdn/desktop/Linux/viber.deb \
+                     viber.deb
+}
+
+#
+# Franz (headless)
+#
+function installFranz () {
+  installPackageDpkg https://github.com/meetfranz/franz/releases/download/v5.0.0-beta.17/franz_5.0.0-beta.17_amd64.deb \
+                     franz.deb
+}
+
+#
+# Franz (Menu)
+#
+function installFranzMenu () {
+  msg "Install Franz"
+  installPackageDpkg https://github.com/meetfranz/franz/releases/download/v5.0.0-beta.17/franz_5.0.0-beta.17_amd64.deb \
+                     franz.deb
+}
+
+#
+# install Misc Utilities Apps (headless)
+#
+function installMiscUtilities () {
+  msg "Installing utilities Apps"
+  installAppsFromList utilities
+}
+
+#
+# install Misc Utilities Apps (Menu)
+#
+function installMiscUtilitiesMenu () {
+  installAppsFromListMenu utilities
+}
+
+#
+# install Wine Build (headless)
+#
+function installWine () {
+  msg "Installing Wine Apps"
+  installAppsFromList wine
+}
+
+#
+# install Wine Build (Menu)
+#
+function installWineMenu () {
+  installAppsFromListMenu wine
+}
+
+#
+# install Game Apps (headless)
+#
+function installGames () {
+  msg "Installing Games apps and tools"
+  installAppsFromList games
+}
+
+#
+# install Game Apps (Menu)
+#
+function installGamesMenu () {
+  installAppsFromListMenu games
+}
+
+#
+# install Burning Apps (headless)
+#
+function installBurningTools () {
+  msg "Installing CD/DVD/BD Burning apps and tools"
+  installAppsFromListMenu burningtools
+}
+
+#
+# install Burning Apps (Menu)
+#
+function installBurningToolsMenu () {
+  installAppsFromListMenu burningtools
+}
+
+#
+# install Network Apps (headless)
+#
+function installNetTools () {
+  msg "Installing Network apps and tools"
+  installAppsFromList nettools
+}
+
+#
+# install Network Apps (Menu)
+#
+function installNetToolsMenu () {
+  installAppsFromListMenu nettools
+}
+
+#
+# install Caja Plugins (headless)
+#
+function installCajaPlugins () {
+  msg "Installing Caja extensions"
+  installAppsFromList cajaplugins
+}
+
+#
+# install Caja Plugins (Menu)
+#
+function installCajaPluginsMenu () {
+  installAppsFromListMenu cajaplugins
+}
+
+#
+# install Nautilus Apps + plugins (headless)
+#
+function installNautilusAndPlugins () {
+  msg "Installing Nautilus and extensions"
+  installAppsFromList nautilus
+}
+
+#
+# install Nautilus Apps + plugins (Menu)
+#
+function installNautilusAndPluginsMenu () {
+  installAppsFromListMenu nautilus
+}
+
+#
+# install Gimp plugins (headless)
+#
+function installGimpPlugins () {
+  msg "Installing Gimp extensions"
+  installAppsFromList gimp
+}
+
+#
+# install Gimp plugins (Menu)
+#
+function installGimpPluginsMenu () {
+  installAppsFromListMenu gimp
+}
+
+#
+# install RhythmBox plugins (headless)
+#
+function installRhythmBoxPlugins () {
+  msg "Installing RhythmBox extensions"
+  installAppsFromList rhythmbox
+}
+
+#
+# install RhythmBox plugins (Menu)
+#
+function installRhythmBoxPluginsMenu () {
+  installAppsFromListMenu rhythmbox
+}
+
+#
+# install Pidgin plugins (headless)
+#
+function installPidginPlugins () {
+  msg "Installing Pidgin extensions"
+  installAppsFromList pidgin
+}
+
+#
+# install Pidgin plugins (Menu)
+#
+function installPidginPluginsMenu () {
+  installAppsFromListMenu pidgin
+}
+
+#
+# install Nitrogen app (headless)
+#
+function installNitrogen () {
+  msg "Installing Nitrogren"
+  installAppsFromList nitrogen
+}
+
+#
+# install Nitrogen app (Menu)
+#
+function installNitrogenMenu () {
+  installAppsFromListMenu nitrogen
+}
+
+#
+# install Beta Apps (headless)
+#
+function installBeta () {
+  msg "Installing Beta Apps"
+  installAppsFromList beta
+}
+
+#
+# install Beta Apps (Menu)
+#
+function installBetaMenu () {
+  installAppsFromListMenu beta
+}
+
+#
+# install Nightly Apps (headless)
+#
+function installNightly () {
+  msg "Installing Nightly Apps"
+  installAppsFromList nightly
+}
+
+#
+# install Nightly Apps (Menu)
+#
+function installNightlyMenu () {
+  installAppsFromListMenu nightly
+}
+
+#
+# install GTK Themes (headless)
+#
+function installThemes () {
+  msg "Installing themes"
+  installAppsFromList gtkthemes
+}
+
+#
+# install GTK Themes (Menu)
+#
+function installThemesMenu () {
+  installAppsFromListMenu gtkthemes
+}
+
+#
+# install Icon Themes (headless)
+#
+function installIcons () {
+  msg "Installing icons"
+  installAppsFromList icons
+}
+
+#
+# install Icon Themes (Menu)
+#
+function installIconsMenu () {
+  installAppsFromListMenu icons
+}
+
+#
+# install Solaar App (headless)
+#
+function installSolaar () {
+  msg "Installing Solaar"
+  installAppsFromList solaar
+}
+
+#
+# install Solaar App (Menu)
+#
+function installSolaarMenu () {
+  installAppsFromListMenu solaar
+}
+
+#
+# install CardReader Apps (headless)
+#
+function installCardReader () {
+  msg "Installing CardReader and utils"
+  installAppsFromList cardreader
+}
+
+#
+# install CardReader Apps (Menu)
+#
+function installCardReaderMenu () {
+  installAppsFromListMenu cardreader
+}
+
+#
+# update AMD/Intel CPU Microcode
+#
+function updateMicrocode () {
+  oldMicrocode=`cat /proc/cpuinfo | grep -i --color microcode -m 1`
+  intel=`cat /proc/cpuinfo | grep -i Intel | wc -l`
+  amd=`cat /proc/cpuinfo | grep -i Amd | wc -l`
+  if [ "$intel" -gt "0" ]; then
+    installPackage apt intel-microcode
+  elif [ "$amd" -gt "0" ]; then
+    installPackage apt amd64-microcode
+  fi
+  newMicrocode=`cat /proc/cpuinfo | grep -i --color microcode -m 1`
+  printf "[INFO] Microcode updated from "$oldMicrocode" version to "$newMicrocode" version"
+  printf "\n"
+}
+
+#
+# fix some config issue with Intel Wireless 6320 cards
+#
+function fixWirelessIntel6320 () {
+  runCmd "sudo cp /etc/modprobe.d/iwlwifi.conf /etc/modprobe.d/iwlwifi.conf.bak" \
+         "backing up config file"
+  runCmd "echo options iwlwifi bt_coex_active=0 swcrypto=1 11n_disable=8 | sudo tee /etc/modprobe.d/iwlwifi.conf" \
+         "applying new config"
+  printf "[INFO] reboot required !!!"
+  printf "\n"
+}
+
+#
+# install Webcam Apps (headless)
+#
+function installWebcam () {
+  msg "Installing Apps needed for Webcams"
+  installAppsFromList webcam
+}
+
+#
+# install Webcam Apps (Menu)
+#
+function installWebcamMenu () {
+  installAppsFromListMenu webcam
+}
+
+#
+# install Nvidia Drivers (headless)
+#
+function installNvidia370 () {
+  msg "Installing Nvidia 370 driver"
+  installAppsFromList nvidia-370
+}
+
+#
+# install Nvidia Drivers (Menu)
+#
+function installNvidia370Menu () {
+  installAppsFromListMenu nvidia-370
+}
+
+#
+# install Nvidia Drivers (headless)
+#
+function installNvidia375 () {
+  msg "Installing Nvidia 375 driver"
+  installAppsFromList nvidia-375
+}
+
+#
+# install Nvidia Drivers (Menu)
+#
+function installNvidia375Menu () {
+  installAppsFromListMenu nvidia-375
+}
+
+#
+# install Nvidia Drivers (headless)
+#
+function installNvidia378 () {
+  msg "Installing Nvidia 378 driver"
+  installAppsFromList nvidia-378
+}
+
+#
+# install Nvidia Drivers (Menu)
+#
+function installNvidia378Menu () {
+  installAppsFromListMenu nvidia-378
+}
+
+#
+# install Nvidia Drivers (headless)
+#
+function installNvidia381 () {
+  msg "Installing Nvidia 381 driver"
+  installAppsFromList nvidia-381
+}
+
+#
+# install Nvidia Drivers (Menu)
+#
+function installNvidia381Menu () {
+  installAppsFromListMenu nvidia-381
+}
+
+#
+# install Nvidia Drivers (headless)
+#
+function installNvidia384 () {
+  msg "Installing Nvidia 384 driver"
+  installAppsFromList nvidia-384
+}
+
+#
+# install Nvidia Drivers (Menu)
+#
+function installNvidia384Menu () {
+  installAppsFromListMenu nvidia-384
+}
+
+#
+# install TLP App (headless)
+#
+function installTLP () {
+  msg "Installing TLP"
+  installAppsFromList tlp
+}
+
+#
+# install TLP App (Menu)
+#
+function installTLPMenu () {
+  installAppsFromListMenu tlp
+}
+
+#TODO:
+function installKeyIDuDev () {
+  msg "Adding UDEV rules"
+  sudo sh -c "echo '# this udev file should be used with udev 188 and newer\n\
+ACTION!=\"add|change\", GOTO=\"u2f_end\"\n\
+\n\
+# Key-ID FIDO U2F\n\
+KERNEL==\"hidraw*\", SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"096e\", ATTRS{idProduct}==\"0850|0880\", TAG+=\"uaccess\"\n\
+\n\
+LABEL=\"u2f_end\"' > /etc/udev/rules.d/70-u2f.rules"
+
+  runCmd "sudo service udev restart" \
+         "restarting UDEV service"
+}
+
+#
+# install Dev Apps (headless)
+#
+function installDevApps () {
+  msg "Installing base Dev apps and tools"
+  installAppsFromList dev
+}
+
+#
+# install Dev Apps (Menu)
+#
+function installDevAppsMenu () {
+  installAppsFromListMenu dev
+}
+
+
+#
+# install Javascript env (headless)
+#
+function installJavascript () {
+  msg "Installing Javascript env"
+  installAppsFromList javascript
+}
+
+#
+# install Javascript env (Menu)
+#
+function installJavascriptMenu () {
+  installAppsFromListMenu javascript
+}
+
+#
+# install JAVA 9 (headless)
+#
+function installJava9 () {
+  msg "Installing Java9 + set as Default"
+  installAppsFromList java9
+}
+
+#
+# install JAVA 9 (Menu)
+#
+function installJava9Menu () {
+  installAppsFromListMenu java9
+}
+
+#
+# install Mongo DB 3 CE (headless)
+#
+function installMongo3CE () {
+  msg "Installing Mongo DB 3 CE Apps"
+  installAppsFromList mongodb-org
+}
+
+#
+# install Mongo DB 3 CE (Menu)
+#
+function installMongo3CEMenu () {
+  installAppsFromListMenu mongodb-org
+}
+
+#
+# install Python Apps (headless)
+#
+function installPython () {
+  msg "Installing Python apps and tools"
+  installAppsFromList python
+}
+
+#
+# install Python Apps (Menu)
+#
+function installPythonMenu () {
+  installAppsFromListMenu python
+}
+
+#
+# install PHP Apps (headless)
+#
+function installPHP () {
+  msg "Installing PHP apps and tools"
+  installAppsFromList php
+}
+
+#
+# install PHP Apps (Menu)
+#
+function installPHPMenu () {
+  installAppsFromListMenu php
+}
+
+#
+# install QT Apps/tools (headless)
+#
+function installQT () {
+  msg "Installing QT apps and tools"
+  installAppsFromList qt
+}
+
+#
+# install QT Apps/tools (Menu)
+#
+function installQTMenu () {
+  installAppsFromListMenu qt
+}
+
+#
+# install LUA Apps (headless)
+#
+function installLUA () {
+  msg "Installing LUA apps and tools"
+  installAppsFromList lua
+}
+
+#
+# install LUA Apps (Menu)
+#
+function installLUAMenu () {
+  installAppsFromListMenu lua
+}
+
+#
+# install Ruby Apps (headless)
+#
+function installRuby () {
+  msg "Installing Ruby apps and tools"
+  installAppsFromList ruby
+}
+
+#
+# install Ruby Apps (Menu)
+#
+function installRubyMenu () {
+  installAppsFromListMenu ruby
+}
+
+#TODO:
+function installAndroidEnv () {
+  msg="Installing Android environment"
+
+  runCmd "touch /home/$myHomedir/.bashrc" \
+         "creating .bashrc file if necessary"
+  sh -c "echo '\n\nexport PATH=${PATH}:/home/'$myHomedir'/Android/Sdk/tools:/home/'$myHomedir'/Android/Sdk/platform-tools' >> /home/$myHomedir/.bashrc"
+
+  msg "Adding UDEV rules"
+  sudo sh -c "echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0502\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Acer\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0b05\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Asus\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"413c\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Dell\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0489\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Foxconn\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04c5\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Fujitsu\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04c5\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Fujitsu-Toshiba\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"091e\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Garmin-Asus\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"18d1\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Google-Nexus\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"201E\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Haier\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"109b\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Hisense\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0bb4\", MODE=\"0666\", OWNER=\""$myHomedir"\" # HTC\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"12d1\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Huawei\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"8087\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Intel\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"24e3\", MODE=\"0666\", OWNER=\""$myHomedir"\" # K-Touch\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2116\", MODE=\"0666\", OWNER=\""$myHomedir"\" # KT Tech\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0482\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Kyocera\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"17ef\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Lenovo\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"1004\", MODE=\"0666\", OWNER=\""$myHomedir"\" # LG\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"22b8\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Motorola\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0e8d\", MODE=\"0666\", OWNER=\""$myHomedir"\" # MTK\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0409\", MODE=\"0666\", OWNER=\""$myHomedir"\" # NEC\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2080\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Nook\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0955\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Nvidia\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2257\", MODE=\"0666\", OWNER=\""$myHomedir"\" # OTGV\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"10a9\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Pantech\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"1d4d\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Pegatron\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0471\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Philips\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04da\", MODE=\"0666\", OWNER=\""$myHomedir"\" # PMC-Sierra\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"05c6\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Qualcomm\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"1f53\", MODE=\"0666\", OWNER=\""$myHomedir"\" # SK Telesys\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04e8\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Samsung\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04dd\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sharp\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"054c\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sony\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0fce\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sony Ericsson\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0fce\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Sony Mobile Communications\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2340\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Teleepoch\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"0930\", MODE=\"0666\", OWNER=\""$myHomedir"\" # Toshiba\n\
+SUBSYSTEM==\"usb\", ATTR{idVendor}==\"19d2\", MODE=\"0666\", OWNER=\""$myHomedir"\" # ZTE' > /etc/udev/rules.d/99-android.rules"
+
+  runCmd "sudo service udev restart" \
+         "restarting UDEV service"
+
+  createAppShortcut "/home/"$myHomedir"/tools/Android/Sdk/tools/android" \
+                    "/home/"$myHomedir"/.icons/android.png" \
+                    "GNOME;GTK;Development;IDE" \
+                    "Android SDK" \
+                    "local" \
+  update-menus
+}
+
+#
+# install Atom App (headless)
+#
+function installAtom () {
+  msg "Installing Atom and extensions"
+  installAppsFromList atom
+}
+
+#
+# install Atom App (menu)
+#
+function installAtomMenu () {
+  msg "Installing Atom and extensions"
+  installAppsFromListMenu atom
+}
+
+#
+# install Anjuta Apps (headless)
+#
+function installAnjuta () {
+  msg "Installing Anjuta"
+  installAppsFromList anjuta
+}
+
+#
+# install Anjuta Apps (Menu)
+#
+function installAnjutaMenu () {
+  installAppsFromListMenu anjuta
+}
+
+#
+# install Brackets Apps (headless)
+#
+function installBrackets () {
+  msg "Installing Brackets"
+  installAppsFromList brackets
+}
+
+#
+# install Brackets Apps (Menu)
+#
+function installBracketsMenu () {
+  installAppsFromListMenu brackets
+}
+
+#
+# install CodeBlocks Apps (headless)
+#
+function installCodeBlocks () {
+  msg "Installing CodeBlocks"
+  installAppsFromList codeblocks
+}
+
+#
+# install CodeBlocks Apps (Menu)
+#
+function installCodeBlocksMenu () {
+  installAppsFromListMenu codeblocks
+}
+
+#
+# install Geany Apps (headless)
+#
+function installGeany () {
+  msg "Installing Geany and extensions"
+  installAppsFromList geany
+}
+
+#
+# install Geany Apps (Menu)
+#
+function installGeanyMenu () {
+  installAppsFromListMenu geany
+}
+
+#TODO:
+function installEclipse () {
+  if which umake >/dev/null; then
+    msg "Umake installing : Eclipse"
+    sudo umake ide eclipse
+  fi
+}
+
+#
+# install IDEA Apps (headless)
+#
+function installIdea () {
+  msg "Installing Intellij-IDEA"
+  installAppsFromList idea
+}
+
+#
+# install IDEA Apps (Menu)
+#
+function installIdeaMenu () {
+  installAppsFromListMenu idea
+}
+
+#
+# install Pycharm Apps (headless)
+#
+function installPyCharm () {
+  msg "Installing PyCharm"
+  installAppsFromList pycharm
+}
+
+#
+# install Pycharm Apps (Menu)
+#
+function installPyCharmMenu () {
+  installAppsFromListMenu pycharm
+}
+
+#
+# install Visual Studio Code Apps (headless)
+#
+function installVisualStudioCode () {
+  msg "Installing Visual Studio Code"
+  installAppsFromList code
+}
+
+#
+# install Visual Studio Code Apps (Menu)
+#
+function installVisualStudioCodeMenu () {
+  installAppsFromListMenu code
+}
+
+#
+# install Android-Studio Apps (headless)
+#
+function installAndroidStudio () {
+  msg "Installing Android-Studio"
+  installAppsFromList androidstudio
+}
+
+#
+# install Android-Studio Apps (Menu)
+#
+function installAndroidStudioMenu () {
+  installAppsFromListMenu androidstudio
+}
+
+#
+# install SublimeText Apps (headless)
+#
+function installSublimeText() {
+  msg "Installing Sublime-Text"
+  installAppsFromList sublime-text
+}
+
+#
+# install SublimeText Apps (Menu)
+#
+function installSublimeTextMenu() {
+  installAppsFromListMenu sublime-text
+}
+
+#
+# install CAD Apps (headless)
+#
+function installCAD () {
+  msg "Installing CAD apps and tools"
+  installAppsFromList cad
+}
+
+#
+# install CAD Apps (Menu)
+#
+function installCADMenu () {
+  installAppsFromListMenu cad
+}
+
+#
+# install Teamviewer 13 (headless)
+#
+function installTeamViewer13 () {
+  msg "Install Teamviewer 13"
+  installPackageDpkg https://download.teamviewer.com/download/linux/teamviewer_amd64.deb \
+                     teamviewer13.deb
+}
+
+#
+# install Teamviewer 13 (Menu)
+#
+function installTeamViewer13Menu () {
+  installPackageDpkg https://download.teamviewer.com/download/linux/teamviewer_amd64.deb \
+                     teamviewer13.deb
+}
+
+#
+# install/enable Unboud (headless)
+#
+function enableUnbound () {
+  msg "Installing Unbound"
+  installAppsFromList unbound
+}
+
+#
+# install/enable Unboud (Menu)
+#
+function enableUnboundMenu () {
+  installAppsFromListMenu unbound
+}
\ No newline at end of file
diff --git a/deb/yggdrasil/opt/yggdrasil/menus_functions.sh b/deb/yggdrasil/opt/yggdrasil/menus_functions.sh
new file mode 100644
index 0000000..ce0d0fa
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/menus_functions.sh
@@ -0,0 +1,458 @@
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#-----------------------------------------------------------------------------#
+# menus functions                                                             #
+#-----------------------------------------------------------------------------#
+
+#
+# show about dialog box
+#
+function showAboutBoxMenu () {
+whiptail \
+--title "About" \
+--msgbox "\n
+ Author : Francois B. (Makotosan)
+  Email : shakasan@sirenacorp.be
+Website : https://makotonoblog.be/
+ Github : https://github.com/shakasan/yggdrasil_ng
+Licence : GPLv3
+Version : $version\n
+At the beginning, this script has been written to makes my life easier when I have to (re)install my personal computers ;-)
+Advices and remarks are welcome ^^" \
+20 80
+}
+
+#
+# show reboot menu
+#
+function showRebootBoxMenu () {
+  if (whiptail \
+      --title "Yggdrasil $version - WARNING - ReBoot" \
+      --yesno "Are you sure to reboot this computer ?" \
+      7 42) then
+	  sudo reboot
+  fi
+}
+
+#
+# show menu to config system
+#
+function showConfigMenu () {
+  while true; do
+
+    configMenuOptions=$(whiptail \
+    --title "Yggdrasil $version - System Config" \
+    --menu "System Config" \
+    25 80 16 \
+    "Ufw" "Enable Firewall (ufw)" \
+    "NumLockX" "NumLock Enabled at boot time" \
+    "TmpRAM" "/tmp stored in RAM" \
+    "screenfetch" "screenfetch added to .bashrc" \
+    "historyTS" "TimeStamp enabled in Shell History" \
+    "unattendedUpgrades" "Enable automatic security updates" \
+    "Back" "Back"  3>&1 1>&2 2>&3)
+
+    case $configMenuOptions in
+      "Ufw")
+        clear
+        enableUFW
+        pressKey
+        ;;
+      "NumLockX")
+        clear
+        enableNumLockX
+        pressKey
+        ;;
+      "TmpRAM")
+        clear
+        enableTmpRAM
+        pressKey
+        ;;
+      "screenfetch")
+        clear
+        addScreenfetchBashrc
+        pressKey
+        ;;
+      "historyTS")
+        clear
+        enableHistoryTS
+        pressKey
+        ;;
+      "unattendedUpgrades")
+        clear
+        installUnattendedUpgrades
+        pressKey
+        ;;
+      "Back")
+        break
+        ;;
+    esac
+
+  done
+}
+
+#
+# show menu to install system tools
+#
+function showSysToolsMenu () {
+  while true; do
+
+    sysToolsMenuOptions=$(whiptail \
+    --title "Yggdrasil $version - System Tools" \
+    --menu "System tools to diagnose and optimize" \
+    25 80 16 \
+    "inxi" "System informations" \
+    "speedtest-cli" "Bandwidth test" \
+    "packetloss" "Packetloss test (ping)" \
+    "OptimizeFirefox" "Firefox SQLite databases optimization" \
+    "Autoremove" "Remove useless Deb packages" \
+    "CleanOldKernels" "Removing old kernels (keep 2 last kernels)" \
+    "SoundCardsDetection" "Sound Cards Detection" \
+    "Back" "Back"  3>&1 1>&2 2>&3)
+
+    case $sysToolsMenuOptions in
+      "inxi")
+        clear; toolInxi; pressKey
+        ;;
+      "speedtest-cli")
+        clear; toolSpeedtestCli; pressKey
+        ;;
+      "packetloss")
+        clear; toolPacketLoss; pressKey
+        ;;
+      "OptimizeFirefox")
+        clear; toolOptimizeFirefox; pressKey
+        ;;
+      "Autoremove")
+        clear; toolAutoremove; pressKey
+        ;;
+      "CleanOldKernels")
+        clear; toolClearOldKernels; pressKey
+        ;;
+      "SoundCardsDetection")
+        clear; toolSoundCardsDetection; pressKey
+        ;;
+      "Back")
+        break
+        ;;
+    esac
+
+  done
+}
+
+#
+# show menu to install themes/icons
+#
+function showThemesInstallMenu () {
+  while true; do
+
+    themesInstallMenuOptions=$(whiptail \
+    --title "Yggdrasil $version - Themes/Icons Install" \
+    --menu "Install themes/icons from different submenus" \
+    25 80 16 \
+    "themes" "GTK themes" \
+    "icons" "Icons" \
+    "Back" "Back"  3>&1 1>&2 2>&3)
+
+    case $themesInstallMenuOptions in
+      "themes")
+        installThemesMenu
+        ;;
+      "icons")
+        installIconsMenu
+        ;;
+      "Back")
+        break
+        ;;
+    esac
+
+  done
+}
+
+#
+# show menu to install dev apps
+#
+function showDevInstallMenu () {
+  while true; do
+
+    devInstallMenuOptions=$(whiptail \
+    --title "Yggdrasil $version - Dev Install" \
+    --menu "Install Dev apps from different submenus" \
+    25 80 16 \
+    "devbase" "dev apps and tools" \
+    "java9" "Java 9 dev env" \
+    "javascript" "JavaScript dev env" \
+    "nodelts" "NodeJS 8.x LTS" \
+    "mongodb3ce" "MongoDB 3 CE" \
+    "php" "PHP dev env" \
+    "lua" "Lua dev env" \
+    "ruby" "Ruby dev env" \
+    "qt" "QT dev env" \
+    "python" "Python dev env" \
+    "androidenv" "Set Android env" \
+    "atom" "Atom" \
+    "anjuta" "Anjuta" \
+    "brackets" "Brackets" \
+    "codeblocks" "CodeBlocks" \
+    "geany" "Geany" \
+    "eclipse" "Eclipse" \
+    "idea" "Idea" \
+    "pycharm" "PyCharm" \
+    "vsc" "Visual Studio Code" \
+    "androidstudio" "Android Studio" \
+    "sublimetext" "Sublime Text" \
+    "cad" "CAD tools" \
+    "teamviewer13" "Teamviewer 13" \
+    "Back" "Back"  3>&1 1>&2 2>&3)
+
+    case $devInstallMenuOptions in
+      "devbase")
+        installDevAppsMenu
+        ;;
+      "java9")
+        installJava9
+        ;;
+      "javascript")
+        installJavascriptMenu
+        ;;
+      "mongodb3ce")
+        installMongo3CEMenu
+        ;;
+      "php")
+        installPHPMenu
+        ;;
+      "lua")
+        installLUAMenu
+        ;;
+      "ruby")
+        installRubyMenu
+        ;;
+      "qt")
+        installQTMenu
+        ;;
+      "python")
+        installPythonMenu
+        ;;
+      "androidenv")
+        #TODO:
+        ;;
+      "atom")
+        installAtomMenu
+        ;;
+      "anjuta")
+        installAnjutaMenu
+        ;;
+      "brackets")
+        installBracketsMenu
+        ;;
+      "codeblocks")
+        installCodeBlocksMenu
+        ;;
+      "geany")
+        installGeanyMenu
+        ;;
+      "eclipse")
+        #TODO:
+        ;;
+      "idea")
+        installIdeaMenu
+        ;;
+      "pycharm")
+        installPyCharmMenu
+        ;;
+      "vsc")
+        installVisualStudioCodeMenu
+        ;;
+      "androidstudio")
+        installAndroidStudioMenu
+        ;;
+      "sublimetext")
+        installSublimeTextMenu
+        ;;
+      "cad")
+        installCADMenu
+        ;;
+      "teamviewer13")
+        installTeamViewer13Menu
+        ;;
+      "Back")
+        break
+        ;;
+    esac
+
+  done
+}
+
+#
+# show menu to install apps from different categories
+#
+function showAppInstallMenu () {
+  while true; do
+
+    appsInstallMenuOptions=$(whiptail \
+    --title "Yggdrasil $version - Apps Install" \
+    --menu "Install apps from different submenus" \
+    25 80 16 \
+    "base" "Base Apps" \
+    "office" "Office Apps" \
+    "multimedia" "Multimedia Apps" \
+    "internet" "Internet Apps" \
+    "utilities" "Misc Utilities" \
+    "games" "Games & tools" \
+    "burningtools" "Disc Burning and tools" \
+    "nettools" "Network tools" \
+    "cajaplugins" "Caja Plugins" \
+    "nautilus" "Nautilus and plugins" \
+    "gimp" "Gimp plugins" \
+    "rhythmbox" "RhythmBox plugins" \
+    "pidgin" "Pidgin plugins" \
+    "nitrogen" "Nitrogen WP Manager" \
+    "wine" "Wine Builds" \
+    "viber" "Viber IM desktop app" \
+    "Back" "Back"  3>&1 1>&2 2>&3)
+
+    case $appsInstallMenuOptions in
+      "base")
+        installBaseMenu
+        ;;
+      "office")
+        installOfficeMenu
+        ;;
+      "multimedia")
+        installMultimediaMenu
+        ;;
+      "internet")
+        installInternetMenu
+        ;;
+      "utilities")
+        installMiscUtilitiesMenu
+        ;;
+      "games")
+        installGamesMenu
+        ;;
+      "burningtools")
+        installBurningToolsMenu
+        ;;
+      "nettools")
+        installNetToolsMenu
+        ;;
+      "cajaplugins")
+        installCajaPluginsMenu
+        ;;
+      "nautilus")
+        installNautilusAndPluginsMenu
+        ;;
+      "gimp")
+        installGimpPluginsMenu
+        ;;
+      "rhythmbox")
+        installRhythmBoxPluginsMenu
+        ;;
+      "pidgin")
+        installPidginPluginsMenu
+        ;;
+      "nitrogen")
+        installNitrogenMenu
+        ;;
+      "wine")
+        installWineMenu
+        ;;
+      "viber")
+        installViberMenu
+        ;;
+      "Back")
+        break
+        ;;
+    esac
+
+  done
+}
+
+#
+# show menu to install beta apps from different categories
+#
+function showAppBetaInstallMenu () {
+  installBetaMenu
+}
+
+#
+# show menu to install nightly apps from different categories
+#
+function showAppNightlyInstallMenu () {
+  installNightlyMenu
+}
+
+#
+# show menu about install/config hardware
+#
+function showHardwareMenu () {
+  while true; do
+
+    hardwareMenuOptions=$(whiptail \
+    --title "Yggdrasil $version - System Tools" \
+    --menu "System tools to diagnose and optimize" \
+    25 80 16 \
+    "cardreader" "Apps/tools needed for cardreaders" \
+    "solaar" "Solaar for Logitech Unifying devices" \
+    "webcam" "Install webcam neede apps" \
+    "microcode" "Update Intel/AMD CPU microcode" \
+    "nvidia370" "Install Nvidia 370 graphic drivers" \
+    "nvidia375" "Install Nvidia 375 graphic drivers" \
+    "nvidia378" "Install Nvidia 378 graphic drivers" \
+    "nvidia381" "Install Nvidia 381 graphic drivers" \
+    "nvidia384" "Install Nvidia 384 graphic drivers" \
+    "tlp" "Install/Enable TLP for better power management " \
+    "keyid" "Add udev rules for Key-ID FIDO U2F usb key" \
+    "WI6320" "Fix Intel Wireless 6320 card config problem" \
+    "Back" "Back"  3>&1 1>&2 2>&3)
+
+    case $hardwareMenuOptions in
+      "cardreader")
+        installCardReaderMenu
+        ;;
+      "solaar")
+        installAppsFromListMenu
+        ;;
+      "webcam")
+        installWebcamMenu
+        ;;
+      "microcode")
+        updateMicrocode
+        ;;
+      "nvidia370")
+        installNvidia370Menu
+        ;;
+      "nvidia375")
+        installNvidia375Menu
+        ;;
+      "nvidia378")
+        installNvidia378Menu
+        ;;
+      "nvidia381")
+        installNvidia381Menu
+        ;;
+      "nvidia384")
+        installNvidia384Menu
+        ;;
+      "tlp")
+        installTLPMenu
+        ;;
+      "keyid")
+        installKeyIDuDev
+        ;;
+      "WI6320")
+        fixWirelessIntel6320
+        ;;
+      "Back")
+        break
+        ;;
+    esac
+
+  done
+}
\ No newline at end of file
diff --git a/deb/yggdrasil/opt/yggdrasil/notify.mp3 b/deb/yggdrasil/opt/yggdrasil/notify.mp3
new file mode 100644
index 0000000..dba832a
Binary files /dev/null and b/deb/yggdrasil/opt/yggdrasil/notify.mp3 differ
diff --git a/deb/yggdrasil/opt/yggdrasil/repo_functions.sh b/deb/yggdrasil/opt/yggdrasil/repo_functions.sh
new file mode 100644
index 0000000..4022c3c
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/repo_functions.sh
@@ -0,0 +1,857 @@
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#-----------------------------------------------------------------------------#
+# list of apps with required package manager and category                     #
+#-----------------------------------------------------------------------------#
+
+#
+# List of packages available
+# fields : package name, package manager, category, unique ID for external functions
+#
+Apps="cifs-utils;apt;base;cifs-utils
+xterm;apt;base;xterm
+curl;apt;base;curl
+mc;apt;base;mc
+bmon;apt;base;bmon
+htop;apt;base;htop
+screen;apt;base;screen
+dconf-cli;apt;base;dconf
+dconf-editor;apt;base;dconf-editor
+lnav;apt;base;lnav
+exfat-fuse;apt;base;exfat-fuse
+exfat-utils;apt;base;exfat-utils
+iftop;apt;base;iftop
+iptraf;apt;base;iptraf
+mpg123;apt;base;mpg123
+debconf-utils;apt;base;debconf-utils
+idle3-tools;apt;base;idle3-tools
+snapd;apt;base;snapd
+sysstat;apt;base;sysstat
+spotify;snap;multimedia;spotify
+slowmovideo;apt;multimedia;slowmovideo
+sayonara;apt;multimedia;sayonara
+qmmp;apt;multimedia;qmmp
+qmmp-plugin-projectm;apt;multimedia;qmmp-plugin-projectm
+shotcut;apt;multimedia;shotcut
+audacious;apt;multimedia;audacious
+dia;apt;multimedia;dia
+mpv;apt;multimedia;mpv
+picard;apt;multimedia;picard
+inkscape;apt;multimedia;inkscape
+aegisub;apt;multimedia;aegisub
+aegisub-l10n;apt;multimedia;aegisub-l10n
+mypaint;apt;multimedia;mypaint
+mypaint-data-extras;apt;multimedia;mypaint-data-extras
+audacity;apt;multimedia;audacity
+blender;apt;multimedia;blender
+kodi;apt;multimedia;kodi
+digikam;apt;multimedia;digikam
+synfigstudio;apt;multimedia;synfigstudio
+mkvtoolnix-gui;apt;multimedia;mkvtoolnix-gui
+rawtherapee;apt;multimedia;rawtherapee
+hugin;apt;multimedia;hugin
+xnviewmp;apt;multimedia;xnviewmp
+asunder;apt;multimedia;asunder
+milkytracker;apt;multimedia;milkytracker
+pitivi;apt;multimedia;pitivi
+openshot;apt;multimedia;openshot
+smplayer;apt;multimedia;smplayer
+smplayer-themes;apt;multimedia;smplayer-themes
+smplayer-l10n;apt;multimedia;smplayer-l10n
+selene;apt;multimedia;selene
+gnome-mplayer;apt;multimedia;gnome-mplayer
+handbrake;apt;multimedia;handbrake
+avidemux2.6-qt;apt;multimedia;avidemux2.6-qt
+avidemux2.6-plugins-qt;apt;multimedia;avidemux2.6-plugins-qt
+mjpegtools;apt;multimedia;mjpegtools
+twolame;apt;multimedia;twolame
+lame;apt;multimedia;lame
+banshee;apt;multimedia;banshee
+banshee-extension-soundmenu;apt;multimedia;banshee-extension-soundmenu
+gpicview;apt;multimedia;gpicview
+vlc;apt;multimedia;vlc
+shotwell;apt;multimedia;shotwell
+darktable;apt;multimedia;darktable
+ffmpeg;apt;multimedia;ffmpeg
+flacon;apt;multimedia;flacon
+scribus;apt;multimedia;scribus
+gnome-font-viewer;apt;multimedia;gnome-font-viewer
+moc;apt;multimedia;moc
+webp;apt;multimedia;webp
+simplescreenrecorder;apt;multimedia;simplescreenrecorder
+simplescreenrecorder-lib;apt;multimedia;simplescreenrecorder-lib
+simplescreenrecorder-lib:i386;apt;multimedia;simplescreenrecorder-lib:i386
+cuetools;apt;multimedia;cuetools
+shntool;apt;multimedia;shntool
+flac;apt;multimedia;flac
+entangle;apt;multimedia;entangle
+krita;apt;multimedia;krita
+soundconverter;apt;multimedia;soundconverter
+gimp;apt;multimedia;gimp
+vidcutter;apt;multimedia;vidcutter
+green-recorder;apt;multimedia;green-recorder
+radiotray;apt;multimedia;radiotray
+quodlibet;apt;multimedia;quodlibet
+python-cddb;apt;multimedia;python-cddb
+python-musicbrainz2;apt;multimedia;python-musicbrainz2
+owncloud-client;apt;internet;owncloud-client
+syncthing-gtk;apt;internet;syncthing-gtk
+syncthing;apt;internet;syncthing
+insync;apt;internet;insync
+discord;snap;internet;discord
+quiterss;apt;internet;quiterss
+frogr;apt;internet;frogr
+opera-stable;apt;internet;opera-stable
+google-chrome-stable;apt;internet;google-chrome-stable
+xchat-gnome;apt;internet;xchat-gnome
+xchat-gnome-indicator;apt;internet;xchat-gnome-indicator
+chromium-browser;apt;internet;chromium-browser
+chromium-browser-l10n;apt;internet;chromium-browser-l10n
+dropbox;apt;internet;dropbox
+qupzilla;apt;internet;qupzilla
+filezilla;apt;internet;filezilla
+hexchat;apt;internet;hexchat
+mumble;apt;internet;mumble
+imagedownloader;apt;internet;imagedownloader
+california;apt;internet;california
+midori;apt;internet;midori
+geary;apt;internet;geary
+corebird;apt;internet;corebird
+telegram;apt;internet;telegram
+skypeforlinux;apt;internet;skypeforlinux
+nextcloud-client;apt;internet;nextcloud-client
+nextcloud-client-caja;apt;internet;nextcloud-client-caja
+deluge-gtk;apt;internet;deluge-gtk
+deluge-torrent;apt;internet;deluge-torrent
+vivaldi-stable;apt;internet;vivaldi-stable
+qtqr;apt;utilities;qtqr
+cpu-g;apt;utilities;cpu-g
+screenfetch;apt;utilities;screenfetch
+xcalib;apt;utilities;xcalib
+conky-manager;apt;utilities;conky-manager
+conky-all;apt;utilities;conky-all
+plank;apt;utilities;plank
+indicator-sound-switcher;apt;utilities;indicator-sound-switcher
+y-ppa-manager;apt;utilities;y-ppa-manager
+synapse;apt;utilities;synapse
+acetoneiso;apt;utilities;acetoneiso
+guake;apt;utilities;guake
+tilda;apt;utilities;tilda
+psensor;apt;utilities;psensor
+kazam;apt;utilities;kazam
+bleachbit;apt;utilities;bleachbit
+gparted;apt;utilities;gparted
+gsmartcontrol;apt;utilities;gsmartcontrol
+terminator;apt;utilities;terminator
+aptik;apt;utilities;aptik
+gufw;apt;utilities;gufw
+numlockx;apt;utilities;numlockx
+grub-customizer;apt;utilities;grub-customizer
+chmsee;apt;utilities;chmsee
+unetbootin;apt;utilities;unebootin
+zim;apt;utilities;zim
+diodon;apt;utilities;diodon
+pyrenamer;apt;utilities;pyrenamer
+qt5ct;apt;utilities;qt5ct
+qt4-qtconfig;apt;utilities;qt4-qtconfig
+byobu;apt;utilities;byobu
+mupdf;apt;utilities;mupdf
+mupdf-tools;apt;utilities;mupdf-tools
+ukuu;apt;utilities;ukuu
+fcrackzip;apt;utilities;fcrackzip
+rarcrack;apt;utilities;rarcrack
+pdfcrack;apt;utilities;pdfcrack
+figlet;apt;utilities;figlet
+alltray;apt;utilities;alltray
+cheat;pip;utilities;cheat
+mate-sensors-applet-nvidia;apt;utilities;mate-sensors-applets-nvidia
+woeusb;apt;utilities;woeusb
+screenkey;apt;utilities;screenkey
+tmsu;apt;utilities;tmsu
+etcher-electron;apt;utilities;etcher-electron
+pdfgrep;apt;utilities;pdfgrep
+coinmon;npm;utilities;coinmon
+tldr;pip;utilities;tldr
+gyazo;apt;utilities;gyazo
+python3-dev;apt;python;python3-dev
+python3-pip;apt;python;python3-pip
+python3-pyqt5;apt;python;python3-pyqt5
+pyqt5-dev-tools;apt;python;pyqt5-dev-tools
+pip;pip;python;setuptools
+setuptools;pip;python;setuptools
+PyOpenGL;pip;python;PyOpenGL
+tweepy;pip;python;tweepy
+weppy;pip;python;weppy
+py-term;pip;python;py-term
+steam;apt;games;steam
+jstest-gtk;apt;games;jstest-gtk
+brasero;apt;burningtools;brasero
+k3b;apt;burningtools;k3b
+k3b-extrathemes;apt;burningtools;k3b-extrathemes
+xfburn;apt;burningtools;xfburn
+whois;apt;nettools;whois
+iptraf;apt;nettools;iptraf
+iperf;apt;nettools;iperf
+wireshark;apt;nettools;wireshark
+tshark;apt;nettools;tshark
+zenmap;apt;nettools;zenmap
+dsniff;apt;nettools;dsniff
+aircrack-ng;apt;nettools;aricrack-ng
+SpoofMAC;pip;nettools;SpoofMAC
+speedtest-cli;pip;nettools;speedtest-cli
+whatportis;pip;nettools;whatportis
+droopescan;pip;nettools;droopescan
+nethogs;apt;nettools;nethogs
+caja-share;apt;cajaplugins;caja-share
+caja-wallpaper;apt;cajaplugins;caja-wallpaper
+caja-sendto;apt;cajaplugins;caka-sendto
+caja-image-converter;apt;cajaplugins;caja-image-converter
+insync-caja;apt;cajaplugins;insync-caja
+nautilus;apt;nautilus;nautilus
+file-roller;apt;nautilus;file-roller
+nautilus-emblems;apt;nautilus;nautilus-emblems
+nautilus-image-manipulator;apt;nautilus;nautilus-image-manipulator
+nautilus-image-converter;apt;nautilus;nautilus-image-converter
+nautilus-compare;apt;nautilus;nautilus-compare
+nautilus-actions;apt;nautilus;nautilus-actions
+nautilus-sendto;apt;nautilus;nautilus-sendto
+nautilus-share;apt;nautilus;nautilus-share
+nautilus-wipe;apt;nautilus;nautilus-wipe
+nautilus-script-audio-convert;apt;nautilus;nautilus-script-audio-convert
+nautilus-filename-repairer;apt;nautilus;filename-repairer
+nautilus-gtkhash;apt;nautilus;nautilus-gtkhash
+nautilus-ideviceinfo;apt;nautilus;nautilus-ideviceinfo
+ooo-thumbnailer;apt;nautilus;ooo-thumbnailer
+nautilus-dropbox;apt;nautilus;nautilus-dropbox
+nautilus-script-manager;apt;nautilus;nautilus-script-manager
+nautilus-columns;apt;nautilus;nautilus-columns
+nautilus-flickr-uploader;apt;nautilus;nautilus-flickr-uploader
+insync-nautilus;apt;nautilus;insync-nautilus
+gtkam-gimp;apt;gimp;gtkam-gimp
+gimp-gluas;apt;gimp;gimp-gluas
+pandora;apt;gimp;pandora
+gimp-data-extras;apt;gimp;gimp-data-extras
+gimp-lensfun;apt;gimp;gimp-lensfun
+gimp-gmic;apt;gimp;gimp-gmic
+gimp-ufraw;apt;gimp;gimp-ufraw
+gimp-texturize;apt;gimp;gimp-texturize
+gimp-plugin-registry;apt;gimp;gimp-plugin-registry
+rhythmbox-plugin-alternative-toolbar;apt;rhythmbox;rhythmbox-plugin-alternative-toolbar
+rhythmbox-plugin-artdisplay;apt;rhythmbox;rhythmbox-plugin-artdisplay
+rhythmbox-plugin-cdrecorder;apt;rhythmbox;rhythmbox-plugin-cdrecorder
+rhythmbox-plugin-close-on-hide;apt;rhythmbox;rhythmbox-plugin-close-on-hide
+rhythmbox-plugin-countdown-playlist;apt;rhythmbox;rhythmbox-plugin-countdown-playlist
+rhythmbox-plugin-coverart-browser;apt;rhythmbox;rhythmbox-plugin-coverart-browser
+rhythmbox-plugin-coverart-search;apt;rhythmbox;rhythmbox-pluginn-coverart-search
+rhythmbox-plugin-desktopart;apt;rhythmbox;rhythmbox-plugin-desktopart
+rhythmbox-plugin-equalizer;apt;rhythmbox;rhythmbox-plugin-equalizer
+rhythmbox-plugin-fileorganizer;apt;rhythmbox;rhythmbox-plugin-fileorganizer
+rhythmbox-plugin-fullscreen;apt;rhythmbox;rhythmbox-plugin-fullscreen
+rhythmbox-plugin-hide;apt;rhythmbox;rhythmbox-plugin-hide
+rhythmbox-plugin-jumptowindow;apt;rhythmbox;rhythmbox-plugin-jumptowindow
+rhythmbox-plugin-llyrics;apt;rhythmbox;rhythmbox-plugin-llyrics
+rhythmbox-plugin-looper;apt;rhythmbox;rhythmbox-plugin-looper
+rhythmbox-plugin-opencontainingfolder;apt;rhythmbox;rhythmbox-plugin-opencontainingfolder
+rhythmbox-plugin-parametriceq;apt;rhythmbox;rhythmbox-plugin-parametriceq
+rhythmbox-plugin-playlist-import-export;apt;rhythmbox;rhythmbox-plugin-playlist
+rhythmbox-plugin-podcast-pos;apt;rhythmbox;rhythmbox-plugin-podcast-pos
+rhythmbox-plugin-randomalbumplayer;apt;rhythmbox;rhythmbox-plugin-randomalbumplayer
+rhythmbox-plugin-rating-filters;apt;rhythmbox;rhythmbox-plugin-rating-filters
+rhythmbox-plugin-remembertherhythm;apt;rhythmbox;rhythmbox-plugin-remembertherhythm
+rhythmbox-plugin-repeat-one-song;apt;rhythmbox;rhythmbox-plugin-repeat-one-song
+rhythmbox-plugin-rhythmweb;apt;rhythmbox;rhythmbox-plugin-rhythmweb
+rhythmbox-plugin-screensaver;apt;rhythmbox;rhythmbox-plugin-screensaver
+rhythmbox-plugin-smallwindow;apt;rhythmbox;rhythmbox-plugin-smallwindow
+rhythmbox-plugin-spectrum;apt;rhythmbox;rhythmbox-plugin-spectrum
+rhythmbox-plugin-suspend;apt;rhythmbox;rhythmbox-plugin-suspend
+rhythmbox-plugin-tray-icon;apt;rhythmbox;rhythmbox-plugin-tray-icon
+rhythmbox-plugin-visualizer;apt;rhythmbox;rhythmbox-plugin-visualizer
+rhythmbox-plugin-wikipedia;apt;rhythmbox;rhythmbox-plugin-wikipedia
+rhythmbox-plugins;apt;rhythmbox;rhythmbox-plugins
+telegram-purple;apt;pidgin;telegram-purple
+pidgin-skype;apt;pidgin;pidgin-skype
+purple-facebook;apt;pidgin;purple-facebook
+purple-hangouts;apt;pidgin;purple-hangouts
+pidgin-hangouts;apt;pidgin;pidgin-hangouts
+pidgin-skypeweb;apt;pidgin;pidgin-skypeweb
+purple-skypeweb;apt;pidgin;purple-skypeweb
+unbound;apt;unbound;unbound
+ambiance-crunchy;apt;gtkthemes;ambiance-crunchy
+arc-theme;apt;gtkthemes;arc-theme
+ambiance-colors;apt;gtkthemes;ambiance-colors
+radiance-colors;apt;gtkthemes;radiance-colors
+ambiance-flat-colors;apt;gtkthemes;ambiance-flat-colors
+vivacious-colors-gtk-dark;apt;gtkthemes;vivacious-colors-gtk-dark
+vivacious-colors-gtk-light;apt;gtkthemes;vivacious-colors-gtk-light
+yosembiance-gtk-theme;apt;gtkthemes;yosembiance-gtk-theme
+ambiance-blackout-colors;apt;gtkthemes;ambiance-blackout-colors
+ambiance-blackout-flat-colors;apt;gtkthemes;ambiance-blackout-flat-colors
+radiance-flat-colors;apt;gtkthemes;radiance-flat-colors
+vibrancy-colors;apt;gtkthemes;vibrancy-colors
+vivacious-colors;apt;gtkthemes;vivacious-colors
+numix-gtk-theme;apt;gtkthemes;numix-gtk-theme
+adapta-gtk-theme;apt;gtkthemes;adapta-gtk-theme
+arc-icons;apt;icons;arc-icons
+ultra-flat-icons;apt;icons;ultra-flat-icons
+myelementary;apt;icons;myelementary
+ghost-flat-icons;apt;icons;ghost-flat-icons
+faenza-icon-theme;apt;icons;faenza-icon-theme
+faience-icon-theme;apt;icons;faience-icon-theme
+vibrantly-simple-icon-theme;apt;icons;vibrantly-simple-icon-theme
+rave-x-colors-icons;apt;icons;rave-x-colors-icons
+ravefinity-x-icons;apt;icons;ravefinity-x-icons
+numix-icon-theme;apt;icons;numix-icon-theme
+numix-icon-theme-circle;apt;icons;numix-icon-theme-circle
+solaar;apt;solaar;solaar
+pcscd;apt;cardreader;pcscd
+pcsc-tools;apt;cardreader;pcsc-tools
+libacr38u;apt;cardreader;libacr38u
+guvcview;apt;webcam;guvcview
+cheese;apt;webcam;cheese
+nvidia-370;apt;nvidia-370;nvidia-370
+nvidia-settings;apt;nvidia-370;nvidia-settings
+nvidia-opencl-icd-370;apt;nvidia-370;nvidia-opencl-icd-370
+nvidia-375;apt;nvidia-375;nvidia-375
+nvidia-settings;apt;nvidia-375;nvidia-settings
+nvidia-opencl-icd-375;apt;nvidia-375;nvidia-opencl-icd-375
+nvidia-378;apt;nvidia-378;nvidia-378
+nvidia-settings;apt;nvidia-378;nvidia-settings
+nvidia-opencl-icd-378;apt;nvidia-378;nvidia-opencl-icd-378
+libcuda1-378;apt;nvidia-378;libcuda1-378
+nvidia-381;apt;nvidia-381;nvidia-381
+nvidia-settings;apt;nvidia-381;nvidia-settings
+nvidia-opencl-icd-381;apt;nvidia-381;nvidia-opencl-icd-381
+libcuda1-381;apt;nvidia-381;libcuda1-381
+nvidia-384;apt;nvidia-384;nvidia-384
+nvidia-settings;apt;nvidia-384;nvidia-settings
+nvidia-opencl-icd-384;apt;nvidia-384;nvidia-opencl-icd-384
+libcuda1-384;apt;nvidia-384;libcuda1-384
+tlp;apt;tlp;tlp
+notepadqq;apt;dev;notepadqq
+agave;apt;dev;agave
+utext;apt;dev;utext
+gpick;apt;dev;gpick
+virtualbox-5.1;apt;dev;virtualbox-5.1
+build-essential;apt;dev;build-essential
+ubuntu-make;apt;dev;ubuntu-make
+ghex;apt;dev;ghex
+glade;apt;dev;glade
+eric;apt;dev;eric
+bluefish;apt;dev;bluefish
+meld;apt;dev;meld
+bluegriffon;apt;dev;bluegriffon
+zeal;apt;dev;zeal
+shellcheck;apt;dev;shellcheck
+umbrello;apt;dev;umbrello
+ack-grep;apt;dev;ack-grep
+ansible;apt;dev;ansible
+docker-ce;apt;dev;docker-ce
+remark-lint;npm;dev;remark-lint
+jedi;npm;dev;jedi
+beautysh;pip;dev;beautysh
+retext;pip;dev;retext
+mycli;pip;dev;mycli
+npm;apt;javascript;npm
+nodejs;apt;javascript;nodejs8lts
+javascript-common;apt;javascript;javascript-common
+yarn;npm;javascript;yarn
+emma;npm;javascript;emma
+jshint;npm;javascript;jshint
+oracle-java9-installer;apt;java9;oracle-java9-installer
+oracle-java9-set-default;apt;java9;oracle-java9-set-default
+php7.0-cli;apt;php;php7.0-cli
+php-pear;apt;php;php-pear
+composer;apt;php;composer
+luajit;apt;lua;luajit
+ruby-dev;apt;ruby;ruby-dev
+anjuta;apt;anjuta;anjuta
+anjuta-extras;apt;anjuta;anjuta-extras
+brackets;apt;brackets;brackets
+codeblocks;apt;codeblocks;codeblocks
+codeblocks-contrib;apt;codeblocks;codeblocks-contrib
+geany;apt;geany;geany
+geany-plugins;apt;geany;geany-plugins
+geany-plugin-markdown;apt;geany;geany-plugin-markdown
+pycharm;apt;pycharm;pycharm
+sublime-text;apt;sublime-text;sublime-text
+kicad;apt;cad;kicad
+kicad-locale-fr;apt;cad;kicad-locale-fr
+librecad;apt;cad;librecad
+freecad;apt;cad;freecad
+code;apt;code;code
+atom;apt;atom;atom
+sync-settings;apm;atom;sync-settings
+sqlparse;pip;atom;sqlparse
+flake8;pip;atom;flake8
+autopep8;pip;atom;autopep8
+htmlbeautifier;gem;atom;htmlbeautifier
+kodi;apt;beta;kodi-beta
+kodi;apt;nightly;kodi-nightly
+nitrogen;apt;nitrogen;nitrogen
+firefox-trunk;apt;nightly;firefox-trunk
+firefox-trunk-locale-fr;apt;nightly;firefox-trunk-locale-fr
+libreoffice;apt;office;libreoffice6
+winehq-devel;apt;wine;winehq-devel
+winetricks;apt;wine;winetricks
+playonlinux;apt;wine;playonlinux
+mongodb-org;apt;mongodb;mongodb
+qt4-dev-tools;apt;qt;qt4-dev-tools
+qt4-linguist-tools;apt;qt;qt4-linguist-tools
+qt5-doc;apt;qt;qt5-doc
+qttools5-doc;apt;qt;qttools5-doc
+qttools5-dev-tools;apt;qt;qttools5-dev-tools
+qttools5-examples;apt;qt;qttools5-examples
+qttools5-doc-html;apt;qt;qttools5-doc-html
+fbreader;apt;ebook;fbreader
+calibre;apt;ebook;calibre
+android-studio;apt;android-studio;android-studio
+intellij-idea-community;snap;idea;idea"
+
+#-----------------------------------------------------------------------------#
+# Specific Repo list and functions                                            #
+#-----------------------------------------------------------------------------#
+
+#
+# list of specific repositories
+# fields : unique ID, function to add repo
+#
+AppsRepo="kodi-beta;addRepo_KodiBeta
+kodi-nightly;addRepo_KodiNightly
+libreoffice6;addRepo_Libreoffice6
+winehq-devel;addRepo_Wine
+mongodb;addRepo_MongoDB3CE
+gyazo;addRepo_Gyazo
+code;addRepo_VSCode
+android-studio;addRepo_AndroidStudio
+docker-ce;addRepo_DockerCE
+ansible;addRepo_Ansible
+etcher-electron;addRepo_Etcher
+sublime-text;addRepo_SublimeText
+vivaldi-stable;addRepo_Vivaldi
+virtualbox-5.1;addRepo_VirtualBox
+owncloud-client;addRepo_OwnCloud
+syncthing-gtk;addRepo_Syncthing
+opera-stable;addRepo_Opera
+insync;addRepo_Insync
+google-chrome-stable;addRepo_ChromeStable
+atom;addRepo_Atom
+nextcloud-client;addRepo_NextCloud
+wireshark;addRepo_WireShark
+darktable;addRepo_DarkTable
+brackets;addRepo_Brackets
+kicad;addRepo_Kicad
+nodejs8lts;addRepo_NodeLts8
+telegram;addRepo_Telegram
+skypeforlinux;addRepo_SkypeForLinux
+shotwell;addRepo_Shotwell"
+
+#
+# Shotwell
+#
+function addRepo_Shotwell () {
+  addPPA "yg-jensge/shotwell"
+}
+
+#
+# Telegram
+#
+function addRepo_Telegram () {
+  addPPA "atareao/telegram"
+}
+
+#
+# Skype for Linux
+#
+function addRepo_SkypeForLinux () {
+  addKey "https://repo.skype.com/data/SKYPE-GPG-KEY"
+  addRepo "skypeforlinux.list" \
+          "deb [arch=amd64] https://repo.skype.com/deb stable main"
+}
+
+#
+# Node 8 LTS
+#
+function addRepo_NodeLts8 () {
+  addKey "https://deb.nodesource.com/gpgkey/nodesource.gpg.key"
+  addRepo "nodesource.list" \
+          "deb https://deb.nodesource.com/node_8.x xenial main" \
+          "deb-src https://deb.nodesource.com/node_8.x xenial main"
+}
+
+#
+# Kicad 4
+#
+function addRepo_Kicad () {
+  addPPA "js-reynaud/kicad-4"
+}
+
+#
+# Brackets IDE
+#
+function addRepo_Brackets () {
+  addPPA "webupd8team/brackets"
+}
+
+#
+# Darktable RAW Editor
+#
+function addRepo_DarkTable () {
+  addPPA "pmjdebruijn/darktable-release"
+}
+
+#
+# WireShark
+#
+function addRepo_WireShark () {
+addPPA "wireshark-dev/stable"
+}
+
+#
+# NextCloud
+#
+function addRepo_NextCloud () {
+  addPPA "nextcloud-devs/client"
+}
+
+#
+# Atom IDE
+#
+function addRepo_Atom () {
+  addPPA "webupd8team/atom"
+}
+
+#
+# Google Chrome (stable)
+#
+function addRepo_ChromeStable () {
+  addKey "https://dl.google.com/linux/linux_signing_key.pub"
+  addRepo google-chrome.list \
+          "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main"
+}
+
+#
+# Insync
+#
+function addRepo_Insync () {
+  addKey "https://d2t3ff60b2tol4.cloudfront.net/services@insynchq.com.gpg.key"
+  addRepo insync.list \
+          "deb http://apt.insynchq.com/ubuntu xenial non-free contrib"
+}
+
+#
+# Opera (stable)
+#
+function addRepo_Opera () {
+  addKey "http://deb.opera.com/archive.key"
+  addRepo opera.list \
+          "deb http://deb.opera.com/opera-stable/ stable non-free"
+}
+
+#
+# Syncthing
+#
+function addRepo_Syncthing () {
+  addKey "https://syncthing.net/release-key.txt"
+  addRepo syncthing.list \
+          "deb http://apt.syncthing.net/ syncthing release"
+}
+
+#
+# OwnCloud
+#
+function addRepo_OwnCloud () {
+  addKey "http://download.opensuse.org/repositories/isv:ownCloud:desktop/Ubuntu_16.04/Release.key"
+  addRepo owncloud-client.list \
+          "deb http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Ubuntu_16.04/ /"
+}
+
+#
+# VirtualBox
+#
+function addRepo_VirtualBox () {
+  addKey "http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc"
+  addKey "http://download.virtualbox.org/virtualbox/debian/oracle_vbox_2016.asc"
+  addRepo virtualbox.list \
+          "deb http://download.virtualbox.org/virtualbox/debian xenial contrib"
+}
+
+#
+# Vivaldi
+#
+function addRepo_Vivaldi () {
+  addKey "http://repo.vivaldi.com/stable/linux_signing_key.pub"
+  addRepo vivaldi.list \
+          "deb http://repo.vivaldi.com/stable/deb/ stable main "
+}
+
+#
+# SublimeText
+#
+function addRepo_SublimeText () {
+  addKey "https://download.sublimetext.com/sublimehq-pub.gpg"
+  addRepo sublime-text.list \
+          "deb https://download.sublimetext.com/ apt/dev/"
+}
+
+#
+# Etcher
+#
+function addRepo_Etcher () {
+  addKey "hkp://pgp.mit.edu:80" \
+         "379CE192D401AB61"
+  addRepo "etcher.list" \
+          "deb https://dl.bintray.com/resin-io/debian stable etcher"
+}
+
+#
+# Ansible
+#
+function addRepo_Ansible () {
+  addPPA "ansible/ansible"
+}
+
+#
+# Docker CE
+#
+function addRepo_DockerCE () {
+  addKey "https://download.docker.com/linux/ubuntu/gpg"
+  addRepo "docker.list" \
+          "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
+}
+
+#
+# Gyazo
+#
+function addRepo_Gyazo () {
+  addKey "https://packagecloud.io/gyazo/gyazo-for-linux/gpgkey"
+  addRepo "gyazo_gyazo-for-linux.list" \
+          "deb https://packagecloud.io/gyazo/gyazo-for-linux/ubuntu/ xenial main" \
+          "deb-src https://packagecloud.io/gyazo/gyazo-for-linux/ubuntu/ xenial main"
+}
+
+#
+# MongoDB 3 CE
+#
+function addRepo_MongoDB3CE () {
+  addKey "https://www.mongodb.org/static/pgp/server-3.6.asc"
+  addRepo "mongodb-org-3.6.list" \
+          "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse"
+}
+
+#
+# Wine Build
+#
+function addRepo_Wine () {
+  addKey "https://dl.winehq.org/wine-builds/Release.key"
+  addPPA "https://dl.winehq.org/wine-builds/ubuntu/"
+}
+
+#
+# LibreOffice 6
+#
+function addRepo_Libreoffice6 () {
+  addPPA "libreoffice/ppa"
+}
+
+#
+# Kodi (Beta)
+#
+function addRepo_KodiBeta () {
+  addPPA "team-xbmc/unstable"
+}
+
+#
+# Kodi (Nightly)
+#
+function addRepo_KodiNightly () {
+  addPPA "team-xbmc/xbmc-nightly"
+}
+
+#
+# Visual Studio Code
+#
+function addRepo_VSCode () {
+  addKey "https://packages.microsoft.com/keys/microsoft.asc"
+  addRepo "vscode.list" \
+          "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
+}
+
+#
+# Android-Studio
+#
+function addRepo_AndroidStudio () {
+  addPPA "maarten-fonville/android-studio"
+}
+
+#-----------------------------------------------------------------------------#
+# Package post install functions list                                         #
+#-----------------------------------------------------------------------------#
+
+#
+# list of post install functions
+# fields : unique ID, function to process after install
+#
+AppsTrtFct="nitrogen;nitrogen_TrtFct
+mongodb-org;mongodb_TrtFct
+qttools5-dev-tools;qt_TrtFct
+plank;plank_TrtFct"
+
+#
+# Plank themes
+#TODO: test it
+function plank_TrtFct () {
+  typeset ret_code
+
+  if ! (( $(ps -ef | grep -v grep | grep plank | wc -l) > 0 )); then
+    plank 2&>1 >/dev/null &
+    sleep 10
+  fi
+
+  yes | sh -c "cd ~ \
+               && mkdir -p ~/.temp-plank-themer \
+               && cd ~/.temp-plank-themer \
+               && wget https://github.com/rhoconlinux/plank-themer/archive/master.zip \
+               && unzip master.zip \
+               && cd plank-themer-master/ \
+               && rm -fR ~/.config/plank/dock1/theme_index; \
+               rm -fR ~/.config/plank/dock1/themes-repo; \
+               cp -a theme_index/ ~/.config/plank/dock1 \
+               && cp -a themes-repo/ ~/.config/plank/dock1 \
+               && cd ~ \
+               && rm -R ~/.temp-plank-themer \
+               && sh ~/.config/plank/dock1/theme_index/plank-on-dock-themer.sh" &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+}
+
+#
+# QT5 Dev Tools
+#
+function qt_TrtFct () {
+  runCmd "sudo ln -s /usr/share/qtchooser/qt5-x86_64-linux-gnu.conf /usr/lib/x86_64-linux-gnu/qtchooser/default.conf" \
+         "set QT5 as default"
+
+  createAppShortcut "/usr/bin/designer" \
+                    "/home/"$myHomedir"/.icons/qtdesigner.png" \
+                    "GNOME;GTK;Development;IDE" \
+                    "QT Designer 5" \
+                    "local" \
+  update-menus
+}
+
+#
+# MongoDB 3 CE
+#
+function mongodb_TrtFct () {
+  runCmd "sudo systemctl unmask mongodb.service" \
+         "unmask systemd mongodb service"
+  runCmd "sudo systemctl enable mongodb" \
+         "enabling mongodb service at boot"
+  runCmd "sudo systemctl start mongodb" \
+         "starting mongodb service"
+}
+
+#
+# nitrogen post install function
+#
+function nitrogen_TrtFct () {
+  if isMate; then
+    runCmd "gsettings set org.mate.background draw-background false" \
+           "disabling Caja background management"
+    runCmd "gsettings set org.mate.background show-desktop-icons false" \
+           "disabling Caja desktop icons management"
+
+    createAppShortcut "bash -c \"sleep 10; nitrogen --restore\"" \
+                      "/home/"$myHomedir".icons/franz.png" \
+                      "Network;InstantMessaging" \
+                      "Nitrogen" \
+                      "local" \
+                      "start"
+    update-menus
+  else
+    printf "[ERR] only Mate Desktop is currently supported\n"
+  fi
+}
+
+#-----------------------------------------------------------------------------#
+
+#
+# install required ppa and settings
+#
+function addRequiredPPA () {
+  msg "Adding PPA and repositories"
+
+  runCmd "sudo dpkg --add-architecture i386" \
+         "adding i386 architecture"
+
+  installPackage apt "apt-transport-https"
+
+  runCmd "echo sience-config science-config/group select '$myHomedir ($myHomedir)' | sudo debconf-set-selections" \
+         "apply settings for science-config pkg"
+
+  addPPA "noobslab/themes" # themes from noobslab
+  addPPA "noobslab/icons" # icons from noobslab
+  addPPA "numix/ppa" # theme Numix
+  addPPA "ravefinity-project/ppa" # Themes
+  addPPA "teejee2008/ppa" # Aptik - Conky-Manage
+  addPPA "yktooo/ppa" # indicator-sound-switcher
+  addPPA "webupd8team/y-ppa-manager" # y-ppa-manager
+  addPPA "videolan/stable-daily" # video player
+  addPPA "nowrep/qupzilla" # web browser
+  addPPA "atareao/atareao" # pushbullet-indicator, imagedownloader, gqrcode, cpu-g
+  addPPA "fossfreedom/rhythmbox-plugins";  # Rhythmbox plugins
+  addPPA "fossfreedom/rhythmbox" # Rhythmbox
+  addPPA "nilarimogard/webupd8" # Audacious, Grive2, Pidgin-indicator
+  addPPA "oibaf/graphics-drivers" # free graphics-drivers + mesa
+  addPPA "team-xbmc/ppa" # Kodi
+  addPPA "webupd8team/java" # Oracle Java SE 7/8
+  addPPA "hugin/hugin-builds" # image editor
+  addPPA "mumble/release" # Mumble
+  addPPA "atareao/utext" # Markdown editor
+  addPPA "danielrichter2007/grub-customizer" # grub-customizer
+  addPPA "lucioc/sayonara" # audio player
+  addPPA "haraldhv/shotcut" # video editor
+  addPPA "flacon/ppa" # audio extraction
+  addPPA "jaap.karssenberg/zim" # local wiki
+  addPPA "stebbins/handbrake-releases" # video transcoder
+  addPPA "graphics-drivers/ppa" # non-free nvidia drivers
+  addPPA "diodon-team/stable" # clipboard manager
+  addPPA "notepadqq-team/notepadqq" # notepad++ clone
+  addPPA "mariospr/frogr" # flickr manager
+  addPPA "ubuntuhandbook1/slowmovideo" # slow motion video editor
+  addPPA "transmissionbt/ppa" # bittorrent client
+  addPPA "geary-team/releases" # email client
+  addPPA "ubuntuhandbook1/corebird" # corebird
+  addPPA "tista/adapta" # adapta gtk theme
+  addPPA "maarten-baert/simplescreenrecorder" # simplescreenrecorder
+  addPPA "dhor/myway" # rawtherapee (newer version)
+  addPPA "zeal-developers/ppa" # Zeal (newer version)
+  addPPA "deluge-team/ppa" # Deluge P2P client
+  addPPA "kritalime/ppa" # Krita
+  addPPA "otto-kesselgulasch/gimp" # Gmic2
+  addPPA "ozmartian/apps" # Vidcutter
+  addPPA "fossproject/ppa" # green-recorder
+  addPPA "quiterss/quiterss" # quiterss
+  addPPA "tmsu/ppa" # tmsu
+
+  addKey "https://mkvtoolnix.download/gpg-pub-moritzbunkus.txt"
+  addRepo mkv.list \
+          "deb http://mkvtoolnix.download/ubuntu/xenial/ ./" \
+          "deb-src http://mkvtoolnix.download/ubuntu/xenial/ ./ "
+
+  addKey "https://jgeboski.github.io/obs.key"
+  addRepo jgeboski.list \
+          "deb http://download.opensuse.org/repositories/home:/jgeboski/xUbuntu_16.04/ ./"
+
+  addKey "http://archive.getdeb.net/getdeb-archive.key"
+  addRepo getdeb.list \
+          "deb http://archive.getdeb.net/ubuntu xenial-getdeb apps games"
+
+  updateSystem
+}
\ No newline at end of file
diff --git a/deb/yggdrasil/opt/yggdrasil/tools_functions.sh b/deb/yggdrasil/opt/yggdrasil/tools_functions.sh
new file mode 100644
index 0000000..f6b4861
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/tools_functions.sh
@@ -0,0 +1,149 @@
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#-----------------------------------------------------------------------------#
+# tools and config functions                                                  #
+#-----------------------------------------------------------------------------#
+
+#
+# enable ufw at boot time and add rules for installed apps
+#
+function enableUFW () {
+  msg "Enabling FireWall (UFW)"
+  runCmd "sudo ufw enable"\
+         "enabling UFW at boot"
+
+  if which syncthing >/dev/null; then
+    runCmd "sudo ufw allow syncthing" \
+           "adding UFW rules for Syncthing"
+  fi
+}
+
+#
+# enable numlock by default on LightDM
+#
+function enableNumLockX () {
+  msg "Adding NumLockX to MDM/LightDM Default Init"
+  checkAndInstallDep apt numlockx numlockx
+  if which lightdm >/dev/null; then
+    runCmd "sudo cp /etc/lightdm/lightdm.conf.d/70-linuxmint.conf /etc/lightdm/lightdm.conf.d/70-linuxmint.conf.yggbak" \
+           "Backing up original config file"
+    runCmd "echo -e '\ngreeter-setup-script=/usr/bin/numlockx on' | sudo tee -a /etc/lightdm/lightdm.conf.d/70-linuxmint.conf" \
+           "Enabling numlockx on in lightdm at boot"
+  fi
+}
+
+#
+# /tmp in RAM by modifying /etc/fstab
+#
+function enableTmpRAM () {
+  runCmd "echo 'tmpfs /tmp tmpfs defaults,size=2g 0 0' | sudo tee -a /etc/fstab" \
+         "Enabling /tmp in RAM by modifying /etc/fstab"
+  if (whiptail --title "/tmp in RAM - Reboot" --yesno "Reboot required, proceed now ?" 10 60) then
+    sudo reboot
+  fi
+}
+
+#
+# add screenfetch exec in .bashrc
+#
+function addScreenfetchBashrc () {
+  msg "Adding screenfetch to .bashrc"
+  checkAndInstallDep apt screenfetch screenfetch
+  runCmd "touch /home/$myHomedir/.bashrc" \
+         "Creating .bashrc file if necessary"
+  runCmd "echo 'screenfetch -t' | tee -a /home/$myHomedir/.bashrc" \
+         "Adding screenfetch to .bashrc"
+}
+
+#
+# cli history cmd timestamp enable
+#
+function enableHistoryTS () {
+  typeset ret_code
+  printf "Enabling CLI History TimeStamp "
+  echo "export HISTTIMEFORMAT='%F %T  '" | tee -a /home/$myHomedir/.bashrc &>> $logFile
+  ret_code=$?
+  retCode $ret_code
+}
+
+#
+# install/enable auto install of security updates
+#
+function installUnattendedUpgrades () {
+  msg "Installing unattended-upgrades"
+  installPackage apt "unattended-upgrades"
+}
+
+#
+# display useful system/hardware informations
+#
+function toolInxi () {
+  checkAndInstallDep apt inxi inxi \
+  && inxi -F
+}
+
+#
+# check bandwith and latency of the internet connection
+#
+function toolSpeedtestCli () {
+  checkAndInstallDep pip speedtest-cli speedtest-cli \
+  && speedtest-cli
+}
+
+#
+# check for packet loss
+#
+function toolPacketLoss () {
+  ping -q -c 10 google.com
+}
+
+#
+# Optimization of SQLite databases of Firefox and Firefox Nightly
+#
+function toolOptimizeFirefox () {
+  if (whiptail --title "Firefox SQLite DB Optimization" --yesno "Terminate Firefox and proceed ?" 10 60) then
+    if which firefox >/dev/null; then
+      printf "Optimizing Firefox"
+      pkill -9 firefox
+      for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM; REINDEX;'; done
+      printf "\n"
+    fi
+    if which firefox-trunk >/dev/null; then
+      printf "Optimizing Firefox Nightly"
+      pkill -9 firefox-trunk
+      for f in ~/.mozilla/firefox-trunk/*/*.sqlite; do sqlite3 $f 'VACUUM; REINDEX;'; done
+      printf "\n"
+    fi
+  fi
+}
+
+#
+# remove useless packages (depedencies)
+#
+function toolAutoremove () {
+  runCmd "sudo apt-get -y autoremove" \
+         "Removing not necessary dependencies"
+}
+
+#
+# remove old versions of installed kernels
+#
+function toolClearOldKernels () {
+  checkAndInstallDep apt byobu purge-old-kernels
+  runCmd "sudo purge-old-kernels --keep 3" \
+         "Removing old kernels"
+}
+
+#
+# force soundcards detection
+#
+function toolSoundCardsDetection () {
+  runCmd "sudo alsa force-reload" \
+         "Detecting ALSA sound cards"
+}
\ No newline at end of file
diff --git a/deb/yggdrasil/opt/yggdrasil/vars.sh b/deb/yggdrasil/opt/yggdrasil/vars.sh
new file mode 100644
index 0000000..1ff9b08
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/vars.sh
@@ -0,0 +1,59 @@
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#------------------------------------------------------------------------------#
+# Script's cons. and vars.                                                     #
+#------------------------------------------------------------------------------#
+
+#
+# app version number
+#
+version="0.4.0"
+
+#
+# myHomedir is used in full paths to the homedir
+#
+myHomedir=$(whoami)
+
+#
+# logfile
+#
+logFile="/home/"$myHomedir"/yggdrasil.log"
+
+#
+# date and time
+#
+cTime=$(date +%H:%M)
+cDate=$(date +%d-%m-%Y)
+
+#
+# repo/ppa added counter
+#
+repoAdded=0
+
+#
+# shell color codes
+#
+UNDERLINE=$(tput sgr 0 1)
+BOLD=$(tput bold)
+ROUGE=$(tput setaf 1)
+VERT=$(tput setaf 2)
+JAUNE=$(tput setaf 3)
+BLEU=$(tput setaf 4)
+MAUVE=$(tput setaf 5)
+CYAN=$(tput setaf 6)
+BLANC=$(tput setaf 7)
+NORMAL=$(tput sgr0)
+INV=$(tput smso)
+BOLDROUGE=${BOLD}${ROUGE}
+BOLDVERT=${BOLD}${VERT}
+BOLDJAUNE=${BOLD}${JAUNE}
+BOLDBLEU=${BOLD}${BLEU}
+BOLDMAUVE=${BOLD}${MAUVE}
+BOLDCYAN=${BOLD}${CYAN}
+BOLDBLANC=${BOLD}${BLANC}
diff --git a/deb/yggdrasil/opt/yggdrasil/yggdrasil.sh b/deb/yggdrasil/opt/yggdrasil/yggdrasil.sh
new file mode 100755
index 0000000..b7703e5
--- /dev/null
+++ b/deb/yggdrasil/opt/yggdrasil/yggdrasil.sh
@@ -0,0 +1,209 @@
+#!/bin/bash
+#------------------------------------------------------------------------------#
+# Yggdrasil NG                                                                 #
+#    compatibility :  Mint 18, Ubuntu 16.04, Elementary and other derivatives  #
+#    author : Francois B. (Makotosan/Shakasan)                                 #
+#    licence : GPLv3                                                           #
+#    website : https://makotonoblog.be/                                        #
+#------------------------------------------------------------------------------#
+
+#
+# include functions and vars from external files
+#
+dir=$(dirname $0)
+if [ ! $dir == "/opt/yggdrasil" ]; then
+  source /opt/yggdrasil/vars.sh
+  source /opt/yggdrasil/core_functions.sh
+  source /opt/yggdrasil/repo_functions.sh
+  source /opt/yggdrasil/install_functions.sh
+  source /opt/yggdrasil/menus_functions.sh
+  source /opt/yggdrasil/tools_functions.sh
+else
+  source $(dirname $0)/vars.sh
+  source $(dirname $0)/core_functions.sh
+  source $(dirname $0)/repo_functions.sh
+  source $(dirname $0)/install_functions.sh
+  source $(dirname $0)/menus_functions.sh
+  source $(dirname $0)/tools_functions.sh
+fi
+
+#
+# check if the script is running in root/sudo
+# NEVER run the script as root or with sudo !!!!
+#
+if ! [ "$UID" -ne "0" ]; then
+  printf "\n"
+  printf $BOLDROUGE"Yggdrasil can't be run as root/sudo, please retry as normal user"$NORMAL
+  printf "\n\n"
+  exit
+fi
+
+#
+# add a mark to the log file at every script run
+#
+echo "--[ Yggdrasil log ]--[ "$cDate" ]--[ "$cTime" ]-----------------------" >> $logFile
+
+#-----------------------------------------------------------------------------#
+# Headless Mode                                                               #
+#-----------------------------------------------------------------------------#
+
+#
+# arguments/options management with getopts
+#
+while getopts ":h,v,f,c,t,u" option; do
+  case "$option" in
+    t) #test purpose only
+      #yggInit
+      #installIdea
+      #installNetTools
+      #installOffice
+      #addPPA "tmsu/ppa"
+      exit
+      ;;
+    f) # install all apps
+      yggInit
+      updateSystem
+      addRequiredPPA
+      installBase
+      installOffice
+      installBurningTools
+      installCajaPlugins
+      installNautilusAndPlugins
+      installEbook
+      installGames
+      installGimpPlugins
+      installInternet
+      installJava9
+      installMiscUtilities
+      installMultimedia
+      installNetTools
+      installOffice
+      installPidginPlugins
+      installRhythmBoxPlugins
+      installWine
+      installViber
+      installFranz
+      exit
+      ;;
+    c) # install themes and icons
+      yggInit
+      updateSystem
+      addRequiredPPA
+      installIcons
+      installThemes
+      exit
+      ;;
+    u)
+      yggInit
+      updateSystem
+      exit
+      ;;
+    h) # display help
+      usage
+      exit
+      ;;
+    v) # display version number
+      printf "Yggdrasil version : $version\n"
+      exit
+      ;;
+    :) # display error message in case of missing argument(s)
+      usage
+      printf "\nError : Option $OPTARG : missing argument\n"
+      exit 1
+      ;;
+    \?) # display error message in case of invalid option
+      usage
+      printf "\nError : $OPTARG : invalid option\n"
+      exit 1
+      ;;
+  esac
+done
+
+#-----------------------------------------------------------------------------#
+# Menu Mode                                                                   #
+#-----------------------------------------------------------------------------#
+
+# show Yggdrasil logo
+dispLogo
+
+# show system informations
+dispSysInfos
+
+# Useless by itself, but is used to don't be annoyed later in the script
+sudo echo
+
+# init, check and install/update dependencies
+yggInit
+
+pressKey
+
+# Apps dir created if necessary
+mkdir -p /home/$myHomedir/Apps
+
+#-----------------------------------------------------------------------------#
+# Main menu                                                                   #
+#-----------------------------------------------------------------------------#
+
+while true; do # main menu loop
+
+mainMenuOptions=$(whiptail \
+--title "Yggdrasil $version - Main Menu" \
+--menu "This tool will help you to install all needed applications and cutomize your fresh install of Mint/Ubuntu/Elementary/..." \
+25 80 16 \
+"1" "System update" \
+"2" "Add required PPA/Repo" \
+"3" "Applications" \
+"4" "Applications (BETA)" \
+"5" "Applications (Nightly)" \
+"6" "Themes & Icons" \
+"7" "Dev Apps" \
+"8" "System Config" \
+"9" "System Tools" \
+"10" "Reboot this computer" \
+"11" "About Yggdrasil" \
+"12" "Quit"  3>&1 1>&2 2>&3)
+
+case $mainMenuOptions in
+  "1")
+    updateSystem
+    pressKey
+    ;;
+  "2")
+    addRequiredPPA
+    pressKey
+    ;;
+  "3")
+    showAppInstallMenu
+    ;;
+  "4")
+    showAppBetaInstallMenu
+    ;;
+  "5")
+    showAppNightlyInstallMenu
+    ;;
+  "6")
+    showThemesInstallMenu
+    ;;
+  "7")
+    showDevInstallMenu
+    ;;
+  "8")
+    showConfigMenu;
+    ;;
+  "9")
+    showSysToolsMenu
+    ;;
+  "10")
+    showRebootBoxMenu
+    ;;
+  "11")
+    showAboutBoxMenu
+    ;;
+  "12")
+    exit
+    ;;
+esac # main menu
+done # end of main menu loop
+
+clear
+exit
\ No newline at end of file
diff --git a/deb/yggdrasil/usr/bin/yggdrasil.sh b/deb/yggdrasil/usr/bin/yggdrasil.sh
new file mode 120000
index 0000000..b6b9ac7
--- /dev/null
+++ b/deb/yggdrasil/usr/bin/yggdrasil.sh
@@ -0,0 +1 @@
+/opt/yggdrasil/yggdrasil.sh
\ No newline at end of file