commit 19fcc3e2e8fcedebf2b250b8dcd529fb22afac72 Author: Robin Candau Date: Mon Feb 20 23:54:11 2023 +0100 back diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4168d5d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +subprojects/blueprint-compiler +build/ +.flatpak-builder/ +node_modules/ +.idea/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..32846b0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "diffEditor.codeLens": true, + "editor.tabCompletion": "on" +} \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..10926e8 --- /dev/null +++ b/COPYING @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 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 General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..505cdaf --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# Jade GUI + +The libadwaita/gtk based gui installer using jade as the backend. + +## 💡 Features + +- Beatiful UI +- Easy to use +- Uses accessible technologies + +## 🫂 Support + +**Support** is available in our [Discord](https://getcryst.al/discord) and the [Matrix](https://matrix.to/#/#space:getcryst.al). If you face any issues with the software, feel free to open an issue on this repository. + + +## 👥 Contributors + +A list of all **Jade GUI** contributors is available in [CONTRIBUTORS.md](CONTRIBUTORS.md) + +For a list of **Jade GUI** maintainers specifically, see [.gitlab/CODEOWNERS](.gitlab/CODEOWNERS) + + +## 💾 Installation +### 🏗 From Source + +**Install dependencies** + +```bash + # pacman -S jade openssl python-pytz gparted vte4 meson ninja libadwaita desktop-file-utils appstream-glib gtk4 + ``` + +**Install jade-GUI from source using `meson` and `ninja`** +```bash + $ git clone https://github.com/crystal-linux/jade-gui + $ cd jade-gui + $ meson --prefix=/usr _build + $ ninja -C _build + $ cd _build + $ sudo ninja install +``` + +**Install jade-GUI as a flatpak using `flatpak-builder`** (Recommended for development) +```sh + $ git clone https://github.com/crystal-linux/jade-gui + $ cd jade-gui + $ flatpak-builder --user --install --install-deps-from=flathub --force-clean build-dir al.getcryst.jadegui.yml + $ flatpak run al.getcryst.jadegui +``` +## 📸 Screenshots + +![App Screenshot](main-page-screenshot.png) + + +## 🙌 Contributing + +If you'd like to contribute to **Jade GUI**, please follow the [Crystal Linux contributing guidelines](https://git.getcryst.al/crystal/info/-/blob/main/CONTRIBUTING.md)! + +This project uses `meson`, and `ninja` for **Jade GUI** development, please follow the guidelines below: + +https://pypi.org/project/ninja/ + +https://mesonbuild.com/ + +## 📚 Documentation +We are also constantly looking for translators for our i18n-enabled projects! If you speak more than one language, consider helping out on our [Weblate](https://i18n.getcryst.al)! + +![https://i18n.getcryst.al/engage/crystal-linux/](https://i18n.getcryst.al/widgets/crystal-linux/-/287x66-black.png) + + +## 📜 License + +[GPLv3-only](https://choosealicense.com/licenses/gpl-3.0/) + +![](https://git.getcryst.al/crystal/misc/branding/-/raw/main/banners/README-banner.png) diff --git a/al.getcryst.jadegui.json b/al.getcryst.jadegui.json new file mode 100644 index 0000000..dea1b15 --- /dev/null +++ b/al.getcryst.jadegui.json @@ -0,0 +1,30 @@ +{ + "app-id": "al.getcryst.jadegui", + "runtime": "org.gnome.Platform", + "runtime-version": "43", + "sdk": "org.gnome.Sdk", + "command": "jade-gui", + "finish-args": [ + "--share=network", + "--share=ipc", + "--socket=fallback-x11", + "--device=dri", + "--socket=wayland", + "--talk-name=org.freedesktop.Flatpak", + "--filesystem=home:rw" + ], + "cleanup": [ + "/include", + "/lib/pkgconfig", + "/man", + "/share/doc", + "/share/gtk-doc", + "/share/pkgconfig", + "*.la", + "*.a" + ], + "modules": [ + "modules.json", + "python3-modules.json" + ] +} diff --git a/al.getcryst.jadegui.yml b/al.getcryst.jadegui.yml new file mode 100644 index 0000000..5d075be --- /dev/null +++ b/al.getcryst.jadegui.yml @@ -0,0 +1,26 @@ +app-id: al.getcryst.jadegui +runtime: org.gnome.Platform +runtime-version: '43' +sdk: org.gnome.Sdk +command: jade-gui +finish-args: +- "--share=network" +- "--share=ipc" +- "--socket=fallback-x11" +- "--device=dri" +- "--socket=wayland" +- "--talk-name=org.freedesktop.Flatpak" +- "--filesystem=home:rw" +cleanup: +- "/include" +- "/lib/pkgconfig" +- "/man" +- "/share/doc" +- "/share/gtk-doc" +- "/share/pkgconfig" +- "*.la" +- "*.a" +modules: +- modules.json +- python3-modules.json + diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..9703fd1 --- /dev/null +++ b/build.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +if [[ $1 == "build" ]]; then + if [[ ! -d "build" ]]; then + meson build + else + meson --reconfigure build + fi + ninja -C build +elif [[ $1 == "install" ]]; then + pushd build + sudo ninja install +elif [[ $1 == "build-install" ]]; then + if [[ ! -d "build" ]]; then + meson build + else + meson --reconfigure build + fi + ninja -C build + pushd build + sudo ninja install +else + echo "Unkown command $1" + echo "usage:" + echo "build build jade gui" + echo "install install jade gui" + echo "build-install build and install jade_gui" +fi diff --git a/data/al.getcryst.jadegui.appdata.xml.in b/data/al.getcryst.jadegui.appdata.xml.in new file mode 100644 index 0000000..7c545e7 --- /dev/null +++ b/data/al.getcryst.jadegui.appdata.xml.in @@ -0,0 +1,9 @@ + + + al.getcryst.jadegui.desktop + CC0-1.0 + GPL-3.0-only + +

No description

