From 73034ca1ec791c08803950c096064c5e7c5902e3 Mon Sep 17 00:00:00 2001 From: Matt C Date: Wed, 11 Aug 2021 00:48:27 -0400 Subject: [PATCH] extract from gitea --- .gitignore | 28 + LICENSE | 661 + README.md | 53 + as_root.sh | 74 + build.sh | 234 + clean.sh | 2 + ikeda-icon.png | Bin 0 -> 3507 bytes ikeda-small.png | Bin 0 -> 18785 bytes ikeda.png | Bin 0 -> 203282 bytes sg-targets | 2 + src/as_root.sh | 1 + src/bash-version | 1 + src/bb-config | 1203 ++ src/busybox-version | 1 + src/filesystem/bin/shutdown | 2 + src/filesystem/etc/fstab | 4 + src/filesystem/etc/group | 36 + src/filesystem/etc/hostname | 1 + src/filesystem/etc/hosts | 11 + src/filesystem/etc/init.d/klogd/run | 3 + src/filesystem/etc/init.d/startup | 77 + src/filesystem/etc/init.d/syslogd/run | 2 + src/filesystem/etc/init.d/udhcpc/run | 2 + src/filesystem/etc/inittab | 8 + src/filesystem/etc/issue | 2 + src/filesystem/etc/locale.sh | 26 + src/filesystem/etc/motd | 1 + src/filesystem/etc/network/if-pre-up.d/.keep | 1 + src/filesystem/etc/network/if-up.d/.keep | 1 + src/filesystem/etc/network/interfaces | 2 + src/filesystem/etc/os-release | 2 + src/filesystem/etc/passwd | 9 + src/filesystem/etc/prelogin | 19 + src/filesystem/etc/profile | 19 + src/filesystem/etc/shadow | 9 + src/filesystem/etc/skel/.zshrc | 1 + src/filesystem/etc/syslog.conf | 1 + src/filesystem/etc/zshrc | 7 + src/filesystem/root/.zshrc | 1 + src/filesystem/usr/local/bin/neofetch | 10983 ++++++++++++++++ .../usr/share/udhcpc/default.script | 52 + src/linux-version | 1 + src/musl.config.mak | 89 + src/zsh-version | 1 + 44 files changed, 13633 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100755 as_root.sh create mode 100755 build.sh create mode 100755 clean.sh create mode 100644 ikeda-icon.png create mode 100755 ikeda-small.png create mode 100755 ikeda.png create mode 100644 sg-targets create mode 120000 src/as_root.sh create mode 100755 src/bash-version create mode 100755 src/bb-config create mode 100755 src/busybox-version create mode 100755 src/filesystem/bin/shutdown create mode 100755 src/filesystem/etc/fstab create mode 100755 src/filesystem/etc/group create mode 100755 src/filesystem/etc/hostname create mode 100755 src/filesystem/etc/hosts create mode 100755 src/filesystem/etc/init.d/klogd/run create mode 100755 src/filesystem/etc/init.d/startup create mode 100755 src/filesystem/etc/init.d/syslogd/run create mode 100755 src/filesystem/etc/init.d/udhcpc/run create mode 100755 src/filesystem/etc/inittab create mode 100755 src/filesystem/etc/issue create mode 100755 src/filesystem/etc/locale.sh create mode 100755 src/filesystem/etc/motd create mode 100644 src/filesystem/etc/network/if-pre-up.d/.keep create mode 100644 src/filesystem/etc/network/if-up.d/.keep create mode 100644 src/filesystem/etc/network/interfaces create mode 100755 src/filesystem/etc/os-release create mode 100755 src/filesystem/etc/passwd create mode 100755 src/filesystem/etc/prelogin create mode 100755 src/filesystem/etc/profile create mode 100755 src/filesystem/etc/shadow create mode 100644 src/filesystem/etc/skel/.zshrc create mode 100755 src/filesystem/etc/syslog.conf create mode 100644 src/filesystem/etc/zshrc create mode 100644 src/filesystem/root/.zshrc create mode 100755 src/filesystem/usr/local/bin/neofetch create mode 100755 src/filesystem/usr/share/udhcpc/default.script create mode 100755 src/linux-version create mode 100755 src/musl.config.mak create mode 100755 src/zsh-version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4102db8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +*tar* + +build/ + +ikeda +ikeda_mount/ + +busybox* +!busybox-version + +linux* +!linux-version + +bash* +!bash-version + +!zsh-version + +musl* +musl-cross-make/ +musl-out/ +!musl-version +!musl.config.mak + +kernel-headers/ + +!startup +!sg-targets \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..213bd86 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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. + + Ikeda + Copyright (C) 2021 Matt Compton + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + 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 AGPL, see +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fdcfad --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# ![](ikeda-icon.png) Ikeda +Ikeda is a WIP BusyBox and musl-libc based Linux System + +![](ikeda.png) + +## Build Dependencies (for void or arch) +- `base-devel` +- `bc` +- `git` +- `musl` +- `elfutils` +- `flex` +- `cmake` +- `qemu` +- `wget` +- `openssl` + +Note: some distros will also require you to install `foo-devel`, `foo-dev`, or `libfoo` variants of certain packages. + +## General build: +- `./build.sh` + +## Script notes: +- Script will download and compile bits as needed + - To force a re-compile of Linux, delete `work/linux-${kernel_version}/arch/x86_64/boot/bzImage` + - To force a re-compile of BuxyBox, delete `work/busybox-${busybox_version}/busybox` + - To force a re-compile of Bash, delete `work/bash-${bash_version}/out/bin/bash` + - To force a re-compile of MUSL toolchain, delete `work/musl-out` + - Alternatively, run `./clean.sh` to force rebuild and reclones of everything. +- Use `./build.sh test -ng` to run qemu in TTY, rather than X/Wayland + +## Why the name? +https://en.wikipedia.org/wiki/Ikeda_map + +## Sources: +- Toolchain + + https://github.com/MichielDerhaeg/build-linux +- Musl libc + + https://www.musl-libc.org/ +- ZSH Project + + https://sourceforge.net/p/zsh/code/ci/master/tree/ +- Our ZSH binary + + https://github.com/romkatv/zsh-bin + +## Notes: + +#### BusyBox + +Derhaeg's original BusyBox config was taken from Arch Linux, if any issues arise we can attempt to use Arch Linux's latest BusyBox config in its place. diff --git a/as_root.sh b/as_root.sh new file mode 100755 index 0000000..ec17246 --- /dev/null +++ b/as_root.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +cores=$(nproc) + +kernel_version=$(cat linux-version) +busybox_version=$(cat busybox-version) +bash_version=$(cat bash-version) + +base=$(pwd) + +tgt=$(losetup -P -f --show ikeda) +mkdir ikeda_mount +mkfs.ext4 ${tgt}p1 +mount ${tgt}p1 ikeda_mount + +echo "Making raw filesystem" + +pushd ikeda_mount + +mkdir -p usr/{sbin,bin} bin sbin boot +mkdir -p {dev,etc,home,lib,mnt,opt,proc,srv,sys,run} +mkdir -p var/{lib,lock,log,run,spool,cache} +install -d -m 0750 root +install -d -m 1777 tmp +mkdir -p usr/{include,lib,share,src,local} + +ln -s bin/bash usr/bin/zsh + +echo "Copying linux-${kernel_version} and busybox-${busybox_version}" +cp ../linux-${kernel_version}/arch/x86_64/boot/bzImage boot/bzImage +cp ../busybox-${busybox_version}/busybox usr/bin/busybox +for util in $(./usr/bin/busybox --list-full); do + ln -s /usr/bin/busybox $util +done +mkdir -p usr/share/udhcpc +cp -rv ../busybox-${busybox_version}/examples/udhcp/* usr/share/udhcpc/. + +echo "Installing musl-${musl_version} . . ." +cp -r ../musl-out/* usr/. + +echo "Installing bash-${bash_version} . . ." +cp -rv ../bash-${bash_version}/out/* usr/. + +echo "Unpacking statically prebuilt zsh . . ." +pushd usr +curl -LO https://github.com/romkatv/zsh-bin/releases/download/v6.0.0/zsh-5.8-linux-x86_64.tar.gz +tar -xf zsh-5.8-linux-x86_64.tar.gz +rm zsh-5.8-linux-x86_64.tar.gz +popd + +echo "Installing GRUB" +grub-install --modules=part_msdos --target=i386-pc --boot-directory="$PWD/boot" ${tgt} +partuuid=$(fdisk -l ../ikeda | grep "Disk identifier" | awk '{split($0,a,": "); print a[2]}' | sed 's/0x//g') +mkdir -p boot/grub +echo "linux /boot/bzImage quiet root=PARTUUID=${partuuid}-01" > boot/grub/grub.cfg +echo "boot" >> boot/grub/grub.cfg + +popd + +echo "Final filesystem setup" +cp -r filesystem/* ikeda_mount/. +chmod -R -x ikeda_mount/etc/* +chmod -R +x ikeda_mount/etc/init.d/* + +printf "Would you like a RootFS tarball? (y/N): " +read RFS + +if [[ "$RFS" == "y" ]]; then + rm ikeda.tar.gz + pushd ikeda_mount && tar -czf ../ikeda.tar.gz * && popd +fi + +umount -v ikeda_mount +rm -rf ikeda_mount diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..869ed14 --- /dev/null +++ b/build.sh @@ -0,0 +1,234 @@ +#!/bin/bash + +rootdir=$(pwd) + +if [[ ! -d build ]]; then + ./clean.sh +fi + +pushd build + +cores=$(nproc) + +kernel_version=$(cat linux-version) +busybox_version=$(cat busybox-version) +bash_version=$(cat bash-version) +# check `musl.config.mak` for MUSL toolchain versions + +printsection() { + echo "----------" + echo "$1" + echo "----------" +} + +confirm() { + echo "$1" + printf "Press enter to continue" + read +} + +getlinux() { + echo "Getting kernel source" + if [ ! -f linux-${kernel_version}.tar.xz ]; then + wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${kernel_version}.tar.xz + fi + + if [ -d linux-${kernel_version} ]; then + rm -rf linux-${kernel_version} + fi + + tar -xf linux-${kernel_version}.tar.xz + +} + +makekernel() { + + printsection "Making Kernel" + + if [ ! -d linux-${kernel_version} ]; then + echo "Ensuring source" + getlinux + fi + + if [ ! -f linux-${kernel_version}/arch/x86_64/boot/bzImage ]; then + echo "Doing build." + echo "Applying default config" + cd linux-${kernel_version} + make defconfig + sed "s/=m/=y/" -i .config + echo "Building" + make -j${cores} + cd ../ + else + echo "Kernel exists. Not rebuilding." + echo "Delete linux-${kernel_version}/arch/x86_64/boot/bzImage to force a rebuild." + fi + +} + +getbusybox() { + echo "Ensuring busybox" + if [[ ! -f busybox-${busybox_version}.tar.bz2 ]]; then + wget https://busybox.net/downloads/busybox-${busybox_version}.tar.bz2 + fi + + if [ -d busybox-${busybox_version} ]; then + rm -rf busybox-${busybox_version} + fi + + tar -xf busybox-${busybox_version}.tar.bz2 + +} + +buildbusybox() { + + printsection "Making BusyBox" + + if [ ! -f busybox-${busybox_version}/busybox ]; then + if [ ! -d busybox-${busybox_version} ]; then + getbusybox + fi + + if [ -d kernel-headers ]; then + pushd kernel-headers && git pull && popd + else + git clone https://github.com/sabotage-linux/kernel-headers + fi + + cp bb-config busybox-${busybox_version}/.config + pushd busybox-${busybox_version} && make CC=musl-gcc && cp .config ../bb-config && popd + else + echo "Not building BusyBox (program exists)" + echo "Delete busybox-${busybox_version}/busybox to force a rebuild." + fi + +} + +getbash() { + printsection "Fetching bash" + + if [ ! -d bash-${bash_version} ]; then + wget https://ftp.gnu.org/gnu/bash/bash-${bash_version}.tar.gz + fi + + tar -xf bash-${bash_version}.tar.gz + +} + +buildbash() { + printsection "Building bash" + + if [ ! -d bash-${bash_version} ]; then + getbash + fi + if [ ! -f bash-${bash_version}/out/bin/bash ]; then + pushd bash-${bash_version} && CC="musl-gcc -static" ./configure --without-bash-malloc --prefix="$(pwd)/out" && make -j${cores} && make install && popd + fi + +} + +ensure_musl() { + printsection "Checking MUSL source" + + if [ ! -d musl-cross-make ]; then + git clone https://github.com/richfelker/musl-cross-make + else + pushd musl-cross-make && git pull && popd + fi +} + +musl() { + printsection "Making MUSL" + ensure_musl + + FP="$PWD/musl-out" + cp musl.config.mak musl-cross-make/config.mak + sed -i "s|SOMEPATHHERE|$FP|g" musl-cross-make/config.mak + + if [ ! -d musl-out ]; then + mkdir musl-out + pushd musl-cross-make + make -j${cores} + make install + popd + else + echo "Not rebuilding MUSL stuff" + fi + +} + +sg() { + echo "We're in $PWD" + if [[ -f static-get ]]; then + rm static-get + fi + curl -LO https://raw.githubusercontent.com/minos-org/minos-static/master/static-get + chmod +x static-get + + if [[ ! -f ../sg-targets ]]; then + echo "Not using static-get for anything" + else + pushd filesystem/usr + for tgt in $(cat ${rootdir}/sg-targets); do + echo "Getting $tgt" + ../../static-get $tgt + tar -xvf *tar* + rm *tar* + done + popd + fi + +} + +image() { + makekernel + buildbusybox + buildbash + musl + sg + + printsection "Making final image" + + if [ -d ikeda_mount ]; then + sudo rm ikeda_mount -rf + fi + + if [ -f ikeda ]; then + rm ikeda + fi + + echo "Making Ikeda Linux image" + fallocate -l1500M ikeda + ( + echo "n" + echo + echo + echo + echo + echo "w" + ) | fdisk ikeda + + sudo ./as_root.sh + +} + +test() { + if [[ ! -f ikeda ]]; then + image + fi + + if [[ "$1" == "-ng" ]]; then + qemu-system-x86_64 -enable-kvm -nographic ikeda + else + qemu-system-x86_64 -enable-kvm ikeda + fi +} + +# this is the main reason I want to re-write as a Makefile tbh +if [[ "$1" == "" || "$1" == "test" ]]; then + test "$2" +elif [[ "$1" == "image" ]]; then + image +fi + +popd diff --git a/clean.sh b/clean.sh new file mode 100755 index 0000000..d2c1ab7 --- /dev/null +++ b/clean.sh @@ -0,0 +1,2 @@ +rm -rf build/ +cp -r src build diff --git a/ikeda-icon.png b/ikeda-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a03109327d40720a8328543f4d9cc72b1c54cedb GIT binary patch literal 3507 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 literal 0 HcmV?d00001 diff --git a/ikeda-small.png b/ikeda-small.png new file mode 100755 index 0000000000000000000000000000000000000000..37cdd950f1f2580f58551b087517c802f7920cc9 GIT binary patch literal 18785 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 literal 0 HcmV?d00001 diff --git a/ikeda.png b/ikeda.png new file mode 100755 index 0000000000000000000000000000000000000000..0a9ce1d974658fa0e4c0d0afe02dcb641a4269d4 GIT binary patch literal 203282 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
VS;aOy5W1LCev!`}VEk96ezm_oUKh+28K( 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

&E~GvgSk+PK1XAQlIZ0=sQf_P6-?dhbB{q zK(Od-g%G}I82^e0Edb&g1}D8EO6+xCH80i1NNMqkt^45!;Bh7qJv+sC0KmIgMbBr+ znp#c?7OunEBNiL&Ad5ARusK;Qf4AIj>6fs&G_Y83J! zWKhGmdF}Xyl5QYtoyXO_jDC9Qm8X$ct$dqZZCHHDVG|k#01av@0U_Dw0sCJ1V#%(A zXw*_nekcobkY1&1NIuf0bMF`gmu8v|pn8xRA~X?!I?R?(>0xso^7n;c7c!lk!82~t z4{0Ti&Dd)A_u`k+irrerH=Ug9S6SoYtgyfNagUYsTu7^ zv$E^q;oGc)FzJkD<$q)cJXh%o*|RF z0}!$tNgi_->Ie8(L23}pmn$d71R*ptM~;XÐV%VnlvEjThoP&XCq8c7%cRoqw|o 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

hQQgb3<|t%;x6EKQO) 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

tslAZz#L(MhnHc1l}qX;Q{$$cc0qZE!6qAT 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

diff --git a/src/filesystem/etc/group b/src/filesystem/etc/group new file mode 100755 index 0000000..c753969 --- /dev/null +++ b/src/filesystem/etc/group @@ -0,0 +1,36 @@ +root:x:0:root +bin:x:1:root,bin,daemon +daemon:x:2:root,bin,daemon +sys:x:3:root,bin +adm:x:4:root,daemon +tty:x:5: +disk:x:6:root +lp:x:7:daemon +mem:x:8: +kmem:x:9: +wheel:x:10:root +ftp:x:11: +mail:x:12: +uucp:x:14: +log:x:19:root +utmp:x:20: +locate:x:21: +rfkill:x:24: +smmsp:x:25: +proc:x:26: +http:x:33: +games:x:50: +lock:x:54: +uuidd:x:68: +dbus:x:81: +network:x:90: +video:x:91: +audio:x:92: +optical:x:93: +floppy:x:94: +storage:x:95: +scanner:x:96: +input:x:97: +power:x:98: +nobody:x:99: +users:x:100: diff --git a/src/filesystem/etc/hostname b/src/filesystem/etc/hostname new file mode 100755 index 0000000..626751c --- /dev/null +++ b/src/filesystem/etc/hostname @@ -0,0 +1 @@ +ikeda \ No newline at end of file diff --git a/src/filesystem/etc/hosts b/src/filesystem/etc/hosts new file mode 100755 index 0000000..76b3f10 --- /dev/null +++ b/src/filesystem/etc/hosts @@ -0,0 +1,11 @@ +# +# /etc/hosts: static lookup table for host names +# + +# +127.0.0.1 localhost.localdomain localhost + +# In this household we hate ipv6 +#::1 localhost.localdomain localhost + +# End of file diff --git a/src/filesystem/etc/init.d/klogd/run b/src/filesystem/etc/init.d/klogd/run new file mode 100755 index 0000000..78f86c5 --- /dev/null +++ b/src/filesystem/etc/init.d/klogd/run @@ -0,0 +1,3 @@ +#!/bin/sh +sv up /etc/init.d/syslogd || exit 1 +exec klogd -n \ No newline at end of file diff --git a/src/filesystem/etc/init.d/startup b/src/filesystem/etc/init.d/startup new file mode 100755 index 0000000..f836477 --- /dev/null +++ b/src/filesystem/etc/init.d/startup @@ -0,0 +1,77 @@ +#!/bin/sh +# /etc/init.d/startup + +# mount the special pseudo filesytems /proc and /sys +mount -t proc proc /proc -o nosuid,noexec,nodev +mount -t sysfs sys /sys -o nosuid,noexec,nodev + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# NOTE: This was causing issues indeed, but it does seem to be optional +# thought it would probably break if we implemented initramfs + +# /dev isn't required if we boot without initramfs because the kernel +# will have done this for us but it doesn't hurt +# mount -t devtmpfs dev /dev -o mode=0755,nosuid +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +mkdir -p /dev/pts /dev/shm +# /dev/pts contains pseudo-terminals, gid 5 should be the +# tty user group +mount -t devpts devpts /dev/pts -o mode=0620,gid=5,nosuid,noexec + +# /run contains runtime files like pid files and domain sockets +# they don't need to be stored on the disk, we'll store them in RAM +mount -t tmpfs run /run -o mode=0755,nosuid,nodev +mount -t tmpfs shm /dev/shm -o mode=1777,nosuid,nodev +# the nosuid,noexec,nodev options are for security reasons and are not +# strictly necessary, you can read about them in the 'mount' +# man page + +# the kernel does not read /etc/hostname on it's own +# you need to write it in /proc/sys/kernel/hostname to set it +# don't forget to create this file if you want to give your system a name +if [[ -f /etc/hostname ]]; then + cat /etc/hostname > /proc/sys/kernel/hostname +else + echo "mysterious-box" > /proc/sys/kernel/hostname +fi + +# mdev is a mini-udev implementation that +# populates /dev with devices by scanning /sys +# see the util-linux/mdev.c file in the busybox source +# for more information +mdev -s +# Maybe this is just depricated since the 4.x series of kernels? +#echo /sbin/mdev > /proc/sys/kernel/hotplug + +# the "localhost" loopback network interface is +# down at boot, we have to set it 'up' or we won't be able to +# make local network connections +ip link set up dev lo + +# you could add the following to change the keyboard layout at boot +#loadkmap < /usr/share/keymaps/be-latin1.bmap + +# mounts all filesystems in /etc/fstab +mount -a +# make the root writable if this hasn't been done already +mount -o remount,rw / + +# Enable services (lel) +#ln -s /etc/init.d/syslogd /etc/rc.d +#ln -s /etc/init.d/klogd /etc/rc.d +ln -s /etc/init.d/udhcpc /etc/rc.d + +echo "Raising network devices" +OLD="$PWD" +cd /sys/class/net +for dev in $(echo *); do + if [[ ! "$dev" == "lo" && ! "$dev" == "sit0" ]]; then + echo "Trying to raise $dev" + ifup $dev + fi +done +cd $OLD + +# show the fun ascii-art +cat /etc/prelogin \ No newline at end of file diff --git a/src/filesystem/etc/init.d/syslogd/run b/src/filesystem/etc/init.d/syslogd/run new file mode 100755 index 0000000..cdcfeaf --- /dev/null +++ b/src/filesystem/etc/init.d/syslogd/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec syslogd -n diff --git a/src/filesystem/etc/init.d/udhcpc/run b/src/filesystem/etc/init.d/udhcpc/run new file mode 100755 index 0000000..4eb34a9 --- /dev/null +++ b/src/filesystem/etc/init.d/udhcpc/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec udhcpc -f -S #> /dev/null 2>&1 \ No newline at end of file diff --git a/src/filesystem/etc/inittab b/src/filesystem/etc/inittab new file mode 100755 index 0000000..51fb622 --- /dev/null +++ b/src/filesystem/etc/inittab @@ -0,0 +1,8 @@ +::sysinit:/etc/init.d/startup +::respawn:/usr/bin/runsvdir /etc/rc.d +tty1::respawn:/sbin/getty 38400 tty1 +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +::respawn:/sbin/getty -L ttyS0 9600 vt100 +::ctrlaltdel:/bin/umount -a -r +::shutdown:/bin/umount -a -r diff --git a/src/filesystem/etc/issue b/src/filesystem/etc/issue new file mode 100755 index 0000000..24a106c --- /dev/null +++ b/src/filesystem/etc/issue @@ -0,0 +1,2 @@ +Ikeda Linux \r (\l) +It's \d @ \t diff --git a/src/filesystem/etc/locale.sh b/src/filesystem/etc/locale.sh new file mode 100755 index 0000000..11b7dc9 --- /dev/null +++ b/src/filesystem/etc/locale.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ -z "$LANG" ]; then + if [ -n "$XDG_CONFIG_HOME" ] && [ -r "$XDG_CONFIG_HOME/locale.conf" ]; then + . "$XDG_CONFIG_HOME/locale.conf" + elif [ -n "$HOME" ] && [ -r "$HOME/.config/locale.conf" ]; then + . "$HOME/.config/locale.conf" + elif [ -r /etc/locale.conf ]; then + . /etc/locale.conf + fi +fi + +LANG=${LANG:-C} +export LANG +[ -n "$LC_CTYPE" ] && export LC_CTYPE +[ -n "$LC_NUMERIC" ] && export LC_NUMERIC +[ -n "$LC_TIME" ] && export LC_TIME +[ -n "$LC_COLLATE" ] && export LC_COLLATE +[ -n "$LC_MONETARY" ] && export LC_MONETARY +[ -n "$LC_MESSAGES" ] && export LC_MESSAGES +[ -n "$LC_PAPER" ] && export LC_PAPER +[ -n "$LC_NAME" ] && export LC_NAME +[ -n "$LC_ADDRESS" ] && export LC_ADDRESS +[ -n "$LC_TELEPHONE" ] && export LC_TELEPHONE +[ -n "$LC_MEASUREMENT" ] && export LC_MEASUREMENT +[ -n "$LC_IDENTIFICATION" ] && export LC_IDENTIFICATION diff --git a/src/filesystem/etc/motd b/src/filesystem/etc/motd new file mode 100755 index 0000000..ec4c440 --- /dev/null +++ b/src/filesystem/etc/motd @@ -0,0 +1 @@ +Have fun! :) diff --git a/src/filesystem/etc/network/if-pre-up.d/.keep b/src/filesystem/etc/network/if-pre-up.d/.keep new file mode 100644 index 0000000..e177208 --- /dev/null +++ b/src/filesystem/etc/network/if-pre-up.d/.keep @@ -0,0 +1 @@ +# some text \ No newline at end of file diff --git a/src/filesystem/etc/network/if-up.d/.keep b/src/filesystem/etc/network/if-up.d/.keep new file mode 100644 index 0000000..0a67821 --- /dev/null +++ b/src/filesystem/etc/network/if-up.d/.keep @@ -0,0 +1 @@ +# heeho lmao \ No newline at end of file diff --git a/src/filesystem/etc/network/interfaces b/src/filesystem/etc/network/interfaces new file mode 100644 index 0000000..79b0c54 --- /dev/null +++ b/src/filesystem/etc/network/interfaces @@ -0,0 +1,2 @@ +auto eth0 +iface eth0 inet dhcp \ No newline at end of file diff --git a/src/filesystem/etc/os-release b/src/filesystem/etc/os-release new file mode 100755 index 0000000..e30f126 --- /dev/null +++ b/src/filesystem/etc/os-release @@ -0,0 +1,2 @@ +NAME="ikeda linux" +ID=ikeda diff --git a/src/filesystem/etc/passwd b/src/filesystem/etc/passwd new file mode 100755 index 0000000..edeb50c --- /dev/null +++ b/src/filesystem/etc/passwd @@ -0,0 +1,9 @@ +root:x:0:0:root:/root:/usr/bin/zsh +bin:x:1:1:bin:/bin:/bin/false +daemon:x:2:2:daemon:/:/bin/false +mail:x:8:12:mail:/var/spool/mail:/bin/false +ftp:x:14:11:ftp:/srv/ftp:/bin/false +http:x:33:33:http:/srv/http:/bin/false +uuidd:x:68:68:uuidd:/:/bin/false +dbus:x:81:81:dbus:/:/bin/false +nobody:x:99:99:nobody:/:/bin/false diff --git a/src/filesystem/etc/prelogin b/src/filesystem/etc/prelogin new file mode 100755 index 0000000..8cde998 --- /dev/null +++ b/src/filesystem/etc/prelogin @@ -0,0 +1,19 @@ + . + . )c'D~-~~7*J: + ,$"nQG==" T%oMJw*i + jO{W" .;lQmm@Q.K7 p +`/.Xb >Nm:zmw, *Qw&U@| +;[ #= /jMO%>0'~\M `^' b^ +;D{# .pb4f ~>/Wmm=2" +. #b .,bpFB ^` +- 8H # X!= +)Q`W :o NIp~ +.' ?= `n'N+kQv. +=: YQ `Q+,., +'` W~ ={BW%T.l #ut- + ~-: ?dM ``^^^" + ` v \D^. + " .'~ =AM:. + . . +This is a development version. +Things *will* break. \ No newline at end of file diff --git a/src/filesystem/etc/profile b/src/filesystem/etc/profile new file mode 100755 index 0000000..7085e96 --- /dev/null +++ b/src/filesystem/etc/profile @@ -0,0 +1,19 @@ +# /etc/profile + +#Set our umask +umask 022 + +# Set our default path +PATH="/usr/local/sbin:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin" +export PATH + +PS1='\w $ ' +export PS1 + +# Load profiles from /etc/profile.d +if test -d /etc/profile.d/; then + for profile in /etc/profile.d/*.sh; do + test -r "$profile" && . "$profile" + done + unset profile +fi diff --git a/src/filesystem/etc/shadow b/src/filesystem/etc/shadow new file mode 100755 index 0000000..39ebb13 --- /dev/null +++ b/src/filesystem/etc/shadow @@ -0,0 +1,9 @@ +root::14871:::::: +bin:x:14871:::::: +daemon:x:14871:::::: +mail:x:14871:::::: +ftp:x:14871:::::: +http:x:14871:::::: +uuidd:x:14871:::::: +dbus:x:14871:::::: +nobody:x:14871:::::: diff --git a/src/filesystem/etc/skel/.zshrc b/src/filesystem/etc/skel/.zshrc new file mode 100644 index 0000000..61e48ec --- /dev/null +++ b/src/filesystem/etc/skel/.zshrc @@ -0,0 +1 @@ +source /etc/zshrc \ No newline at end of file diff --git a/src/filesystem/etc/syslog.conf b/src/filesystem/etc/syslog.conf new file mode 100755 index 0000000..f5ee12e --- /dev/null +++ b/src/filesystem/etc/syslog.conf @@ -0,0 +1 @@ +kern.* /var/log/kernel.log \ No newline at end of file diff --git a/src/filesystem/etc/zshrc b/src/filesystem/etc/zshrc new file mode 100644 index 0000000..6b825da --- /dev/null +++ b/src/filesystem/etc/zshrc @@ -0,0 +1,7 @@ +emulate sh -c 'source /etc/profile' + +PROMPT="%n@%m %~ [%?] %# " +export PROMPT + +SHELL="/usr/bin/zsh" +export SHELL \ No newline at end of file diff --git a/src/filesystem/root/.zshrc b/src/filesystem/root/.zshrc new file mode 100644 index 0000000..61e48ec --- /dev/null +++ b/src/filesystem/root/.zshrc @@ -0,0 +1 @@ +source /etc/zshrc \ No newline at end of file diff --git a/src/filesystem/usr/local/bin/neofetch b/src/filesystem/usr/local/bin/neofetch new file mode 100755 index 0000000..a9555a6 --- /dev/null +++ b/src/filesystem/usr/local/bin/neofetch @@ -0,0 +1,10983 @@ +#!/usr/bin/env bash +# vim: noai:ts=4:sw=4:expandtab +# shellcheck source=/dev/null +# shellcheck disable=2009 +# +# Neofetch: A command-line system information tool written in bash 3.2+. +# https://github.com/dylanaraps/neofetch +# +# The MIT License (MIT) +# +# Copyright (c) 2015-2020 Dylan Araps +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +version=7.1.0 + +# Fallback to a value of '5' for shells which support bash +# but do not set the 'BASH_' shell variables (osh). +bash_version=${BASH_VERSINFO[0]:-5} +shopt -s eval_unsafe_arith &>/dev/null + +sys_locale=${LANG:-C} +XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-${HOME}/.config} +PATH=$PATH:/usr/xpg4/bin:/usr/sbin:/sbin:/usr/etc:/usr/libexec +reset='\e[0m' +shopt -s nocasematch + +# Speed up script by not using unicode. +LC_ALL=C +LANG=C + +# Fix issues with gsettings. +export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/ + +# Neofetch default config. +read -rd '' config <<'EOF' +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "Memory" memory + + # info "GPU Driver" gpu_driver # Linux/macOS only + # info "Disk" disk + # info "Battery" battery + # info "Font" font + # info "Song" song + # [[ "$player" ]] && prin "Music Player" "$player" + # info "Local IP" local_ip + # info "Public IP" public_ip + # info "Users" users + # info "Locale" locale # This only works on glibc systems. + + info cols +} + +# Title + + +# Hide/Show Fully qualified domain name. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --title_fqdn +title_fqdn="off" + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'tiny', 'off' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'tiny', 'off' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# tiny: '2d 10h 3m' +# off: '2 days, 10 hours, 3 minutes' +uptime_shorthand="on" + + +# Memory + + +# Show memory pecentage in output. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --memory_percent +# +# Example: +# on: '1801MiB / 7881MiB (22%)' +# off: '1801MiB / 7881MiB' +memory_percent="off" + +# Change memory output unit. +# +# Default: 'mib' +# Values: 'kib', 'mib', 'gib' +# Flag: --memory_unit +# +# Example: +# kib '1020928KiB / 7117824KiB' +# mib '1042MiB / 6951MiB' +# gib: ' 0.98GiB / 6.79GiB' +memory_unit="mib" + + +# Packages + + +# Show/Hide Package Manager names. +# +# Default: 'tiny' +# Values: 'on', 'tiny' 'off' +# Flag: --package_managers +# +# Example: +# on: '998 (pacman), 8 (flatpak), 4 (snap)' +# tiny: '908 (pacman, flatpak, snap)' +# off: '908' +package_managers="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="off" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + +# Public IP timeout. +# +# Default: '2' +# Values: 'int' +# Flag: --ip_timeout +public_ip_timeout=2 + +# Local IP interface +# +# Default: 'auto' (interface of default route) +# Values: 'auto', 'en0', 'en1' +# Flag: --ip_interface +local_ip_interface=('auto') + + +# Desktop Environment + + +# Show Desktop Environment version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --de_version +de_version="on" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir', 'none' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +# +# none: 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +disk_subtitle="mount" + +# Disk percent. +# Show/Hide disk percent. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --disk_percent +# +# Example: +# on: 'Disk (/): 74G / 118G (66%)' +# off: 'Disk (/): 74G / 118G' +disk_percent="on" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# dragon +# elisa +# exaile +# gnome-music +# gmusicbrowser +# gogglesmm +# guayadeque +# io.elementary.music +# iTunes +# Music +# juk +# lollypop +# MellowPlayer +# mocp +# mopidy +# mpd +# muine +# netease-cloud-music +# olivia +# playerctl +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# sayonara +# smplayer +# spotify +# strawberry +# tauonmb +# tomahawk +# vlc +# xmms2d +# xnoise +# yarock +music_player="auto" + +# Format to display song information. +# +# Default: '%artist% - %album% - %title%' +# Values: '%artist%', '%album%', '%title%' +# Flag: --song_format +# +# Example: +# default: 'Song: Jet - Get Born - Sgt Major' +song_format="%artist% - %album% - %title%" + +# Print the Artist, Album and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Album: Costello Music' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' +song_shorthand="off" + +# 'mpc' arguments (specify a host, password etc). +# +# Default: '' +# Example: mpc_args=(-h HOST -P PASSWORD) +mpc_args=() + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Info Separator +# Replace the default separator with the specified string. +# +# Default: ':' +# Flag: --separator +# +# Example: +# separator="->": 'Shell-> bash' +# separator=" =": 'WM = dwm' +separator=":" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '15' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 15) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + +# Color Alignment +# +# Default: 'auto' +# Values: 'auto', 'num' +# Flag: --col_offset +# +# Number specifies how far from the left side of the terminal (in spaces) to +# begin printing the columns, in case you want to e.g. center them under your +# text. +# Example: +# col_offset="auto" - Default behavior of neofetch +# col_offset=7 - Leave 7 spaces then print the colors +col_offset="auto" + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', 'off', +# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty', 'ueberzug', +# 'viu' + +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# NOTE: AIX, Hash, Alpine, AlterLinux, Amazon, Anarchy, Android, instantOS, +# Antergos, antiX, "AOSC OS", "AOSC OS/Retro", Apricity, ArchCraft, +# ArcoLinux, ArchBox, ARCHlabs, ArchStrike, XFerience, ArchMerge, Arch, +# Artix, Arya, Bedrock, Bitrig, BlackArch, BLAG, BlankOn, BlueLight, +# bonsai, BSD, BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, +# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, Condres, +# Container_Linux, CRUX, Cucumber, dahlia, Debian, Deepin, DesaOS, +# Devuan, DracOS, DarkOs, Itc, DragonFly, Drauger, Elementary, +# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, +# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, +# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, +# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, Korora, +# KSLinux, Kubuntu, LEDE, LaxerOS, LibreELEC, LFS, Linux_Lite, LMDE, +# Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, Manjaro, Maui, +# Mer, Minix, LinuxMint, Live_Raizo, MX_Linux, Namib, Neptune, NetBSD, +# Netrunner, Nitrux, NixOS, Nurunner, NuTyX, OBRevenge, OpenBSD, +# openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, OpenWrt, +# osmc, Oracle, OS Elbrus, PacBSD, Parabola, Pardus, Parrot, Parsix, +# TrueOS, PCLinuxOS, Pengwin, Peppermint, popos, Porteus, PostMarketOS, +# Proxmox, Puppy, PureOS, Qubes, Quibian, Radix, Raspbian, Reborn_OS, +# Redstar, Redcore, Redhat, Refracted_Devuan, Regata, Regolith, Rosa, +# sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, +# SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, SmartOS, +# Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, t2, +# openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, +# Ubuntu-Cinnamon, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, +# Ubuntu-Studio, Ubuntu, Univention, Venom, Void, semc, Obarun, +# windows10, Windows7, Xubuntu, Zorin, and IRIX have ascii logos. +# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. +# Use '{distro name}_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, +# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. +# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, +# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, +# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, +# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, +# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, +# postmarketOS, and Void have a smaller logo variant. +# Use '{distro name}_small' to use the small variants. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Catimg block size. +# Control the resolution of catimg. +# +# Default: '2' +# Values: '1', '2' +# Flags: --catimg_size +catimg_size="2" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" +EOF + +# DETECT INFORMATION + +get_os() { + # $kernel_name is set in a function called cache_uname and is + # just the output of "uname -s". + case $kernel_name in + Darwin) os=$darwin_name ;; + SunOS) os=Solaris ;; + Haiku) os=Haiku ;; + MINIX) os=MINIX ;; + AIX) os=AIX ;; + IRIX*) os=IRIX ;; + FreeMiNT) os=FreeMiNT ;; + + Linux|GNU*) + os=Linux + ;; + + *BSD|DragonFly|Bitrig) + os=BSD + ;; + + CYGWIN*|MSYS*|MINGW*) + os=Windows + ;; + + *) + printf '%s\n' "Unknown OS detected: '$kernel_name', aborting..." >&2 + printf '%s\n' "Open an issue on GitHub to add support for your OS." >&2 + exit 1 + ;; + esac +} + +get_distro() { + [[ $distro ]] && return + + case $os in + Linux|BSD|MINIX) + if [[ -f /bedrock/etc/bedrock-release && $PATH == */bedrock/cross/* ]]; then + case $distro_shorthand in + on|tiny) distro="Bedrock Linux" ;; + *) distro=$(< /bedrock/etc/bedrock-release) + esac + + elif [[ -f /etc/redstar-release ]]; then + case $distro_shorthand in + on|tiny) distro="Red Star OS" ;; + *) distro="Red Star OS $(awk -F'[^0-9*]' '$0=$2' /etc/redstar-release)" + esac + + elif [[ -f /etc/armbian-release ]]; then + . /etc/armbian-release + distro="Armbian $DISTRIBUTION_CODENAME (${VERSION:-})" + + elif [[ -f /etc/siduction-version ]]; then + case $distro_shorthand in + on|tiny) distro=Siduction ;; + *) distro="Siduction ($(lsb_release -sic))" + esac + + elif [[ -f /etc/mcst_version ]]; then + case $distro_shorthand in + on|tiny) distro="OS Elbrus" ;; + *) distro="OS Elbrus $(< /etc/mcst_version)" + esac + + elif type -p pveversion >/dev/null; then + case $distro_shorthand in + on|tiny) distro="Proxmox VE" ;; + *) + distro=$(pveversion) + distro=${distro#pve-manager/} + distro="Proxmox VE ${distro%/*}" + esac + + elif type -p lsb_release >/dev/null; then + case $distro_shorthand in + on) lsb_flags=-si ;; + tiny) lsb_flags=-si ;; + *) lsb_flags=-sd ;; + esac + distro=$(lsb_release "$lsb_flags") + + elif [[ -f /etc/os-release || \ + -f /usr/lib/os-release || \ + -f /etc/openwrt_release || \ + -f /etc/lsb-release ]]; then + + # Source the os-release file + for file in /etc/lsb-release /usr/lib/os-release \ + /etc/os-release /etc/openwrt_release; do + source "$file" && break + done + + # Format the distro name. + case $distro_shorthand in + on) distro="${NAME:-${DISTRIB_ID}} ${VERSION_ID:-${DISTRIB_RELEASE}}" ;; + tiny) distro="${NAME:-${DISTRIB_ID:-${TAILS_PRODUCT_NAME}}}" ;; + off) distro="${PRETTY_NAME:-${DISTRIB_DESCRIPTION}} ${UBUNTU_CODENAME}" ;; + esac + + elif [[ -f /etc/GoboLinuxVersion ]]; then + case $distro_shorthand in + on|tiny) distro=GoboLinux ;; + *) distro="GoboLinux $(< /etc/GoboLinuxVersion)" + esac + + elif [[ -f /etc/SDE-VERSION ]]; then + distro="$(< /etc/SDE-VERSION)" + case $distro_shorthand in + on|tiny) distro="${distro% *}" ;; + esac + + elif type -p crux >/dev/null; then + distro=$(crux) + case $distro_shorthand in + on) distro=${distro//version} ;; + tiny) distro=${distro//version*} + esac + + elif type -p tazpkg >/dev/null; then + distro="SliTaz $(< /etc/slitaz-release)" + + elif type -p kpt >/dev/null && \ + type -p kpm >/dev/null; then + distro=KSLinux + + elif [[ -d /system/app/ && -d /system/priv-app ]]; then + distro="Android $(getprop ro.build.version.release)" + + # Chrome OS doesn't conform to the /etc/*-release standard. + # While the file is a series of variables they can't be sourced + # by the shell since the values aren't quoted. + elif [[ -f /etc/lsb-release && $(< /etc/lsb-release) == *CHROMEOS* ]]; then + distro='Chrome OS' + + elif type -p guix >/dev/null; then + case $distro_shorthand in + on|tiny) distro="Guix System" ;; + *) distro="Guix System $(guix -V | awk 'NR==1{printf $4}')" + esac + + # Display whether using '-current' or '-release' on OpenBSD. + elif [[ $kernel_name = OpenBSD ]] ; then + read -ra kernel_info <<< "$(sysctl -n kern.version)" + distro=${kernel_info[*]:0:2} + + else + for release_file in /etc/*-release; do + distro+=$(< "$release_file") + done + + if [[ -z $distro ]]; then + case $distro_shorthand in + on|tiny) distro=$kernel_name ;; + *) distro="$kernel_name $kernel_version" ;; + esac + + distro=${distro/DragonFly/DragonFlyBSD} + + # Workarounds for some BSD based distros. + [[ -f /etc/pcbsd-lang ]] && distro=PCBSD + [[ -f /etc/trueos-lang ]] && distro=TrueOS + [[ -f /etc/pacbsd-release ]] && distro=PacBSD + [[ -f /etc/hbsd-update.conf ]] && distro=HardenedBSD + fi + fi + + if [[ $(< /proc/version) == *Microsoft* || $kernel_version == *Microsoft* ]]; then + case $distro_shorthand in + on) distro+=" [Windows 10]" ;; + tiny) distro="Windows 10" ;; + *) distro+=" on Windows 10" ;; + esac + + elif [[ $(< /proc/version) == *chrome-bot* || -f /dev/cros_ec ]]; then + [[ $distro != *Chrome* ]] && + case $distro_shorthand in + on) distro+=" [Chrome OS]" ;; + tiny) distro="Chrome OS" ;; + *) distro+=" on Chrome OS" ;; + esac + fi + + distro=$(trim_quotes "$distro") + distro=${distro/NAME=} + + # Get Ubuntu flavor. + if [[ $distro == "Ubuntu"* ]]; then + case $XDG_CONFIG_DIRS in + *"plasma"*) distro=${distro/Ubuntu/Kubuntu} ;; + *"mate"*) distro=${distro/Ubuntu/Ubuntu MATE} ;; + *"xubuntu"*) distro=${distro/Ubuntu/Xubuntu} ;; + *"Lubuntu"*) distro=${distro/Ubuntu/Lubuntu} ;; + *"budgie"*) distro=${distro/Ubuntu/Ubuntu Budgie} ;; + *"studio"*) distro=${distro/Ubuntu/Ubuntu Studio} ;; + *"cinnamon"*) distro=${distro/Ubuntu/Ubuntu Cinnamon} ;; + esac + fi + ;; + + "Mac OS X"|"macOS") + case $osx_version in + 10.4*) codename="Mac OS X Tiger" ;; + 10.5*) codename="Mac OS X Leopard" ;; + 10.6*) codename="Mac OS X Snow Leopard" ;; + 10.7*) codename="Mac OS X Lion" ;; + 10.8*) codename="OS X Mountain Lion" ;; + 10.9*) codename="OS X Mavericks" ;; + 10.10*) codename="OS X Yosemite" ;; + 10.11*) codename="OS X El Capitan" ;; + 10.12*) codename="macOS Sierra" ;; + 10.13*) codename="macOS High Sierra" ;; + 10.14*) codename="macOS Mojave" ;; + 10.15*) codename="macOS Catalina" ;; + 10.16*) codename="macOS Big Sur" ;; + 11.0*) codename="macOS Big Sur" ;; + *) codename=macOS ;; + esac + + distro="$codename $osx_version $osx_build" + + case $distro_shorthand in + on) distro=${distro/ ${osx_build}} ;; + + tiny) + case $osx_version in + 10.[4-7]*) distro=${distro/${codename}/Mac OS X} ;; + 10.[8-9]*|10.1[0-1]*) distro=${distro/${codename}/OS X} ;; + 10.1[2-6]*|11.0*) distro=${distro/${codename}/macOS} ;; + esac + distro=${distro/ ${osx_build}} + ;; + esac + ;; + + "iPhone OS") + distro="iOS $osx_version" + + # "uname -m" doesn't print architecture on iOS. + os_arch=off + ;; + + Windows) + distro=$(wmic os get Caption) + distro=${distro/Caption} + distro=${distro/Microsoft } + ;; + + Solaris) + case $distro_shorthand in + on|tiny) distro=$(awk 'NR==1 {print $1,$3}' /etc/release) ;; + *) distro=$(awk 'NR==1 {print $1,$2,$3}' /etc/release) ;; + esac + distro=${distro/\(*} + ;; + + Haiku) + distro=Haiku + ;; + + AIX) + distro="AIX $(oslevel)" + ;; + + IRIX) + distro="IRIX ${kernel_version}" + ;; + + FreeMiNT) + distro=FreeMiNT + ;; + esac + + distro=${distro//Enterprise Server} + + [[ $distro ]] || distro="$os (Unknown)" + + # Get OS architecture. + case $os in + Solaris|AIX|Haiku|IRIX|FreeMiNT) + machine_arch=$(uname -p) + ;; + + *) machine_arch=$kernel_machine ;; + esac + + [[ $os_arch == on ]] && \ + distro+=" $machine_arch" + + [[ ${ascii_distro:-auto} == auto ]] && \ + ascii_distro=$(trim "$distro") +} + +get_model() { + case $os in + Linux) + if [[ -d /system/app/ && -d /system/priv-app ]]; then + model="$(getprop ro.product.brand) $(getprop ro.product.model)" + + elif [[ -f /sys/devices/virtual/dmi/id/product_name || + -f /sys/devices/virtual/dmi/id/product_version ]]; then + model=$(< /sys/devices/virtual/dmi/id/product_name) + model+=" $(< /sys/devices/virtual/dmi/id/product_version)" + + elif [[ -f /sys/firmware/devicetree/base/model ]]; then + model=$(< /sys/firmware/devicetree/base/model) + + elif [[ -f /tmp/sysinfo/model ]]; then + model=$(< /tmp/sysinfo/model) + fi + ;; + + "Mac OS X"|"macOS") + if [[ $(kextstat | grep -F -e "FakeSMC" -e "VirtualSMC") != "" ]]; then + model="Hackintosh (SMBIOS: $(sysctl -n hw.model))" + else + model=$(sysctl -n hw.model) + fi + ;; + + "iPhone OS") + case $kernel_machine in + iPad1,1): "iPad" ;; + iPad2,[1-4]): "iPad 2" ;; + iPad3,[1-3]): "iPad 3" ;; + iPad3,[4-6]): "iPad 4" ;; + iPad6,1[12]): "iPad 5" ;; + iPad7,[5-6]): "iPad 6" ;; + iPad7,1[12]): "iPad 7" ;; + iPad4,[1-3]): "iPad Air" ;; + iPad5,[3-4]): "iPad Air 2" ;; + iPad11,[3-4]): "iPad Air 3" ;; + iPad6,[7-8]): "iPad Pro (12.9 Inch)" ;; + iPad6,[3-4]): "iPad Pro (9.7 Inch)" ;; + iPad7,[1-2]): "iPad Pro 2 (12.9 Inch)" ;; + iPad7,[3-4]): "iPad Pro (10.5 Inch)" ;; + iPad8,[1-4]): "iPad Pro (11 Inch)" ;; + iPad8,[5-8]): "iPad Pro 3 (12.9 Inch)" ;; + iPad8,9 | iPad8,10): "iPad Pro 4 (11 Inch)" ;; + iPad8,1[1-2]): "iPad Pro 4 (12.9 Inch)" ;; + iPad2,[5-7]): "iPad mini" ;; + iPad4,[4-6]): "iPad mini 2" ;; + iPad4,[7-9]): "iPad mini 3" ;; + iPad5,[1-2]): "iPad mini 4" ;; + iPad11,[1-2]): "iPad mini 5" ;; + + iPhone1,1): "iPhone" ;; + iPhone1,2): "iPhone 3G" ;; + iPhone2,1): "iPhone 3GS" ;; + iPhone3,[1-3]): "iPhone 4" ;; + iPhone4,1): "iPhone 4S" ;; + iPhone5,[1-2]): "iPhone 5" ;; + iPhone5,[3-4]): "iPhone 5c" ;; + iPhone6,[1-2]): "iPhone 5s" ;; + iPhone7,2): "iPhone 6" ;; + iPhone7,1): "iPhone 6 Plus" ;; + iPhone8,1): "iPhone 6s" ;; + iPhone8,2): "iPhone 6s Plus" ;; + iPhone8,4): "iPhone SE" ;; + iPhone9,[13]): "iPhone 7" ;; + iPhone9,[24]): "iPhone 7 Plus" ;; + iPhone10,[14]): "iPhone 8" ;; + iPhone10,[25]): "iPhone 8 Plus" ;; + iPhone10,[36]): "iPhone X" ;; + iPhone11,2): "iPhone XS" ;; + iPhone11,[46]): "iPhone XS Max" ;; + iPhone11,8): "iPhone XR" ;; + iPhone12,1): "iPhone 11" ;; + iPhone12,3): "iPhone 11 Pro" ;; + iPhone12,5): "iPhone 11 Pro Max" ;; + iPhone12,8): "iPhone SE 2020" ;; + + iPod1,1): "iPod touch" ;; + ipod2,1): "iPod touch 2G" ;; + ipod3,1): "iPod touch 3G" ;; + ipod4,1): "iPod touch 4G" ;; + ipod5,1): "iPod touch 5G" ;; + ipod7,1): "iPod touch 6G" ;; + esac + + model=$_ + ;; + + BSD|MINIX) + model=$(sysctl -n hw.vendor hw.product) + ;; + + Windows) + model=$(wmic computersystem get manufacturer,model) + model=${model/Manufacturer} + model=${model/Model} + ;; + + Solaris) + model=$(prtconf -b | awk -F':' '/banner-name/ {printf $2}') + ;; + + AIX) + model=$(/usr/bin/uname -M) + ;; + + FreeMiNT) + model=$(sysctl -n hw.model) + model=${model/ (_MCH *)} + ;; + esac + + # Remove dummy OEM info. + model=${model//To be filled by O.E.M.} + model=${model//To Be Filled*} + model=${model//OEM*} + model=${model//Not Applicable} + model=${model//System Product Name} + model=${model//System Version} + model=${model//Undefined} + model=${model//Default string} + model=${model//Not Specified} + model=${model//Type1ProductConfigId} + model=${model//INVALID} + model=${model//All Series} + model=${model//�} + + case $model in + "Standard PC"*) model="KVM/QEMU (${model})" ;; + OpenBSD*) model="vmm ($model)" ;; + esac +} + +get_title() { + user=${USER:-$(id -un || printf %s "${HOME/*\/}")} + + case $title_fqdn in + on) hostname=$(hostname -f) ;; + *) hostname=${HOSTNAME:-$(hostname)} ;; + esac + + title=${title_color}${bold}${user}${at_color}@${title_color}${bold}${hostname} + length=$((${#user} + ${#hostname} + 1)) +} + +get_kernel() { + # Since these OS are integrated systems, it's better to skip this function altogether + [[ $os =~ (AIX|IRIX) ]] && return + + # Haiku uses 'uname -v' and not - 'uname -r'. + [[ $os == Haiku ]] && { + kernel=$(uname -v) + return + } + + # In Windows 'uname' may return the info of GNUenv thus use wmic for OS kernel. + [[ $os == Windows ]] && { + kernel=$(wmic os get Version) + kernel=${kernel/Version} + return + } + + case $kernel_shorthand in + on) kernel=$kernel_version ;; + off) kernel="$kernel_name $kernel_version" ;; + esac + + # Hide kernel info if it's identical to the distro info. + [[ $os =~ (BSD|MINIX) && $distro == *"$kernel_name"* ]] && + case $distro_shorthand in + on|tiny) kernel=$kernel_version ;; + *) unset kernel ;; + esac +} + +get_uptime() { + # Get uptime in seconds. + case $os in + Linux|Windows|MINIX) + if [[ -r /proc/uptime ]]; then + s=$(< /proc/uptime) + s=${s/.*} + else + boot=$(date -d"$(uptime -s)" +%s) + now=$(date +%s) + s=$((now - boot)) + fi + ;; + + "Mac OS X"|"macOS"|"iPhone OS"|BSD|FreeMiNT) + boot=$(sysctl -n kern.boottime) + boot=${boot/\{ sec = } + boot=${boot/,*} + + # Get current date in seconds. + now=$(date +%s) + s=$((now - boot)) + ;; + + Solaris) + s=$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}') + s=${s/.*} + ;; + + AIX|IRIX) + t=$(LC_ALL=POSIX ps -o etime= -p 1) + + [[ $t == *-* ]] && { d=${t%%-*}; t=${t#*-}; } + [[ $t == *:*:* ]] && { h=${t%%:*}; t=${t#*:}; } + + h=${h#0} + t=${t#0} + + s=$((${d:-0}*86400 + ${h:-0}*3600 + ${t%%:*}*60 + ${t#*:})) + ;; + + Haiku) + s=$(($(system_time) / 1000000)) + ;; + esac + + d="$((s / 60 / 60 / 24)) days" + h="$((s / 60 / 60 % 24)) hours" + m="$((s / 60 % 60)) minutes" + + # Remove plural if < 2. + ((${d/ *} == 1)) && d=${d/s} + ((${h/ *} == 1)) && h=${h/s} + ((${m/ *} == 1)) && m=${m/s} + + # Hide empty fields. + ((${d/ *} == 0)) && unset d + ((${h/ *} == 0)) && unset h + ((${m/ *} == 0)) && unset m + + uptime=${d:+$d, }${h:+$h, }$m + uptime=${uptime%', '} + uptime=${uptime:-$s seconds} + + # Make the output of uptime smaller. + case $uptime_shorthand in + on) + uptime=${uptime/ minutes/ mins} + uptime=${uptime/ minute/ min} + uptime=${uptime/ seconds/ secs} + ;; + + tiny) + uptime=${uptime/ days/d} + uptime=${uptime/ day/d} + uptime=${uptime/ hours/h} + uptime=${uptime/ hour/h} + uptime=${uptime/ minutes/m} + uptime=${uptime/ minute/m} + uptime=${uptime/ seconds/s} + uptime=${uptime//,} + ;; + esac +} + +get_packages() { + # to adjust the number of pkgs per pkg manager + pkgs_h=0 + + # has: Check if package manager installed. + # dir: Count files or dirs in a glob. + # pac: If packages > 0, log package manager name. + # tot: Count lines in command output. + has() { type -p "$1" >/dev/null && manager=$1; } + dir() { ((packages+=$#)); pac "$(($#-pkgs_h))"; } + pac() { (($1 > 0)) && { managers+=("$1 (${manager})"); manager_string+="${manager}, "; }; } + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$("$@")"; + ((packages+=${#pkgs[@]})); + pac "$((${#pkgs[@]}-pkgs_h))"; + } + + # Redefine tot() for Bedrock Linux. + [[ -f /bedrock/etc/bedrock-release && $PATH == */bedrock/cross/* ]] && { + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$(for s in $(brl list); do strat -r "$s" "$@"; done)" + ((packages+="${#pkgs[@]}")) + pac "$((${#pkgs[@]}-pkgs_h))"; + } + br_prefix="/bedrock/strata/*" + } + + case $os in + Linux|BSD|"iPhone OS"|Solaris) + # Package Manager Programs. + has kiss && tot kiss l + has cpt-list && tot cpt-list + has pacman-key && tot pacman -Qq --color never + has apt && tot apt list + has rpm && tot rpm -qa + has xbps-query && tot xbps-query -l + has apk && tot apk info + has opkg && tot opkg list-installed + has pacman-g2 && tot pacman-g2 -Q + has lvu && tot lvu installed + has tce-status && tot tce-status -i + has pkg_info && tot pkg_info + has tazpkg && pkgs_h=6 tot tazpkg list && ((packages-=6)) + has sorcery && tot gaze installed + has alps && tot alps showinstalled + has butch && tot butch list + has swupd && tot swupd bundle-list --quiet + + # 'mine' conflicts with minesweeper games. + [[ -f /etc/SDE-VERSION ]] && + has mine && tot mine -q + + # Counting files/dirs. + # Variables need to be unquoted here. Only Bedrock Linux is affected. + # $br_prefix is fixed and won't change based on user input so this is safe either way. + # shellcheck disable=SC2086 + { + shopt -s nullglob + has brew && dir "$(brew --cellar)"/* + has emerge && dir ${br_prefix}/var/db/pkg/*/*/ + has Compile && dir ${br_prefix}/Programs/*/ + has eopkg && dir ${br_prefix}/var/lib/eopkg/package/* + has crew && dir ${br_prefix}/usr/local/etc/crew/meta/*.filelist + has pkgtool && dir ${br_prefix}/var/log/packages/* + has scratch && dir ${br_prefix}/var/lib/scratchpkg/index/*/.pkginfo + has kagami && dir ${br_prefix}/var/lib/kagami/pkgs/* + has cave && dir ${br_prefix}/var/db/paludis/repositories/cross-installed/*/data/*/ \ + ${br_prefix}/var/db/paludis/repositories/installed/data/*/ + shopt -u nullglob + } + + # Other (Needs complex command) + has kpm-pkg && ((packages+=$(kpm --get-selections | grep -cv deinstall$))) + + has guix && { + manager=guix-system && tot guix package -p "/run/current-system/profile" -I + manager=guix-user && tot guix package -I + } + + has nix-store && { + nix-user-pkgs() { + nix-store -qR ~/.nix-profile + nix-store -qR /etc/profiles/per-user/"$USER" + } + manager=nix-system && tot nix-store -qR /run/current-system/sw + manager=nix-user && tot nix-user-pkgs + manager=nix-default && tot nix-store -qR /nix/var/nix/profiles/default + } + + # pkginfo is also the name of a python package manager which is painfully slow. + # TODO: Fix this somehow. + has pkginfo && tot pkginfo -i + + case $kernel_name in + FreeBSD|DragonFly) has pkg && tot pkg info ;; + + *) + has pkg && dir /var/db/pkg/* + + ((packages == 0)) && \ + has pkg && tot pkg list + ;; + esac + + # List these last as they accompany regular package managers. + has flatpak && tot flatpak list + has spm && tot spm list -i + has puyo && dir ~/.puyo/installed + + # Snap hangs if the command is run without the daemon running. + # Only run snap if the daemon is also running. + has snap && ps -e | grep -qFm 1 snapd >/dev/null && \ + pkgs_h=1 tot snap list && ((packages-=1)) + + # This is the only standard location for appimages. + # See: https://github.com/AppImage/AppImageKit/wiki + manager=appimage && has appimaged && dir ~/.local/bin/*.appimage + ;; + + "Mac OS X"|"macOS"|MINIX) + has port && pkgs_h=1 tot port installed && ((packages-=1)) + has brew && dir /usr/local/Cellar/* + has pkgin && tot pkgin list + + has nix-store && { + nix-user-pkgs() { + nix-store -qR ~/.nix-profile + nix-store -qR /etc/profiles/per-user/"$USER" + } + manager=nix-system && tot nix-store -qR /run/current-system/sw + manager=nix-user && tot nix-store -qR nix-user-pkgs + } + ;; + + AIX|FreeMiNT) + has lslpp && ((packages+=$(lslpp -J -l -q | grep -cv '^#'))) + has rpm && tot rpm -qa + ;; + + Windows) + case $kernel_name in + CYGWIN*) has cygcheck && tot cygcheck -cd ;; + MSYS*) has pacman && tot pacman -Qq --color never ;; + esac + + # Scoop environment throws errors if `tot scoop list` is used + has scoop && pkgs_h=1 dir ~/scoop/apps/* && ((packages-=1)) + + # Count chocolatey packages. + [[ -d /cygdrive/c/ProgramData/chocolatey/lib ]] && \ + dir /cygdrive/c/ProgramData/chocolatey/lib/* + ;; + + Haiku) + has pkgman && dir /boot/system/package-links/* + packages=${packages/pkgman/depot} + ;; + + IRIX) + manager=swpkg + pkgs_h=3 tot versions -b && ((packages-=3)) + ;; + esac + + if ((packages == 0)); then + unset packages + + elif [[ $package_managers == on ]]; then + printf -v packages '%s, ' "${managers[@]}" + packages=${packages%,*} + + elif [[ $package_managers == tiny ]]; then + packages+=" (${manager_string%,*})" + fi + + packages=${packages/pacman-key/pacman} +} + +get_shell() { + case $shell_path in + on) shell="$SHELL " ;; + off) shell="${SHELL##*/} " ;; + esac + + [[ $shell_version != on ]] && return + + case ${shell_name:=${SHELL##*/}} in + bash) + [[ $BASH_VERSION ]] || + BASH_VERSION=$("$SHELL" -c "printf %s \"\$BASH_VERSION\"") + + shell+=${BASH_VERSION/-*} + ;; + + sh|ash|dash|es) ;; + + *ksh) + shell+=$("$SHELL" -c "printf %s \"\$KSH_VERSION\"") + shell=${shell/ * KSH} + shell=${shell/version} + ;; + + osh) + if [[ $OIL_VERSION ]]; then + shell+=$OIL_VERSION + else + shell+=$("$SHELL" -c "printf %s \"\$OIL_VERSION\"") + fi + ;; + + tcsh) + shell+=$("$SHELL" -c "printf %s \$tcsh") + ;; + + yash) + shell+=$("$SHELL" --version 2>&1) + shell=${shell/ $shell_name} + shell=${shell/ Yet another shell} + shell=${shell/Copyright*} + ;; + + *) + shell+=$("$SHELL" --version 2>&1) + shell=${shell/ $shell_name} + ;; + esac + + # Remove unwanted info. + shell=${shell/, version} + shell=${shell/xonsh\//xonsh } + shell=${shell/options*} + shell=${shell/\(*\)} +} + +get_de() { + # If function was run, stop here. + ((de_run == 1)) && return + + case $os in + "Mac OS X"|"macOS") de=Aqua ;; + + Windows) + case $distro in + *"Windows 10"*) + de=Fluent + ;; + + *"Windows 8"*) + de=Metro + ;; + + *) + de=Aero + ;; + esac + ;; + + FreeMiNT) + freemint_wm=(/proc/*) + + case ${freemint_wm[*]} in + *thing*) de=Thing ;; + *jinnee*) de=Jinnee ;; + *tera*) de=Teradesk ;; + *neod*) de=NeoDesk ;; + *zdesk*) de=zDesk ;; + *mdesk*) de=mDesk ;; + esac + ;; + + *) + ((wm_run != 1)) && get_wm + + # Temporary support for Regolith Linux + if [[ $DESKTOP_SESSION == regolith ]]; then + de=Regolith + + elif [[ $XDG_CURRENT_DESKTOP ]]; then + de=${XDG_CURRENT_DESKTOP/X\-} + de=${de/Budgie:GNOME/Budgie} + de=${de/:Unity7:ubuntu} + + elif [[ $DESKTOP_SESSION ]]; then + de=${DESKTOP_SESSION##*/} + + elif [[ $GNOME_DESKTOP_SESSION_ID ]]; then + de=GNOME + + elif [[ $MATE_DESKTOP_SESSION_ID ]]; then + de=MATE + + elif [[ $TDE_FULL_SESSION ]]; then + de=Trinity + fi + + # When a window manager is started from a display manager + # the desktop variables are sometimes also set to the + # window manager name. This checks to see if WM == DE + # and discards the DE value. + [[ $de == "$wm" ]] && { unset -v de; return; } + ;; + esac + + # Fallback to using xprop. + [[ $DISPLAY && -z $de ]] && type -p xprop &>/dev/null && \ + de=$(xprop -root | awk '/KDE_SESSION_VERSION|^_MUFFIN|xfce4|xfce5/') + + # Format strings. + case $de in + KDE_SESSION_VERSION*) de=KDE${de/* = } ;; + *xfce4*) de=Xfce4 ;; + *xfce5*) de=Xfce5 ;; + *xfce*) de=Xfce ;; + *mate*) de=MATE ;; + *GNOME*) de=GNOME ;; + *MUFFIN*) de=Cinnamon ;; + esac + + ((${KDE_SESSION_VERSION:-0} >= 4)) && de=${de/KDE/Plasma} + + if [[ $de_version == on && $de ]]; then + case $de in + Plasma*) de_ver=$(plasmashell --version) ;; + MATE*) de_ver=$(mate-session --version) ;; + Xfce*) de_ver=$(xfce4-session --version) ;; + GNOME*) de_ver=$(gnome-shell --version) ;; + Cinnamon*) de_ver=$(cinnamon --version) ;; + Deepin*) de_ver=$(awk -F'=' '/Version/ {print $2}' /etc/deepin-version) ;; + Budgie*) de_ver=$(budgie-desktop --version) ;; + LXQt*) de_ver=$(lxqt-session --version) ;; + Lumina*) de_ver=$(lumina-desktop --version 2>&1) ;; + Trinity*) de_ver=$(tde-config --version) ;; + Unity*) de_ver=$(unity --version) ;; + esac + + de_ver=${de_ver/*TDE:} + de_ver=${de_ver/tde-config*} + de_ver=${de_ver/liblxqt*} + de_ver=${de_ver/Copyright*} + de_ver=${de_ver/)*} + de_ver=${de_ver/* } + de_ver=${de_ver//\"} + + de+=" $de_ver" + fi + + # TODO: + # - New config option + flag: --de_display_server on/off ? + # - Add display of X11, Arcan and anything else relevant. + [[ $de && $WAYLAND_DISPLAY ]] && + de+=" (Wayland)" + + de_run=1 +} + +get_wm() { + # If function was run, stop here. + ((wm_run == 1)) && return + + case $kernel_name in + *OpenBSD*) ps_flags=(x -c) ;; + *) ps_flags=(-e) ;; + esac + + if [[ -O "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" ]]; then + if tmp_pid="$(lsof -t "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)" || + tmp_pid="$(fuser "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)"; then + wm="$(ps -p "${tmp_pid}" -ho comm=)" + else + # lsof may not exist, or may need root on some systems. Similarly fuser. + # On those systems we search for a list of known window managers, this can mistakenly + # match processes for another user or session and will miss unlisted window managers. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ + -e arcan \ + -e asc \ + -e clayland \ + -e dwc \ + -e fireplace \ + -e gnome-shell \ + -e greenfield \ + -e grefsen \ + -e kwin \ + -e lipstick \ + -e maynard \ + -e mazecompositor \ + -e motorcar \ + -e orbital \ + -e orbment \ + -e perceptia \ + -e rustland \ + -e sway \ + -e ulubis \ + -e velox \ + -e wavy \ + -e way-cooler \ + -e wayfire \ + -e wayhouse \ + -e westeros \ + -e westford \ + -e weston) + fi + + elif [[ $DISPLAY && $os != "Mac OS X" && $os != "macOS" && $os != FreeMiNT ]]; then + # non-EWMH WMs. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o \ + -e "[s]owm" \ + -e "[c]atwm" \ + -e "[f]vwm" \ + -e "[d]wm" \ + -e "[2]bwm" \ + -e "[m]onsterwm" \ + -e "[t]inywm" \ + -e "[x]11fs" \ + -e "[x]monad") + + [[ -z $wm ]] && type -p xprop &>/dev/null && { + id=$(xprop -root -notype _NET_SUPPORTING_WM_CHECK) + id=${id##* } + wm=$(xprop -id "$id" -notype -len 100 -f _NET_WM_NAME 8t) + wm=${wm/*WM_NAME = } + wm=${wm/\"} + wm=${wm/\"*} + } + + else + case $os in + "Mac OS X"|"macOS") + ps_line=$(ps -e | grep -o \ + -e "[S]pectacle" \ + -e "[A]methyst" \ + -e "[k]wm" \ + -e "[c]hun[k]wm" \ + -e "[y]abai" \ + -e "[R]ectangle") + + case $ps_line in + *chunkwm*) wm=chunkwm ;; + *kwm*) wm=Kwm ;; + *yabai*) wm=yabai ;; + *Amethyst*) wm=Amethyst ;; + *Spectacle*) wm=Spectacle ;; + *Rectangle*) wm=Rectangle ;; + *) wm="Quartz Compositor" ;; + esac + ;; + + Windows) + wm=$( + tasklist | + + grep -Fom 1 \ + -e bugn \ + -e Windawesome \ + -e blackbox \ + -e emerge \ + -e litestep + ) + + [[ $wm == blackbox ]] && + wm="bbLean (Blackbox)" + + wm=${wm:+$wm, }DWM.exe + ;; + + FreeMiNT) + freemint_wm=(/proc/*) + + case ${freemint_wm[*]} in + *xaaes* | *xaloader*) wm=XaAES ;; + *myaes*) wm=MyAES ;; + *naes*) wm=N.AES ;; + geneva) wm=Geneva ;; + *) wm="Atari AES" ;; + esac + ;; + esac + fi + + # Rename window managers to their proper values. + [[ $wm == *WINDOWMAKER* ]] && wm=wmaker + [[ $wm == *GNOME*Shell* ]] && wm=Mutter + + wm_run=1 +} + +get_wm_theme() { + ((wm_run != 1)) && get_wm + ((de_run != 1)) && get_de + + case $wm in + E16) + wm_theme=$(awk -F "= " '/theme.name/ {print $2}' "${HOME}/.e16/e_config--0.0.cfg") + ;; + + Sawfish) + wm_theme=$(awk -F '\\(quote|\\)' '/default-frame-style/ {print $(NF-4)}' \ + "$HOME/.sawfish/custom") + ;; + + Cinnamon|Muffin|"Mutter (Muffin)") + detheme=$(gsettings get org.cinnamon.theme name) + wm_theme=$(gsettings get org.cinnamon.desktop.wm.preferences theme) + wm_theme="$detheme ($wm_theme)" + ;; + + Compiz|Mutter|Gala) + if type -p gsettings >/dev/null; then + wm_theme=$(gsettings get org.gnome.shell.extensions.user-theme name) + + [[ ${wm_theme//\'} ]] || \ + wm_theme=$(gsettings get org.gnome.desktop.wm.preferences theme) + + elif type -p gconftool-2 >/dev/null; then + wm_theme=$(gconftool-2 -g /apps/metacity/general/theme) + fi + ;; + + Metacity*) + if [[ $de == Deepin ]]; then + wm_theme=$(gsettings get com.deepin.wrap.gnome.desktop.wm.preferences theme) + + elif [[ $de == MATE ]]; then + wm_theme=$(gsettings get org.mate.Marco.general theme) + + else + wm_theme=$(gconftool-2 -g /apps/metacity/general/theme) + fi + ;; + + E17|Enlightenment) + if type -p eet >/dev/null; then + wm_theme=$(eet -d "$HOME/.e/e/config/standard/e.cfg" config |\ + awk '/value \"file\" string.*.edj/ {print $4}') + wm_theme=${wm_theme##*/} + wm_theme=${wm_theme%.*} + fi + ;; + + Fluxbox) + [[ -f $HOME/.fluxbox/init ]] && + wm_theme=$(awk -F "/" '/styleFile/ {print $NF}' "$HOME/.fluxbox/init") + ;; + + IceWM*) + [[ -f $HOME/.icewm/theme ]] && + wm_theme=$(awk -F "[\",/]" '!/#/ {print $2}' "$HOME/.icewm/theme") + ;; + + Openbox) + case $de in + LXDE*) ob_file=lxde-rc ;; + LXQt*) ob_file=lxqt-rc ;; + *) ob_file=rc ;; + esac + + ob_file=$XDG_CONFIG_HOME/openbox/$ob_file.xml + + [[ -f $ob_file ]] && + wm_theme=$(awk '// {while (getline n) {if (match(n, //)) + {l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$ob_file") + ;; + + PekWM) + [[ -f $HOME/.pekwm/config ]] && + wm_theme=$(awk -F "/" '/Theme/{gsub(/\"/,""); print $NF}' "$HOME/.pekwm/config") + ;; + + Xfwm4) + [[ -f $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml ]] && + wm_theme=$(xfconf-query -c xfwm4 -p /general/theme) + ;; + + KWin*) + kde_config_dir + kwinrc=$kde_config_dir/kwinrc + kdebugrc=$kde_config_dir/kdebugrc + + if [[ -f $kwinrc ]]; then + wm_theme=$(awk '/theme=/ { + gsub(/theme=.*qml_|theme=.*svg__/,"",$0); + print $0; + exit + }' "$kwinrc") + + [[ "$wm_theme" ]] || + wm_theme=$(awk '/library=org.kde/ { + gsub(/library=org.kde./,"",$0); + print $0; + exit + }' "$kwinrc") + + [[ $wm_theme ]] || + wm_theme=$(awk '/PluginLib=kwin3_/ { + gsub(/PluginLib=kwin3_/,"",$0); + print $0; + exit + }' "$kwinrc") + + elif [[ -f $kdebugrc ]]; then + wm_theme=$(awk '/(decoration)/ {gsub(/\[/,"",$1); print $1; exit}' "$kdebugrc") + fi + + wm_theme=${wm_theme/theme=} + ;; + + "Quartz Compositor") + global_preferences=$HOME/Library/Preferences/.GlobalPreferences.plist + wm_theme=$(PlistBuddy -c "Print AppleInterfaceStyle" "$global_preferences") + wm_theme_color=$(PlistBuddy -c "Print AppleAccentColor" "$global_preferences") + + [[ "$wm_theme" ]] || + wm_theme=Light + + case $wm_theme_color in + -1) wm_theme_color=Graphite ;; + 0) wm_theme_color=Red ;; + 1) wm_theme_color=Orange ;; + 2) wm_theme_color=Yellow ;; + 3) wm_theme_color=Green ;; + 5) wm_theme_color=Purple ;; + 6) wm_theme_color=Pink ;; + *) wm_theme_color=Blue ;; + esac + + wm_theme="$wm_theme_color ($wm_theme)" + ;; + + *Explorer) + path=/proc/registry/HKEY_CURRENT_USER/Software/Microsoft + path+=/Windows/CurrentVersion/Themes/CurrentTheme + + wm_theme=$(head -n1 "$path") + wm_theme=${wm_theme##*\\} + wm_theme=${wm_theme%.*} + ;; + + Blackbox|bbLean*) + path=$(wmic process get ExecutablePath | grep -F "blackbox") + path=${path//\\/\/} + + wm_theme=$(grep '^session\.styleFile:' "${path/\.exe/.rc}") + wm_theme=${wm_theme/session\.styleFile: } + wm_theme=${wm_theme##*\\} + wm_theme=${wm_theme%.*} + ;; + esac + + wm_theme=$(trim_quotes "$wm_theme") +} + +get_cpu() { + case $os in + "Linux" | "MINIX" | "Windows") + # Get CPU name. + cpu_file="/proc/cpuinfo" + + case $kernel_machine in + "frv" | "hppa" | "m68k" | "openrisc" | "or"* | "powerpc" | "ppc"* | "sparc"*) + cpu="$(awk -F':' '/^cpu\t|^CPU/ {printf $2; exit}' "$cpu_file")" + ;; + + "s390"*) + cpu="$(awk -F'=' '/machine/ {print $4; exit}' "$cpu_file")" + ;; + + "ia64" | "m32r") + cpu="$(awk -F':' '/model/ {print $2; exit}' "$cpu_file")" + [[ -z "$cpu" ]] && cpu="$(awk -F':' '/family/ {printf $2; exit}' "$cpu_file")" + ;; + + *) + cpu="$(awk -F '\\s*: | @' \ + '/model name|Hardware|Processor|^cpu model|chip type|^cpu type/ { + cpu=$2; if ($1 == "Hardware") exit } END { print cpu }' "$cpu_file")" + ;; + esac + + speed_dir="/sys/devices/system/cpu/cpu0/cpufreq" + + # Select the right temperature file. + for temp_dir in /sys/class/hwmon/*; do + [[ "$(< "${temp_dir}/name")" =~ (cpu_thermal|coretemp|fam15h_power|k10temp) ]] && { + temp_dirs=("$temp_dir"/temp*_input) + temp_dir=${temp_dirs[0]} + break + } + done + + # Get CPU speed. + if [[ -d "$speed_dir" ]]; then + # Fallback to bios_limit if $speed_type fails. + speed="$(< "${speed_dir}/${speed_type}")" ||\ + speed="$(< "${speed_dir}/bios_limit")" ||\ + speed="$(< "${speed_dir}/scaling_max_freq")" ||\ + speed="$(< "${speed_dir}/cpuinfo_max_freq")" + speed="$((speed / 1000))" + + else + speed="$(awk -F ': |\\.' '/cpu MHz|^clock/ {printf $2; exit}' "$cpu_file")" + speed="${speed/MHz}" + fi + + # Get CPU temp. + [[ -f "$temp_dir" ]] && deg="$(($(< "$temp_dir") * 100 / 10000))" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(grep -c "^processor" "$cpu_file")" ;; + "physical") cores="$(awk '/^core id/&&!a[$0]++{++i} END {print i}' "$cpu_file")" ;; + esac + ;; + + "Mac OS X"|"macOS") + cpu="$(sysctl -n machdep.cpu.brand_string)" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(sysctl -n hw.logicalcpu_max)" ;; + "physical") cores="$(sysctl -n hw.physicalcpu_max)" ;; + esac + ;; + + "iPhone OS") + case $kernel_machine in + "iPhone1,"[1-2] | "iPod1,1"): "Samsung S5L8900 (1) @ 412MHz" ;; + "iPhone2,1"): "Samsung S5PC100 (1) @ 600MHz" ;; + "iPhone3,"[1-3] | "iPod4,1"): "Apple A4 (1) @ 800MHz" ;; + "iPhone4,1" | "iPod5,1"): "Apple A5 (2) @ 800MHz" ;; + "iPhone5,"[1-4]): "Apple A6 (2) @ 1.3GHz" ;; + "iPhone6,"[1-2]): "Apple A7 (2) @ 1.3GHz" ;; + "iPhone7,"[1-2]): "Apple A8 (2) @ 1.4GHz" ;; + "iPhone8,"[1-4] | "iPad6,1"[12]): "Apple A9 (2) @ 1.85GHz" ;; + "iPhone9,"[1-4] | "iPad7,"[5-6] | "iPad7,1"[1-2]): + "Apple A10 Fusion (4) @ 2.34GHz" + ;; + "iPhone10,"[1-6]): "Apple A11 Bionic (6) @ 2.39GHz" ;; + "iPhone11,"[2468] | "iPad11,"[1-4]): "Apple A12 Bionic (6) @ 2.49GHz" ;; + "iPhone12,"[1358]): "Apple A13 Bionic (6) @ 2.65GHz" ;; + + "iPod2,1"): "Samsung S5L8720 (1) @ 533MHz" ;; + "iPod3,1"): "Samsung S5L8922 (1) @ 600MHz" ;; + "iPod7,1"): "Apple A8 (2) @ 1.1GHz" ;; + "iPad1,1"): "Apple A4 (1) @ 1GHz" ;; + "iPad2,"[1-7]): "Apple A5 (2) @ 1GHz" ;; + "iPad3,"[1-3]): "Apple A5X (2) @ 1GHz" ;; + "iPad3,"[4-6]): "Apple A6X (2) @ 1.4GHz" ;; + "iPad4,"[1-3]): "Apple A7 (2) @ 1.4GHz" ;; + "iPad4,"[4-9]): "Apple A7 (2) @ 1.4GHz" ;; + "iPad5,"[1-2]): "Apple A8 (2) @ 1.5GHz" ;; + "iPad5,"[3-4]): "Apple A8X (3) @ 1.5GHz" ;; + "iPad6,"[3-4]): "Apple A9X (2) @ 2.16GHz" ;; + "iPad6,"[7-8]): "Apple A9X (2) @ 2.26GHz" ;; + "iPad7,"[1-4]): "Apple A10X Fusion (6) @ 2.39GHz" ;; + "iPad8,"[1-8]): "Apple A12X Bionic (8) @ 2.49GHz" ;; + "iPad8,9" | "iPad8,1"[0-2]): "Apple A12Z Bionic (8) @ 2.49GHz" ;; + esac + cpu="$_" + ;; + + "BSD") + # Get CPU name. + cpu="$(sysctl -n hw.model)" + cpu="${cpu/[0-9]\.*}" + cpu="${cpu/ @*}" + + # Get CPU speed. + speed="$(sysctl -n hw.cpuspeed)" + [[ -z "$speed" ]] && speed="$(sysctl -n hw.clockrate)" + + # Get CPU cores. + cores="$(sysctl -n hw.ncpu)" + + # Get CPU temp. + case $kernel_name in + "FreeBSD"* | "DragonFly"* | "NetBSD"*) + deg="$(sysctl -n dev.cpu.0.temperature)" + deg="${deg/C}" + ;; + "OpenBSD"* | "Bitrig"*) + deg="$(sysctl hw.sensors | \ + awk -F'=|degC' '/(ksmn|adt|lm|cpu)0.temp0/ {printf("%2.1f", $2); exit}')" + ;; + esac + ;; + + "Solaris") + # Get CPU name. + cpu="$(psrinfo -pv)" + cpu="${cpu//*$'\n'}" + cpu="${cpu/[0-9]\.*}" + cpu="${cpu/ @*}" + cpu="${cpu/\(portid*}" + + # Get CPU speed. + speed="$(psrinfo -v | awk '/operates at/ {print $6; exit}')" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(kstat -m cpu_info | grep -c -F "chip_id")" ;; + "physical") cores="$(psrinfo -p)" ;; + esac + ;; + + "Haiku") + # Get CPU name. + cpu="$(sysinfo -cpu | awk -F '\\"' '/CPU #0/ {print $2}')" + cpu="${cpu/@*}" + + # Get CPU speed. + speed="$(sysinfo -cpu | awk '/running at/ {print $NF; exit}')" + speed="${speed/MHz}" + + # Get CPU cores. + cores="$(sysinfo -cpu | grep -c -F 'CPU #')" + ;; + + "AIX") + # Get CPU name. + cpu="$(lsattr -El proc0 -a type | awk '{printf $2}')" + + # Get CPU speed. + speed="$(prtconf -s | awk -F':' '{printf $2}')" + speed="${speed/MHz}" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") + cores="$(lparstat -i | awk -F':' '/Online Virtual CPUs/ {printf $2}')" + ;; + + "physical") + cores="$(lparstat -i | awk -F':' '/Active Physical CPUs/ {printf $2}')" + ;; + esac + ;; + + "IRIX") + # Get CPU name. + cpu="$(hinv -c processor | awk -F':' '/CPU:/ {printf $2}')" + + # Get CPU speed. + speed="$(hinv -c processor | awk '/MHZ/ {printf $2}')" + + # Get CPU cores. + cores="$(sysconf NPROC_ONLN)" + ;; + + "FreeMiNT") + cpu="$(awk -F':' '/CPU:/ {printf $2}' /kern/cpuinfo)" + speed="$(awk -F '[:.M]' '/Clocking:/ {printf $2}' /kern/cpuinfo)" + ;; + esac + + # Remove un-needed patterns from cpu output. + cpu="${cpu//(TM)}" + cpu="${cpu//(tm)}" + cpu="${cpu//(R)}" + cpu="${cpu//(r)}" + cpu="${cpu//CPU}" + cpu="${cpu//Processor}" + cpu="${cpu//Dual-Core}" + cpu="${cpu//Quad-Core}" + cpu="${cpu//Six-Core}" + cpu="${cpu//Eight-Core}" + cpu="${cpu//[1-9][0-9]-Core}" + cpu="${cpu//[0-9]-Core}" + cpu="${cpu//, * Compute Cores}" + cpu="${cpu//Core / }" + cpu="${cpu//(\"AuthenticAMD\"*)}" + cpu="${cpu//with Radeon * Graphics}" + cpu="${cpu//, altivec supported}" + cpu="${cpu//FPU*}" + cpu="${cpu//Chip Revision*}" + cpu="${cpu//Technologies, Inc}" + cpu="${cpu//Core2/Core 2}" + + # Trim spaces from core and speed output + cores="${cores//[[:space:]]}" + speed="${speed//[[:space:]]}" + + # Remove CPU brand from the output. + if [[ "$cpu_brand" == "off" ]]; then + cpu="${cpu/AMD }" + cpu="${cpu/Intel }" + cpu="${cpu/Core? Duo }" + cpu="${cpu/Qualcomm }" + fi + + # Add CPU cores to the output. + [[ "$cpu_cores" != "off" && "$cores" ]] && \ + case $os in + "Mac OS X"|"macOS") cpu="${cpu/@/(${cores}) @}" ;; + *) cpu="$cpu ($cores)" ;; + esac + + # Add CPU speed to the output. + if [[ "$cpu_speed" != "off" && "$speed" ]]; then + if (( speed < 1000 )); then + cpu="$cpu @ ${speed}MHz" + else + [[ "$speed_shorthand" == "on" ]] && speed="$((speed / 100))" + speed="${speed:0:1}.${speed:1}" + cpu="$cpu @ ${speed}GHz" + fi + fi + + # Add CPU temp to the output. + if [[ "$cpu_temp" != "off" && "$deg" ]]; then + deg="${deg//.}" + + # Convert to Fahrenheit if enabled + [[ "$cpu_temp" == "F" ]] && deg="$((deg * 90 / 50 + 320))" + + # Format the output + deg="[${deg/${deg: -1}}.${deg: -1}°${cpu_temp:-C}]" + cpu="$cpu $deg" + fi +} + +get_gpu() { + case $os in + "Linux") + # Read GPUs into array. + gpu_cmd="$(lspci -mm | awk -F '\"|\" \"|\\(' \ + '/"Display|"3D|"VGA/ {a[$0] = $1 " " $3 " " $4} + END {for(i in a) {if(!seen[a[i]]++) print a[i]}}')" + IFS=$'\n' read -d "" -ra gpus <<< "$gpu_cmd" + + # Remove duplicate Intel Graphics outputs. + # This fixes cases where the outputs are both + # Intel but not entirely identical. + # + # Checking the first two array elements should + # be safe since there won't be 2 intel outputs if + # there's a dedicated GPU in play. + [[ "${gpus[0]}" == *Intel* && "${gpus[1]}" == *Intel* ]] && unset -v "gpus[0]" + + for gpu in "${gpus[@]}"; do + # GPU shorthand tests. + [[ "$gpu_type" == "dedicated" && "$gpu" == *Intel* ]] || \ + [[ "$gpu_type" == "integrated" && ! "$gpu" == *Intel* ]] && \ + { unset -v gpu; continue; } + + case $gpu in + *"Advanced"*) + brand="${gpu/*AMD*ATI*/AMD ATI}" + brand="${brand:-${gpu/*AMD*/AMD}}" + brand="${brand:-${gpu/*ATI*/ATi}}" + + gpu="${gpu/\[AMD\/ATI\] }" + gpu="${gpu/\[AMD\] }" + gpu="${gpu/OEM }" + gpu="${gpu/Advanced Micro Devices, Inc.}" + gpu="${gpu/*\[}" + gpu="${gpu/\]*}" + gpu="$brand $gpu" + ;; + + *"NVIDIA"*) + gpu="${gpu/*\[}" + gpu="${gpu/\]*}" + gpu="NVIDIA $gpu" + ;; + + *"Intel"*) + gpu="${gpu/*Intel/Intel}" + gpu="${gpu/\(R\)}" + gpu="${gpu/Corporation}" + gpu="${gpu/ \(*}" + gpu="${gpu/Integrated Graphics Controller}" + gpu="${gpu/*Xeon*/Intel HD Graphics}" + + [[ -z "$(trim "$gpu")" ]] && gpu="Intel Integrated Graphics" + ;; + + *"MCST"*) + gpu="${gpu/*MCST*MGA2*/MCST MGA2}" + ;; + + *"VirtualBox"*) + gpu="VirtualBox Graphics Adapter" + ;; + + *) continue ;; + esac + + if [[ "$gpu_brand" == "off" ]]; then + gpu="${gpu/AMD }" + gpu="${gpu/NVIDIA }" + gpu="${gpu/Intel }" + fi + + prin "${subtitle:+${subtitle}${gpu_name}}" "$gpu" + done + + return + ;; + + "Mac OS X"|"macOS") + if [[ -f "${cache_dir}/neofetch/gpu" ]]; then + source "${cache_dir}/neofetch/gpu" + + else + gpu="$(system_profiler SPDisplaysDataType |\ + awk -F': ' '/^\ *Chipset Model:/ {printf $2 ", "}')" + gpu="${gpu//\/ \$}" + gpu="${gpu%,*}" + + cache "gpu" "$gpu" + fi + ;; + + "iPhone OS") + case $kernel_machine in + "iPhone1,"[1-2]): "PowerVR MBX Lite 3D" ;; + "iPhone2,1" | "iPhone3,"[1-3] | "iPod3,1" | "iPod4,1" | "iPad1,1"): + "PowerVR SGX535" + ;; + "iPhone4,1" | "iPad2,"[1-7] | "iPod5,1"): "PowerVR SGX543MP2" ;; + "iPhone5,"[1-4]): "PowerVR SGX543MP3" ;; + "iPhone6,"[1-2] | "iPad4,"[1-9]): "PowerVR G6430" ;; + "iPhone7,"[1-2] | "iPod7,1" | "iPad5,"[1-2]): "PowerVR GX6450" ;; + "iPhone8,"[1-4] | "iPad6,1"[12]): "PowerVR GT7600" ;; + "iPhone9,"[1-4] | "iPad7,"[5-6]): "PowerVR GT7600 Plus" ;; + "iPhone10,"[1-6]): "Apple Designed GPU (A11)" ;; + "iPhone11,"[2468]): "Apple Designed GPU (A12)" ;; + "iPhone12,"[1358]): "Apple Designed GPU (A13)" ;; + + "iPad3,"[1-3]): "PowerVR SGX534MP4" ;; + "iPad3,"[4-6]): "PowerVR SGX554MP4" ;; + "iPad5,"[3-4]): "PowerVR GXA6850" ;; + "iPad6,"[3-8]): "PowerVR 7XT" ;; + + "iPod1,1" | "iPod2,1") + : "PowerVR MBX Lite" + ;; + esac + gpu="$_" + ;; + + "Windows") + while read -r line; do + line=$(trim "$line") + + [[ -z $win_gpu ]] || [[ -z "$line" ]] && { + win_gpu=1 + continue + } + + prin "${subtitle:+${subtitle}${gpu_name}}" "$line" + done < <(wmic path Win32_VideoController get caption) + ;; + + "Haiku") + gpu="$(listdev | grep -A2 -F 'device Display controller' |\ + awk -F':' '/device beef/ {print $2}')" + ;; + + *) + case $kernel_name in + "FreeBSD"* | "DragonFly"*) + gpu="$(pciconf -lv | grep -B 4 -F "VGA" | grep -F "device")" + gpu="${gpu/*device*= }" + gpu="$(trim_quotes "$gpu")" + ;; + + *) + gpu="$(glxinfo -B | grep -F 'OpenGL renderer string')" + gpu="${gpu/OpenGL renderer string: }" + ;; + esac + ;; + esac + + if [[ "$gpu_brand" == "off" ]]; then + gpu="${gpu/AMD}" + gpu="${gpu/NVIDIA}" + gpu="${gpu/Intel}" + fi +} + +get_memory() { + case $os in + "Linux" | "Windows") + # MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable + # Source: https://github.com/KittyKatt/screenFetch/issues/386#issuecomment-249312716 + while IFS=":" read -r a b; do + case $a in + "MemTotal") ((mem_used+=${b/kB})); mem_total="${b/kB}" ;; + "Shmem") ((mem_used+=${b/kB})) ;; + "MemFree" | "Buffers" | "Cached" | "SReclaimable") + mem_used="$((mem_used-=${b/kB}))" + ;; + + # Available since Linux 3.14rc (34e431b0ae398fc54ea69ff85ec700722c9da773). + # If detected this will be used over the above calculation for mem_used. + "MemAvailable") + mem_avail=${b/kB} + ;; + esac + done < /proc/meminfo + + if [[ $mem_avail ]]; then + mem_used=$(((mem_total - mem_avail) / 1024)) + else + mem_used="$((mem_used / 1024))" + fi + + mem_total="$((mem_total / 1024))" + ;; + + "Mac OS X" | "macOS" | "iPhone OS") + mem_total="$(($(sysctl -n hw.memsize) / 1024 / 1024))" + mem_wired="$(vm_stat | awk '/ wired/ { print $4 }')" + mem_active="$(vm_stat | awk '/ active/ { printf $3 }')" + mem_compressed="$(vm_stat | awk '/ occupied/ { printf $5 }')" + mem_compressed="${mem_compressed:-0}" + mem_used="$(((${mem_wired//.} + ${mem_active//.} + ${mem_compressed//.}) * 4 / 1024))" + ;; + + "BSD" | "MINIX") + # Mem total. + case $kernel_name in + "NetBSD"*) mem_total="$(($(sysctl -n hw.physmem64) / 1024 / 1024))" ;; + *) mem_total="$(($(sysctl -n hw.physmem) / 1024 / 1024))" ;; + esac + + # Mem free. + case $kernel_name in + "NetBSD"*) + mem_free="$(($(awk -F ':|kB' '/MemFree:/ {printf $2}' /proc/meminfo) / 1024))" + ;; + + "FreeBSD"* | "DragonFly"*) + hw_pagesize="$(sysctl -n hw.pagesize)" + mem_inactive="$(($(sysctl -n vm.stats.vm.v_inactive_count) * hw_pagesize))" + mem_unused="$(($(sysctl -n vm.stats.vm.v_free_count) * hw_pagesize))" + mem_cache="$(($(sysctl -n vm.stats.vm.v_cache_count) * hw_pagesize))" + mem_free="$(((mem_inactive + mem_unused + mem_cache) / 1024 / 1024))" + ;; + + "MINIX") + mem_free="$(top -d 1 | awk -F ',' '/^Memory:/ {print $2}')" + mem_free="${mem_free/M Free}" + ;; + + "OpenBSD"*) ;; + *) mem_free="$(($(vmstat | awk 'END {printf $5}') / 1024))" ;; + esac + + # Mem used. + case $kernel_name in + "OpenBSD"*) + mem_used="$(vmstat | awk 'END {printf $3}')" + mem_used="${mem_used/M}" + ;; + + *) mem_used="$((mem_total - mem_free))" ;; + esac + ;; + + "Solaris" | "AIX") + hw_pagesize="$(pagesize)" + case $os in + "Solaris") + pages_total="$(kstat -p unix:0:system_pages:pagestotal | awk '{print $2}')" + pages_free="$(kstat -p unix:0:system_pages:pagesfree | awk '{print $2}')" + ;; + + "AIX") + IFS=$'\n'"| " read -d "" -ra mem_stat <<< "$(svmon -G -O unit=page)" + pages_total="${mem_stat[11]}" + pages_free="${mem_stat[16]}" + ;; + esac + mem_total="$((pages_total * hw_pagesize / 1024 / 1024))" + mem_free="$((pages_free * hw_pagesize / 1024 / 1024))" + mem_used="$((mem_total - mem_free))" + ;; + + "Haiku") + mem_total="$(($(sysinfo -mem | awk -F '\\/ |)' '{print $2; exit}') / 1024 / 1024))" + mem_used="$(sysinfo -mem | awk -F '\\/|)' '{print $2; exit}')" + mem_used="$((${mem_used/max} / 1024 / 1024))" + ;; + + "IRIX") + IFS=$'\n' read -d "" -ra mem_cmd <<< "$(pmem)" + IFS=" " read -ra mem_stat <<< "${mem_cmd[0]}" + + mem_total="$((mem_stat[3] / 1024))" + mem_free="$((mem_stat[5] / 1024))" + mem_used="$((mem_total - mem_free))" + ;; + + "FreeMiNT") + mem="$(awk -F ':|kB' '/MemTotal:|MemFree:/ {printf $2, " "}' /kern/meminfo)" + mem_free="${mem/* }" + mem_total="${mem/$mem_free}" + mem_used="$((mem_total - mem_free))" + mem_total="$((mem_total / 1024))" + mem_used="$((mem_used / 1024))" + ;; + + esac + + [[ "$memory_percent" == "on" ]] && ((mem_perc=mem_used * 100 / mem_total)) + + case $memory_unit in + gib) + mem_used=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_used 1024") + mem_total=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_total 1024") + mem_label=GiB + ;; + + kib) + mem_used=$((mem_used * 1024)) + mem_total=$((mem_total * 1024)) + mem_label=KiB + ;; + esac + + memory="${mem_used}${mem_label:-MiB} / ${mem_total}${mem_label:-MiB} ${mem_perc:+(${mem_perc}%)}" + + # Bars. + case $memory_display in + "bar") memory="$(bar "${mem_used}" "${mem_total}")" ;; + "infobar") memory="${memory} $(bar "${mem_used}" "${mem_total}")" ;; + "barinfo") memory="$(bar "${mem_used}" "${mem_total}")${info_color} ${memory}" ;; + esac +} + +get_song() { + players=( + "amarok" + "audacious" + "banshee" + "bluemindo" + "clementine" + "cmus" + "deadbeef" + "deepin-music" + "dragon" + "elisa" + "exaile" + "gnome-music" + "gmusicbrowser" + "gogglesmm" + "guayadeque" + "io.elementary.music" + "iTunes" + "Music" + "juk" + "lollypop" + "MellowPlayer" + "mocp" + "mopidy" + "mpd" + "muine" + "netease-cloud-music" + "olivia" + "plasma-browser-integration" + "playerctl" + "pogo" + "pragha" + "qmmp" + "quodlibet" + "rhythmbox" + "sayonara" + "smplayer" + "spotify" + "Spotify" + "strawberry" + "tauonmb" + "tomahawk" + "vlc" + "xmms2d" + "xnoise" + "yarock" + ) + + printf -v players "|%s" "${players[@]}" + player="$(ps aux | awk -v pattern="(${players:1})" \ + '!/ awk / && !/iTunesHelper/ && match($0,pattern){print substr($0,RSTART,RLENGTH); exit}')" + + [[ "$music_player" && "$music_player" != "auto" ]] && player="$music_player" + + get_song_dbus() { + # Multiple players use an almost identical dbus command to get the information. + # This function saves us using the same command throughout the function. + song="$(\ + dbus-send --print-reply --dest=org.mpris.MediaPlayer2."${1}" /org/mpris/MediaPlayer2 \ + org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' \ + string:'Metadata' |\ + awk -F '"' 'BEGIN {RS=" entry"}; /"xesam:artist"/ {a = $4} /"xesam:album"/ {b = $4} + /"xesam:title"/ {t = $4} END {print a " \n" b " \n" t}' + )" + } + + case ${player/*\/} in + "mocp"*) song="$(mocp -Q '%artist \n%album \n%song')" ;; + "deadbeef"*) song="$(deadbeef --nowplaying-tf '%artist% \\n%album% \\n%title%')" ;; + "qmmp"*) song="$(qmmp --nowplaying '%p \n%a \n%t')" ;; + "gnome-music"*) get_song_dbus "GnomeMusic" ;; + "lollypop"*) get_song_dbus "Lollypop" ;; + "clementine"*) get_song_dbus "clementine" ;; + "juk"*) get_song_dbus "juk" ;; + "bluemindo"*) get_song_dbus "Bluemindo" ;; + "guayadeque"*) get_song_dbus "guayadeque" ;; + "yarock"*) get_song_dbus "yarock" ;; + "deepin-music"*) get_song_dbus "DeepinMusic" ;; + "tomahawk"*) get_song_dbus "tomahawk" ;; + "elisa"*) get_song_dbus "elisa" ;; + "sayonara"*) get_song_dbus "sayonara" ;; + "audacious"*) get_song_dbus "audacious" ;; + "vlc"*) get_song_dbus "vlc" ;; + "gmusicbrowser"*) get_song_dbus "gmusicbrowser" ;; + "pragha"*) get_song_dbus "pragha" ;; + "amarok"*) get_song_dbus "amarok" ;; + "dragon"*) get_song_dbus "dragonplayer" ;; + "smplayer"*) get_song_dbus "smplayer" ;; + "rhythmbox"*) get_song_dbus "rhythmbox" ;; + "strawberry"*) get_song_dbus "strawberry" ;; + "gogglesmm"*) get_song_dbus "gogglesmm" ;; + "xnoise"*) get_song_dbus "xnoise" ;; + "tauonmb"*) get_song_dbus "tauon" ;; + "olivia"*) get_song_dbus "olivia" ;; + "exaile"*) get_song_dbus "exaile" ;; + "netease-cloud-music"*) get_song_dbus "netease-cloud-music" ;; + "plasma-browser-integration"*) get_song_dbus "plasma-browser-integration" ;; + "io.elementary.music"*) get_song_dbus "Music" ;; + "MellowPlayer"*) get_song_dbus "MellowPlayer3" ;; + + "mpd"* | "mopidy"*) + song="$(mpc -f '%artist% \n%album% \n%title%' current "${mpc_args[@]}")" + ;; + + "xmms2d"*) + song="$(xmms2 current -f "\${artist}"$' \n'"\${album}"$' \n'"\${title}")" + ;; + + "cmus"*) + # NOTE: cmus >= 2.8.0 supports mpris2 + song="$(cmus-remote -Q | awk '/tag artist/ {$1=$2=""; a=$0} + /tag album / {$1=$2=""; b=$0} + /tag title/ {$1=$2=""; t=$0} + END {print a " \n" b " \n" t}')" + ;; + + "spotify"*) + case $os in + "Linux") get_song_dbus "spotify" ;; + + "Mac OS X"|"macOS") + song="$(osascript -e 'tell application "Spotify" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + esac + ;; + + "itunes"*) + song="$(osascript -e 'tell application "iTunes" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + + "music"*) + song="$(osascript -e 'tell application "Music" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + + "banshee"*) + song="$(banshee --query-artist --query-album --query-title |\ + awk -F':' '/^artist/ {a=$2} /^album/ {b=$2} /^title/ {t=$2} + END {print a " \n" b " \n"t}')" + ;; + + "muine"*) + song="$(dbus-send --print-reply --dest=org.gnome.Muine /org/gnome/Muine/Player \ + org.gnome.Muine.Player.GetCurrentSong | + awk -F':' '/^artist/ {a=$2} /^album/ {b=$2} /^title/ {t=$2} + END {print a " \n" b " \n" t}')" + ;; + + "quodlibet"*) + song="$(dbus-send --print-reply --dest=net.sacredchao.QuodLibet \ + /net/sacredchao/QuodLibet net.sacredchao.QuodLibet.CurrentSong |\ + awk -F'"' 'BEGIN {RS=" entry"}; /"artist"/ {a=$4} /"album"/ {b=$4} + /"title"/ {t=$4} END {print a " \n" b " \n" t}')" + ;; + + "pogo"*) + song="$(dbus-send --print-reply --dest=org.mpris.pogo /Player \ + org.freedesktop.MediaPlayer.GetMetadata | + awk -F'"' 'BEGIN {RS=" entry"}; /"artist"/ {a=$4} /"album"/ {b=$4} + /"title"/ {t=$4} END {print a " \n" b " \n" t}')" + ;; + + "playerctl"*) + song="$(playerctl metadata --format '{{ artist }} \n{{ album }} \n{{ title }}')" + ;; + + *) mpc &>/dev/null && song="$(mpc -f '%artist% \n%album% \n%title%' current)" || return ;; + esac + + IFS=$'\n' read -d "" -r artist album title <<< "${song//'\n'/$'\n'}" + + # Make sure empty tags are truly empty. + artist="$(trim "$artist")" + album="$(trim "$album")" + title="$(trim "$title")" + + # Set default values if no tags were found. + : "${artist:=Unknown Artist}" "${album:=Unknown Album}" "${title:=Unknown Song}" + + # Display Artist, Album and Title on separate lines. + if [[ "$song_shorthand" == "on" ]]; then + prin "Artist" "$artist" + prin "Album" "$album" + prin "Song" "$title" + else + song="${song_format/\%artist\%/$artist}" + song="${song/\%album\%/$album}" + song="${song/\%title\%/$title}" + fi +} + +get_resolution() { + case $os in + "Mac OS X"|"macOS") + if type -p screenresolution >/dev/null; then + resolution="$(screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}')" + resolution="${resolution//x??@/ @ }" + + else + resolution="$(system_profiler SPDisplaysDataType |\ + awk '/Resolution:/ {printf $2"x"$4" @ "$6"Hz, "}')" + fi + + if [[ -e "/Library/Preferences/com.apple.windowserver.plist" ]]; then + scale_factor="$(PlistBuddy -c "Print DisplayAnyUserSets:0:0:Resolution" \ + /Library/Preferences/com.apple.windowserver.plist)" + else + scale_factor="" + fi + + # If no refresh rate is empty. + [[ "$resolution" == *"@ Hz"* ]] && \ + resolution="${resolution//@ Hz}" + + [[ "${scale_factor%.*}" == 2 ]] && \ + resolution="${resolution// @/@2x @}" + + if [[ "$refresh_rate" == "off" ]]; then + resolution="${resolution// @ [0-9][0-9]Hz}" + resolution="${resolution// @ [0-9][0-9][0-9]Hz}" + fi + + [[ "$resolution" == *"0Hz"* ]] && \ + resolution="${resolution// @ 0Hz}" + ;; + + "Windows") + IFS=$'\n' read -d "" -ra sw \ + <<< "$(wmic path Win32_VideoController get CurrentHorizontalResolution)" + + IFS=$'\n' read -d "" -ra sh \ + <<< "$(wmic path Win32_VideoController get CurrentVerticalResolution)" + + sw=("${sw[@]//CurrentHorizontalResolution}") + sh=("${sh[@]//CurrentVerticalResolution}") + + for ((mn = 0; mn < ${#sw[@]}; mn++)) { + [[ ${sw[mn]//[[:space:]]} && ${sh[mn]//[[:space:]]} ]] && + resolution+="${sw[mn]//[[:space:]]}x${sh[mn]//[[:space:]]}, " + } + + resolution=${resolution%,} + ;; + + "Haiku") + resolution="$(screenmode | awk -F ' |, ' 'END{printf $2 "x" $3 " @ " $6 $7}')" + + [[ "$refresh_rate" == "off" ]] && resolution="${resolution/ @*}" + ;; + + "FreeMiNT") + # Need to block X11 queries + ;; + + *) + if type -p xrandr >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + case $refresh_rate in + "on") + resolution="$(xrandr --nograb --current |\ + awk 'match($0,/[0-9]*\.[0-9]*\*/) { + printf $1 " @ " substr($0,RSTART,RLENGTH) "Hz, "}')" + ;; + + "off") + resolution="$(xrandr --nograb --current |\ + awk -F 'connected |\\+|\\(' \ + '/ connected.*[0-9]+x[0-9]+\+/ && $2 {printf $2 ", "}')" + + resolution="${resolution/primary, }" + resolution="${resolution/primary }" + ;; + esac + resolution="${resolution//\*}" + + elif type -p xwininfo >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + read -r w h \ + <<< "$(xwininfo -root | awk -F':' '/Width|Height/ {printf $2}')" + resolution="${w}x${h}" + + elif type -p xdpyinfo >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + resolution="$(xdpyinfo | awk '/dimensions:/ {printf $2}')" + + elif [[ -d /sys/class/drm ]]; then + for dev in /sys/class/drm/*/modes; do + read -r single_resolution _ < "$dev" + + [[ $single_resolution ]] && resolution="${single_resolution}, ${resolution}" + done + fi + ;; + esac + + resolution="${resolution%,*}" + [[ -z "${resolution/x}" ]] && resolution= +} + +get_style() { + # Fix weird output when the function is run multiple times. + unset gtk2_theme gtk3_theme theme path + + if [[ "$DISPLAY" && $os != "Mac OS X" && $os != "macOS" ]]; then + # Get DE if user has disabled the function. + ((de_run != 1)) && get_de + + # Remove version from '$de'. + [[ $de_version == on ]] && de=${de/ *} + + # Check for DE Theme. + case $de in + "KDE"* | "Plasma"*) + kde_config_dir + + if [[ -f "${kde_config_dir}/kdeglobals" ]]; then + kde_config_file="${kde_config_dir}/kdeglobals" + + kde_theme="$(grep "^${kde}" "$kde_config_file")" + kde_theme="${kde_theme/*=}" + if [[ "$kde" == "font" ]]; then + kde_font_size="${kde_theme#*,}" + kde_font_size="${kde_font_size/,*}" + kde_theme="${kde_theme/,*} ${kde_theme/*,} ${kde_font_size}" + fi + kde_theme="$kde_theme [$de], " + else + err "Theme: KDE config files not found, skipping." + fi + ;; + + *"Cinnamon"*) + if type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.cinnamon.desktop.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + fi + ;; + + "Gnome"* | "Unity"* | "Budgie"*) + if type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + + elif type -p gconftool-2 >/dev/null; then + gtk2_theme="$(gconftool-2 -g /desktop/gnome/interface/"$gconf")" + fi + ;; + + "Mate"*) + gtk3_theme="$(gsettings get org.mate.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + ;; + + "Xfce"*) + type -p xfconf-query >/dev/null && \ + gtk2_theme="$(xfconf-query -c xsettings -p "$xfconf")" + ;; + esac + + # Check for general GTK2 Theme. + if [[ -z "$gtk2_theme" ]]; then + if [[ -n "$GTK2_RC_FILES" ]]; then + IFS=: read -ra rc_files <<< "$GTK2_RC_FILES" + gtk2_theme="$(grep "^[^#]*${name}" "${rc_files[@]}")" + elif [[ -f "${HOME}/.gtkrc-2.0" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" "${HOME}/.gtkrc-2.0")" + + elif [[ -f "/etc/gtk-2.0/gtkrc" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" /etc/gtk-2.0/gtkrc)" + + elif [[ -f "/usr/share/gtk-2.0/gtkrc" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" /usr/share/gtk-2.0/gtkrc)" + + fi + + gtk2_theme="${gtk2_theme/*${name}*=}" + fi + + # Check for general GTK3 Theme. + if [[ -z "$gtk3_theme" ]]; then + if [[ -f "${XDG_CONFIG_HOME}/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" "${XDG_CONFIG_HOME}/gtk-3.0/settings.ini")" + + elif type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" + + elif [[ -f "/etc/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" /etc/gtk-3.0/settings.ini)" + + elif [[ -f "/usr/share/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" /usr/share/gtk-3.0/settings.ini)" + fi + + gtk3_theme="${gtk3_theme/${name}*=}" + fi + + # Trim whitespace. + gtk2_theme="$(trim "$gtk2_theme")" + gtk3_theme="$(trim "$gtk3_theme")" + + # Remove quotes. + gtk2_theme="$(trim_quotes "$gtk2_theme")" + gtk3_theme="$(trim_quotes "$gtk3_theme")" + + # Toggle visibility of GTK themes. + [[ "$gtk2" == "off" ]] && unset gtk2_theme + [[ "$gtk3" == "off" ]] && unset gtk3_theme + + # Format the string based on which themes exist. + if [[ "$gtk2_theme" && "$gtk2_theme" == "$gtk3_theme" ]]; then + gtk3_theme+=" [GTK2/3]" + unset gtk2_theme + + elif [[ "$gtk2_theme" && "$gtk3_theme" ]]; then + gtk2_theme+=" [GTK2], " + gtk3_theme+=" [GTK3] " + + else + [[ "$gtk2_theme" ]] && gtk2_theme+=" [GTK2] " + [[ "$gtk3_theme" ]] && gtk3_theme+=" [GTK3] " + fi + + # Final string. + theme="${kde_theme}${gtk2_theme}${gtk3_theme}" + theme="${theme%, }" + + # Make the output shorter by removing "[GTKX]" from the string. + if [[ "$gtk_shorthand" == "on" ]]; then + theme="${theme// '[GTK'[0-9]']'}" + theme="${theme/ '[GTK2/3]'}" + theme="${theme/ '[KDE]'}" + theme="${theme/ '[Plasma]'}" + fi + fi +} + +get_theme() { + name="gtk-theme-name" + gsettings="gtk-theme" + gconf="gtk_theme" + xfconf="/Net/ThemeName" + kde="Name" + + get_style +} + +get_icons() { + name="gtk-icon-theme-name" + gsettings="icon-theme" + gconf="icon_theme" + xfconf="/Net/IconThemeName" + kde="Theme" + + get_style + icons="$theme" +} + +get_font() { + name="gtk-font-name" + gsettings="font-name" + gconf="font_theme" + xfconf="/Gtk/FontName" + kde="font" + + get_style + font="$theme" +} + +get_term() { + # If function was run, stop here. + ((term_run == 1)) && return + + # Workaround for macOS systems that + # don't support the block below. + case $TERM_PROGRAM in + "iTerm.app") term="iTerm2" ;; + "Terminal.app") term="Apple Terminal" ;; + "Hyper") term="HyperTerm" ;; + *) term="${TERM_PROGRAM/\.app}" ;; + esac + + # Most likely TosWin2 on FreeMiNT - quick check + [[ "$TERM" == "tw52" || "$TERM" == "tw100" ]] && term="TosWin2" + [[ "$SSH_CONNECTION" ]] && term="$SSH_TTY" + [[ "$WT_SESSION" ]] && term="Windows Terminal" + + # Check $PPID for terminal emulator. + while [[ -z "$term" ]]; do + parent="$(get_ppid "$parent")" + [[ -z "$parent" ]] && break + name="$(get_process_name "$parent")" + + case ${name// } in + "${SHELL/*\/}"|*"sh"|"screen"|"su"*) ;; + + "login"*|*"Login"*|"init"|"(init)") + term="$(tty)" + ;; + + "ruby"|"1"|"tmux"*|"systemd"|"sshd"*|"python"*|"USER"*"PID"*|"kdeinit"*|"launchd"*) + break + ;; + + "gnome-terminal-") term="gnome-terminal" ;; + "urxvtd") term="urxvt" ;; + *"nvim") term="Neovim Terminal" ;; + *"NeoVimServer"*) term="VimR Terminal" ;; + + *) + # Fix issues with long process names on Linux. + [[ $os == Linux ]] && term=$(realpath "/proc/$parent/exe") + + term="${name##*/}" + + # Fix wrapper names in Nix. + [[ $term == .*-wrapped ]] && { + term="${term#.}" + term="${term%-wrapped}" + } + ;; + esac + done + + # Log that the function was run. + term_run=1 +} + +get_term_font() { + ((term_run != 1)) && get_term + + case $term in + "alacritty"*) + shopt -s nullglob + confs=({$XDG_CONFIG_HOME,$HOME}/{alacritty,}/{.,}alacritty.ym?) + shopt -u nullglob + + [[ -f "${confs[0]}" ]] || return + + term_font="$(awk '/normal:/ {while (!/family:/ || /#/) + {if (!getline) {exit}} print; exit}' "${confs[0]}")" + term_font="${term_font/*family:}" + term_font="${term_font/$'\n'*}" + term_font="${term_font/\#*}" + ;; + + "Apple_Terminal") + term_font="$(osascript </dev/null || + { err "Disk requires 'df' to function. Install 'df' to get disk info."; return; } + + df_version=$(df --version 2>&1) + + case $df_version in + *IMitv*) df_flags=(-P -g) ;; # AIX + *befhikm*) df_flags=(-P -k) ;; # IRIX + *hiklnP*) df_flags=(-h) ;; # OpenBSD + + *Tracker*) # Haiku + err "Your version of df cannot be used due to the non-standard flags" + return + ;; + + *) df_flags=(-P -h) ;; + esac + + # Create an array called 'disks' where each element is a separate line from + # df's output. We then unset the first element which removes the column titles. + IFS=$'\n' read -d "" -ra disks <<< "$(df "${df_flags[@]}" "${disk_show[@]:-/}")" + unset "disks[0]" + + # Stop here if 'df' fails to print disk info. + [[ ${disks[*]} ]] || { + err "Disk: df failed to print the disks, make sure the disk_show array is set properly." + return + } + + for disk in "${disks[@]}"; do + # Create a second array and make each element split at whitespace this time. + IFS=" " read -ra disk_info <<< "$disk" + disk_perc=${disk_info[${#disk_info[@]} - 2]/\%} + + case $disk_percent in + off) disk_perc= + esac + + case $df_version in + *befhikm*) + disk=$((disk_info[${#disk_info[@]} - 4] / 1024 / 1024))G + disk+=" / " + disk+=$((disk_info[${#disk_info[@]} - 5] / 1024/ 1024))G + disk+=${disk_perc:+ ($disk_perc%)} + ;; + + *) + disk=${disk_info[${#disk_info[@]} - 4]/i} + disk+=" / " + disk+=${disk_info[${#disk_info[@]} - 5]/i} + disk+=${disk_perc:+ ($disk_perc%)} + ;; + esac + + case $disk_subtitle in + name) + disk_sub=${disk_info[*]::${#disk_info[@]} - 5} + ;; + + dir) + disk_sub=${disk_info[${#disk_info[@]} - 1]/*\/} + disk_sub=${disk_sub:-${disk_info[${#disk_info[@]} - 1]}} + ;; + + none) ;; + + *) + disk_sub=${disk_info[${#disk_info[@]} - 1]} + ;; + esac + + case $disk_display in + bar) disk="$(bar "$disk_perc" "100")" ;; + infobar) disk+=" $(bar "$disk_perc" "100")" ;; + barinfo) disk="$(bar "$disk_perc" "100")${info_color} $disk" ;; + perc) disk="${disk_perc}% $(bar "$disk_perc" "100")" ;; + esac + + # Append '(disk mount point)' to the subtitle. + if [[ "$subtitle" ]]; then + prin "$subtitle${disk_sub:+ ($disk_sub)}" "$disk" + else + prin "$disk_sub" "$disk" + fi + done +} + +get_battery() { + case $os in + "Linux") + # We use 'prin' here so that we can do multi battery support + # with a single battery per line. + for bat in "/sys/class/power_supply/"{BAT,axp288_fuel_gauge,CMB}*; do + capacity="$(< "${bat}/capacity")" + status="$(< "${bat}/status")" + + if [[ "$capacity" ]]; then + battery="${capacity}% [${status}]" + + case $battery_display in + "bar") battery="$(bar "$capacity" 100)" ;; + "infobar") battery+=" $(bar "$capacity" 100)" ;; + "barinfo") battery="$(bar "$capacity" 100)${info_color} ${battery}" ;; + esac + + bat="${bat/*axp288_fuel_gauge}" + prin "${subtitle:+${subtitle}${bat: -1}}" "$battery" + fi + done + return + ;; + + "BSD") + case $kernel_name in + "FreeBSD"* | "DragonFly"*) + battery="$(acpiconf -i 0 | awk -F ':\t' '/Remaining capacity/ {print $2}')" + battery_state="$(acpiconf -i 0 | awk -F ':\t\t\t' '/State/ {print $2}')" + ;; + + "NetBSD"*) + battery="$(envstat | awk '\\(|\\)' '/charge:/ {print $2}')" + battery="${battery/\.*/%}" + ;; + + "OpenBSD"* | "Bitrig"*) + battery0full="$(sysctl -n hw.sensors.acpibat0.watthour0\ + hw.sensors.acpibat0.amphour0)" + battery0full="${battery0full%% *}" + + battery0now="$(sysctl -n hw.sensors.acpibat0.watthour3\ + hw.sensors.acpibat0.amphour3)" + battery0now="${battery0now%% *}" + + state="$(sysctl -n hw.sensors.acpibat0.raw0)" + state="${state##? (battery }" + state="${state%)*}" + + [[ "${state}" == "charging" ]] && battery_state="charging" + [[ "$battery0full" ]] && \ + battery="$((100 * ${battery0now/\.} / ${battery0full/\.}))%" + ;; + esac + ;; + + "Mac OS X"|"macOS") + battery="$(pmset -g batt | grep -o '[0-9]*%')" + state="$(pmset -g batt | awk '/;/ {print $4}')" + [[ "$state" == "charging;" ]] && battery_state="charging" + ;; + + "Windows") + battery="$(wmic Path Win32_Battery get EstimatedChargeRemaining)" + battery="${battery/EstimatedChargeRemaining}" + battery="$(trim "$battery")%" + state="$(wmic /NameSpace:'\\root\WMI' Path BatteryStatus get Charging)" + state="${state/Charging}" + [[ "$state" == *TRUE* ]] && battery_state="charging" + ;; + + "Haiku") + battery0full="$(awk -F '[^0-9]*' 'NR==2 {print $4}' /dev/power/acpi_battery/0)" + battery0now="$(awk -F '[^0-9]*' 'NR==5 {print $4}' /dev/power/acpi_battery/0)" + battery="$((battery0full * 100 / battery0now))%" + ;; + esac + + [[ "$battery_state" ]] && battery+=" Charging" + + case $battery_display in + "bar") battery="$(bar "${battery/\%*}" 100)" ;; + "infobar") battery="${battery} $(bar "${battery/\%*}" 100)" ;; + "barinfo") battery="$(bar "${battery/\%*}" 100)${info_color} ${battery}" ;; + esac +} + +get_local_ip() { + case $os in + "Linux" | "BSD" | "Solaris" | "AIX" | "IRIX") + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')" + local_ip="${local_ip/uid*}" + [[ "$local_ip" ]] || local_ip="$(ifconfig -a | awk '/broadcast/ {print $2; exit}')" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ip addr show "$interface" 2> /dev/null | + awk '/inet / {print $2; exit}')" + local_ip="${local_ip/\/*}" + [[ "$local_ip" ]] || + local_ip="$(ifconfig "$interface" 2> /dev/null | + awk '/broadcast/ {print $2; exit}')" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi + ;; + + "MINIX") + local_ip="$(ifconfig | awk '{printf $3; exit}')" + ;; + + "Mac OS X" | "macOS" | "iPhone OS") + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + interface="$(route get 1 | awk -F': ' '/interface/ {printf $2; exit}')" + local_ip="$(ipconfig getifaddr "$interface")" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ipconfig getifaddr "$interface")" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi + ;; + + "Windows") + local_ip="$(ipconfig | awk -F ': ' '/IPv4 Address/ {printf $2 ", "}')" + local_ip="${local_ip%\,*}" + ;; + + "Haiku") + local_ip="$(ifconfig | awk -F ': ' '/Bcast/ {print $2}')" + local_ip="${local_ip/, Bcast}" + ;; + esac +} + +get_public_ip() { + if type -p dig >/dev/null; then + public_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com)" + [[ "$public_ip" =~ ^\; ]] && unset public_ip + fi + + if [[ -z "$public_ip" ]] && type -p drill >/dev/null; then + public_ip="$(drill myip.opendns.com @resolver1.opendns.com | \ + awk '/^myip\./ && $3 == "IN" {print $5}')" + fi + + if [[ -z "$public_ip" ]] && type -p curl >/dev/null; then + public_ip="$(curl --max-time "$public_ip_timeout" -w '\n' "$public_ip_host")" + fi + + if [[ -z "$public_ip" ]] && type -p wget >/dev/null; then + public_ip="$(wget -T "$public_ip_timeout" -qO- "$public_ip_host")" + fi +} + +get_users() { + users="$(who | awk '!seen[$1]++ {printf $1 ", "}')" + users="${users%\,*}" +} + +get_locale() { + locale="$sys_locale" +} + +get_gpu_driver() { + case $os in + "Linux") + gpu_driver="$(lspci -nnk | awk -F ': ' \ + '/Display|3D|VGA/{nr[NR+2]}; NR in nr {printf $2 ", "; exit}')" + gpu_driver="${gpu_driver%, }" + + if [[ "$gpu_driver" == *"nvidia"* ]]; then + gpu_driver="$(< /proc/driver/nvidia/version)" + gpu_driver="${gpu_driver/*Module }" + gpu_driver="NVIDIA ${gpu_driver/ *}" + fi + ;; + + "Mac OS X"|"macOS") + if [[ "$(kextstat | grep "GeForceWeb")" != "" ]]; then + gpu_driver="NVIDIA Web Driver" + else + gpu_driver="macOS Default Graphics Driver" + fi + ;; + esac +} + +get_cols() { + local blocks blocks2 cols + + if [[ "$color_blocks" == "on" ]]; then + # Convert the width to space chars. + printf -v block_width "%${block_width}s" + + # Generate the string. + for ((block_range[0]; block_range[0]<=block_range[1]; block_range[0]++)); do + case ${block_range[0]} in + [0-7]) + printf -v blocks '%b\e[3%bm\e[4%bm%b' \ + "$blocks" "${block_range[0]}" "${block_range[0]}" "$block_width" + ;; + + *) + printf -v blocks2 '%b\e[38;5;%bm\e[48;5;%bm%b' \ + "$blocks2" "${block_range[0]}" "${block_range[0]}" "$block_width" + ;; + esac + done + + # Convert height into spaces. + printf -v block_spaces "%${block_height}s" + + # Convert the spaces into rows of blocks. + [[ "$blocks" ]] && cols+="${block_spaces// /${blocks}nl}" + [[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}nl}" + + # Add newlines to the string. + cols=${cols%%nl} + cols=${cols//nl/ +[${text_padding}C${zws}} + + # Add block height to info height. + ((info_height+=block_range[1]>7?block_height+2:block_height+1)) + + case $col_offset in + "auto") printf '\n\e[%bC%b\n' "$text_padding" "${zws}${cols}" ;; + *) printf '\n\e[%bC%b\n' "$col_offset" "${zws}${cols}" ;; + esac + fi + + unset -v blocks blocks2 cols + + # Tell info() that we printed manually. + prin=1 +} + +# IMAGES + +image_backend() { + [[ "$image_backend" != "off" ]] && ! type -p convert &>/dev/null && \ + { image_backend="ascii"; err "Image: Imagemagick not found, falling back to ascii mode."; } + + case ${image_backend:-off} in + "ascii") print_ascii ;; + "off") image_backend="off" ;; + + "caca" | "catimg" | "chafa" | "jp2a" | "iterm2" | "termpix" |\ + "tycat" | "w3m" | "sixel" | "pixterm" | "kitty" | "pot", | "ueberzug" |\ + "viu") + get_image_source + + [[ ! -f "$image" ]] && { + to_ascii "Image: '$image_source' doesn't exist, falling back to ascii mode." + return + } + [[ "$image_backend" == "ueberzug" ]] && wait=true; + + get_window_size + + ((term_width < 1)) && { + to_ascii "Image: Failed to find terminal window size." + err "Image: Check the 'Images in the terminal' wiki page for more info," + return + } + + printf '\e[2J\e[H' + get_image_size + make_thumbnail + display_image || to_off "Image: $image_backend failed to display the image." + ;; + + *) + err "Image: Unknown image backend specified '$image_backend'." + err "Image: Valid backends are: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', + 'kitty', 'off', 'sixel', 'pot', 'pixterm', 'termpix', + 'tycat', 'w3m', 'viu')" + err "Image: Falling back to ascii mode." + print_ascii + ;; + esac + + # Set cursor position next image/ascii. + [[ "$image_backend" != "off" ]] && printf '\e[%sA\e[9999999D' "${lines:-0}" +} + +print_ascii() { + if [[ -f "$image_source" && ! "$image_source" =~ (png|jpg|jpeg|jpe|svg|gif) ]]; then + ascii_data="$(< "$image_source")" + elif [[ "$image_source" == "ascii" || $image_source == auto ]]; then + : + else + ascii_data="$image_source" + fi + + # Set locale to get correct padding. + LC_ALL="$sys_locale" + + # Calculate size of ascii file in line length / line count. + while IFS=$'\n' read -r line; do + line=${line//\\\\/\\} + line=${line//█/ } + ((++lines,${#line}>ascii_len)) && ascii_len="${#line}" + done <<< "${ascii_data//\$\{??\}}" + + # Fallback if file not found. + ((lines==1)) && { + lines= + ascii_len= + image_source=auto + get_distro_ascii + print_ascii + return + } + + # Colors. + ascii_data="${ascii_data//\$\{c1\}/$c1}" + ascii_data="${ascii_data//\$\{c2\}/$c2}" + ascii_data="${ascii_data//\$\{c3\}/$c3}" + ascii_data="${ascii_data//\$\{c4\}/$c4}" + ascii_data="${ascii_data//\$\{c5\}/$c5}" + ascii_data="${ascii_data//\$\{c6\}/$c6}" + + ((text_padding=ascii_len+gap)) + printf '%b\n' "$ascii_data${reset}" + LC_ALL=C +} + +get_image_source() { + case $image_source in + "auto" | "wall" | "wallpaper") + get_wallpaper + ;; + + *) + # Get the absolute path. + image_source="$(get_full_path "$image_source")" + + if [[ -d "$image_source" ]]; then + shopt -s nullglob + files=("${image_source%/}"/*.{png,jpg,jpeg,jpe,gif,svg}) + shopt -u nullglob + image="${files[RANDOM % ${#files[@]}]}" + + else + image="$image_source" + fi + ;; + esac + + err "Image: Using image '$image'" +} + +get_wallpaper() { + case $os in + "Mac OS X"|"macOS") + image="$(osascript </dev/null && [[ -f "${HOME}/.cache/wal/wal" ]] && \ + { image="$(< "${HOME}/.cache/wal/wal")"; return; } + + case $de in + "MATE"*) + image="$(gsettings get org.mate.background picture-filename)" + ;; + + "Xfce"*) + image="$(xfconf-query -c xfce4-desktop -p \ + "/backdrop/screen0/monitor0/workspace0/last-image")" + ;; + + "Cinnamon"*) + image="$(gsettings get org.cinnamon.desktop.background picture-uri)" + image="$(decode_url "$image")" + ;; + + "GNOME"*) + image="$(gsettings get org.gnome.desktop.background picture-uri)" + image="$(decode_url "$image")" + ;; + + "Plasma"*) + image=$XDG_CONFIG_HOME/plasma-org.kde.plasma.desktop-appletsrc + image=$(awk -F '=' '$1 == "Image" { print $2 }' "$image") + ;; + + "LXQt"*) + image="$XDG_CONFIG_HOME/pcmanfm-qt/lxqt/settings.conf" + image="$(awk -F '=' '$1 == "Wallpaper" {print $2}' "$image")" + ;; + + *) + if type -p feh >/dev/null && [[ -f "${HOME}/.fehbg" ]]; then + image="$(awk -F\' '/feh/ {printf $(NF-1)}' "${HOME}/.fehbg")" + + elif type -p setroot >/dev/null && \ + [[ -f "${XDG_CONFIG_HOME}/setroot/.setroot-restore" ]]; then + image="$(awk -F\' '/setroot/ {printf $(NF-1)}' \ + "${XDG_CONFIG_HOME}/setroot/.setroot-restore")" + + elif type -p nitrogen >/dev/null; then + image="$(awk -F'=' '/file/ {printf $2;exit;}' \ + "${XDG_CONFIG_HOME}/nitrogen/bg-saved.cfg")" + + else + image="$(gsettings get org.gnome.desktop.background picture-uri)" + image="$(decode_url "$image")" + fi + ;; + esac + + # Strip un-needed info from the path. + image="${image/file:\/\/}" + image="$(trim_quotes "$image")" + ;; + esac + + # If image is an xml file, don't use it. + [[ "${image/*\./}" == "xml" ]] && image="" +} + +get_w3m_img_path() { + # Find w3m-img path. + shopt -s nullglob + w3m_paths=({/usr/{local/,},~/.nix-profile/}{lib,libexec,lib64,libexec64}/w3m/w3mi*) + shopt -u nullglob + + [[ -x "${w3m_paths[0]}" ]] && \ + { w3m_img_path="${w3m_paths[0]}"; return; } + + err "Image: w3m-img wasn't found on your system" +} + +get_window_size() { + # This functions gets the current window size in + # pixels. + # + # We first try to use the escape sequence "\033[14t" + # to get the terminal window size in pixels. If this + # fails we then fallback to using "xdotool" or other + # programs. + + # Tmux has a special way of reading escape sequences + # so we have to use a slightly different sequence to + # get the terminal size. + if [[ "$image_backend" == "tycat" ]]; then + printf '%b' '\e}qs\000' + + elif [[ -z $VTE_VERSION ]]; then + case ${TMUX:-null} in + "null") printf '%b' '\e[14t' ;; + *) printf '%b' '\ePtmux;\e\e[14t\e\\ ' ;; + esac + fi + + # The escape codes above print the desired output as + # user input so we have to use read to store the out + # -put as a variable. + # The 1 second timeout is required for older bash + # + # False positive. + # shellcheck disable=2141 + case $bash_version in + 4|5) IFS=';t' read -d t -t 0.05 -sra term_size ;; + *) IFS=';t' read -d t -t 1 -sra term_size ;; + esac + unset IFS + + # Split the string into height/width. + if [[ "$image_backend" == "tycat" ]]; then + term_width="$((term_size[2] * term_size[0]))" + term_height="$((term_size[3] * term_size[1]))" + + else + term_height="${term_size[1]}" + term_width="${term_size[2]}" + fi + + # Get terminal width/height. + if (( "${term_width:-0}" < 50 )) && [[ "$DISPLAY" && $os != "Mac OS X" && $os != "macOS" ]]; then + if type -p xdotool &>/dev/null; then + IFS=$'\n' read -d "" -ra win \ + <<< "$(xdotool getactivewindow getwindowgeometry --shell %1)" + term_width="${win[3]/WIDTH=}" + term_height="${win[4]/HEIGHT=}" + + elif type -p xwininfo &>/dev/null; then + # Get the focused window's ID. + if type -p xdo &>/dev/null; then + current_window="$(xdo id)" + + elif type -p xprop &>/dev/null; then + current_window="$(xprop -root _NET_ACTIVE_WINDOW)" + current_window="${current_window##* }" + + elif type -p xdpyinfo &>/dev/null; then + current_window="$(xdpyinfo | grep -F "focus:")" + current_window="${current_window/*window }" + current_window="${current_window/,*}" + fi + + # If the ID was found get the window size. + if [[ "$current_window" ]]; then + term_size=("$(xwininfo -id "$current_window")") + term_width="${term_size[0]#*Width: }" + term_width="${term_width/$'\n'*}" + term_height="${term_size[0]/*Height: }" + term_height="${term_height/$'\n'*}" + fi + fi + fi + + term_width="${term_width:-0}" +} + + +get_term_size() { + # Get the terminal size in cells. + read -r lines columns <<< "$(stty size)" + + # Calculate font size. + font_width="$((term_width / columns))" + font_height="$((term_height / lines))" +} + +get_image_size() { + # This functions determines the size to make the thumbnail image. + get_term_size + + case $image_size in + "auto") + image_size="$((columns * font_width / 2))" + term_height="$((term_height - term_height / 4))" + + ((term_height < image_size)) && \ + image_size="$term_height" + ;; + + *"%") + percent="${image_size/\%}" + image_size="$((percent * term_width / 100))" + + (((percent * term_height / 50) < image_size)) && \ + image_size="$((percent * term_height / 100))" + ;; + + "none") + # Get image size so that we can do a better crop. + read -r width height <<< "$(identify -format "%w %h" "$image")" + + while ((width >= (term_width / 2) || height >= term_height)); do + ((width=width/2,height=height/2)) + done + + crop_mode="none" + ;; + + *) image_size="${image_size/px}" ;; + esac + + # Check for terminal padding. + [[ "$image_backend" == "w3m" ]] && term_padding + + width="${width:-$image_size}" + height="${height:-$image_size}" + text_padding="$(((width + padding + xoffset) / font_width + gap))" +} + +make_thumbnail() { + # Name the thumbnail using variables so we can + # use it later. + image_name="${crop_mode}-${crop_offset}-${width}-${height}-${image//\/}" + + # Handle file extensions. + case ${image##*.} in + "eps"|"pdf"|"svg"|"gif"|"png") + image_name+=".png" ;; + *) image_name+=".jpg" ;; + esac + + # Create the thumbnail dir if it doesn't exist. + mkdir -p "${thumbnail_dir:=${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch}" + + if [[ ! -f "${thumbnail_dir}/${image_name}" ]]; then + # Get image size so that we can do a better crop. + [[ -z "$size" ]] && { + read -r og_width og_height <<< "$(identify -format "%w %h" "$image")" + ((og_height > og_width)) && size="$og_width" || size="$og_height" + } + + case $crop_mode in + "fit") + c="$(convert "$image" \ + -colorspace srgb \ + -format "%[pixel:p{0,0}]" info:)" + + convert \ + -background none \ + "$image" \ + -trim +repage \ + -gravity south \ + -background "$c" \ + -extent "${size}x${size}" \ + -scale "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + + "fill") + convert \ + -background none \ + "$image" \ + -trim +repage \ + -scale "${width}x${height}^" \ + -extent "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + + "none") + cp "$image" "${thumbnail_dir}/${image_name}" + ;; + + *) + convert \ + -background none \ + "$image" \ + -strip \ + -gravity "$crop_offset" \ + -crop "${size}x${size}+0+0" \ + -scale "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + esac + fi + + # The final image. + image="${thumbnail_dir}/${image_name}" +} + +display_image() { + case $image_backend in + "caca") + img2txt \ + -W "$((width / font_width))" \ + -H "$((height / font_height))" \ + --gamma=0.6 \ + "$image" + ;; + + + "ueberzug") + if [ "$wait" = true ];then + wait=false; + else + ueberzug layer --parser bash 0< <( + declare -Ap ADD=(\ + [action]="add"\ + [identifier]="neofetch"\ + [x]=$xoffset [y]=$yoffset\ + [path]=$image\ + ) + read -rs + ) + fi + ;; + + "catimg") + catimg -w "$((width*catimg_size / font_width))" -r "$catimg_size" "$image" + ;; + + "chafa") + chafa --stretch --size="$((width / font_width))x$((height / font_height))" "$image" + ;; + + "jp2a") + jp2a \ + --colors \ + --width="$((width / font_width))" \ + --height="$((height / font_height))" \ + "$image" + ;; + + "kitty") + kitty +kitten icat \ + --align left \ + --place "$((width/font_width))x$((height/font_height))@${xoffset}x${yoffset}" \ + "$image" + ;; + + "pot") + pot \ + "$image" \ + --size="$((width / font_width))x$((height / font_height))" + ;; + + "pixterm") + pixterm \ + -tc "$((width / font_width))" \ + -tr "$((height / font_height))" \ + "$image" + ;; + + "sixel") + img2sixel \ + -w "$width" \ + -h "$height" \ + "$image" + ;; + + "termpix") + termpix \ + --width "$((width / font_width))" \ + --height "$((height / font_height))" \ + "$image" + ;; + + "iterm2") + printf -v iterm_cmd '\e]1337;File=width=%spx;height=%spx;inline=1:%s' \ + "$width" "$height" "$(base64 < "$image")" + + # Tmux requires an additional escape sequence for this to work. + [[ -n "$TMUX" ]] && printf -v iterm_cmd '\ePtmux;\e%b\e'\\ "$iterm_cmd" + + printf '%b\a\n' "$iterm_cmd" + ;; + + "tycat") + tycat \ + -g "${width}x${height}" \ + "$image" + ;; + + "viu") + viu \ + -t -w "$((width / font_width))" -h "$((height / font_height))" \ + "$image" + ;; + + "w3m") + get_w3m_img_path + zws='\xE2\x80\x8B\x20' + + # Add a tiny delay to fix issues with images not + # appearing in specific terminal emulators. + ((bash_version>3)) && sleep 0.05 + printf '%b\n%s;\n%s\n' "0;1;$xoffset;$yoffset;$width;$height;;;;;$image" 3 4 |\ + "${w3m_img_path:-false}" -bg "$background_color" &>/dev/null + ;; + esac +} + +to_ascii() { + err "$1" + image_backend="ascii" + print_ascii + + # Set cursor position next image/ascii. + printf '\e[%sA\e[9999999D' "${lines:-0}" +} + +to_off() { + err "$1" + image_backend="off" + text_padding= +} + + +# TEXT FORMATTING + +info() { + # Save subtitle value. + [[ "$2" ]] && subtitle="$1" + + # Make sure that $prin is unset. + unset -v prin + + # Call the function. + "get_${2:-$1}" + + # If the get_func function called 'prin' directly, stop here. + [[ "$prin" ]] && return + + # Update the variable. + if [[ "$2" ]]; then + output="$(trim "${!2}")" + else + output="$(trim "${!1}")" + fi + + if [[ "$2" && "${output// }" ]]; then + prin "$1" "$output" + + elif [[ "${output// }" ]]; then + prin "$output" + + else + err "Info: Couldn't detect ${1}." + fi + + unset -v subtitle +} + +prin() { + # If $2 doesn't exist we format $1 as info. + if [[ "$(trim "$1")" && "$2" ]]; then + [[ "$json" ]] && { printf ' %s\n' "\"${1}\": \"${2}\","; return; } + + string="${1}${2:+: $2}" + else + string="${2:-$1}" + local subtitle_color="$info_color" + fi + + string="$(trim "${string//$'\e[0m'}")" + length="$(strip_sequences "$string")" + length="${#length}" + + # Format the output. + string="${string/:/${reset}${colon_color}${separator:=:}${info_color}}" + string="${subtitle_color}${bold}${string}" + + # Print the info. + printf '%b\n' "${text_padding:+\e[${text_padding}C}${zws}${string//\\n}${reset} " + + # Calculate info height. + ((++info_height)) + + # Log that prin was used. + prin=1 +} + +get_underline() { + [[ "$underline_enabled" == "on" ]] && { + printf -v underline "%${length}s" + printf '%b%b\n' "${text_padding:+\e[${text_padding}C}${zws}${underline_color}" \ + "${underline// /$underline_char}${reset} " + } + + ((++info_height)) + length= + prin=1 +} + +get_bold() { + case $ascii_bold in + "on") ascii_bold='\e[1m' ;; + "off") ascii_bold="" ;; + esac + + case $bold in + "on") bold='\e[1m' ;; + "off") bold="" ;; + esac +} + +trim() { + set -f + # shellcheck disable=2048,2086 + set -- $* + printf '%s\n' "${*//[[:space:]]/}" + set +f +} + +trim_quotes() { + trim_output="${1//\'}" + trim_output="${trim_output//\"}" + printf "%s" "$trim_output" +} + +strip_sequences() { + strip="${1//$'\e['3[0-9]m}" + strip="${strip//$'\e['[0-9]m}" + strip="${strip//\\e\[[0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9][0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9][0-9][0-9]m}" + + printf '%s\n' "$strip" +} + +# COLORS + +set_colors() { + c1="$(color "$1")${ascii_bold}" + c2="$(color "$2")${ascii_bold}" + c3="$(color "$3")${ascii_bold}" + c4="$(color "$4")${ascii_bold}" + c5="$(color "$5")${ascii_bold}" + c6="$(color "$6")${ascii_bold}" + + [[ "$color_text" != "off" ]] && set_text_colors "$@" +} + +set_text_colors() { + if [[ "${colors[0]}" == "distro" ]]; then + title_color="$(color "$1")" + at_color="$reset" + underline_color="$reset" + subtitle_color="$(color "$2")" + colon_color="$reset" + info_color="$reset" + + # If the ascii art uses 8 as a color, make the text the fg. + ((${1:-1} == 8)) && title_color="$reset" + ((${2:-7} == 8)) && subtitle_color="$reset" + + # If the second color is white use the first for the subtitle. + ((${2:-7} == 7)) && subtitle_color="$(color "$1")" + ((${1:-1} == 7)) && title_color="$reset" + else + title_color="$(color "${colors[0]}")" + at_color="$(color "${colors[1]}")" + underline_color="$(color "${colors[2]}")" + subtitle_color="$(color "${colors[3]}")" + colon_color="$(color "${colors[4]}")" + info_color="$(color "${colors[5]}")" + fi + + # Bar colors. + if [[ "$bar_color_elapsed" == "distro" ]]; then + bar_color_elapsed="$(color fg)" + else + bar_color_elapsed="$(color "$bar_color_elapsed")" + fi + + case ${bar_color_total}${1} in + distro[736]) bar_color_total=$(color "$1") ;; + distro[0-9]) bar_color_total=$(color "$2") ;; + *) bar_color_total=$(color "$bar_color_total") ;; + esac +} + +color() { + case $1 in + [0-6]) printf '%b\e[3%sm' "$reset" "$1" ;; + 7 | "fg") printf '\e[37m%b' "$reset" ;; + *) printf '\e[38;5;%bm' "$1" ;; + esac +} + +# OTHER + +stdout() { + image_backend="off" + unset subtitle_color colon_color info_color underline_color bold title_color at_color \ + text_padding zws reset color_blocks bar_color_elapsed bar_color_total \ + c1 c2 c3 c4 c5 c6 c7 c8 +} + +err() { + err+="$(color 1)[!]${reset} $1 +" +} + +get_full_path() { + # This function finds the absolute path from a relative one. + # For example "Pictures/Wallpapers" --> "/home/dylan/Pictures/Wallpapers" + + # If the file exists in the current directory, stop here. + [[ -f "${PWD}/${1}" ]] && { printf '%s\n' "${PWD}/${1}"; return; } + + ! cd "${1%/*}" && { + err "Error: Directory '${1%/*}' doesn't exist or is inaccessible" + err " Check that the directory exists or try another directory." + exit 1 + } + + local full_dir="${1##*/}" + + # Iterate down a (possible) chain of symlinks. + while [[ -L "$full_dir" ]]; do + full_dir="$(readlink "$full_dir")" + cd "${full_dir%/*}" || exit + full_dir="${full_dir##*/}" + done + + # Final directory. + full_dir="$(pwd -P)/${1/*\/}" + + [[ -e "$full_dir" ]] && printf '%s\n' "$full_dir" +} + +get_user_config() { + # --config /path/to/config.conf + if [[ -f "$config_file" ]]; then + source "$config_file" + err "Config: Sourced user config. (${config_file})" + return + + elif [[ -f "${XDG_CONFIG_HOME}/neofetch/config.conf" ]]; then + source "${XDG_CONFIG_HOME}/neofetch/config.conf" + err "Config: Sourced user config. (${XDG_CONFIG_HOME}/neofetch/config.conf)" + + elif [[ -f "${XDG_CONFIG_HOME}/neofetch/config" ]]; then + source "${XDG_CONFIG_HOME}/neofetch/config" + err "Config: Sourced user config. (${XDG_CONFIG_HOME}/neofetch/config)" + + elif [[ -z "$no_config" ]]; then + config_file="${XDG_CONFIG_HOME}/neofetch/config.conf" + + # The config file doesn't exist, create it. + mkdir -p "${XDG_CONFIG_HOME}/neofetch/" + printf '%s\n' "$config" > "$config_file" + fi +} + +bar() { + # Get the values. + elapsed="$(($1 * bar_length / $2))" + + # Create the bar with spaces. + printf -v prog "%${elapsed}s" + printf -v total "%$((bar_length - elapsed))s" + + # Set the colors and swap the spaces for $bar_char_. + bar+="${bar_color_elapsed}${prog// /${bar_char_elapsed}}" + bar+="${bar_color_total}${total// /${bar_char_total}}" + + # Borders. + [[ "$bar_border" == "on" ]] && \ + bar="$(color fg)[${bar}$(color fg)]" + + printf "%b" "${bar}${info_color}" +} + +cache() { + if [[ "$2" ]]; then + mkdir -p "${cache_dir}/neofetch" + printf "%s" "${1/*-}=\"$2\"" > "${cache_dir}/neofetch/${1/*-}" + fi +} + +get_cache_dir() { + case $os in + "Mac OS X"|"macOS") cache_dir="/Library/Caches" ;; + *) cache_dir="/tmp" ;; + esac +} + +kde_config_dir() { + # If the user is using KDE get the KDE + # configuration directory. + if [[ "$kde_config_dir" ]]; then + return + + elif type -p kf5-config &>/dev/null; then + kde_config_dir="$(kf5-config --path config)" + + elif type -p kde4-config &>/dev/null; then + kde_config_dir="$(kde4-config --path config)" + + elif type -p kde-config &>/dev/null; then + kde_config_dir="$(kde-config --path config)" + + elif [[ -d "${HOME}/.kde4" ]]; then + kde_config_dir="${HOME}/.kde4/share/config" + + elif [[ -d "${HOME}/.kde3" ]]; then + kde_config_dir="${HOME}/.kde3/share/config" + fi + + kde_config_dir="${kde_config_dir/$'/:'*}" +} + +term_padding() { + # Get terminal padding to properly align cursor. + [[ -z "$term" ]] && get_term + + case $term in + urxvt*|rxvt-unicode) + [[ $xrdb ]] || xrdb=$(xrdb -query) + + [[ $xrdb != *internalBorder:* ]] && + return + + padding=${xrdb/*internalBorder:} + padding=${padding/$'\n'*} + + [[ $padding =~ ^[0-9]+$ ]] || + padding= + ;; + esac +} + +dynamic_prompt() { + [[ "$image_backend" == "off" ]] && { printf '\n'; return; } + [[ "$image_backend" != "ascii" ]] && ((lines=(height + yoffset) / font_height + 1)) + [[ "$image_backend" == "w3m" ]] && ((lines=lines + padding / font_height + 1)) + + # If the ascii art is taller than the info. + ((lines=lines>info_height?lines-info_height+1:1)) + + printf -v nlines "%${lines}s" + printf "%b" "${nlines// /\\n}" +} + +cache_uname() { + # Cache the output of uname so we don't + # have to spawn it multiple times. + IFS=" " read -ra uname <<< "$(uname -srm)" + + kernel_name="${uname[0]}" + kernel_version="${uname[1]}" + kernel_machine="${uname[2]}" + + if [[ "$kernel_name" == "Darwin" ]]; then + # macOS can report incorrect versions unless this is 0. + # https://github.com/dylanaraps/neofetch/issues/1607 + export SYSTEM_VERSION_COMPAT=0 + + IFS=$'\n' read -d "" -ra sw_vers <<< "$(awk -F'<|>' '/key|string/ {print $3}' \ + "/System/Library/CoreServices/SystemVersion.plist")" + for ((i=0;i<${#sw_vers[@]};i+=2)) { + case ${sw_vers[i]} in + ProductName) darwin_name=${sw_vers[i+1]} ;; + ProductVersion) osx_version=${sw_vers[i+1]} ;; + ProductBuildVersion) osx_build=${sw_vers[i+1]} ;; + esac + } + fi +} + +get_ppid() { + # Get parent process ID of PID. + case $os in + "Windows") + ppid="$(ps -p "${1:-$PPID}" | awk '{printf $2}')" + ppid="${ppid/PPID}" + ;; + + "Linux") + ppid="$(grep -i -F "PPid:" "/proc/${1:-$PPID}/status")" + ppid="$(trim "${ppid/PPid:}")" + ;; + + *) + ppid="$(ps -p "${1:-$PPID}" -o ppid=)" + ;; + esac + + printf "%s" "$ppid" +} + +get_process_name() { + # Get PID name. + case $os in + "Windows") + name="$(ps -p "${1:-$PPID}" | awk '{printf $8}')" + name="${name/COMMAND}" + name="${name/*\/}" + ;; + + "Linux") + name="$(< "/proc/${1:-$PPID}/comm")" + ;; + + *) + name="$(ps -p "${1:-$PPID}" -o comm=)" + ;; + esac + + printf "%s" "$name" +} + +decode_url() { + decode="${1//+/ }" + printf "%b" "${decode//%/\\x}" +} + +# FINISH UP + +usage() { printf "%s" "\ +Usage: neofetch func_name --option \"value\" --option \"value\" + +Neofetch is a CLI system information tool written in BASH. Neofetch +displays information about your system next to an image, your OS logo, +or any ASCII file of your choice. + +NOTE: Every launch flag has a config option. + +Options: + +INFO: + func_name Specify a function name (second part of info() from config) to + quickly display only that function's information. + + Example: neofetch uptime --uptime_shorthand tiny + + Example: neofetch uptime disk wm memory + + This can be used in bars and scripts like so: + + memory=\"\$(neofetch memory)\"; memory=\"\${memory##*: }\" + + For multiple outputs at once (each line of info in an array): + + IFS=\$'\\n' read -d \"\" -ra info < <(neofetch memory uptime wm) + + info=(\"\${info[@]##*: }\") + + --disable infoname Allows you to disable an info line from appearing + in the output. 'infoname' is the function name from the + 'print_info()' function inside the config file. + For example: 'info \"Memory\" memory' would be '--disable memory' + + NOTE: You can supply multiple args. eg. 'neofetch --disable cpu gpu' + + --title_fqdn on/off Hide/Show Fully Qualified Domain Name in title. + --package_managers on/off Hide/Show Package Manager names . (on, tiny, off) + --os_arch on/off Hide/Show OS architecture. + --speed_type type Change the type of cpu speed to display. + Possible values: current, min, max, bios, + scaling_current, scaling_min, scaling_max + + NOTE: This only supports Linux with cpufreq. + + --speed_shorthand on/off Whether or not to show decimals in CPU speed. + + NOTE: This flag is not supported in systems with CPU speed less than + 1 GHz. + + --cpu_brand on/off Enable/Disable CPU brand in output. + --cpu_cores type Whether or not to display the number of CPU cores + Possible values: logical, physical, off + + NOTE: 'physical' doesn't work on BSD. + + --cpu_speed on/off Hide/Show cpu speed. + --cpu_temp C/F/off Hide/Show cpu temperature. + + NOTE: This only works on Linux and BSD. + + NOTE: For FreeBSD and NetBSD-based systems, you need to enable + coretemp kernel module. This only supports newer Intel processors. + + --distro_shorthand on/off Shorten the output of distro (on, tiny, off) + + NOTE: This option won't work in Windows (Cygwin) + + --kernel_shorthand on/off Shorten the output of kernel + + NOTE: This option won't work in BSDs (except PacBSD and PC-BSD) + + --uptime_shorthand on/off Shorten the output of uptime (on, tiny, off) + --refresh_rate on/off Whether to display the refresh rate of each monitor + Unsupported on Windows + --gpu_brand on/off Enable/Disable GPU brand in output. (AMD/NVIDIA/Intel) + --gpu_type type Which GPU to display. (all, dedicated, integrated) + + NOTE: This only supports Linux. + + --de_version on/off Show/Hide Desktop Environment version + --gtk_shorthand on/off Shorten output of gtk theme/icons + --gtk2 on/off Enable/Disable gtk2 theme/font/icons output + --gtk3 on/off Enable/Disable gtk3 theme/font/icons output + --shell_path on/off Enable/Disable showing \$SHELL path + --shell_version on/off Enable/Disable showing \$SHELL version + --disk_show value Which disks to display. + Possible values: '/', '/dev/sdXX', '/path/to/mount point' + + NOTE: Multiple values can be given. (--disk_show '/' '/dev/sdc1') + + --disk_subtitle type What information to append to the Disk subtitle. + Takes: name, mount, dir, none + + 'name' shows the disk's name (sda1, sda2, etc) + + 'mount' shows the disk's mount point (/, /mnt/Local Disk, etc) + + 'dir' shows the basename of the disks's path. (/, Local Disk, etc) + + 'none' shows only 'Disk' or the configured title. + + --disk_percent on/off Hide/Show disk percent. + + --ip_host url URL to query for public IP + --ip_timeout int Public IP timeout (in seconds). + --ip_interface value Interface(s) to use for local IP + --song_format format Print the song data in a specific format (see config file). + --song_shorthand on/off Print the Artist/Album/Title on separate lines. + --memory_percent on/off Display memory percentage. + --memory_unit kib/mib/gib Memory output unit. + --music_player player-name Manually specify a player to use. + Available values are listed in the config file + +TEXT FORMATTING: + --colors x x x x x x Changes the text colors in this order: + title, @, underline, subtitle, colon, info + --underline on/off Enable/Disable the underline. + --underline_char char Character to use when underlining title + --bold on/off Enable/Disable bold text + --separator string Changes the default ':' separator to the specified string. + +COLOR BLOCKS: + --color_blocks on/off Enable/Disable the color blocks + --col_offset auto/num Left-padding of color blocks + --block_width num Width of color blocks in spaces + --block_height num Height of color blocks in lines + --block_range num num Range of colors to print as blocks + +BARS: + --bar_char 'elapsed char' 'total char' + Characters to use when drawing bars. + --bar_border on/off Whether or not to surround the bar with '[]' + --bar_length num Length in spaces to make the bars. + --bar_colors num num Colors to make the bar. + Set in this order: elapsed, total + --memory_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + --battery_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + --disk_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + +IMAGE BACKEND: + --backend backend Which image backend to use. + Possible values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', + 'iterm2', 'off', 'sixel', 'tycat', 'w3m', 'kitty', 'viu' + --source source Which image or ascii file to use. + Possible values: 'auto', 'ascii', 'wallpaper', '/path/to/img', + '/path/to/ascii', '/path/to/dir/', 'command output' [ascii] + + --ascii source Shortcut to use 'ascii' backend. + + NEW: neofetch --ascii \"\$(fortune | cowsay -W 30)\" + + --caca source Shortcut to use 'caca' backend. + --catimg source Shortcut to use 'catimg' backend. + --chafa source Shortcut to use 'chafa' backend. + --iterm2 source Shortcut to use 'iterm2' backend. + --jp2a source Shortcut to use 'jp2a' backend. + --kitty source Shortcut to use 'kitty' backend. + --pot source Shortcut to use 'pot' backend. + --pixterm source Shortcut to use 'pixterm' backend. + --sixel source Shortcut to use 'sixel' backend. + --termpix source Shortcut to use 'termpix' backend. + --tycat source Shortcut to use 'tycat' backend. + --w3m source Shortcut to use 'w3m' backend. + --ueberzug source Shortcut to use 'ueberzug' backend + --viu source Shortcut to use 'viu' backend + --off Shortcut to use 'off' backend (Disable ascii art). + + NOTE: 'source; can be any of the following: 'auto', 'ascii', 'wallpaper', '/path/to/img', + '/path/to/ascii', '/path/to/dir/' + +ASCII: + --ascii_colors x x x x x x Colors to print the ascii art + --ascii_distro distro Which Distro's ascii art to print + + NOTE: AIX, Hash, Alpine, AlterLinux, Amazon, Anarchy, Android, + instantOS, Antergos, antiX, \"AOSC OS\", \"AOSC OS/Retro\", + Apricity, ArchCraft, ArcoLinux, ArchBox, ARCHlabs, ArchStrike, + XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig, + BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, BunsenLabs, + Calculate, Carbs, CentOS, Chakra, ChaletOS, Chapeau, Chrom, + Cleanjaro, ClearOS, Clear_Linux, Clover, Condres, Container_Linux, + CRUX, Cucumber, dahlia, Debian, Deepin, DesaOS, Devuan, DracOS, + DarkOs, Itc, DragonFly, Drauger, Elementary, EndeavourOS, Endless, + EuroLinux, Exherbo, Fedora, Feren, FreeBSD, FreeMiNT, Frugalware, + Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, gNewSense, GNOME, GNU, + GoboLinux, Grombyang, Guix, Haiku, Huayra, Hyperbola, janus, Kali, + KaOS, KDE_neon, Kibojoe, Kogaion, Korora, KSLinux, Kubuntu, LEDE, + LaxerOS, LibreELEC, LFS, Linux_Lite, LMDE, Lubuntu, Lunar, macos, + Mageia, MagpieOS, Mandriva, Manjaro, Maui, Mer, Minix, LinuxMint, + Live_Raizo, MX_Linux, Namib, Neptune, NetBSD, Netrunner, Nitrux, + NixOS, Nurunner, NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, + openmamba, OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, + OS Elbrus, PacBSD, Parabola, Pardus, Parrot, Parsix, TrueOS, + PCLinuxOS, Pengwin, Peppermint, popos, Porteus, PostMarketOS, + Proxmox, Puppy, PureOS, Qubes, Quibian, Radix, Raspbian, Reborn_OS, + Redstar, Redcore, Redhat, Refracted_Devuan, Regata, Regolith, Rosa, + sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, + SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, SmartOS, + Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, + t2, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, + Ubuntu-Cinnamon, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, + Ubuntu-Studio, Ubuntu, Univention, Venom, Void, semc, Obarun, + windows10, Windows7, Xubuntu, Zorin, and IRIX have ascii logos. + + NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. + + NOTE: Use '{distro name}_old' to use the old logos. + + NOTE: Ubuntu has flavor variants. + + NOTE: Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, + Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. + + NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, + CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, + Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, + Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, + Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, + postmarketOS, and Void have a smaller logo variant. + + NOTE: Use '{distro name}_small' to use the small variants. + + --ascii_bold on/off Whether or not to bold the ascii logo. + -L, --logo Hide the info text and only show the ascii logo. + +IMAGE: + --loop Redraw the image constantly until Ctrl+C is used. This fixes issues + in some terminals emulators when using image mode. + --size 00px | --size 00% How to size the image. + Possible values: auto, 00px, 00%, none + --catimg_size 1/2 Change the resolution of catimg. + --crop_mode mode Which crop mode to use + Takes the values: normal, fit, fill + --crop_offset value Change the crop offset for normal mode. + Possible values: northwest, north, northeast, + west, center, east, southwest, south, southeast + + --xoffset px How close the image will be to the left edge of the + window. This only works with w3m. + --yoffset px How close the image will be to the top edge of the + window. This only works with w3m. + --bg_color color Background color to display behind transparent image. + This only works with w3m. + --gap num Gap between image and text. + + NOTE: --gap can take a negative value which will move the text + closer to the left side. + + --clean Delete cached files and thumbnails. + +OTHER: + --config /path/to/config Specify a path to a custom config file + --config none Launch the script without a config file + --no_config Don't create the user config file. + --print_config Print the default config file to stdout. + --stdout Turn off all colors and disables any ASCII/image backend. + --help Print this text and exit + --version Show neofetch version + -v Display error messages. + -vv Display a verbose log for error reporting. + +DEVELOPER: + --gen-man Generate a manpage for Neofetch in your PWD. (Requires GNU help2man) + + +Report bugs to https://github.com/dylanaraps/neofetch/issues + +" +exit 1 +} + +get_args() { + # Check the commandline flags early for '--config'. + [[ "$*" != *--config* && "$*" != *--no_config* ]] && get_user_config + + while [[ "$1" ]]; do + case $1 in + # Info + "--title_fqdn") title_fqdn="$2" ;; + "--package_managers") package_managers="$2" ;; + "--os_arch") os_arch="$2" ;; + "--cpu_cores") cpu_cores="$2" ;; + "--cpu_speed") cpu_speed="$2" ;; + "--speed_type") speed_type="$2" ;; + "--speed_shorthand") speed_shorthand="$2" ;; + "--distro_shorthand") distro_shorthand="$2" ;; + "--kernel_shorthand") kernel_shorthand="$2" ;; + "--uptime_shorthand") uptime_shorthand="$2" ;; + "--cpu_brand") cpu_brand="$2" ;; + "--gpu_brand") gpu_brand="$2" ;; + "--gpu_type") gpu_type="$2" ;; + "--refresh_rate") refresh_rate="$2" ;; + "--de_version") de_version="$2" ;; + "--gtk_shorthand") gtk_shorthand="$2" ;; + "--gtk2") gtk2="$2" ;; + "--gtk3") gtk3="$2" ;; + "--shell_path") shell_path="$2" ;; + "--shell_version") shell_version="$2" ;; + "--ip_host") public_ip_host="$2" ;; + "--ip_timeout") public_ip_timeout="$2" ;; + "--ip_interface") + unset local_ip_interface + for arg in "$@"; do + case "$arg" in + "--ip_interface") ;; + "-"*) break ;; + *) local_ip_interface+=("$arg") ;; + esac + done + ;; + + "--song_format") song_format="$2" ;; + "--song_shorthand") song_shorthand="$2" ;; + "--music_player") music_player="$2" ;; + "--memory_percent") memory_percent="$2" ;; + "--memory_unit") memory_unit="$2" ;; + "--cpu_temp") + cpu_temp="$2" + [[ "$cpu_temp" == "on" ]] && cpu_temp="C" + ;; + + "--disk_subtitle") disk_subtitle="$2" ;; + "--disk_percent") disk_percent="$2" ;; + "--disk_show") + unset disk_show + for arg in "$@"; do + case $arg in + "--disk_show") ;; + "-"*) break ;; + *) disk_show+=("$arg") ;; + esac + done + ;; + + "--disable") + for func in "$@"; do + case $func in + "--disable") continue ;; + "-"*) break ;; + *) + ((bash_version >= 4)) && func="${func,,}" + unset -f "get_$func" + ;; + esac + done + ;; + + # Text Colors + "--colors") + unset colors + for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do + case $arg in + "-"*) break ;; + *) colors+=("$arg") ;; + esac + done + colors+=(7 7 7 7 7 7) + ;; + + # Text Formatting + "--underline") underline_enabled="$2" ;; + "--underline_char") underline_char="$2" ;; + "--bold") bold="$2" ;; + "--separator") separator="$2" ;; + + # Color Blocks + "--color_blocks") color_blocks="$2" ;; + "--block_range") block_range=("$2" "$3") ;; + "--block_width") block_width="$2" ;; + "--block_height") block_height="$2" ;; + "--col_offset") col_offset="$2" ;; + + # Bars + "--bar_char") + bar_char_elapsed="$2" + bar_char_total="$3" + ;; + + "--bar_border") bar_border="$2" ;; + "--bar_length") bar_length="$2" ;; + "--bar_colors") + bar_color_elapsed="$2" + bar_color_total="$3" + ;; + + "--memory_display") memory_display="$2" ;; + "--battery_display") battery_display="$2" ;; + "--disk_display") disk_display="$2" ;; + + # Image backend + "--backend") image_backend="$2" ;; + "--source") image_source="$2" ;; + "--ascii" | "--caca" | "--catimg" | "--chafa" | "--jp2a" | "--iterm2" | "--off" |\ + "--pot" | "--pixterm" | "--sixel" | "--termpix" | "--tycat" | "--w3m" | "--kitty" |\ + "--ueberzug" | "--viu") + image_backend="${1/--}" + case $2 in + "-"* | "") ;; + *) image_source="$2" ;; + esac + ;; + + # Image options + "--loop") image_loop="on" ;; + "--image_size" | "--size") image_size="$2" ;; + "--catimg_size") catimg_size="$2" ;; + "--crop_mode") crop_mode="$2" ;; + "--crop_offset") crop_offset="$2" ;; + "--xoffset") xoffset="$2" ;; + "--yoffset") yoffset="$2" ;; + "--background_color" | "--bg_color") background_color="$2" ;; + "--gap") gap="$2" ;; + "--clean") + [[ -d "$thumbnail_dir" ]] && rm -rf "$thumbnail_dir" + rm -rf "/Library/Caches/neofetch/" + rm -rf "/tmp/neofetch/" + exit + ;; + + "--ascii_colors") + unset ascii_colors + for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do + case $arg in + "-"*) break ;; + *) ascii_colors+=("$arg") + esac + done + ascii_colors+=(7 7 7 7 7 7) + ;; + + "--ascii_distro") + image_backend="ascii" + ascii_distro="$2" + ;; + + "--ascii_bold") ascii_bold="$2" ;; + "--logo" | "-L") + image_backend="ascii" + print_info() { printf '\n'; } + ;; + + # Other + "--config") + case $2 in + "none" | "off" | "") ;; + *) + config_file="$(get_full_path "$2")" + get_user_config + ;; + esac + ;; + "--no_config") no_config="on" ;; + "--stdout") stdout="on" ;; + "-v") verbose="on" ;; + "--print_config") printf '%s\n' "$config"; exit ;; + "-vv") set -x; verbose="on" ;; + "--help") usage ;; + "--version") + printf '%s\n' "Neofetch $version" + exit 1 + ;; + "--gen-man") + help2man -n "A fast, highly customizable system info script" \ + -N ./neofetch -o neofetch.1 + exit 1 + ;; + + "--json") + json="on" + unset -f get_title get_cols get_underline + + printf '{\n' + print_info 2>/dev/null + printf ' %s\n' "\"Version\": \"${version}\"" + printf '}\n' + exit + ;; + + "--travis") + print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "GPU Driver" gpu_driver + info "Memory" memory + + info "Disk" disk + info "Battery" battery + info "Font" font + info "Song" song + info "Local IP" local_ip + info "Public IP" public_ip + info "Users" users + + info cols + + # Testing. + prin "prin" + prin "prin" "prin" + + # Testing no subtitles. + info uptime + info disk + } + + refresh_rate="on" + shell_version="on" + memory_display="infobar" + disk_display="infobar" + cpu_temp="C" + + # Known implicit unused variables. + mpc_args=() + printf '%s\n' "$kernel $icons $font $battery $locale ${mpc_args[*]}" + ;; + esac + + shift + done +} + +get_simple() { + while [[ "$1" ]]; do + [[ "$(type -t "get_$1")" == "function" ]] && { + get_distro + stdout + simple=1 + info "$1" "$1" + } + shift + done + ((simple)) && exit +} + +old_functions() { + # Removed functions for backwards compatibility. + get_line_break() { :; } + get_cpu_usage() { :; } +} + +get_distro_ascii() { + # This function gets the distro ascii art and colors. + # + # $ascii_distro is the same as $distro. + case $(trim "$ascii_distro") in + "AIX"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `:+ssssossossss+-` + .oys///oyhddddhyo///sy+. + /yo:+hNNNNNNNNNNNNNNNNh+:oy/ + :h/:yNNNNNNNNNNNNNNNNNNNNNNy-+h: + `ys.yNNNNNNNNNNNNNNNNNNNNNNNNNNy.ys + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oh + h+-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.oy +/d`mNNNNNNN/::mNNNd::m+:/dNNNo::dNNNd`m: +h//NNNNNNN: . .NNNh mNo od. -dNNNNN:+y +N.sNNNNNN+ -N/ -NNh mNNd. sNNNNNNNo-m +N.sNNNNNs +oo /Nh mNNs` ` /mNNNNNNo-m +h//NNNNh ossss` +h md- .hm/ `sNNNNN:+y +:d`mNNN+/yNNNNNd//y//h//oNNNNy//sNNNd`m- + yo-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNm.ss + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oy + sy.yNNNNNNNNNNNNNNNNNNNNNNNNNNs.yo + :h+-yNNNNNNNNNNNNNNNNNNNNNNs-oh- + :ys:/yNNNNNNNNNNNNNNNmy/:sy: + .+ys///osyhhhhys+///sy+. + -/osssossossso/- +EOF + ;; + + "Hash"*) + set_colors 123 + read -rd '' ascii_data <<'EOF' +${c1} + + + ###### + + ### ###### ### + ##### ###### ##### + ###### ###### ###### + +####### '"###### '"######## +####### ###### ######## +####### ###### ######## + + ###### '"###### '"###### + ##### ###### ##### + ### ###### ### + ~ ###### ~ + +EOF + ;; + + "alpine_small") + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ /\\ + /${c2}/ ${c1}\\ \\ + /${c2}/ ${c1}\\ \\ +/${c2}// ${c1}\\ \\ +${c2}// ${c1}\\ \\ + \\ +EOF + ;; + + "Alpine"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} .hddddddddddddddddddddddh. + :dddddddddddddddddddddddddd: + /dddddddddddddddddddddddddddd/ + +dddddddddddddddddddddddddddddd+ + `sdddddddddddddddddddddddddddddddds` + `ydddddddddddd++hdddddddddddddddddddy` +.hddddddddddd+` `+ddddh:-sdddddddddddh. +hdddddddddd+` `+y: .sddddddddddh +ddddddddh+` `//` `.` -sddddddddd +ddddddh+` `/hddh/` `:s- -sddddddd +ddddh+` `/+/dddddh/` `+s- -sddddd +ddd+` `/o` :dddddddh/` `oy- .yddd +hdddyo+ohddyosdddddddddho+oydddy++ohdddh +.hddddddddddddddddddddddddddddddddddddh. + `yddddddddddddddddddddddddddddddddddy` + `sdddddddddddddddddddddddddddddddds` + +dddddddddddddddddddddddddddddd+ + /dddddddddddddddddddddddddddd/ + :dddddddddddddddddddddddddd: + .hddddddddddddddddddddddh. +EOF + ;; + + "Alter"*) + set_colors 6 6 + read -rd '' ascii_data <<'EOF' +${c1} %, + ^WWWw + 'wwwwww + !wwwwwwww + #`wwwwwwwww + @wwwwwwwwwwww + wwwwwwwwwwwwwww + wwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwwww, + w~1i.wwwwwwwwwwwwwwwww, + 3~:~1lli.wwwwwwwwwwwwwwww. + :~~:~?ttttzwwwwwwwwwwwwwwww + #<~:~~~~?llllltO-.wwwwwwwwwww + #~:~~:~:~~?ltlltlttO-.wwwwwwwww + @~:~~:~:~:~~(zttlltltlOda.wwwwwww + @~:~~: ~:~~:~:(zltlltlO a,wwwwww + 8~~:~~:~~~~:~~~~_1ltltu ,www + 5~~:~~:~~:~~:~~:~~~_1ltq N,, + g~:~~:~~~:~~:~~:~:~~~~1q N, +EOF + ;; + + "Amazon"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/oydNNdyo:.` + `.:+shmMMMMMMMMMMMMMMmhs+:.` + -+hNNMMMMMMMMMMMMMMMMMMMMMMNNho- +.`` -/+shmNNMMMMMMNNmhs+/- ``. +dNmhs+:. `.:/oo/:.` .:+shmNd +dMMMMMMMNdhs+:.. ..:+shdNMMMMMMMd +dMMMMMMMMMMMMMMNds odNMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +.:+ydNMMMMMMMMMMMh yMMMMMMMMMMMNdy+:. + `.:+shNMMMMMh yMMMMMNhs+:`` + `-+shy shs+:` +EOF + ;; + + "Anarchy"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' + ${c2}..${c1} + ${c2}..${c1} + ${c2}:..${c1} + ${c2}:+++.${c1} + .:::++${c2}++++${c1}+::. + .:+######${c2}++++${c1}######+:. + .+#########${c2}+++++${c1}##########:. + .+##########${c2}+++++++${c1}##${c2}+${c1}#########+. + +###########${c2}+++++++++${c1}############: + +##########${c2}++++++${c1}#${c2}++++${c1}#${c2}+${c1}###########+ + +###########${c2}+++++${c1}###${c2}++++${c1}#${c2}+${c1}###########+ + :##########${c2}+${c1}#${c2}++++${c1}####${c2}++++${c1}#${c2}+${c1}############: + ###########${c2}+++++${c1}#####${c2}+++++${c1}#${c2}+${c1}###${c2}++${c1}######+ +.##########${c2}++++++${c1}#####${c2}++++++++++++${c1}#######. +.##########${c2}+++++++++++++++++++${c1}###########. + #####${c2}++++++++++++++${c1}###${c2}++++++++${c1}#########+ + :###${c2}++++++++++${c1}#########${c2}+++++++${c1}#########: + +######${c2}+++++${c1}##########${c2}++++++++${c1}#######+ + +####${c2}+++++${c1}###########${c2}+++++++++${c1}#####+ + :##${c2}++++++${c1}############${c2}++++++++++${c1}##: + .${c2}++++++${c1}#############${c2}++++++++++${c1}+. + :${c2}++++${c1}###############${c2}+++++++${c1}:: + .${c2}++. .:+${c1}##############${c2}+++++++${c1}.. + ${c2}.:.${c1} ..::++++++::..:${c2}++++${c1}+. + ${c2}.${c1} ${c2}.:+++${c1}. + ${c2}.:${c1}: + ${c2}..${c1} + ${c2}..${c1} +EOF + ;; + + "android_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ;, ,; + ';,.-----.,;' + ,' ', + / O O \\ +| | +'-----------------' +EOF + ;; + + "Android"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} -o o- + +hydNNNNdyh+ + +mMMMMMMMMMMMMm+ + `dMM${c2}m:${c1}NMMMMMMN${c2}:m${c1}MMd` + hMMMMMMMMMMMMMMMMMMh + .. yyyyyyyyyyyyyyyyyyyy .. +.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm. +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM- + +yy+ MMMMMMMMMMMMMMMMMMMM +yy+ + mMMMMMMMMMMMMMMMMMMm + `/++MMMMh++hMMMM++/` + MMMMo oMMMM + MMMMo oMMMM + oNMm- -mMNs +EOF + ;; + + "instantOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + +${c1} + 'cx0XWWMMWNKOd:'. + .;kNMMMMMMMMMMMMMWNKd' + 'kNMMMMMMWNNNWMMMMMMMMXo. +,0MMMMMW0o;'..,:dKWMMMMMWx. +OMMMMMXl. .xNMMMMMNo +WMMMMNl .kWWMMMMO' +MMMMMX; oNWMMMMK, +NMMMMWo .OWMMMMMK, +kWMMMMNd. ,kWMMMMMMK, +'kWMMMMWXxl:;;:okNMMMMMMMMK, + .oXMMMMMMMWWWMMMMMMMMMMMMK, + 'oKWMMMMMMMMMMMMMMMMMMMK, + .;lxOKXXXXXXXXXXXXXXXO;...... + ................,d0000000kd:. + .kMMMMMMMMMW0; + .kMMMMMMMMMMMX + .xMMMMMMMMMMMW + cXMMMMMMMMMM0 + :0WMMMMMMNx, + .o0NMWNOc. +EOF + ;; + + "Antergos"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c2} `.-/::/-`` + .-/osssssssso/. + :osyysssssssyyys+- + `.+yyyysssssssssyyyyy+. + `/syyyyyssssssssssyyyyys-` + `/yhyyyyysss${c1}++${c2}ssosyyyyhhy/` + .ohhhyyyys${c1}o++/+o${c2}so${c1}+${c2}syy${c1}+${c2}shhhho. + .shhhhys${c1}oo++//+${c2}sss${c1}+++${c2}yyy${c1}+s${c2}hhhhs. + -yhhhhs${c1}+++++++o${c2}ssso${c1}+++${c2}yyy${c1}s+o${c2}hhddy: + -yddhhy${c1}o+++++o${c2}syyss${c1}++++${c2}yyy${c1}yooy${c2}hdddy- + .yddddhs${c1}o++o${c2}syyyyys${c1}+++++${c2}yyhh${c1}sos${c2}hddddy` +`odddddhyosyhyyyyyy${c1}++++++${c2}yhhhyosddddddo +.dmdddddhhhhhhhyyyo${c1}+++++${c2}shhhhhohddddmmh. +ddmmdddddhhhhhhhso${c1}++++++${c2}yhhhhhhdddddmmdy +dmmmdddddddhhhyso${c1}++++++${c2}shhhhhddddddmmmmh +-dmmmdddddddhhys${c1}o++++o${c2}shhhhdddddddmmmmd- +.smmmmddddddddhhhhhhhhhdddddddddmmmms. + `+ydmmmdddddddddddddddddddmmmmdy/. + `.:+ooyyddddddddddddyyso+:.` +EOF + ;; + + "antiX"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + \ + , - ~ ^ ~ - \ / + , ' \ ' , / + , \ '/ + , \ / , + ,___, \/ , + / | _ _ _|_ o /\ , +|, | / |/ | | | / \ , + \,_/\_/ | |_/|_/|_/_/ \, + , / ,\ + , / , ' \ + ' - , _ _ _ , ' +EOF + ;; + + "AOSC OS/Retro"*) + set_colors 4 7 1 3 + read -rd '' ascii_data <<'EOF' +${c2} ......... + ................... + .....................${c1}################${c2} + .............. ....${c1}################${c2} +.............. ...${c1}################${c2} +............. ..${c1}****************${c2} +............ . .${c1}****************${c2} +........... ... ${c1}................${c2} +.......... ..... ${c1}...............${c2} +......... ....... ... + .${c3}...... ${c2}. + ${c3}..... .....${c2}.... ${c4}........... + ${c3}.... ......${c2}. ${c4}........... + ${c3}... ....... ${c4}........... + ${c3}................ ${c4}*********** + ${c3}................ ${c4}########### + ${c3}**************** + ${c3}################ +EOF + ;; + + "AOSC OS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .:+syhhhhys+:. + .ohNMMMMMMMMMMMMMMNho. + `+mMMMMMMMMMMmdmNMMMMMMMMm+` + +NMMMMMMMMMMMM/ `./smMMMMMN+ + .mMMMMMMMMMMMMMMo -yMMMMMm. + :NMMMMMMMMMMMMMMMs .hMMMMN: + .NMMMMhmMMMMMMMMMMm+/- oMMMMN. + dMMMMs ./ymMMMMMMMMMMNy. sMMMMd +-MMMMN` oMMMMMMMMMMMN: `NMMMM- +/MMMMh NMMMMMMMMMMMMm hMMMM/ +/MMMMh NMMMMMMMMMMMMm hMMMM/ +-MMMMN` :MMMMMMMMMMMMy. `NMMMM- + dMMMMs .yNMMMMMMMMMMMNy/. sMMMMd + .NMMMMo -/+sMMMMMMMMMMMmMMMMN. + :NMMMMh. .MMMMMMMMMMMMMMMN: + .mMMMMMy- NMMMMMMMMMMMMMm. + +NMMMMMms/.` mMMMMMMMMMMMN+ + `+mMMMMMMMMNmddMMMMMMMMMMm+` + .ohNMMMMMMMMMMMMMMNho. + .:+syhhhhys+:. +EOF + ;; + + "Apricity"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ./o- + ``...`` `:. -/: + `-+ymNMMMMMNmho-` :sdNNm/ + `+dMMMMMMMMMMMMMMMmo` sh:.:::- + /mMMMMMMMMMMMMMMMMMMMm/`sNd/ + oMMMMMMMMMMMMMMMMMMMMMMMs -` +:MMMMMMMMMMMMMMMMMMMMMMMMM/ +NMMMMMMMMMMMMMMMMMMMMMMMMMd +MMMMMMMmdmMMMMMMMMMMMMMMMMd +MMMMMMy` .mMMMMMMMMMMMmho:` +MMMMMMNo/sMMMMMMMNdy+-.`-/ +MMMMMMMMMMMMNdy+:.`.:ohmm: +MMMMMMMmhs+-.`.:+ymNMMMy. +MMMMMM/`.-/ohmNMMMMMMy- +MMMMMMNmNNMMMMMMMMmo. +MMMMMMMMMMMMMMMms:` +MMMMMMMMMMNds/. +dhhyys+/-` +EOF + ;; + + "Archcraft"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -m: + :NMM+ .+ + +MMMMMo -NMy + sMMMMMMMy -MMMMh` + yMMMMMMMMMd` oMMMMd` + `dMMMMMMMMMMMm. /MMMMm- + .mMMMMMm-dMMMMMN- :NMMMN: + -NMMMMMd` yMMMMMN: .mMMMM/ + :NMMMMMy sMMMMMM+ `dMMMMo + +MMMMMMs +MMMMMMs `hMMMMy + oMMMMMMMds- :NMMMMMy sMMMMh` + yMMMMMNoydMMmo` -NMMMMMd` +MMMMd. + `dMMMMMN- `:yNNs` .mMMMMMm. /MMMMm- + .mMMMMMm. :hN/ `dMMMMMN- -NMMMN: + -NMMMMMd` -hh` `yMMMMMN: .mMMMM/ + :NMMMMMy `s` :h. oMMMMMM+ `----- + +MMMMMMo .dMm. `o. +MMMMMMo +sMMMMMM+ .mMMMN: :` :NMMMMMy +EOF + ;; + + "arcolinux_small"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} A + ooo + ooooo + ooooooo + ooooooooo + ooooo ooooo + ooooo ooooo + ooooo ooooo + ooooo ${c1}${c2} + ooooo ${c1}${c2} +ooooo ${c1}${c2} +EOF + ;; + + "ArcoLinux"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} /- + ooo: + yoooo/ + yooooooo + yooooooooo + yooooooooooo + .yooooooooooooo + .oooooooooooooooo + .oooooooarcoooooooo + .ooooooooo-oooooooooo + .ooooooooo- oooooooooo + :ooooooooo. :ooooooooo + :ooooooooo. :ooooooooo + :oooarcooo .oooarcooo + :ooooooooy .ooooooooo + :ooooooooo ${c1}/ooooooooooooooooooo${c2} + :ooooooooo ${c1}.-ooooooooooooooooo.${c2} + ooooooooo- ${c1}-ooooooooooooo.${c2} + ooooooooo- ${c1}.-oooooooooo.${c2} +ooooooooo. ${c1}-ooooooooo${c2} +EOF + ;; + + "arch_small") + set_colors 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + /\\ \\ +${c2} / \\ + / ,, \\ + / | | -\\ +/_-'' ''-_\\ +EOF + ;; + + "arch_old") + set_colors 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} __ + _=(SDGJT=_ + _GTDJHGGFCVS) + ,GTDJGGDTDFBGX0 +${c1} JDJDIJHRORVFSBSVL${c2}-=+=,_ +${c1} IJFDUFHJNXIXCDXDSV,${c2} "DEBL +${c1} [LKDSDJTDU=OUSCSBFLD.${c2} '?ZWX, +${c1} ,LMDSDSWH' `DCBOSI${c2} DRDS], +${c1} SDDFDFH' !YEWD,${c2} )HDROD +${c1} !KMDOCG &GSU|${c2}\_GFHRGO\' +${c1} HKLSGP'${c2} __${c1}\TKM0${c2}\GHRBV)' +${c1}JSNRVW'${c2} __+MNAEC${c1}\IOI,${c2}\BN' +${c1}HELK['${c2} __,=OFFXCBGHC${c1}\FD) +${c1}?KGHE ${c2}\_-#DASDFLSV='${c1} 'EF +'EHTI !H + `0F' '! +EOF + ;; + + "ArchBox"*) + set_colors 2 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ...:+oh/:::.. + ..-/oshhhhhh` `::::-. + .:/ohhhhhhhhhhhh` `-::::. + .+shhhhhhhhhhhhhhhhh` `.::-. + /`-:+shhhhhhhhhhhhhh` .-/+shh + / .:/ohhhhhhhhh` .:/ohhhhhhhh + / `-:+shhh` ..:+shhhhhhhhhhhh + / .:ohhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / .+o+ `hhhhhhhhhhhhhhhhhhhh + / -hhhhh `hhhhhhhhhhhhhhhhhhhh + / ohhhhho `hhhhhhhhhhhhhhhhhhhh + /:::+`hhhhoos` `hhhhhhhhhhhhhhhhhs+` + `--/:` /: `hhhhhhhhhhhho/- + -/:. `hhhhhhs+:-` + ::::/ho/-` +EOF + ;; + + "ARCHlabs"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} 'c' + 'kKk, + .dKKKx. + .oKXKXKd. + .l0XXXXKKo. + c0KXXXXKX0l. + :0XKKOxxOKX0l. + :OXKOc. .c0XX0l. + :OK0o. ${c4}...${c1}'dKKX0l. + :OX0c ${c4};xOx'${c1}'dKXX0l. + :0KKo.${c4}.o0XXKd'.${c1}lKXX0l. + c0XKd.${c4}.oKXXXXKd..${c1}oKKX0l. + .c0XKk;${c4}.l0K0OO0XKd..${c1}oKXXKo. + .l0XXXk:${c4},dKx,.'l0XKo.${c1}.kXXXKo. + .o0XXXX0d,${c4}:x; .oKKx'${c1}.dXKXXKd. + .oKXXXXKK0c.${c4};. :00c'${c1}cOXXXXXKd. + .dKXXXXXXXXk,${c4}. cKx'${c1}'xKXXXXXXKx' + 'xKXXXXK0kdl:. ${c4}.ok; ${c1}.cdk0KKXXXKx' + 'xKK0koc,.. ${c4}'c, ${c1} ..,cok0KKk, + ,xko:'. ${c4}.. ${c1} .':okx; + .,'. .',. +EOF + ;; + + "ArchStrike"*) + set_colors 8 6 + read -rd '' ascii_data <<'EOF' +${c1}                   *    +                  **. +                 **** +                ****** +                ******* +              ** ******* +             **** ******* +            ${c1}****${c2}_____${c1}***${c2}/${c1}* +           ***${c2}/${c1}*******${c2}//${c1}*** +          **${c2}/${c1}********${c2}///${c1}*${c2}/${c1}** +         **${c2}/${c1}*******${c2}////${c1}***${c2}/${c1}** +        **${c2}/${c1}****${c2}//////.,${c1}****${c2}/${c1}** +       ***${c2}/${c1}*****${c2}/////////${c1}**${c2}/${c1}*** +      ****${c2}/${c1}****    ${c2}/////${c1}***${c2}/${c1}**** +     ******${c2}/${c1}*** ${c2}////   ${c1}**${c2}/${c1}****** +    ********${c2}/${c1}* ${c2}///      ${c1}*${c2}/${c1}******** +  ,******     ${c2}// ______ /    ${c1}******, +EOF + ;; + + *"XFerience"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ``--:::::::-.` + .-/+++ooooooooo+++:-` + `-/+oooooooooooooooooo++:. + -/+oooooo/+ooooooooo+/ooo++:` + `/+oo++oo. .+oooooo+.-: +:-o+- + `/+o/. -o. :oooooo+ ```:.+oo+- +`:+oo- -/` :oooooo+ .`-`+oooo/. +.+ooo+. .` `://///+-+..oooooo+:` +-+ooo:` ``.-+oooooo+/` +-+oo/` :+oooo/. +.+oo: ..-/. . -+oo+/` +`/++- -:::++::/. -+oo+- + ./o: `:///+- `./ooo+:` + .++- `` /-` -:/+oooo+:` + .:+/:`` `-:ooooooo++- + ./+o+//:...../+oooooooo++:` + `:/++ooooooooooooo++/-` + `.-//++++++//:-.` + `````` +EOF + ;; + + "ArchMerge"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} y: + sMN- + +MMMm` + /MMMMMd` + :NMMMMMMy + -NMMMMMMMMs + .NMMMMMMMMMM+ + .mMMMMMMMMMMMM+ + oNMMMMMMMMMMMMM+ + `+:-+NMMMMMMMMMMMM+ + .sNMNhNMMMMMMMMMMMM/ + `hho/sNMMMMMMMMMMMMMMM/ + `.`omMMmMMMMMMMMMMMMMMMM+ + .mMNdshMMMMd+::oNMMMMMMMMMo + .mMMMMMMMMM+ `yMMMMMMMMMs + .NMMMMMMMMM/ yMMMMMMMMMy + -NMMMMMMMMMh `mNMMMMMMMMd` + /NMMMNds+:.` `-/oymMMMm. + +Mmy/. `:smN: +/+. -o. +EOF + ;; + + "Arch"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -` + .o+` + `ooo/ + `+oooo: + `+oooooo: + -+oooooo+: + `/:-:++oooo+: + `/++++/+++++++: + `/++++++++++++++: + `/+++o${c2}oooooooo${c1}oooo/` +${c2} ${c1}./${c2}ooosssso++osssssso${c1}+` +${c2} .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +EOF + ;; + + "artix_small"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + /`'.,\\ + / ', + / ,`\\ + / ,.'`. \\ +/.,'` `'.\\ +EOF + ;; + + "Artix"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ' + 'o' + 'ooo' + 'ooxoo' + 'ooxxxoo' + 'oookkxxoo' + 'oiioxkkxxoo' + ':;:iiiioxxxoo' + `'.;::ioxxoo' + '-. `':;jiooo' + 'oooio-.. `'i:io' + 'ooooxxxxoio:,. `'-;' + 'ooooxxxxxkkxoooIi:-. `' + 'ooooxxxxxkkkkxoiiiiiji' + 'ooooxxxxxkxxoiiii:'` .i' + 'ooooxxxxxoi:::'` .;ioxo' + 'ooooxooi::'` .:iiixkxxo' + 'ooooi:'` `'';ioxxo' + 'i:'` '':io' +'` `' +EOF + ;; + + "Arya"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} `oyyy/${c2}-yyyyyy+ +${c1} -syyyy/${c2}-yyyyyy+ +${c1} .syyyyy/${c2}-yyyyyy+ +${c1} :yyyyyy/${c2}-yyyyyy+ +${c1} `/ :yyyyyy/${c2}-yyyyyy+ +${c1} .+s :yyyyyy/${c2}-yyyyyy+ +${c1} .oys :yyyyyy/${c2}-yyyyyy+ +${c1} -oyys :yyyyyy/${c2}-yyyyyy+ +${c1} :syyys :yyyyyy/${c2}-yyyyyy+ +${c1} /syyyys :yyyyyy/${c2}-yyyyyy+ +${c1} +yyyyyys :yyyyyy/${c2}-yyyyyy+ +${c1} .oyyyyyyo. :yyyyyy/${c2}-yyyyyy+ --------- +${c1} .syyyyyy+` :yyyyyy/${c2}-yyyyy+-+syyyyyyyy +${c1} -syyyyyy/ :yyyyyy/${c2}-yyys:.syyyyyyyyyy +${c1}:syyyyyy/ :yyyyyy/${c2}-yyo.:syyyyyyyyyyy +EOF + ;; + + "Bedrock"*) + set_colors 8 7 + read -rd '' ascii_data <<'EOF' +${c1}-------------------------------------- +-------------------------------------- +-------------------------------------- +---${c2}\\\\\\\\\\\\\\\\\\\\\\\\${c1}----------------------- +----${c2}\\\\\\ \\\\\\${c1}---------------------- +-----${c2}\\\\\\ \\\\\\${c1}--------------------- +------${c2}\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\${c1}------ +-------${c2}\\\\\\ \\\\\\${c1}----- +--------${c2}\\\\\\ \\\\\\${c1}---- +---------${c2}\\\\\\ ______ \\\\\\${c1}--- +----------${c2}\\\\\\ ///${c1}--- +-----------${c2}\\\\\\ ///${c1}---- +------------${c2}\\\\\\ ///${c1}----- +-------------${c2}\\\\\\////////////////${c1}------ +-------------------------------------- +-------------------------------------- +-------------------------------------- +EOF + ;; + + "Bitrig"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `hMMMMN+ + -MMo-dMd` + oMN- oMN` + yMd /NM: + .mMmyyhMMs + :NMMMhsmMh + +MNhNNoyMm- + hMd.-hMNMN: + mMmsssmMMMo + .MMdyyhNMMMd + oMN.`/dMddMN` + yMm/hNm+./MM/ +.dMMMmo.``.NMo +:NMMMNmmmmmMMh +/MN/-------oNN: +hMd. .dMh +sm/ /ms +EOF + ;; + + "BlackArch"*) + set_colors 1 1 0 1 + read -rd '' ascii_data <<'EOF' +${c3} 00 + 11 + ====${c1} + .${c3}//${c1} + `o${c3}//${c1}: + `+o${c3}//${c1}o: + `+oo${c3}//${c1}oo: + -+oo${c3}//${c1}oo+: + `/:-:+${c3}//${c1}ooo+: + `/+++++${c3}//${c1}+++++: + `/++++++${c3}//${c1}++++++: + `/+++o${c2}ooo${c3}//${c2}ooo${c1}oooo/` +${c2} ${c1}./${c2}ooosssso${c3}//${c2}osssssso${c1}+` +${c2} .oossssso-`${c3}//${c1}`/ossssss+` + -osssssso. ${c3}//${c1} :ssssssso. + :osssssss/ ${c3}//${c1} osssso+++. + /ossssssss/ ${c3}//${c1} +ssssooo/- + `/ossssso+/:- ${c3}//${c1} -:/+osssso+- + `+sso+:-` ${c3}//${c1} `.-/+oso: + `++:. ${c3}//${c1} `-/+/ + .` ${c3}/${c1} `/ +EOF + ;; + + "BLAG"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} d + ,MK: + xMMMX: + .NMMMMMX; + lMMMMMMMM0clodkO0KXWW: + KMMMMMMMMMMMMMMMMMMX' + .;d0NMMMMMMMMMMMMMMMMMMK. + .;dONMMMMMMMMMMMMMMMMMMMMMMx +'dKMMMMMMMMMMMMMMMMMMMMMMMMl + .:xKWMMMMMMMMMMMMMMMMMMM0. + .:xNMMMMMMMMMMMMMMMMMK. + lMMMMMMMMMMMMMMMMMMK. + ,MMMMMMMMWkOXWMMMMMM0 + .NMMMMMNd. `':ldko + OMMMK: + oWk, + ;: +EOF + ;; + + "BlankOn"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} `./ohdNMMMMNmho+.` ${c1} .+oo:` +${c2} -smMMMMMMMMMMMMMMMMmy-` ${c1}`yyyyy+ +${c2} `:dMMMMMMMMMMMMMMMMMMMMMMd/` ${c1}`yyyyys +${c2} .hMMMMMMMNmhso/++symNMMMMMMMh- ${c1}`yyyyys +${c2} -mMMMMMMms-` -omMMMMMMN-${c1}.yyyyys +${c2}.mMMMMMMy. .yMMMMMMm:${c1}yyyyys +${c2}sMMMMMMy `sMMMMMMh${c1}yyyyys +${c2}NMMMMMN: .NMMMMMN${c1}yyyyys +${c2}MMMMMMm. NMMMMMN${c1}yyyyys +${c2}hMMMMMM+ /MMMMMMN${c1}yyyyys +${c2}:NMMMMMN: :mMMMMMM+${c1}yyyyys +${c2} oMMMMMMNs- .sNMMMMMMs.${c1}yyyyys +${c2} +MMMMMMMNho:.` `.:ohNMMMMMMNo ${c1}`yyyyys +${c2} -hMMMMMMMMNNNmmNNNMMMMMMMMh- ${c1}`yyyyys +${c2} :yNMMMMMMMMMMMMMMMMMMNy:` ${c1}`yyyyys +${c2} .:sdNMMMMMMMMMMNds/. ${c1}`yyyyyo +${c2} `.:/++++/:.` ${c1}:oys+. +EOF + ;; + + "BlueLight"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c1} oMMNMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + -+++++++++++++++++++++++mM${c2} + ```````````````````````..${c1}dM${c2} + ```````````````````````....${c1}dM${c2} + ```````````````````````......${c1}dM${c2} + ```````````````````````........${c1}dM${c2} + ```````````````````````..........${c1}dM${c2} + ```````````````````````............${c1}dM${c2} +.::::::::::::::::::::::-..............${c1}dM${c2} + `-+yyyyyyyyyyyyyyyyyyyo............${c1}+mMM${c2} + -+yyyyyyyyyyyyyyyyo..........${c1}+mMMMM${c2} + ./syyyyyyyyyyyyo........${c1}+mMMMMMM${c2} + ./oyyyyyyyyyo......${c1}+mMMMMMMMM${c2} + omdyyyyyyo....${c1}+mMMMMMMMMMM${c2} + ${c1}oMMM${c2}mdhyyo..${c1}+mMMMMMMMMMMMM + oNNNNNNm${c2}dso${c1}mMMMMMMMMMMMMMM +EOF + ;; + + "bonsai"*) + set_colors 6 2 3 + read -rd '' ascii_data <<'EOF' +${c2} ,####, + ${c2}#######, ${c2},#####, + ${c2}#####',# ${c2}'###### + ${c2}''###'${c3}';,,,'${c2}###' + ${c3} ,; '''' + ${c3} ;;; ${c2},#####, + ${c3} ;;;' ,,;${c2};;### + ${c3} ';;;;''${c2}'####' + ${c3} ;;; + ${c3} ,.;;';'',,, + ${c3} ' ' +${c1} # + # O + ##, ,##,',##, ,## ,#, , + # # # # #''# #,, # # # + '#' '##' # # ,,# '##;, # +EOF + ;; + + "BSD") + set_colors 1 7 4 3 6 + read -rd '' ascii_data <<'EOF' +${c1} , , + /( )` + \ \___ / | + /- _ `-/ ' + (${c2}/\/ \ ${c1}\ /\ + ${c2}/ / | ` ${c1}\ + ${c3}O O ${c2}) ${c1}/ | + ${c2}`-^--'${c1}`< ' + (_.) _ ) / + `.___/` / + `-----' / +${c4}<----. __ / __ \ +${c4}<----|====${c1}O)))${c4}==${c1}) \) /${c4}====| +<----' ${c1}`--' `.__,' \ + | | + \ / /\ + ${c5}______${c1}( (_ / \______/ + ${c5},' ,-----' | + `--{__________) +EOF + ;; + + "BunsenLabs"*) + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} `++ + -yMMs + `yMMMMN` + -NMMMMMMm. + :MMMMMMMMMN- + .NMMMMMMMMMMM/ + yMMMMMMMMMMMMM/ +`MMMMMMNMMMMMMMN. +-MMMMN+ /mMMMMMMy +-MMMm` `dMMMMMM +`MMN. .NMMMMM. + hMy yMMMMM` + -Mo +MMMMN + /o +MMMMs + +MMMN` + hMMM: + `NMM/ + +MN: + mh. + -/ +EOF + ;; + + "Calculate"*) + set_colors 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ...... + ,,+++++++,. + .,,,....,,,${c2}+**+,,.${c1} + ............,${c2}++++,,,${c1} + ............... + ......,,,........ + .....+*#####+,,,*+. + .....,*###############,..,,,,,,.. + ......,*#################*..,,,,,..,,,.. + .,,....*####################+***+,,,,...,++, + .,,..,..*#####################*, + ,+,.+*..*#######################. + ,+,,+*+..,########################* +.,++++++. ..+##**###################+ +..... ..+##***#################*. + .,.*#*****##############*. + ..,,*********#####****+. + ${c2}.,++*****+++${c1}*****************${c2}+++++,.${c1} + ${c2},++++++**+++++${c1}***********${c2}+++++++++,${c1} + ${c2}.,,,,++++,.. .,,,,,.....,+++,.,,${c1} +EOF + ;; + "Carbs"*) + set_colors 4 5 4 4 4 4 + read -rd '' ascii_data <<'EOF' +${c2} .......... + ..,;:ccccccc:;'.. + ..,clllc:;;;;;:cllc,. + .,cllc,... ..';;'. + .;lol;.. .. + .,lol;. + .coo:. + .'lol,. + .,lol,. + .,lol,. + 'col;. + .:ooc'. + .'col:. + .'cllc'.. .''. + ..:lolc,'.......',cll,. + ..;cllllccccclllc;'. + ...',;;;;;;,,... + ..... +EOF + ;; + + "centos_small"*) + set_colors 3 2 4 5 7 + read -rd '' ascii_data <<'EOF' +${c2} ____${c1}^${c4}____ +${c2} |\\ ${c1}|${c4} /| +${c2} | \\ ${c1}|${c4} / | +${c4}<---- ${c3}----> +${c3} | / ${c2}|${c1} \\ | +${c3} |/__${c2}|${c1}__\\| +${c2} v +EOF + ;; + + "CentOS"*) + set_colors 3 2 4 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .. + .PLTJ. + <><><><> + ${c2}KKSSV' 4KKK ${c1}LJ${c4} KKKL.'VSSKK + ${c2}KKV' 4KKKKK ${c1}LJ${c4} KKKKAL 'VKK + ${c2}V' ' 'VKKKK ${c1}LJ${c4} KKKKV' ' 'V + ${c2}.4MA.' 'VKK ${c1}LJ${c4} KKV' '.4Mb. +${c4} . ${c2}KKKKKA.' 'V ${c1}LJ${c4} V' '.4KKKKK ${c3}. +${c4} .4D ${c2}KKKKKKKA.'' ${c1}LJ${c4} ''.4KKKKKKK ${c3}FA. +${c4} +${c4} 'VD ${c3}KKKKKKKK'.. ${c2}LJ ${c1}..'KKKKKKKK ${c3}FV +${c4} ' ${c3}VKKKKK'. .4 ${c2}LJ ${c1}K. .'KKKKKV ${c3}' + ${c3} 'VK'. .4KK ${c2}LJ ${c1}KKA. .'KV' + ${c3}A. . .4KKKK ${c2}LJ ${c1}KKKKA. . .4 + ${c3}KKA. 'KKKKK ${c2}LJ ${c1}KKKKK' .4KK + ${c3}KKSSA. VKKK ${c2}LJ ${c1}KKKV .4SSKK +${c2} <><><><> + 'MKKM' + '' +EOF + ;; + + "Chakra"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} _ _ _ "kkkkkkkk. + ,kkkkkkkk., 'kkkkkkkkk, + ,kkkkkkkkkkkk., 'kkkkkkkkk. + ,kkkkkkkkkkkkkkkk,'kkkkkkkk, + ,kkkkkkkkkkkkkkkkkkk'kkkkkkk. + "''"''',;::,,"''kkk''kkkkk; __ + ,kkkkkkkkkk, "k''kkkkk' ,kkkk + ,kkkkkkk' ., ' .: 'kkkk',kkkkkk + ,kkkkkkkk'.k' , ,kkkk;kkkkkkkkk + ,kkkkkkkk';kk 'k "'k',kkkkkkkkkkkk +.kkkkkkkkk.kkkk.'kkkkkkkkkkkkkkkkkk' +;kkkkkkkk''kkkkkk;'kkkkkkkkkkkkk'' +'kkkkkkk; 'kkkkkkkk.,""''"''"" + ''kkkk; 'kkkkkkkkkk., + ';' 'kkkkkkkkkkkk., + ';kkkkkkkkkk' + ';kkkkkk' + "''" +EOF + ;; + + "ChaletOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.//+osso+/:`` + `/sdNNmhyssssydmNNdo:` + :hNmy+-` .-+hNNs- + /mMh/` `+:` `+dMd: + .hMd- -sNNMNo. /yyy /mMs` + -NM+ `/dMd/--omNh::dMM `yMd` + .NN+ .sNNs:/dMNy:/hNmo/s yMd` + hMs `/hNd+-smMMMMMMd+:omNy- `dMo +:NM. .omMy:/hNMMMMMMMMMMNy:/hMd+` :Md` +/Md` `sm+.omMMMMMMMMMMMMMMMMd/-sm+ .MN: +/Md` MMMMMMMMMMMMMMMMMMMN .MN: +:NN. MMMMMMm....--NMMMMMN -Mm. +`dMo MMMMMMd mMMMMMN hMs + -MN: MMMMMMd mMMMMMN oMm` + :NM: MMMMMMd mMMMMMN +Mm- + -mMy. mmmmmmh dmmmmmh -hMh. + oNNs- :yMm/ + .+mMdo:` `:smMd/` + -ohNNmhsoo++osshmNNh+. + `./+syyhhyys+:`` +EOF + ;; + + "Chapeau"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} .-/-. + ////////. + ////////${c2}y+${c1}//. + ////////${c2}mMN${c1}/////. + ////////${c2}mMN+${c1}////////. + ////////////////////////. + /////////+${c2}shhddhyo${c1}+////////. + ////////${c2}ymMNmdhhdmNNdo${c1}///////. +///////+${c2}mMms${c1}////////${c2}hNMh${c1}///////. +///////${c2}NMm+${c1}//////////${c2}sMMh${c1}/////// +//////${c2}oMMNmmmmmmmmmmmmMMm${c1}/////// +//////${c2}+MMmssssssssssssss+${c1}/////// +`//////${c2}yMMy${c1}//////////////////// + `//////${c2}smMNhso++oydNm${c1}//////// + `///////${c2}ohmNMMMNNdy+${c1}/////// + `//////////${c2}++${c1}////////// + `////////////////. + -////////- +EOF + ;; + + "Chrom"*) + set_colors 2 1 3 4 7 + read -rd '' ascii_data <<'EOF' +${c2} .,:loool:,. + .,coooooooooooooc,. + .,lllllllllllllllllllll,. + ;ccccccccccccccccccccccccc; +${c1} '${c2}ccccccccccccccccccccccccccccc. +${c1} ,oo${c2}c::::::::okO${c5}000${c3}0OOkkkkkkkkkkk: +${c1}.ooool${c2};;;;:x${c5}K0${c4}kxxxxxk${c5}0X${c3}K0000000000. +${c1}:oooool${c2};,;O${c5}K${c4}ddddddddddd${c5}KX${c3}000000000d +${c1}lllllool${c2};l${c5}N${c4}dllllllllllld${c5}N${c3}K000000000 +${c1}lllllllll${c2}o${c5}M${c4}dccccccccccco${c5}W${c3}K000000000 +${c1};cllllllllX${c5}X${c4}c:::::::::c${c5}0X${c3}000000000d +${c1}.ccccllllllO${c5}Nk${c4}c;,,,;cx${c5}KK${c3}0000000000. +${c1} .cccccclllllxOO${c5}OOO${c1}Okx${c3}O0000000000; +${c1} .:ccccccccllllllllo${c3}O0000000OOO, +${c1} ,:ccccccccclllcd${c3}0000OOOOOOl. +${c1} '::ccccccccc${c3}dOOOOOOOkx:. +${c1} ..,::cccc${c3}xOOOkkko;. +${c1} ..,:${c3}dOkxl:. +EOF + ;; + + "cleanjaro_small"*) + set_colors 7 7 + read -rd '' ascii_data <<'EOF' +${c1}█████ ██████████ +█████ ██████████ +█████ +█████ +█████ +████████████████ +████████████████ +EOF + ;; + + "Cleanjaro"*) + set_colors 7 7 + read -rd '' ascii_data <<'EOF' +${c1}███████▌ ████████████████ +███████▌ ████████████████ +███████▌ ████████████████ +███████▌ +███████▌ +███████▌ +███████▌ +███████▌ +█████████████████████████ +█████████████████████████ +█████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +EOF + ;; + + "ClearOS"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::--.` + .-:////////////////:-. + `-////////////////////////-` + -////////////////////////////- + `//////////////-..-//////////////` + ./////////////: ://///////////. + `//////:..-////: :////-..-//////` + ://////` -///:.``.:///-` ://///: +`///////:. -////////-` `:///////` +.//:--////:. -////-` `:////--://. +./: .////:. --` `:////- :/. +`//-` .////:. `:////- `-//` + :///-` .////:. `:////- `-///: + `/////-` -///: :///- `-/////` + `//////- `///: :///` .//////` + `:////: `///: :///` -////:` + .://: `///: :///` -//:. + .:: `///: :///` -:. + `///: :///` + `... ...` +EOF + ;; + + "Clear Linux OS"* | "Clear_Linux"*) + set_colors 4 3 7 6 + read -rd '' ascii_data <<'EOF' +${c1} BBB + BBBBBBBBB + BBBBBBBBBBBBBBB + BBBBBBBBBBBBBBBBBBBB + BBBBBBBBBBB BBB + BBBBBBBB${c2}YYYYY +${c1} BBBBBBBB${c2}YYYYYY +${c1} BBBBBBBB${c2}YYYYYYY +${c1} BBBBBBBBB${c2}YYYYY${c3}W +${c4} GG${c1}BBBBBBBY${c2}YYYY${c3}WWW +${c4} GGG${c1}BBBBBBB${c2}YY${c3}WWWWWWWW +${c4} GGGGGG${c1}BBBBBB${c3}WWWWWWWW +${c4} GGGGGGGG${c1}BBBB${c3}WWWWWWWW +${c4}GGGGGGGGGGG${c1}BBB${c3}WWWWWWW +${c4}GGGGGGGGGGGGG${c1}B${c3}WWWWWW +${c4}GGGGGGGG${c3}WWWWWWWWWWW +${c4}GG${c3}WWWWWWWWWWWWWWWW + WWWWWWWWWWWWWWWW + WWWWWWWWWW + WWW +EOF + ;; + + "Clover"*) + set_colors 2 6 + read -rd '' ascii_data <<'EOF' +${c1} `omo``omo` + `oNMMMNNMMMNo` + `oNMMMMMMMMMMMMNo` + oNMMMMMMMMMMMMMMMMNo + `sNMMMMMMMMMMMMMMNs` + `omo` `sNMMMMMMMMMMNs` `omo` + `oNMMMNo` `sNMMMMMMNs` `oNMMMNo` + `oNMMMMMMMNo` `oNMMNs` `oNMMMMMMMNo` +oNMMMMMMMMMMMNo` `sy` `oNMMMMMMMMMMMNo +`sNMMMMMMMMMMMMNo.${c2}oNNs${c1}.oNMMMMMMMMMMMMNs` +`oNMMMMMMMMMMMMNs.${c2}oNNs${c1}.oNMMMMMMMMMMMMNo` +oNMMMMMMMMMMMNs` `sy` `oNMMMMMMMMMMMNo + `oNMMMMMMMNs` `oNMMNo` `oNMMMMMMMNs` + `oNMMMNs` `sNMMMMMMNs` `oNMMMNs` + `oNs` `sNMMMMMMMMMMNs` `oNs` + `sNMMMMMMMMMMMMMMNs` + +NMMMMMMMMMMMMMMMMNo + `oNMMMMMMMMMMMMNo` + `oNMMMNNMMMNs` + `omo``oNs` +EOF + ;; + + "Condres"*) + set_colors 2 3 6 + read -rd '' ascii_data <<'EOF' +${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}.+. +${c1}`oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}:++. +${c2}/o${c1}+oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy/${c3}oo++. +${c2}/y+${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyy${c3}+ooo++. +${c2}/hy+${c1}oyyyhhhhhhhhhhhhhhyyyyyyyyy${c3}+oo+++++. +${c2}/hhh+${c1}shhhhhdddddhhhhhhhyyyyyyy${c3}+oo++++++. +${c2}/hhdd+${c1}oddddddddddddhhhhhyyyys${c3}+oo+++++++. +${c2}/hhddd+${c1}odmmmdddddddhhhhyyyy${c3}+ooo++++++++. +${c2}/hhdddmo${c1}odmmmdddddhhhhhyyy${c3}+oooo++++++++. +${c2}/hdddmmms${c1}/dmdddddhhhhyyys${c3}+oooo+++++++++. +${c2}/hddddmmmy${c1}/hdddhhhhyyyyo${c3}+oooo++++++++++: +${c2}/hhdddmmmmy${c1}:yhhhhyyyyy+${c3}+oooo+++++++++++: +${c2}/hhddddddddy${c1}-syyyyyys+${c3}ooooo++++++++++++: +${c2}/hhhddddddddy${c1}-+yyyy+${c3}/ooooo+++++++++++++: +${c2}/hhhhhdddddhhy${c1}./yo:${c3}+oooooo+++++++++++++/ +${c2}/hhhhhhhhhhhhhy${c1}:-.${c3}+sooooo+++++++++++///: +${c2}:sssssssssssso++${c1}${c3}`:/:--------.```````` +EOF + ;; + + "Container Linux by CoreOS"* | "Container_Linux"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ..... + .';:cccccccc:;'. + ':ccccclc${c3}lllllllll${c1}cc:. + .;cccccccc${c3}lllllllllllllll${c1}c, + ;clllccccc${c3}llllllllllllllllll${c1}c, + .cllclccccc${c3}lllll${c2}lll${c3}llllllllllll${c1}c: + ccclclcccc${c3}cllll${c2}kWMMNKk${c3}llllllllll${c1}c: + :ccclclcccc${c3}llll${c2}oWMMMMMMWO${c3}lllllllll${c1}c, +.ccllllllccc${c3}clll${c2}OMMMMMMMMM0${c3}lllllllll${c1}c +.lllllclcccc${c3}llll${c2}KMMMMMMMMMMo${c3}llllllll${c1}c. +.lllllllcccc${c3}clll${c2}KMMMMMMMMN0${c3}lllllllll${c1}c. +.cclllllcccc${c3}lllld${c2}xkkxxdo${c3}llllllllllc${c1}lc + :cccllllllcccc${c3}lllccllllcclccc${c1}cccccc; + .ccclllllllcccccccc${c3}lll${c1}ccccclccccccc + .cllllllllllclcccclccclccllllcllc + :cllllllllccclcllllllllllllcc; + .cccccccccccccclcccccccccc:. + .;cccclccccccllllllccc,. + .';ccccclllccc:;.. + ..... +EOF + ;; + + "crux_small"|KISS*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} ___ + (${c3}.· ${c1}| + (${c2}<> ${c1}| + / ${c3}__ ${c1}\\ + ( ${c3}/ \\ ${c1}/| +${c2}_${c1}/\\ ${c3}__)${c1}/${c2}_${c1}) +${c2}\/${c1}-____${c2}\/ +EOF + ;; + + "CRUX"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} odddd + oddxkkkxxdoo + ddcoddxxxdoool + xdclodod olol + xoc xdd olol + xdc ${c2}k00${c1}Okdlol + xxd${c2}kOKKKOkd${c1}ldd + xdco${c2}xOkdlo${c1}dldd + ddc:cl${c2}lll${c1}oooodo + odxxdd${c3}xkO000kx${c1}ooxdo + oxdd${c3}x0NMMMMMMWW0od${c1}kkxo + oooxd${c3}0WMMMMMMMMMW0o${c1}dxkx +docldkXW${c3}MMMMMMMWWN${c1}Odolco +xx${c2}dx${c1}kxxOKN${c3}WMMWN${c1}0xdoxo::c +${c2}xOkkO${c1}0oo${c3}odOW${c2}WW${c1}XkdodOxc:l +${c2}dkkkxkkk${c3}OKX${c2}NNNX0Oxx${c1}xc:cd +${c2} odxxdx${c3}xllod${c2}ddooxx${c1}dc:ldo +${c2} lodd${c1}dolccc${c2}ccox${c1}xoloo +EOF + ;; + + *"Cucumber"*) + set_colors 2 3 + read -rd '' ascii_data <<'EOF' +${c1} `.-://++++++//:-.` + `:/+//${c2}::--------${c1}:://+/:` + -++/:${c2}----..........----${c1}:/++- + .++:${c2}---...........-......---${c1}:++. + /+:${c2}---....-::/:/--//:::-....---${c1}:+/ + `++:${c2}--.....:---::/--/::---:.....--${c1}:++` + /+:${c2}--.....--.--::::-/::--.--.....--${c1}:+/ +-o:${c2}--.......-:::://--/:::::-.......--${c1}:o- +/+:${c2}--...-:-::---:::..:::---:--:-...--${c1}:+/ +o/:${c2}-...-:.:.-/:::......::/:.--.:-...-${c1}:/o +o/${c2}--...::-:/::/:-......-::::::-/-...-${c1}:/o +/+:${c2}--..-/:/:::--:::..:::--::////-..--${c1}:+/ +-o:${c2}--...----::/:::/--/:::::-----...--${c1}:o- + /+:${c2}--....://:::.:/--/:.::://:....--${c1}:+/ + `++:${c2}--...-:::.--.:..:.--.:/:-...--${c1}:++` + /+:${c2}---....----:-..-:----....---${c1}:+/ + .++:${c2}---..................---${c1}:++. + -/+/:${c2}----..........----${c1}:/+/- + `:/+//${c2}::--------:::${c1}/+/:` + `.-://++++++//:-.` +EOF + ;; + + "dahlia"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + .#. + *%@@@%* + .,,,,,(&@@@@@@@&/,,,,,. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,#@@@@@@@&#///#&@@@@@@@#. + ,/%&@@@@@%/, .,(%@@@@@&#/. + *#&@@@@@@#,. .*#@@@@@@&#, + .&@@@@@@@@@( .(@@@@@@@@@&&. +#@@@@@@@@@@( )@@@@@@@@@@@# + °@@@@@@@@@@( .(@@@@@@@@@@@° + *%@@@@@@@(. ,#@@@@@@@%* + ,(&@@@@@@%*. ./%@@@@@@%(, + ,#@@@@@@@&(***(&@@@@@@@#. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,*****#&@@@@@@@&(*****, + ,/%@@@%/. + ,#, +EOF + ;; + + "debian_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} _____ + / __ \\ +| / | +| \\___- +-_ + --_ +EOF + ;; + + "Debian"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} _,met$$$$$gg. + ,g$$$$$$$$$$$$$$$P. + ,g$$P" """Y$$.". + ,$$P' `$$$. +',$$P ,ggs. `$$b: +`d$$' ,$P"' ${c1}.${c2} $$$ + $$P d$' ${c1},${c2} $$P + $$: $$. ${c1}-${c2} ,d$$' + $$; Y$b._ _,d$P' + Y$$. ${c1}`.${c2}`"Y$$$$P"' +${c2} `$$b ${c1}"-.__ +${c2} `Y$$ + `Y$$. + `$$b. + `Y$$b. + `"Y$b._ + `""" +EOF + ;; + + "Deepin"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ............ + .';;;;;. .,;,. + .,;;;;;;;. ';;;;;;;. + .;::::::::' .,::;;,''''',. + ,'.:::::::: .;;'. '; + ;' 'cccccc, ,' :: '.. .: + ,, :ccccc. ;: .c, '' :. ,; +.l. cllll' ., .lc :; .l' l. +.c :lllc ;cl: .l' .ll. :' +.l 'looc. . ,o: 'oo' c, +.o. .:ool::coc' .ooo' o. + :: ..... .;dddo ;c + l:... .';lddddo. ,o + lxxxxxdoolllodxxxxxxxxxc :l + ,dxxxxxxxxxxxxxxxxxxl. 'o, + ,dkkkkkkkkkkkkko;. .;o; + .;okkkkkdl;. .,cl:. + .,:cccccccc:,. +EOF + ;; + + "DesaOS") + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}███████████████████████ +███████████████████████ +███████████████████████ +███████████████████████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +██████████████████████████████ +██████████████████████████████ +████████████████████████ +████████████████████████ +████████████████████████ +EOF + ;; + + "Devuan"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} ..,,;;;::;,.. + `':ddd;:,. + `'dPPd:,. + `:b$$b`. + 'P$$$d` + .$$$$$` + ;$$$$$P + .:P$$$$$$` + .,:b$$$$$$$;' + .,:dP$$$$$$$$b:' + .,:;db$$$$$$$$$$Pd'` + ,db$$$$$$$$$$$$$$b:'` +:$$$$$$$$$$$$b:'` + `$$$$$bd:''` + `'''` +EOF + ;; + + "DracOS"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} `-:/- + -os: + -os/` + :sy+-` + `/yyyy+. + `+yyyyo- + `/yyyys: +`:osssoooo++- +yyyyyy/` + ./yyyyyyo yo`:syyyy+. + -oyyy+ +- :yyyyyo- + `:sy: `. `/yyyyys: + ./o/.` .oyyso+oo:` + :+oo+//::::///:-.` `.` +EOF + ;; + + "DarkOs") + set_colors 1 6 5 3 2 + read -rd '' ascii_data <<'EOF' + +${c3}⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⡆⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡆⢀⣤⢛⠛⣠⣿⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⣿⠟⣡⠊⣠⣾⣿⠃⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣯⣿⠀⠊⣤⣿⣿⣿⠃⣴⣧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡟⣠⣶⣿⣿⣿⢋⣤⠿⠛⠉⢁⣭⣽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c4} ⠀⠀⠀⠀⠀⠀ ⠀⣠⠖⡭⢉⣿⣯⣿⣯⣿⣿⣿⣟⣧⠛⢉⣤⣶⣾⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⣴⣫⠓⢱⣯⣿⢿⠋⠛⢛⠟⠯⠶⢟⣿⣯⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⢀⡮⢁⣴⣿⣿⣿⠖⣠⠐⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠛⠛⠛⢿⣶⣄⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⢀⣤⣷⣿⣿⠿⢛⣭⠒⠉⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣶⣶⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⢀⣶⠏⠟⠝⠉⢀⣤⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c6}⢴⣯⣤⣶⣿⣿⣿⣿⣿⡿⣿⣯⠉⠉⠉⠉⠀⠀⠀⠈⣿⡀⣟⣿⣿⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠉⠛⣿⣧⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⣿⣿⣯⣿⣦⡀⠀⠉⠻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⠀⠀⠉⢿⣮⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠀⣯⠉⠉⠛⢿⣿⣷⣄⠀⠈⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⠀⠀⠀⠀⠀⠀⠀⢀⢡⠃⣾⣿⣿⣦⠀⠀⠀⠙⢿⣿⣤⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀ +${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢋⡟⢠⣿⣿⣿⠋⢿⣄⠀⠀⠀⠈⡄⠙⣶⣈⡄⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⢲⣿⠀⣾⣿⣿⠁⠀⠀⠉⢷⡀⠀⠀⣇⠀⠀⠈⠻⡀⠀⠀⠀⠀⠀ +${c4}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⣀⣿⡏⠀⣿⡿⠀⠀⠀⠀⠀⠀⠙⣦⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠿⣧⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣮⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +EOF + ;; + + "Ikeda"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' + +${c1} . +${c1} . )c'D~-~~7*J: +${c1} ,$"nQG==" T%oMJw*i +${c1} jO{W" .;lQmm@Q.K7 p +${c1} `/.Xb >Nm:zmw, *Qw&U@| +${c1} ;[ #= /jMO%>0'~\M `^' b^ +${c1} ;D{# .pb4f ~>/Wmm=2" +${c1} . #b .,bpFB ^` +${c1} - 8H # X!= +${c1} )Q`W :o NIp~ +${c1} .' ?= `n'N+kQv. +${c1} =: YQ `Q+,., +${c1} '` W~ ={BW%T.l #ut- +${c1} ~-: ?dM ``^^^" +${c1} ` v \D^. +${c1} " .'~ =AM:. +${c1} . . + +EOF + ;; + + "Itc"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1}....................-==============+... +${c1}....................-==============:... +${c1}...:===========-....-==============:... +${c1}...-===========:....-==============-... +${c1}....*==========+........-::********-... +${c1}....*===========+.:*====**==*+-.-...... +${c1}....:============*+-..--:+**====*---... +${c1}......::--........................::... +${c1}..+-:+-.+::*:+::+:-++::++-.:-.*.:++:++. +${c1}..:-:-++++:-::--:+::-::.:++-++:++--:-:. ⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +EOF + ;; + + "dragonfly_old"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' + ${c1} .-. + ${c3} ()${c1}I${c3}() + ${c1} "==.__:-:__.==" + "==.__/~|~\__.==" + "==._( Y )_.==" + ${c2}.-'~~""~=--...,__${c1}\/|\/${c2}__,...--=~""~~'-. +( ..=${c1}\\=${c1}/${c2}=.. ) + `'-. ,.-"`;${c1}/=\\${c2};"-.,_ .-'` + `~"-=-~` .-~` ${c1}|=|${c2} `~-. `~-=-"~` + .-~` /${c1}|=|${c2}\ `~-. + .~` / ${c1}|=|${c2} \ `~. + .-~` .' ${c1}|=|${c2} `. `~-. + (` _,.-="` ${c1} |=|${c2} `"=-.,_ `) + `~"~"` ${c1} |=|${c2} `"~"~` + ${c1} /=\\ + \\=/ + ^ +EOF + ;; + + "dragonfly_small"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} ,${c1}_${c2}, +('-_${c1}|${c2}_-') + >--${c1}|${c2}--< +(_-'${c1}|${c2}'-_) + ${c1}| + | + | +EOF + ;; + + "DragonFly"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2},--, ${c1}| ${c2},--, +${c2}| `-, ${c1},^, ${c2},-' | +${c2} `, `-, ${c3}(/ \) ${c2},-' ,' +${c2} `-, `-,${c1}/ \${c2},-' ,-' +${c2} `------${c1}( )${c2}------' +${c2} ,----------${c1}( )${c2}----------, +${c2} | _,-${c1}( )${c2}-,_ | +${c2} `-,__,-' ${c1}\ /${c2} `-,__,-' +${c1} | | + | | + | | + | | + | | + | | + `|' +EOF + ;; + + "Drauger"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} -``- + `:+``+:` + `/++``++/. + .++/. ./++. + :++/` `/++: + `/++: :++/` + ./+/- -/+/. + -++/. ./++- + :++:` `:++: + `/++- -++/` + ./++. ./+/. + -++/` `/++- + :++:` `:++: + `/++- -++/` +.:-.`..............................`.-:. +`.-/++++++++++++++++++++++++++++++++/-.` +EOF + ;; + + "elementary_small"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} _______ + / ____ \\ +/ | / /\\ +|__\\ / / | +\\ /__/ / + \\_______/ +EOF + ;; + + "Elementary"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee eeeeeeeeeeee eeeee + eeee eeeee eee eeee + eeee eeee eee eeee +eee eee eee eee +eee eee eee eee +ee eee eeee eeee +ee eee eeeee eeeeee +ee eee eeeee eeeee ee +eee eeee eeeeee eeeee eee +eee eeeeeeeeee eeeeee eee + eeeeeeeeeeeeeeeeeeeeeeee eeeee + eeeeeeee eeeeeeeeeeee eeee + eeeee eeeee + eeeeeee eeeeeee + eeeeeeeeeeeeeeeee +EOF + ;; + + "EndeavourOS"*) + set_colors 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} ./${c2}o${c3}. +${c1} ./${c2}sssso${c3}- +${c1} `:${c2}osssssss+${c3}- +${c1} `:+${c2}sssssssssso${c3}/. +${c1} `-/o${c2}ssssssssssssso${c3}/. +${c1} `-/+${c2}sssssssssssssssso${c3}+:` +${c1} `-:/+${c2}sssssssssssssssssso${c3}+/. +${c1} `.://o${c2}sssssssssssssssssssso${c3}++- +${c1} .://+${c2}ssssssssssssssssssssssso${c3}++: +${c1} .:///o${c2}ssssssssssssssssssssssssso${c3}++: +${c1} `:////${c2}ssssssssssssssssssssssssssso${c3}+++. +${c1}`-////+${c2}ssssssssssssssssssssssssssso${c3}++++- +${c1} `..-+${c2}oosssssssssssssssssssssssso${c3}+++++/` + ./++++++++++++++++++++++++++++++/:. + `:::::::::::::::::::::::::------`` +EOF + ;; + + "Endless"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} `:+yhmNMMMMNmhy+:` + -odMMNhso//////oshNMMdo- + /dMMh+. .+hMMd/ + /mMNo` `oNMm: + `yMMo` `oMMy` + `dMN- -NMd` + hMN. .NMh +/MM/ -os` /MM/ +dMm `smNmmhs/- `:sNMd+ `` mMd +MMy oMd--:+yMMMMMNo.:ohmMMMNy` yMM +MMy -NNyyhmMNh+oNMMMMMy:. dMo yMM +dMm `/++/-``/yNNh+/sdNMNddMm- mMd +/MM/ `dNy: `-::- /MM/ + hMN. .NMh + `dMN- -NMd` + `yMMo` `oMMy` + /mMNo` `oNMm/ + /dMMh+. .+hMMd/ + -odMMNhso//////oshNMMdo- + `:+yhmNMMMMNmhy+:` +EOF + ;; + + "EuroLinux"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} __ + -wwwWWWWWWWWWwww- + -WWWWWWWWWWWWWWWWWWw- + \WWWWWWWWWWWWWWWWWWW- + _Ww `WWWWWWWWWWWWWWWWWWWw + -W${c2}E${c1}Www -WWWWWWWWW- +_WW${c2}U${c1}WWWW- _WWWWWWWW +_WW${c2}R${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW- +wWW${c2}O${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWW${c2}L${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw +WWW${c2}I${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWww- +wWW${c2}N${c1}WWWWw + WW${c2}U${c1}WWWWWWw + wW${c2}X${c1}WWWWWWWWww + wWWWWWWWWWWWWWWWw + wWWWWWWWWWWWWWWWw + WWWWWWWWWWWWWw + wWWWWWWWw +EOF + ;; + + "Exherbo"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} , +OXo. +NXdX0: .cok0KXNNXXK0ko:. +KX '0XdKMMK;.xMMMk, .0MMMMMXx; ... +'NO..xWkMMx kMMM cMMMMMX,NMWOxOXd. + cNMk NK .oXM. OMMMMO. 0MMNo kW. + lMc o: ., .oKNk; ;NMMWlxW' + ;Mc .. .,,' .0M${c1}g;${c2}WMN'dWMMMMMMO + XX ,WMMMMW. cM${c1}cfli${c2}WMKlo. .kMk +.Mo .WM${c1}GD${c2}MW. XM${c1}WO0${c2}MMk oMl +,M: ,XMMWx::,''oOK0x; NM. +'Ml ,kNKOxxxxxkkO0XXKOd:. oMk + NK .0Nxc${c3}:::::::::::::::${c2}fkKNk, .MW + ,Mo .NXc${c3}::${c2}qXWXb${c3}::::::::::${c2}oo${c3}::${c2}lNK. .MW + ;Wo oMd${c3}:::${c2}oNMNP${c3}::::::::${c2}oWMMMx${c3}:${c2}c0M; lMO + 'NO;W0c${c3}:::::::::::::::${c2}dMMMMO${c3}::${c2}lMk .WM' + xWONXdc${c3}::::::::::::::${c2}oOOo${c3}::${c2}lXN. ,WMd + 'KWWNXXK0Okxxo,${c3}:::::::${c2},lkKNo xMMO + :XMNxl,';:lodxkOO000Oxc. .oWMMo + 'dXMMXkl;,. .,o0MMNo' + ':d0XWMMMMWNNNNMMMNOl' + ':okKXWNKkl' +EOF + ;; + + "fedora_small") + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} _____ + / __)${c1}\\${c2} + | / ${c1}\\ \\${c2} + ${c1}__${c2}_| |_${c1}_/ /${c2} + ${c1}/ ${c2}(_ _)${c1}_/${c2} +${c1}/ /${c2} | | +${c1}\\ \\${c2}__/ | + ${c1}\\${c2}(_____/ +EOF + ;; + + "Fedora"* | "RFRemix"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /:-------------:\\ + :-------------------:: + :-----------${c2}/shhOHbmp${c1}---:\\ + /-----------${c2}omMMMNNNMMD ${c1}---: + :-----------${c2}sMMMMNMNMP${c1}. ---: + :-----------${c2}:MMMdP${c1}------- ---\\ +,------------${c2}:MMMd${c1}-------- ---: +:------------${c2}:MMMd${c1}------- .---: +:---- ${c2}oNMMMMMMMMMNho${c1} .----: +:-- .${c2}+shhhMMMmhhy++${c1} .------/ +:- -------${c2}:MMMd${c1}--------------: +:- --------${c2}/MMMd${c1}-------------; +:- ------${c2}/hMMMy${c1}------------: +:--${c2} :dMNdhhdNMMNo${c1}------------; +:---${c2}:sdNMMMMNds:${c1}------------: +:------${c2}:://:${c1}-------------:: +:---------------------:// +EOF + ;; + + "Feren"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `----------` + :+ooooooooo+. +-o+oooooooooo+- +..`/+++++++++++/...````````````````` + .++++++++++++++++++++++++++/////- + ++++++++++++++++++++++++++++++++//:` + -++++++++++++++++++++++++++++++/-` + ++++++++++++++++++++++++++++:. + -++++++++++++++++++++++++/. + +++++++++++++++++++++/-` + -++++++++++++++++++//-` + .:+++++++++++++//////- + .:++++++++//////////- + `-++++++---:::://///. + `.:///+++. ` + `......... +EOF + ;; + + "freebsd_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1}/\\,-'''''-,/\\ +\\_) (_/ +| | +| | + ; ; + '-_____-' +EOF + ;; + + FreeBSD*|HardenedBSD*) + case $ascii_distro in + *HardenedBSD*) set_colors 4 7 3 ;; + *) set_colors 1 7 3 + esac + + read -rd '' ascii_data <<'EOF' + ${c2}``` ${c1}` + ${c2}` `.....---...${c1}....--.``` -/ + ${c2}+o .--` ${c1}/y:` +. + ${c2} yo`:. ${c1}:o `+- + ${c2}y/ ${c1}-/` -o/ + ${c2}.- ${c1}::/sy+:. + ${c2}/ ${c1}`-- / + ${c2}`: ${c1}:` + ${c2}`: ${c1}:` + ${c2}/ ${c1}/ + ${c2}.- ${c1}-. + ${c2}-- ${c1}-. + ${c2}`:` ${c1}`:` + .-- `--. + .---.....----. +EOF + ;; + + "FreeMiNT"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ## + ## ######### + #### ## + #### #### ## +#### #### ## ## + #### #### ## ## + #### #### ## ## ## + #### ###### + ###### ## ## #### + #### ################ + #### ## #### + ## #### ###### + ## ## #### #### + ## ## ## ## ## #### + #### ## ## ## +EOF + ;; + + "Frugalware"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `++/::-.` + /o+++++++++/::-.` + `o+++++++++++++++o++/::-.` + /+++++++++++++++++++++++oo++/:-.`` + .o+ooooooooooooooooooosssssssso++oo++/:-` + ++osoooooooooooosssssssssssssyyo+++++++o: + -o+ssoooooooooooosssssssssssssyyo+++++++s` + o++ssoooooo++++++++++++++sssyyyyo++++++o: + :o++ssoooooo${c2}/-------------${c1}+syyyyyo+++++oo + `o+++ssoooooo${c2}/-----${c1}+++++ooosyyyyyyo++++os: + /o+++ssoooooo${c2}/-----${c1}ooooooosyyyyyyyo+oooss + .o++++ssooooos${c2}/------------${c1}syyyyyyhsosssy- + ++++++ssooooss${c2}/-----${c1}+++++ooyyhhhhhdssssso + -s+++++syssssss${c2}/-----${c1}yyhhhhhhhhhhhddssssy. + sooooooyhyyyyyh${c2}/-----${c1}hhhhhhhhhhhddddyssy+ + :yooooooyhyyyhhhyyyyyyhhhhhhhhhhdddddyssy` + yoooooooyhyyhhhhhhhhhhhhhhhhhhhddddddysy/ +-ysooooooydhhhhhhhhhhhddddddddddddddddssy + .-:/+osssyyyysyyyyyyyyyyyyyyyyyyyyyyssy: + ``.-/+oosysssssssssssssssssssssss + ``.:/+osyysssssssssssssh. + `-:/+osyyssssyo + .-:+++` +EOF + ;; + + "Funtoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .dKXXd . + :XXl;:. .OXo +.'OXO'' .''''''''''''''''''''':XNd..'oco.lco, +xXXXXXX, cXXXNNNXXXXNNXXXXXXXXNNNNKOOK; d0O .k + kXX xXo KNNN0 KNN. 'xXNo :c; 'cc. + kXX xNo KNNN0 KNN. :xxxx. 'NNo + kXX xNo loooc KNN. oNNNN. 'NNo + kXX xN0:. KNN' oNNNX' ,XNk + kXX xNNXNNNNNNNNXNNNNNNNNXNNOxXNX0Xl + ... ......................... .;cc;. +EOF + ;; + + "GalliumOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1}sooooooooooooooooooooooooooooooooooooo+: +yyooooooooooooooooooooooooooooooooo+/::: +yyysoooooooooooooooooooooooooooo+/:::::: +yyyyyoooooooooooooooooooooooo+/::::::::: +yyyyyysoooooooooooooooooo++/:::::::::::: +yyyyyyysoooooooooooooo++/::::::::::::::: +yyyyyyyyysoooooo${c2}sydddys${c1}+/::::::::::::::: +yyyyyyyyyysooo${c2}smMMMMMMMNd${c1}+:::::::::::::: +yyyyyyyyyyyyo${c2}sMMMMMMMMMMMN${c1}/::::::::::::: +yyyyyyyyyyyyy${c2}dMMMMMMMMMMMM${c1}o//::::::::::: +yyyyyyyyyyyyy${c2}hMMMMMMMMMMMm${c1}--//:::::::::: +yyyyyyyyyyyyyy${c2}hmMMMMMMMNy${c1}:..-://:::::::: +yyyyyyyyyyyyyyy${c2}yyhhyys+:${c1}......://::::::: +yyyyyyyyyyyyyyys+:--...........-///::::: +yyyyyyyyyyyys+:--................://:::: +yyyyyyyyyo+:-.....................-//::: +yyyyyyo+:-..........................://: +yyyo+:-..............................-// +o/:-...................................: +EOF + ;; + + "Garuda"*) + set_colors 7 7 3 7 2 4 + read -rd '' ascii_data <<'EOF' + +${c3} + .%;888:8898898: + x;XxXB%89b8:b8%b88: + .8Xxd 8X:. + .8Xx; 8x:. + .tt8x ${c6}.d${c3} x88; + .@8x8; ${c6}.db:${c3} xx@; + ${c4},tSXX° .bbbbbbbbbbbbbbbbbbbB8x@; + .SXxx bBBBBBBBBBBBBBBBBBBBbSBX8; + ,888S pd! + 8X88/ q + GBB. + ${c5}x%88 d888@8@X@X@X88X@@XX@@X@8@X. + dxXd dB8b8b8B8B08bB88b998888b88x. + dxx8o .@@;. + dx88 .t@x. + d:SS@8ba89aa67a853Sxxad. + .d988999889889899dd. + +EOF + + ;; + + "gentoo_small") + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} _-----_ +( \\ +\ 0 \\ +${c2} \ ) + / _/ +( _- +\____- +EOF + ;; + + "Gentoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} -/oyddmdhs+:. + -o${c2}dNMMMMMMMMNNmhy+${c1}-` + -y${c2}NMMMMMMMMMMMNNNmmdhy${c1}+- + `o${c2}mMMMMMMMMMMMMNmdmmmmddhhy${c1}/` + om${c2}MMMMMMMMMMMN${c1}hhyyyo${c2}hmdddhhhd${c1}o` +.y${c2}dMMMMMMMMMMd${c1}hs++so/s${c2}mdddhhhhdm${c1}+` + oy${c2}hdmNMMMMMMMN${c1}dyooy${c2}dmddddhhhhyhN${c1}d. + :o${c2}yhhdNNMMMMMMMNNNmmdddhhhhhyym${c1}Mh + .:${c2}+sydNMMMMMNNNmmmdddhhhhhhmM${c1}my + /m${c2}MMMMMMNNNmmmdddhhhhhmMNh${c1}s: + `o${c2}NMMMMMMMNNNmmmddddhhdmMNhs${c1}+` + `s${c2}NMMMMMMMMNNNmmmdddddmNMmhs${c1}/. + /N${c2}MMMMMMMMNNNNmmmdddmNMNdso${c1}:` ++M${c2}MMMMMMNNNNNmmmmdmNMNdso${c1}/- +yM${c2}MNNNNNNNmmmmmNNMmhs+/${c1}-` +/h${c2}MMNNNNNNNNMNdhs++/${c1}-` +`/${c2}ohdmmddhys+++/:${c1}.` + `-//////:--. +EOF + ;; + + "Pentoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c2} `:oydNNMMMMNNdyo:` + :yNMMMMMMMMMMMMMMMMNy: + :dMMMMMMMMMMMMMMMMMMMMMMd: + oMMMMMMMho/-....-/ohMMMMMMMo + oMMMMMMy. .yMMMMMMo + .MMMMMMo oMMMMMM. + +MMMMMm mMMMMM+ + oMMMMMh hMMMMMo + //hMMMMMm//${c1}`${c2} ${c1}`${c2}////mMMMMMh// +MMMMMMMMMMM${c1}/${c2} ${c1}/o/`${c2} ${c1}.${c2}smMMMMMMMMMMM +MMMMMMMMMMm ${c1}`NMN:${c2} ${c1}.${c2}yMMMMMMMMMM +MMMMMMMMMMMh${c1}:.${c2} dMMMMMMMMM +MMMMMMMMMMMMMy${c1}.${c2} ${c1}-${c2}NMMMMMMMMM +MMMMMMMMMMMd:${c1}`${c2} ${c1}-${c2}yNMMMMMMMMMM +MMMMMMMMMMh${c1}`${c2} ${c1}./${c2}hNMMMMMMMMMMMM +MMMMMMMMMM${c1}s${c2} ${c1}.:${c2}ymMMMMMMMMMMMMMMM +MMMMMMMMMMN${c1}s:..-/${c2}ohNMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + +EOF + ;; + + "gNewSense"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} ..,,,,.. + .oocchhhhhhhhhhccoo. + .ochhlllllllc hhhhhh ollllllhhco. + ochlllllllllll hhhllllllhhh lllllllllllhco + .cllllllllllllll hlllllo +hllh llllllllllllllc. +ollllllllllhco'' hlllllo +hllh ``ochllllllllllo +hllllllllc' hllllllllllllh `cllllllllh +ollllllh +llllllllllll+ hllllllo + `cllllh. ohllllllho .hllllc' + ochllc. ++++ .cllhco + `+occooo+. .+ooocco+' + `+oo++++ ++++oo+' +EOF + ;; + + "GNOME"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} ,@@@@@@@@, + @@@@@@ @@@@@@@@@@@@ + ,@@. @@@@@@@ *@@@@@@@@@@@@ + @@@@@% @@@@@@( @@@@@@@@@@@& + @@@@@@ @@@@* @@@@@@@@@# +@@@@* @@@@, *@@@@@% +@@@@@. + @@@@# @@@@@@@@@@@@@@@@ + ,@@@@@@@@@@@@@@@@@@@@@@@, + ,@@@@@@@@@@@@@@@@@@@@@@@@@@& + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@( + @@@@@@@@@@@@@@@@@@@@% + @@@@@@@@@@@@@@@@ + @@@@@@@@@@@@* @@@@@@@@/ + &@@@@@@@@@@ @@@@@@@@@* + @@@@@@@@@@@, @@@@@@@@@* + ,@@@@@@@@@@@@@@@@@@@@& + &@@@@@@@@@@@@@@ + ... +EOF + ;; + + "GNU") + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} _-`````-, ,- '- . + .' .- - | | - -. `. + /.' / `. \ +:/ : _... ..._ `` : +:: : /._ .`:'_.._\. || : +:: `._ ./ ,` : \ . _.'' . +`:. / | -. \-. \\_ / + \:._ _/ .' .@) \@) ` `\ ,.' + _/,--' .- .\,-.`--`. + ,'/'' (( \ ` ) + /'/' \ `-' ( + '/'' `._,-----' + ''/' .,---' + ''/' ;: + ''/'' ''/ + ''/''/'' + '/'/' + `; +EOF + ;; + + "GoboLinux"*) + set_colors 5 4 6 2 + read -rd '' ascii_data <<'EOF' +${c1} _____ _ + / ____| | | +| | __ ___ | |__ ___ +| | |_ |/ _ \| '_ \ / _ \ +| |__| | (_) | |_) | (_) | + \_____|\___/|_.__/ \___/ +EOF + ;; + + "Grombyang"*) + set_colors 4 2 1 + read -rd '' ascii_data <<'EOF' +${c1} eeeeeeeeeeee + eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee ${c2}.o+ ${c1}eeee + eeee ${c2}`ooo/ ${c1}eeee + eeee ${c2}`+oooo: ${c1}eeee +eee ${c2}`+oooooo: ${c1}eee +eee ${c2}-+oooooo+: ${c1}eee +ee ${c2}`/:oooooooo+: ${c1}ee +ee ${c2}`/+ +++ +: ${c1}ee +ee ${c2}+o+\ ${c1}ee +eee ${c2}+o+\ ${c1}eee +eee ${c2}// \\ooo/ \\\ ${c1}eee + eee ${c2}//++++oooo++++\\\ ${c1}eee + eeee ${c2}::::++oooo+::::: ${c1}eeee + eeeee ${c3}Grombyang OS ${c1} eeee + eeeeeeeeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeee +EOF + ;; + + "guix_small"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1}|.__ __.| +|__ \\ / __| + \\ \\ / / + \\ \\ / / + \\ \\ / / + \\ \\/ / + \\__/ +EOF + ;; + + "Guix"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} .. `. + `--..```..` `..```..--` + .-:///-:::. `-:::///:-. + ````.:::` `:::.```` + -//:` -::- + ://: -::- + `///- .:::` + -+++-:::. + :+/:::- + `-....` +EOF + ;; + + "haiku_small"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} ,^, + / \\ +*--_ ; ; _--* +\\ '" "' / + '. .' +.-'" "'-. + '-.__. .__.-' + |_| +EOF + ;; + + "Haiku"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c2} :dc' + 'l:;'${c1},${c2}'ck. .;dc:. + co ${c1}..${c2}k. .;; ':o. + co ${c1}..${c2}k. ol ${c1}.${c2}0. + co ${c1}..${c2}k. oc ${c1}..${c2}0. + co ${c1}..${c2}k. oc ${c1}..${c2}0. +.Ol,. co ${c1}...''${c2}Oc;kkodxOdddOoc,. + ';lxxlxOdxkxk0kd${c1}oooll${c2}dl${c1}ccc:${c2}clxd; + ..${c1}oOolllllccccccc:::::${c2}od; + cx:ooc${c1}:::::::;${c2}cooolcX. + cd${c1}.${c2}''cloxdoollc' ${c1}...${c2}0. + cd${c1}......${c2}k;${c1}.${c2}xl${c1}.... .${c2}0. + .::c${c1};..${c2}cx;${c1}.${c2}xo${c1}..... .${c2}0. + '::c'${c1}...${c2}do${c1}..... .${c2}K, + cd,.${c1}....:${c2}O,${c1} + ':clod:'${c1} + ${c1} +EOF + ;; + + "Huayra"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c2} ` + . . ` + `` - . . + `.` -` `. - `` .` + ..`-`-` + - / .` ``` + .--.+--`+:- :/.` .-``.` + -+/so::h:.d-`./:`.` + :hNhyMomy:os-...-. ```` + .dhsshNmNhoo+:-``.``` + ${c1}`ohy:-${c2}NMds+::-.`` + ````${c1}.hNN+`${c2}mMNho/:-....```` + ````` `../dmNhoo+/:..`` + ```` .dh++o/:....` +.+s/` `/s-.-.:.`` ```` +::` `::`..` + .` `.. + `` +EOF + ;; + + "hyperbola_small"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} |`__.`/ + \____/ + .--. + / \\ + / ___ \\ + / .` `.\\ +/.` `.\\ +EOF + ;; + + "Hyperbola"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} WW + KX W + WO0W NX0O + NOO0NW WNXK0OOKW + W0OOOOOOOOOOOOKN + N0OOOOOOO0KXW + WNXXXNW + NXK00000KN + WNK0OOOOOOOOOO0W + NK0OOOOOOOOOOOOOO0W + X0OOOOOOO00KK00OOOOOK + X0OOOO0KNWW WX0OO0W + X0OO0XNW KOOW + N00KNW KOW + NKXN W0W +WW W +EOF + ;; + + "januslinux"*|"janus"*|"Ataraxia Linux"*|"Ataraxia"*) + set_colors 4 5 6 2 + read -rd '' ascii_data <<'EOF' +${c1} 'l: + loooooo + loooo coooool + looooooooooooooooooool + looooooooooooooooo + lool cooo + coooooooloooooooo + clooooo ;lood cloooo + :loooocooo cloo loooo + loooo :ooooool loooo +looo cooooo cooooo +looooooooooooo ;loooooo ${c2}looooooc +${c1}looooooooo loo cloooooool ${c2}looooc +${c1} cooo cooooooooooo ${c2}looolooooool +${c1} cooo: ${c2}coooooooooooooooooool + loooooooooooolc: loooc; + cooo: loooooooooooc + ;oool looooooo: + coool olc, + looooc ,, + coooooc loc + :oooool, coool:, looool:, + looool: ooooooooooooooo: + cooolc .ooooooooooool +EOF + ;; + + "Kali"*) + set_colors 4 8 + read -rd '' ascii_data <<'EOF' +${c1}.............. + ..,;:ccc,. + ......''';lxO. +.....''''..........,:ld; + .';;;:::;,,.x, + ..'''. 0Xxoc:,. ... + .... ,ONkc;,;cokOdc',. + . OMo ':${c2}dd${c1}o. + dMc :OO; + 0M. .:o. + ;Wd + ;XO, + ,d0Odlc;,.. + ..',;:cdOOd::,. + .:d;.':;. + 'd, .' + ;l .. + .o + c + .' + . +EOF + ;; + + "KaOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} .. + ..... ..OSSAAAAAAA.. + .KKKKSS. .SSAAAAAAAAAAA. +.KKKKKSO. .SAAAAAAAAAA... +KKKKKKS. .OAAAAAAAA. +KKKKKKS. .OAAAAAA. +KKKKKKS. .SSAA.. +.KKKKKS..OAAAAAAAAAAAA........ + DKKKKO.=AA=========A===AASSSO.. + AKKKS.==========AASSSSAAAAAASS. + .=KKO..========ASS.....SSSSASSSS. + .KK. .ASS..O.. =SSSSAOSS: + .OK. .ASSSSSSSO...=A.SSA. + .K ..SSSASSSS.. ..SSA. + .SSS.AAKAKSSKA. + .SSS....S.. +EOF + ;; + + "KDE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `..---+/---..` + `---.`` `` `.---.` + .--.` `` `-:-. + `:/: `.----//----.` :/- + .:. `---` `--.` .:` + .:` `--` .:- `:. + `/ `:. `.-::-.` -:` `/` + /. /. `:++++++++:` .: .: +`/ .: `+++++++++++/ /` `+` +/+` -- .++++++++++++` :. .+: +`/ .: `+++++++++++/ /` `+` + /` /. `:++++++++:` .: .: + ./ `:. `.:::-.` -:` `/` + .:` `--` .:- `:. + .:. `---` `--.` .:` + `:/: `.----//----.` :/- + .-:.` `` `-:-. + `---.`` `` `.---.` + `..---+/---..` +EOF + ;; + + "Kibojoe"*) + set_colors 2 7 4 + read -rd '' ascii_data <<'EOF' + ${c3} ./+oooooo+/. + -/+ooooo+/:.` + ${c1}`${c3}yyyo${c2}+++/++${c3}osss${c1}. + ${c1}+NMN${c3}yssssssssssss${c1}. + ${c1}.dMMMMN${c3}sssssssssssy${c1}Ns` + +MMMMMMMm${c3}sssssssssssh${c1}MNo` + `hMMMMMNNNMd${c3}sssssssssssd${c1}MMN/ + .${c3}syyyssssssy${c1}NNmmmmd${c3}sssss${c1}hMMMMd: + -NMmh${c3}yssssssssyhhhhyssyh${c1}mMMMMMMMy` + -NMMMMMNN${c3}mdhyyyyyyyhdm${c1}NMMMMMMMMMMMN+ +`NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd. +ods+/:-----://+oyydmNMMMMMMMMMMMMMMMMMN- +` .-:+osyhhdmmNNNmdo +EOF + ;; + + "Kogaion"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ;; ,; + ;;; ,;; + ,;;;; ;;;; + ,;;;;;;;; ;;;; + ;;;;;;;;;;; ;;;;; + ,;;;;;;;;;;;; ';;;;;, + ;;;;;;;;;;;;;;, ';;;;;;; + ;;;;;;;;;;;;;;;;;, ';;;;; +; ';;;;;;;;;;;;;;;;;;, ;;; +;;;, ';;;;;;;;;;;;;;;;;;;,;; +;;;;;, ';;;;;;;;;;;;;;;;;;, +;;;;;;;;, ';;;;;;;;;;;;;;;;, +;;;;;;;;;;;;, ';;;;;;;;;;;;;; +';;;;;;;;;;;;; ';;;;;;;;;;;;; + ';;;;;;;;;;;;;, ';;;;;;;;;;; + ';;;;;;;;;;;;; ;;;;;;;;;; + ';;;;;;;;;;;; ;;;;;;;; + ';;;;;;;; ;;;;;; + ';;;;; ;;;; + ';;; ;; +EOF + ;; + + "Korora"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ____________ + _add55555555554${c1}: + _w?'${c1}``````````'${c2})k${c1}: + _Z'${c1}`${c2} ]k${c1}: + m(${c1}`${c2} )k${c1}: + _.ss${c1}`${c2}m[${c1}`${c2}, ]e${c1}: + .uY"^`${c1}`${c2}Xc${c1}`${c2}?Ss. d(${c1}` + jF'${c1}`${c2} `@. ${c1}`${c2}Sc .jr${c1}` + jr${c1}`${c2} `?n_ ${c1}`${c2}$; _a2"${c1}` +.m${c1}:${c2} `~M${c1}`${c2}1k${c1}`${c2}5?!`${c1}` +:#${c1}:${c2} ${c1}`${c2})e${c1}``` +:m${c1}:${c2} ,#'${c1}` +:#${c1}:${c2} .s2'${c1}` +:m,________.aa7^${c1}` +:#baaaaaaas!J'${c1}` + ``````````` +EOF + ;; + + "KSLinux"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} K K U U RRRR ooo + K K U U R R o o + KKK U U RRRR o o + K K U U R R o o + K K UUU R R ooo + +${c2} SSS AAA W W AAA + S A A W W A A + SSS AAAAA W W W AAAAA + S A A WW WW A A + SSS A A W W A A +EOF + ;; + + "Kubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + .:oyyyyyyyyyyyyyyyyyyo:` + -oyyyyyyyo${c2}dMMy${c1}yyyyyyysyyyyo- + -syyyyyyyyyy${c2}dMMy${c1}oyyyy${c2}dmMMy${c1}yyyys- + oyyys${c2}dMy${c1}syyyy${c2}dMMMMMMMMMMMMMy${c1}yyyyyyo + `oyyyy${c2}dMMMMy${c1}syysoooooo${c2}dMMMMy${c1}yyyyyyyyo` + oyyyyyy${c2}dMMMMy${c1}yyyyyyyyyyys${c2}dMMy${c1}sssssyyyo +-yyyyyyyy${c2}dMy${c1}syyyyyyyyyyyyyys${c2}dMMMMMy${c1}syyy- +oyyyysoo${c2}dMy${c1}yyyyyyyyyyyyyyyyyy${c2}dMMMMy${c1}syyyo +yyys${c2}dMMMMMy${c1}yyyyyyyyyyyyyyyyyysosyyyyyyyy +yyys${c2}dMMMMMy${c1}yyyyyyyyyyyyyyyyyyyyyyyyyyyyy +oyyyyysos${c2}dy${c1}yyyyyyyyyyyyyyyyyy${c2}dMMMMy${c1}syyyo +-yyyyyyyy${c2}dMy${c1}syyyyyyyyyyyyyys${c2}dMMMMMy${c1}syyy- + oyyyyyy${c2}dMMMy${c1}syyyyyyyyyyys${c2}dMMy${c1}oyyyoyyyo + `oyyyy${c2}dMMMy${c1}syyyoooooo${c2}dMMMMy${c1}oyyyyyyyyo + oyyysyyoyyyys${c2}dMMMMMMMMMMMy${c1}yyyyyyyo + -syyyyyyyyy${c2}dMMMy${c1}syyy${c2}dMMMy${c1}syyyys- + -oyyyyyyy${c2}dMMy${c1}yyyyyysosyyyyo- + ./oyyyyyyyyyyyyyyyyyyo/. + `.:/oosyyyysso/:.` +EOF + ;; + + "LEDE"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' + ${c1} _________ + / /\ + / LE / \ + / DE / \ + /________/ LE \ + \ \ DE / + \ LE \ / + \ DE \ / + \________\/ +EOF + ;; + + "LaxerOS"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} + /. + `://:- + `//////: + .////////:` + -//////////:` + -/////////////` + :///////////////. + `://////.```-//////- + `://///:` .//////- + `//////: `//////: + .//////- `://///:` + -//////- `://///:` + -//////. ://////` + ://////` -//////. + `/////:` ./////: + .-::-` .:::-` + +.:://////////////////////////////////::. +//////////////////////////////////////// +.:////////////////////////////////////:. + +EOF + ;; + + "LibreELEC"*) + set_colors 2 3 7 14 13 + read -rd '' ascii_data <<'EOF' +${c1} :+ooo/. ${c2}./ooo+: +${c1} :+ooooooo/. ${c2}./ooooooo+: +${c1} :+ooooooooooo:${c2}:ooooooooooo+: +${c1} :+ooooooooooo+- ${c2}-+ooooooooooo+: +${c1} :+ooooooooooo+- ${c3}-- ${c2}-+ooooooooooo+: +${c1}.+ooooooooooo+- ${c3}:+oo+: ${c2}-+ooooooooooo+- +${c1}-+ooooooooo+- ${c3}:+oooooo+: ${c2}-+oooooooooo- +${c1} :+ooooo+- ${c3}:+oooooooooo+: ${c2}-+oooooo: +${c1} :+o+- ${c3}:+oooooooooooooo+: ${c2}-+oo: +${c4} ./ ${c3}:oooooooooooooooooo: ${c5}/. +${c4} ./oo+: ${c3}-+oooooooooooooo+- ${c5}:+oo/. +${c4} ./oooooo+: ${c3}-+oooooooooo+- ${c5}:+oooooo/. +${c4}-oooooooooo+: ${c3}-+oooooo+- ${c5}:+oooooooooo- +${c4}.+ooooooooooo+: ${c3}-+oo+- ${c5}:+ooooooooooo+. +${c4} -+ooooooooooo+: ${c3}.. ${c5}:+ooooooooooo+- +${c4} -+ooooooooooo+: ${c5}:+ooooooooooo+- +${c4} -+oooooooooo+:${c5}:+oooooooooo+- +${c4} -+oooooo+: ${c5}:+oooooo+- +${c4} -+oo+: ${c5}:+oo+- +${c4} .. ${c5}.. +EOF + ;; + + "Linux") + set_colors fg 8 3 + read -rd '' ascii_data <<'EOF' +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +EOF + ;; + + "linuxlite_small"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / ${c2}/ ${c1}/ +> ${c2}/ ${c1}/ +\\ ${c2}\\ ${c1}\\ + \\_${c2}\\${c1}_\\ +${c2} \\ +EOF + ;; + + "Linux Lite"* | "Linux_Lite"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} ,xXc + .l0MMMMMO + .kNMMMMMWMMMN, + KMMMMMMKMMMMMMo + 'MMMMMMNKMMMMMM: + kMMMMMMOMMMMMMO + .MMMMMMX0MMMMMW. + oMMMMMMxWMMMMM: + WMMMMMNkMMMMMO +:MMMMMMOXMMMMW +.0MMMMMxMMMMM; +:;cKMMWxMMMMO +'MMWMMXOMMMMl + kMMMMKOMMMMMX: + .WMMMMKOWMMM0c + lMMMMMWO0MNd:' + oollXMKXoxl;. + ':. .: .' + .. + . +EOF + ;; + + "LMDE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' + ${c2}`.-::---.. +${c1} .:++++ooooosssoo:. + .+o++::. `.:oos+. +${c1} :oo:.` -+oo${c2}: +${c1} ${c2}`${c1}+o/` .${c2}::::::${c1}-. .++-${c2}` +${c1}${c2}`${c1}/s/ .yyyyyyyyyyo: +o-${c2}` +${c1}${c2}`${c1}so .ss ohyo` :s-${c2}: +${c1}${c2}`${c1}s/ .ss h m myy/ /s`${c2}` +${c1}`s: `oo s m Myy+-o:` +`oo :+sdoohyoydyso/. + :o. .:////////++: +${c1} `/++ ${c2}-:::::- +${c1} ${c2}`${c1}++- +${c1} ${c2}`${c1}/+- +${c1} ${c2}.${c1}+/. +${c1} ${c2}.${c1}:+-. + `--.`` +EOF + ;; + + "Lubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + `.:yyyyyyyyyyyyyyyyyy:.` + .:yyyyyyyyyyyyyyyyyyyyyyyy:. + .:yyyyyyyyyyyyyyyyyyyyyyyyyyyy:. + -yyyyyyyyyyyyyy${c2}+hNMMMNh+${c1}yyyyyyyyy- + :yy${c2}mNy+${c1}yyyyyyyy${c2}+Nmso++smMdhyysoo+${c1}yy: + -yy${c2}+MMMmmy${c1}yyyyyy${c2}hh${c1}yyyyyyyyyyyyyyyyyyy- +.yyyy${c2}NMN${c1}yy${c2}shhs${c1}yyy${c2}+o${c1}yyyyyyyyyyyyyyyyyyyy. +:yyyy${c2}oNM+${c1}yyyy${c2}+sso${c1}yyyyyyy${c2}ss${c1}yyyyyyyyyyyyy: +:yyyyy${c2}+dNs${c1}yyyyyyy${c2}++${c1}yyyyy${c2}oN+${c1}yyyyyyyyyyyy: +:yyyyy${c2}oMMmhysso${c1}yyyyyyyyyy${c2}mN+${c1}yyyyyyyyyyy: +:yyyyyy${c2}hMm${c1}yyyyy${c2}+++${c1}yyyyyyy${c2}+MN${c1}yyyyyyyyyyy: +.yyyyyyy${c2}ohmy+${c1}yyyyyyyyyyyyy${c2}NMh${c1}yyyyyyyyyy. + -yyyyyyyyyy${c2}++${c1}yyyyyyyyyyyy${c2}MMh${c1}yyyyyyyyy- + :yyyyyyyyyyyyyyyyyyyyy${c2}+mMN+${c1}yyyyyyyy: + -yyyyyyyyyyyyyyyyy${c2}+sdMMd+${c1}yyyyyyyy- + .:yyyyyyyyy${c2}hmdmmNMNdy+${c1}yyyyyyyy:. + .:yyyyyyy${c2}my${c1}yyyyyyyyyyyyyyy:. + `.:yyyy${c2}s${c1}yyyyyyyyyyyyy:.` + `.:/oosyyyysso/:.` +EOF + ;; + + "Lunar"*) + set_colors 4 7 3 + read -rd '' ascii_data <<'EOF' +${c1}`-. `-. + -ohys/-` `:+shy/` + -omNNdyo/` :+shmNNy/` + ${c3} - + /mMmo + hMMMN` + .NMMs + ${c1} -:+oooo+//: ${c3}/MN${c1}. -///oooo+/-` + /:.` ${c3}/${c1} `.:/` +${c3} __ + | | _ _ ___ ___ ___ + | |__| | | | .'| _| + |_____|___|_|_|__,|_| +EOF + ;; + + "mac"*"_small") + set_colors 2 3 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} .:' + _ :'_ +${c2} .'`_`-'_``. +:________.-' +${c3}:_______: +:_______: +${c4} :_______`-; +${c5} `._.-._.' +EOF + ;; + + "mac"* | "Darwin") + set_colors 2 3 1 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} 'c. + ,xNMM. + .OMMMMo + OMMM0, + .;loddo:' loolloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: +${c2} .KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +${c3};MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + ${c5}.XMMMMMMMMMMMMMMMMMMMMMMMMMMk + .XMMMMMMMMMMMMMMMMMMMMMMMMK. + ${c6}kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + .cooc,. .,coo:. +EOF + ;; + + "mageia_small"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} * + * + ** +${c2} /\\__/\\ +/ \\ +\\ / + \\____/ +EOF + ;; + + "Mageia"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} .°°. + °° .°°. + .°°°. °° + . . + °°° .°°°. + .°°°. '___' +${c2} .${c1}'___' ${c2} . + :dkxc;'. ..,cxkd; + .dkk. kkkkkkkkkk .kkd. +.dkk. ';cloolc;. .kkd +ckk. .kk; +xO: cOd +xO: lOd +lOO. .OO: +.k00. .00x + .k00; ;00O. + .lO0Kc;,,,,,,;c0KOc. + ;d00KKKKKK00d; + .,KKKK,. +EOF + ;; + + "MagpieOS"*) + set_colors 2 1 3 5 + read -rd '' ascii_data <<'EOF' +${c1} ;00000 :000Ol + .x00kk00: O0kk00k; + l00: :00. o0k :O0k. + .k0k. x${c2}d$dddd${c1}k' .d00; + k0k. ${c2}.dddddl ${c1}o00, + o00. ${c2}':cc:. ${c1}d0O +.00l ,00. +l00. d0x +k0O .:k0o +O0k ;dO0000d. +k0O .O0O${c2}xxxxk${c1}00: +o00. k0O${c2}dddddd${c1}occ +'00l x0O${c2}dddddo${c3};..${c1} + x00. .x00${c2}kxxd${c3}:..${c1} + .O0x .:oxxx${c4}Okl.${c1} + .x0d ${c4},xx,${c1} + .:o. ${c4}.xd ckd${c1} + .. ${c4}dxl .xx; + :xxolldxd' + ;oxdl. +EOF + ;; + + "Mandriva"*) + set_colors 4 3 + read -rd '' ascii_data <<'EOF' +${c2} `` + `-. +${c1} ` ${c2}.--- +${c1} -/ ${c2}-::--` +${c1} `++ ${c2}`----...```-:::::. +${c1} `os. ${c2}.::::::::::::::-``` ` ` +${c1} +s+ ${c2}.::::::::::::::::---...--` +${c1}-ss: ${c2}`-::::::::::::::::-.``.`` +${c1}/ss- ${c2}.::::::::::::-.`` ` +${c1}+ss: ${c2}.::::::::::::- +${c1}/sso ${c2}.::::::-::::::- +${c1}.sss/ ${c2}-:::-.` .::::: +${c1} /sss+. ${c2}..`${c1} `--` ${c2}.::: +${c1} -ossso+/:://+/-` ${c2}.:` +${c1} -/+ooo+/-. ${c2}` +EOF + ;; + + "manjaro_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}||||||||| |||| +||||||||| |||| +|||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +EOF + ;; + + "Manjaro"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +EOF + ;; + + "Maui"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-://////:--` + .:/oooooooooooooooo+:. + `:+ooooooooooooooooooooooo:` + `:oooooooooooooooooooooooooooo/` + ..```-oooooo/-`` `:oooooo+:.` `-- + :. +oo+-` /ooo/` -/ + -o. `o+- +o/` -o: +`oo` ::` :o/ `+. .+o` /oo. +/o+ . -+oo- ` /oo/ `ooo/ ++o- /ooo+` .+ooo. :ooo+ +++ .+oooo: -oooo+ `oooo+ +:. .oooooo` :ooooo- :oooo: +` .oooooo: :ooooo+ `ooo+-` + .+oooooo` -oooooo: `o/- + +oooooo: .ooooooo. + /ooooooo` /ooooooo/ .. + `:oooooooo/:::/ooooooooo+:--:/:` + `:+oooooooooooooooooooooo+:` + .:+oooooooooooooooo+:. + `.-://////:-.` +EOF + ;; + + "Mer"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} dMs + .-` + `y`-o+` + ``NMMy + .--`:++. + .hNNNNs + /MMMMMN + `ommmd/ +/ + ```` +/ + `:+sssso/-` + .-::. `-::-` `smNMNmdmNMNd/ .://-` +.ymNMNNdmNMMNm+` -dMMh:.....+dMMs `sNNMMNo +dMN+::NMMy::hMM+ mMMo `ohhy/ `dMM+ yMMy::- +MMm yMM- :MMs NMN` `:::::--sMMh dMM` +MMm yMM- -MMs mMM+ `ymmdsymMMMs dMM` +NNd sNN- -NNs -mMNs-.--..:dMMh` dNN +--- .--` `--. .smMMmdddmMNdo` .-- + ./ohddds+:` + +h- `.:-. + ./`.dMMMN+ + +MMMMMd + `+dmmy- + ``` .+` + .dMNo-y. + `hmm/ + .:` + dMs +EOF + ;; + + "Minix"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} -sdhyo+:-` -/syymm: + sdyooymmNNy. `` .smNmmdysNd + odyoso+syNNmysoyhhdhsoomNmm+/osdm/ + :hhy+-/syNNmddhddddddmNMNo:sdNd: + `smNNdNmmNmddddddddddmmmmmmmy` + `ohhhhdddddmmNNdmddNmNNmdddddmdh- + odNNNmdyo/:/-/hNddNy-`..-+ydNNNmd: + `+mNho:` smmd/ sNNh :dmms` -+ymmo. +-od/ -m${c1}mm${c2}mo -NN+ +m${c1}mm${c2}m- yms: ++sms -.` :so: .NN+ :os/ .-`mNh: +.-hyh+:////- -sNNd:` .--://ohNs- + `:hNNNNNNNMMd/sNMmhsdMMh/ymmNNNmmNNy/ + -+sNNNNMMNNNsmNMo: :NNmymNNNNMMMms: + //oydNMMMMydMMNysNMMmsMMMMMNyo/` + ../-yNMMy--/::/-.sMMmos+.` + -+oyhNsooo+omy/``` + `::ohdmds-` +EOF + ;; + + "linuxmint_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ___________ +|_ \\ + | ${c2}| _____ ${c1}| + | ${c2}| | | | ${c1}| + | ${c2}| | | | ${c1}| + | ${c2}\\__${c2}___/ ${c1}| + \\_________/ +EOF + ;; + + "Linux Mint Old"* | "LinuxMintOld"* | "mint_old"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}MMMMMMMMMMMMMMMMMMMMMMMMMmds+. +MMm----::-://////////////oymNMd+` +MMd ${c2}/++ ${c1}-sNMd: +MMNso/` ${c2}dMM `.::-. .-::.` ${c1}.hMN: +ddddMMh ${c2}dMM :hNMNMNhNMNMNh: ${c1}`NMm + NMm ${c2}dMM .NMN/-+MMM+-/NMN` ${c1}dMM + NMm ${c2}dMM -MMm `MMM dMM. ${c1}dMM + NMm ${c2}dMM -MMm `MMM dMM. ${c1}dMM + NMm ${c2}dMM .mmd `mmm yMM. ${c1}dMM + NMm ${c2}dMM` ..` ... ydm. ${c1}dMM + hMM- ${c2}+MMd/-------...-:sdds ${c1}dMM + -NMm- ${c2}:hNMNNNmdddddddddy/` ${c1}dMM + -dMNs-${c2}``-::::-------.`` ${c1}dMM + `/dMNmy+/:-------------:/yMMM + ./ydNMMMMMMMMMMMMMMMMMMMMM + .MMMMMMMMMMMMMMMMMMM +EOF + ;; + + "Linux Mint"* | "LinuxMint"* | "mint"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} ...-:::::-... +${c2} .-MMMMMMMMMMMMMMM-. + .-MMMM${c1}`..-:::::::-..`${c2}MMMM-. + .:MMMM${c1}.:MMMMMMMMMMMMMMM:.${c2}MMMM:. + -MMM${c1}-M---MMMMMMMMMMMMMMMMMMM.${c2}MMM- + `:MMM${c1}:MM` :MMMM:....::-...-MMMM:${c2}MMM:` + :MMM${c1}:MMM` :MM:` `` `` `:MMM:${c2}MMM: +.MMM${c1}.MMMM` :MM. -MM. .MM- `MMMM.${c2}MMM. +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM-${c2}MMM: +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM:${c2}MMM: +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM-${c2}MMM: +.MMM${c1}.MMMM` :MM:--:MM:--:MM: `MMMM.${c2}MMM. + :MMM${c1}:MMM- `-MMMMMMMMMMMM-` -MMM-${c2}MMM: + :MMM${c1}:MMM:` `:MMM:${c2}MMM: + .MMM${c1}.MMMM:--------------:MMMM.${c2}MMM. + '-MMMM${c1}.-MMMMMMMMMMMMMMM-.${c2}MMMM-' + '.-MMMM${c1}``--:::::--``${c2}MMMM-.' +${c2} '-MMMMMMMMMMMMM-' +${c2} ``-:::::-`` +EOF + ;; + + "Live Raizo"* | "Live_Raizo"*) + set_colors 3 + read -rd '' ascii_data <<'EOF' +${c1} `......` + -+shmNMMMMMMNmhs/. + :smMMMMMmmhyyhmmMMMMMmo- + -hMMMMd+:. `----` .:odMMMMh- + `hMMMN+. .odNMMMMMMNdo. .yMMMMs` + hMMMd. -dMMMMmdhhdNMMMNh` .mMMMh +oMMMm` :MMMNs.:sddy:-sMMMN- `NMMM+ +mMMMs dMMMo sMMMMMMd yMMMd sMMMm +----` .---` oNMMMMMh `---. .---- + .sMMy: + /MM/ + +dMMms. + hMMMMMMN + `dMMMMMMm: + .+ss+sMNysMMoomMd+ss+. + +MMMMMMN` +MM/ hMMMMMNs + sMMMMMMm-hNMMMd-hMMMMMMd + :yddh+`hMMMMMMN :yddy/` + .hMMMMd: + `..` +EOF + ;; + + "mx_small"*) + set_colors 4 6 7 + read -rd '' ascii_data <<'EOF' +${c3} \\\\ / + \\\\/ + \\\\ + /\\/ \\\\ + / \\ /\\ + / \\/ \\ +/__________\\ +EOF + ;; + + "MX"*) + set_colors 4 6 7 + read -rd '' ascii_data <<'EOF' +${c3}MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMM +MMMMMMMMMMNs..yMMMMMMMMMMMMMm: +NMMMMMMM +MMMMMMMMMN+ :mMMMMMMMMMNo` -dMMMMMMMM +MMMMMMMMMMMs. `oNMMMMMMh- `sNMMMMMMMMM +MMMMMMMMMMMMN/ -hMMMN+ :dMMMMMMMMMMM +MMMMMMMMMMMMMMh- +ms. .sMMMMMMMMMMMMM +MMMMMMMMMMMMMMMN+` ` +NMMMMMMMMMMMMMM +MMMMMMMMMMMMMMNMMd: .dMMMMMMMMMMMMMMM +MMMMMMMMMMMMm/-hMd- `sNMMMMMMMMMMMMM +MMMMMMMMMMNo` -` :h/ -dMMMMMMMMMMMM +MMMMMMMMMd: /NMMh- `+NMMMMMMMMMM +MMMMMMMNo` :mMMN+` `-hMMMMMMMM +MMMMMMh. `oNMMd: `/mMMMMMM +MMMMm/ -hMd- `sNMMMM +MMNs` - :dMMM +Mm: `oMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +EOF + ;; + + "Namib"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} .:+shysyhhhhysyhs+:. + -/yyys syyy/- + -shy yhs- + -yhs shy- + +hy yh+ + +ds sd+ +/ys so sy/ +sh smMMNdyo hs +yo ymMMMMNNMMNho oy +N ydMMMNNMMMMMMMMMmy N +N shmMMMMNNMMMMMMMMMMMMMNy N +yo ooshmNMMMNNNNMMMMMMMMMMMMMMMMMms oy +sd yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy ds +/ys sy/ + +ds sd+ + +hy yh+ + -yhs shy- + -shy yhs- + -/yyys syyy/- + .:+shysyhyhhysyhs+:. +EOF + ;; + + "Neptune"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ./+sydddddddys/-. + .+ymNNdyooo/:+oooymNNmy/` + `/hNNh/.` `-+dNNy:` + /mMd/. .++.:oy/ .+mMd- + `sMN/ oMMmdy+. `oNNo + `hMd. `/ymy/. :NMo + oMN- `/dMd: /MM- +`mMy -dMN+` mMs +.MMo -NMM/ yMs + dMh mMMMo:` `NMo + /MM/ /ymMMMm- sMN. + +Mm: .hMMd` oMN/ + +mNs. `yNd/` -dMm- + .yMNs: `/.` `/yNNo` + .odNNy+-` .:ohNNd/. + -+ymNNmdyyyyyyydmNNmy+. + `-//sssssss//. +EOF + ;; + + "netbsd_small"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c2}\\\\${c1}\`-______,----__ +${c2} \\\\ ${c1}__,---\`_ +${c2} \\\\ ${c1}\`.____ +${c2} \\\\${c1}-______,----\`- +${c2} \\\\ + \\\\ + \\\\ +EOF + ;; + + "NetBSD"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/oshdmNMNdhyo+:-` +${c2}y${c1}/s+:-`` `.-:+oydNMMMMNhs/-`` +${c2}-m+${c1}NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` + ${c2}-m+${c1}NMMMMMMMMMMMMMMMMMMMMmy+:` + ${c2}-N/${c1}dMMMMMMMMMMMMMMMds:` + ${c2}-N/${c1}hMMMMMMMMMmho:` + ${c2}-N/${c1}-:/++/:.` +${c2} :M+ + :Mo + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms +EOF + ;; + + "Netrunner"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} .:oydmMMMMMMmdyo:` + -smMMMMMMMMMMMMMMMMMMds- + +mMMMMMMMMMMMMMMMMMMMMMMMMd+ + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ + `hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` + .mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd` + dMMMMMMMMMMMMMMMMMMMMMMNdhmMMMMMMMMMMh ++MMMMMMMMMMMMMNmhyo+/-. -MMMMMMMMMMMM/ +mMMMMMMMMd+:.` `mMMMMMMMMMMMMd +MMMMMMMMMMMdy/. yMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMNh+` +MMMMMMMMMMMMMMM +mMMMMMMMMMMMMMMMMMs -NMMMMMMMMMMMMMMd ++MMMMMMMMMMMMMMMMMN. `mMMMMMMMMMMMMMMM/ + dMMMMMMMMMMMMMMMMMy hMMMMMMMMMMMMMMMh + `dMMMMMMMMMMMMMMMMM-+MMMMMMMMMMMMMMMd` + `hMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMy + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm: + +dMMMMMMMMMMMMMMMMMMMMMMMMd/ + -odMMMMMMMMMMMMMMMMMMdo- + `:+ydmNMMMMNmhy+-` +EOF + ;; + + "Nitrux"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1}`:/. +`/yo +`/yo +`/yo .+:. +`/yo .sys+:.` +`/yo `-/sys+:.` +`/yo ./sss+:.` +`/yo .:oss+:-` +`/yo ./o///:-` +`/yo `.-:///////:` +`/yo `.://///++//-`` +`/yo `.-:////++++/-` +`/yo `-://///++o+/-` +`/yo `-/+o+++ooo+/-` +`/s+:+oooossso/.` +`//+sssssso:. +`+syyyy+:` +:+s+- +EOF + ;; + + "nixos_small") + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + ${c1} \\\\ \\\\ // + ==\\\\__\\\\/ // + // \\\\// +==// //== + //\\\\___// +// /\\\\ \\\\== + // \\\\ \\\\ +EOF + ;; + + "nixos_old"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ::::. ${c2}'::::: ::::' +${c1} '::::: ${c2}':::::. ::::' +${c1} ::::: ${c2}'::::.::::: +${c1} .......:::::..... ${c2}:::::::: +${c1} ::::::::::::::::::. ${c2}:::::: ${c1}::::. + ::::::::::::::::::::: ${c2}:::::. ${c1}.::::' +${c2} ..... ::::' ${c1}:::::' +${c2} ::::: '::' ${c1}:::::' +${c2} ........::::: ' ${c1}:::::::::::. +${c2}::::::::::::: ${c1}::::::::::::: +${c2} ::::::::::: ${c1}.. ${c1}::::: +${c2} .::::: ${c1}.::: ${c1}::::: +${c2} .::::: ${c1}::::: ${c1}''''' ${c2}..... + ::::: ${c1}':::::. ${c2}......:::::::::::::' + ::: ${c1}::::::. ${c2}':::::::::::::::::' +${c1} .:::::::: ${c2}':::::::::: +${c1} .::::''::::. ${c2}'::::. +${c1} .::::' ::::. ${c2}'::::. +${c1} .:::: :::: ${c2}'::::. +EOF + ;; + + "NixOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ▗▄▄▄ ${c2}▗▄▄▄▄ ▄▄▄▖ +${c1} ▜███▙ ${c2}▜███▙ ▟███▛ +${c1} ▜███▙ ${c2}▜███▙▟███▛ +${c1} ▜███▙ ${c2}▜██████▛ +${c1} ▟█████████████████▙ ${c2}▜████▛ ${c1}▟▙ +${c1} ▟███████████████████▙ ${c2}▜███▙ ${c1}▟██▙ +${c2} ▄▄▄▄▖ ▜███▙ ${c1}▟███▛ +${c2} ▟███▛ ▜██▛ ${c1}▟███▛ +${c2} ▟███▛ ▜▛ ${c1}▟███▛ +${c2}▟███████████▛ ${c1}▟██████████▙ +${c2}▜██████████▛ ${c1}▟███████████▛ +${c2} ▟███▛ ${c1}▟▙ ▟███▛ +${c2} ▟███▛ ${c1}▟██▙ ▟███▛ +${c2} ▟███▛ ${c1}▜███▙ ▝▀▀▀▀ +${c2} ▜██▛ ${c1}▜███▙ ${c2}▜██████████████████▛ +${c2} ▜▛ ${c1}▟████▙ ${c2}▜████████████████▛ +${c1} ▟██████▙ ${c2}▜███▙ +${c1} ▟███▛▜███▙ ${c2}▜███▙ +${c1} ▟███▛ ▜███▙ ${c2}▜███▙ +${c1} ▝▀▀▀ ▀▀▀▀▘ ${c2}▀▀▀▘ +EOF + ;; + + "Nurunner"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} ,xc + ;00cxXl + ;K0, .xNo. + :KO' .lXx. + cXk. ;xl cXk. + cXk. ;k:.,xo. cXk. + .lXx. :x::0MNl,dd. :KO, + .xNx. cx;:KMMMMMNo'dx. ;KK; + .dNl. cd,cXMMMMMMMMMWd,ox' 'OK: +;WK. 'K,.KMMMMMMMMMMMMMWc.Kx lMO + 'OK: 'dl'xWMMMMMMMMMM0::x: 'OK: + .kNo .xo'xWMMMMMM0;:O: ;KK; + .dXd. .do,oNMMO;ck: ;00, + oNd. .dx,;'cO; ;K0, + oNx. okk; ;K0, + lXx. :KO' + cKk' cXk. + ;00:lXx. + ,kd. +EOF + ;; + + "NuTyX"*) + set_colors 4 1 + read -rd '' ascii_data <<'EOF' +${c1} . + . + ... + ... + .... .........--. + ..-++-----....--++++++---. + .-++++++-. .-++++++++++++-----.. + .--... .++..-+++--.....-++++++++++--.. + . .-+-. .**- .... ..-+----.. + .+++. .*+. + -++-----. + .+++++- ++. .*+. .....-+++-----. + -+++-++. .+. .-+***++***++--++++. . + -+-. -- -. -*- ...... ..--. +.-. .+- . -+. +. .+- +. + -- -- + -+----. .- + -++-.+. . + .++. -- + +. ----. + . .+. .. + - . + . +EOF + ;; + + "OBRevenge"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} __ __ + _@@@@ @@@g_ + _@@@@@@ @@@@@@ + _@@@@@@M W@@@@@@_ + j@@@@P ^W@@@@ + @@@@L____ _____Q@@@@ +Q@@@@@@@@@@j@@@@@@@@@@ +@@@@@ T@j@ T@@@@@ +@@@@@ ___Q@J@ _@@@@@ +@@@@@fMMM@@j@jggg@@@@@@ +@@@@@ j@j@^MW@P @@@@ +Q@@@@@ggg@@f@ @@@@@@L +^@@@@WWMMP ^ Q@@@@ + @@@@@_ _@@@@l + W@@@@@g_____g@@@@@P + @@@@@@@@@@@@@@@@l + ^W@@@@@@@@@@@P + ^TMMMMTll +EOF + ;; + + "openbsd_small") + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} _____ + \\- -/ + \\_/ \\ + | ${c2}O O${c1} | + |_ < ) 3 ) + / \\ / + /-_____-\\ +EOF + ;; + + "OpenBSD"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c3} _ + (_) +${c1} | . +${c1} . |L /| . ${c3} _ +${c1} _ . |\ _| \--+._/| . ${c3}(_) +${c1} / ||\| Y J ) / |/| ./ + J |)'( | ` F`.'/ ${c3} _ +${c1} -<| F __ .-< ${c3}(_) +${c1} | / .-'${c3}. ${c1}`. /${c3}-. ${c1}L___ + J \\ < ${c3}\ ${c1} | | ${c5}O${c3}\\${c1}|.-' ${c3} _ +${c1} _J \\ .- \\${c3}/ ${c5}O ${c3}| ${c1}| \\ |${c1}F ${c3}(_) +${c1} '-F -<_. \\ .-' `-' L__ +__J _ _. >-' ${c1})${c4}._. ${c1}|-' +${c1} `-|.' /_. ${c4}\_| ${c1} F + /.- . _.< + /' /.' .' `\\ + /L /' |/ _.-'-\\ + /'J ___.---'\| + |\ .--' V | `. ` + |/`. `-. `._) + / .-.\\ + \\ ( `\\ + `.\\ +EOF + ;; + + "openEuler"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} + (##### + (((######## ##### + ((( ########## __...__ + (((((((( ####### /((((((###\ + ((((((((((( ....... \(((((####/ + (((((( ((((######### ******* + %((((((# ((######## + /////((((( ### +/////(((((((# (((& + ((((((((((((( + (((((((((((( + ((((((((( ((((((### + /((((((###### + //((((((###### + /((((((##### + *********/ +EOF + ;; + + "OpenIndiana"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .sy/ + .yh+ + + ${c1}-+syyyo+- ${c2} /+. + ${c1}+ddo/---/sdh/ ${c2} ym- + ${c1}`hm+ `sms${c2} ym-```````.-. + ${c1}sm+ sm/ ${c2} ym- +s + ${c1}hm. /mo ${c2} ym- /h + ${c1}omo ym: ${c2} ym- `os` + ${c1}smo` .ym+ ${c2} ym- .os- + `` ${c1}:ymy+///oyms- ${c2} ym- .+s+. + ..` ${c1}`:+oo+/-` ${c2} -//oyo- + -:` .:oys/. ++- `./oyys/. +h+` `.-:+oyyyo/-` +`/ossssysso+/-.` +EOF + ;; + + "openmamba"*) + set_colors 7 2 + read -rd '' ascii_data <<'EOF' +${c1} ````` + .-/+ooooooooo+/:-` + ./ooooooooooooooooooo+:. + -+oooooooooooooooooooooooo+- + .+ooooooooo+/:---::/+ooooooooo+. + :oooooooo/-` `-/oo${c2}s´${c1}oooo.${c2}s´${c1} + :ooooooo/` `${c2}sNds${c1}ooo${c2}sNds${c1} + -ooooooo- ${c2}:dmy${c1}ooo${c2}:dmy${c1} + +oooooo: :oooooo- +.ooooooo .://:` +:oooooo+ ./+o+:` +-ooooooo` `oooooo+ +`ooooooo: /oooooo+ + -ooooooo: :ooooooo. + :ooooooo+. .+ooooooo: + :oooooooo+-` `-+oooooooo: + .+ooooooooo+/::::://oooooooooo+. + -+oooooooooooooooooooooooo+- + .:ooooooooooooooooooo+:. + `-:/ooooooooo+/:.` + `````` +EOF + ;; + + "OpenMandriva"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} `````` + `-:/+++++++//:-.` + .:+++oooo+/:.`` `` + `:+ooooooo+:. `-:/++++++/:.` + -+oooooooo:` `-++o+/::::://+o+/- + `/ooooooooo- -+oo/.` `-/oo+. + `+ooooooooo. :os/` .+so: + +sssssssss/ :ss/ `+ss- + :ssssssssss` sss` .sso + ossssssssss `yyo sys +`sssssssssss` `yys `yys +`sssssssssss: +yy/ +yy: + oyyyyyyyyyys. `oyy/` `+yy+ + :yyyyyyyyyyyo. `+yhs:. `./shy/ + oyyyyyyyyyyys:` .oyhys+:----/+syhy+. ` + `syyyyyyyyyyyyo-` .:osyhhhhhyys+:``.:` + `oyyyyyyyyyyyyys+-`` `.----.```./oo. + /yhhhhhhhhhhhhhhyso+//://+osyhy/` + `/yhhhhhhhhhhhhhhhhhhhhhhhhy/` + `:oyhhhhhhhhhhhhhhhhhhyo:` + .:+syhhhhhhhhys+:-` + ``....`` +EOF + ;; + + "OpenStage"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} /(/ + .(((((((, + /(((((((((/ + .(((((/,/(((((, + *(((((* ,(((((/ + (((((* .*/(( + *((((/ (//(/* + /((((* ((((((((((, + . /((((* (((((((((((((. + ((. *((((/ ,(((((((( + ,(((/ (((((/ ** ,((((((* + /(((((. .(((((/ //(((* *(((((/ + .(((((, ((/ .(((((/. .(((((, + /((((* ,(((((((/ ,((((( + /(((((((((((((((((((/. /(((((((((/ + /(((((((((((((((((, /(((((((((((/ + */(((((//*. */((/(/(/* +EOF + ;; + + "OpenWrt"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} _______ +| |.-----.-----.-----. +| - || _ | -__| | +|_______|| __|_____|__|__| + |__| + ________ __ +| | | |.----.| |_ +| | | || _|| _| +|________||__| |____| +EOF + ;; + + "Open Source Media Center"* | "osmc") + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -+shdmNNNNmdhs+- + .+hMNho/:..``..:/ohNMh+. + :hMdo. .odMh: + -dMy- -yMd- + sMd- -dMs + hMy +. .+ yMh + yMy dMs. .sMd yMy +:Mm dMNMs` `sMNMd `mM: +yM+ dM//mNs``sNm//Md +My +mM- dM: +NNNN+ :Md -Mm +mM- dM: `oNN+ :Md -Mm +yM+ dM/+NNo` :Md +My +:Mm` dMMNs` :Md `mM: + yMy dMs` -ms yMy + hMy +. yMh + sMd- -dMs + -dMy- -yMd- + :hMdo. .odMh: + .+hMNho/:..``..:/ohNMh+. + -+shdmNNNNmdhs+- +EOF + ;; + + "Oracle"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + `-/+++++++++++++++++/-.` + `/syyyyyyyyyyyyyyyyyyyyyyys/. + :yyyyo/-...............-/oyyyy/ + /yyys- .oyyy+ +.yyyy` `syyy- +:yyyo /yyy/ +.yyyy` `syyy- + /yyys. .oyyyo + /yyyyo:-...............-:oyyyy/` + `/syyyyyyyyyyyyyyyyyyyyyyys+. + `.:/+ooooooooooooooo+/:.` +EOF + ;; + + "OS Elbrus"*) + set_colors 4 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ + ██ ██ + ██ ███████ ███████ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ███████ ███████ + ██ ██ ██ + ██ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██ + ██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ + ██ ██ + ███████████████████████████ +EOF + ;; + + "PacBSD"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} :+sMs. + `:ddNMd- -o--` + -sMMMMh: `+N+`` + yMMMMMs` .....-/-... `mNh/ + yMMMMMmh+-`:sdmmmmmmMmmmmddy+-``./ddNMMm + yNMMNMMMMNdyyNNMMMMMMMMMMMMMMMhyshNmMMMm + :yMMMMMMMMMNdooNMMMMMMMMMMMMMMMMNmy:mMMd + +MMMMMMMMMmy:sNMMMMMMMMMMMMMMMMMMMmshs- + :hNMMMMMMN+-+MMMMMMMMMMMMMMMMMMMMMMMs. + .omysmNNhy/+yNMMMMMMMMMMNMMMMMMMMMNdNNy- + /hMM:::::/hNMMMMMMMMMMMm/-yNMMMMMMN.mMNh` +.hMMMMdhdMMMMMMMMMMMMMMmo `sMMMMMMN mMMm- +:dMMMMMMMMMMMMMMMMMMMMMdo+ oMMMMMMN`smMNo` +/dMMMMMMMMMMMMMMMMMMMMMNd/` :yMMMMMN:-hMMM. +:dMMMMMMMMMMMMMMMMMMMMMNh` oMMMMMMNo/dMNN` +:hMMMMMMMMMMMMMMMMMMMMMMNs--sMMMMMMMNNmy++` + sNMMMMMMMMMMMMMMMMMMMMMMMmmNMMMMMMNho::o. + :yMMMMMMMMMMMMMNho+sydNNNNNNNmysso/` -// + /dMMMMMMMMMMMMMs- ````````..`` + .oMMMMMMMMMMMMNs` ./y:` + +dNMMNMMMMMMMmy` ``./ys. + `/hMMMMMMMMMMMNo-`` `.+yy+-` + `-/hmNMNMMMMMMmmddddhhy/-` + `-+oooyMMMdsoo+/:. +EOF + ;; + + "parabola_small"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} __ __ __ _ +.`_//_//_/ / `. + / .` + / .` + /.` + /` +EOF + ;; + + "Parabola"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-. `. + `.` `:++. `-+o+. + `` `:+/. `:+/. `-+oooo+ + ``-::-.:+/. `:+/. `-+oooooo+ + `.-:///- ..` .-. `-+oooooooo- + `..-..` `+ooooooooo: +`` :oooooooo/ + `ooooooo: + `oooooo: + -oooo+. + +ooo/` + -ooo- + `+o/. + /+- + //` + -. +EOF + ;; + + "Pardus"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} .smNdy+- `.:/osyyso+:.` -+ydmNs. +/Md- -/ymMdmNNdhso/::/oshdNNmdMmy/. :dM/ +mN. oMdyy- -y `-dMo .Nm +.mN+` sMy hN+ -: yMs `+Nm. + `yMMddMs.dy `+` sMddMMy` + +MMMo .` . oMMM+ + `NM/ `````.` `.````` +MN` + yM+ `.-:yhomy ymohy:-.` +My + yM: yo oy :My + +Ms .N` `N. +h sM+ + `MN - -::::::- : :o:+`NM` + yM/ sh -dMMMMd- ho +y+My + .dNhsohMh-//: /mm/ ://-yMyoshNd` + `-ommNMm+:/. oo ./:+mMNmmo:` + `/o+.-somNh- :yy: -hNmos-.+o/` + ./` .s/`s+sMdd+``+ddMs+s`/s. `/. + : -y. -hNmddmNy. .y- : + -+ `..` +- +EOF + ;; + + "Parrot"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `:oho/-` +`mMMMMMMMMMMMNmmdhy- + dMMMMMMMMMMMMMMMMMMs` + +MMsohNMMMMMMMMMMMMMm/ + .My .+dMMMMMMMMMMMMMh. + + :NMMMMMMMMMMMMNo + `yMMMMMMMMMMMMMm: + /NMMMMMMMMMMMMMy` + .hMMMMMMMMMMMMMN+ + ``-NMMMMMMMMMd- + /MMMMMMMMMMMs` + mMMMMMMMsyNMN/ + +MMMMMMMo :sNh. + `NMMMMMMm -o/ + oMMMMMMM. + `NMMMMMM+ + +MMd/NMh + mMm -mN` + /MM `h: + dM` . + :M- + d: + -+ + - +EOF + ;; + + "Parsix"*) + set_colors 3 1 7 8 + read -rd '' ascii_data <<'EOF' + ${c2}-/+/:. + ${c2}.syssssys. + ${c1}.--. ${c2}ssssssssso${c1} ..--. + :++++++: ${c2}+ssssssss+${c1} ./++/+++: + /+++++++++.${c2}.yssooooy`${c1}-+///////o- + /++++++++++.${c2}+soooos:${c1}:+////////+- + :+++++////o-${c2}oooooo-${c1}+/////////- + `-/++//++-${c4}.-----.-${c1}:+/////:- + ${c3}-://::--${c1}-:/:${c4}.--.````.--.${c1}:::-${c3}--::::::. +${c3}-/:::::::://:${c4}.:-` `-:${c3}`:/:::::::--/- +${c3}/::::::::::/-${c4}--. .-.${c3}-/://///::::/ +${c3}-/:::::::::/:${c4}`:-. .-:${c3}`:///////////- + `${c3}-::::--${c1}.-://.${c4}---....---${c1}`:+/:-${c3}--::::-` + ${c1}-/+///+o/-${c4}.----.${c1}.:oo+++o+. + ${c1}-+/////+++o:${c2}syyyyy.${c1}o+++++++++: + ${c1}.+////+++++-${c2}+sssssy+${c1}.++++++++++\ + ${c1}.+:/++++++.${c2}.yssssssy-${c1}`+++++++++: + ${c1}:/+++++- ${c2}+sssssssss ${c1}-++++++- + ${c1}`--` ${c2}+sssssssso ${c1}`--` + ${c2}+sssssy+` + ${c2}`.::-` +EOF + ;; + + "PCBSD"* | "TrueOS"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .. + s. + +y + yN + -MN `. + :NMs `m + .yMMm` `No + `-/+++sdMMMNs+-`+Ms + `:oo+-` .yMMMMy` `-+oNMh + -oo- +NMMMM/ oMMh- + .s+` ` oMMMMM/ - oMMMhy. + +s`- :: :MMMMMd -o `mMMMy`s+ + y+ h .Ny+oNMMMMMN/ sh+NMMMMo +y + s+ .ds -NMMMMMMMMMMNdhdNMMMMMMh` +s +-h .NM` `hMMMMMMMMMMMMMMNMMNy: h- +y- hMN` hMMmMMMMMMMMMNsdMNs. -y +m` mMMy` oMMNoNMMMMMMo` sMMMo `m +m` :NMMMdyydMMMMo+MdMMMs sMMMd` `m +h- `+ymMMMMMMMM--M+hMMN/ +MMMMy -h +:y `.sMMMMM/ oMM+.yMMNddNMMMMMm y: + y: `s dMMN- .MMMM/ :MMMMMMMMMMh :y + `h: `mdmMMM/ yMMMMs sMMMMMMMMN- :h` + so -NMMMN /mmd+ `dMMMMMMMm- os + :y: `yMMM` `+NMMMMMMNo`:y: + /s+`.omy /NMMMMMNh/.+s: + .+oo:-. /mdhs+::oo+. + -/o+++++++++++/- +EOF + ;; + + "PCLinuxOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' + ${c1}mhhhyyyyhhhdN + dyssyhhhhhhhhhhhssyhN + Nysyhhyo/:-.....-/oyhhhssd + Nsshhy+. `/shhysm + dohhy/ -shhsy + dohhs` /hhys +N+hho ${c2}+ssssss+- .+syhys+ ${c1}/hhsy +ohhh` ${c2}ymmo++hmm+`smmy/::+y` ${c1}shh+ ++hho ${c2}ymm- /mmy+mms ${c1}:hhod +/hh+ ${c2}ymmhhdmmh.smm/ ${c1}.hhsh ++hhs ${c2}ymm+::-` /mmy` ` ${c1}/hh+m +yyhh- ${c2}ymm- /dmdyosyd` ${c1}`yhh+ + ohhy` ${c2}://` -/+++/- ${c1}ohhom + N+hhy- `shhoh + sshho. `+hhyom + dsyhhs/. `:ohhhoy + dysyhhhso///://+syhhhssh + dhyssyhhhhhhyssyyhN + mddhdhdmN +EOF + ;; + + "Pengwin"*) + set_colors 5 5 13 + read -rd '' ascii_data <<'EOF' +${c3} ...` +${c3} `-///:-` +${c3} .+${c2}ssys${c3}/ +${c3} +${c2}yyyyy${c3}o ${c2} +${c2} -yyyyyy: +${c2} `.:/+ooo+/:` -yyyyyy+ +${c2} `:oyyyyyys+:-.`syyyyyy: +${c2} .syyyyyyo-` .oyyyyyyo +${c2} `syyyyyy `-+yyyyyyy/` +${c2} /yyyyyy+ -/osyyyyyyo/. +${c2} +yyyyyy- `.-:::-.` +${c2} .yyyyyy- +${c3} :${c2}yyyyy${c3}o +${c3} .+${c2}ooo${c3}+ +${c3} `.::/:. +EOF + ;; + + "Peppermint"*) + set_colors 1 15 3 + read -rd '' ascii_data <<'EOF' +${c1} PPPPPPPPPPPPPP +${c1} PPPP${c2}MMMMMMM${c1}PPPPPPPPPPP +${c1} PPPP${c2}MMMMMMMMMM${c1}PPPPPPPP${c2}MM${c1}PP +${c1} PPPPPPPP${c2}MMMMMMM${c1}PPPPPPPP${c2}MMMMM${c1}PP +${c1} PPPPPPPPPPPP${c2}MMMMMM${c1}PPPPPPP${c2}MMMMMMM${c1}PP +${c1} PPPPPPPPPPPP${c2}MMMMMMM${c1}PPPP${c2}M${c1}P${c2}MMMMMMMMM${c1}PP +${c1} PP${c2}MMMM${c1}PPPPPPPPPP${c2}MMM${c1}PPPPP${c2}MMMMMMM${c1}P${c2}MM${c1}PPPP +${c1} P${c2}MMMMMMMMMM${c1}PPPPPP${c2}MM${c1}PPPPP${c2}MMMMMM${c1}PPPPPPPP +${c1} P${c2}MMMMMMMMMMMM${c1}PPPPP${c2}MM${c1}PP${c2}M${c1}P${c2}MM${c1}P${c2}MM${c1}PPPPPPPPPPP +${c1} P${c2}MMMMMMMMMMMMMMMM${c1}PP${c2}M${c1}P${c2}MMM${c1}PPPPPPPPPPPPPPPP +${c1} P${c2}MMM${c1}PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP${c2}MMMMM${c1}P +${c1} PPPPPPPPPPPPPPPP${c2}MMM${c1}P${c2}M${c1}P${c2}MMMMMMMMMMMMMMMM${c1}PP +${c1} PPPPPPPPPPP${c2}MM${c1}P${c2}MM${c1}PPPP${c2}MM${c1}PPPPP${c2}MMMMMMMMMMM${c1}PP +${c1} PPPPPPPP${c2}MMMMMM${c1}PPPPP${c2}MM${c1}PPPPPP${c2}MMMMMMMMM${c1}PP +${c1} PPPP${c2}MM${c1}P${c2}MMMMMMM${c1}PPPPPP${c2}MM${c1}PPPPPPPPPP${c2}MMMM${c1}PP +${c1} PP${c2}MMMMMMMMM${c1}P${c2}M${c1}PPPP${c2}MMMMMM${c1}PPPPPPPPPPPPP +${c1} PP${c2}MMMMMMM${c1}PPPPPPP${c2}MMMMMM${c1}PPPPPPPPPPPP +${c1} PP${c2}MMMM${c1}PPPPPPPPP${c2}MMMMMMM${c1}PPPPPPPP +${c1} PP${c2}MM${c1}PPPPPPPP${c2}MMMMMMMMMM${c1}PPPP +${c1} PPPPPPPPPP${c2}MMMMMMMM${c1}PPPP +${c1} PPPPPPPPPPPPPP +EOF + ;; + + "popos_small"* | "pop_os_small"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1}______ +\\ _ \\ __ + \\ \\ \\ \\ / / + \\ \\_\\ \\ / / + \\ ___\\ /_/ + \\ \\ _ + __\\_\\__(_)_ + (___________)` +EOF + ;; + + "Pop!_OS"* | "popos"* | "pop_os"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} ///////////// + ///////////////////// + ///////${c2}*767${c1}//////////////// + //////${c2}7676767676*${c1}////////////// + /////${c2}76767${c1}//${c2}7676767${c1}////////////// + /////${c2}767676${c1}///${c2}*76767${c1}/////////////// + ///////${c2}767676${c1}///${c2}76767${c1}.///${c2}7676*${c1}/////// +/////////${c2}767676${c1}//${c2}76767${c1}///${c2}767676${c1}//////// +//////////${c2}76767676767${c1}////${c2}76767${c1}///////// +///////////${c2}76767676${c1}//////${c2}7676${c1}////////// +////////////,${c2}7676${c1},///////${c2}767${c1}/////////// +/////////////*${c2}7676${c1}///////${c2}76${c1}//////////// +///////////////${c2}7676${c1}//////////////////// + ///////////////${c2}7676${c1}///${c2}767${c1}//////////// + //////////////////////${c2}'${c1}//////////// + //////${c2}.7676767676767676767,${c1}////// + /////${c2}767676767676767676767${c1}///// + /////////////////////////// + ///////////////////// + ///////////// +EOF + ;; + + "Porteus"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-:::-.` + -+ydmNNNNNNNmdy+- + .+dNmdhs+//////+shdmdo. + .smmy+-` ./sdy: + `omdo. `.-/+osssso+/-` `+dy. + `yms. `:shmNmdhsoo++osyyo-``oh. + hm/ .odNmds/.` ``.....:::-+s +/m: `+dNmy:` `./oyhhhhyyooo++so +ys `yNmy- .+hmmho:-.` ``` +s: yNm+` .smNd+. +`` /Nm: +dNd+` + yN+ `smNy. + dm oNNy` + hy -mNm. + +y oNNo + `y` sNN: + `: +NN: + ` .mNo + /mm` + /my` + .sy` + .+: + ` +EOF + ;; + + "postmarketos_small") + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / \\ + \\__ \\ + /\\__ \\ _\\ + / / \\/ __ + / / ____/ \\ + / \\ \\ \\ +/_____/ /________\\ +EOF + ;; + + "PostMarketOS"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / \\ + / \\ + / \\ + / \\ + \\ \\ + /\\ \\____ \\ + / \\____ \\ \\ + / / \\ \\ + / / \\ ___\\ + / / \\ / ____ + / / \\/ / \\ + / / __________/ \\ + / \\ \\ \\ + / \\ \\ \\ + / / / \\ +/___________/ /____________________\\ +EOF + ;; + + "Proxmox"*) + set_colors 7 202 + read -rd '' ascii_data <<'EOF' +${c1} .://:` `://:. + `hMMMMMMd/ /dMMMMMMh` + `sMMMMMMMd: :mMMMMMMMs` +${c2}`-/+oo+/:${c1}`.yMMMMMMMh- -hMMMMMMMy.`${c2}:/+oo+/-` +`:oooooooo/${c1}`-hMMMMMMMyyMMMMMMMh-`${c2}/oooooooo:` + `/oooooooo:${c1}`:mMMMMMMMMMMMMm:`${c2}:oooooooo/` + ./ooooooo+-${c1} +NMMMMMMMMN+ ${c2}-+ooooooo/. + .+ooooooo+-${c1}`oNMMMMNo`${c2}-+ooooooo+. + -+ooooooo/.${c1}`sMMs`${c2}./ooooooo+- + :oooooooo/${c1}`..`${c2}/oooooooo: + :oooooooo/`${c1}..${c2}`/oooooooo: + -+ooooooo/.`${c1}sMMs${c2}`./ooooooo+- + .+ooooooo+-`${c1}oNMMMMNo${c2}`-+ooooooo+. + ./ooooooo+-${c1} +NMMMMMMMMN+ ${c2}-+ooooooo/. + `/oooooooo:`${c1}:mMMMMMMMMMMMMm:${c2}`:oooooooo/` +`:oooooooo/`${c1}-hMMMMMMMyyMMMMMMMh-${c2}`/oooooooo:` +`-/+oo+/:`${c1}.yMMMMMMMh- -hMMMMMMMy.${c2}`:/+oo+/-` +${c1} `sMMMMMMMm: :dMMMMMMMs` + `hMMMMMMd/ /dMMMMMMh` + `://:` `://:` +EOF + ;; + + "Puppy"* | "Quirky Werewolf"* | "Precise Puppy"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/osyyyysosyhhhhhyys+- + -ohmNNmh+/hMMMMMMMMNNNNd+dMMMMNM+ + yMMMMNNmmddo/NMMMNNNNNNNNNo+NNNNNy +.NNNNNNmmmddds:MMNNNNNNNNNNNh:mNNN/ +-NNNdyyyhdmmmd`dNNNNNmmmmNNmdd/os/ +.Nm+shddyooo+/smNNNNmmmmNh. :mmd. + NNNNy:` ./hmmmmmmmNNNN: hNMh + NMN- -++- +NNNNNNNNNNm+..-sMMMM- +.MMo oNNNNo hNNNNNNNNmhdNNNMMMMM+ +.MMs /NNNN/ dNmhs+:-` yMMMMMMMM+ + mMM+ .. `sNN+. hMMMMhhMMM- + +MMMmo:...:sNMMMMMms:` hMMMMm.hMMy + yMMMMMMMMMMMNdMMMMMM::/+o+//dMMd` + sMMMMMMMMMMN+:oyyo:sMMMNNMMMNy` + :mMMMMMMMMMMMmddNMMMMMMMMmh/ + /dMMMMMMMMMMMMMMMMMMNdy/` + .+hNMMMMMMMMMNmdhs/. + .:/+ooo+/:-. +EOF + ;; + + "pureos_small"*) + set_colors 2 7 7 + read -rd '' ascii_data <<'EOF' +${c1} _____________ +| _________ | +| | | | +| | | | +| |_________| | +|_____________| +EOF + ;; + + "PureOS"*) + set_colors 2 7 7 + read -rd '' ascii_data <<'EOF' +${c1}dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +dNm//////////////////////////////////mNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNm//////////////////////////////////mNd +dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +EOF + ;; + + "Qubes"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} `..--..` + `.----------.` + `..----------------..` + `.------------------------.`` + `..-------------....-------------..` +.::----------..`` ``..----------:+: +:////:----..` `..---:/ossso +:///////:` `/osssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:////////-` .:sssssssso +:///////////-.` `-/osssssssssso +`//////////////:-```.:+ssssssssssssso- + .-://////////////sssssssssssssso/-` + `.:///////////sssssssssssssso:. + .-:///////ssssssssssssssssss/` + `.:////ssss+/+ssssssssssss. + `--//- `-/osssso/. +EOF + ;; + + "Quibian"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::::--.` + `.-:::-..`` ``..-::-.` + .::::-` .${c2}+${c1}:`` `.-::.` + .::::.` -::::::-` `.::. + `-:::-` -:::::::::--..`` .::` + `::::- .${c2}oy${c1}:::::::---.```.: `::` + -:::: `.-:::::::::::-.``` `:: +.::::.`-:::::::::::::. `:. +-::::.::::::::::::::: -: +::::::::::::::::::::` `: +:::::::::::::::::::- `: +::::::::::::::::::: -- +.:::::::::::::::::` `:` +`::::::::::::::::: -` + .:::::::::::::::- -` + `::::::::::::::- `.` + .::::::::::::- `` + `.--:::::-. +EOF + ;; + + "Radix"*) + set_colors 1 2 + read -rd '' ascii_data <<'EOF' +${c2} .:oyhdmNo + `/yhyoosdms` + -o+/ohmmho- + ..`.:/:-` + `.--:::-.``${c1} + .+ydNMMMMMMNmhs:` +`omMMMMMMMMMMMMMMNh- +oNMMMNmddhhyyhhhddmy. +mMMMMNmmddhhysoo+/:-` +yMMMMMMMMMMMMMMMMNNh. +-dmmmmmNNMMMMMMMMMMs` + -+oossyhmMMMMMMMMd- + `sNMMMMMMMMMMMMMm: + `yMMMMMMNmdhhhh: + `sNMMMMMNmmho. + `+mMMMMMMMy. + .yNMMMm+` + `:yd+. +EOF + ;; + + "Raspbian_small"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} .. ,. + :oo: .:oo: + 'o\\o o/o: +${c2} :: . :: . :: +:: ::: ::: :: +:' '',.'' ': + ::: :::: ::: + ':, '' ,:' + ' ~::~ ' +EOF + ;; + + "Raspbian"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} `.::///+:/-. --///+//-:`` + `+oooooooooooo: `+oooooooooooo: + /oooo++//ooooo: ooooo+//+ooooo. + `+ooooooo:-:oo- +o+::/ooooooo: + `:oooooooo+`` `.oooooooo+- + `:++ooo/. :+ooo+/.` + ${c2}...` `.----.` ``.. + .::::-``:::::::::.`-:::-` + -:::-` .:::::::-` `-:::- + `::. `.--.` `` `.---.``.::` + .::::::::` -::::::::` ` + .::` .:::::::::- `::::::::::``::. +-:::` ::::::::::. ::::::::::.`:::- +:::: -::::::::. `-:::::::: :::: +-::- .-:::-.``....``.-::-. -::- + .. `` .::::::::. `..`.. + -:::-` -::::::::::` .:::::` + :::::::` -::::::::::` :::::::. + .::::::: -::::::::. :::::::: + `-:::::` ..--.` ::::::. + `...` `...--..` `...` + .:::::::::: + `.-::::-` +EOF + ;; + + "Reborn OS"* | "Reborn"*) + set_colors 2 2 8 + read -rd '' ascii_data <<'EOF' +${c3} + mMMMMMMMMM MMMMMMMMMm + NM MN + MM ${c1}dddddddd dddddddd ${c3}MN + mM ${c1}dd dd ${c3}MM + ${c1}dd hhhhhh hhhhh dd + ${c3}mM ${c1}hh hh ${c3}Mm + NM ${c1}hd ${c3}mMMMMMMd ${c1}dh ${c3}MN + NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN +NM ${c1}dd hh ${c3}mMMMMMMMMMMm ${c1}hh dd ${c3}MN + NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN + NM ${c1}hd ${c3}mMMMMMMm ${c1}dh ${c3}MN + mM ${c1}hh hh ${c3}Mm + ${c1}dd hhhhhh hhhhhh dd + ${c3}MM ${c1}dd dd ${c3}MM + MM ${c1}dddddddd dddddddd ${c3}MN + NM MN + mMMMMMMMMM MMMMMMMMMm +EOF + ;; + + "Red Star"* | "Redstar"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .. + .oK0l + :0KKKKd. + .xKO0KKKKd + ,Od' .d0000l + .c;. .'''... ..'. +.,:cloddxxxkkkkOOOOkkkkkkkkxxxxxxxxxkkkx: +;kOOOOOOOkxOkc'...',;;;;,,,'',;;:cllc:,. + .okkkkd,.lko .......',;:cllc:;,,'''''. + .cdo. :xd' cd:. ..';'',,,'',,;;;,'. + . .ddl.;doooc'..;oc;'..';::;,'. + coo;.oooolllllllcccc:'. . + .ool''lllllccccccc:::::;. + ;lll. .':cccc:::::::;;;;' + :lcc:'',..';::::;;;;;;;,,. + :cccc::::;...';;;;;,,,,,,. + ,::::::;;;,'. ..',,,,'''. + ........ ...... +EOF + ;; + + "Redcore"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} RRRRRRRRR + RRRRRRRRRRRRR + RRRRRRRRRR RRRRR + RRRRRRRRRRRRRRRRRRRRRRRRRRR + RRRRRRR RRR RRR RRRRRRRR +RRRRR RR RRRRRRRRR +RRRR RR RRRRRRRR RR RRRRRR +RRRR R RRRRRRRRRRRRRR RR RRRRR +RRRR R RRRRRRRRRRRRRRRRRR R RRRRR +RRRR RRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR RRRR + RR RRRRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRR RR + R RRRR RR +EOF + ;; + + "redhat_old" | "rhel_old"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} `.-..........` + `////////::.`-/. + -: ....-////////. + //:-::///////////` + `--::: `-://////////////: + //////- ``.-:///////// .` + `://////:-.` :///////::///:` + .-/////////:---/////////////: + .-://////////////////////. +${c2} yMN+`.-${c1}::///////////////-` +${c2} .-`:NMMNMs` `..-------..` + MN+/mMMMMMhoooyysshsss +MMM MMMMMMMMMMMMMMyyddMMM+ + MMMM MMMMMMMMMMMMMNdyNMMh` hyhMMM + MMMMMMMMMMMMMMMMyoNNNMMM+. MMMMMMMM + MMNMMMNNMMMMMNM+ mhsMNyyyyMNMMMMsMM +EOF + ;; + + "Redhat"* | "Red Hat"* | "rhel"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} .MMM..:MMMMMMM + MMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMM + ,MMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMM + .MMMM' MMMMMMMMMMMMMMMMMMMMMM + MMMMMM `MMMMMMMMMMMMMMMMMMMM. +MMMMMMMM MMMMMMMMMMMMMMMMMM . +MMMMMMMMM. `MMMMMMMMMMMMM' MM. +MMMMMMMMMMM. MMMM +`MMMMMMMMMMMMM. ,MMMMM. + `MMMMMMMMMMMMMMMMM. ,MMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + `MMMMMMMMMMMMMMMMMMMMMMMM: + ``MMMMMMMMMMMMMMMMM' +EOF + ;; + + "Refracted Devuan"* | "Refracted_Devuan"*) + set_colors 8 7 + read -rd '' ascii_data <<'EOF' +${c2} A + VW + VVW\\ + .yWWW\\ + ,;,,u,;yy;;v;uyyyyyyy ,WWWWW^ + *WWWWWWWWWWWWWWWW/ $VWWWWw , + ^*%WWWWWWVWWX $WWWW** ,yy + , "**WWW/' **' ,yy/WWW*` + &WWWWwy `*` <,ywWW%VWWW* + yWWWWWWWWWW* ., "**WW%W + ,&WWWWWM*"` ,y/ &WWWww ^* + XWWX*^ ,yWWWW09 .WWWWWWWWwy, + *` &WWWWWM WWWWWWWWWWWWWww, + (WWWWW` /#####WWW*********** + ^WWWW + VWW + Wh. + V/ +EOF + ;; + + "Regata"*) + set_colors 7 1 4 5 3 2 + read -rd '' ascii_data <<'EOF' +${c1} ddhso+++++osydd + dho/.`hh${c2}.:/+/:.${c1}hhh`:+yd + do-hhhhhh${c2}/sssssss+`${c1}hhhhh./yd + h/`hhhhhhh${c2}-sssssssss:${c1}hhhhhhhh-yd + do`hhhhhhhhh${c2}`ossssssso.${c1}hhhhhhhhhh/d + d/hhhhhhhhhhhh${c2}`/ossso/.${c1}hhhhhhhhhhhh.h + /hhhhhhhhhhhh${c3}`-/osyso/-`${c1}hhhhhhhhhhhh.h +shh${c4}-/ooo+-${c1}hhh${c3}:syyso+osyys/`${c1}hhh${c5}`+oo`${c1}hhh/ +h${c4}`ohhhhhhho`${c3}+yyo.${c1}hhhhh${c3}.+yyo`${c5}.sssssss.${c1}h`h +s${c4}:hhhhhhhhho${c3}yys`${c1}hhhhhhh${c3}.oyy/${c5}ossssssso-${c1}hs +s${c4}.yhhhhhhhy/${c3}yys`${c1}hhhhhhh${c3}.oyy/${c5}ossssssso-${c1}hs +hh${c4}./syyys+.${c1} ${c3}+yy+.${c1}hhhhh${c3}.+yyo`${c5}.ossssso/${c1}h`h +shhh${c4}``.`${c1}hhh${c3}`/syyso++oyys/`${c1}hhh${c5}`+++-`${c1}hh:h +d/hhhhhhhhhhhh${c3}`-/osyso+-`${c1}hhhhhhhhhhhh.h + d/hhhhhhhhhhhh${c6}`/ossso/.${c1}hhhhhhhhhhhh.h + do`hhhhhhhhh${c6}`ossssssso.${c1}hhhhhhhhhh:h + h/`hhhhhhh${c6}-sssssssss:${c1}hhhhhhhh-yd + h+.hhhhhh${c6}+sssssss+${c1}hhhhhh`/yd + dho:.hhh${c6}.:+++/.${c1}hhh`-+yd + ddhso+++++osyhd +EOF + ;; + + "Regolith"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} + ``....``` + `.:/++++++/::-.` + -/+++++++:.` + -++++++++:` + `/++++++++- + `/++++++++. -/+/ + /++++++++/ `` .:+++:. + -+++++++++/ ./++++:+++/-` + :+++++++++/ `+++++++/-` + :++++++++++` .-/+++++++` + `:++++++++++/``.-/++++:-:::-` ` + `:+++++++++++++++++/:.` ./` +:++/-:+++++++++/:-.. -/+. ++++++++++/::-...:/+++/-..````..-/+++. +`......``.::/+++++++++++++++++++++/. + -/+++++++++++++++++++++/. + .:/+++++++++++++++/-` + `.-:://////:-. +EOF + ;; + + "Rosa"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ROSAROSAROSAROSAR + ROSA AROS + ROS SAROSAROSAROSAR AROS + RO ROSAROSAROSAROSAROSAR RO + ARO AROSAROSAROSARO AROS ROS + ARO ROSAROS OSAR ROSA ROS + RO AROSA ROSAROSAROSA ROSAR RO +RO ROSAR ROSAROSAROSAR R ROSARO RO +RO ROSA AROSAROSAROSA AR ROSARO AR +RO AROS ROSAROSAROSA ROS AROSARO AR +RO AROS ROSAROSARO ROSARO ROSARO AR +RO ROS AROSAROS ROSAROSA AROSAR AR +RO ROSA ROS ROSAROSAR ROSARO RO + RO ROS AROSAROSAROSA ROSARO AR + ARO ROSA ROSAROSAROS AROSAR ARO + ARO OROSA R ROSAROS ROS + RO AROSAROS AROSAROSAR RO + AROS AROSAROSAROSARO AROS + ROSA SARO + ROSAROSAROSAROSAR +EOF + ;; + + "sabotage"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .|'''.| | '||''|. ..|''|| + ||.. ' ||| || || .|' || + ''|||. | || ||'''|. || || +. '|| .''''|. || || '|. || +|'....|' .|. .||. .||...|' ''|...|' + +|''||''| | ..|'''.| '||''''| + || ||| .|' ' || . + || | || || .... ||''| + || .''''|. '|. || || + .||. .|. .||. ''|...'| .||.....| +EOF + ;; + + "Sabayon"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ........... + .. .. + .. .. + .. ${c2}o ${c1}.. + .. ${c2}:W' ${c1}.. + .. ${c2}.d. ${c1}.. +:. ${c2}.KNO ${c1}.: +:. ${c2}cNNN. ${c1}.: +: ${c2}dXXX, ${c1}: +: ${c2}. dXXX, .cd, ${c1}: +: ${c2}'kc .. dKKK. ,ll;:' ${c1}: +: ${c2}.xkkxc;..dkkkc',cxkkl ${c1}: +:. ${c2}.,cdddddddddddddo:. ${c1}.: + .. ${c2}:lllllll: ${c1}.. + .. ${c2}',,,,, ${c1}.. + .. .. + .. .. + ............... +EOF + ;; + + "Sailfish"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} _a@b + _#b (b + _@@ @_ _, + _#^@ _#*^^*gg,aa@^^ + #- @@^ _a@^^ + @_ *g#b + ^@_ ^@_ + ^@_ @ + @(b (b + #b(b#^ + _@_#@^ + _a@a*^ + ,a@*^ +EOF + ;; + + "SalentOS"*) + set_colors 2 1 3 7 + read -rd '' ascii_data <<'EOF' +${c1} ``..`` + .-:+oshdNMMMMMMNdhyo+:-.` + -oydmMMMMMMMMMMMMMMMMMMMMMMMMMMNdhs/ +${c4} +hdddm${c1}NMMMMMMMMMMMMMMMMMMMMMMMMN${c4}mdddh+` +${c2}`MMMMMN${c4}mdddddm${c1}MMMMMMMMMMMM${c4}mdddddm${c3}NMMMMM- +${c2} mMMMMMMMMMMMN${c4}ddddhyyhhddd${c3}NMMMMMMMMMMMM` +${c2} dMMMMMMMMMMMMMMMMM${c4}oo${c3}MMMMMMMMMMMMMMMMMN` +${c2} yMMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMd +${c2} +MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMy +${c2} :MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMo +${c2} .MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMM/ +${c2} `NMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMM- +${c2} mMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMN` +${c2} hMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMm +${c2} /MMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMy +${c2} .+hMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMms: +${c2} `:smMMMMMMMMM${c4}hh${c3}MMMMMMMMMNh+. +${c2} .+hMMMMMM${c4}hh${c3}MMMMMMdo: +${c2} `:smMM${c4}yy${c3}MMNy/` + ${c2}.- ${c4}`${c3}:. +EOF + ;; + + "Scientific"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} =/;;/- + +: // + /; /; + -X H. +.//;;;:;;-, X= :+ .-;:=;:;#;. +M- ,=;;;#:, ,:#;;:=, ,@ +:# :#.=/++++/=.$= #= + ,#; #/:+/;,,/++:+/ ;+. + ,+/. ,;@+, ,#H;, ,/+, + ;+;;/= @. ${c3}.H${c2}#${c3}#X ${c1}-X :///+; + ;+=;;;.@, ${c2}.X${c3}M${c2}@$. ${c1}=X.//;=#/. + ,;: :@#= =$H: .+#- + ,#= #;-///==///-// =#, +;+ :#-;;;:;;;;-X- +: +@- .-;;;;M- =M/;;;-. -X + :;;::;;-. #- :+ ,-;;-;:== + ,X H. + ;/ #= + // +; + '////' +EOF + ;; + + "Septor"*) + set_colors 4 7 4 + read -rd '' ascii_data <<'EOF' +${c1}ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssss${c2};okOOOOOOOOOOOOOOko;${c1}ssssssssss +sssssssss${c2}oNWWWWWWWWWWWWWWWWWWNo${c1}sssssssss +ssssssss${c2}:WWWWWWWWWWWWWWWWWWWWWW:${c1}ssssssss +ssssssss${c2}lWWWWWk${c1}ssssssssss${c2}lddddd:${c1}ssssssss +ssssssss${c2}cWWWWWNKKKKKKKKKKKKOx:${c1}ssssssssss +${c3}yy${c1}sssssss${c2}OWWWWWWWWWWWWWWWWWWWWx${c1}sssssss${c3}yy +yyyyyyyyyy${c2}:kKNNNNNNNNNNNNWWWWWW:${c3}yyyyyyyy +yyyyyyyy${c2}sccccc;${c3}yyyyyyyyyy${c2}kWWWWW:${c3}yyyyyyyy +yyyyyyyy${c2}:WWWWWWNNNNNNNNNNWWWWWW;${c3}yyyyyyyy +yyyyyyyy${c2}.dWWWWWWWWWWWWWWWWWWWNd${c3}yyyyyyyyy +yyyyyyyyyy${c2}sdO0KKKKKKKKKKKK0Od;${c3}yyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +EOF + ;; + + "Serene"*) + set_colors 6 6 + read -rd '' ascii_data <<'EOF' +${c1} __---''''''---__ + . . + : : + - _______----_- + s __----''' __---- + __h_ _-' _-' h + '-._''--.._ ; _-' y + : ''-._ '-._/ _-' : + y ':_ _--'' y + m .--'' '-._.;' m + m : : m + y '.._ '-__ y + : '--._ '''----___ : + y '--._ ''-- _ y + h '--._ : h + s __'; vs + - __..--'' - + :_..--'' : + . _ . + `''---______---''-`` +EOF + ;; + + "SharkLinux"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} `:shd/ + `:yNMMMMs + `-smMMMMMMN. + .+dNMMMMMMMMs + .smNNMMMMMMMMm` + .sNNNNNNNMMMMMM/ + `omNNNNNNNMMMMMMm + /dNNNNNNNNMMMMMMM+ + .yNNNNNNNNNMMMMMMMN` + +mNNNNNNNNNMMMMMMMMh + .hNNNNNNNNNNMMMMMMMMMs + +mMNNNNNNNNMMMMMMMMMMMs + .hNMMNNNNMMMMMMMMMMMMMMMd + .oNNNNNNNNNNMMMMMMMMMMMMMMMo + `:+syyssoo++++ooooossssssssssso: +EOF + ;; + + "Siduction"*) + set_colors 4 4 + read -rd '' ascii_data <<'EOF' +${c1} _aass, + jQh: =$w + QWmwawQW + )$QQQQ@( .. + _a_a. ~??^ syDY?Sa, + _mW>-<$c jWmi imm. + ]QQwayQE 4QQmgwmQQ` + ?WWQWP' -9QQQQQ@'._aas, + _a%is. .adYYs,. -"?!` aQB*~^3$c +_Qh;.nm .QWc. {QL ]QQp;..vmQ/ +"QQmmQ@ -QQQggmQP ]QQWmggmQQ( + -???" "$WQQQY` __, ?QQQQQQW! + _yZ!?q, - .yWY!!Sw, "???^ + .QQa_=qQ mQm>..vmm + $QQWQQP $QQQgmQQ@ + "???" _aa, -9WWQQWY` + _mB>~)$a -~~ + mQms_vmQ. + ]WQQQQQP + -?T??" +EOF + ;; + + "slackware_small"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ________ + / ______| + | |______ + \\______ \\ + ______| | +| |________/ +|____________ +EOF + ;; + + "Slackware"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ::::::: + ::::::::::::::::::: + ::::::::::::::::::::::::: + ::::::::${c2}cllcccccllllllll${c1}:::::: + :::::::::${c2}lc dc${c1}::::::: + ::::::::${c2}cl clllccllll oc${c1}::::::::: + :::::::::${c2}o lc${c1}::::::::${c2}co oc${c1}:::::::::: + ::::::::::${c2}o cccclc${c1}:::::${c2}clcc${c1}:::::::::::: + :::::::::::${c2}lc cclccclc${c1}::::::::::::: +::::::::::::::${c2}lcclcc lc${c1}:::::::::::: +::::::::::${c2}cclcc${c1}:::::${c2}lccclc oc${c1}::::::::::: +::::::::::${c2}o l${c1}::::::::::${c2}l lc${c1}::::::::::: + :::::${c2}cll${c1}:${c2}o clcllcccll o${c1}::::::::::: + :::::${c2}occ${c1}:${c2}o clc${c1}::::::::::: + ::::${c2}ocl${c1}:${c2}ccslclccclclccclclc${c1}::::::::::::: + :::${c2}oclcccccccccccccllllllllllllll${c1}::::: + ::${c2}lcc1lcccccccccccccccccccccccco${c1}:::: + :::::::::::::::::::::::::::::::: + :::::::::::::::::::::::::::: + :::::::::::::::::::::: + :::::::::::: +EOF + ;; + + "SliTaz"*) + set_colors 3 3 + read -rd '' ascii_data <<'EOF' +${c1} @ @( @ + @@ @@ @ @/ + @@ @@ @@ @@ + @@ %@@ @@ @@ + @@ %@@@ @@@@@. @@@@ @@ + @@@ @@@@ @@@@@@@ &@@@ @@@ + @@@@@@@ %@@@@@@@@@@@@ &@@@% @@@@@@@/ + ,@@@@@@@@@@@@@@@@@@@@@@@@@ + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ +@@@@@@. @@@@@@@@@@@@@@@@@@@@@ /@@@@@@ +@@ @@@@@ @@@@@@@@@@@@, @@@@@ @@@ +@@ @@@@. @@@@@@@@@@@@@% #@@@@ @@. +@@ ,@@ @@@@@@@@@@@@@ @@@ @@ +@ @@. @@@@@@@@@@@@@ @@@ *@ +@ @@ @@@@@@@@@@@@ @@ @ + @ @@@@@@@@@. #@ + @ ,@@@@@ @ +EOF + ;; + + "SmartOS"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1}yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyys oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyy syyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy yyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +EOF + ;; + + "Solus"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} -``````````` + `-+/------------.` + .---:mNo---------------. + .-----yMMMy:---------------. + `------oMMMMMm/----------------` + .------/MMMMMMMN+----------------. + .------/NMMMMMMMMm-+/--------------. +`------/NMMMMMMMMMN-:mh/-------------` +.-----/NMMMMMMMMMMM:-+MMd//oso/:-----. +-----/NMMMMMMMMMMMM+--mMMMh::smMmyo:-- +----+NMMMMMMMMMMMMMo--yMMMMNo-:yMMMMd/. +.--oMMMMMMMMMMMMMMMy--yMMMMMMh:-yMMMy-` +`-sMMMMMMMMMMMMMMMMh--dMMMMMMMd:/Ny+y. +`-/+osyhhdmmNNMMMMMm-/MMMMMMMmh+/ohm+ + .------------:://+-/++++++${c1}oshddys: + -hhhhyyyyyyyyyyyhhhhddddhysssso- + `:ossssssyysssssssssssssssso:` + `:+ssssssssssssssssssss+- + `-/+ssssssssssso+/-` + `.-----..` +EOF + ;; + + "Source Mage"* | "Source_Mage"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} :ymNMNho. +.+sdmNMMMMMMMMMMy` +.-::/yMMMMMMMMMMMm- + sMMMMMMMMMMMm/ + /NMMMMMMMMMMMMMm: + .MMMMMMMMMMMMMMMMM: + `MMMMMMMMMMMMMMMMMN. + NMMMMMMMMMMMMMMMMMd + mMMMMMMMMMMMMMMMMMMo + hhMMMMMMMMMMMMMMMMMM. + .`/MMMMMMMMMMMMMMMMMs + :mMMMMMMMMMMMMMMMN` + `sMMMMMMMMMMMMMMM+ + /NMMMMMMMMMMMMMN` + oMMMMMMMMMMMMM+ + ./sd.-hMMMMMMMMmmN` + ./+oyyyh- `MMMMMMMMMmNh + sMMMMMMMMMmmo + `NMMMMMMMMMd: + -dMMMMMMMMMo + -shmNMMms. +EOF + ;; + + "Sparky"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} + . `-:-` + .o` .-///-` + `oo` .:/++:. + os+` -/+++:` ``.........``` + /ys+`./+++/-.-::::::----......`` + `syyo`++o+--::::-::/+++/-`` + -yyy+.+o+`:/:-:sdmmmmmmmmdy+-` +::-` :yyy/-oo.-+/`ymho++++++oyhdmdy/` +`/yy+-`.syyo`+o..o--h..osyhhddhs+//osyy/` + -ydhs+-oyy/.+o.-: ` ` :/::+ydhy+```-os- + .sdddy::syo--/:. `.:dy+-ohhho ./: + :yddds/:+oo+//:-`- /+ +hy+.shhy: `` + `:ydmmdysooooooo-.ss`/yss--oyyo + `./ossyyyyo+:-/oo:.osso- .oys + ``..-------::////.-oooo/ :so + `...----::::::::--.`/oooo: .o: + ``````` ++o+:` `:` + ./+/-` ` + `-:-. + `` +EOF + ;; + + "Star"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ + `yy- + `y.`y` + `` s- .y ` + +h//:..` +/ /o ``..:/so + /o``.-::/:/+ o/://::-.`+o` + :s` `. .` `s/ + .y. .s- + `y- :s` + .-//. /+:. + .:/:. .:/:. +-+o:. .:+:. +-///++///:::` .-::::///+so- + ``..o/ d-....``` + s. `/. d + h .+o-+o- h. + h -o/` `/o: s: + -s/o:` `:o/+/ + /s- -yo +EOF + ;; + + "SteamOS"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .,,,,. + .,'onNMMMMMNNnn',. + .'oNMANKMMMMMMMMMMMNNn'. + .'ANMMMMMMMXKNNWWWPFFWNNMNn. + ;NNMMMMMMMMMMNWW'' ,.., 'WMMM, + ;NMMMMV+##+VNWWW' .+;'':+, 'WMW, +,VNNWP+${c2}######${c1}+WW, ${c2}+: ${c1}:+, +MMM, +'${c2}+#############, +. ,+' ${c1}+NMMM +${c2} '*#########*' '*,,*' ${c1}.+NMMMM. +${c2} `'*###*' ,.,;###${c1}+WNM, +${c2} .,;;, .;##########${c1}+W +${c2},',. '; ,+##############' + '###+. :,. .,; ,###############' + '####.. `'' .,###############' + '#####+++################' + '*##################*' + ''*##########*'' + '''''' +EOF + ;; + + "sunos_small" | "solaris_small") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} . .; . + . :; :: ;: . + .;. .. .. .;. +.. .. .. .. + .;, ,;. +EOF + ;; + + "SunOS" | "Solaris") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +EOF + ;; + + "openSUSE Leap"* | "openSUSE_Leap"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} `-++:` + ./oooooo/- + `:oooooooooooo:. + -+oooooooooooooooo+-` + ./oooooooooooooooooooooo/- + :oooooooooooooooooooooooooo: + ` `-+oooooooooooooooooooo/- ` + `:oo/- .:ooooooooooooooo+:` `-+oo/. +`/oooooo:. -/oooooooooo/. ./oooooo/. + `:+ooooo+-` `:+oooo+- `:oooooo+:` + .:oooooo/. .::` -+oooooo/. + -/oooooo:. ./oooooo+- + `:+ooooo+-:+oooooo:` + ./oooooooooo/. + -/oooo+:` + `:/. +EOF + ;; + + "t2"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} +TTTTTTTTTT + tt ${c1}222${c2} + tt ${c1}2 2${c2} + tt ${c1}2${c2} + tt ${c1}2${c2} + tt ${c1}22222${c2} +EOF + ;; + + "openSUSE Tumbleweed"* | "openSUSE_Tumbleweed"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} ...... + .,cdxxxoc,. .:kKMMMNWMMMNk:. + cKMMN0OOOKWMMXo. ; ;0MWk:. .:OMMk. + ;WMK;. .lKMMNM, :NMK, .OMW; + cMW; 'WMMMN ,XMK, oMM' +.MMc ..;l. xMN: KM0 +'MM. 'NMO oMM +.MM, .kMMl xMN + KM0 .kMM0. .dl:,.. .WMd + .XM0. ,OMMK, OMMMK. .XMK + oWMO:. .;xNMMk, NNNMKl. .xWMx + :ONMMNXMMMKx; . ,xNMWKkxllox0NMWk, + ..... .:dOOXXKOxl, +EOF + ;; + + "opensuse_small" | "suse_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} _______ +__| __ \\ + / .\\ \\ + \\__/ | + _______| + \\_______ +__________/ +EOF + ;; + + "openSUSE"* | "open SUSE"* | "SUSE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} .;ldkO0000Okdl;. + .;d00xl:^''''''^:ok00d;. + .d00l' 'o00d. + .d0Kd'${c1} Okxol:;,. ${c2}:O0d. + .OK${c1}KKK0kOKKKKKKKKKKOxo:, ${c2}lKO. + ,0K${c1}KKKKKKKKKKKKKKK0P^${c2},,,${c1}^dx:${c2} ;00, +.OK${c1}KKKKKKKKKKKKKKKk'${c2}.oOPPb.${c1}'0k.${c2} cKO. +:KK${c1}KKKKKKKKKKKKKKK: ${c2}kKx..dd ${c1}lKd${c2} 'OK: +dKK${c1}KKKKKKKKKOx0KKKd ${c2}^0KKKO' ${c1}kKKc${c2} dKd +dKK${c1}KKKKKKKKKK;.;oOKx,..${c2}^${c1}..;kKKK0.${c2} dKd +:KK${c1}KKKKKKKKKK0o;...^cdxxOK0O/^^' ${c2}.0K: + kKK${c1}KKKKKKKKKKKKK0x;,,......,;od ${c2}lKk + '0K${c1}KKKKKKKKKKKKKKKKKKKK00KKOo^ ${c2}c00' + 'kK${c1}KKOxddxkOO00000Okxoc;'' ${c2}.dKk' + l0Ko. .c00l' + 'l0Kk:. .;xK0l' + 'lkK0xl:;,,,,;:ldO0kl' + '^:ldxkkkkxdl:^' +EOF + ;; + + "SwagArch"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .;ldkOKXXNNNNXXK0Oxoc,. + ,lkXMMNK0OkkxkkOKWMMMMMMMMMM; + 'K0xo ..,;:c:. `'lKMMMMM0 + .lONMMMMMM' `lNMk' +${c2} ;WMMMMMMMMMO. ${c1}....::... +${c2} OMMMMMMMMMMMMKl. ${c1}.,;;;;;ccccccc, +${c2} `0MMMMMMMMMMMMMM0: ${c1}.. .ccccccc. +${c2} 'kWMMMMMMMMMMMMMNo. ${c1}.,:' .ccccccc. +${c2} `c0MMMMMMMMMMMMMN,${c1},:c; :cccccc: +${c2} ckl. `lXMMMMMMMMMX${c1}occcc:.. ;ccccccc. +${c2}dMMMMXd, `OMMMMMMWk${c1}ccc;:''` ,ccccccc: +${c2}XMMMMMMMWKkxxOWMMMMMNo${c1}ccc; .cccccccc. +${c2} `':ldxO0KXXXXXK0Okdo${c1}cccc. :cccccccc. + :ccc:' `cccccccc:, + '' +EOF + ;; + + "Tails"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `` + ./yhNh +syy/Nshh `:o/ +N:dsNshh █ `ohNMMd +N-/+Nshh `yMMMMd +N-yhMshh yMMMMd +N-s:hshh █ yMMMMd so//. +N-oyNsyh yMMMMd d Mms. +N:hohhhd:. yMMMMd syMMM+ +Nsyh+-..+y+- yMMMMd :mMM+ ++hy- -ss/`yMMMM `+d+ + :sy/. ./yNMMMMm `` + .+ys- `:+hNMMMMMMy/` + `hNmmMMMMMMMMMMMMdo. + dMMMMMMMMMMMMMMMMMNh: + +hMMMMMMMMMMMMMMMMMmy. + -oNMMMMMMMMMMmy+.` + `:yNMMMds/.` + .//` +EOF + ;; + + "Trisquel"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ▄▄▄▄▄▄ + ▄█████████▄ + ▄▄▄▄▄▄ ████▀ ▀████ + ▄██████████▄ ████▀ ▄▄ ▀███ + ▄███▀▀ ▀▀████ ███▄ ▄█ ███ +▄███ ▄▄▄ ████▄ ▀██████ ▄███ +███ █▀▀██▄ █████▄ ▀▀ ▄████ +▀███ ███ ███████▄▄ ▄▄██████ +${c1} ▀███▄ ▄███ █████████████${c2}████▀ +${c1} ▀█████████ ███████${c2}███▀▀▀ + ▀▀███▀▀ ██████▀▀ + ██████▀ ▄▄▄▄ + █████▀ ████████ + █████ ███▀ ▀███ + ████▄ ██▄▄▄ ███ + █████▄ ▀▀ ▄██ + ██████▄▄▄████ + ▀▀█████▀▀ +EOF + ;; + + "Ubuntu Cinnamon"* | "Ubuntu-Cinnamon"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} .-/+oooooooo+/-. + `:+oooooooooooooooooo+:` + -+oooooooooooooooooooooooo+- + .ooooooooooooooooooo${c2}:ohNd${c1}oooooo. + /oooooooooooo${c2}:/+oo++:/ohNd${c1}ooooooo/ + +oooooooooo${c2}:osNdhyyhdNNh+:+${c1}oooooooo+ + /ooooooooo${c2}/dN/${c1}ooooooooo${c2}/sNNo${c1}ooooooooo/ +.ooooooooo${c2}oMd:${c1}oooooooooooo${c2}:yMy${c1}ooooooooo. ++ooooo${c2}:+o/Md${c1}oooooo${c2}:sm/${c1}oo/ooo${c2}yMo${c1}oooooooo+ +ooo${c2}:sdMdosMo${c1}ooooo${c2}oNMd${c1}//${c2}dMd+${c1}o${c2}:so${c1}ooooooooo +oooo${c2}+ymdosMo${c1}ooo${c2}+mMm${c1}+/${c2}hMMMMMh+hs${c1}ooooooooo ++oooooo${c2}:${c1}:${c2}/Nm:${c1}/${c2}hMNo${c1}:y${c2}MMMMMMMMMM+${c1}oooooooo+ +.ooooooooo${c2}/NNMNy${c1}:o${c2}NMMMMMMMMMMo${c1}ooooooooo. +/oooooooooo${c2}:yh:${c1}+m${c2}MMMMMMMMMMd/${c1}ooooooooo/ + +oooooooooo${c2}+${c1}/h${c2}mMMMMMMNds//o${c1}oooooooo+ + /oooooooooooo${c2}+:////:o/ymMd${c1}ooooooo/ + .oooooooooooooooooooo${c2}/sdh${c1}oooooo. + -+oooooooooooooooooooooooo+- + `:+oooooooooooooooooo+:` + .-/+oooooooo+/-. +EOF + ;; + + "Ubuntu Budgie"* | "Ubuntu-Budgie"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ./oydmMMMMMMmdyo/. + :smMMMMMMMMMMMhs+:++yhs: + `omMMMMMMMMMMMN+` `odo` + /NMMMMMMMMMMMMN- `sN/ + `hMMMMmhhmMMMMMMh sMh` + .mMmo- /yMMMMm` `MMm. + mN/ yMMMMMMMd- MMMm +oN- oMMMMMMMMMms+//+o+: :MMMMo +m/ +NMMMMMMMMMMMMMMMMm. :NMMMMm +M` .NMMMMMMMMMMMMMMMNodMMMMMMM +M- sMMMMMMMMMMMMMMMMMMMMMMMMM +mm` mMMMMMMMMMNdhhdNMMMMMMMMMm +oMm/ .dMMMMMMMMh: :dMMMMMMMo + mMMNyo/:/sdMMMMMMMMM+ sMMMMMm + .mMMMMMMMMMMMMMMMMMs `NMMMm. + `hMMMMMMMMMMM.oo+. `MMMh` + /NMMMMMMMMMo sMN/ + `omMMMMMMMMy. :dmo` + :smMMMMMMMh+-` `.:ohs: + ./oydmMMMMMMdhyo/. +EOF + ;; + + "Ubuntu-GNOME"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c3} ./o. + .oooooooo + .oooo```soooo + .oooo` `soooo + .ooo` ${c4}.o.${c3} `\/ooo. + :ooo ${c4}:oooo.${c3} `\/ooo. + sooo ${c4}`ooooo${c3} \/oooo + \/ooo ${c4}`soooo${c3} `ooooo + `soooo ${c4}`\/ooo${c3} `soooo +${c4}./oo ${c3}`\/ooo ${c4}`/oooo.${c3} `/ooo +${c4}`\/ooo. ${c3}`/oooo. ${c4}`/oooo.${c3} `` +${c4} `\/ooo. ${c3}/oooo ${c4}/ooo` +${c4} `ooooo ${c3}`` ${c4}.oooo +${c4} `soooo. .oooo` + `\/oooooooooo` + ``\/oo`` +EOF + ;; + + "Ubuntu MATE"* | "Ubuntu-MATE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} .:/+oossssoo+/:.` + `:+ssssssssssssssssss+:` + -+sssssssssssssss${c2}y${c1}ssssssss+- + .osssssssssssss${c2}yy${c1}ss${c2}mMmh${c1}ssssssso. + /sssssssss${c2}ydmNNNmmd${c1}s${c2}mMMMMNdy${c1}sssss/ + `+ssssssss${c2}hNNdy${c1}sssssss${c2}mMMMMNdy${c1}ssssss+` + +sssssss${c2}yNNh${c1}ss${c2}hmNNNNm${c1}s${c2}mMmh${c1}s${c2}ydy${c1}sssssss+ +-sssss${c2}y${c1}ss${c2}Nm${c1}ss${c2}hNNh${c1}ssssss${c2}y${c1}s${c2}hh${c1}ss${c2}mMy${c1}sssssss- ++ssss${c2}yMNdy${c1}ss${c2}hMd${c1}ssssssssss${c2}hMd${c1}ss${c2}NN${c1}sssssss+ +sssss${c2}yMMMMMmh${c1}sssssssssssss${c2}NM${c1}ss${c2}dMy${c1}sssssss +sssss${c2}yMMMMMmhy${c1}ssssssssssss${c2}NM${c1}ss${c2}dMy${c1}sssssss ++ssss${c2}yMNdy${c1}ss${c2}hMd${c1}ssssssssss${c2}hMd${c1}ss${c2}NN${c1}sssssss+ +-sssss${c2}y${c1}ss${c2}Nm${c1}ss${c2}hNNh${c1}ssssssss${c2}dh${c1}ss${c2}mMy${c1}sssssss- + +sssssss${c2}yNNh${c1}ss${c2}hmNNNNm${c1}s${c2}mNmh${c1}s${c2}ymy${c1}sssssss+ + +ssssssss${c2}hNNdy${c1}sssssss${c2}mMMMMmhy${c1}ssssss+ + /sssssssss${c2}ydmNNNNmd${c1}s${c2}mMMMMNdh${c1}sssss/ + .osssssssssssss${c2}yy${c1}ss${c2}mMmdy${c1}sssssso. + -+sssssssssssssss${c2}y${c1}ssssssss+- + `:+ssssssssssssssssss+:` + .:/+oossssoo+/:. + +EOF + ;; + + "ubuntu_old") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ./+o+- +${c2} yyyyy- ${c1}-yyyyyy+ +${c2} ${c2}://+//////${c1}-yyyyyyo +${c3} .++ ${c2}.:/++++++/-${c1}.+sss/` +${c3} .:++o: ${c2}/++++++++/:--:/- +${c3} o:+o+:++.${c2}`..```.-/oo+++++/ +${c3} .:+o:+o/.${c2} `+sssoo+/ +${c2} .++/+:${c3}+oo+o:`${c2} /sssooo. +${c2}/+++//+:${c3}`oo+o${c2} /::--:. +${c2}+/+o+++${c3}`o++o${c1} ++////. +${c2} .++.o+${c3}++oo+:`${c1} /dddhhh. +${c3} .+.o+oo:.${c1} `oddhhhh+ +${c3} +.++o+o`${c1}`-````.:ohdhhhhh+ +${c3} `:o+++ ${c1}`ohhhhhhhhyo++os: +${c3} .o:${c1}`.syhhhhhhh/${c3}.oo++o` +${c1} /osyyyyyyo${c3}++ooo+++/ +${c1} ````` ${c3}+oo+++o: +${c3} `oo++. +EOF + ;; + + "Ubuntu Studio"* | "Ubuntu-Studio") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} ..-::::::-.` + `.:+++++++++++${c2}ooo${c1}++:.` + ./+++++++++++++${c2}sMMMNdyo${c1}+/. + .++++++++++++++++${c2}oyhmMMMMms${c1}++. + `/+++++++++${c2}osyhddddhys${c1}+${c2}osdMMMh${c1}++/` + `+++++++++${c2}ydMMMMNNNMMMMNds${c1}+${c2}oyyo${c1}++++` + +++++++++${c2}dMMNhso${c1}++++${c2}oydNMMmo${c1}++++++++` + :+${c2}odmy${c1}+++${c2}ooysoohmNMMNmyoohMMNs${c1}+++++++: + ++${c2}dMMm${c1}+${c2}oNMd${c1}++${c2}yMMMmhhmMMNs+yMMNo${c1}+++++++ +`++${c2}NMMy${c1}+${c2}hMMd${c1}+${c2}oMMMs${c1}++++${c2}sMMN${c1}++${c2}NMMs${c1}+++++++. +`++${c2}NMMy${c1}+${c2}hMMd${c1}+${c2}oMMMo${c1}++++${c2}sMMN${c1}++${c2}mMMs${c1}+++++++. + ++${c2}dMMd${c1}+${c2}oNMm${c1}++${c2}yMMNdhhdMMMs${c1}+y${c2}MMNo${c1}+++++++ + :+${c2}odmy${c1}++${c2}oo${c1}+${c2}ss${c1}+${c2}ohNMMMMmho${c1}+${c2}yMMMs${c1}+++++++: + +++++++++${c2}hMMmhs+ooo+oshNMMms${c1}++++++++ + `++++++++${c2}oymMMMMNmmNMMMMmy+oys${c1}+++++` + `/+++++++++${c2}oyhdmmmmdhso+sdMMMs${c1}++/ + ./+++++++++++++++${c2}oyhdNMMMms${c1}++. + ./+++++++++++++${c2}hMMMNdyo${c1}+/. + `.:+++++++++++${c2}sso${c1}++:. + ..-::::::-.. +EOF + ;; + + "ubuntu_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} _ + ---(_) + _/ --- \\ +(_) | | + \\ --- _/ + ---(_) +EOF + ;; + + "Ubuntu"* | "i3buntu"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .-/+oossssoo+/-. + `:+ssssssssssssssssss+:` + -+ssssssssssssssssssyyssss+- + .ossssssssssssssssss${c2}dMMMNy${c1}sssso. + /sssssssssss${c2}hdmmNNmmyNMMMMh${c1}ssssss/ + +sssssssss${c2}hm${c1}yd${c2}MMMMMMMNddddy${c1}ssssssss+ + /ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhmNMMMNh${c1}ssssssss/ +.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. ++ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ +oss${c2}yNMMMNyMMh${c1}ssssssssssssss${c2}hmmmh${c1}ssssssso +oss${c2}yNMMMNyMMh${c1}sssssssssssssshmmmh${c1}ssssssso ++ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ +.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. + /ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhdNMMMNh${c1}ssssssss/ + +sssssssss${c2}dm${c1}yd${c2}MMMMMMMMddddy${c1}ssssssss+ + /sssssssssss${c2}hdmNNNNmyNMMMMh${c1}ssssss/ + .ossssssssssssssssss${c2}dMMMNy${c1}sssso. + -+sssssssssssssssss${c2}yyy${c1}ssss+- + `:+ssssssssssssssssss+:` + .-/+oossssoo+/-. +EOF + ;; + + "Univention"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} ./osssssssssssssssssssssso+- + `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhy: + shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh- + `-//${c2}sssss${c1}/hhhhhhhhhhhhhh+${c2}s${c1}.hhhhhhhhh+ + .ohhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sss${c1}+hhhhhhh+ +.yhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}ssss${c1}:hhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}ssssss${c1}+yhhhhhhhhhhy/${c2}ssssss${c1}yhhhhh+ ++hhhhhh:${c2}sssssss${c1}:hhhhhhh+${c2}.ssssssss${c1}yhhhhy. ++hhhhhhh+`${c2}ssssssssssssssss${c1}hh${c2}sssss${c1}yhhho` ++hhhhhhhhhs+${c2}ssssssssssss${c1}+hh+${c2}sssss${c1}/:-` +-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho + :yhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` + -+ossssssssssssssssssssss+:` +EOF + ;; + + "Venom"*) + set_colors 8 4 + read -rd '' ascii_data <<'EOF' +${c1} ::::::: ::::::: + mMMMMMMm dMMMMMMm + /MMMMMMMo +MMMMMMM/ + yMMMMMMN mMMMMMMy + NMMMMMMs oMMMMMMm + +MMMMMMN: NMMMMMM+ + hMMMMMMy sMMMMMMy + :NMMMMMM::NMMMMMN: + oMMMMMMyyMMMMMM+ + dMMMMMMMMMMMMh + /MMMMMMMMMMMN: + sMMMMMMMMMMo + mMMMMMMMMd + +MMMMMMMN: + :::::: +EOF + ;; + + "void_small") + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} _______ + _ \\______ - +| \\ ___ \\ | +| | / \ | | +| | \___/ | | +| \\______ \\_| + -_______\\ +EOF + ;; + + "Void"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} __.;=====;.__ + _.=+==++=++=+=+===;. + -=+++=+===+=+=+++++=_ + . -=:`` `--==+=++==. + _vi, ` --+=++++: + .uvnvi. _._ -==+==+. + .vvnvnI` .;==|==;. :|=||=|. +${c2}+QmQQm${c1}pvvnv; ${c2}_yYsyQQWUUQQQm #QmQ#${c1}:${c2}QQQWUV$QQm. +${c2} -QQWQW${c1}pvvo${c2}wZ?.wQQQE${c1}==<${c2}QWWQ/QWQW.QQWW${c1}(: ${c2}jQWQE +${c2} -$QQQQmmU' jQQQ@${c1}+=<${c2}QWQQ)mQQQ.mQQQC${c1}+;${c2}jWQQ@' +${c2} -$WQ8Y${c1}nI: ${c2}QWQQwgQQWV${c1}`${c2}mWQQ.jQWQQgyyWW@! +${c1} -1vvnvv. `~+++` ++|+++ + +vnvnnv, `-|=== + +vnvnvns. . :=- + -Invnvvnsi..___..=sv=. ` + +Invnvnvnnnnnnnnvvnn;. + ~|Invnvnvvnvvvnnv}+` + -~|{*l}*|~ +EOF + + ;; + + "semc"*) + set_colors 2 8 1 + read -rd '' ascii_data <<'EOF' +${c1} /\ + ______/ \ + / |()| ${c2}E M C +${c1} | (-- | | + \ \ | | +.----) | |__| +|_______/ / ${c3}"${c1} \ + ${c3}" + " +EOF + + ;; + + "Obarun"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ,;::::; + ;cooolc;, + ,coool; + ,loool, + loooo; + :ooool + cooooc ,:ccc; + looooc :oooooool + cooooo ;oooooooooo, + :ooooo; :ooooooooooo + oooooo oooooooooooc + :oooooo :ooooooooool + loooooo ;oooooooool + looooooc .coooooooc + cooooooo: ,;co; + ,ooooooool; ,:loc + cooooooooooooloooooc + ;ooooooooooooool; + ;looooooolc; +EOF + ;; + + *"[Windows 10]"*|*"on Windows 10"*|"Windows 8"*|\ + "Windows 10"* |"windows10"|"windows8") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} .., + ....,,:;+ccllll + ...,,+:; cllllllllllllllllll +,cclllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll + +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +`'ccllllllllll lllllllllllllllllll + `' \\*:: :ccllllllllllllllll + ````''*::cll + `` +EOF + ;; + + "Windows"*) + set_colors 1 2 4 3 + read -rd '' ascii_data <<'EOF' +${c1} ,.=:!!t3Z3z., + :tt:::tt333EE3 +${c1} Et:::ztt33EEEL${c2} @Ee., .., +${c1} ;tt:::tt333EE7${c2} ;EEEEEEttttt33# +${c1} :Et:::zt333EEQ.${c2} $EEEEEttttt33QL +${c1} it::::tt333EEF${c2} @EEEEEEttttt33F +${c1} ;3=*^```"*4EEV${c2} :EEEEEEttttt33@. +${c3} ,.=::::!t=., ${c1}`${c2} @EEEEEEtttz33QF +${c3} ;::::::::zt33)${c2} "4EEEtttji3P* +${c3} :t::::::::tt33.${c4}:Z3z..${c2} ``${c4} ,..g. +${c3} i::::::::zt33F${c4} AEEEtttt::::ztF +${c3} ;:::::::::t33V${c4} ;EEEttttt::::t3 +${c3} E::::::::zt33L${c4} @EEEtttt::::z3F +${c3}{3=*^```"*4E3)${c4} ;EEEtttt:::::tZ` +${c3} `${c4} :EEEEtttt::::z7 + "VEzjt:;;z>*` +EOF + ;; + + "Xubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + `.yyyyyyyyyyyyyyyyyyyy.` + `yyyyyyyyyyyyyyyyyyyyyyyyyy` + `yyyyyyyyyyyyyyyyyyyy${c2}::${c1}yyyyyyyy` + .yyyyyyyyyyy${c2}/+:${c1}yyyyyyy${c2}ds${c1}yyy${c2}+y${c1}yyyy. + yyyyyyy${c2}:o/${c1}yy${c2}dMMM+${c1}yyyyy${c2}/M+${c1}y${c2}:hM+${c1}yyyyyy + yyyyyyy${c2}+MMMy${c1}y${c2}mMMMh${c1}yyyyy${c2}yM::mM+${c1}yyyyyyyy +`yyyyyyy${c2}+MMMMysMMMd${c1}yyyyy${c2}dh:mN+${c1}yyyyyyyyy` +yyyyyyyy${c2}:NMMMMmMMMMmmdhyy+/y:${c1}yyyyyyyyyyy +yyyyyyyy${c2}+MMMMMMMMMMMMMMMMMMNho:${c1}yyyyyyyyy +yyyyyyyy${c2}mMMMMMMMMMMMMMMMMMMMMMMy${c1}yyyyyyyy +yyyyyyy${c2}+MMMMMMMMMMMMMMMMMMMMMMMM/${c1}yyyyyyy +`yyyyyy${c2}sMMMMMMMMMMMMMMMMMMMMMMmo${c1}yyyyyyy` + yyyyyy${c2}oMMMMMMMMMMMMMMMMMMMmy+${c1}yyyyyyyyy + yyyyy${c2}:mMMMMMMMMMMMMMMNho/${c1}yyyyyyyyyyy + .yyyy${c2}:yNMMMMMMMNdyo:${c1}yyyyyyyyyyyyy. + `yyyyyy${c2}:/++/::${c1}yyyyyyyyyyyyyyyyy` + `yyyyyyyyyyyyyyyyyyyyyyyyyy` + `.yyyyyyyyyyyyyyyyyyyy.` + `.:/oosyyyysso/:.` +EOF + ;; + "IRIX"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +EOF + ;; + "Zorin"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} `osssssssssssssssssssso` + .osssssssssssssssssssssso. + .+oooooooooooooooooooooooo+. + + + `::::::::::::::::::::::. .:` + `+ssssssssssssssssss+:.` `.:+ssso` +.ossssssssssssssso/. `-+ossssssso. +ssssssssssssso/-` `-/osssssssssssss +.ossssssso/-` .-/ossssssssssssssso. + `+sss+:. `.:+ssssssssssssssssss+` + `:. .::::::::::::::::::::::` + + + .+oooooooooooooooooooooooo+. + -osssssssssssssssssssssso- + `osssssssssssssssssssso` +EOF + ;; + + *) + case $kernel_name in + *"BSD") + set_colors 1 7 4 3 6 + read -rd '' ascii_data <<'EOF' +${c1} , , + /( )` + \ \___ / | + /- _ `-/ ' + (${c2}/\/ \ ${c1}\ /\ + ${c2}/ / | ` ${c1}\ + ${c3}O O ${c2}) ${c1}/ | + ${c2}`-^--'${c1}`< ' + (_.) _ ) / + `.___/` / + `-----' / +${c4}<----. __ / __ \ +${c4}<----|====${c1}O)))${c4}==${c1}) \) /${c4}====| +<----' ${c1}`--' `.__,' \ + | | + \ / /\ + ${c5}______${c1}( (_ / \______/ + ${c5},' ,-----' | + `--{__________) +EOF + ;; + + "Darwin") + set_colors 2 3 1 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} 'c. + ,xNMM. + .OMMMMo + OMMM0, + .;loddo:' loolloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: +${c2} .KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +${c3};MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + ${c5}.XMMMMMMMMMMMMMMMMMMMMMMMMMMk + .XMMMMMMMMMMMMMMMMMMMMMMMMK. + ${c6}kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + .cooc,. .,coo:. +EOF + ;; + + "GNU"*) + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} _-`````-, ,- '- . + .' .- - | | - -. `. + /.' / `. \ +:/ : _... ..._ `` : +:: : /._ .`:'_.._\. || : +:: `._ ./ ,` : \ . _.'' . +`:. / | -. \-. \\_ / + \:._ _/ .' .@) \@) ` `\ ,.' + _/,--' .- .\,-.`--`. + ,'/'' (( \ ` ) + /'/' \ `-' ( + '/'' `._,-----' + ''/' .,---' + ''/' ;: + ''/'' ''/ + ''/''/'' + '/'/' + `; +EOF + ;; + + "Linux") + set_colors fg 8 3 + read -rd '' ascii_data <<'EOF' +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +EOF + ;; + "Profelis SambaBOX"* | "SambaBOX"*) + set_colors 3 6 + read -rd '' ascii_data <<'EOF' +${c1} + # + *////##### + /////////#########( + .((((((///// ,####(#((((( + /#######(((* (#(((((((((. +//((#(#(#, ((##( ,((((((// +////// #(##########( ////// +////// ((#(#(#(#(##########(///////// +/////( (((((((#########(##((((((///// +/(((#( ((((/ +####(# ((### +#########(((/////////(((((((((, (#(#( +########( /////////(((((((* ##### +####///, *////((( ((((((( +./////////// .//((((((((( + ///////////, *(/////((((* + ,/(((((((((##########/. + .((((((####### + ((##* +EOF + ;; + + "SunOS") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +EOF + ;; + + "IRIX"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +EOF + ;; + + esac + ;; + esac + + # Overwrite distro colors if '$ascii_colors' doesn't + # equal 'distro'. + [[ ${ascii_colors[0]} != distro ]] && { + color_text=off + set_colors "${ascii_colors[@]}" + } +} + +main() { + cache_uname + get_os + + # Load default config. + eval "$config" + + get_args "$@" + [[ $verbose != on ]] && exec 2>/dev/null + get_simple "$@" + get_distro + get_bold + get_distro_ascii + [[ $stdout == on ]] && stdout + + # Minix doesn't support these sequences. + [[ $TERM != minix && $stdout != on ]] && { + # If the script exits for any reason, unhide the cursor. + trap 'printf "\e[?25h\e[?7h"' EXIT + + # Hide the cursor and disable line wrap. + printf '\e[?25l\e[?7l' + } + + image_backend + get_cache_dir + old_functions + print_info + dynamic_prompt + + # w3m-img: Draw the image a second time to fix + # rendering issues in specific terminal emulators. + [[ $image_backend == *w3m* ]] && display_image + [[ $image_backend == *ueberzug* ]] && display_image + + # Add neofetch info to verbose output. + err "Neofetch command: $0 $*" + err "Neofetch version: $version" + + [[ $verbose == on ]] && printf %b "$err" >&2 + + # If `--loop` was used, constantly redraw the image. + while [[ $image_loop == on && $image_backend == w3m ]]; do + display_image + sleep 1 + done + + return 0 +} + +main "$@" diff --git a/src/filesystem/usr/share/udhcpc/default.script b/src/filesystem/usr/share/udhcpc/default.script new file mode 100755 index 0000000..2a917eb --- /dev/null +++ b/src/filesystem/usr/share/udhcpc/default.script @@ -0,0 +1,52 @@ +#!/bin/sh +# udhcpc script edited by Tim Riker + +RESOLV_CONF="/etc/resolv.conf" + +[ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; } + +NETMASK="" +[ -n "$subnet" ] && NETMASK="netmask $subnet" +BROADCAST="broadcast +" +[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" + +case "$1" in + deconfig) + echo "Setting IP address 0.0.0.0 on $interface" + ifconfig $interface 0.0.0.0 + ;; + + renew|bound) + echo "Setting IP address $ip on $interface" + ifconfig $interface $ip $NETMASK $BROADCAST + + if [ -n "$router" ] ; then + echo "Deleting routers" + while route del default gw 0.0.0.0 dev $interface ; do + : + done + + metric=0 + for i in $router ; do + echo "Adding router $i" + route add default gw $i dev $interface metric $metric + : $(( metric += 1 )) + done + fi + + echo "Recreating $RESOLV_CONF" + # If the file is a symlink somewhere (like /etc/resolv.conf + # pointing to /run/resolv.conf), make sure things work. + realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF") + tmpfile="$realconf-$$" + > "$tmpfile" + [ -n "$domain" ] && echo "search $domain" >> "$tmpfile" + for i in $dns ; do + echo " Adding DNS server $i" + echo "nameserver $i" >> "$tmpfile" + done + mv "$tmpfile" "$realconf" + ;; +esac + +exit 0 diff --git a/src/linux-version b/src/linux-version new file mode 100755 index 0000000..eae449c --- /dev/null +++ b/src/linux-version @@ -0,0 +1 @@ +5.12.9 diff --git a/src/musl.config.mak b/src/musl.config.mak new file mode 100755 index 0000000..298a34f --- /dev/null +++ b/src/musl.config.mak @@ -0,0 +1,89 @@ +# +# config.mak.dist - sample musl-cross-make configuration +# +# Copy to config.mak and edit as desired. +# + +# There is no default TARGET; you must select one here or on the make +# command line. Some examples: + +# TARGET = i486-linux-musl +# TARGET = arm-linux-musleabi +# TARGET = arm-linux-musleabihf +# TARGET = sh2eb-linux-muslfdpic +# ... + +TARGET = x86_64-linux-musl + +# By default, cross compilers are installed to ./output under the top-level +# musl-cross-make directory and can later be moved wherever you want them. +# To install directly to a specific location, set it here. Multiple targets +# can safely be installed in the same location. Some examples: + +# OUTPUT = /opt/cross +# OUTPUT = /usr/local +OUTPUT = SOMEPATHHERE + +# By default, latest supported release versions of musl and the toolchain +# components are used. You can override those here, but the version selected +# must be supported (under hashes/ and patches/) to work. For musl, you +# can use "git-refname" (e.g. git-master) instead of a release. Setting a +# blank version for gmp, mpc, mpfr and isl will suppress download and +# in-tree build of these libraries and instead depend on pre-installed +# libraries when available (isl is optional and not set by default). +# Setting a blank version for linux will suppress installation of kernel +# headers, which are not needed unless compiling programs that use them. + +# BINUTILS_VER = 2.25.1 +# GCC_VER = 5.2.0 +# MUSL_VER = git-master +# GMP_VER = +# MPC_VER = +# MPFR_VER = +# ISL_VER = +# LINUX_VER = + +# By default source archives are downloaded with wget. curl is also an option. + +# DL_CMD = wget -c -O +# DL_CMD = curl -C - -L -o + +# Check sha-1 hashes of downloaded source archives. On gnu systems this is +# usually done with sha1sum. + +# SHA1_CMD = sha1sum -c +# SHA1_CMD = sha1 -c +# SHA1_CMD = shasum -a 1 -c + +# Something like the following can be used to produce a static-linked +# toolchain that's deployable to any system with matching arch, using +# an existing musl-targeted cross compiler. This only works if the +# system you build on can natively (or via binfmt_misc and qemu) run +# binaries produced by the existing toolchain (in this example, i486). + +# COMMON_CONFIG += CC="i486-linux-musl-gcc -static --static" CXX="i486-linux-musl-g++ -static --static" + +# Recommended options for smaller build for deploying binaries: + +# COMMON_CONFIG += CFLAGS="-g0 -Os" CXXFLAGS="-g0 -Os" LDFLAGS="-s" + +# Options you can add for faster/simpler build at the expense of features: + +# COMMON_CONFIG += --disable-nls +# GCC_CONFIG += --disable-libquadmath --disable-decimal-float +# GCC_CONFIG += --disable-libitm +# GCC_CONFIG += --disable-fixed-point +# GCC_CONFIG += --disable-lto + +# By default C and C++ are the only languages enabled, and these are +# the only ones tested and known to be supported. You can uncomment the +# following and add other languages if you want to try getting them to +# work too. + +# GCC_CONFIG += --enable-languages=c,c++ + +# You can keep the local build path out of your toolchain binaries and +# target libraries with the following, but then gdb needs to be told +# where to look for source files. + +# COMMON_CONFIG += --with-debug-prefix-map=$(CURDIR)= diff --git a/src/zsh-version b/src/zsh-version new file mode 100755 index 0000000..ac301e4 --- /dev/null +++ b/src/zsh-version @@ -0,0 +1 @@ +5.8 \ No newline at end of file