+
+
diff --git a/data/al.getcryst.jadegui.desktop.in b/data/al.getcryst.jadegui.desktop.in new file mode 100644 index 0000000..1222bf5 --- /dev/null +++ b/data/al.getcryst.jadegui.desktop.in @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Install Crystal Linux + +Exec=jade-gui + +Icon=al.getcryst.jadegui + +Terminal=false +Type=Application +Categories=GTK; +StartupNotify=true diff --git a/data/al.getcryst.jadegui.gschema.xml b/data/al.getcryst.jadegui.gschema.xml new file mode 100644 index 0000000..8763ef6 --- /dev/null +++ b/data/al.getcryst.jadegui.gschema.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/data/icons/clock-alt-symbolic.svg b/data/icons/clock-alt-symbolic.svg new file mode 100644 index 0000000..b4b5066 --- /dev/null +++ b/data/icons/clock-alt-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/icons/hicolor/scalable/apps/al.getcryst.jadegui.svg b/data/icons/hicolor/scalable/apps/al.getcryst.jadegui.svg new file mode 100644 index 0000000..609e2e0 --- /dev/null +++ b/data/icons/hicolor/scalable/apps/al.getcryst.jadegui.svg @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/icons/hicolor/symbolic/apps/al.getcryst.jadegui-symbolic.svg b/data/icons/hicolor/symbolic/apps/al.getcryst.jadegui-symbolic.svg new file mode 100644 index 0000000..0444828 --- /dev/null +++ b/data/icons/hicolor/symbolic/apps/al.getcryst.jadegui-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/icons/hicolor/symbolic/apps/al.getcyrst.jadegui-symbolic.svg b/data/icons/hicolor/symbolic/apps/al.getcyrst.jadegui-symbolic.svg new file mode 100644 index 0000000..0444828 --- /dev/null +++ b/data/icons/hicolor/symbolic/apps/al.getcyrst.jadegui-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/icons/left-symbolic.svg b/data/icons/left-symbolic.svg new file mode 100644 index 0000000..6bf69ea --- /dev/null +++ b/data/icons/left-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/icons/loupe-symbolic.svg b/data/icons/loupe-symbolic.svg new file mode 100644 index 0000000..da6ef8c --- /dev/null +++ b/data/icons/loupe-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/icons/meson.build b/data/icons/meson.build new file mode 100644 index 0000000..76c72f2 --- /dev/null +++ b/data/icons/meson.build @@ -0,0 +1,13 @@ +application_id = 'al.getcryst.jadegui' + +scalable_dir = join_paths('hicolor', 'scalable', 'apps') +install_data( + join_paths(scalable_dir, ('@0@.svg').format(application_id)), + install_dir: join_paths(get_option('datadir'), 'icons', scalable_dir) +) + +symbolic_dir = join_paths('hicolor', 'symbolic', 'apps') +install_data( + join_paths(symbolic_dir, ('@0@-symbolic.svg').format(application_id)), + install_dir: join_paths(get_option('datadir'), 'icons', symbolic_dir) +) diff --git a/data/icons/padlock2-symbolic.svg b/data/icons/padlock2-symbolic.svg new file mode 100644 index 0000000..bcede73 --- /dev/null +++ b/data/icons/padlock2-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/icons/right-symbolic.svg b/data/icons/right-symbolic.svg new file mode 100644 index 0000000..6cdf81d --- /dev/null +++ b/data/icons/right-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/data/meson.build b/data/meson.build new file mode 100644 index 0000000..41b505b --- /dev/null +++ b/data/meson.build @@ -0,0 +1,43 @@ +desktop_file = i18n.merge_file( + input: 'al.getcryst.jadegui.desktop.in', + output: 'al.getcryst.jadegui.desktop', + type: 'desktop', + po_dir: '../po', + install: true, + install_dir: join_paths(get_option('datadir'), 'applications') +) + +desktop_utils = find_program('desktop-file-validate', required: false) +if desktop_utils.found() + test('Validate desktop file', desktop_utils, + args: [desktop_file] + ) +endif + +appstream_file = i18n.merge_file( + input: 'al.getcryst.jadegui.appdata.xml.in', + output: 'al.getcryst.jadegui.appdata.xml', + po_dir: '../po', + install: true, + install_dir: join_paths(get_option('datadir'), 'appdata') +) + +appstream_util = find_program('appstream-util', required: false) +if appstream_util.found() + test('Validate appstream file', appstream_util, + args: ['validate', appstream_file] + ) +endif + +install_data('al.getcryst.jadegui.gschema.xml', + install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas') +) + +compile_schemas = find_program('glib-compile-schemas', required: false) +if compile_schemas.found() + test('Validate schema file', compile_schemas, + args: ['--strict', '--dry-run', meson.current_source_dir()] + ) +endif + +subdir('icons') diff --git a/jade_gui/__init__.py b/jade_gui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/about.ui b/jade_gui/about.ui new file mode 100644 index 0000000..400853d --- /dev/null +++ b/jade_gui/about.ui @@ -0,0 +1,23 @@ + + + + + Jade GUI + al.getcryst.jadegui + True + 1.9.0 + Easily install Crystal Linux + https://getcryst.al + https://git.getcryst.al/crystal/software/jade-gui/-/issues + gpl-3-0-only + Crystal Linux dev team + axtlos https://github.com/axtloss +marshmallow https://marsh.town +Matt https://github.com/SomethingGeneric +Michal https://github.com/not-my-segfault +Mirko Brombin https://github.com/mirkobrombin +Hari Rana (TheEvilSkeleton) https://theevilskeleton.gitlab.io/ + jasio https://github.com/hericiumvevo + + diff --git a/jade_gui/classes/__init__.py b/jade_gui/classes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/classes/install_prefs.py b/jade_gui/classes/install_prefs.py new file mode 100644 index 0000000..164b05d --- /dev/null +++ b/jade_gui/classes/install_prefs.py @@ -0,0 +1,106 @@ +# install_prefs.py +# +# Copyright 2022 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0-only + +from jade_gui.utils import disks +import json + + +class InstallPrefs: + def __init__( + self, + timezone, + locale, + layout, + variant, + username, + password, + enable_sudo, + disk, + hostname, + ipv_enabled, + timeshift_enabled, + zramd_enabled, + desktop, + partition_mode, + partitions, + ): + self.timezone = timezone + self.locale = locale + self.layout = layout + self.variant = variant + self.username = username + self.password = password + self.enable_sudo = enable_sudo + if partition_mode.lower() != "manual": + self.disk = disk.disk + else: + self.disk = "" + self.hostname = hostname if len(hostname) != 0 else "crystal" + self.ipv_enabled = ipv_enabled + self.timeshift_enabled = timeshift_enabled + self.zramd_enabled = zramd_enabled + self.desktop = desktop + self.partition_mode = partition_mode + self.partitions = partitions + self.is_efi = disks.get_uefi() + self.bootloader_type = "grub-efi" if self.is_efi else "grub-legacy" + self.bootloader_location = "/boot/efi/" if self.is_efi else self.disk + + def generate_json(self): + prefs = { + "partition": { + "device": self.disk, + "mode": self.partition_mode, + "efi": self.is_efi, + "partitions": self.partitions, + }, + "bootloader": { + "type": self.bootloader_type, + "location": self.bootloader_location, + }, + "locale": { + "locale": self.locale, + "keymap": self.layout.country_shorthand, + "timezone": self.timezone.region + "/" + self.timezone.location, + }, + "networking": {"hostname": self.hostname, "ipv6": self.ipv_enabled}, + "users": [ + { + "name": self.username, + "password": self.password, + "hasroot": self.enable_sudo, + "shell": "bash", + } + ], + "rootpass": self.password, + "desktop": self.desktop.lower(), + "timeshift": self.timeshift_enabled, + "extra_packages": ["firefox"], + "flatpak": True, + "zramd": self.zramd_enabled, + "unakite": { + "enable": False, + "root": "/dev/null", + "oldroot": self.disk, + "efidir": "/dev/null", + "bootdev": "/dev/null", + }, + "kernel": "linux", + } + return json.dumps(prefs) diff --git a/jade_gui/classes/jade_screen.py b/jade_gui/classes/jade_screen.py new file mode 100644 index 0000000..5a577c8 --- /dev/null +++ b/jade_gui/classes/jade_screen.py @@ -0,0 +1,19 @@ +class JadeScreen: + def __init__(self, set_valid): + super().__init__() + self._set_valid = set_valid + + self.valid = False + + def is_valid(self): + return self.valid + + def set_valid(self, valid: bool): + self.valid = valid + self._set_valid(valid) + + def on_show(self): + pass + + def on_complete(self): + pass diff --git a/jade_gui/classes/keymap.py b/jade_gui/classes/keymap.py new file mode 100644 index 0000000..4883a2a --- /dev/null +++ b/jade_gui/classes/keymap.py @@ -0,0 +1,25 @@ +# keymap.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +class Keymap: + def __init__(self, layout, variants, backend_layout): + self.layout = layout + self.variants = variants + self.backend_layout = backend_layout diff --git a/jade_gui/classes/locale.py b/jade_gui/classes/locale.py new file mode 100644 index 0000000..34e027c --- /dev/null +++ b/jade_gui/classes/locale.py @@ -0,0 +1,25 @@ +# locale.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +class locale: + def __init__(self, locales, region, location): + self.locales = locales + self.region = region + self.location = location diff --git a/jade_gui/classes/meson.build b/jade_gui/classes/meson.build new file mode 100644 index 0000000..3bc1e65 --- /dev/null +++ b/jade_gui/classes/meson.build @@ -0,0 +1,12 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +classesdir = join_paths(pkgdatadir, 'jade_gui/classes') + +jade_gui_sources = [ + '__init__.py', + 'locale.py', + 'keymap.py', + 'install_prefs.py', + 'partition.py', + 'jade_screen.py' +] +install_data(jade_gui_sources, install_dir: classesdir) diff --git a/jade_gui/classes/partition.py b/jade_gui/classes/partition.py new file mode 100644 index 0000000..b72776f --- /dev/null +++ b/jade_gui/classes/partition.py @@ -0,0 +1,31 @@ +# manualpartition.py +# +# Copyright 2022 axtlos +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0 + + +class Partition: + def __init__(self, partition, mountpoint, filesystem, size): + self.partition = partition + self.mountpoint = mountpoint + self.filesystem = filesystem + self.size = size + + def generate_jade_entry(self): + mountpoint = "/mnt" + self.mountpoint + if self.mountpoint == "none": + mountpoint = "none" + return mountpoint + ":/dev/" + self.partition[5:] + ":" + self.filesystem diff --git a/jade_gui/crystal-logo-minimal.png b/jade_gui/crystal-logo-minimal.png new file mode 100644 index 0000000..ed34926 Binary files /dev/null and b/jade_gui/crystal-logo-minimal.png differ diff --git a/jade_gui/desktops.py b/jade_gui/desktops.py new file mode 100644 index 0000000..15d30a2 --- /dev/null +++ b/jade_gui/desktops.py @@ -0,0 +1,8 @@ +desktops = [ + "Onyx", + "GNOME", + "Plasma", + "XFCE", + "Sway", + "i3", +] diff --git a/jade_gui/functions/__init__.py b/jade_gui/functions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/functions/desktop_screen.py b/jade_gui/functions/desktop_screen.py new file mode 100644 index 0000000..b0b9de9 --- /dev/null +++ b/jade_gui/functions/desktop_screen.py @@ -0,0 +1,48 @@ +# desktop_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from gi.repository import Gtk, Adw +from jade_gui.classes.jade_screen import JadeScreen + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/desktop_screen.ui") +class DesktopScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "DesktopScreen" + + list_desktops = Gtk.Template.Child() + + chosen_desktop = "" + move_to_summary = False + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + + self.list_desktops.connect("row-selected", self.selected_desktop) + + def selected_desktop(self, widget, row): + if row is not None: + print(row.get_title()) + self.chosen_desktop = row.get_title() + row.select_button.set_active(True) + + self.set_valid(True) + else: + print("row is none!!") diff --git a/jade_gui/functions/finished_screen.py b/jade_gui/functions/finished_screen.py new file mode 100644 index 0000000..6725e74 --- /dev/null +++ b/jade_gui/functions/finished_screen.py @@ -0,0 +1,87 @@ +# desktop_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import subprocess, shutil +from gi.repository import Gtk, Adw, GtkSource, Gdk +from gettext import gettext as _ +from jade_gui.utils.command import CommandUtils +from jade_gui.classes.jade_screen import JadeScreen + + +class LogWindow(Adw.Window): + def __init__(self, window, title, content, **kwargs): + super().__init__(**kwargs) + self.window = window + self.title = title + self.content = content + self.create_window() + self.set_default_size(700, 700) + + def create_window(self): + headerbar = Gtk.HeaderBar() + copy_button = Gtk.Button.new_from_icon_name("edit-copy-symbolic") + contentbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + scrolled_view = Gtk.ScrolledWindow(vexpand=True, hexpand=True) + style_scheme_manager = GtkSource.StyleSchemeManager.get_default() + text_buffer = GtkSource.Buffer( + highlight_syntax=False, + style_scheme=style_scheme_manager.get_scheme("oblivion"), + ) + text_view = GtkSource.View( + buffer=text_buffer, show_line_numbers=True, monospace=True + ) + text_buffer = text_view.get_buffer() + headerbar.set_title_widget(Gtk.Label.new(self.title)) + headerbar.pack_end(copy_button) + buffer_iter = text_buffer.get_end_iter() + text_buffer.insert(buffer_iter, self.content) + scrolled_view.set_child(text_view) + contentbox.append(headerbar) + contentbox.append(scrolled_view) + self.set_content(contentbox) + copy_button.connect("clicked", self.copy_content) + + def copy_content(self, widget): + clipboard = Gdk.Display.get_clipboard(Gdk.Display.get_default()) + clipboard.set_content(Gdk.ContentProvider.new_for_value(self.content)) + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/finished_screen.ui") +class FinishedScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "FinishedScreen" + + reboot_button = Gtk.Template.Child() + output_button = Gtk.Template.Child() + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + self.reboot_button.connect("clicked", self.reboot) + self.output_button.connect("clicked", self.output) + + self.set_valid(True) + + def reboot(self, widget): + CommandUtils.run_command(["gnome-session-quit", "--reboot"]) + + def output(self, widget): + with open("/tmp/jade-gui-output.txt", "r") as f: + output = f.read() + LogWindow(window=self.window, title="Jade log view", content=output).present() diff --git a/jade_gui/functions/install_screen.py b/jade_gui/functions/install_screen.py new file mode 100644 index 0000000..1269556 --- /dev/null +++ b/jade_gui/functions/install_screen.py @@ -0,0 +1,70 @@ +# installer_Screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import subprocess, os, shutil +import asyncio +from gi.repository import Gtk, GLib, Adw, Vte, Pango +from gettext import gettext as _ +from jade_gui.utils.command import CommandUtils +from jade_gui.classes.jade_screen import JadeScreen +import time + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/install_screen.ui") +class InstallScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "InstallScreen" + + log_box = Gtk.Template.Child() + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + + # Vte instance + self.vte_instance = Vte.Terminal() + self.vte_instance.set_cursor_blink_mode(Vte.CursorBlinkMode.ON) + self.vte_instance.set_mouse_autohide(True) + self.vte_instance.set_font(Pango.FontDescription("Source Code Pro Regular 12")) + self.log_box.append(self.vte_instance) + self.vte_instance.connect("child-exited", self.on_vte_child_exited) + + self.set_valid(False) + + def on_show(self): + prefs = self.window.summary_screen.installprefs.generate_json() + with open(os.getenv("HOME") + "/.config/jade.json", "w") as f: + f.write(prefs) + + prefs = self.window.summary_screen.installprefs.generate_json() + + self.vte_instance.spawn_async( + Vte.PtyFlags.DEFAULT, + ".", # working directory + ["bash", "/usr/share/jade-gui/jade_gui/scripts/install.sh"], + [], # environment + GLib.SpawnFlags.DO_NOT_REAP_CHILD, + None, + None, + -1, + None, + None, + ) + + def on_vte_child_exited(self, *args): + self.set_valid(True) diff --git a/jade_gui/functions/keyboard_screen.py b/jade_gui/functions/keyboard_screen.py new file mode 100644 index 0000000..b9f600b --- /dev/null +++ b/jade_gui/functions/keyboard_screen.py @@ -0,0 +1,143 @@ +# keyboard_Screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from jade_gui.locales.locales_list import locations +from jade_gui.widgets.layout import KeyboardLayout +from jade_gui.classes.jade_screen import JadeScreen +from jade_gui.utils.gtk_helpers import set_list_text +from gi.repository import Gtk, Adw +from gettext import gettext as _ +from jade_gui.utils.command import CommandUtils + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/keyboard/keyboard_screen.ui") +class KeyboardScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "KeyboardScreen" + + event_controller = Gtk.EventControllerKey.new() + + preview = Gtk.Template.Child() + keyboard_search_button = Gtk.Template.Child() + country_preview_list = Gtk.Template.Child() + variant_preview = Gtk.Template.Child() + variant_preview_list = Gtk.Template.Child() + + layout = None + variant = "" + move_to_summary = False + + def __init__(self, window, keymaps, set_valid, application, **kwargs): + super().__init__(set_valid=set_valid, **kwargs) + self.window = window + + builder = Gtk.Builder.new_from_resource( + "/al/getcryst/jadegui/pages/keyboard/keyboard_dialog.ui" + ) + self.search_dialog = builder.get_object("search_dialog") + + self.search_dialog.set_transient_for(self.window) + self.search_dialog.set_modal(self.window) + + self.keyboard_entry_search = builder.get_object("keyboard_entry_search") + self.layout_list = builder.get_object("layout_list") + self.keyboard_search = builder.get_object("keyboard_search") + self.select_variant_button = builder.get_object("select_variant_button") + + self.event_controller.connect("key-released", self.search_keyboards) + self.keyboard_entry_search.add_controller(self.event_controller) + + self.keyboard_search_button.connect("clicked", self.present_dialog) + self.select_variant_button.connect("clicked", self.confirm_selection) + + for keymap in keymaps: + layout = KeyboardLayout( + window=window, + country=keymap.layout, + country_shorthand=keymap.backend_layout, + application=application, + keymap=keymap, + **kwargs, + ) + self.layout_list.append(layout) + + for row in layout.rows: + if row.country_shorthand == "us" and row.variant == "normal": + self.variant = layout + self.select_variant(row) + + break + + def confirm_selection(self, *_): + self.search_dialog.hide() + + def select_variant(self, variant, *_): + self.variant = variant + + self.variant_preview.set_visible(variant.variant != "normal") + + set_list_text(self.country_preview_list, variant.country) + set_list_text(self.variant_preview_list, variant.variant) + + self.preview.set_description( + f'Test "{variant.country_shorthand} - {variant.variant}"' + ) + + self.set_xkbmap(variant.country_shorthand, variant.variant) + + self.set_valid(True) + + def set_xkbmap(self, layout, variant=None): + if variant is None or variant == "normal": + CommandUtils.run_command( + [ + "gsettings", + "set", + "org.gnome.desktop.input-sources", + "sources", + "[('xkb', '{}')]".format(layout), + ] + ) + else: + CommandUtils.run_command( + [ + "gsettings", + "set", + "org.gnome.desktop.input-sources", + "sources", + "[('xkb', '{}+{}')]".format(layout, variant), + ] + ) + + def present_dialog(self, *_): + self.search_dialog.present() + + def search_keyboards(self, *_): + terms = self.keyboard_entry_search.get_text() + self.layout_list.set_filter_func(self.filter_layouts, terms) + + @staticmethod + def filter_layouts(row, terms=None): + try: + text = row.get_title() + text = text.lower() + row.get_subtitle().lower() + if terms.lower() in text: + return True + except: + return True + return False diff --git a/jade_gui/functions/language_screen.py b/jade_gui/functions/language_screen.py new file mode 100644 index 0000000..8db2f53 --- /dev/null +++ b/jade_gui/functions/language_screen.py @@ -0,0 +1,71 @@ +# language_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, only +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from gi.repository import Gtk, Adw +from gettext import gettext as _ +from jade_gui.classes.jade_screen import JadeScreen + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/language_screen.ui") +class LanguageScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "LanguageScreen" + + event_controller = Gtk.EventControllerKey.new() + + ### Page and widgets on timezone screen + list_languages = Gtk.Template.Child() + language_entry_search = Gtk.Template.Child() + language_search = Gtk.Template.Child() + + chosen_language = None + move_to_summary = False + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + + self.event_controller.connect("key-released", self.search_languages()) + self.language_entry_search.add_controller(self.event_controller) + self.list_languages.connect("row-selected", self.selected_language) + self.next_page_button.connect("clicked", self.carousel_next) + + def selected_language(self, widget, row): + print(row) + if row is not None or row is not self.language_search: + print(row.get_title()) + self.chosen_language = row + + self.set_valid(True) + else: + print("row is none!!") + + def search_languages(self, *args): + terms = self.language_entry_search.get_text() + self.list_languages.set_filter_func(self.filter_languages, terms) + + @staticmethod + def filter_languages(row, terms=None): + try: + text = row.get_title() + text = text.lower() + row.get_subtitle().lower() + if terms.lower() in text: + return True + except: + return True + return False diff --git a/jade_gui/functions/locale_screen.py b/jade_gui/functions/locale_screen.py new file mode 100644 index 0000000..9f96ca7 --- /dev/null +++ b/jade_gui/functions/locale_screen.py @@ -0,0 +1,193 @@ +# locale_screen.py + +# +# Copyright 2022 axtlos + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from gi.repository import Gtk, Adw +from gettext import gettext as _ +import time, locale +from jade_gui.classes.jade_screen import JadeScreen +from jade_gui.widgets.locale import LocaleEntry +from jade_gui.widgets.selected_locale import SelectedLocale +from jade_gui.utils.gtk_helpers import set_list_text + + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/locale/locale_screen.ui") +class LocaleScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "LocaleScreen" + + event_controller = Gtk.EventControllerKey.new() + + ### Page and widgets on timezone screen + locale_search_button = Gtk.Template.Child() + status_page = Gtk.Template.Child() + + main_locale_list = Gtk.Template.Child() + other_locale_list = Gtk.Template.Child() + + empty_locales = Gtk.Template.Child() + + style_provider = Gtk.CssProvider() + date_preview = Gtk.Template.Child() + datespreview = Gtk.Template.Child() + number_preview = Gtk.Template.Child() + numberpreview = Gtk.Template.Child() + chosen_locales = [] + other_locales = [] + move_to_summary = False + + def __init__(self, window, locations, set_valid, application, **kwargs): + super().__init__(set_valid=set_valid, **kwargs) + self.window = window + self.application = application + self.kwargs = kwargs + self.style_provider.load_from_data(b".emptyLocales { font-style: italic; font-size: 15px; }") + Gtk.StyleContext.add_provider( + self.empty_locales.get_style_context(), + self.style_provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + + + builder = Gtk.Builder.new_from_resource( + "/al/getcryst/jadegui/pages/locale/locale_dialog.ui" + ) + self.search_dialog = builder.get_object("search_dialog") + + self.search_dialog.set_transient_for(self.window) + self.search_dialog.set_modal(self.window) + + self.locale_entry_search = builder.get_object("locale_entry_search") + self.locale_list = builder.get_object("locale_list") + self.locale_search = builder.get_object("locale_search") + + self.event_controller.connect("key-released", self.search_locales) + self.locale_entry_search.add_controller(self.event_controller) + self.locale_list.connect("row-selected", self.select_locale) + self.locale_search_button.connect("clicked", self.present_dialog) + + self._locale_list_length = 1 + + en_US = LocaleEntry( + page=self, + window=window, + locale="en_US.UTF-8 UTF-8", + button_group=None, + application=application, + **kwargs, + ) + self.locale_list.append(en_US) + if(len(self.chosen_locales) <= 0): + self.chosen_locales.append("en_US.UTF-8 UTF-8") + set_list_text(self.main_locale_list, self.chosen_locales[0]) + locales=["en_US.UTF-8 UTF-8"] # Keep a list of added locales to avoid duplicates + for i in locations: + for locale in i: + if locale.locales not in locales: + row = LocaleEntry( + page=self, + window=window, + locale=locale.locales, + button_group=en_US.main_locale_button, + application=application, + **kwargs, + ) + locales.append(locale.locales) + if row.locale in self.chosen_locales[0]: + row.main_locale_button.set_active(True) + self.locale_list.append(row) + self._locale_list_length += 1 + self.update_locale_preview() + + def present_dialog(self, *_): + self.search_dialog.present() + + def update_from_row(self, row): + if row.main_locale_button.get_active(): + set_list_text(self.main_locale_list, row.locale) + for i in self.other_locales: + if i.locale == row.locale: + self.update_selected_locale_list(remove=i.locale, row=i) + if self.other_locales == []: + self.empty_locales.show() + self.update_selected_locale_list(main=row.locale) + else: + self.empty_locales.set_visible(False) + locale = SelectedLocale( + page=self, + window=self.window, + locale=row.locale, + application=self.application, + **self.kwargs, + ) + self.update_selected_locale_list(add=row.locale, row=locale) + + def update_locale_preview(self): + locale.setlocale(locale.LC_ALL, self.chosen_locales[0][:-6]) + self.datespreview.set_label(time.strftime(locale.nl_langinfo(locale.D_T_FMT))) + self.numberpreview.set_label(locale.format_string("%.2f", 1234567.89, grouping=True)+" - "+locale.currency(1234.56, grouping=True)) + + def update_selected_locale_list(self, add=None, remove=None, main=None, row=None): + if main: + self.chosen_locales[0] = main + self.set_valid(True) + self.update_locale_preview() + if add: + if add not in self.chosen_locales: + self.chosen_locales.append(add) + if row is not None: + self.other_locales.append(row) + self.other_locale_list.add_row(row) + if remove: + if remove != self.chosen_locales[0]: + self.chosen_locales.remove(remove) + if row is not None: + self.other_locales.remove(row) + self.other_locale_list.remove(row) + if self.other_locales == []: + self.empty_locales.show() + else: + print("Tried to remove main locale!!") + return + print(self.chosen_locales) + + def select_locale(self, widget, row): + self.search_dialog.hide() + + self.status_page.set_description("") + self.update_from_row(row) + + def search_locales(self, *args): + terms = self.locale_entry_search.get_text() + self.locale_list.set_filter_func(self.filter_locales, terms) + + def on_show(self): + self.chosen_locales = [self.window.timezone_screen.chosen_timezone.locale] + if self.chosen_locales != []: + self.set_valid(True) + + @staticmethod + def filter_locales(row, terms=None): + try: + text = row.get_title() + text = text.lower() + row.get_subtitle().lower() + if terms.lower() in text: + return True + except: + return True + return False diff --git a/jade_gui/functions/meson.build b/jade_gui/functions/meson.build new file mode 100644 index 0000000..008c2d3 --- /dev/null +++ b/jade_gui/functions/meson.build @@ -0,0 +1,18 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +functionsdir = join_paths(pkgdatadir, 'jade_gui/functions') + +jade_gui_sources = [ + '__init__.py', + 'keyboard_screen.py', + 'timezone_screen.py', + 'locale_screen.py', + 'user_screen.py', + 'desktop_screen.py', + 'misc_screen.py', + 'partition_screen.py', + 'summary_screen.py', + 'install_screen.py', + 'finished_screen.py', + 'welcome_screen.py' +] +install_data(jade_gui_sources, install_dir: functionsdir) diff --git a/jade_gui/functions/misc_screen.py b/jade_gui/functions/misc_screen.py new file mode 100644 index 0000000..58bfb08 --- /dev/null +++ b/jade_gui/functions/misc_screen.py @@ -0,0 +1,51 @@ +# misc_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, Adw +from gettext import gettext as _ +from jade_gui.classes.jade_screen import JadeScreen + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/misc_screen.ui") +class MiscScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "MiscScreen" + + hostname_entry = Gtk.Template.Child() + ipv_switch = Gtk.Template.Child() + timeshift_switch = Gtk.Template.Child() + zramd_switch = Gtk.Template.Child() + + hostname = "crystal" + ipv_enabled = False + zramd_enabled = False + timeshift_enabled = True + zramd_enabled = True + move_to_summary = False + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + + self.set_valid(True) + + def on_complete(self, *_): + self.hostname = self.hostname_entry.get_text() + self.ipv_enabled = self.ipv_switch.get_state() + self.zramd_enabled = self.zramd_switch.get_state() + self.timeshift_enabled = self.timeshift_switch.get_state() diff --git a/jade_gui/functions/partition_screen.py b/jade_gui/functions/partition_screen.py new file mode 100644 index 0000000..4b319f7 --- /dev/null +++ b/jade_gui/functions/partition_screen.py @@ -0,0 +1,105 @@ +# partition_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import subprocess, shutil +from gi.repository import Gtk, Adw +from gettext import gettext as _ +from jade_gui.utils import disks +from jade_gui.utils.command import CommandUtils +from jade_gui.widgets.partition import PartitionEntry +from jade_gui.classes.partition import Partition +from jade_gui.classes.jade_screen import JadeScreen + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/partition_screen.ui") +class PartitionScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "PartitionScreen" + + disk_list = Gtk.Template.Child() + open_bash = Gtk.Template.Child() + open_gparted = Gtk.Template.Child() + partition_list = Gtk.Template.Child() + reload_partitions = Gtk.Template.Child() + manual_partitioning = Gtk.Template.Child() + automatic_partitioning = Gtk.Template.Child() + manual_partitioning_page = Gtk.Template.Child() + automatic_partitioning_page = Gtk.Template.Child() + + selected_partition = None + move_to_summary = False + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + self.disk_list.connect("row_selected", self.row_selected) + self.manual_partitioning.connect("clicked", self.switch_manual_partitioning) + self.reload_partitions.connect("clicked", self.check_partitions) + self.automatic_partitioning.connect( + "clicked", self.switch_automatic_partitioning + ) + self.open_bash.connect("clicked", self.bash) + self.open_gparted.connect("clicked", self.gparted) + + def gparted(self, widget): + CommandUtils.run_command(["pkexec", "gparted"]) + + def bash(self, widget): + CommandUtils.run_command(["kgx", "-e", "/usr/bin/bash"]) + + def check_partitions(self, widget): + self.partition_list.select_all() + print(self.partition_list.get_row_at_index(2)) + for i in range(0, len(self.window.available_partitions)): + self.partition_list.remove(self.partition_list.get_row_at_index(0)) + self.available_partitions = disks.get_partitions() + self.window.available_partitions = self.available_partitions + for partition in self.available_partitions: + self.partition_list.append( + PartitionEntry( + window=self, + partition=Partition( + partition=partition, + mountpoint="", + filesystem="", + size=disks.get_disk_size(partition), + ), + application=None, + ) + ) + + def switch_automatic_partitioning(self, widget): + self.automatic_partitioning_page.set_visible(True) + self.manual_partitioning_page.set_visible(False) + self.set_valid(False) + self.window.partition_mode = "Auto" + + def switch_manual_partitioning(self, widget): + self.automatic_partitioning_page.set_visible(False) + self.manual_partitioning_page.set_visible(True) + self.set_valid(False) + self.window.partition_mode = "Manual" + + def row_selected(self, widget, row): + if row is not None: + print(row.get_title()) + row.select_button.set_active(True) + self.selected_partition = row + + self.set_valid(True) + else: + print("ERROR: invalid row slected") diff --git a/jade_gui/functions/summary_screen.py b/jade_gui/functions/summary_screen.py new file mode 100644 index 0000000..77a8b35 --- /dev/null +++ b/jade_gui/functions/summary_screen.py @@ -0,0 +1,191 @@ +# summary_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +from jade_gui.utils import disks +from jade_gui.classes.install_prefs import InstallPrefs +from jade_gui.utils.threading import RunAsync +from jade_gui.classes.jade_screen import JadeScreen +from gi.repository import Gtk, Adw +from gettext import gettext as _ + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/summary_screen.ui") +class SummaryScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "SummaryScreen" + + timezone_label = Gtk.Template.Child() + timezone_button = Gtk.Template.Child() + locales = Gtk.Template.Child() + keyboard_label = Gtk.Template.Child() + keyboard_button = Gtk.Template.Child() + username_label = Gtk.Template.Child() + username_button = Gtk.Template.Child() + sudo_label = Gtk.Template.Child() + sudo_button = Gtk.Template.Child() + root_label = Gtk.Template.Child() + root_button = Gtk.Template.Child() + desktop_label = Gtk.Template.Child() + desktop_button = Gtk.Template.Child() + partition_label = Gtk.Template.Child() + partition_button = Gtk.Template.Child() + uefi_label = Gtk.Template.Child() + ipv_label = Gtk.Template.Child() + ipv_button = Gtk.Template.Child() + timeshift_label = Gtk.Template.Child() + timeshift_button = Gtk.Template.Child() + zramd_label = Gtk.Template.Child() + zramd_button = Gtk.Template.Child() + added_locales = [] + # unakite_label = Gtk.Template.Child() + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + + self.set_valid(True) + + self.locale_button = Gtk.Button( + icon_name="document-edit-symbolic", + halign="center", + valign="center" + ) + self.locales.add_action(self.locale_button) + + self.timezone_button.connect( + "clicked", self.window.show_page, self.window.timezone_screen + ) + self.locale_button.connect( + "clicked", self.window.show_page, self.window.locale_screen + ) + self.keyboard_button.connect( + "clicked", self.window.show_page, self.window.keyboard_screen + ) + self.username_button.connect( + "clicked", self.window.show_page, self.window.user_screen + ) + self.sudo_button.connect( + "clicked", self.window.show_page, self.window.user_screen + ) + self.root_button.connect( + "clicked", self.window.show_page, self.window.user_screen + ) + self.desktop_button.connect( + "clicked", self.window.show_page, self.window.desktop_screen + ) + self.partition_button.connect( + "clicked", self.window.show_page, self.window.partition_screen + ) + self.ipv_button.connect( + "clicked", self.window.show_page, self.window.misc_screen + ) + self.timeshift_button.connect( + "clicked", self.window.show_page, self.window.misc_screen + ) + self.zramd_button.connect( + "clicked", self.window.show_page, self.window.misc_screen + ) + + def on_show(self): + self.timezone_label.set_title( + self.window.timezone_screen.chosen_timezone.region + + "/" + + self.window.timezone_screen.chosen_timezone.location + ) + for i in self.window.locale_screen.chosen_locales: + if i not in self.added_locales: + self.locales.add_row( + Adw.ActionRow( + title=i, + activatable=False, + selectable=False, + subtitle="Main locale" if i == self.window.locale_screen.chosen_locales[0] else "" + ) + ) + self.added_locales.append(i) + if len(self.window.locale_screen.chosen_locales) >= 5: + self.locales.set_expanded(False) + else: + self.locales.set_expanded(True) + + self.keyboard_label.set_title(self.window.keyboard_screen.variant.country) + self.keyboard_label.set_subtitle(self.window.keyboard_screen.variant.variant) + + self.username_label.set_title(self.window.user_screen.username) + self.sudo_label.set_title( + "sudo enabled" if self.window.user_screen.sudo_enabled else "sudo disabled" + ) + self.root_label.set_title( + "root enabled" if self.window.user_screen.root_enabled else "root disabled" + ) + + self.desktop_label.set_title(self.window.desktop_screen.chosen_desktop) + + if self.window.partition_mode == "Manual": + self.partition_label.set_title("Manual partitioning selected") + self.partition_label.set_subtitle("") + else: + self.partition_label.set_title( + self.window.partition_screen.selected_partition.disk + ) + self.partition_label.set_subtitle( + self.window.partition_screen.selected_partition.disk_size + ) + self.uefi_label.set_title("UEFI" if disks.get_uefi() else "Legacy BIOS") + + self.ipv_label.set_title( + "ipv6 enabled" if self.window.misc_screen.ipv_enabled else "ipv6 disabled" + ) + self.timeshift_label.set_title( + "timeshift enabled" + if self.window.misc_screen.timeshift_enabled + else "timeshift disabled" + ) + self.zramd_label.set_title( + "zramd enabled" + if self.window.misc_screen.zramd_enabled + else "zramd disabled" + ) + # self.unakite_label.set_title("Unakite enabled "+"enabled" if self.window.misc_screen.) + + partitions = [] + for i in range(0, len(self.window.available_partitions)): + partition = self.window.partition_screen.partition_list.get_row_at_index( + i + ).partition + partitions.append(partition.generate_jade_entry()) + + self.installprefs = InstallPrefs( + timezone=self.window.timezone_screen.chosen_timezone, + locale=self.window.locale_screen.chosen_locales, + layout=self.window.keyboard_screen.variant, + variant=self.window.keyboard_screen.variant, + username=self.window.user_screen.username, + password=self.window.user_screen.password, + enable_sudo=self.window.user_screen.sudo_enabled, + disk=self.window.partition_screen.selected_partition, + hostname=self.window.misc_screen.hostname, + ipv_enabled=self.window.misc_screen.ipv_enabled, + timeshift_enabled=self.window.misc_screen.timeshift_enabled, + zramd_enabled=self.window.misc_screen.zramd_enabled, + desktop=self.window.desktop_screen.chosen_desktop, + partition_mode=self.window.partition_mode, + partitions=partitions, + ) + print(self.installprefs.generate_json()) diff --git a/jade_gui/functions/timezone_screen.py b/jade_gui/functions/timezone_screen.py new file mode 100644 index 0000000..161627f --- /dev/null +++ b/jade_gui/functions/timezone_screen.py @@ -0,0 +1,173 @@ +# timezone_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from gi.repository import Gtk, Adw +from gettext import gettext as _ +import requests +from jade_gui.classes.jade_screen import JadeScreen +from jade_gui.widgets.timezone import TimezoneEntry +from jade_gui.utils.gtk_helpers import set_list_text + +from datetime import datetime, timedelta +from pytz import timezone +import pytz +from tzlocal import get_localzone_name + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/timezone/timezone_screen.ui") +class TimezoneScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "TimezoneScreen" + + event_controller = Gtk.EventControllerKey.new() + + ### Page and widgets on timezone screen + timezone_search_button = Gtk.Template.Child() + status_page = Gtk.Template.Child() + + region_preview_list = Gtk.Template.Child() + location_preview_list = Gtk.Template.Child() + + preview = Gtk.Template.Child() + preview_row = Gtk.Template.Child() + + chosen_timezone = None + move_to_summary = False + guessed_timezone = None + + def __init__(self, window, locations, set_valid, application, **kwargs): + super().__init__(set_valid=set_valid, **kwargs) + self.window = window + + builder = Gtk.Builder.new_from_resource( + "/al/getcryst/jadegui/pages/timezone/timezone_dialog.ui" + ) + self.search_dialog = builder.get_object("search_dialog") + + self.search_dialog.set_transient_for(self.window) + self.search_dialog.set_modal(self.window) + + self.timezone_entry_search = builder.get_object("timezone_entry_search") + self.timezone_list = builder.get_object("timezone_list") + self.timezone_search = builder.get_object("timezone_search") + + self.event_controller.connect("key-released", self.search_timezones) + self.timezone_entry_search.add_controller(self.event_controller) + self.timezone_list.connect("row-selected", self.select_timezone) + self.timezone_search_button.connect("clicked", self.present_dialog) + + tz = get_localzone_name() + + # It is sad that ListBox does not have a .length or something + # like that + # + # ˄˄ real + self._timezone_list_length = 0 + + for i in locations: + for locale in i: + row = TimezoneEntry( + window=window, + region=locale.region, + location=locale.location, + locale=locale.locales, + application=application, + **kwargs, + ) + + if tz == str(row): + self.update_from_row(row) + self.chosen_timezone = row + + self.timezone_list.append(row) + self._timezone_list_length += 1 + + def present_dialog(self, *_): + self.search_dialog.present() + + def update_from_row(self, row): + set_list_text(self.location_preview_list, row.location) + set_list_text(self.region_preview_list, row.region) + + + tz = row.get_timezone() + + utc_now = datetime.now(pytz.utc) + tz_now = utc_now.astimezone(tz) + + self.preview.set_visible(True) + self.preview.set_title("Preview") + self.preview.set_description(f"Time in {tz_now.strftime('%Z (UTC %z)')}") + self.preview_row.set_title(tz_now.strftime("%H:%M:%S")) + self.preview_row.set_subtitle(tz_now.strftime("%a %-d %B %Y")) + + def ip_request_timezone(self): + print("guessing your timezone") + + try: + r = requests.get("https://geoip.kde.org/v1/calamares") + self.guessed_timezone = r.json()["time_zone"] + + split = self.guessed_timezone.split("/") + + for i in range(self._timezone_list_length): + row = self.timezone_list.get_row_at_index(i) + if row.region == split[0] and row.location == split[1]: + self.chosen_timezone = row + self.set_valid(True) + + self.update_from_row(row) + + self.status_page.set_description( + f"Automatically detected {row.location}." + ) + + print(f'Guessed timezone as "{self.guessed_timezone}"!') + break + except Exception as e: + print("Failed to detect IP timezone!", e) + + def select_timezone(self, widget, row): + self.search_dialog.hide() + + self.status_page.set_description("") + self.update_from_row(row) + + if row is not None or row is not self.timezone_search: + print(row.get_title()) + self.chosen_timezone = row + + self.set_valid(True) + else: + print("row is none!!") + + def search_timezones(self, *args): + terms = self.timezone_entry_search.get_text() + self.timezone_list.set_filter_func(self.filter_timezones, terms) + + @staticmethod + def filter_timezones(row, terms=None): + try: + text = row.get_title() + text = text.lower() + row.get_subtitle().lower() + if terms.lower() in text: + return True + except: + return True + return False diff --git a/jade_gui/functions/user_screen.py b/jade_gui/functions/user_screen.py new file mode 100644 index 0000000..3f00f21 --- /dev/null +++ b/jade_gui/functions/user_screen.py @@ -0,0 +1,123 @@ +# user_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from gi.repository import Gtk, Adw +from gettext import gettext as _ +import re, subprocess, shutil +from jade_gui.classes.jade_screen import JadeScreen + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/user_screen.ui") +class UserScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "UserScreen" + + username_entry = Gtk.Template.Child() + password_entry = Gtk.Template.Child() + password_confirmation = Gtk.Template.Child() + enable_sudo_switch = Gtk.Template.Child() + enable_root_switch = Gtk.Template.Child() + + username = "" + sudo_enabled = True + root_enabled = True + username_filled = False + password_filled = False + move_to_summary = False + + def __init__(self, window, application, **kwargs): + super().__init__(**kwargs) + self.window = window + self.sudo_enabled = True + self.root_enabled = True + self.enable_root_switch.set_active(self.root_enabled) + self.enable_sudo_switch.set_active(self.sudo_enabled) + self.username_entry.connect("changed", self.username_passes_regex) + self.enable_root_switch.connect("state-set", self.enable_root_user) + self.enable_sudo_switch.connect("state-set", self.enable_sudo) + self.password_entry.connect("changed", self.verify_password) + self.password_confirmation.connect("changed", self.verify_password) + + def username_passes_regex(self, widget): + input = self.username_entry.get_text() + print(input) + if not re.search("^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$", input): + print("Invalid username!") + self.username_entry.add_css_class("error") + self.username_filled = False + self.verify_continue() + else: + print("Valid username!") + self.username_entry.remove_css_class("error") + self.username_filled = True + self.verify_continue() + self.username = input + + def enable_root_user(self, widget, switch_state): + print("root") + print(self.root_enabled) + print(switch_state) + if switch_state == False and not self.sudo_enabled: + self.root_enabled = switch_state + self.sudo_enabled = not switch_state + self.enable_sudo_switch.set_active(not switch_state) + else: + self.root_enabled = switch_state + + def enable_sudo(self, widget, switch_state): + print("sudo") + print(self.root_enabled) + print(switch_state) + if switch_state == False and not self.root_enabled: + self.sudo_enabled = switch_state + self.root_enabled = not switch_state + self.enable_root_switch.set_active(not switch_state) + else: + self.sudo_enabled = switch_state + + def verify_password(self, widget): + if ( + self.password_entry.get_text() == self.password_confirmation.get_text() + and self.password_entry.get_text().strip() + ): + self.password_filled = True + self.verify_continue() + self.password_confirmation.remove_css_class("error") + self.password = self.encrypt_password(self.password_entry.get_text()) + self.password = ( + "'" + self.encrypt_password(self.password_entry.get_text()) + "'" + ) + else: + self.password_filled = False + self.verify_continue() + self.password_confirmation.add_css_class("error") + + def verify_continue(self): + self.set_valid(self.password_filled and self.username_filled) + + def encrypt_password(self, password): + command = subprocess.run( + [shutil.which("openssl"), "passwd", "-6", password], capture_output=True + ) + password_encrypted = command.stdout.decode("utf-8").strip("\n") + return password_encrypted + + def carousel_next_summary(self, widget): + self.next_page.move_to_summary = True + self.carousel.scroll_to(self.next_page, True) diff --git a/jade_gui/functions/welcome_screen.py b/jade_gui/functions/welcome_screen.py new file mode 100644 index 0000000..fb15741 --- /dev/null +++ b/jade_gui/functions/welcome_screen.py @@ -0,0 +1,64 @@ +# welcome_screen.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import time +import urllib.request +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ +from jade_gui.classes.jade_screen import JadeScreen + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/pages/welcome_screen.ui") +class WelcomeScreen(JadeScreen, Adw.Bin): + __gtype_name__ = "WelcomeScreen" + + next_button = Gtk.Template.Child() + no_internet = Gtk.Template.Child() + + def __init__(self, window, next_page, online, application, **kwargs): + super().__init__(**kwargs) + self.window = window + self.next_page = next_page + self.online = online + + self.set_valid(True) + + self.next_button.connect("clicked", next_page) + + self.do_check_internet = True + + def check_internet(self): + while self.do_check_internet: + try: + urllib.request.urlopen("https://getcryst.al", timeout=1) + self.online() + if not self.next_button.get_sensitive(): + GLib.idle_add(self.allow_continue, True) + + self.do_check_internet = False + print("internet!") + except: + GLib.idle_add(self.allow_continue, False) + print("no internet!") + time.sleep(1) + + def allow_continue(self, allow: bool): + self.set_valid(allow) + self.next_button.set_sensitive(allow) + self.no_internet.set_visible(not allow) diff --git a/jade_gui/gtk/help-overlay.ui b/jade_gui/gtk/help-overlay.ui new file mode 100644 index 0000000..9b66861 --- /dev/null +++ b/jade_gui/gtk/help-overlay.ui @@ -0,0 +1,39 @@ + + + + + true + + + shortcuts + 10 + + + General + + + Show Shortcuts + win.show-help-overlay + + + + + Quit + app.quit + + + + + + + + diff --git a/jade_gui/jade_gui.gresource.xml b/jade_gui/jade_gui.gresource.xml new file mode 100644 index 0000000..6c4442a --- /dev/null +++ b/jade_gui/jade_gui.gresource.xml @@ -0,0 +1,41 @@ + + + + window.ui + about.ui + widgets/timezone.ui + widgets/layout.ui + widgets/variant.ui + widgets/desktop.ui + widgets/disk.ui + widgets/partition.ui + widgets/locale.ui + widgets/selected_locale.ui + pages/desktop_screen.ui + pages/finished_screen.ui + pages/install_screen.ui + pages/keyboard/keyboard_screen.ui + pages/keyboard/keyboard_dialog.ui + pages/misc_screen.ui + pages/partition_screen.ui + pages/summary_screen.ui + pages/timezone/timezone_screen.ui + pages/user_screen.ui + pages/welcome_screen.ui + pages/timezone/timezone_dialog.ui + pages/locale/locale_dialog.ui + pages/locale/locale_screen.ui + gtk/help-overlay.ui + crystal-logo-minimal.png + style.css + + + ../data/icons/padlock2-symbolic.svg + ../data/icons/right-symbolic.svg + ../data/icons/left-symbolic.svg + ../data/icons/loupe-symbolic.svg + ../data/icons/clock-alt-symbolic.svg + + diff --git a/jade_gui/jade_gui.in b/jade_gui/jade_gui.in new file mode 100755 index 0000000..ba35488 --- /dev/null +++ b/jade_gui/jade_gui.in @@ -0,0 +1,46 @@ +#!@PYTHON@ + +# jade_gui.in + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import signal +import locale +import gettext + +VERSION = '@VERSION@' +pkgdatadir = '@pkgdatadir@' +localedir = '@localedir@' + +sys.path.insert(1, pkgdatadir) +signal.signal(signal.SIGINT, signal.SIG_DFL) +locale.bindtextdomain('jade_gui', localedir) +locale.textdomain('jade_gui') +gettext.install('jade_gui', localedir) + +if __name__ == '__main__': + import gi + + from gi.repository import Gio + resource = Gio.Resource.load(os.path.join(pkgdatadir, 'jade_gui.gresource')) + resource._register() + + from jade_gui import main + sys.exit(main.main(VERSION)) diff --git a/jade_gui/keymaps.py b/jade_gui/keymaps.py new file mode 100644 index 0000000..9c3949f --- /dev/null +++ b/jade_gui/keymaps.py @@ -0,0 +1,1147 @@ +from jade_gui.classes.keymap import Keymap + +keymaps = [ + Keymap( + layout="Afghanistan", + backend_layout="af", + variants=[ + "normal", + "fa-olpc", + "olpc-ps", + "ps", + "uz", + "uz-olpc", + ], + ), + Keymap( + layout="Albania", + backend_layout="al", + variants=[ + "normal", + "plisi", + "veqilharxhi", + ], + ), + Keymap( + layout="Armenia", + backend_layout="am", + variants=[ + "normal", + "eastern", + "eastern-alt", + "phonetic", + "phonetic-alt", + "western", + ], + ), + Keymap( + layout="Arabic", + backend_layout="ara", + variants=[ + "normal", + "azerty", + "azerty_digits", + "buckwalter", + "digits", + "mac", + "olpc", + "qwerty", + "qwerty_digits", + ], + ), + Keymap( + layout="Austria", + backend_layout="at", + variants=[ + "normal", + "mac", + "nodeadkeyrs", + ], + ), + Keymap( + layout="Australia", + backend_layout="au", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Azerbaijan", + backend_layout="az", + variants=[ + "normal", + "cyrillic", + ], + ), + Keymap( + layout="Bosnia and Herzegovina", + backend_layout="ba", + variants=[ + "normal", + "alternatequotes", + "unicode", + "unicodeus", + "us", + ], + ), + Keymap( + layout="Bangladesh", + backend_layout="bd", + variants=[ + "normal", + "probhat", + ], + ), + Keymap( + layout="Belgium", + backend_layout="be", + variants=[ + "normal", + "iso-alternate", + "nodeadkeys", + "oss", + "oss_latin9", + "wang", + ], + ), + Keymap( + layout="Bulgaria", + backend_layout="bg", + variants=[ + "normal", + "bas_phonetic", + "bekl", + "phonetic", + ], + ), + Keymap( + layout="Brazil", + backend_layout="br", + variants=[ + "normal", + "dvorak", + "nativo", + "nativo-epo", + "nativo-us", + "nodeadkeys", + "thinkpad", + ], + ), + Keymap( + layout="Bhutan", + backend_layout="bt", + variants=[ + "normal", + "latin", + ], + ), + Keymap( + layout="Botswana", + backend_layout="bw", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Belarus", + backend_layout="by", + variants=[ + "normal", + "intl", + "latin", + "legacy", + "ru", + ], + ), + Keymap( + layout="Canada", + backend_layout="ca", + variants=[ + "normal", + "eng", + "fr-dvorak", + "fr-legacy", + "ike", + "multi", + "multi-2gr", + "multix", + ], + ), + Keymap( + layout="Democratic Republic of Congo", + backend_layout="cd", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Switzerland", + backend_layout="ch", + variants=[ + "normal", + "de_mac", + "de_nodeadkeys", + "fr", + "fr_mac", + "fr_nodeadkeys", + "legacy", + ], + ), + Keymap( + layout="Cameroon", + backend_layout="cm", + variants=[ + "normal", + "azerty", + "dvorak", + "french", + "mmuock", + "qwerty", + ], + ), + Keymap( + layout="China", + backend_layout="cn", + variants=[ + "normal", + "altgr-pinyin", + "mon_manchu_galik", + "mon_todo_galik", + "mon_trad", + "mon_trad_galik", + "mon_trad_manchu", + "mon_trad_todo", + "mon_trad_xibe", + "tib", + "tib_asciinum", + "ug", + ], + ), + Keymap( + layout="Czechia", + backend_layout="cz", + variants=[ + "normal", + "bksl", + "dvorak-ucw", + "qwerty", + "qwerty-mac", + "qwerty_bksl", + "rus", + "ucw", + ], + ), + Keymap( + layout="Germany", + backend_layout="de", + variants=[ + "normal", + "T3", + "deadacute", + "deadgraveacute", + "deadtilde", + "dsb", + "dsb_qwertz", + "dvorak", + "e1", + "e2", + "mac", + "mac_nodeadkeys", + "neo", + "nodeadkeys", + "qwerty", + "ro", + "ro_nodeadkeys", + "ru", + "tr", + "us", + ], + ), + Keymap( + layout="Denmark", + backend_layout="dk", + variants=[ + "normal", + "dvorak", + "mac", + "mac_nodeadkeys", + "nodeadkeys", + "winkeys", + ], + ), + Keymap( + layout="Algeria", + backend_layout="dz", + variants=[ + "normal", + "ar", + "azerty-deadkeys", + "ber", + "qwerty-gb-deadkeys", + "qwerty-us-deadkeys", + ], + ), + Keymap( + layout="Estonia", + backend_layout="ee", + variants=[ + "normal", + "dvorak", + "nodeadkeys", + "us", + ], + ), + Keymap( + layout="Spain", + backend_layout="es", + variants=[ + "normal", + "ast", + "cat", + "deadtilde", + "dvorak", + "mac", + "nodeadkeys", + "winkeys", + ], + ), + Keymap( + layout="Ethiopia", + backend_layout="et", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Finland", + backend_layout="fi", + variants=[ + "normal", + "normal" "classic", + "mac", + "nodeadkeys", + "smi", + "winkeys", + ], + ), + Keymap( + layout="Faroe Islands", + backend_layout="fo", + variants=[ + "normal", + "nodeadkeys", + ], + ), + Keymap( + layout="France", + backend_layout="fr", + variants=[ + "normal", + "afnor", + "azerty", + "bepo", + "bepo_afnor", + "bepo_latin9", + "bre", + "dvorak", + "geo", + "latin9", + "latin9_nodeadkeys", + "mac", + "nodeadkeys", + "oci", + "oss", + "oss_latin9", + "oss_nodeadkeys", + "us", + ], + ), + Keymap( + layout="Great Britian", + backend_layout="gb", + variants=[ + "normal", + "colemak", + "colemak_dh", + "dvorak", + "dvorakukp", + "extd", + "intl", + "mac", + "mac_intl", + "pl", + ], + ), + Keymap( + layout="Georgia", + backend_layout="ge", + variants=[ + "normal", + "ergonomic", + "mess", + "os", + "ru", + ], + ), + Keymap( + layout="Ghana", + backend_layout="gh", + variants=[ + "normal", + "akan", + "avn", + "ewe", + "fula", + "ga", + "generic", + "gillbt", + "hausa", + ], + ), + Keymap( + layout="Guinea", + backend_layout="gn", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Greece", + backend_layout="gr", + variants=[ + "normal", + "extended", + "nodeadkeys", + "polytonic", + "simple", + ], + ), + Keymap( + layout="Croatia", + backend_layout="hr", + variants=[ + "normal", + "alternatequotes", + "unicode", + "unicodeus", + "us", + ], + ), + Keymap( + layout="Hungary", + backend_layout="hu", + variants=[ + "normal", + "101_qwerty_comma_dead", + "101_qwerty_comma_nodead", + "101_qwerty_dot_dead", + "101_qwerty_dot_nodead", + "101_qwertz_comma_dead", + "101_qwertz_comma_nodead", + "101_qwertz_dot_dead", + "101_qwertz_dot_nodead", + "102_qwerty_comma_dead", + "102_qwerty_comma_nodead", + "102_qwerty_dot_dead", + "102_qwerty_dot_nodead", + "102_qwertz_comma_dead", + "102_qwertz_comma_nodead", + "102_qwertz_dot_dead", + "102_qwertz_dot_nodead", + "nodeadkeys", + "qwerty", + "standard", + ], + ), + Keymap( + layout="Indonesia", + backend_layout="id", + variants=[ + "normal", + "phoneticx", + ], + ), + Keymap( + layout="Ireland", + backend_layout="ie", + variants=[ + "normal", + "CloGaelach", + "UnicodeExpert", + "ogam", + "ogam_is434", + ], + ), + Keymap( + layout="Israel", + backend_layout="il", + variants=[ + "normal", + "biblical", + "lyx", + "phonetic", + ], + ), + Keymap( + layout="India", + backend_layout="in", + variants=[ + "normal", + "ben", + "ben_baishakhi", + "ben_bornona", + "ben_gitanjali", + "ben_inscript", + "ben_probhat", + "bolnagri", + "eeyek", + "eng", + "guj", + "guru", + "hin-kagapa", + "hin-wx", + "iipa", + "jhelum", + "kan", + "kan-kagapa", + "mal", + "mal_enhanced", + "mal_lalitha", + "mar-kagapa", + "marathi", + "olck", + "ori", + "ori-bolnagri", + "ori-wx", + "san-kagapa", + "tam", + "tam_tamilnet", + "tam_tamilnet_TAB", + "tam_tamilnet_TSCII", + "tam_tamilnet_with_tam_nums", + "tel", + "tel-kagapa", + "tel-sarala", + "urd-phonetic", + "urd-phonetic3", + "urd-winkeys", + ], + ), + Keymap( + layout="Iraq", + backend_layout="iq", + variants=[ + "normal", + "ku", + "ku_alt", + "ku_ara", + "ku_f", + ], + ), + Keymap( + layout="Iran", + backend_layout="ir", + variants=[ + "normal", + "ku", + "ku_alt", + "ku_ara", + "ku_f", + "pes_keypad", + ], + ), + Keymap( + layout="Iceland", + backend_layout="is", + variants=[ + "normal", + "ku", + "ku_alt", + "ku_ara", + "ku_f", + "pes_keypad", + ], + ), + Keymap( + layout="Italy", + backend_layout="it", + variants=[ + "normal", + "fur", + "geo", + "ibm", + "intl", + "mac", + "nodeadkeys", + "scn", + "us", + "winkeys", + ], + ), + Keymap( + layout="Japan", + backend_layout="jp", + variants=[ + "normal", + "OADG109A", + "dvorak", + "kana", + "kana86", + "mac", + ], + ), + Keymap( + layout="Kenya", + backend_layout="ke", + variants=[ + "normal", + "kik", + ], + ), + Keymap( + layout="Kyrgyzstan", + backend_layout="kg", + variants=[ + "normal", + "phonetic", + ], + ), + Keymap( + layout="Cambodia", + backend_layout="kh", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="The Republic of Korea", + backend_layout="kr", + variants=[ + "normal", + "kr104", + ], + ), + Keymap( + layout="Kazakhstan", + backend_layout="kz", + variants=[ + "normal", + "ext", + "kazrus", + "latin", + "ruskaz", + ], + ), + Keymap( + layout="Laos", + backend_layout="la", + variants=[ + "normal", + "stea", + ], + ), + Keymap( + layout="Sri Lanka", + backend_layout="lk", + variants=[ + "normal", + "tam_TAB", + "tam_unicode", + "us", + ], + ), + Keymap( + layout="Lithuania", + backend_layout="lt", + variants=[ + "normal", + "ibm", + "lekp", + "lekpa", + "ratise", + "sgs", + "std", + "us", + ], + ), + Keymap( + layout="Latin America", + backend_layout="la-latin1", + variants=[ + "normal", + ], + ), + Keymap( + layout="Lativa", + backend_layout="lv", + variants=[ + "normal", + "adapted", + "apostrophe", + "ergonomic", + "fkey", + "modern", + "tilde", + ], + ), + Keymap( + layout="Morocco", + backend_layout="ma", + variants=[ + "normal", + "french", + "tifinagh", + "tifinagh-alt", + "tifinagh-alt-phonetic", + "tifinagh-extended", + "tifinagh-extended-phonetic", + "tifinagh-phonetic", + ], + ), + Keymap( + layout="Moldova", + backend_layout="md", + variants=[ + "normal", + "gag", + ], + ), + Keymap( + layout="Montenegro", + backend_layout="me", + variants=[ + "normal", + "cyrillic", + "cyrillicalternatequotes", + "cyrillicyz", + "latinalternatequotes", + "latinunicode", + "latinunicodeyz", + "latinyz", + ], + ), + Keymap( + layout="Republic of North Macedonia", + backend_layout="mk", + variants=[ + "normal", + "nodeadkeys", + ], + ), + Keymap( + layout="Mali", + backend_layout="ml", + variants=[ + "normal", + "fr-oss", + "us-intl", + "us-mac", + ], + ), + Keymap( + layout="Myanmar", + backend_layout="mm", + variants=[ + "normal", + "zawgyi", + ], + ), + Keymap( + layout="Mongolia", + backend_layout="mn", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Malta", + backend_layout="mt", + variants=[ + "normal", + "alt-gb", + "alt-us", + "us", + ], + ), + Keymap( + layout="Maldives", + backend_layout="mv", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Malaysia", + backend_layout="my", + variants=[ + "normal", + "phonetic", + ], + ), + Keymap( + layout="Nigeria", + backend_layout="ng", + variants=[ + "normal", + "hausa", + "igbo", + "yoruba", + ], + ), + Keymap( + layout="Netherlands", + backend_layout="nl", + variants=[ + "normal", + "mac", + "std", + "us", + ], + ), + Keymap( + layout="Norway", + backend_layout="no", + variants=[ + "normal", + "colemak", + "dvorak", + "mac", + "mac_nodeadkeys", + "nodeadkeys", + "smi", + "smi_nodeadkeys", + "winkeys", + ], + ), + Keymap( + layout="Nepal", + backend_layout="np", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Philippines", + backend_layout="ph", + variants=[ + "normal", + "capewell-dvorak", + "capewell-dvorak-bay", + "capewell-qwerf2k6", + "capewell-qwerf2k6-bay", + "colemak", + "colemak-bay", + "dvorak", + "dvorak-bay", + "qwerty-bay", + ], + ), + Keymap( + layout="Pakistan", + backend_layout="pk", + variants=[ + "normal", + "ara", + "snd", + "urd-crulp", + "urd-nla", + ], + ), + Keymap( + layout="Poland", + backend_layout="pl", + variants=[ + "normal", + "csb", + "dvorak", + "dvorak_altquotes", + "dvorak_quotes", + "dvp", + "legacy", + "qwertz", + "ru_phonetic_dvorak", + "szl", + ], + ), + Keymap( + layout="Portugal", + backend_layout="pt", + variants=[ + "normal", + "mac", + "mac_nodeadkeys", + "nativo", + "nativo-epo", + "nativo-us", + "nodeadkeys", + ], + ), + Keymap( + layout="Romania", + backend_layout="ro", + variants=[ + "normal", + "std", + "winkeys", + ], + ), + Keymap( + layout="Serbia", + backend_layout="rs", + variants=[ + "normal", + "alternatequotes", + "latin", + "latinalternatequotes", + "latinunicode", + "latinunicodeyz", + "latinyz", + "rue", + "yz", + ], + ), + Keymap( + layout="Russia", + backend_layout="ru", + variants=[ + "normal", + "bak", + "chm", + "cv", + "cv_latin", + "dos", + "kom", + "legacy", + "mac", + "os_legacy", + "os_winkeys", + "phonetic", + "phonetic_YAZHERTY", + "phonetic_azerty", + "phonetic_dvorak", + "phonetic_fr", + "phonetic_winkeys", + "sah", + "srp", + "tt", + "typewriter", + "typewriter-legacy", + "udm", + "xal", + ], + ), + Keymap( + layout="Sweden", + backend_layout="se", + variants=[ + "normal", + "dvorak", + "mac", + "nodeadkeys", + "rus", + "rus_nodeadkeys", + "smi", + "svdvorak", + "swl", + "us", + "us_dvorak", + ], + ), + Keymap( + layout="Slovenia", + backend_layout="si", + variants=[ + "normal", + "alternatequotes", + "us", + ], + ), + Keymap( + layout="Slovakia", + backend_layout="sk", + variants=[ + "normal", + "bksl", + "qwerty", + "qwerty_bksl", + ], + ), + Keymap( + layout="Senegal", + backend_layout="sn", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Sierra Leone", + backend_layout="sl", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Syria", + backend_layout="sy", + variants=[ + "normal", + "ku", + "ku_alt", + "ku_f", + "syc", + "syc_phonetic", + ], + ), + Keymap( + layout="Togo", + backend_layout="tg", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Thailand", + backend_layout="th", + variants=[ + "normal", + "pat", + "tis", + ], + ), + Keymap( + layout="Tajikistan", + backend_layout="tj", + variants=[ + "normal", + "legacy", + ], + ), + Keymap( + layout="Turkmenistan", + backend_layout="tm", + variants=[ + "normal", + "alt", + ], + ), + Keymap( + layout="Turkey", + backend_layout="tr", + variants=[ + "normal", + "alt", + "crh", + "crh_alt", + "crh_f", + "f", + "intl", + "ku", + "ku_alt", + "ku_f", + "ot", + "otf", + "otk", + "otkf", + ], + ), + Keymap( + layout="Taiwan", + backend_layout="tw", + variants=[ + "normal", + "indigenous", + "saisiyat", + ], + ), + Keymap( + layout="Tanzania", + backend_layout="tz", + variants=[ + "normal", + "", + ], + ), + Keymap( + layout="Ukraine", + backend_layout="ua", + variants=[ + "normal", + "homophonic", + "legacy", + "phonetic", + "rstu", + "rstu_ru", + "typewriter", + "winkeys", + ], + ), + Keymap( + layout="United States of America", + backend_layout="us", + variants=[ + "normal", + "alt-intl", + "altgr-intl", + "chr", + "colemak", + "colemak_dh", + "colemak_dh_iso", + "dvorak", + "dvorak-alt-intl", + "dvorak-classic", + "dvorak-intl", + "dvorak-l", + "dvorak-mac", + "dvorak-r", + "dvp", + "euro", + "haw", + "hbs", + "intl", + "mac", + "norman", + "olpc2", + "rus", + "symbolic", + "workman", + "workman-intl", + ], + ), + Keymap( + layout="Uzbekistan", + backend_layout="uz", + variants=[ + "normal", + "latin", + ], + ), + Keymap( + layout="Vietnam", + backend_layout="vn", + variants=[ + "normal", + "fr", + "us", + ], + ), + Keymap( + layout="South Africa", + backend_layout="za", + variants=[ + "normal", + "", + ], + ), +] diff --git a/jade_gui/locales.py b/jade_gui/locales.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/locales/__init__.py b/jade_gui/locales/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/locales/africa.py b/jade_gui/locales/africa.py new file mode 100644 index 0000000..1405316 --- /dev/null +++ b/jade_gui/locales/africa.py @@ -0,0 +1,269 @@ +from jade_gui.classes.locale import locale + +africa = [ + locale( + region="Africa", + location="Abidjan", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Accra", + locales="en_GH.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Addis_Ababa", + locales="en_ET.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Algiers", + locales="ar_DZ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Asmara", + locales="en_ER.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Bamako", + locales="fr_ML.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Bangui", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Banjul", + locales="en_GM.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Bissau", + locales="pt_GW.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Blantyre", + locales="en_MW.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Brazzaville", + locales="fr_CD.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Bujumbura", + locales="fr_BI.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Cairo", + locales="ar_EG.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Casablanca", + locales="ar_MA.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Ceuta", + locales="es_ES.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Conakry", + locales="fr_GN.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Dakar", + locales="fr_SN.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Dar_es_Salaam", + locales="en_TZ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Djibouti", + locales="fr_DJ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Douala", + locales="fr_CM.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="El_Aaiun", + locales="ar_EH.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Freetown", + locales="en_SL.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Gaborone", + locales="en_BW.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Harare", + locales="en_ZW.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Johannesburg", + locales="en_ZA.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Juba", + locales="en_SS.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Kampala", + locales="en_UG.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Khartoum", + locales="", + ), + locale( + region="Africa", + location="Kigali", + locales="en_RW.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Kinshasa", + locales="fr_CD.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Lagos", + locales="en_NG.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Libreville", + locales="fr_GA.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Lome", + locales="fr_TG.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Luanda", + locales="pt_AO.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Lubumbashi", + locales="fr_CD.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Lusaka", + locales="en_ZM.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Malabo", + locales="fr_GQ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Maputo", + locales="en_MZ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Maseru", + locales="en_LS.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Mbabane", + locales="en_SZ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Mogadishu", + locales="en_SO.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Monrovia", + locales="en_LR.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Nairobi", + locales="en_KE.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Ndjamena", + locales="fr_TD.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Niamey", + locales="fr_NE.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Nouakchott", + locales="ar_MR.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Ouagadougou", + locales="fr_BF.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Porto-Novo", + locales="fr_BJ.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Sao_Tome", + locales="pt_ST.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Timbuktu", + locales="fr_ML.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Tripoli", + locales="ar_LY.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Tunis", + locales="fr_TN.UTF-8 UTF-8", + ), + locale( + region="Africa", + location="Windhoek", + locales="en_NA.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/america.py b/jade_gui/locales/america.py new file mode 100644 index 0000000..aee2faf --- /dev/null +++ b/jade_gui/locales/america.py @@ -0,0 +1,776 @@ +from jade_gui.classes.locale import locale + +america = [ + locale( + region="America", + location="Adak", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Anchorage", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Antigua", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Araguaina", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Buenos_Aires", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Catamarca", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/ComodRivadavia", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Cordoba", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Jujuy", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/La_Rioja", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Mendoza", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Rio_Gallegos", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Salta", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/San_Juan", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/San_Luis", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Tucuman", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Argentina/Ushuaia", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Aruba", + locales="nl_NL.UTF-8 UTF-8", + ), + locale( + region="America", + location="Asuncion", + locales="es_PY.UTF-8 UTF-8", + ), + locale( + region="America", + location="Atikokan", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Atka", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Bahia", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Bahia_Banderas", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Barbados", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="America", + location="Belem", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Belize", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Blanc-Sablon", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Boa_Vista", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Bogota", + locales="es_CO.UTF-8 UTF-8", + ), + locale( + region="America", + location="Boise", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Buenos_Aires", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Cambridge_Bay", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Campo_Grande", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Cancun", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Caracas", + locales="es_VE.UTF-8 UTF-8", + ), + locale( + region="America", + location="Catamarca", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Cayenne", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Cayman", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="America", + location="Chicago", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Chihuahua", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Coral_Harbour", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Cordoba", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Costa_Rica", + locales="es_ES.UTF-8 UTF-8", + ), + locale( + region="America", + location="Creston", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Cuiaba", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Curacao", + locales="nl_NL.UTF-8 UTF-8", + ), + locale( + region="America", + location="Danmarkshavn", + locales="da_DK.UTF-8 UTF-8", + ), + locale( + region="America", + location="Dawson", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Dawson_Creek", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Denver", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Detroit", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Dominica", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="America", + location="Edmonton", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Eirunepe", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="El_Salvador", + locales="es_SV.UTF-8 UTF-8", + ), + locale( + region="America", + location="Ensenada", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Fort_Nelson", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Fort_Wayne", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Fortaleza", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Glace_Bay", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Godthab", + locales="da_DK.UTF-8 UTF-8", + ), + locale( + region="America", + location="Goose_Bay", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Grand_Turk", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Grenada", + locales="en_GD.UTF-8 UTF-8", + ), + locale( + region="America", + location="Guadeloupe", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Guatemala", + locales="es_GT.UTF-8 UTF-8", + ), + locale( + region="America", + location="Guayaquil", + locales="es_EC.UTF-8 UTF-8", + ), + locale( + region="America", + location="Guyana", + locales="en_GY.UTF-8 UTF-8", + ), + locale( + region="America", + location="Halifax", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Havana", + locales="es_CU.UTF-8 UTF-8", + ), + locale( + region="America", + location="Hermosillo", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Indianapolis", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Inuvik", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Iqaluit", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Jamaica", + locales="en_JM.UTF-8 UTF-8", + ), + locale( + region="America", + location="Jujuy", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Juneau", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", location="Kentucky/Louisville", locales="en_US.UTF.8 UTF-8" + ), + locale( + region="America", + location="Knox_IN", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Kralendijk", + locales="nl_NL.UTF-8 UTF-8", + ), + locale( + region="America", + location="La_Paz", + locales="es_BO.UTF-8 UTF-8", + ), + locale( + region="America", + location="Lima", + locales="es_PE.UTF-8 UTF-8", + ), + locale( + region="America", + location="Los_Angeles", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Lower_Princes", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Maceio", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Managua", + locales="es_NI.UTF-8 UTF-8", + ), + locale( + region="America", + location="Manaus", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Marigot", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Martinique", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Matamoros", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Mazatlan", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Mendoza", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Menominee", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Merida", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Metlakatla", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Mexico_City", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Miquelon", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Moncton", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Monterrey", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Montevideo", + locales="es_UY.UTF-8 UTF-8", + ), + locale( + region="America", + location="Montreal", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Montserrat", + locales="en_MS.UTF-8 UTF-8", + ), + locale( + region="America", + location="Nassau", + locales="en_BS.UTF-8 UTF-8", + ), + locale( + region="America", + location="New_York", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Nipigon", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Nome", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Noronha", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", location="North_Dakota/Beulah", locales="en_US.UTF-8 UTF-8" + ), + locale( + region="America", location="North_Dakota/Center", locales="en_US.UTF-8 UTF-8" + ), + locale( + region="America", location="North_Dakota/New_Salem", locales="en_US.UTF-8 UTF-8" + ), + locale( + region="America", + location="Nuuk", + locales="en_GL.UTF-8 UTF-8", + ), + locale( + region="America", + location="Ojinaga", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Panama", + locales="es_PA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Pangnirtung", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Paramaribo", + locales="nl_SR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Phoenix", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Port-au-Prince", + locales="fr_HT.UTF-8 UTF-8", + ), + locale( + region="America", + location="Porto_Acre", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Port_of_Spain", + locales="en_TT.UTF-8 UTF-8", + ), + locale( + region="America", + location="Porto_Velho", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Puerto_Rico", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Punta_Arenas", + locales="es_CL.UTF-8 UTF-8", + ), + locale( + region="America", + location="Rainy_River", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Rankin_Inlet", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Recife", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Regina", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Resolute", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Rio_Branco", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Rosario", + locales="es_AR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Santa_Isabel", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Santarem", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Santiago", + locales="es_CL.UTF-8 UTF-8", + ), + locale( + region="America", + location="Santo_Domingo", + locales="es_DO.UTF-8 UTF-8", + ), + locale( + region="America", + location="Sao_Paulo", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="America", + location="Scoresbysund", + locales="da_DK.UTF-8 UTF-8", + ), + locale( + region="America", + location="Shiprock", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Sitka", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="St_Barthelemy", + locales="fr_BL.UTF-8 UTF-8", + ), + locale( + region="America", + location="St_Johns", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="St_Kitts", + locales="en_KN.UTF-8 UTF-8", + ), + locale( + region="America", + location="St_Lucia", + locales="en_LC.UTF-8 UTF-8", + ), + locale( + region="America", + location="St_Thomas", + locales="en_VI.UTF-8 UTF-8", + ), + locale( + region="America", + location="St_Vincent", + locales="en_VC.UTF-8 UTF-8", + ), + locale( + region="America", + location="Swift_Current", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Tegucigalpa", + locales="es_HN.UTF-8 UTF-8", + ), + locale( + region="America", + location="Thule", + locales="en_GL.UTF-8 UTF-8", + ), + locale( + region="America", + location="Thunder_Bay", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Tijuana", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="America", + location="Toronto", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Tortola", + locales="en_VG.UTF-8 UTF-8", + ), + locale( + region="America", + location="Vancouver", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Virgin", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Whitehorse", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Winnipeg", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="America", + location="Yakutat", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="America", + location="Yellowknife", + locales="en_CA.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/antarctica.py b/jade_gui/locales/antarctica.py new file mode 100644 index 0000000..bb1e2ff --- /dev/null +++ b/jade_gui/locales/antarctica.py @@ -0,0 +1,64 @@ +from jade_gui.classes.locale import locale + +antarctica = [ + locale( + region="Antarctica", + location="Casey", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Davis", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="DumontDurville", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Macquarie", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Mawson", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="McMurdo", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Palmer", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Rothera", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="South_Pole", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Syowa", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Troll", + locales="en_AQ.UTF-8 UTF-8", + ), + locale( + region="Antarctica", + location="Vostok", + locales="en_AQ.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/arctic.py b/jade_gui/locales/arctic.py new file mode 100644 index 0000000..6be8088 --- /dev/null +++ b/jade_gui/locales/arctic.py @@ -0,0 +1,9 @@ +from jade_gui.classes.locale import locale + +arctic = [ + locale( + region="Arctic", + location="Longyearbyen", + locales="no_NO.UTF-8 UTF-8", + ) +] diff --git a/jade_gui/locales/asia.py b/jade_gui/locales/asia.py new file mode 100644 index 0000000..4fb1bab --- /dev/null +++ b/jade_gui/locales/asia.py @@ -0,0 +1,494 @@ +from jade_gui.classes.locale import locale + +asia = [ + locale( + region="Asia", + location="Aden", + locales="ar_SA.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Almaty", + locales="kk_KZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Amman", + locales="ar_JO.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Anadyr", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Aqtau", + locales="kk_KZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Aqtobe", + locales="kk_KZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ashgabat", + locales="tk_TM.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ashkhabad", + locales="tk_TM.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Atyrau", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Baghdad", + locales="ar_IQ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Bahrain", + locales="ar_BH.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Baku", + locales="az_AZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Bangkok", + locales="th_TH.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Barnaul", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Beirut", + locales="ar_LB.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Bishkek", + locales="ky_KG.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Brunei", + locales="ms_BN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Chita", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Choibalsan", + locales="mn_MN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Chongqing", + locales="zh_CN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Chungking", + locales="zh_CN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Colombo", + locales="si_LK.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Dacca", + locales="bn_BD.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Damascus", + locales="ar_SY.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Dhaka", + locales="bn_BD.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Dili", + locales="id_ID.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Dubai", + locales="ar_AE.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Dushanbe", + locales="tg_TJ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Famagusta", + locales="tr_TR.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Gaza", + locales="ar_PS.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Harbin", + locales="zh_CN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Hebron", + locales="ar_PS.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ho_Chi_Minh", + locales="vi_VN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Hong_Kong", + locales="zh_HK.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Hovd", + locales="mn_MN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Irkutsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Istanbul", + locales="tr_TR.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Jakarta", + locales="id_ID.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Jayapura", + locales="id_ID.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Jerusalem", + locales="he_IL.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kabul", + locales="fa_AF.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kamchatka", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Karachi", + locales="ur_PK.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kashgar", + locales="zh_CN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kathmandu", + locales="ne_NP.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Katmandu", + locales="ne_NP.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Khandyga", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kolkata", + locales="hi_IN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Krasnoyarsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kuala_Lumpur", + locales="ms_MY.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kuching", + locales="ms_MY.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Kuwait", + locales="ar_KW.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Macao", + locales="zh_MO.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Macau", + locales="zh_MO.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Magadan", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Makassar", + locales="id_ID.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Manila", + locales="tl_PH.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Muscat", + locales="ar_OM.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Nicosia", + locales="el_CY.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Novokuznetsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Novosibirsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Omsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Oral", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Phnom_Penh", + locales="kh_KH.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Pontianak", + locales="id_ID.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Pyongyang", + locales="ko_KP.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Qatar", + locales="ar_QA.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Qostanay", + locales="kk_KZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Qyzylorda", + locales="kk_KZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Rangoon", + locales="my_MM.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Riyadh", + locales="ar_SA.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Saigon", + locales="vi_VN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Sakhalin", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Samarkand", + locales="uz_UZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Seoul", + locales="ko_KR.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Shanghai", + locales="zh_CN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Singapore", + locales="en_SG.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Srednekolymsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Taipei", + locales="zh_TW.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Tashkent", + locales="uz_UZ.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Tbilisi", + locales="ka_GE.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Tehran", + locales="fa_IR.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Tel_Aviv", + locales="he_IL.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Thimbu", + locales="ne_NP.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Thimphu", + locales="ne_NP.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Tokyo", + locales="ja_JP.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Tomsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ujung_Pandang", + locales="id_ID.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ulaanbaatar", + locales="mn_MN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ulan_Bator", + locales="mn_MN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Urumqi", + locales="zh_CN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Ust-Nera", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Vientiane", + locales="vi_VN.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Vladivostok", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Yakutsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Yangon", + locales="my_MM.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Yekaterinburg", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Asia", + location="Yerevan", + locales="hy_AM.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/atlantic.py b/jade_gui/locales/atlantic.py new file mode 100644 index 0000000..ea1a572 --- /dev/null +++ b/jade_gui/locales/atlantic.py @@ -0,0 +1,64 @@ +from jade_gui.classes.locale import locale + +atlantic = [ + locale( + region="atlantic", + location="Azores", + locales="pt_PT.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Bermuda", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Canary", + locales="es_ES.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Cape_Verde", + locales="pt_PT.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Faeroe", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Faroe", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Jan_Mayen", + locales="nb_NO.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Madeira", + locales="pt_PT.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Reykjavik", + locales="is_IS.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="South_Georgia", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="Stanley", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="atlantic", + location="St_Helena", + locales="en_GB.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/australia.py b/jade_gui/locales/australia.py new file mode 100644 index 0000000..639d0cf --- /dev/null +++ b/jade_gui/locales/australia.py @@ -0,0 +1,89 @@ +from jade_gui.classes.locale import locale + +australia = [ + locale( + region="Australia", + location="Adelaide", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Brisbane", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Broken_Hill", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Canberra", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Currie", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Darwin", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Eucla", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Hobart", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Lindeman", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Lord_Howe", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Melbourne", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Perth", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Queensland", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Sydney", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Tasmania", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Victoria", + locales="en_AU.UTF-8 UTF-8", + ), + locale( + region="Australia", + location="Yancowinna", + locales="en_AU.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/brazil.py b/jade_gui/locales/brazil.py new file mode 100644 index 0000000..4d08f34 --- /dev/null +++ b/jade_gui/locales/brazil.py @@ -0,0 +1,14 @@ +from jade_gui.classes.locale import locale + +brazil = [ + locale( + region="Brazil", + location="Acre", + locales="pt_BR.UTF-8 UTF-8", + ), + locale( + region="Brazil", + location="DeNoronha", + locales="pt_BR.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/canada.py b/jade_gui/locales/canada.py new file mode 100644 index 0000000..a6173c1 --- /dev/null +++ b/jade_gui/locales/canada.py @@ -0,0 +1,39 @@ +from jade_gui.classes.locale import locale + +canada = [ + locale( + region="canada", + location="Atlantic", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="canada", + location="Central", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="canada", + location="Eastern", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="canada", + location="Mountain", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="canada", + location="Newfoundland", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="canada", + location="Pacific", + locales="en_CA.UTF-8 UTF-8", + ), + locale( + region="canada", + location="Yukon", + locales="en_CA.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/chile.py b/jade_gui/locales/chile.py new file mode 100644 index 0000000..30f59b7 --- /dev/null +++ b/jade_gui/locales/chile.py @@ -0,0 +1,14 @@ +from jade_gui.classes.locale import locale + +chile = [ + locale( + region="Chile", + location="Continental", + locales="es_CL.UTF-8 UTF-8", + ), + locale( + region="Chile", + location="EasterIsland", + locales="es_CL.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/europe.py b/jade_gui/locales/europe.py new file mode 100644 index 0000000..32e6ec0 --- /dev/null +++ b/jade_gui/locales/europe.py @@ -0,0 +1,314 @@ +from jade_gui.classes.locale import locale + +europe = [ + locale( + region="Europe", + location="Amsterdam", + locales="nl_NL.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Andorra", + locales="ca_ES.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Athens", + locales="el_GR.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Belfast", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Belgrade", + locales="sr_RS.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Berlin", + locales="de_DE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Bratislava", + locales="sk_SK.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Brussels", + locales="nl_BE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Bucharest", + locales="ro_RO.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Budapest", + locales="hu_HU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Busingen", + locales="de_DE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Chisinau", + locales="ro_RO.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Copenhagen", + locales="da_DK.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Dublin", + locales="en_IE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Gibraltar", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Guernsey", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Helsinki", + locales="fi_FI.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Isle_of_Man", + locales="en_IM.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Istanbul", + locales="tr_TR.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Jersey", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Kaliningrad", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Kiev", + locales="uk_UA.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Kirov", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Lisbon", + locales="pt_PT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Ljubljana", + locales="sl_SI.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="London", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Luxembourg", + locales="fr_LU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Madrid", + locales="es_ES.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Malta", + locales="en_GB.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Mariehamn", + locales="sv_SE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Minsk", + locales="be_BY.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Monaco", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Moscow", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Nicosia", + locales="el_GR.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Oslo", + locales="no_NO.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Paris", + locales="fr_FR.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Podgorica", + locales="sr_RS.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Prague", + locales="cs_CZ.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Riga", + locales="lv_LV.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Rome", + locales="it_IT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Samara", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="San_Marino", + locales="it_IT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Sarajevo", + locales="bs_BA.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Saratov", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Simferopol", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Skopje", + locales="mk_MK.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Sofia", + locales="bg_BG.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Stockholm", + locales="sv_SE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Tallinn", + locales="et_EE.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Tirane", + locales="sq_AL.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Tiraspol", + locales="ro_RO.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Ulyanovsk", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Uzhgorod", + locales="uk_UA.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Vaduz", + locales="de_AT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Vatican", + locales="it_IT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Vienna", + locales="de_AT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Vilnius", + locales="lt_LT.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Volgograd", + locales="ru_RU.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Warsaw", + locales="pl_PL.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Zagreb", + locales="hr_HR.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Zaporozhye", + locales="uk_UA.UTF-8 UTF-8", + ), + locale( + region="Europe", + location="Zurich", + locales="de_CH.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/indian.py b/jade_gui/locales/indian.py new file mode 100644 index 0000000..e6cb545 --- /dev/null +++ b/jade_gui/locales/indian.py @@ -0,0 +1,59 @@ +from jade_gui.classes.locale import locale + +indian = [ + locale( + region="Indian", + location="Antananarivo", + locales="fr_MG.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Chagos", + locales="en_IO.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Christmas", + locales="en_CX.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Cocos", + locales="en_CC.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Comoro", + locales="fr_KM.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Kerguelen", + locales="fr_TF.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Mahe", + locales="en_SC.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Maldives", + locales="en_MV.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Mauritius", + locales="en_MU.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Mayotte", + locales="fr_YT.UTF-8 UTF-8", + ), + locale( + region="Indian", + location="Reunion", + locales="fr_RE.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/locales_list.py b/jade_gui/locales/locales_list.py new file mode 100644 index 0000000..b717f45 --- /dev/null +++ b/jade_gui/locales/locales_list.py @@ -0,0 +1,49 @@ +# locales.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from jade_gui.locales.africa import africa +from jade_gui.locales.america import america +from jade_gui.locales.antarctica import antarctica +from jade_gui.locales.arctic import arctic +from jade_gui.locales.asia import asia +from jade_gui.locales.atlantic import atlantic +from jade_gui.locales.australia import australia +from jade_gui.locales.brazil import brazil +from jade_gui.locales.canada import canada +from jade_gui.locales.chile import chile +from jade_gui.locales.europe import europe +from jade_gui.locales.indian import indian +from jade_gui.locales.mexico import mexico +from jade_gui.locales.pacific import pacific + +locations = [ + africa, + america, + antarctica, + arctic, + asia, + atlantic, + australia, + brazil, + canada, + chile, + europe, + indian, + mexico, + pacific, +] diff --git a/jade_gui/locales/meson.build b/jade_gui/locales/meson.build new file mode 100644 index 0000000..d7d9d40 --- /dev/null +++ b/jade_gui/locales/meson.build @@ -0,0 +1,22 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +localesdir = join_paths(pkgdatadir, 'jade_gui/locales') + +jade_gui_sources = [ + '__init__.py', + 'africa.py', + 'america.py', + 'antarctica.py', + 'arctic.py', + 'asia.py', + 'atlantic.py', + 'australia.py', + 'brazil.py', + 'canada.py', + 'chile.py', + 'europe.py', + 'indian.py', + 'mexico.py', + 'pacific.py', + 'locales_list.py', +] +install_data(jade_gui_sources, install_dir: localesdir) \ No newline at end of file diff --git a/jade_gui/locales/mexico.py b/jade_gui/locales/mexico.py new file mode 100644 index 0000000..98062d3 --- /dev/null +++ b/jade_gui/locales/mexico.py @@ -0,0 +1,19 @@ +from jade_gui.classes.locale import locale + +mexico = [ + locale( + region="Mexico", + location="BajaNorte", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="Mexico", + location="BajaSur", + locales="es_MX.UTF-8 UTF-8", + ), + locale( + region="Mexico", + location="General", + locales="es_MX.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/locales/pacific.py b/jade_gui/locales/pacific.py new file mode 100644 index 0000000..f692ebd --- /dev/null +++ b/jade_gui/locales/pacific.py @@ -0,0 +1,219 @@ +from jade_gui.classes.locale import locale + +pacific = [ + locale( + region="Pacific", + location="Apia", + locales="en_WS.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Auckland", + locales="en_NZ.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Bougainville", + locales="en_PG.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Chatham", + locales="en_NZ.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Chuuk", + locales="en_FM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Easter", + locales="en_CL.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Efate", + locales="en_VU.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Enderbury", + locales="en_KI.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Fakaofo", + locales="en_TK.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Fiji", + locales="en_FJ.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Funafuti", + locales="en_TV.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Galapagos", + locales="en_EC.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Gambier", + locales="en_PF.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Guadalcanal", + locales="en_SB.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Guam", + locales="en_GU.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Honolulu", + locales="en_US.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Johnston", + locales="en_UM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Kiritimati", + locales="en_KI.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Kosrae", + locales="en_FM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Kwajalein", + locales="en_MH.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Majuro", + locales="en_MH.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Marquesas", + locales="en_PF.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Midway", + locales="en_UM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Nauru", + locales="en_NR.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Niue", + locales="en_NU.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Norfolk", + locales="en_NF.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Noumea", + locales="en_NC.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Pago_Pago", + locales="en_AS.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Palau", + locales="en_PW.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Pitcairn", + locales="en_PN.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Pohnpei", + locales="en_FM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Ponape", + locales="en_FM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Port_Moresby", + locales="en_PG.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Rarotonga", + locales="en_CK.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Saipan", + locales="en_MP.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Samoa", + locales="en_AS.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Tahiti", + locales="en_PF.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Tarawa", + locales="en_KI.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Tongatapu", + locales="en_TO.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Truk", + locales="en_FM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Wake", + locales="en_UM.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Wallis", + locales="en_WF.UTF-8 UTF-8", + ), + locale( + region="Pacific", + location="Yap", + locales="en_FM.UTF-8 UTF-8", + ), +] diff --git a/jade_gui/main.py b/jade_gui/main.py new file mode 100644 index 0000000..b61504a --- /dev/null +++ b/jade_gui/main.py @@ -0,0 +1,82 @@ +# main.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import sys +import gi + +gi.require_version("Gtk", "4.0") +gi.require_version("Adw", "1") +gi.require_version("GtkSource", "5") +gi.require_version("Vte", "3.91") + + +from gi.repository import Gtk, Gio, Adw +from jade_gui.window import JadeGuiWindow + + +class Jade_guiApplication(Adw.Application): + """The main application singleton class.""" + + def __init__(self): + super().__init__( + application_id="al.getcryst.jadegui", flags=Gio.ApplicationFlags.FLAGS_NONE + ) + self.create_action("quit", self.quit, ["q"]) + self.create_action("about", self.on_about_action) + self.create_action("preferences", self.on_preferences_action) + + def do_activate(self): + """Called when the application is activated. + + We raise the application's main window, creating it if + necessary. + """ + win = self.props.active_window + if not win: + win = JadeGuiWindow(application=self) + win.present() + + def on_about_action(self, widget, _): + """Callback for the app.about action.""" + about = AboutDialog(self.props.active_window) + about.present() + + def on_preferences_action(self, widget, _): + """Callback for the app.preferences action.""" + print("app.preferences action activated") + + def create_action(self, name, callback, shortcuts=None): + """Add an application action. + + Args: + name: the name of the action + callback: the function to be called when the action is activated + shortcuts: an optional list of accelerators + """ + action = Gio.SimpleAction.new(name, None) + action.connect("activate", callback) + self.add_action(action) + if shortcuts: + self.set_accels_for_action(f"app.{name}", shortcuts) + + +def main(version): + """The application's entry point.""" + app = Jade_guiApplication() + return app.run(sys.argv) diff --git a/jade_gui/manualpartitioning.py b/jade_gui/manualpartitioning.py new file mode 100644 index 0000000..d9fb8c6 --- /dev/null +++ b/jade_gui/manualpartitioning.py @@ -0,0 +1,27 @@ +filesystems = [ + "don't format", + "bfs", + "cramfs", + "ext3", + "fat", + "msdos", + "xfs", + "btrfs", + "ext2", + "ext4", + "minix", + "vfat", + "f2fs", +] + +mountpoints = [ + "none", + "/", + "/boot", + "/boot/efi", + "/home", + "/opt", + "/tmp", + "/usr", + "/var", +] diff --git a/jade_gui/meson.build b/jade_gui/meson.build new file mode 100644 index 0000000..90690d2 --- /dev/null +++ b/jade_gui/meson.build @@ -0,0 +1,44 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +moduledir = join_paths(pkgdatadir, 'jade_gui') +gnome = import('gnome') + +gnome.compile_resources('jade_gui', + 'jade_gui.gresource.xml', + gresource_bundle: true, + install: true, + install_dir: pkgdatadir, +) + +python = import('python') + +conf = configuration_data() +conf.set('PYTHON', python.find_installation('python3').full_path()) +conf.set('VERSION', meson.project_version()) +conf.set('localedir', join_paths(get_option('prefix'), get_option('localedir'))) +conf.set('pkgdatadir', pkgdatadir) + +configure_file( + input: 'jade_gui.in', + output: 'jade-gui', + configuration: conf, + install: true, + install_dir: get_option('bindir') +) + +subdir('widgets') +subdir('functions') +subdir('classes') +subdir('locales') +subdir('utils') +subdir('scripts') + +jade_gui_sources = [ + '__init__.py', + 'main.py', + 'window.py', + 'keymaps.py', + 'desktops.py', + 'manualpartitioning.py' +] + +install_data(jade_gui_sources, install_dir: moduledir) diff --git a/jade_gui/pages/desktop_screen.ui b/jade_gui/pages/desktop_screen.ui new file mode 100644 index 0000000..45c9498 --- /dev/null +++ b/jade_gui/pages/desktop_screen.ui @@ -0,0 +1,40 @@ + + + + + diff --git a/jade_gui/pages/finished_screen.ui b/jade_gui/pages/finished_screen.ui new file mode 100644 index 0000000..f5548f9 --- /dev/null +++ b/jade_gui/pages/finished_screen.ui @@ -0,0 +1,58 @@ + + + + + diff --git a/jade_gui/pages/install_screen.ui b/jade_gui/pages/install_screen.ui new file mode 100644 index 0000000..e3bd95e --- /dev/null +++ b/jade_gui/pages/install_screen.ui @@ -0,0 +1,43 @@ + + + + + diff --git a/jade_gui/pages/keyboard/keyboard_dialog.ui b/jade_gui/pages/keyboard/keyboard_dialog.ui new file mode 100644 index 0000000..4be0ee6 --- /dev/null +++ b/jade_gui/pages/keyboard/keyboard_dialog.ui @@ -0,0 +1,65 @@ + + + + + 600 + 570 + Search Timezones + true + + + + vertical + true + + + + + + true + 30 + 5 + 30 + 30 + Search for a keyboard layout + + + + + + + + + + + + + + + + + + + + + + Select + 15 + 15 + 15 + 15 + GTK_ALIGN_END + true + + + + + + + diff --git a/jade_gui/pages/keyboard/keyboard_screen.ui b/jade_gui/pages/keyboard/keyboard_screen.ui new file mode 100644 index 0000000..bea04c7 --- /dev/null +++ b/jade_gui/pages/keyboard/keyboard_screen.ui @@ -0,0 +1,90 @@ + + + + + diff --git a/jade_gui/pages/language_screen.ui b/jade_gui/pages/language_screen.ui new file mode 100644 index 0000000..925cc78 --- /dev/null +++ b/jade_gui/pages/language_screen.ui @@ -0,0 +1,99 @@ + + + + diff --git a/jade_gui/pages/locale/locale_dialog.ui b/jade_gui/pages/locale/locale_dialog.ui new file mode 100644 index 0000000..11f0e08 --- /dev/null +++ b/jade_gui/pages/locale/locale_dialog.ui @@ -0,0 +1,49 @@ + + + + + 600 + 570 + Search Locales + true + + + + vertical + + + + + + true + 30 + 5 + 30 + 30 + Search for a locale + + + + + + + + + + + + + + + + + + + + + + diff --git a/jade_gui/pages/locale/locale_screen.ui b/jade_gui/pages/locale/locale_screen.ui new file mode 100644 index 0000000..4db7e16 --- /dev/null +++ b/jade_gui/pages/locale/locale_screen.ui @@ -0,0 +1,112 @@ + + + + + diff --git a/jade_gui/pages/misc_screen.ui b/jade_gui/pages/misc_screen.ui new file mode 100644 index 0000000..7d5300e --- /dev/null +++ b/jade_gui/pages/misc_screen.ui @@ -0,0 +1,100 @@ + + + + + diff --git a/jade_gui/pages/partition_screen.ui b/jade_gui/pages/partition_screen.ui new file mode 100644 index 0000000..130233e --- /dev/null +++ b/jade_gui/pages/partition_screen.ui @@ -0,0 +1,158 @@ + + + + + view-refresh-symbolic + + + + diff --git a/jade_gui/pages/summary_screen.ui b/jade_gui/pages/summary_screen.ui new file mode 100644 index 0000000..d74703a --- /dev/null +++ b/jade_gui/pages/summary_screen.ui @@ -0,0 +1,285 @@ + + + + + diff --git a/jade_gui/pages/timezone/timezone_dialog.ui b/jade_gui/pages/timezone/timezone_dialog.ui new file mode 100644 index 0000000..8e9fdab --- /dev/null +++ b/jade_gui/pages/timezone/timezone_dialog.ui @@ -0,0 +1,49 @@ + + + + + 600 + 570 + Search Timezones + true + + + + vertical + + + + + + true + 30 + 5 + 30 + 30 + Search for a timezone + + + + + + + + + + + + + + + + + + + + + + diff --git a/jade_gui/pages/timezone/timezone_screen.ui b/jade_gui/pages/timezone/timezone_screen.ui new file mode 100644 index 0000000..61de884 --- /dev/null +++ b/jade_gui/pages/timezone/timezone_screen.ui @@ -0,0 +1,87 @@ + + + + + diff --git a/jade_gui/pages/user_screen.ui b/jade_gui/pages/user_screen.ui new file mode 100644 index 0000000..221c5b2 --- /dev/null +++ b/jade_gui/pages/user_screen.ui @@ -0,0 +1,98 @@ + + + + + diff --git a/jade_gui/pages/welcome_screen.ui b/jade_gui/pages/welcome_screen.ui new file mode 100644 index 0000000..ab2e34b --- /dev/null +++ b/jade_gui/pages/welcome_screen.ui @@ -0,0 +1,64 @@ + + + + + diff --git a/jade_gui/scripts/checkEFI.sh b/jade_gui/scripts/checkEFI.sh new file mode 100644 index 0000000..42ffa74 --- /dev/null +++ b/jade_gui/scripts/checkEFI.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS \ No newline at end of file diff --git a/jade_gui/scripts/getDiskName.sh b/jade_gui/scripts/getDiskName.sh new file mode 100644 index 0000000..2848ee9 --- /dev/null +++ b/jade_gui/scripts/getDiskName.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host lsblk -pdbo MODEL $1 | grep -v MODEL \ No newline at end of file diff --git a/jade_gui/scripts/getDiskSize.sh b/jade_gui/scripts/getDiskSize.sh new file mode 100644 index 0000000..826fc40 --- /dev/null +++ b/jade_gui/scripts/getDiskSize.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host lsblk -pdbo SIZE $1 | grep -v SIZE \ No newline at end of file diff --git a/jade_gui/scripts/getDiskType.sh b/jade_gui/scripts/getDiskType.sh new file mode 100644 index 0000000..ebe4e55 --- /dev/null +++ b/jade_gui/scripts/getDiskType.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host lsblk -d -o rota $1 | grep -v ROTA \ No newline at end of file diff --git a/jade_gui/scripts/getDisks.sh b/jade_gui/scripts/getDisks.sh new file mode 100644 index 0000000..7888fdb --- /dev/null +++ b/jade_gui/scripts/getDisks.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host lsblk -pdo name | grep -v zram | grep -v NAME | grep -v loop | grep -v sr \ No newline at end of file diff --git a/jade_gui/scripts/getPartitions.sh b/jade_gui/scripts/getPartitions.sh new file mode 100644 index 0000000..95326fc --- /dev/null +++ b/jade_gui/scripts/getPartitions.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host blkid -o device | grep -v zram | grep -v loop | grep -v sr \ No newline at end of file diff --git a/jade_gui/scripts/install.sh b/jade_gui/scripts/install.sh new file mode 100644 index 0000000..e8d1e45 --- /dev/null +++ b/jade_gui/scripts/install.sh @@ -0,0 +1,4 @@ +#!/usr/bin/bash +echo "Running reflector to sort for fastest mirrors" | tee -a /tmp/jade-gui-output.txt +pkexec reflector --latest 5 --sort rate --save /etc/pacman.d/mirrorlist | tee -a /tmp/jade-gui-output.txt +pkexec crystal-jade config ~/.config/jade.json | tee -a /tmp/jade-gui-output.txt diff --git a/jade_gui/scripts/meson.build b/jade_gui/scripts/meson.build new file mode 100644 index 0000000..0cce215 --- /dev/null +++ b/jade_gui/scripts/meson.build @@ -0,0 +1,17 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +scriptsdir = join_paths(pkgdatadir, 'jade_gui/scripts') + +jade_gui_sources = [ + 'getDisks.sh', + 'getDiskSize.sh', + 'checkEFI.sh', + 'install.sh', + 'savePrefs.sh', + 'getDiskType.sh', + 'getDiskName.sh', + 'getPartitions.sh', + 'reboot.sh', + 'openBash.sh', + 'openGparted.sh', +] +install_data(jade_gui_sources, install_dir: scriptsdir) \ No newline at end of file diff --git a/jade_gui/scripts/openBash.sh b/jade_gui/scripts/openBash.sh new file mode 100644 index 0000000..0c628a4 --- /dev/null +++ b/jade_gui/scripts/openBash.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host gnome-terminal -- bash \ No newline at end of file diff --git a/jade_gui/scripts/openGparted.sh b/jade_gui/scripts/openGparted.sh new file mode 100644 index 0000000..6fbb820 --- /dev/null +++ b/jade_gui/scripts/openGparted.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host pkexec gparted \ No newline at end of file diff --git a/jade_gui/scripts/reboot.sh b/jade_gui/scripts/reboot.sh new file mode 100644 index 0000000..57d534a --- /dev/null +++ b/jade_gui/scripts/reboot.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host gnome-session-quit --reboot \ No newline at end of file diff --git a/jade_gui/scripts/savePrefs.sh b/jade_gui/scripts/savePrefs.sh new file mode 100644 index 0000000..b01896c --- /dev/null +++ b/jade_gui/scripts/savePrefs.sh @@ -0,0 +1,2 @@ +#!/usr/bin/bash +flatpak-spawn --host echo $1 > /tmp/jade.json \ No newline at end of file diff --git a/jade_gui/style.css b/jade_gui/style.css new file mode 100644 index 0000000..ce8b267 --- /dev/null +++ b/jade_gui/style.css @@ -0,0 +1,8 @@ +statuspage.jade_compact { + margin-bottom: -100px; +} + +statuspage.jade_compact_desktop { + margin-bottom: -100px; + margin-top: -50px; +} diff --git a/jade_gui/utils/__init__.py b/jade_gui/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/utils/command.py b/jade_gui/utils/command.py new file mode 100644 index 0000000..1acd091 --- /dev/null +++ b/jade_gui/utils/command.py @@ -0,0 +1,37 @@ +import os +import subprocess + + +class CommandUtils: + @staticmethod + def run_command( + command: list, + flatpak_spawn: bool = None, + output: bool = False, + decode: bool = True, + ): + """ + Keep flatpak_spawn as None to automatically assume its value based on + whether the app is running in a flatpak or not. Set it to True or False + to override this behavior. + """ + if flatpak_spawn is None and "FLATPAK_ID" in os.environ: + flatpak_spawn = True + + if flatpak_spawn: + command = ["flatpak-spawn", "--host"] + command + + if output: + res = subprocess.check_output(command) + if decode: + res = res.decode("utf-8").strip() + return res + + return subprocess.Popen(command, stdout=subprocess.PIPE) + + @staticmethod + def check_output(command: list, flatpak_spawn: bool = None, decode: bool = True): + """Just a wrapper for convenience""" + return CommandUtils.run_command( + command, flatpak_spawn, output=True, decode=decode + ) diff --git a/jade_gui/utils/disks.py b/jade_gui/utils/disks.py new file mode 100644 index 0000000..c307c0e --- /dev/null +++ b/jade_gui/utils/disks.py @@ -0,0 +1,92 @@ +# exec.py +# +# Copyright 2022 axtlos +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0-only + +import subprocess +import shutil +from jade_gui.utils.command import CommandUtils + + +bash_bin = shutil.which("bash") + + +def get_disks(): + output = CommandUtils.check_output(["lsblk", "-pdo", "name"]) + output = output.split() + output = [x for x in output if "zram" not in x] + output = [x for x in output if "NAME" not in x] + output = [x for x in output if "loop" not in x] + output = [x for x in output if "sr" not in x] + output = [x for x in output if "fd" not in x] + return output + + +def get_disk_size(disk: str) -> str: + output = CommandUtils.check_output(["lsblk", "-pdbo", "SIZE", disk]) + output = output.split() + output = [x for x in output if "SIZE" not in x] + + if len(output) == 0: + print(f"No disk found with name: {disk}, assuming zero.") + size = 0 + else: + size = int(output[0]) + + print(disk + ":" + str(size)) + if size < 1000**3: + size = size / 1000**2 + return f"{size: .2f} MB" + elif size < 1000**4: + size = size / 1000**3 + return f"{size: .2f} GB" + else: + size = size / 1000**4 + return f"{size: .2f} TB" + + +def get_uefi() -> bool: + command = subprocess.run( + ["bash", "-c", "[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS"], + capture_output=True, + ) + isEfi = True if command.stdout.decode("utf-8").strip("\n") == "UEFI" else False + return isEfi + + +def get_disk_type(disk: str): + output = CommandUtils.check_output(["lsblk", "-d", "-o", "rota", disk]) + output = output.split() + output = [x for x in output if "ROTA" not in x] + + if len(output) > 0: + if output[0] == "0": + return "Solid-State Drive (SSD)" + elif output[0] == "1": + return "Hard Disk (HDD)" # maybe Rotational Drive? + + print(f"No disk found with name: {disk}, assuming unknown.") + return "Drive type unknown" + + +def get_partitions(): + output = CommandUtils.check_output(["blkid", "-o", "device"]) + output = output.split() + output = [x for x in output if "zram" not in x] + output = [x for x in output if "loop" not in x] + output = [x for x in output if "sr" not in x] + return output diff --git a/jade_gui/utils/gtk_helpers.py b/jade_gui/utils/gtk_helpers.py new file mode 100644 index 0000000..51a491b --- /dev/null +++ b/jade_gui/utils/gtk_helpers.py @@ -0,0 +1,6 @@ +def set_list_text(list, string): + n = list.get_n_items() + if n > 0: + list.splice(0, n, [string]) + else: + list.append(string) diff --git a/jade_gui/utils/meson.build b/jade_gui/utils/meson.build new file mode 100644 index 0000000..a60b8a0 --- /dev/null +++ b/jade_gui/utils/meson.build @@ -0,0 +1,11 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +utilsdir = join_paths(pkgdatadir, 'jade_gui/utils') + +jade_gui_sources = [ + '__init__.py', + 'disks.py', + 'threading.py', + 'command.py', + 'gtk_helpers.py' +] +install_data(jade_gui_sources, install_dir: utilsdir) diff --git a/jade_gui/utils/threading.py b/jade_gui/utils/threading.py new file mode 100644 index 0000000..6f0d0f2 --- /dev/null +++ b/jade_gui/utils/threading.py @@ -0,0 +1,74 @@ +# This file was taken from bottles with the permission from brombinmirko +# +# threading.py +# +# Copyright 2022 brombinmirko +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, in version 3 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import sys +import threading +import traceback + +from gettext import gettext as _ + +from gi.repository import GLib + + +class RunAsync(threading.Thread): + """ + This class is used to execute a function asynchronously. + It takes a function, a callback and a list of arguments as input. + """ + + def __init__(self, task_func, callback=None, *args, **kwargs): + if "DEBUG_MODE" in os.environ: + import faulthandler + + faulthandler.enable() + + self.source_id = None + assert threading.current_thread() is threading.main_thread() + + super(RunAsync, self).__init__(target=self.__target, args=args, kwargs=kwargs) + + self.task_func = task_func + + self.callback = callback if callback else lambda r, e: None + self.daemon = kwargs.pop("daemon", True) + + self.start() + + def __target(self, *args, **kwargs): + result = None + error = None + + print(f"DEBUG: Running async job [{self.task_func}].") + + try: + result = self.task_func(*args, **kwargs) + except Exception as exception: + print( + "ERROR: while running async job: " + f"{self.task_func}\nException: {exception}" + ) + + error = exception + _ex_type, _ex_value, trace = sys.exc_info() + traceback.print_tb(trace) + traceback_info = "\n".join(traceback.format_tb(trace)) + + print([str(exception), traceback_info]) + self.source_id = GLib.idle_add(self.callback, result, error) + return self.source_id diff --git a/jade_gui/widgets/__init__.py b/jade_gui/widgets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jade_gui/widgets/desktop.py b/jade_gui/widgets/desktop.py new file mode 100644 index 0000000..dc17d88 --- /dev/null +++ b/jade_gui/widgets/desktop.py @@ -0,0 +1,42 @@ +# desktop.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/desktop.ui") +class DesktopEntry(Adw.ActionRow): + __gtype_name__ = "DesktopEntry" + + select_button = Gtk.Template.Child() + + def __init__(self, window, desktop, button_group, application, **kwargs): + super().__init__(**kwargs) + self.window = window + self.set_title(desktop) + self.select_button.set_group(button_group) + self.select_button.connect("toggled", self.toggled_cb) + + def toggled_cb(self, check_button): + if check_button.props.active: + row = check_button.get_ancestor(Gtk.ListBoxRow) + row.activate() + self.window.desktop_screen.selected_desktop(self, row) + self.window.desktop_screen.list_desktops.select_row(self) diff --git a/jade_gui/widgets/desktop.ui b/jade_gui/widgets/desktop.ui new file mode 100644 index 0000000..9c20433 --- /dev/null +++ b/jade_gui/widgets/desktop.ui @@ -0,0 +1,16 @@ + + + + + diff --git a/jade_gui/widgets/disk.py b/jade_gui/widgets/disk.py new file mode 100644 index 0000000..355af26 --- /dev/null +++ b/jade_gui/widgets/disk.py @@ -0,0 +1,61 @@ +# disk.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/disk.ui") +class DiskEntry(Adw.ActionRow): + __gtype_name__ = "DiskEntry" + + size_label = Gtk.Template.Child() + select_button = Gtk.Template.Child() + + def __init__( + self, + window, + disk, + disk_size, + disk_type, + button_group, + valid, + application, + **kwargs + ): + super().__init__(**kwargs) + self.window = window + self.disk = disk + self.disk_size = disk_size + self.disk_type = disk_type + self.set_title(disk[5:]) + self.set_subtitle(disk_type) + self.size_label.set_label("Disk Size: " + disk_size) + if button_group is not None: + self.select_button.set_group(button_group) + self.select_button.connect("toggled", self.toggled_cb) + self.valid = valid + + def toggled_cb(self, check_button): + if not check_button.props.active: + row = check_button.get_ancestor(Gtk.ListBoxRow) + row.activate() + self.window.partition_screen.selected_partition = self + self.window.partition_screen.disk_list.select_row(self) + self.valid(True) diff --git a/jade_gui/widgets/disk.ui b/jade_gui/widgets/disk.ui new file mode 100644 index 0000000..1e72d85 --- /dev/null +++ b/jade_gui/widgets/disk.ui @@ -0,0 +1,35 @@ + + + + + diff --git a/jade_gui/widgets/layout.py b/jade_gui/widgets/layout.py new file mode 100644 index 0000000..bb000ef --- /dev/null +++ b/jade_gui/widgets/layout.py @@ -0,0 +1,77 @@ +# layout.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ +from jade_gui.widgets.variant import KeyboardVariant + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/layout.ui") +class KeyboardLayout(Adw.ExpanderRow): + __gtype_name__ = "KeyboardLayout" + + variants = [] + rows = [] + + def __init__( + self, window, country, country_shorthand, keymap, application, **kwargs + ): + super().__init__(**kwargs) + self.window = window + self.country = country + self.country_shorthand = country_shorthand + + self.set_title(country) + self.set_subtitle(country_shorthand) + self.variants = keymap.variants + self.connect("activate", self.selected) + + firstvariant = KeyboardVariant( + window=window, + variant=keymap.variants[0], + country=self.country, + country_shorthand=self.country_shorthand, + button_group=None, + application=application, + **kwargs + ) + + self.add_row(firstvariant) + + for variant in keymap.variants: + if variant != firstvariant.variant: + self.add_row( + KeyboardVariant( + window=window, + country=self.country, + country_shorthand=self.country_shorthand, + variant=variant, + button_group=firstvariant.select_variant, + application=application, + **kwargs + ) + ) + + def add_row(self, row): + super().add_row(row) + self.rows.append(row) + + def selected(self, widget): + print("selected") + self.window.keyboard_screen.selected_layout(widget=widget, row=self) diff --git a/jade_gui/widgets/layout.ui b/jade_gui/widgets/layout.ui new file mode 100644 index 0000000..c890558 --- /dev/null +++ b/jade_gui/widgets/layout.ui @@ -0,0 +1,8 @@ + + + + + diff --git a/jade_gui/widgets/locale.py b/jade_gui/widgets/locale.py new file mode 100644 index 0000000..0ab9c9b --- /dev/null +++ b/jade_gui/widgets/locale.py @@ -0,0 +1,49 @@ +# timezone.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from datetime import datetime +import pytz +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ +from pytz import timezone + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/locale.ui") +class LocaleEntry(Adw.ActionRow): + __gtype_name__ = "LocaleEntry" + + main_locale_button = Gtk.Template.Child() + + def __init__(self, page, window, locale, button_group, application, **kwargs): + super().__init__(**kwargs) + + self.window = window + self.page = page + self.locale = locale + + self.set_title(locale) + if button_group is not None: + self.main_locale_button.set_group(button_group) + self.main_locale_button.connect("toggled", self.set_as_main_locale) + + def set_as_main_locale(self, button): + self.page.main_locale = self.locale + + def get_timezone(self): + return timezone(str(self)) diff --git a/jade_gui/widgets/locale.ui b/jade_gui/widgets/locale.ui new file mode 100644 index 0000000..aba330a --- /dev/null +++ b/jade_gui/widgets/locale.ui @@ -0,0 +1,19 @@ + + + + + diff --git a/jade_gui/widgets/meson.build b/jade_gui/widgets/meson.build new file mode 100644 index 0000000..25e6dc3 --- /dev/null +++ b/jade_gui/widgets/meson.build @@ -0,0 +1,15 @@ +pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) +widgetsdir = join_paths(pkgdatadir, 'jade_gui/widgets') + +jade_gui_sources = [ + '__init__.py', + 'timezone.py', + 'layout.py', + 'variant.py', + 'desktop.py', + 'disk.py', + 'partition.py', + 'locale.py', + 'selected_locale.py', +] +install_data(jade_gui_sources, install_dir: widgetsdir) diff --git a/jade_gui/widgets/partition.py b/jade_gui/widgets/partition.py new file mode 100644 index 0000000..1b2a1fc --- /dev/null +++ b/jade_gui/widgets/partition.py @@ -0,0 +1,58 @@ +# partition.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ +from jade_gui.manualpartitioning import filesystems, mountpoints +from jade_gui.classes.partition import Partition + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/partition.ui") +class PartitionEntry(Adw.ActionRow): + __gtype_name__ = "PartitionEntry" + + filesystem_dropdown = Gtk.Template.Child() + mountpoint_dropdown = Gtk.Template.Child() + + def __init__(self, window, partition: Partition, application, **kwargs): + super().__init__(**kwargs) + self.window = window + self.partition = partition + self.partition.filesystem = filesystems[0] + self.partition.mountpoint = mountpoints[0] + self.set_title(self.partition.partition) + self.set_subtitle(self.partition.size) + for filesystem in filesystems: + self.filesystem_dropdown.append(filesystem, filesystem) + self.filesystem_dropdown.set_active(0) + for mountpoint in mountpoints: + self.mountpoint_dropdown.append(mountpoint, mountpoint) + self.mountpoint_dropdown.set_active(0) + self.filesystem_dropdown.connect("changed", self.on_filesystem_select) + self.mountpoint_dropdown.connect("changed", self.on_mountpoint_select) + + def on_filesystem_select(self, widget): + print(self.filesystem_dropdown.get_active_text()) + self.partition.filesystem = self.filesystem_dropdown.get_active_text() + self.window.partition_screen.set_valid(True) + print("select " + self.partition.generate_jade_entry()) + + def on_mountpoint_select(self, widget): + self.partition.mountpoint = self.mountpoint_dropdown.get_active_text() + self.window.partition_screen.set_valid(True) + print("select " + self.partition.generate_jade_entry()) diff --git a/jade_gui/widgets/partition.ui b/jade_gui/widgets/partition.ui new file mode 100644 index 0000000..d6a4075 --- /dev/null +++ b/jade_gui/widgets/partition.ui @@ -0,0 +1,38 @@ + + + + + diff --git a/jade_gui/widgets/selected_locale.py b/jade_gui/widgets/selected_locale.py new file mode 100644 index 0000000..5db9e4f --- /dev/null +++ b/jade_gui/widgets/selected_locale.py @@ -0,0 +1,40 @@ +# selected_locale.py + +# +# Copyright 2022 axtlos + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/selected_locale.ui") +class SelectedLocale(Adw.ActionRow): + __gtype_name__ = "SelectedLocale" + + remove_locale = Gtk.Template.Child() + + def __init__(self, page, window, locale, application, **kwargs): + super().__init__(**kwargs) + + self.window = window + self.page = page + self.locale = locale + + self.set_title(locale) + self.remove_locale.connect("clicked", self.remove_locale_clicked) + + def remove_locale_clicked(self, button): + self.page.update_selected_locale_list(remove=self.locale, row=self) diff --git a/jade_gui/widgets/selected_locale.ui b/jade_gui/widgets/selected_locale.ui new file mode 100644 index 0000000..4ed5b66 --- /dev/null +++ b/jade_gui/widgets/selected_locale.ui @@ -0,0 +1,18 @@ + + + + + diff --git a/jade_gui/widgets/timezone.py b/jade_gui/widgets/timezone.py new file mode 100644 index 0000000..c5c990f --- /dev/null +++ b/jade_gui/widgets/timezone.py @@ -0,0 +1,52 @@ +# timezone.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from datetime import datetime +import pytz +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ +from pytz import timezone + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/timezone.ui") +class TimezoneEntry(Adw.ActionRow): + __gtype_name__ = "TimezoneEntry" + + time_label = Gtk.Template.Child() + + def __init__(self, window, region, location, locale, application, **kwargs): + super().__init__(**kwargs) + + self.region = region + self.location = location + self.locale = locale + + self.set_title(region + "/" + location) + self.time_label.set_text(self.calculate_time(location=location, region=region)) + + def calculate_time(self, location, region): + timezone = pytz.timezone(region + "/" + location) + datetime_timezone = datetime.now(timezone) + return datetime_timezone.strftime("%H:%M") + + def __str__(self) -> str: + return f"{self.region}/{self.location}" + + def get_timezone(self): + return timezone(str(self)) diff --git a/jade_gui/widgets/timezone.ui b/jade_gui/widgets/timezone.ui new file mode 100644 index 0000000..8c5403c --- /dev/null +++ b/jade_gui/widgets/timezone.ui @@ -0,0 +1,22 @@ + + + + + diff --git a/jade_gui/widgets/variant.py b/jade_gui/widgets/variant.py new file mode 100644 index 0000000..b925cec --- /dev/null +++ b/jade_gui/widgets/variant.py @@ -0,0 +1,52 @@ +# variant.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from gi.repository import Gtk, GLib, Adw +from gettext import gettext as _ + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/widgets/variant.ui") +class KeyboardVariant(Adw.ActionRow): + __gtype_name__ = "KeyboardVariant" + + select_variant = Gtk.Template.Child() + + def __init__( + self, + window, + variant, + country, + country_shorthand, + button_group, + application, + **kwargs + ): + super().__init__(**kwargs) + self.window = window + self.variant = variant + self.country = country + self.country_shorthand = country_shorthand + + self.set_title(variant) + self.set_subtitle(country + " - " + country_shorthand) + self.select_variant.set_group(button_group) + self.select_variant.connect("toggled", self.selected) + + def selected(self, widget): + self.window.keyboard_screen.select_variant(self) diff --git a/jade_gui/widgets/variant.ui b/jade_gui/widgets/variant.ui new file mode 100644 index 0000000..eee41d3 --- /dev/null +++ b/jade_gui/widgets/variant.ui @@ -0,0 +1,17 @@ + + + + + diff --git a/jade_gui/window.py b/jade_gui/window.py new file mode 100644 index 0000000..c0619c4 --- /dev/null +++ b/jade_gui/window.py @@ -0,0 +1,255 @@ +# window.py + +# +# Copyright 2022 user + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import time +import socket +from gi.repository import Gtk, Gdk, GLib, Adw +from jade_gui.classes.partition import Partition +from jade_gui.widgets.desktop import DesktopEntry +from jade_gui.widgets.disk import DiskEntry +from jade_gui.widgets.partition import PartitionEntry +from jade_gui.functions.keyboard_screen import KeyboardScreen +from jade_gui.functions.timezone_screen import TimezoneScreen +from jade_gui.functions.locale_screen import LocaleScreen +from jade_gui.functions.user_screen import UserScreen +from jade_gui.functions.desktop_screen import DesktopScreen +from jade_gui.functions.misc_screen import MiscScreen +from jade_gui.functions.partition_screen import PartitionScreen +from jade_gui.functions.summary_screen import SummaryScreen +from jade_gui.functions.install_screen import InstallScreen +from jade_gui.functions.finished_screen import FinishedScreen +from jade_gui.functions.welcome_screen import WelcomeScreen +from jade_gui.classes.jade_screen import JadeScreen +from jade_gui.locales.locales_list import locations +from jade_gui.keymaps import keymaps +from jade_gui.desktops import desktops +from jade_gui.utils import disks +from jade_gui.utils.threading import RunAsync + + +@Gtk.Template(resource_path="/al/getcryst/jadegui/window.ui") +class JadeGuiWindow(Gtk.ApplicationWindow): + __gtype_name__ = "JadeGuiWindow" + + event_controller = Gtk.EventControllerKey.new() + carousel = Gtk.Template.Child() + + # quit_button = Gtk.Template.Child() + about_button = Gtk.Template.Child() + # no_internet = Gtk.Template.Child() + + next_button = Gtk.Template.Child() + back_button = Gtk.Template.Child() + revealer = Gtk.Template.Child() + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.finished_screen = FinishedScreen( + window=self, set_valid=self.page_valid, **kwargs + ) + self.installer_screen = InstallScreen( + window=self, set_valid=self.page_valid, **kwargs + ) + self.partition_screen = PartitionScreen( + window=self, set_valid=self.page_valid, **kwargs + ) + self.misc_screen = MiscScreen(window=self, set_valid=self.page_valid, **kwargs) + self.desktop_screen = DesktopScreen( + window=self, set_valid=self.page_valid, **kwargs + ) + self.user_screen = UserScreen(window=self, set_valid=self.page_valid, **kwargs) + self.keyboard_screen = KeyboardScreen( + window=self, set_valid=self.page_valid, keymaps=keymaps, **kwargs + ) + self.timezone_screen = TimezoneScreen( + window=self, set_valid=self.page_valid, locations=locations, **kwargs + ) + self.locale_screen = LocaleScreen( + window=self, set_valid=self.page_valid, locations=locations, **kwargs + ) + self.welcome_screen = WelcomeScreen( + window=self, + set_valid=self.page_valid, + next_page=self.next, + online=self.online, + **kwargs + ) + + self.summary_screen = SummaryScreen( + window=self, set_valid=self.page_valid, **kwargs + ) + self.carousel.append(self.welcome_screen) + self.carousel.append(self.keyboard_screen) + self.carousel.append(self.timezone_screen) + self.carousel.append(self.locale_screen) + self.carousel.append(self.user_screen) + self.carousel.append(self.desktop_screen) + self.carousel.append(self.misc_screen) + self.carousel.append(self.partition_screen) + # self.carousel.append(self.manual_partition) + self.carousel.append(self.summary_screen) + self.carousel.append(self.installer_screen) + self.carousel.append(self.finished_screen) + ### Widgets for first page (welcome screen) + # self.quit_button.connect("clicked", self.confirmQuit) + # self.summary_screen.connect_buttons() + self.about_button.connect("clicked", self.show_about) + self.partition_mode = "Auto" + ### --------- + + self.next_button.connect("clicked", self.next) + self.back_button.connect("clicked", self.back) + + ### Test desktops + firstdesktop = DesktopEntry( + window=self, desktop=desktops[0], button_group=None, **kwargs + ) # Manually specifying onyx since the other entries need a button group to attach to + self.desktop_screen.list_desktops.append(firstdesktop) + self.desktop_screen.chosen_desktop = ( + self.desktop_screen.list_desktops.get_row_at_index(0).get_title() + ) + self.desktop_screen.list_desktops.select_row(firstdesktop) + for desktop in desktops: + if desktop != desktops[0]: + self.desktop_screen.list_desktops.append( + DesktopEntry( + window=self, + desktop=desktop, + button_group=firstdesktop.select_button, + **kwargs + ) + ) + ### --------- + + ### Test partitions + self.available_disks = disks.get_disks() + firstdisk = DiskEntry( + window=self, + disk=self.available_disks[0], + disk_size=disks.get_disk_size(self.available_disks[0]), + disk_type=disks.get_disk_type(self.available_disks[0]), + # disk_model=disks.get_disk_model(available_disks[0]), + button_group=None, + valid=self.page_valid, + **kwargs + ) + self.partition_screen.disk_list.append(firstdisk) + for disk in self.available_disks: + if disk != self.available_disks[0]: + self.partition_screen.disk_list.append( + DiskEntry( + window=self, + disk=disk, + disk_size=disks.get_disk_size(disk), + disk_type=disks.get_disk_type(disk), + # disk_model=disks.get_disk_model(disk), + button_group=firstdisk.select_button, + valid=self.page_valid, + **kwargs + ) + ) + + self.available_partitions = disks.get_partitions() + for partition in self.available_partitions: + self.partition_screen.partition_list.append( + PartitionEntry( + window=self, + partition=Partition( + partition=partition, + mountpoint="", + filesystem="", + size=disks.get_disk_size(partition), + ), + **kwargs + ) + ) + ### --------- + RunAsync(self.welcome_screen.check_internet) + + def online(self): + if self.timezone_screen.guessed_timezone is None: + self.timezone_screen.ip_request_timezone() + + def _get_current_page(self, offset=0) -> JadeScreen: + current_index = self.carousel.get_position() + return self.carousel.get_nth_page(current_index + offset) + + def on_page_change(self, page: JadeScreen): + self.next_button.set_sensitive(page.is_valid()) + + disable_next = page not in [self.welcome_screen, self.finished_screen] + disable_back = page not in [ + self.welcome_screen, + self.installer_screen, + self.finished_screen, + ] + + if disable_back == disable_next: + self.revealer.set_reveal_child(disable_next) + self.next_button.set_visible(True) + self.back_button.set_visible(True) + else: + self.next_button.set_visible(disable_next) + self.back_button.set_visible(disable_back) + + page.on_show() + + def next(self, *_): + previous_page = self._get_current_page() + page = self._get_current_page(1) + self.carousel.scroll_to(page, True) + + previous_page.on_complete() + self.on_page_change(page) + + def back(self, *_): + page = self._get_current_page(-1) + self.carousel.scroll_to(page, True) + + self.on_page_change(page) + + def page_valid(self, valid: bool): + self.next_button.set_sensitive(valid) + + def show_page(self, _, page, *__): + self.carousel.scroll_to(page, True) + + def confirm_quit(self, *_): + def handle_response(_widget, response_id): + if response_id == Gtk.ResponseType.YES: + _widget.destroy() + self.destroy() + elif response_id == Gtk.ResponseType.NO: + _widget.destroy() + + dialog = Gtk.MessageDialog( + transient_for=self, + modal=True, + parent=self, + text="Do you want to try\nCrystal without installing?", + buttons=Gtk.ButtonsType.YES_NO, + ) + dialog.connect("response", handle_response) + dialog.present() + + def show_about(self, *_): + builder = Gtk.Builder.new_from_resource("/al/getcryst/jadegui/about.ui") + about_window = builder.get_object("aboutWindow") + about_window.set_transient_for(self) + about_window.present() diff --git a/jade_gui/window.ui b/jade_gui/window.ui new file mode 100644 index 0000000..e29e745 --- /dev/null +++ b/jade_gui/window.ui @@ -0,0 +1,126 @@ + + + + + + + + vertical + 6 + 6 + 6 + 6 + + + About Jade GUI + + + + + + + +
+ + Keyboard Shortcuts + win.show-help-overlay + + + About jade gui + app.about + +
+
+
diff --git a/jadegui.flatpak b/jadegui.flatpak new file mode 100644 index 0000000..e09e57f Binary files /dev/null and b/jadegui.flatpak differ diff --git a/main-page-screenshot.png b/main-page-screenshot.png new file mode 100644 index 0000000..f0a4ca0 Binary files /dev/null and b/main-page-screenshot.png differ diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..89dd84b --- /dev/null +++ b/meson.build @@ -0,0 +1,23 @@ +project('jade-gui', + version: '0.1.0', + meson_version: '>= 0.59.0', + default_options: [ 'warning_level=2', + 'werror=false', + ], +) + +i18n = import('i18n') +localedir = get_option('localedir') +gnome = import('gnome') + + + +subdir('data') +subdir('jade_gui') +subdir('po') + +gnome.post_install( + glib_compile_schemas: true, + gtk_update_icon_cache: true, + update_desktop_database: true, +) diff --git a/modules.json b/modules.json new file mode 100644 index 0000000..6704aa5 --- /dev/null +++ b/modules.json @@ -0,0 +1,34 @@ +{ + "name": "modules", + "buildsystem": "simple", + "build-commands": [], + "modules": [ + { + "name": "vte", + "buildsystem": "meson", + "sources": [ + { + "type": "git", + "url": "https://gitlab.gnome.org/GNOME/vte.git", + "commit": "3ed53bfaa7344ce5b7727a60a2d33315b15201e5" + } + ], + "config-opts": [ + "-Ddocs=false", + "-Dvapi=false", + "-Dgtk4=true", + "-Dgtk3=false" + ] + }, + { + "name": "jadegui", + "buildsystem": "meson", + "sources": [ + { + "type": "dir", + "path": "." + } + ] + } + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..5d0847c --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "scripts": { + "fmt": "yarn prettier --write '**/*.{xml,ui,css}' '!build-dir' '!_build' '!.flatpak-builder' && python -m black ." + }, + "devDependencies": { + "@prettier/plugin-xml": "^2.2.0", + "prettier": "^2.7.1" + }, + "prettier": { + "bracketSameLine": true, + "singleAttributePerLine": false, + "xmlSelfClosingSpace": false + } +} diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..f74b7a7 --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1,13 @@ +ru +sv +uk +de +es +pl +ta +pt_BR +ca +tr +cs +it +az diff --git a/po/POTFILES b/po/POTFILES new file mode 100644 index 0000000..711d3cd --- /dev/null +++ b/po/POTFILES @@ -0,0 +1,17 @@ +data/al.getcryst.jadegui.desktop.in +data/al.getcryst.jadegui.appdata.xml.in +data/al.getcryst.jadegui.gschema.xml +src/window.ui +src/pages/desktop_screen.ui +src/pages/finished_screen.ui +src/pages/install_screen.ui +src/pages/keyboard_screen.ui +src/pages/language_screen.ui +src/pages/misc_screen.ui +src/pages/partition_screen.ui +src/pages/summary_screen.ui +src/pages/timezone_screen.ui +src/pages/user_screen.ui +src/main.py +src/window.py + diff --git a/po/az.po b/po/az.po new file mode 100644 index 0000000..d44af29 --- /dev/null +++ b/po/az.po @@ -0,0 +1,273 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2023-02-07 13:31+0000\n" +"Last-Translator: Mehrab Poladov \n" +"Language-Team: Azerbaijani \n" +"Language: az\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.2\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Crystal Linux quraşdırın" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Təsvirsiz" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Jade GUI haqqında" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Crystal Linux-a xoş gəlmisiniz" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Crystal Linux quraşdırmaya başlamaq üçün Start düyməsini basın!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Masaüstünü Seçin" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Daha sonra bir çox masaüstünü quraşdıra bilərsiniz." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Növbəti" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Quraşdırma Tamamlandı!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Crystal Linux istifadə etməyə başlamaq üçün cihazı yenidən başladın!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Yenidən başladın" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Crystal Quraşdırılır" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Bu bir az vaxt ala bilər" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Keyboard Layout seçin" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Müxtəlif" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "Fərdi Host adı" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 loopback‎" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "" + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "" + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "" diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..f7e7ada --- /dev/null +++ b/po/ca.po @@ -0,0 +1,270 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "" + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "" + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "" + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..a0a52e6 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,276 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-12-11 16:31+0000\n" +"Last-Translator: cosita3cz \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 4.14.2\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Instalovat Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Žádný popis" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "O Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Vítejte v Crystal Linux(u)" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Zmáčkněte start, a započněte instalaci Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Vyberte Desktop" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Můžete si nainstalovat víc Desktopů později." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Další" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Instalace dokončena!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Restartujte zařízení a začněte používat Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Restartovat" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Instaluji Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Toto bude chviličku trvat" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Vyberte rozhraní klávesnice" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Vyberte přídavné locale" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Vyberte přídavné locale pro zapnutí" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Různé" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "Customizovaný Hostname" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 Loopback" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "Toto může opravit konektivitu IPv6 s ISP." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Časový posun" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" +"Podporujte snapshoty jako prostředek k návratu do dřívějších stavů systému." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Vytvoří kompresované mista Swapu v RAMce." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Vyberte svazek na který to budeme instalovat" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Je potřeba mít alespoň 1 root svazek" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Rychlé akce" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Automatické rozdělení disku" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Otevřít GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Otevřít terminál" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Dostupné Svazky" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Vyberte instalační disk" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Vyberte disk na který chcete nainstalovat Crystal Linux. Ten se potom " +"zformátuje, takže na něm nic nezbude kromě systému Crystal Linux." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Manuálně rozdělit disk" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Shrnutí" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Časová zóna a Locale" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "Región/Lokace" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Rozložení Klávesnice" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "Rozložení" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Uživatelské nastavení" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "Uživatelské jméno" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo zapnout/vypnout" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root zapnout/vypnout" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Plocha" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "plocha" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Nastavení rozdělení disku" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "Vybraný instalační svazek" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "Legacy BIOS/UEFI" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Různé Nastavení" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "IPv6 zapnout/vypnout" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "Časový posun zapnout/vypnout" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd zapnout/vypnout" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Přesunout na další stránku" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Vyberte časovou zónu" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Hledat pro časovou zónu" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Vytvořit uživatele" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "Můžete kdyžtak přidat jiné uživatele později." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Zadejte uživatelské jméno" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Zadejte heslo" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Ještě jednou heslo" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "Administrátor" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Povolit účet superuser" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..95c6823 --- /dev/null +++ b/po/de.po @@ -0,0 +1,280 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2023-02-02 18:36+0000\n" +"Last-Translator: Mathis Winterer \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.2\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Crystal Linux installieren" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Keine Beschreibung" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Über Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Wilkommen in Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Drücken sie Start um Crystal Linux zu installieren!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Wählen sie ein Desktop aus" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Sie können mehrere Desktops später installieren." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Weiter" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Installation abgeschlossen!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Starten sie ihr Gerät neu um Crystal Linux zu benutzen!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Neu Starten" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Crystal Installieren" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Dies könnte einige Zeit dauern" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Tastaturlayout auswählen" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Weitere Regionen auswählen" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Wählen Sie weitere zu aktivierende Regionen" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Zusätzliche Einstellungen" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "Hostnamen eingeben" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 Loopback" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" +"Dies kann IPv6 Verbindungsprobleme mit bestimmten Internetanbietern beheben." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" +"Unterstützung von Snapshots als Mittel zum Wiederherstellen früherer " +"Zustände des Systems." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Erstellt einen komprimierten Bereich von Swap im RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Wählen sie die Partition aus, auf der Crystal installiert werden soll" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Es wird eine root Partition benötigt" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Schnellaktionen" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Automatisches partitionieren" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "GParted öffnen" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Terminal öffnen" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Verfügbare Partitionen" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Festplatte zum installieren auswählen" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Wählen sie die Festplatte aus, auf der Crystal Linux installiert werden " +"soll. Dies wird alle Daten auf der Festplatte löschen." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Zu manuellen partitionieren wechseln" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Zusammenfassung" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Zeitzone und Region" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "Region/Standort" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Tastaturlayout" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "Layout" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Benutzer-einstellungen" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "Benutzername" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "Sudo aktiviert/deaktiviert" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "Root aktiviert/deaktiviert" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Desktop" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "desktop" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Partition Einstellungen" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "Ausgewählte installations Partition" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "Legacy BIOS/UEFI" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Sonstige Einstellungen" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "IPv6 aktiviert/deaktiviert" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "Timeshift aktiviert/deaktiviert" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "Zramd aktiviert/deaktiviert" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Zu nächster Seite" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Zeitzone auswählen" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Nach einer Zeitzone suchen" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Benutzer Erstellen" + +#: src/pages/user_screen.ui:16 +msgid "You can add more users in the settings on the installed system." +msgstr "" +"Sie können mehr Nutzer in den Einstellungen im installierten System " +"hinzufügen." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Benutzernamen eingeben" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Password eingeben" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Password bestätigen" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "Administratorrechte für Nutzer aktivieren" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Superuser Nutzer aktivieren" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..4f9c4f8 --- /dev/null +++ b/po/es.po @@ -0,0 +1,277 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-11-26 10:17+0000\n" +"Last-Translator: guineu \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Instalar Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Sin descripción" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Sobre Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Bienvenido a Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "¡Pulsa Iniciar para empezar a instalar Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Selecciona un Entrono de escritorio" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Puedes instalar más en el futuro." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Siguiente" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "¡Instalación completada!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "¡Reinicia el equipo para empezar a usar Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Reiniciar" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Instalando Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Esto puede tardar un rato" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Selecciona la disposición del teclado" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Selecciona las configuraciones regionales adicionales" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Selecciona las localizaciones adicionales para habilitarlas" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Miscelánea" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 'loopback'" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" +"Esto puede solucionar problemas de conectividad IPv6 con algunos proveedores " +"de internet." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "Utiliza snapshots para volver a estados anteriores del sistema." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Crea una área comprimida de memoria de intercambio en la RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Selecciona las particiones donde instalar" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Asegúrate de tener, al menos, una partición raíz" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Acciones rápidas" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Particionado automático" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Abrir GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Abrir terminal" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Particiones disponibles" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Selecciona un disco para la instalación" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Selecciona el disco donde quieres instalar Crystal Linux. Esto borrará " +"completamente el disco que selecciones." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Cambiar a particionado manual" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Resumen" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Zona horaria y configuración regional" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "región/localización" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Disposición de teclado" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "disposición" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Configuración de usuario" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "nombre de usuario" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "Habilitar/Deshabilitar sudo" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "Habilitar/Deshabilitar root" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Escritorio" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "escritorio" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Opciones de partición" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "partición de instalación seleccionada" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "BIOS (desfasado)/UEFI" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Configuración miscelánea" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "Habilitar/Deshabilitar IPv6" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "Habilitar/Deshabilitar Timeshift" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "Habilitar/Deshabilitar zramd" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Siguiente página" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Selecciona una zona horaria" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Buscar una zona horaria" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Crear usuario" + +#: src/pages/user_screen.ui:16 +msgid "You can add more users in the settings on the installed system." +msgstr "" + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Introduce nombre de usuario" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Introduce contraseña" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Re-introduce contraseña" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Habilitar cuenta de superusuario" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..51f8331 --- /dev/null +++ b/po/it.po @@ -0,0 +1,276 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2023-02-07 13:31+0000\n" +"Last-Translator: Saverio Blurro \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.2\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Installa Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Nessuna descrizione" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Su Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Benvenuto su Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Premi Inizia per installare Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Seleziona Desktop" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Puoi anche installare più desktop dopo." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Avanti" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Installazione completata!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Riavvia il dispositivo per iniziare a usare Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Riavvia" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Installando Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Potrebbe volerci del tempo" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Selezione il tipo di tastiera" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Selezione più tipi" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Seleziona più tipi da attivare" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Varie" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "Nome host custom" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "Loopback IPv6" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "Questo potrebbe aggiustare problemi di internet con alcuni ISP." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Tempo" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" +"Supporta snapshot come mezzo per tornare a stati precedenti del sistema." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Crea un'area compressa di Swap nella RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Selezionare le partizioni su cui installare" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Assicurati di avere almeno una partizione root" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Azioni veloci" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Partizionamento automatico" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Apri GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Apri il terminale" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Partizioni disponibili" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Seleziona disco di installazione" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Selezionare il disco su cui si desidera installare Crystal Linux. Questa " +"operazione cancellerà l'intero disco selezionato." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Passa al partizionamento manuale" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Sommario" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Fuso orario e località" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "regione/posizione" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Layout di Tastiera" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "layout" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Impostazioni Utente" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "nome utente" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo attivato/disattivato" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root attivato/disattivato" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Desktop" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "desktop" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Impostazioni delle Partizioni" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "partizione d'installazione selezionata" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "legacy bios/uefi" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Impostazioni Varie" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 attivato/disattivato" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "timeshift abilitato/disabilitato" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd attivato/disattivato" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Passa alla prossima pagina" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Seleziona Fuso orario" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Cerca un fuso orario" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Crea utente" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "Puoi aggiungere altri utenti dopo." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Inserisci Nome utente" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Inserici la Password" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Re-inserisci la Password" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "Amministratore" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Abilitare l'account superutente" diff --git a/po/jade_gui.pot b/po/jade_gui.pot new file mode 100644 index 0000000..993ceeb --- /dev/null +++ b/po/jade_gui.pot @@ -0,0 +1,273 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Install Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "No description" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "About Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Welcome to Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Press Start to start installing Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Select Desktop" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "You can install more desktops later." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Next" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Installation Completed!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Reboot the device to start using Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Reboot" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Installing Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "This may take some time" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Select Keyboard Layout" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Select additional locales" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Select additional locales to enable" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Miscellaneous" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "Custom Hostname" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 loopback" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "This can fix IPv6 connectivity issues with some ISPs." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "Support snapshots as a means to roll back to earlier states of the system." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Creates a compressed area of Swap in RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Select partitions to install to" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Make sure to have at least one root partition" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Quick Actions" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Automatic Partitioning" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Open GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Open terminal" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Available partitions" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Select Installation Disk" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Switch to manual partitioning" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Summary" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Timezone and Locale" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "region/location" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Keyboard Layout" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "layout" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "User Settings" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "username" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo enabled/disabled" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root enabled/disabled" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Desktop" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "desktop" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Partition Settings" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "select install partition" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "legacy bios/uefi" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Miscellaneous Settings" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 enabled/disabled" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "timeshift enabled/disabled" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd enabled/disabled" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Move to next page" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Select Timezone" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Search for a timezone" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Create User" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "You can add additional users later." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Enter Username" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Enter Password" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Re-enter Password" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "Adminstrator" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Enable Superuser Account" diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 0000000..09ed36c --- /dev/null +++ b/po/meson.build @@ -0,0 +1,2 @@ +i18n = import('i18n') +i18n.gettext('jade_gui', install_dir: localedir, preset: 'glib', args: '--from-code=UTF-8') diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..b7e4484 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,270 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "" + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "" + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "" + +#: src/pages/user_screen.ui:16 +msgid "You can add more users in the settings on the installed system." +msgstr "" + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..91d52c9 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,275 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-11-24 20:17+0000\n" +"Last-Translator: Py \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Instalar Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Sem descrição" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Sobre o Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Bem vindo ao Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Pressione Iniciar para iniciar a instalação do Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Selecione o Desktop" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Você pode instalar mais desktops depois." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Próximo" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Instalação Concluída!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Reinicie o dispositivo para começar a usar o Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Reiniciar" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Instalando Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Isso pode levar algum tempo" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Selecione o layout do teclado" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Selecione localizações adicionais" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Selecione localizações adicionais para ativar" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Diversos" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "Hostname personalizado" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "Loopback IPv6" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "Pode resolver problemas de conectividade IPv6 em alguns provedores." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "Suporta snapshots como meios de voltar ao estado anterior do sistema." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Cria uma área comprimida de Swap na RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Selecione partições para instalar" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Tenha certeza de ter ao menos uma partição root" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Ações Rápidas" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Particionamento Automático" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Abrir GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Abrir terminal" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Partições disponíveis" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Selecionar Disco de Instalação" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Selecione o disco que deseja instalar o Crystal Linux. Isso apagará o disco " +"completamente." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Alterar para particionamento manual" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Índice" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Localização e Fuso horário" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "região/localização" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Layout de Teclado" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "layout" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Configurações de Usuário" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "usuário" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo ativado/desativado" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root ativado/desativado" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Desktop" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "desktop" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Configurações de Partição" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "partição de instalação selecionada" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "bios legado/uefi" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Configurações Diversas" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 ativado/desativado" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "timeshift ativado/desativado" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd ativado/desativado" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Ir para próxima página" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Selecionar Fuso horário" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Buscar por fuso horário" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Criar Usuário" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "Você pode adicionar mais usuários depois." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Insira o Usuário" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Insira a Senha" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Re-insira a Senha" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "Administrador" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Ativar conta de Superusuário" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..73dde2d --- /dev/null +++ b/po/ru.po @@ -0,0 +1,281 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-10-29 18:17+0000\n" +"Last-Translator: Nick Pryshchepa \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.14\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Установить Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Нет описания" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "О графическом интерфейсе Jade" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Добро пожаловать в Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Нажмите Start, чтобы начать установку Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Выбрать рабочий стол" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Вы можете установить больше рабочих столов позже." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Дальше" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Установка завершена!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Перезагрузите устройство, чтобы начать использовать Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Перезагрузить" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Установка Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Это может занять некоторое время" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Выбрать раскладку клавиатуры" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Выбор дополнительных локалей" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Выберите дополнительные локали для включения" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Прочее" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "Введите имя хоста" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "Шлейф IPv6" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" +"Это может устранить проблемы с подключением к IPv6 у некоторых " +"интернет-провайдеров." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Таймшифт" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" +"Поддержка моментальных снимков как средства отката к более ранним состояниям " +"системы." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "«Zramd»" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Создает сжатую область Swap в оперативной памяти." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Выбрать разделы для установки" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Убедитесь, что у Вас есть хотя бы один root-раздел" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Быстрые Действия" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Автоматическое Разделение" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Открыть GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Открыть GParted" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Доступные разделы" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Выбрать Установочный Диск" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Выберите диск, на который Вы хотите установить Crystal Linux. Это приведет к " +"стиранию всего выбранного Вами диска." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Перейти на ручное разделение" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Реферат" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Часовой пояс и локаль" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "регион/местонахождение" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Раскладка клавиатуры" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "раскладка" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Настройки Пользователя" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "имя пользователя" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo включено/выключено" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root включено/выключено" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Рабочий стол" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "рабочий стол" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Настройки Разделов" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "выбранный установочный раздел" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "старый/наследный bios/uefi" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Прочие Настройки" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 включен/выключен" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "таймшифт включен/выключен" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "«zramd» включен/выключен" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Перейти на следующую страницу" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Выбрать Часовой Пояс" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Поиск часового пояса" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Создать Пользователя" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "" +"Вы можете добавить больше пользователей в настройках установленной системы." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Введите Имя Пользователя" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Введите Пароль" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Повторно Введите Пароль" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "Включить Административные Права для Пользователя" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Включить Аккаунт Суперпользователя" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..b7755fd --- /dev/null +++ b/po/sv.po @@ -0,0 +1,273 @@ +# Jade 1.5.0 +# Copyright (C) 2022 +# This file is distributed under the same license as the jade_gui package. +# Luna Jernberg , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-10-29 18:17+0000\n" +"Last-Translator: Luna Jernberg \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Installera Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Ingen beskrivning" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Om Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Välkommen till Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Tryck på Start för att börja installera Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Välj Skrivbordsmiljö" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Du kan installera fler skrivbordsmiljöer senare." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Nästa" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Installation slutförd!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Starta om enheten för att börja använda Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Starta om" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Installerar Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Detta kan ta lite tid" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Välj Tangentbordslayout" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Välj ytterligare lokaler" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Välj ytterligare lokaler att aktivera" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Diverse" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "Ange värdnamn" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 loopback" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "Detta kan åtgärda IPv6-anslutningsproblem hos vissa internetleverantörer." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "Stödjer ögonblicksbilder som ett sätt att återgå till tidigare tillstånd av systemet." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Skapar ett komprimerat område av Swap i RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Välj partitioner att installera till" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Se till att ha minst en root partition" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Snabb åtgärder" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Automatisk partitionering" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Öppna GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Öppna terminal" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Tillgängliga partitioner" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Välj disk att installera till" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "Välj den disk du vill installera Crystal Linux på. Detta kommer att rensa hela disken du valde." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Ändra till manuell partitionering" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Sammanfattning" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Tidszon och lokal" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "region/plats" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Tangentbordslayout" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "layout" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Användarinställningar" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "användarnamn" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo aktiverad/inaktiverad" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root aktiverad/inaktiverad" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Skrivbord" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "skrivbord" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Partitionsinställningar" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "vald installationspartition" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "äldre bios/uefi" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Diverse inställningar" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 aktiverad/inaktiverad" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "timeshift aktiverad/inaktiverad" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd aktiverad/inaktiverad" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Gå till nästa sida" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Välj tidszon" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Sök efter en tidszon" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Skapa användare" + +#: src/pages/user_screen.ui:16 +msgid "You can add more users in the settings on the installed system." +msgstr "Du kan lägga till fler användare i Inställningar på det installerade systemet." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Ange användarnamn" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Ange lösenord" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Ange lösenordet igen" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "Aktivera administrativa rättigheter för användare" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Aktivera superanvändare konto" diff --git a/po/ta.po b/po/ta.po new file mode 100644 index 0000000..01bc901 --- /dev/null +++ b/po/ta.po @@ -0,0 +1,270 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ta\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "" + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "" + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "" + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "" + +#: src/pages/user_screen.ui:16 +msgid "You can add more users in the settings on the installed system." +msgstr "" + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..1b1955c --- /dev/null +++ b/po/tr.po @@ -0,0 +1,277 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-12-11 16:31+0000\n" +"Last-Translator: Tuhana GAYRETLİ \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.2\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Crystal Linux'u Kurun" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Açıklama yok" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Jade GUI Hakkında" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Crystal Linux'a Hoş Geldiniz" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Crystal Linux'u kurmaya başlamak için Başlat'a basın!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Masaüstü Seçin" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Daha sonra daha fazla masaüstü kurabilirsiniz." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Sonraki" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Kurulum Tamamlandı!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Crystal Linux'u kullanmaya başlamak için cihazı yeniden başlatın!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Yeniden başlat" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Crystal Kuruluyor" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Bu biraz zaman alabilir" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Klavye Düzeni Seçin" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Ek yerel ayarları seçin" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Etkinleştirilecek ek yerel ayarları seçin" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Çeşitli" + +#: src/pages/misc_screen.ui:22 +msgid "Custom Hostname" +msgstr "Özel Ana Bilgisayar Adı" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 geri döngüsü" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "Bu, bazı ISP'lerde IPv6 bağlantı sorunlarını çözebilir." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "" +"Sistemin önceki durumlarına geri dönmenin bir yolu olarak anlık görüntüleri " +"destekleyin." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "RAM'de sıkıştırılmış bir Takas alanı oluşturur." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Kurulacak bölümleri seçin" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "En az bir kök bölümüne sahip olduğunuzdan emin olun" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Hızlı İşlemler" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Otomatik Bölümleme" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "GParted'ı aç" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Uçbirimi aç" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Kullanılabilir bölümler" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Kurulum Diskini Seçin" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Crystal Linux'u kurmak istediğiniz diski seçin. Bu, seçtiğiniz diski tamamen " +"temizleyecektir." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Manuel bölümlemeye geç" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Özet" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Saat Dilimi ve Yerel Ayar" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "bölge/konum" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Klavye Düzeni" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "düzen" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Kullanıcı Ayarları" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "kullanıcı adı" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo etkin/devre dışı" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "kök etkin/devre dışı" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Masaüstü" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "masaüstü" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Bölüm Ayarları" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "seçilen yükleme bölümü" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "eski bios/uefi" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Çeşitli Ayarlar" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 etkin/devre dışı" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "timeshift etkin/devre dışı" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd etkin/devre dışı" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Sonraki sayfaya geç" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Saat Dilimi Seçin" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Saat dilimi ara" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Kullanıcı Oluştur" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "Daha sonra başka kullanıcılar ekleyebilirsiniz." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Kullanıcı Adı Girin" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Şifre Girin" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Şifreyi Tekrar Girin" + +#: src/pages/user_screen.ui:44 +msgid "Adminstrator" +msgstr "Yönetici" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Süper Kullanıcı Hesabını Etkinleştir" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..e033e3c --- /dev/null +++ b/po/uk.po @@ -0,0 +1,277 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the jade_gui package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: jade_gui\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-03 18:58+0200\n" +"PO-Revision-Date: 2022-10-29 18:17+0000\n" +"Last-Translator: seshotake \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.14\n" + +#: data/al.getcryst.jadegui.desktop.in:3 +msgid "Install Crystal Linux" +msgstr "Встановіть Crystal Linux" + +#: data/al.getcryst.jadegui.appdata.xml.in:7 +msgid "No description" +msgstr "Без опису" + +#: src/window.ui:17 +msgid "About Jade GUI" +msgstr "Про Jade GUI" + +#: src/window.ui:85 +msgid "Welcome to Crystal Linux" +msgstr "Ласкаво просимо до Crystal Linux" + +#: src/window.ui:86 +msgid "Press Start to start installing Crystal Linux!" +msgstr "Натисніть «Пуск», щоб розпочати встановлення Crystal Linux!" + +#: src/pages/desktop_screen.ui:13 +msgid "Select Desktop" +msgstr "Виберіть стільницю" + +#: src/pages/desktop_screen.ui:14 +msgid "You can install more desktops later." +msgstr "Ви зможете встановити більше стільниць пізніше." + +#: src/pages/desktop_screen.ui:40 src/pages/keyboard_screen.ui:57 +#: src/pages/language_screen.ui:57 src/pages/misc_screen.ui:81 +#: src/pages/partition_screen.ui:135 +msgid "Next" +msgstr "Далі" + +#: src/pages/finished_screen.ui:15 +msgid "Installation Completed!" +msgstr "Встановлення завершено!" + +#: src/pages/finished_screen.ui:16 +msgid "Reboot the device to start using Crystal Linux!" +msgstr "Перезавантажте пристрій, щоб почати використовувати Crystal Linux!" + +#: src/pages/finished_screen.ui:28 +msgid "Reboot" +msgstr "Перезавантажити" + +#: src/pages/install_screen.ui:15 +msgid "Installing Crystal" +msgstr "Встановлення Crystal" + +#: src/pages/install_screen.ui:16 +msgid "This may take some time" +msgstr "Це може зайняти деякий час" + +#: src/pages/keyboard_screen.ui:15 +msgid "Select Keyboard Layout" +msgstr "Виберіть розкладку клавіатури" + +#: src/pages/language_screen.ui:15 +msgid "Select additional locales" +msgstr "Виберіть додаткові локалі" + +#: src/pages/language_screen.ui:16 +msgid "Select additional locales to enable" +msgstr "Виберіть додаткові локалі, щоб увімкнути" + +#: src/pages/misc_screen.ui:15 +msgid "Miscellaneous" +msgstr "Інше" + +#: src/pages/misc_screen.ui:22 +msgid "Enter Hostname" +msgstr "Введіть ім'я хосту" + +#: src/pages/misc_screen.ui:33 +msgid "IPv6 loopback" +msgstr "IPv6 \"внутрішня петля\"" + +#: src/pages/misc_screen.ui:34 +msgid "This can fix IPv6 connectivity issues with some ISPs." +msgstr "Це може вирішити проблеми з підключенням IPv6 у деяких провайдерів." + +#: src/pages/misc_screen.ui:45 +msgid "Timeshift" +msgstr "Timeshift" + +#: src/pages/misc_screen.ui:46 +msgid "Support snapshots as a means to roll back to earlier states of the system." +msgstr "Підтримка знімків для повернення до попередніх станів системи." + +#: src/pages/misc_screen.ui:57 +msgid "Zramd" +msgstr "Zramd" + +#: src/pages/misc_screen.ui:58 +msgid "Creates a compressed area of Swap in RAM." +msgstr "Створює стиснуту область Swap в RAM." + +#: src/pages/partition_screen.ui:26 +msgid "Select partitions to install to" +msgstr "Виберіть розділи для встановлення" + +#: src/pages/partition_screen.ui:27 +msgid "Make sure to have at least one root partition" +msgstr "Переконайтеся, що у вас є хоча б один кореневий розділ" + +#: src/pages/partition_screen.ui:37 +msgid "Quick Actions" +msgstr "Швидкі дії" + +#: src/pages/partition_screen.ui:45 +msgid "Automatic Partitioning" +msgstr "Автоматичне розділення" + +#: src/pages/partition_screen.ui:50 +msgid "Open GParted" +msgstr "Відкрити GParted" + +#: src/pages/partition_screen.ui:55 +msgid "Open terminal" +msgstr "Відкрити термінал" + +#: src/pages/partition_screen.ui:68 +msgid "Available partitions" +msgstr "Доступні розділи" + +#: src/pages/partition_screen.ui:96 +msgid "Select Installation Disk" +msgstr "Виберіть диск для встановлення" + +#: src/pages/partition_screen.ui:97 +msgid "" +"Select the disk you want to install Crystal Linux on. This will wipe the " +"entire disk you selected." +msgstr "" +"Виберіть диск, на який ви хочете встановити Crystal Linux. Це зітре весь " +"вибраний диск." + +#: src/pages/partition_screen.ui:107 +msgid "Switch to manual partitioning" +msgstr "Перейти до ручного розділення" + +#: src/pages/summary_screen.ui:15 +msgid "Summary" +msgstr "Підсумок" + +#: src/pages/summary_screen.ui:21 +msgid "Timezone and Locale" +msgstr "Часовий пояс і локаль" + +#: src/pages/summary_screen.ui:27 +msgid "region/location" +msgstr "регіон/розташування" + +#: src/pages/summary_screen.ui:47 +msgid "Keyboard Layout" +msgstr "Розкладка клавіатури" + +#: src/pages/summary_screen.ui:53 +msgid "layout" +msgstr "розкладка" + +#: src/pages/summary_screen.ui:73 +msgid "User Settings" +msgstr "Налаштування користувача" + +#: src/pages/summary_screen.ui:79 +msgid "username" +msgstr "ім'я користувача" + +#: src/pages/summary_screen.ui:91 +msgid "sudo enabled/disabled" +msgstr "sudo увімкнено/вимкнено" + +#: src/pages/summary_screen.ui:103 +msgid "root enabled/disabled" +msgstr "root увімкнено/вимкнено" + +#: src/pages/summary_screen.ui:122 +msgid "Desktop" +msgstr "Стільниця" + +#: src/pages/summary_screen.ui:128 +msgid "desktop" +msgstr "стільниця" + +#: src/pages/summary_screen.ui:147 +msgid "Partition Settings" +msgstr "Параметри розділу" + +#: src/pages/summary_screen.ui:153 +msgid "selected install partition" +msgstr "вибраний розділ встановлення" + +#: src/pages/summary_screen.ui:166 +msgid "legacy bios/uefi" +msgstr "застарілий BIOS/UEFI" + +#: src/pages/summary_screen.ui:178 +msgid "Miscellaneous Settings" +msgstr "Інші налаштування" + +#: src/pages/summary_screen.ui:184 +msgid "ipv6 enabled/disabled" +msgstr "ipv6 увімкнено/вимкнено" + +#: src/pages/summary_screen.ui:196 +msgid "timeshift enabled/disabled" +msgstr "timeshift увімкнено/вимкнено" + +#: src/pages/summary_screen.ui:208 +msgid "zramd enabled/disabled" +msgstr "zramd увімкнено/вимкнено" + +#: src/pages/summary_screen.ui:238 src/pages/timezone_screen.ui:59 +#: src/pages/user_screen.ui:83 +msgid "Move to next page" +msgstr "Перейти до наступної сторінки" + +#: src/pages/timezone_screen.ui:15 +msgid "Select Timezone" +msgstr "Виберіть часовий пояс" + +#: src/pages/timezone_screen.ui:26 +msgid "Search for a timezone" +msgstr "Знайдіть часовий пояс" + +#: src/pages/user_screen.ui:15 +msgid "Create User" +msgstr "Створіть користувача" + +#: src/pages/user_screen.ui:16 +msgid "You can add additional users later." +msgstr "" +"Ви можете додати більше користувачів у налаштуваннях встановленої системи." + +#: src/pages/user_screen.ui:23 +msgid "Enter Username" +msgstr "Введіть ім'я користувача" + +#: src/pages/user_screen.ui:28 +msgid "Enter Password" +msgstr "Введіть пароль" + +#: src/pages/user_screen.ui:33 +msgid "Re-enter Password" +msgstr "Повторно введіть пароль" + +#: src/pages/user_screen.ui:44 +msgid "Enable Administrative Rights for User" +msgstr "Увімкнути права адміністратора для користувача" + +#: src/pages/user_screen.ui:56 +msgid "Enable Superuser Account" +msgstr "Увімкнути обліковий запис суперкористувача" diff --git a/python3-modules.json b/python3-modules.json new file mode 100644 index 0000000..de62f1f --- /dev/null +++ b/python3-modules.json @@ -0,0 +1,93 @@ +{ + "name": "python3-modules", + "buildsystem": "simple", + "build-commands": [], + "modules": [ + { + "name": "python3-requests", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requests\" --no-build-isolation" + ], + "sources": [ + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/1d/38/fa96a426e0c0e68aabc68e896584b83ad1eec779265a028e156ce509630e/certifi-2022.9.24-py3-none-any.whl", + "sha256": "90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + }, + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/db/51/a507c856293ab05cdc1db77ff4bc1268ddd39f29e7dc4919aa497f0adbec/charset_normalizer-2.1.1-py3-none-any.whl", + "sha256": "83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" + }, + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", + "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + }, + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/ca/91/6d9b8ccacd0412c08820f72cebaa4f0c0441b5cda699c90f618b6f8a1b42/requests-2.28.1-py3-none-any.whl", + "sha256": "8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349" + }, + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/6f/de/5be2e3eed8426f871b170663333a0f627fc2924cc386cd41be065e7ea870/urllib3-1.26.12-py2.py3-none-any.whl", + "sha256": "b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + } + ] + }, + { + "name": "python3-pytz", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pytz\" --no-build-isolation" + ], + "sources": [ + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/85/ac/92f998fc52a70afd7f6b788142632afb27cd60c8c782d1452b7466603332/pytz-2022.6-py2.py3-none-any.whl", + "sha256": "222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427" + } + ] + }, + { + "name": "python3-tzlocal", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"tzlocal\" --no-build-isolation" + ], + "sources": [ + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/eb/73/3eaab547ca809754e67e06871cff0fc962bafd4b604e15f31896a0f94431/pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", + "sha256": "8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6" + }, + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/61/1e/3c4bf37f8d6ceba07ae357e70eedd21bd15a032b460bab6b12a58c0fce9d/tzdata-2022.6-py2.py3-none-any.whl", + "sha256": "04a680bdc5b15750c39c12a448885a51134a27ec9af83667663f0b3a1bf3f342" + }, + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/31/b7/3bc2c1868f27677139b772e4fde95265b93151912fd90eb874827943bfcf/tzlocal-4.2-py3-none-any.whl", + "sha256": "89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745" + } + ] + }, + { + "name": "python3-urllib3", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"urllib3\" --no-build-isolation" + ], + "sources": [ + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/6f/de/5be2e3eed8426f871b170663333a0f627fc2924cc386cd41be065e7ea870/urllib3-1.26.12-py2.py3-none-any.whl", + "sha256": "b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + } + ] + } + ] +} diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 0000000..9df3d3b --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,94 @@ +Arguments: + /home/marsh/.local/share/nvm/v18.9.1/bin/node /home/marsh/.local/share/nvm/v18.9.1/bin/yarn add -D git.getcryst.al:marshmallow/plugin-xml.git + +PATH: + /home/marsh/.local/bin:/home/marsh/.cargo/bin:/home/marsh/.local/share/nvim/mason/bin:/home/marsh/.local/share/nvm/v18.9.1/bin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl + +Yarn version: + 1.22.19 + +Node version: + 18.9.1 + +Platform: + linux x64 + +Trace: + Error: https://registry.yarnpkg.com/git.getcryst.al:marshmallow%2fplugin-xml.git: Request "https://registry.yarnpkg.com/git.getcryst.al:marshmallow%2fplugin-xml.git" returned a 405 + at params.callback [as _callback] (/home/marsh/.local/share/nvm/v18.9.1/lib/node_modules/yarn/lib/cli.js:66154:18) + at self.callback (/home/marsh/.local/share/nvm/v18.9.1/lib/node_modules/yarn/lib/cli.js:140890:22) + at Request.emit (node:events:513:28) + at Request. (/home/marsh/.local/share/nvm/v18.9.1/lib/node_modules/yarn/lib/cli.js:141862:10) + at Request.emit (node:events:513:28) + at IncomingMessage. (/home/marsh/.local/share/nvm/v18.9.1/lib/node_modules/yarn/lib/cli.js:141784:12) + at Object.onceWrapper (node:events:627:28) + at IncomingMessage.emit (node:events:525:35) + at endReadableNT (node:internal/streams/readable:1359:12) + at process.processTicksAndRejections (node:internal/process/task_queues:82:21) + +npm manifest: + { + "scripts": { + "fmt": "yarn prettier --write '**/*.{xml,ui,css}' '!build-dir' '!_build' && python -m black ." + }, + "devDependencies": { + "@prettier/plugin-xml": "file:/home/marsh/git/plugin-xml", + "prettier": "^2.7.1" + }, + "prettier": { + "bracketSameLine": true, + "singleAttributePerLine": false, + "xmlSelfClosingSpace": false, + "xmlWhitespaceSensitivity": "ignore" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "@prettier/plugin-xml@file:../../git/plugin-xml": + version "2.2.0" + dependencies: + "@xml-tools/parser" "^1.0.11" + prettier ">=2.4.0" + + "@xml-tools/parser@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@xml-tools/parser/-/parser-1.0.11.tgz#a118a14099ea5c3c537e4781fad2fc195b57f8ff" + integrity sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA== + dependencies: + chevrotain "7.1.1" + + chevrotain@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-7.1.1.tgz#5122814eafd1585a9601f9180a7be9c42d5699c6" + integrity sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw== + dependencies: + regexp-to-ast "0.5.0" + + git@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/git/-/git-0.1.5.tgz#9ef62df93f851c27542143bf52d1c68b1017ca15" + integrity sha512-N+bfOrXyKMU/fQtCj6D/U9MQOEN0DAA8TLHSLdUQRSWBOkeRvsjJHdrdkvcq05xO7GSDKWc3nDEGoTZ4DfCCSg== + dependencies: + mime "1.2.9" + + mime@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.9.tgz#009cd40867bd35de521b3b966f04e2f8d4d13d09" + integrity sha512-WiLgbHTIq5AYUvU/Luli4mZ1bUcHpGNHyCsbl+KPMg4zt+XUDpQehWjuBjdLaEvDTinvKj/FgfQt3fPoT7j08g== + + prettier@>=2.4.0, prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + + regexp-to-ast@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" + integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ee70a18 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,35 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@prettier/plugin-xml@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz#2bc2ae667aa817369fdb939aa7d36ea88105483d" + integrity sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew== + dependencies: + "@xml-tools/parser" "^1.0.11" + prettier ">=2.4.0" + +"@xml-tools/parser@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@xml-tools/parser/-/parser-1.0.11.tgz#a118a14099ea5c3c537e4781fad2fc195b57f8ff" + integrity sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA== + dependencies: + chevrotain "7.1.1" + +chevrotain@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-7.1.1.tgz#5122814eafd1585a9601f9180a7be9c42d5699c6" + integrity sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw== + dependencies: + regexp-to-ast "0.5.0" + +prettier@>=2.4.0, prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +regexp-to-ast@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" + integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==