diff --git a/.Xresources b/.Xresources index 4bff6266..449815cf 100644 --- a/.Xresources +++ b/.Xresources @@ -5,3 +5,19 @@ Xft.hintstyle: hintslight Xft.rgba: none Xft.lcdfilter: lcddefault Xcursor.theme: Remus-Black + +st.font: VictorMono Nerd Font Mono:size=12:antialias=true:autohint=true +st.alpha: 0.88 +st.borderpx: 2 +st.shell: /bin/sh +st.bellvolume: 0 +st.blinktimeout: 0 +st.tabspaces: 4 +st.cursorColor: #ebdbb2 +st.termname: st-256color +st.chscale: 0.877 +st.cwscale: 1 + +Nsxiv.window.background: #000000 +Nsxiv.bar.background: #1c1c1c +Nsxiv.bar.foreground: #d4d4d4 diff --git a/.config/Kvantum/MateriaBlur/AUTHORS b/.config/Kvantum/MateriaBlur/AUTHORS new file mode 100644 index 00000000..fd548843 --- /dev/null +++ b/.config/Kvantum/MateriaBlur/AUTHORS @@ -0,0 +1,2 @@ +------------------------ MATERIA BLUR KVANTUM THEME ------------------------ +Alexey Varfolomeev - https://github.com/PapirusDevelopmentTeam/materia-kde diff --git a/.config/Kvantum/MateriaBlur/LICENSE b/.config/Kvantum/MateriaBlur/LICENSE new file mode 100644 index 00000000..729f5d7f --- /dev/null +++ b/.config/Kvantum/MateriaBlur/LICENSE @@ -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/.config/Kvantum/MateriaBlur/MateriaBlur.kvconfig b/.config/Kvantum/MateriaBlur/MateriaBlur.kvconfig new file mode 100644 index 00000000..bfaae2aa --- /dev/null +++ b/.config/Kvantum/MateriaBlur/MateriaBlur.kvconfig @@ -0,0 +1,534 @@ +[%General] +author=Alexey Varfolomeev, based on KvAdaptaDark by Tsu Jan +comment=The dark varianl of Materia +x11drag=menubar_and_primary_toolbar +alt_mnemonic=true +left_tabs=true +attach_active_tab=false +mirror_doc_tabs=true +group_toolbar_buttons=false +toolbar_item_spacing=0 +toolbar_interior_spacing=2 +spread_progressbar=true +composite=true +menu_shadow_depth=5 +tooltip_shadow_depth=2 +splitter_width=4 +scroll_width=9 +scroll_arrows=false +scroll_min_extent=60 +slider_width=2 +slider_handle_width=23 +slider_handle_length=22 +tickless_slider_handle_size=22 +center_toolbar_handle=true +check_size=16 +textless_progressbar=false +progressbar_thickness=2 +menubar_mouse_tracking=true +toolbutton_style=1 +double_click=false +translucent_windows=true +blurring=true +popup_blurring=true +vertical_spin_indicators=false +spin_button_width=24 +fill_rubberband=false +merge_menubar_with_toolbar=true +small_icon_size=16 +large_icon_size=32 +button_icon_size=16 +toolbar_icon_size=16 +combo_as_lineedit=true +animate_states=true +button_contents_shift=false +combo_menu=true +hide_combo_checkboxes=true +combo_focus_rect=false +groupbox_top_label=true +inline_spin_indicators=true +joined_inactive_tabs=true +layout_spacing=6 +layout_margin=9 +scrollbar_in_view=true +transient_scrollbar=true +transient_groove=true +submenu_overlap=0 +tooltip_delay=-1 +tree_branch_line=true +no_window_pattern=false +opaque=QMPlay2,kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam +reduce_window_opacity=10 +respect_DE=true +scrollable_menu=false +submenu_delay=250 +no_inactiveness=false +reduce_menu_opacity=0 + +[GeneralColors] +window.color=#282828 +base.color=#30303082 +alt.base.color=#30303082 +button.color=#424242 +light.color=#47535a +mid.light.color=#313131 +dark.color=black +mid.color=#191919 +highlight.color=#4285f452 +inactive.highlight.color=#4285f474 +text.color=#dfdfdf +window.text.color=#dfdfdf +button.text.color=#dfdfdf +disabled.text.color=#696969 +tooltip.text.color=#eefcff +highlight.text.color=white +link.color=#009DFF +link.visited.color=#9E4FFF +progress.indicator.text.color=#dfdfdf + +[Hacks] +transparent_ktitle_label=true +transparent_dolphin_view=false +transparent_pcmanfm_sidepane=true +blur_translucent=true +transparent_menutitle=true +respect_darkness=true +kcapacitybar_as_progressbar=true +force_size_grip=true +iconless_pushbutton=true +iconless_menu=false +disabled_icon_opacity=70 +lxqtmainmenu_iconsize=16 +normal_default_pushbutton=true +single_top_toolbar=true +tint_on_mouseover=0 +transparent_pcmanfm_view=false +no_selection_tint=true +transparent_arrow_button=true +middle_click_scroll=false +opaque_colors=false + +[PanelButtonCommand] +frame=true +frame.element=button +frame.top=8 +frame.bottom=8 +frame.left=8 +frame.right=8 +interior=true +interior.element=button +indicator.size=8 +text.normal.color=#dfdfdf +text.focus.color=white +text.press.color=#dfdfdf +text.toggle.color=white +text.shadow=0 +text.margin=1 +text.iconspacing=4 +indicator.element=arrow +text.margin.top=2 +text.margin.bottom=3 +text.margin.left=2 +text.margin.right=2 +frame.expansion=0 + +[PanelButtonTool] +inherits=PanelButtonCommand +text.normal.color=#dfdfdf +text.bold=false +indicator.element=arrow +indicator.size=8 +frame.expansion=34 + +[ToolbarButton] +frame.element=tbutton +interior.element=tbutton +indicator.element=tarrow +text.normal.color=#dfdfdf +text.focus.color=white +text.press.color=white +text.toggle.color=white +text.bold=false +frame.expansion=34 + +[Dock] +inherits=PanelButtonCommand +interior.element=dock +frame.element=dock +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 +text.normal.color=#dfdfdf + +[DockTitle] +inherits=PanelButtonCommand +frame=false +interior=false +text.normal.color=#dfdfdf +text.focus.color=white +text.bold=false + +[IndicatorSpinBox] +inherits=PanelButtonCommand +frame=true +interior=true +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +indicator.element=spin +indicator.size=8 +text.normal.color=#dfdfdf +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 + +[RadioButton] +inherits=PanelButtonCommand +frame=false +interior.element=radio +text.normal.color=#dfdfdf +text.focus.color=white +min_width=+0.3font +min_height=+0.3font + +[CheckBox] +inherits=PanelButtonCommand +frame=false +interior.element=checkbox +text.normal.color=#dfdfdf +text.focus.color=white +min_width=+0.3font +min_height=+0.3font + +[Focus] +inherits=PanelButtonCommand +frame=true +frame.element=focus +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +frame.patternsize=14 + +[GenericFrame] +inherits=PanelButtonCommand +frame=true +interior=false +frame.element=common +interior.element=common +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 + +[LineEdit] +inherits=PanelButtonCommand +frame.element=lineedit +interior.element=lineedit +interior=false +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +frame.expansion=0 + +[DropDownButton] +inherits=PanelButtonCommand +indicator.element=arrow-down + +[IndicatorArrow] +indicator.element=arrow +indicator.size=8 + +[ToolboxTab] +inherits=PanelButtonCommand +text.normal.color=#dfdfdf +text.press.color=#dfdfdf +text.focus.color=white + +[Tab] +inherits=PanelButtonCommand +interior.element=tab +text.margin.left=8 +text.margin.right=8 +text.margin.top=2 +text.margin.bottom=2 +frame.element=tab +indicator.element=tab +indicator.size=22 +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.normal.color=#dfdfdf +text.focus.color=#dfdfdf +text.toggle.color=#dfdfdf +frame.expansion=0 +text.bold=false + +[TabFrame] +inherits=PanelButtonCommand +frame.element=tabframe +interior.element=tabframe +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 + +[TreeExpander] +inherits=PanelButtonCommand +indicator.size=8 +indicator.element=tree + +[HeaderSection] +inherits=PanelButtonCommand +interior.element=header +frame.element=header +frame.top=0 +frame.bottom=1 +frame.left=1 +frame.right=1 +text.normal.color=#dfdfdf +text.focus.color=white +text.press.color=white +text.toggle.color=white +frame.expansion=0 + +[SizeGrip] +indicator.element=resize-grip + +[Toolbar] +inherits=PanelButtonCommand +indicator.element=toolbar +indicator.size=5 +text.margin=0 +interior.element=menubar +frame.element=menubar +text.normal.color=#dfdfdf +text.focus.color=white +frame.left=0 +frame.right=0 +frame.top=0 +frame.bottom=4 +frame.expansion=0 + +[Slider] +inherits=PanelButtonCommand +frame.element=slider +focusFrame=true +interior.element=slider +frame.top=3 +frame.bottom=3 +frame.left=3 +frame.right=3 + +[SliderCursor] +inherits=PanelButtonCommand +frame=false +interior.element=slidercursor + +[Progressbar] +inherits=PanelButtonCommand +frame.element=progress +interior.element=progress +text.margin=0 +text.normal.color=#dfdfdf +text.focus.color=#dfdfdf +text.press.color=#dfdfdf +text.toggle.color=#dfdfdf +text.bold=false +frame.expansion=8 + +[ProgressbarContents] +inherits=PanelButtonCommand +frame=true +frame.element=progress-pattern +interior.element=progress-pattern + +[ItemView] +inherits=PanelButtonCommand +text.margin=0 +frame.element=itemview +interior.element=itemview +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=4 +text.margin.right=4 +text.normal.color=#dfdfdf +text.focus.color=white +text.press.color=white +text.toggle.color=white +min_width=+0.3font +min_height=+0.3font +frame.expansion=0 + +[Splitter] +indicator.size=48 + +[Scrollbar] +inherits=PanelButtonCommand +indicator.element=arrow +indicator.size=12 + +[ScrollbarSlider] +inherits=PanelButtonCommand +frame.element=scrollbarslider +interior=false +frame.left=5 +frame.right=5 +frame.top=5 +frame.bottom=5 +indicator.element=grip +indicator.size=12 + +[ScrollbarGroove] +inherits=PanelButtonCommand +interior=false +frame=false + +[MenuItem] +inherits=PanelButtonCommand +frame=true +frame.element=menuitem +interior.element=menuitem +indicator.element=menuitem +text.normal.color=#dfdfdf +text.focus.color=white +text.margin.top=1 +text.margin.bottom=1 +text.margin.left=5 +text.margin.right=5 +frame.top=0 +frame.bottom=0 +frame.left=0 +frame.right=0 +text.bold=false +frame.expansion=0 + +[MenuBar] +inherits=PanelButtonCommand +frame.element=menubar +interior.element=menubar +frame.bottom=0 +text.normal.color=#dfdfdf +frame.expansion=0 +text.bold=false + +[MenuBarItem] +inherits=PanelButtonCommand +interior=true +interior.element=menubaritem +frame.element=menubaritem +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.left=4 +text.margin.right=4 +text.margin.top=0 +text.margin.bottom=0 +text.normal.color=#dfdfdf +text.focus.color=white +text.bold=false +min_width=+0.3font +min_height=+0.3font +frame.expansion=0 + +[TitleBar] +inherits=PanelButtonCommand +frame=false +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +interior.element=titlebar +indicator.size=16 +indicator.element=mdi +text.normal.color=#787878 +text.focus.color=#dfdfdf +text.bold=false +text.italic=true +frame.expansion=0 + +[ComboBox] +inherits=PanelButtonCommand +frame.element=combo +interior.element=combo +interior=false +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +text.focus.color=white +text.press.color=#dfdfdf +text.toggle.color=white +frame.expansion=0 + +[Menu] +inherits=PanelButtonCommand +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 +frame.element=menu +interior.element=menu +text.normal.color=#dfdfdf +text.shadow=false +frame.expansion=0 + +[GroupBox] +inherits=GenericFrame +frame=false +text.shadow=0 +text.margin=0 +text.normal.color=#dfdfdf +text.focus.color=white +text.bold=false +frame.expansion=0 + +[TabBarFrame] +inherits=GenericFrame +frame=true +frame.element=tabBarFrame +interior=false +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 + +[ToolTip] +inherits=GenericFrame +frame.top=3 +frame.bottom=3 +frame.left=3 +frame.right=3 +interior=true +text.shadow=0 +text.margin=0 +interior.element=tooltip +frame.element=tooltip +frame.expansion=0 + +[StatusBar] +inherits=GenericFrame +frame=false +interior=false + +[Window] +interior=true +interior.element=window diff --git a/.config/Kvantum/MateriaBlur/MateriaBlur.svg b/.config/Kvantum/MateriaBlur/MateriaBlur.svg new file mode 100644 index 00000000..3169bf40 --- /dev/null +++ b/.config/Kvantum/MateriaBlur/MateriaBlur.svg @@ -0,0 +1,1370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.config/Kvantum/kvantum.kvconfig b/.config/Kvantum/kvantum.kvconfig new file mode 100644 index 00000000..bac51429 --- /dev/null +++ b/.config/Kvantum/kvantum.kvconfig @@ -0,0 +1,2 @@ +[General] +theme=MateriaBlur diff --git a/.config/awesome/asusctl/asusctl_button.lua b/.config/awesome/asusctl/asusctl_button.lua new file mode 100644 index 00000000..54afef6c --- /dev/null +++ b/.config/awesome/asusctl/asusctl_button.lua @@ -0,0 +1,34 @@ +local buttonTooltip = require("common.button_tooltip") +local notif = require("common.notification") + +-- scripts +local getProfileScript = "asusctl profile get" +local nextProfileScript = "asusctl profile next && " .. getProfileScript +local iconScript = os.getenv("HOME") .. "/scripts/wm_common/asusctl/asusctl-profile-icon.sh" +local notifIcon = os.getenv("HOME") .. "/.config/awesome/themes/icons-global/armorpaint.svg" + +local function getButton(args) + local naughty = args.naughty + local beautiful = args.beautiful + local button = buttonTooltip(args, { + tooltipScript = getProfileScript, + btnDefaultText = "", + tooltipDefaultText = "Getting Profile ...", + buttonClickScript = nextProfileScript, + buttonIconScript = iconScript, + buttonClickCallback = function (button, icon, text) + notif.send(naughty, beautiful, { + title = "Profile Changed", + text = text, + icon = notifIcon, + timeout = 5, + position = notif.POSITION.TOP_MIDDLE, + preset = notif.PRESET.NORMAL, + }) + end + }) + return button +end + +return getButton + diff --git a/.config/awesome/awesome_bar.lua b/.config/awesome/awesome_bar.lua index f7fd732a..b0a38f22 100644 --- a/.config/awesome/awesome_bar.lua +++ b/.config/awesome/awesome_bar.lua @@ -122,7 +122,7 @@ local function getSystemTray(wibox, beautiful, gears, dpi) gears.shape.rounded_rect(cr, dpi(width), dpi(height), 0) --dpi(beautiful.rect_radius)) end local trayMargin = beautiful.systray_margin - luciSysTrayColour:set_widget(wibox.layout.margin(systray, trayMargin, trayMargin, trayMargin, trayMargin)) + luciSysTrayColour:set_widget(wibox.container.margin(systray, trayMargin, trayMargin, trayMargin, trayMargin)) return luciSysTrayColour end @@ -210,6 +210,8 @@ local function createAwesomeBar(args, s, lockScreenCommand) local toggleMicButton = require("pipewire.toggle_mic_button")(args) -- updates local updatesButton = require("updates_widget.update_button")(args) + -- asus profile + local profileButton = require("asusctl.asusctl_button")(args) -- Sports widget local sportsWidget = require("sports.sports_widget")(args) @@ -262,7 +264,7 @@ local function createAwesomeBar(args, s, lockScreenCommand) -- show all tags regardless of the window -- source = function() return root.tags() end } - local luciTagListColour = wibox.widget.background() + local luciTagListColour = wibox.container.background() luciTagListColour:set_widget(luciTagList) --luciTagListColour:set_fg(beautiful.fg_systray) --luciTagListColour:set_bg(beautiful.bg_normal) @@ -287,7 +289,7 @@ local function createAwesomeBar(args, s, lockScreenCommand) -- Create the wibox -- Luci4 bar customization - s.mywibox = awful.wibox({ + s.mywibox = awful.wibar({ screen = s, fg = beautiful.fg_normal, height = dpi(beautiful.topBar_height), @@ -327,7 +329,8 @@ local function createAwesomeBar(args, s, lockScreenCommand) wifiButton, toggleVpnButton, vpnReconnectButton, - separator(beautiful, wibox, { showSeparator = true, margins = { left = dpi(1), right = dpi(5) } }), + separator(beautiful, wibox, { showSeparator = true, margins = { left = dpi(1), right = dpi(1) } }), + profileButton, batteryWidget(args), separator(beautiful, wibox, { margins = { left = dpi(2) } }), redshiftButton, diff --git a/.config/awesome/docker-widget/docker.lua b/.config/awesome/docker-widget/docker.lua index 6503e806..ca3107ba 100644 --- a/.config/awesome/docker-widget/docker.lua +++ b/.config/awesome/docker-widget/docker.lua @@ -125,10 +125,10 @@ local function worker(user_args) local icon = args.icon or ICONS_DIR .. 'docker.svg' local number_of_containers = args.number_of_containers or -1 - local executable_name = args.executable_name or 'docker' + local executable_name = args.executable_name or 'docker' -- 180 is the default width of the container details part of the widget and -- 90 is the default width of the control buttons - local max_widget_width = args.max_widget_width or 180 + 90 + local max_widget_width = args.max_widget_width or 666 + 360 docker_widget:set_icon(icon) diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua index 8a9516eb..c2912beb 100644 --- a/.config/awesome/rc.lua +++ b/.config/awesome/rc.lua @@ -37,6 +37,7 @@ beautiful.init(gears.filesystem.get_configuration_dir() .. config.chosenThemePat -- Collision require("collision")() +local ruled = require("ruled") local wibox = require("wibox") -- Notification library @@ -218,7 +219,12 @@ root.keys(globalkeys) -- {{{ Rules -- Rules to apply to new clients (through the "manage" signal). -awful.rules.rules = require("awesome_rules").awesomeRules(awesomeArgs, awesomeApplications, clientkeys, clientbuttons) +ruled.client.connect_signal("request::rules", function() + ruled.client.append_rules( + require("awesome_rules").awesomeRules(awesomeArgs, awesomeApplications, clientkeys, clientbuttons) + ) +end) +-- awful.rules.rules = require("awesome_rules").awesomeRules(awesomeArgs, awesomeApplications, clientkeys, clientbuttons) -- }}} -- {{{ Signals @@ -276,9 +282,14 @@ client.connect_signal("request::titlebars", function(c) } end) +-- this is called for each screen when xrandr is called +screen.connect_signal("property::outputs", function(s) + awful.spawn.with_shell("echo property_outputs_called") +end) + -- Enable sloppy focus, so that focus follows mouse. client.connect_signal("mouse::enter", function(c) - c:emit_signal("request::activate", "mouse_enter", {raise = false}) + c:emit_signal("request::activate", "mouse_enter", { raise = false }) end) client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) diff --git a/.config/awesome/themes/luci4/application_icons.lua b/.config/awesome/themes/luci4/application_icons.lua index 05f1fa5d..ed66d9ea 100644 --- a/.config/awesome/themes/luci4/application_icons.lua +++ b/.config/awesome/themes/luci4/application_icons.lua @@ -53,6 +53,8 @@ local cakeWallet_icon = baseDir .. "cake_wallet.svg" local koreader_icon = baseDir .. "koreader.svg" local sonobus_icon = baseDir .. "sonobus.svg" local deltaChat_icon = baseDir .. "delta-chat.svg" +local luakit_icon = baseDir .. "luakit.svg" +local thorium_browser = baseDir .. "thorium-browser.svg" -- LUCI4 ICON THEME local icons = { @@ -91,7 +93,9 @@ local icons = { cakeWallet = cakeWallet_icon, koreader = koreader_icon, sonobus = sonobus_icon, - deltaChat = deltaChat_icon + luakit = luakit_icon, + deltaChat = deltaChat_icon, + thoriumBrowser = thorium_browser } -- END LUCI4 Icon Theme return icons diff --git a/.config/awesome/themes/luci4/icons/luakit.svg b/.config/awesome/themes/luci4/icons/luakit.svg new file mode 100644 index 00000000..1cf041e1 --- /dev/null +++ b/.config/awesome/themes/luci4/icons/luakit.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.config/awesome/updates_widget/update_button.lua b/.config/awesome/updates_widget/update_button.lua index 13089abf..da77a36e 100644 --- a/.config/awesome/updates_widget/update_button.lua +++ b/.config/awesome/updates_widget/update_button.lua @@ -12,7 +12,7 @@ local function getButton(args) local naughty = args.naughty local beautiful = args.beautiful local button = buttonTooltip(args, { - -- tooltipScript = statusScript, + tooltipScript = "checkupdates", btnDefaultText = placeholderIcon, tooltipDefaultText = "Update System", buttonClickScript = toggleScript, diff --git a/.config/awesome/vpn-buttons/vpn_common.lua b/.config/awesome/vpn-buttons/vpn_common.lua index a63338cc..21f46332 100644 --- a/.config/awesome/vpn-buttons/vpn_common.lua +++ b/.config/awesome/vpn-buttons/vpn_common.lua @@ -3,7 +3,7 @@ local home = os.getenv("HOME") config.toggleScript = home .. "/scripts/toggle-wifi-profile.sh toggle" config.getScript = home .. "/scripts/toggle-wifi-profile.sh get" -config.statusScript = home .. "/scripts/toggle-wifi-profile.sh status" +config.statusScript = home .. "/scripts/toggle-wifi-profile.sh status" .. " && echo '' && " .. home .. "/scripts/mullvad_status.sh" config.reconnectScript = home .. "/scripts/toggle-wifi-profile.sh reconnect" config.wifiIconScript = home .. "/scripts/wm_common/wifi-status.sh -i" config.wifiStatusScript = home .. "/scripts/wm_common/wifi-status.sh -s" diff --git a/.config/awesome/wm_applications.lua b/.config/awesome/wm_applications.lua index 6d647579..580a5063 100644 --- a/.config/awesome/wm_applications.lua +++ b/.config/awesome/wm_applications.lua @@ -25,11 +25,12 @@ local groupLuci4 = "luci4" local groupLauncher = "launcher" local browserCmd = "librewolf" -local terminalCmd = "kitty" +local terminalCmd = HomeEnv.TERMINAL_CMD -- or "st" --"kitty --single-instance" local editorCmd = terminalCmd .. " -e " .. (os.getenv("EDITOR") or "nvim") local modkey = "Mod4" local homeDir = os.getenv("HOME") +local appImageDir = homeDir .. "/apps/" local browser = { command = browserCmd, @@ -194,7 +195,7 @@ local muteVolume = { } } local brightnessUp = { - command = homeDir .. "/scripts/shell_common/brightnessctl.sh --inc", + command = homeDir .. "/scripts/wm_common/brightnessctl.sh --inc", description = "Increase screen brightness", group = groupLuci4, shell = false, @@ -204,7 +205,7 @@ local brightnessUp = { } } local brightnessDown = { - command = homeDir .. "/scripts/shell_common/brightnessctl.sh --dec", + command = homeDir .. "/scripts/wm_common/brightnessctl.sh --dec", description = "Decrease screen brightness", group = groupLuci4, shell = false, @@ -264,7 +265,7 @@ local shareMenu = { } } local shareMenuEncrypted = { - -- launching with kitty is not a good idea, switch to something more compatible like bash + -- launching with terminalCmd is not a good idea, switch to something more compatible like bash command = terminalCmd .. " " .. homeDir .. "/scripts/wm_common/launch_share_encrypted.sh", description = "Zip, encrypt, get a share link and copy to clipboard", group = groupLuci4, @@ -301,11 +302,20 @@ local resetTor = { group = groupLuci4, shell = true, keyBinding = { - key1 = { modkey }, + key1 = { modkey, "Mod1" }, key2 = "i" } } - +local resetPicom = { + command = homeDir .. "/scripts/reset-picom.sh", + description = "Reset picom", + group = groupLuci4, + shell = true, + keyBinding = { + key1 = { modkey, "Mod1" }, + key2 = "p" + } +} local placement = { centered = "centered", bottom_right = "bottom_right", @@ -345,6 +355,11 @@ local propertiesFloatingCentered = { -- add properties to make the application follow defined window rules. -- set favourite to true to add the application to the favourite menu. local applications = { + luci4gtkwindow = { + command = { }, + class = "Luci4GTKviewer", + properties = propertiesFloatingCentered + }, playPauseMedia = { command = playPauseMedia }, @@ -405,14 +420,47 @@ local applications = { askOllama = { command = askOllama }, + resetPicom = { + command = resetPicom + }, resetTor = { command = resetTor }, terminal = { - label = "Kitty terminal", - class = "kitty", + label = "Default Terminal", + class = "xterm-256color", command = terminal, subGroup = subGroup.terminals, + -- icon = icons.kitty, + favourite = true + }, + kitty = { + label = "Kitty Terminal", + class = "kitty", + command = { + command = "kitty --single-instance", + description = "Open Kitty terminal", + group = groupLauncher, + shell = false, + }, + subGroup = subGroup.terminals, + icon = icons.kitty, + favourite = true + }, + terminalQuake = { + label = "Kitty Quake Terminal", + class = "kitty-quick-access", + command = { + command = "kitten quick-access-terminal", + description = "Open a Quake-style terminal", + group = groupLauncher, + shell = false, + keyBinding = { + key1 = { modkey, "Shift" }, + key2 = "Return" + } + }, + subGroup = subGroup.terminals, icon = icons.kitty, favourite = true }, @@ -555,8 +603,12 @@ local applications = { command = { command = "keepassxc", description = "Password manager", - group = "", - shell = false + group = groupLuci4, + shell = false, + keyBinding = { + key1 = { modkey, "Shift" }, + key2 = "x" + } }, subGroup = subGroup.utils, -- icon = icons.keePass, @@ -628,18 +680,18 @@ local applications = { windowPlacement = placement.centered } }, - vivaldi = { - label = "Vivaldi Browser", - class = "Vivaldi-stable", + thorium = { + label = "Thorium Browser", + class = "", favourite = true, command = { - command = "vivaldi", - description = "Vivaldi web browser", + command = appImageDir .. "Thorium_Browser.AppImage", + description = "Thorium (Chromium based) web browser", group = "", shell = false }, subGroup = subGroup.internet, - icon = icons.vivaldi, + icon = icons.thoriumBrowser, properties = { -- tag = "2", opacity = 1, @@ -712,15 +764,19 @@ local applications = { label = "Nheko", favourite = true, command = { - command = "flatpak run im.nheko.Nheko", + command = "nheko", description = "Nheko messenger", - group = "", - shell = false + group = groupLuci4, + shell = false, + keyBinding = { + key1 = { modkey }, + key2 = "z" + } }, subGroup = subGroup.messaging, -- icon = icons.telegram, properties = { - tag = "8", + -- tag = "8", floating = true, width = 1100, height = 800, @@ -833,7 +889,7 @@ local applications = { class = "", favourite = true, command = { - command = homeDir .. "/apps/FreeTube.AppImage", + command = "freetube", description = "Freetube YouTube Invidious client", group = "", shell = false @@ -885,7 +941,7 @@ local applications = { class = "", favourite = false, command = { - command = homeDir .. "/apps/Inkscape.AppImage", + command = appImageDir .. "Inkscape.AppImage", description = "Inkscape vector image editor", group = "", shell = false @@ -911,7 +967,7 @@ local applications = { class = "", favourite = true, command = { - command = homeDir .. "/apps/Gimp.AppImage", + command = appImageDir .. "Gimp.AppImage", description = "Gimp image editor", group = "", shell = false @@ -946,6 +1002,23 @@ local applications = { subGroup = subGroup.internet, properties = propertiesFloatingCentered }, + luakit = { + label = "Luakit", + class = "Luakit", + favourite = true, + command = { + command = homeDir .. "/apps/Luakit", + description = "Luakit browser", + group = groupLuci4, + shell = false, + keyBinding = { + key1 = { modkey, "Shift" }, + key2 = "b" + } + }, + icon = icons.luakit, + subGroup = subGroup.internet + }, steam = { label = "Steam", class = "", @@ -1000,7 +1073,7 @@ local applications = { -- icon = icons., subGroup = subGroup.multimedia, properties = { - floating = true, + floating = true, -- windowPlacement = placement.centered, width = 800, height = 800 @@ -1025,7 +1098,7 @@ local applications = { class = "Vncviewer", favourite = true, command = { - command = "flatpak run org.tigervnc.vncviewer", + command = "vncviewer", description = "VNC viewer", group = "", shell = false @@ -1052,7 +1125,7 @@ local applications = { class = "Nextcloud", favourite = false, command = { - command = homeDir .. "/apps/Nextcloud.AppImage", + command = appImageDir .. "Nextcloud.AppImage", description = "Nextcloud cloud", group = "", shell = false @@ -1156,7 +1229,7 @@ local applications = { class = "", favourite = true, command = { - command = homeDir .. "/apps/Picard", + command = "picard", description = "MusicBrainz Picard, music tagging and organization", group = "", shell = false @@ -1212,8 +1285,8 @@ local applications = { class = "", favourite = false, command = { - command = homeDir .. "/apps/Audacity.AppImage", - description = "Audacity audio editor", + command = homeDir .. "/apps/Tenacity.AppImage", + description = "Tenacity audio editor", group = "", shell = false }, diff --git a/.config/containers/systemd/ollama-cloud.container b/.config/containers/systemd/ollama-cloud.container new file mode 100644 index 00000000..ac1c00aa --- /dev/null +++ b/.config/containers/systemd/ollama-cloud.container @@ -0,0 +1,23 @@ +[Unit] +Description=Ollama Cloud (on-demand, prompts leave this machine!) +AssertPathIsMountPoint=/opt/ollama + +[Container] +Image=docker.io/ollama/ollama:0.32.15 +ContainerName=ollama-cloud +PublishPort=127.0.0.1:11435:11434 +# lives inside the @ollama subvol mounted at /opt/ollama +Volume=/opt/ollama/cloud:/root/.ollama:U + +Environment=OLLAMA_HOST=0.0.0.0:11434 +Environment=OLLAMA_MODELS=/root/.ollama/models +Environment=OLLAMA_NO_CLOUD=0 + +[Service] +Restart=on-failure +RestartSec=10 +TimeoutStartSec=300 + +# intentionally no [Install]: start on demand only +# systemctl --user start ollama-cloud.service # summon +# systemctl --user stop ollama-cloud.service # banish diff --git a/.config/containers/systemd/ollama.container b/.config/containers/systemd/ollama.container new file mode 100644 index 00000000..1f5ff90c --- /dev/null +++ b/.config/containers/systemd/ollama.container @@ -0,0 +1,41 @@ +[Unit] +Description=Ollama LLM Server (Flow Z13 Strix Halo, Vulkan) +AssertPathIsMountPoint=/opt/ollama +#After=network-online.target +#RequiresMountsFor=/mnt/hd1 + +[Container] +Image=docker.io/ollama/ollama:0.32.15 +ContainerName=ollama +PublishPort=127.0.0.1:11434:11434 +Volume=/opt/ollama/local:/root/.ollama:U +#Volume=/mnt/hd1/llm/ollama:/root/.ollama:U + +AddDevice=/dev/dri +AddDevice=/dev/kfd +PodmanArgs=--group-add keep-groups --ipc=host + +Environment=OLLAMA_HOST=0.0.0.0:11434 +Environment=OLLAMA_MODELS=/root/.ollama/models +Environment=OLLAMA_NO_CLOUD=1 +Environment=OLLAMA_TELEMETRY=0 + +# Strix Halo verified path (issue #16462): Vulkan + iGPU enable +Environment=OLLAMA_VULKAN=1 +Environment=OLLAMA_IGPU_ENABLE=1 + +# Performance +Environment=OLLAMA_FLASH_ATTENTION=1 +Environment=OLLAMA_KV_CACHE_TYPE=q8_0 +Environment=OLLAMA_KEEP_ALIVE=30m +Environment=OLLAMA_NUM_PARALLEL=2 +#Environment=OLLAMA_CONTEXT_LENGTH=16384 + +[Service] +Restart=on-failure +RestartSec=10 +TimeoutStartSec=1500 + +[Install] +WantedBy=default.target + diff --git a/.config/distrobox/distrobox.ini b/.config/distrobox/distrobox.ini new file mode 100644 index 00000000..5c383359 --- /dev/null +++ b/.config/distrobox/distrobox.ini @@ -0,0 +1,84 @@ +# ===================================================================== +# distrobox.ini - manifest consumed by `distrobox assemble` +# +# create all: +# distrobox assemble create --file distrobox.ini +# preview the generated commands, nothing is executed: +# distrobox assemble create --file distrobox.ini --dry-run +# (RECOMMENDED) one entry only: +# distrobox assemble create --file distrobox.ini -n android-dev +# destroy and rebuild every entry below: +# distrobox assemble create --file distrobox.ini --replace +# destroy every entry below: +# distrobox assemble rm --file distrobox.ini +# +# format facts: +# * [section] IS the container name, keys map 1:1 to create flags +# * list keys (additional_packages, additional_flags, volume, +# init_hooks) take space-separated values and stack across lines +# * an existing box is skipped unless --replace or replace=true on +# its entry; NOTE: replace=true also leaks onto every entry listed +# AFTER it, keep such entries at the bottom of the file +# * ./distrobox.ini in the cwd is picked up without --file +# +# operational fact: package names are NOT resolved by assemble. They +# install at the FIRST `distrobox enter` after creation, in ONE +# all-or-nothing pacman/apt transaction; --dry-run validates nothing +# about package names, so verify names before a --replace. +# +# docs: https://distrobox.it/usage/distrobox-assemble/ +# ===================================================================== + +[android-dev] +image=quay.io/toolbx/arch-toolbox:latest +home=/mnt/lucie/distrobox-home/android-dev +additional_packages="git curl fish neovim android-tools qemu-base" +additional_flags="--device=/dev/dri/renderD128" +additional_flags="--device=/dev/kvm" +additional_flags="--group-add=kvm" +pull=true +replace=true +# distrobox create -i quay.io/toolbx/arch-toolbox:latest -n android-dev --home /mnt/lucie/distrobox-home/android-dev --additional-packages "git curl fish neovim adb qemu-headless" y--additional-flags '--device=/dev/dri/renderD128 --device=/dev/kvm --group-add=kvm' + +[isol-arch] +image=quay.io/toolbx/arch-toolbox:latest +home=/mnt/lucie/distrobox-home/arch +additional_packages="git curl fish neovim lua luarocks bat qt5ct qt6ct eza rsync freetype2 fontconfig gtk3" +# GL/Vulkan diagnostics; mesa, vulkan-intel, vulkan-radeon already come from distrobox-init +additional_packages="mesa-utils" +# audio: client libs against the host's pipewire sockets, no servers in the box +additional_packages="libpulse libpipewire alsa-utils alsa-plugins pamixer" +# gstreamer core + codecs (gst-libav drags in ffmpeg + CLI) +additional_packages="gst-plugins-base gst-plugins-good gst-libav" +additional_packages="base-devel" +pull=true +replace=true +# other possible additional packages: luakit, forkgram-bin +# distrobox create -i quay.io/toolbx/arch-toolbox:latest -n isol-arch --home /mnt/lucie/distrobox-home/arch --additional-packages "git curl fish neovim" + +[ubuntu] +image=quay.io/toolbx/ubuntu-toolbox:latest +home=/mnt/lucie/distrobox-home/ubuntu +additional_packages="git curl wget neovim" +pull=true +replace=true +# distrobox create -i quay.io/toolbx/ubuntu-toolbox:latest -n ubuntu --home /mnt/distrobox-home/ubuntu --additional-packages "git curl wget neovim" + +[music-arch] +image="quay.io/toolbx/arch-toolbox:latest" +home="/mnt/lucie/distrobox-home/music" +additional_packages="picard pipewire pipewire-pulse pipewire-alsa libpulse git curl fish neovim lua luarocks bat qt5ct qt6ct eza " +pre_init_hooks="export SHELL=/usr/bin/fish;" +# mnt volumes are already mounted by default +pull=true +replace=false + +[aider-box] +image=quay.io/toolbx/arch-toolbox:latest +home="/mnt/lucie/distrobox-home/aider" +additional_packages="python python-pipx python-pip python-pytest ruff git openssh curl fish neovim ripgrep lua luarocks eza rsync bat" +init_hooks="curl -LsSf https://aider.chat/install.sh | sh" +pull=true +root=false +replace=true + diff --git a/.config/distrobox/link_configs.sh b/.config/distrobox/link_configs.sh new file mode 100644 index 00000000..672b3845 --- /dev/null +++ b/.config/distrobox/link_configs.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# +# link_configs.sh - Symlink dotfiles from source to destination home directory +# +# Usage: +# ./link_configs.sh /home/lucie/dotfiles /home/lucie +# +# Arguments: +# homeDirSource - Directory containing the original config files/dirs +# homeDirDest - Destination home directory where symlinks will be created +# +# Notes: +# - Edit the 'paths' array below to add/remove configurations +# - Handles both files and directories (e.g. .config/fish/config.fish) +# - Parent directories are created automatically in the destination +# - Existing symlinks are overwritten (-f flag) + +homeDirSource="$1" +homeDirDest="$2" + +paths=( + ".config/fontconfig" + ".local/share" + ".config/gtk-3.0" + ".config/gtk-4.0" + ".config/qt5ct" + ".config/qt6ct" + ".config/Kvantum" + ".config/fish/config.fish" + ".config/fish/conf.d" + ".config/fish/functions" + ".config/kitty" + ".config/nvim" + ".local/share/themes" + ".local/share/icons" + ".local/share/fonts" + "scripts" + ".shell_env" +) + +for p in "${paths[@]}"; do + mkdir -p "${homeDirDest}/$(dirname "${p}")" + ln -sf "${homeDirSource}/${p}" "${homeDirDest}/${p}" +done + diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 350c7391..a0eb16fa 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -150,10 +150,13 @@ if status is-interactive ### OS SPECIFIC ### if test (uname -s) = "Darwin" - set OS_NAME (sw_vers -productName) + set -g OS_NAME macos else - set OS_NAME (lsb_release -is) - end + set -g OS_NAME linux + if test -e /etc/os-release + set -g OS_NAME (grep '^ID=' /etc/os-release | string replace -r '^ID="?(.+)"?$' '$1') + end + end # if the variable $CONTAINER_ID exists, the sessions is in a distrobox container if test -n "$CONTAINER_ID" @@ -163,11 +166,11 @@ if status is-interactive end switch $OS_NAME - case "Ubuntu" + case "ubuntu" abbr --add ca batcat --color=always alias cat='batcat -p --color=always' abbr --add upd "sudo apt update && sudo apt upgrade -y" - case "Arch" + case "arch" abbr --add ca bat --color=always alias cat='bat -p --color=always' # pacman and yay @@ -184,7 +187,7 @@ if status is-interactive alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" - case "Fedora" + case "fedora" alias dmenu='wofi --dmenu' abbr --add vi "nvim" abbr --add upd "sudo dnf upgrade" @@ -194,10 +197,10 @@ if status is-interactive exec Hyprland end - case "macOS" + case "macos" abbr --add ca bat --color=always alias cat='bat -p --color=always' - case "Linuxmint" + case "linuxmint" abbr --add ca batcat --color=always alias cat='batcat -p --color=always' abbr --add upd "sudo apt update && sudo apt upgrade -y" diff --git a/.config/gtk-4.0/settings.ini b/.config/gtk-4.0/settings.ini index 56ec8add..11a959a6 100644 --- a/.config/gtk-4.0/settings.ini +++ b/.config/gtk-4.0/settings.ini @@ -6,10 +6,6 @@ gtk-theme-name=Material-Black-Pistachio gtk-icon-theme-name=BeautyLine gtk-font-name=Inter 10.5 gtk-cursor-theme-name=Remus-Black -gtk-toolbar-style=GTK_TOOLBAR_BOTH -gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR -gtk-button-images=1 -gtk-menu-images=1 gtk-enable-event-sounds=1 gtk-enable-input-feedback-sounds=1 gtk-xft-antialias=1 diff --git a/.config/kitty/quick-access-terminal.conf b/.config/kitty/quick-access-terminal.conf new file mode 100644 index 00000000..ba2af3c9 --- /dev/null +++ b/.config/kitty/quick-access-terminal.conf @@ -0,0 +1,8 @@ +edge none +# 50% width on a 2560 wide screen = 1280px +columns 1100px +# 66% height on a 1600 tall screen = 1056px +lines 628px + +background_opacity 0.75 +kitty_override window_border_width=0 diff --git a/.config/kitty/ssh.conf b/.config/kitty/ssh.conf new file mode 100644 index 00000000..203407f8 --- /dev/null +++ b/.config/kitty/ssh.conf @@ -0,0 +1,3 @@ +hostname * +forward_remote_control yes + diff --git a/.config/luakit/luci_search.lua b/.config/luakit/luci_search.lua new file mode 100644 index 00000000..1a00d915 --- /dev/null +++ b/.config/luakit/luci_search.lua @@ -0,0 +1,20 @@ +local settings = require("settings") + +local midoriUrl = os.getenv("SEARCH_AI_URL") +local default = os.getenv("SEARCH_URL") +local duckUrl = "https://duckduckgo.com/?q=%s" +local duckAiUrl = "https://duck.ai/?q=%s" + +settings.window.search_engines = { + aur = "https://aur.archlinux.org/packages?K=%s", + midori = midoriUrl, + m = midoriUrl, + duck = duckUrl, + d = duckUrl, + ai = duckAiUrl, + searxng = default, + default = default, +} + +settings.window.default_search_engine = "default" + diff --git a/.config/luakit/luci_session.lua b/.config/luakit/luci_session.lua new file mode 100644 index 00000000..88fbc523 --- /dev/null +++ b/.config/luakit/luci_session.lua @@ -0,0 +1,35 @@ +local modes = require("modes") +local session = require("session") + +-- :wsave — save current session to a file (like :w in vim) +-- :wload — restore session from a file (like :source in vim) +modes.add_cmds({ + { ":wsave", "Save session to file.", function (w, o) + local file = o.arg + if not file or file == "" then + w:error("Usage: :wsave ") + return + end + session.save(file) + w:notify("Session saved to " .. file) + end, format = "{file}" }, + + { ":wload", "Load session from file.", function (w, o) + local file = o.arg + if not file or file == "" then + w:error("Usage: :wload ") + return + end + if not os.exists(file) then + w:error("File not found: " .. file) + return + end + -- Temporarily swap the session file path so restore() picks it up + local original = session.session_file + session.session_file = file + session.restore(false) -- false = don't delete the file + session.session_file = original + w:notify("Session loaded from " .. file) + end, format = "{file}" }, +}) + diff --git a/.config/luakit/theme.lua b/.config/luakit/theme.lua new file mode 100644 index 00000000..95198bf3 --- /dev/null +++ b/.config/luakit/theme.lua @@ -0,0 +1,101 @@ +-------------------------- +-- Default luakit theme -- +-------------------------- + +local theme = {} + +-- Default settings +theme.font = "12pt IosevkaTerm Nerd Font" +theme.fg = "#fff" +theme.bg = "#000" + +-- General colours +theme.success_fg = "#0f0" +theme.loaded_fg = "#33AADD" +theme.error_fg = "#FFF" +theme.error_bg = "#F00" + +-- Warning colours +theme.warning_fg = "#F00" +theme.warning_bg = "#FFF" + +-- Notification colours +theme.notif_fg = "#444" +theme.notif_bg = "#FFF" + +-- Menu colours +theme.menu_fg = "#fff" +theme.menu_bg = "#000" +theme.menu_selected_fg = "#FF0" +theme.menu_selected_bg = "#000" +theme.menu_title_bg = "#fff" +theme.menu_primary_title_fg = "#f00" +theme.menu_secondary_title_fg = "#666" + +theme.menu_disabled_fg = "#999" +theme.menu_disabled_bg = theme.menu_bg +theme.menu_enabled_fg = theme.menu_fg +theme.menu_enabled_bg = theme.menu_bg +theme.menu_active_fg = "#060" +theme.menu_active_bg = theme.menu_bg + +-- Proxy manager +theme.proxy_active_menu_fg = '#000' +theme.proxy_active_menu_bg = '#FFF' +theme.proxy_inactive_menu_fg = '#888' +theme.proxy_inactive_menu_bg = '#FFF' + +-- Statusbar specific +theme.sbar_fg = "#fff" +theme.sbar_bg = "#000" + +-- Downloadbar specific +theme.dbar_fg = "#fff" +theme.dbar_bg = "#000" +theme.dbar_error_fg = "#F00" + +-- Input bar specific +theme.ibar_fg = "#6f6" --"rgba(0,0,0,0)" +theme.ibar_bg = "#000" + +-- Tab label +theme.tab_fg = "#888" +theme.tab_bg = "#222" +theme.tab_hover_bg = "#292929" +theme.tab_ntheme = "#ddd" +theme.selected_fg = "#fff" +theme.selected_bg = "#000" +theme.selected_ntheme = "#ddd" +theme.loading_fg = "#33AADD" +theme.loading_bg = "#000" + +theme.selected_private_tab_bg = "#3d295b" +theme.private_tab_bg = "#22254a" + +-- Trusted/untrusted ssl colours +theme.trust_fg = "#0F0" +theme.notrust_fg = "#F00" + +-- Follow mode hints +theme.hint_font = "10px monospace, courier, sans-serif" +theme.hint_fg = "#fff" +theme.hint_bg = "#000088" +theme.hint_border = "1px dashed #000" +theme.hint_opacity = "0.3" +theme.hint_overlay_bg = "rgba(255,255,153,0.3)" +theme.hint_overlay_border = "1px dotted #000" +theme.hint_overlay_selected_bg = "rgba(0,255,0,0.3)" +theme.hint_overlay_selected_border = theme.hint_overlay_border + +-- General colour pairings +theme.ok = { fg = "#000", bg = "#FFF" } +theme.warn = { fg = "#F00", bg = "#FFF" } +theme.error = { fg = "#FFF", bg = "#F00" } + +-- Gopher page style (override defaults) +theme.gopher_light = { bg = "#E8E8E8", fg = "#17181C", link = "#03678D" } +theme.gopher_dark = { bg = "#17181C", fg = "#E8E8E8", link = "#f90" } + +return theme + +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/luakit/userconf.lua b/.config/luakit/userconf.lua new file mode 100644 index 00000000..f2906fb4 --- /dev/null +++ b/.config/luakit/userconf.lua @@ -0,0 +1,36 @@ +require("luci_session") +require("luci_search") +local settings = require("settings") + +settings.set_setting("session.always_save", true) +settings.set_setting("application.prefer_dark_mode", true) +settings.set_setting("window.close_with_last_tab", true) + +-- --------- -- +-- HARDENING -- +-- --------- -- +local fakeUserAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0" +local privacySettings = { + -- UserAgent + ["webview.user_agent"] = fakeUserAgent, + -- Disable DNS prefetching (reduces tracking via speculative DNS) + ["webview.enable_dns_prefetching"] = false, + -- Disable hyperlink auditing (used for ping-based tracking) + ["webview.enable_hyperlink_auditing"] = false, + -- Disable WebGL (reduces fingerprinting surface) + ["webview.enable_webgl"] = false, + -- Disable media stream access + ["webview.enable_media_stream"] = false, + -- Disable WebAudio fingerprinting + ["webview.enable_webaudio"] = false, +} + +for key, value in pairs(privacySettings) do + settings.set_setting(key, value) +end + +-- EXAMPLE override for a specific site that needs a different UA +settings.set_setting("webview.user_agent", + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", + { domain = "example.com" }) + diff --git a/.config/mpv/input.conf b/.config/mpv/input.conf new file mode 100644 index 00000000..9828d09d --- /dev/null +++ b/.config/mpv/input.conf @@ -0,0 +1,2 @@ +Ctrl+Alt+r playlist-shuffle + diff --git a/.config/nsxiv/exec/key-handler b/.config/nsxiv/exec/key-handler new file mode 100755 index 00000000..c7b8bb3d --- /dev/null +++ b/.config/nsxiv/exec/key-handler @@ -0,0 +1,48 @@ +#!/bin/sh +# nsxiv pipes the file(s) to act on to stdin: one path per line normally, +# NUL-separated when nsxiv runs with -0 (NSXIV_USING_NULL=1). tr converts +# either layout to plain lines; a NUL byte can never occur inside a real +# filename, so it's a no-op in non-(-0) mode. + +dest="$HOME/Downloads/pictures" + +case "$1" in +"c") + mkdir -p "$dest" + failed=$(tr '\0' '\n' | while IFS= read -r file; do + cp -- "$file" "$dest" || printf '%s\n' "$file" + done) + if [ -n "$failed" ]; then + notify-send -u critical "Copy failed: $failed" + else + notify-send "Copied to ~/Downloads/pictures" + fi + ;; +"m") + mkdir -p "$dest" + failed=$(tr '\0' '\n' | while IFS= read -r file; do + mv -- "$file" "$dest" || printf '%s\n' "$file" + done) + if [ -n "$failed" ]; then + notify-send -u critical "Move failed: $failed" + else + notify-send "Moved to ~/Downloads/pictures" + fi + ;; +"y") + tr '\0' '\n' | while IFS= read -r file; do + case "$file" in + *.png) t=image/png ;; + *.jpg|*.jpeg) t=image/jpeg ;; + *) t=$(file -b --mime-type -- "$file") ;; + esac + xclip -selection clipboard -t "$t" -i "$file" & + done + notify-send "Copied image to clipboard" + ;; +"e") + tr '\0' '\n' | while IFS= read -r file; do + "$HOME/apps/Gimp.AppImage" "$file" & + done + ;; +esac diff --git a/.config/picom.conf b/.config/picom.conf index 8953ce71..8503d615 100644 --- a/.config/picom.conf +++ b/.config/picom.conf @@ -76,7 +76,7 @@ shadow-exclude = [ # Fade windows in/out when opening/closing and when opacity changes, # unless no-fading-openclose is used. # fading = false -fading = true; +fading = false; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) # fade-in-step = 0.028 @@ -90,7 +90,7 @@ fade-out-step = 0.03; fade-delta = 4; # Specify a list of conditions of windows that should not be faded. -fade-exclude = [ "class_g = 'guitarpro.exe'" ]; +fade-exclude = [ "class_g = 'guitarpro.exe'", "class_g = 'ForkgramDesktop'" ]; # Do not fade on window open/close. no-fading-openclose = false; @@ -166,7 +166,9 @@ rounded-corners-exclude = [ # Parameters for background blurring, see the *BLUR* section for more information. -blur-method = "dual_kawase"; +blur-method = "none"; +#"dual_kawase"; + # blur-size = 12 # # blur-deviation = false @@ -207,7 +209,8 @@ blur-background-exclude = [ "window_type = 'desktop'", "class_g = 'guitarpro.exe'", "class_g = 'librewolf'", - "_GTK_FRAME_EXTENTS@" + "_GTK_FRAME_EXTENTS@", + "class_g = 'ForkgramDesktop'" ]; ################################# @@ -223,8 +226,7 @@ blur-background-exclude = [ # Specify the backend to use: `xrender`, `glx`, `egl` or `xr_glx_hybrid`. # `xrender` is the default one. # -backend = "egl"; #"glx" -#backend = "xrender"; +backend = "egl"; # Use higher precision during rendering, and apply dither when presenting the # rendered screen. Reduces banding artifacts, but might cause performance @@ -382,7 +384,7 @@ use-damage = true; # clipping applied. Useful for screenshot tools, where you need to be able to # see through transparent parts of the window. # -transparent-clipping-exclude = [ "class_g = 'guitarpro.exe'" ] +transparent-clipping-exclude = [ "class_g = 'guitarpro.exe'", "class_g = 'ForkgramDesktop'" ] # Set the log level. Possible values are: # "trace", "debug", "info", "warn", "error" diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf new file mode 100644 index 00000000..fdfc4550 --- /dev/null +++ b/.config/tmux/tmux.conf @@ -0,0 +1,83 @@ +# ── Prefix ────────────────────────────────────── +#unbind C-b +#set -g prefix C-a +#bind C-a send-prefix +set -g prefix C-b + +# ── Terminal / General ────────────────────────── +set -g default-terminal "tmux-256color" +set -ga terminal-overrides ",st-256color:Tc" +set -g history-limit 50000 +set -g escape-time 0 +set -g mouse on +set -g base-index 1 +set -g pane-base-index 1 +set -g renumber-windows on +set -g set-titles on +set -g focus-events on +setw -g automatic-rename on + +# ── Vi Mode ───────────────────────────────────── +setw -g mode-keys vi +bind-key -T copy-mode-vi 'v' send-keys -X begin-selection +bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel "xclip -selection clipboard" +bind-key -T copy-mode-vi 'Y' send-keys -X copy-pipe "xclip -selection clipboard" +bind-key -T copy-mode-vi 'r' send-keys -X rectangle-toggle + +# ── Splits ────────────────────────────────────── +bind | split-window -h -c "#{pane_current_path}" +bind - split-window -v -c "#{pane_current_path}" +unbind '"' +unbind % + +# ── Pane Navigation (vim-style) ──────────────── +bind h select-pane -L +bind j select-pane -D +bind k select-pane -U +bind l select-pane -R + +# ── Pane Resizing (repeatable) ───────────────── +bind -r H resize-pane -L 5 +bind -r J resize-pane -D 5 +bind -r K resize-pane -U 5 +bind -r L resize-pane -R 5 + +# ── Windows ──────────────────────────────────── +bind -r C-h previous-window +bind -r C-l next-window +bind Tab last-window + +# ── Reload Config ────────────────────────────── +bind r source-file ~/.tmux.conf \; display-message "Config reloaded!" + +# ── Dark Theme ───────────────────────────────── +# Palette: near-black bg, muted gray fg, dim accent +set -g status-position bottom +set -g status-justify left +set -g status-bg "#0a0a0a" +set -g status-fg "#555555" +set -g status-left-length 40 +set -g status-right-length 60 +set -g status-left "#[fg=#3a3a4a,bold] #S " +set -g status-right "#[fg=#3a3a4a] %Y-%m-%d %H:%M " +setw -g window-status-format "#[fg=#333333] #I:#W " +setw -g window-status-current-format "#[fg=#5a5a6a,bold] #I:#W " +setw -g window-status-separator "" +set -g pane-border-style fg="#1a1a1a" +set -g pane-active-border-style fg="#2a2a3a" +set -g message-style bg="#0a0a0a",fg="#5a5a6a" +set -g display-panes-colour "#2a2a3a" +set -g display-panes-active-colour "#4a4a5a" + + + +# ── Plugins (via TPM) ─────────────────────────── +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-continuum' +set -g @resurrect-capture-pane-contents 'on' +set -g @continuum-restore 'on' +set -g @continuum-save-interval '15' + +set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.config/tmux/plugins' +run '~/.config/tmux/plugins/tpm/tpm' diff --git a/.config/xonsh/rc.d/00_rc.py b/.config/xonsh/rc.d/00_rc.py index c8c024a0..00d07e72 100644 --- a/.config/xonsh/rc.d/00_rc.py +++ b/.config/xonsh/rc.d/00_rc.py @@ -128,17 +128,19 @@ def isDistrobox(): system = platform.system() if system == "Darwin": - OS_NAME = subprocess.check_output( - ["sw_vers", "-productName"], text=True - ).strip() + OS_NAME = "macos" else: + OS_NAME = system.lower() try: - OS_NAME = subprocess.check_output( - ["lsb_release", "-is"], text=True - ).strip() - except Exception: - OS_NAME = system - + with open("/etc/os-release", "r") as f: + for line in f: + if line.startswith("ID="): + # Strip 'ID=', then strip quotes and whitespace + OS_NAME = line.split("=", 1)[1].strip().strip('"').strip("'").lower() + break + except FileNotFoundError: + pass + __xonsh__.env['OS_NAME'] = OS_NAME # -------------------------------------------------------- diff --git a/.config/xonsh/rc.d/20_aliases.py b/.config/xonsh/rc.d/20_aliases.py index d61781da..e191c364 100644 --- a/.config/xonsh/rc.d/20_aliases.py +++ b/.config/xonsh/rc.d/20_aliases.py @@ -147,6 +147,7 @@ # -------------------------------------------------------- aliases.update({ ":q": "exit", + ":s": "exec startx", "df": "df -h", "free": "free -m", }) @@ -179,4 +180,9 @@ }) abbrevs["l"] = "exa -al --color=always --group-directories-first --icons" + # -------------------------------------------------------- + # Distrobox + # -------------------------------------------------------- + #aliases["aider-box"] = ["distrobox", "enter", "aider-box", "--", "fish"] + aliases["aider-box"] = ["distrobox", "enter", "aider-box"] diff --git a/.config/xonsh/rc.d/21_aliases_os.py b/.config/xonsh/rc.d/21_aliases_os.py index 946d31ca..3946badf 100644 --- a/.config/xonsh/rc.d/21_aliases_os.py +++ b/.config/xonsh/rc.d/21_aliases_os.py @@ -27,7 +27,7 @@ archUpdateCmd += " && sudo flatpak update --assumeyes" - if OS_NAME == "Arch": + if OS_NAME == "arch": abbrevs["ca"] = "bat --color=always" abbrevs["upd"] = archUpdateCmd aliases["cat"] = "bat -p --color=always" @@ -45,12 +45,12 @@ "mirrora": "sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist", }) - elif OS_NAME == "Ubuntu": + elif OS_NAME == "ubuntu": abbrevs["ca"] = "batcat --color=always" abbrevs["upd"] = debUpdateCmd aliases["cat"] = "batcat -p --color=always" - elif OS_NAME == "Fedora": + elif OS_NAME == "fedora": abbrevs["vi"] = "nvim" abbrevs["upd"] = "sudo dnf upgrade" @@ -61,11 +61,11 @@ except Exception: pass - elif OS_NAME == "macOS": + elif OS_NAME == "macos": abbrevs["ca"] = "bat --color=always" aliases["cat"] = "bat -p --color=always" - elif OS_NAME == "Linuxmint": + elif OS_NAME == "linuxmint": abbrevs["ca"] = "batcat --color=always" abbrevs["upd"] = debUpdateCmd aliases["cat"] = "batcat -p --color=always" diff --git a/.config/xonsh/rc.d/65_prompt.py b/.config/xonsh/rc.d/65_prompt.py index b8fc74ef..3bf23b61 100644 --- a/.config/xonsh/rc.d/65_prompt.py +++ b/.config/xonsh/rc.d/65_prompt.py @@ -24,7 +24,10 @@ def my_prompt(): cwdCol = ColourAnsi.CYAN.value branchCol = ColourAnsi.MAGENTA.value promptCol = ColourAnsi.DARK_GREEN.value + separatorCol = ColourAnsi.BRIGHT_BLACK.value + atSeparator = f"{separatorCol}{RESET}" + colSeparator = f"{separatorCol}:{RESET}" user = os.environ.get("USER", "user") host = socket.gethostname().split(".")[0] cwd = os.getcwd() @@ -35,10 +38,11 @@ def my_prompt(): spacing = "" return ( - f"{userCol}{user}{RESET}@{hostCol}{host}{RESET}:" + f"{userCol}{user}{RESET}{atSeparator}{hostCol}{host}{RESET}{colSeparator}" f"{cwdCol}{cwd}{RESET}" f"{branchCol}{branch}{RESET}{spacing}" - f"{promptCol}  {RESET}" + # f"{promptCol}  {RESET}"   󰚌 + f"{promptCol}󰅂 {RESET}" ) __xonsh__.env['PROMPT'] = my_prompt diff --git a/.config/xonsh/rc.d/70-ampache.py b/.config/xonsh/rc.d/70-ampache.py new file mode 100644 index 00000000..bc0cd5a4 --- /dev/null +++ b/.config/xonsh/rc.d/70-ampache.py @@ -0,0 +1,15 @@ +# ~/.config/xonsh/rc.d/70-ampache.py +# Interactive guard +if not XSH.env.get("XONSH_INTERACTIVE", False): + # aliases specific to non interactive shell + pass +else: + import os + _amp = os.environ.get("AMPACHE_XONSH_PATH", os.path.expanduser("~/Code/Python/ampache-data-xonsh")) + _glue = os.path.join(_amp, "ampache.xsh") + if not os.path.isfile(_glue): + print("[ampache] not loaded - " + _glue + " not found") + print("[ampache] clone the repo or fix AMPACHE_XONSH_PATH") + else: + exec(compile(open(_glue).read(), _glue, "exec")) + diff --git a/.gitmodules b/.gitmodules index 482071c9..e1cdb72f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "scripts/shell_common/SportsFetch"] path = scripts/shell_common/SportsFetch url = https://github.com/icefields/SportsFetchLibrary.git +[submodule "scripts/wm_common/Luci4-GTK-Window"] + path = scripts/wm_common/Luci4-GTK-Window + url = https://github.com/icefields/Luci4-GTK-Window.git diff --git a/.local/bin/distrobox-app-example b/.local/bin/distrobox-app-example index 9efaf675..4b2f7d69 100755 --- a/.local/bin/distrobox-app-example +++ b/.local/bin/distrobox-app-example @@ -1,7 +1,15 @@ -#!/bin/bash +#!/usr/bin/env bash + +# Sometime, when the condition has multiple branches, it might be necessary to +# add a container guard. "If in a container just execute the application". +# if [ -n "$CONTAINER_ID" ]; then +# exec /bin/full/path/of/executable "$@" +# # no exit necessary: exec replaces the process and does not return here. +# fi + if [ -x "/bin/full/path/of/executable" ]; then - . /bin/full/path/of/executable + exec /bin/full/path/of/executable "$@" else - /usr/bin/distrobox enter container-name -- application "$@" + exec /usr/bin/distrobox enter container-name -- application "$@" fi diff --git a/.local/bin/freetube b/.local/bin/freetube new file mode 100755 index 00000000..a07e6a62 --- /dev/null +++ b/.local/bin/freetube @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# find the latest version of the AppImage +appimage="$(find "$HOME/apps" -maxdepth 1 -type f -iname 'freetube*.AppImage' -executable | sort -V | tail -n 1)" +# check first local installation, then appimage, lastly distrobox +if [ -x "/usr/bin/freetube" ]; then + exec /usr/bin/freetube +elif [ -n "$appimage" ]; then + exec "$appimage" +else + exec distrobox enter ubuntu -- freetube +fi + diff --git a/.local/bin/nsxiv-dir b/.local/bin/nsxiv-dir new file mode 100755 index 00000000..7061e19c --- /dev/null +++ b/.local/bin/nsxiv-dir @@ -0,0 +1,49 @@ +#!/bin/sh +set -u + +# Graceful failure if no arguments are provided +if [ "$#" -eq 0 ]; then + printf "Usage: %s \n" "$0" >&2 + exit 1 +fi + +if [ -f "$1" ]; then + dir="$(cd "$(dirname "$1")" && pwd)" + target="$dir/$(basename "$1")" + + # Include regular files AND symlinks; null-separated for safety. + # Pipe directly to nsxiv -i -0 (stdin + null separator) to avoid xargs ARG_MAX limits. + find "$dir" -maxdepth 1 \( -type f -o -type l \) -print0 | sort -z | \ + awk -v RS='\0' -v ORS='\0' -v file="$target" ' + $0 == file { print; found = 1; next } + found { print } + { before[++count] = $0 } + END { + # Fallback: if find missed the target, print it first anyway + if (!found) print file + for (i = 1; i <= count; i++) print before[i] + } + ' | nsxiv -i -0 + +elif [ -d "$1" ]; then + # Replace shell process with nsxiv + exec nsxiv "$1" +else + # Fallback for direct arguments or weird paths + exec nsxiv "$@" +fi + + +# SIMPLE: +# #!/bin/sh +# +# if [ -f "$1" ]; then +# dir="$(dirname "$1")" +# exec nsxiv "$1" "$dir" +# elif [ -d "$1" ]; then +# # If it's already a directory, just open it +# exec nsxiv "$1" +# else +# exec nsxiv "$@" +# fi + diff --git a/.local/bin/picard b/.local/bin/picard new file mode 100755 index 00000000..b079f88e --- /dev/null +++ b/.local/bin/picard @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +if [ -x "/usr/bin/picard" ]; then + exec /usr/bin/picard "$@" +else + exec /usr/bin/distrobox enter music-arch -- picard "$@" +fi + diff --git a/.local/bin/vncviewer b/.local/bin/vncviewer new file mode 100755 index 00000000..0488a566 --- /dev/null +++ b/.local/bin/vncviewer @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +if [ -x "/usr/bin/vncviewer" ]; then + exec /usr/bin/vncviewer "$@" +elif command -v flatpak >/dev/null 2>&1 && flatpak info org.tigervnc.vncviewer >/dev/null 2>&1; then + exec flatpak run org.tigervnc.vncviewer "$@" +else + exec /usr/bin/distrobox enter isol-arch -- vncviewer "$@" +fi + diff --git a/.local/share/applications/thorium-browser.desktop b/.local/share/applications/thorium-browser.desktop new file mode 100644 index 00000000..cabdccf1 --- /dev/null +++ b/.local/share/applications/thorium-browser.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Version=1.0 +Name=Thorium Browser +# Only KDE 4 seems to use GenericName, so we reuse the KDE strings. (on isol-arch) +# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413. +GenericName=Web Browser (Thorium) +GenericName[en_GB]=Web Browser (Thorium) +# Gnome and KDE 3 uses Comment. +Comment=Access the Internet +Comment[ar]=الدخول إلى الإنترنت +Comment[bg]=Достъп до интернет +Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন +Comment[ca]=Accedeix a Internet +Comment[cs]=Přístup k internetu +Comment[da]=Få adgang til internettet +Comment[de]=Internetzugriff +Comment[el]=Πρόσβαση στο Διαδίκτυο +Comment[en_GB]=Access the Internet +Comment[es]=Accede a Internet. +Comment[et]=Pääs Internetti +Comment[fi]=Käytä internetiä +Comment[fil]=I-access ang Internet +Comment[fr]=Accéder à Internet +Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો +Comment[he]=גישה אל האינטרנט +Comment[hi]=इंटरनेट तक पहुंच स्थापित करें +Comment[hr]=Pristup Internetu +Comment[hu]=Internetelérés +Comment[id]=Akses Internet +Comment[it]=Accesso a Internet +Comment[ja]=インターネットにアクセス +Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ +Comment[ko]=인터넷 연결 +Comment[lt]=Interneto prieiga +Comment[lv]=Piekļūt internetam +Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക +Comment[mr]=इंटरनेटमध्ये प्रवेश करा +Comment[nb]=Gå til Internett +Comment[nl]=Verbinding maken met internet +Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ +Comment[pl]=Skorzystaj z internetu +Comment[pt]=Aceder à Internet +Comment[pt_BR]=Acessar a internet +Comment[ro]=Accesaţi Internetul +Comment[ru]=Доступ в Интернет +Comment[sk]=Prístup do siete Internet +Comment[sl]=Dostop do interneta +Comment[sr]=Приступите Интернету +Comment[sv]=Gå ut på Internet +Comment[ta]=இணையத்தை அணுகுதல் +Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి +Comment[th]=เข้าถึงอินเทอร์เน็ต +Comment[tr]=İnternet'e erişin +Comment[uk]=Доступ до Інтернету +Comment[vi]=Truy cập Internet +Comment[zh_CN]=访问互联网 +Comment[zh_HK]=連線到網際網路 +Comment[zh_TW]=連線到網際網路 +Exec=/home/lucie/apps/Thorium_Browser.AppImage %U +StartupNotify=true +Terminal=false +Icon=chromium +Type=Application +Categories=Network;WebBrowser; +# very invasive, do not register MimeTypes ever! +# MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/chromium; +Actions=new-window;new-private-window; + + +[Desktop Action new-window] +Name=New Window (Thorium) +Name[en_GB]=New Window (Thorium) +Exec=/home/lucie/apps/Thorium_Browser.AppImage + +[Desktop Action new-private-window] +Name=New Incognito Window (Thorium) +Name[en_GB]=New Incognito window (Thorium) +Exec=/home/lucie/apps/Thorium_Browser.AppImage --incognito +StartupWMClass=chromium + diff --git a/.local/share/fonts/Victor/LICENSE.txt b/.local/share/fonts/Victor/LICENSE.txt new file mode 100755 index 00000000..6dd3d05b --- /dev/null +++ b/.local/share/fonts/Victor/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright (c) 2024, Rune Bjørnerås (https://github.com/rubjo) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/.local/share/fonts/Victor/README.md b/.local/share/fonts/Victor/README.md new file mode 100644 index 00000000..e88ce2e0 --- /dev/null +++ b/.local/share/fonts/Victor/README.md @@ -0,0 +1,48 @@ +# Nerd Fonts + +This is an archived font from the Nerd Fonts release v3.4.0. + +For more information see: +* https://github.com/ryanoasis/nerd-fonts/ +* https://github.com/ryanoasis/nerd-fonts/releases/latest/ + +# Victor Mono + +**Victor Mono** is programming font with semi-connected cursive italics and symbol ligatures. + +For more information have a look at the upstream website: https://rubjo.github.io/victor-mono + +Version: 1.5.6 + +## Which font? + +### TL;DR + +* Pick your font family: + * If you are limited to monospaced fonts (because of your terminal, etc) then pick a font with `Nerd Font Mono` (or `NFM`). + * If you want to have bigger icons (usually around 1.5 normal letters wide) pick a font without `Mono` i.e. `Nerd Font` (or `NF`). Most terminals support this, but ymmv. + * If you work in a proportional context (GUI elements or edit a presentation etc) pick a font with `Nerd Font Propo` (or `NFP`). + +### Ligatures + +Ligatures are generally preserved in the patched fonts. +Nerd Fonts `v2.0.0` had no ligatures in the `Nerd Font Mono` fonts, this has been dropped with `v2.1.0`. +If you have a ligature-aware terminal and don't want ligatures you can (usually) disable them in the terminal settings. + +### Explanation + +Once you narrow down your font choice of family (`Droid Sans`, `Inconsolata`, etc) and style (`bold`, `italic`, etc) you have 2 main choices: + +#### `Option 1: Download already patched font` + + * For a stable version download a font package from the [release page](https://github.com/ryanoasis/nerd-fonts/releases) + * Or download the development version from the folders here + +#### `Option 2: Patch your own font` + + * Patch your own variations with the various options provided by the font patcher (i.e. not include all symbols for smaller font size) + +For more information see: [The FAQ](https://github.com/ryanoasis/nerd-fonts/wiki/FAQ-and-Troubleshooting#which-font) + +[SIL-RFN]:http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web_fonts_and_RFNs#14cbfd4a + diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Bold.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Bold.ttf new file mode 100644 index 00000000..037ba466 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Bold.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-BoldItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-BoldItalic.ttf new file mode 100644 index 00000000..7cff7b56 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-BoldItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-BoldOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-BoldOblique.ttf new file mode 100644 index 00000000..a65b8d11 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-BoldOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLight.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLight.ttf new file mode 100644 index 00000000..b92bc918 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLight.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLightItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLightItalic.ttf new file mode 100644 index 00000000..fb274228 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLightItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLightOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLightOblique.ttf new file mode 100644 index 00000000..f11f799f Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-ExtraLightOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Italic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Italic.ttf new file mode 100644 index 00000000..681566b3 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Italic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Light.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Light.ttf new file mode 100644 index 00000000..9eec4d08 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Light.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-LightItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-LightItalic.ttf new file mode 100644 index 00000000..583b9f7b Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-LightItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-LightOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-LightOblique.ttf new file mode 100644 index 00000000..e72a169d Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-LightOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Medium.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Medium.ttf new file mode 100644 index 00000000..8a50d365 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Medium.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-MediumItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-MediumItalic.ttf new file mode 100644 index 00000000..3178e4c5 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-MediumItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-MediumOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-MediumOblique.ttf new file mode 100644 index 00000000..582306a4 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-MediumOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Oblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Oblique.ttf new file mode 100644 index 00000000..0e182a9c Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Oblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Regular.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Regular.ttf new file mode 100644 index 00000000..fadf8de7 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Regular.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBold.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBold.ttf new file mode 100644 index 00000000..f786d0fc Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBold.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBoldItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBoldItalic.ttf new file mode 100644 index 00000000..d6a78bee Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBoldItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBoldOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBoldOblique.ttf new file mode 100644 index 00000000..4076718d Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-SemiBoldOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-Thin.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-Thin.ttf new file mode 100644 index 00000000..a38f99e7 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-Thin.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-ThinItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-ThinItalic.ttf new file mode 100644 index 00000000..1320e90b Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-ThinItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFont-ThinOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFont-ThinOblique.ttf new file mode 100644 index 00000000..f1158688 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFont-ThinOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Bold.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Bold.ttf new file mode 100644 index 00000000..eafd1942 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Bold.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-BoldItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-BoldItalic.ttf new file mode 100644 index 00000000..158b220e Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-BoldItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-BoldOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-BoldOblique.ttf new file mode 100644 index 00000000..2b3d41b1 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-BoldOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLight.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLight.ttf new file mode 100644 index 00000000..c11c5aea Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLight.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLightItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLightItalic.ttf new file mode 100644 index 00000000..a70ec7cb Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLightItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLightOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLightOblique.ttf new file mode 100644 index 00000000..5304793b Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ExtraLightOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Italic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Italic.ttf new file mode 100644 index 00000000..3e6362b9 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Italic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Light.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Light.ttf new file mode 100644 index 00000000..4a7c4da6 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Light.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-LightItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-LightItalic.ttf new file mode 100644 index 00000000..71a264df Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-LightItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-LightOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-LightOblique.ttf new file mode 100644 index 00000000..2537a54b Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-LightOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Medium.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Medium.ttf new file mode 100644 index 00000000..af77b03c Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Medium.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-MediumItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-MediumItalic.ttf new file mode 100644 index 00000000..549cc733 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-MediumItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-MediumOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-MediumOblique.ttf new file mode 100644 index 00000000..cad46b85 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-MediumOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Oblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Oblique.ttf new file mode 100644 index 00000000..20c7b763 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Oblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Regular.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Regular.ttf new file mode 100644 index 00000000..c60815b5 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Regular.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBold.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBold.ttf new file mode 100644 index 00000000..36e9528a Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBold.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBoldItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBoldItalic.ttf new file mode 100644 index 00000000..373bff61 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBoldItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBoldOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBoldOblique.ttf new file mode 100644 index 00000000..9b427fb7 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-SemiBoldOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-Thin.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Thin.ttf new file mode 100644 index 00000000..706ff183 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-Thin.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-ThinItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ThinItalic.ttf new file mode 100644 index 00000000..b1109745 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ThinItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontMono-ThinOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ThinOblique.ttf new file mode 100644 index 00000000..ce1e6e2a Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontMono-ThinOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Bold.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Bold.ttf new file mode 100644 index 00000000..d7aa85b9 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Bold.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-BoldItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-BoldItalic.ttf new file mode 100644 index 00000000..5b7ba32b Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-BoldItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-BoldOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-BoldOblique.ttf new file mode 100644 index 00000000..c15e787e Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-BoldOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLight.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLight.ttf new file mode 100644 index 00000000..4c789d6d Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLight.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLightItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLightItalic.ttf new file mode 100644 index 00000000..c7b40b01 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLightItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLightOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLightOblique.ttf new file mode 100644 index 00000000..6bfe4499 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ExtraLightOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Italic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Italic.ttf new file mode 100644 index 00000000..ffcd732b Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Italic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Light.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Light.ttf new file mode 100644 index 00000000..e0ca612e Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Light.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-LightItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-LightItalic.ttf new file mode 100644 index 00000000..5afd9327 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-LightItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-LightOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-LightOblique.ttf new file mode 100644 index 00000000..44e70d68 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-LightOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Medium.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Medium.ttf new file mode 100644 index 00000000..ed6730fd Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Medium.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-MediumItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-MediumItalic.ttf new file mode 100644 index 00000000..9a86bdf7 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-MediumItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-MediumOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-MediumOblique.ttf new file mode 100644 index 00000000..ac9bb54d Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-MediumOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Oblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Oblique.ttf new file mode 100644 index 00000000..02582712 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Oblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Regular.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Regular.ttf new file mode 100644 index 00000000..add7aae6 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Regular.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBold.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBold.ttf new file mode 100644 index 00000000..5230bcfa Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBold.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBoldItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBoldItalic.ttf new file mode 100644 index 00000000..e4a7ef67 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBoldItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBoldOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBoldOblique.ttf new file mode 100644 index 00000000..ed496c41 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-SemiBoldOblique.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Thin.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Thin.ttf new file mode 100644 index 00000000..ae5c2652 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-Thin.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ThinItalic.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ThinItalic.ttf new file mode 100644 index 00000000..b557188f Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ThinItalic.ttf differ diff --git a/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ThinOblique.ttf b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ThinOblique.ttf new file mode 100644 index 00000000..65ff3880 Binary files /dev/null and b/.local/share/fonts/Victor/VictorMonoNerdFontPropo-ThinOblique.ttf differ diff --git a/.local/share/nemo/actions/compress-7z.nemo_action b/.local/share/nemo/actions/compress-7z.nemo_action new file mode 100644 index 00000000..f5929cda --- /dev/null +++ b/.local/share/nemo/actions/compress-7z.nemo_action @@ -0,0 +1,9 @@ +[Nemo Action] +Name=Compress to 7z +Comment=Compress the selection to .7z using 7-Zip +Exec=/home/lucie/scripts/shell_common/compress-7z.sh 7z %F +Icon-Name=package-x-generic +Selection=notnone +Extensions=any +Quote=double + diff --git a/.local/share/nemo/actions/compress-tar_gz.nemo_action b/.local/share/nemo/actions/compress-tar_gz.nemo_action new file mode 100644 index 00000000..f23a22b1 --- /dev/null +++ b/.local/share/nemo/actions/compress-tar_gz.nemo_action @@ -0,0 +1,9 @@ +[Nemo Action] +Name=Compress to .tar.gz +Comment=Compress the selection to .tar.gz using 7-Zip +Exec=/home/lucie/scripts/shell_common/compress-7z.sh tar.gz %F +Icon-Name=package-x-generic +Selection=notnone +Extensions=any +Quote=double + diff --git a/.local/share/nemo/actions/compress-tar_xz.nemo_action b/.local/share/nemo/actions/compress-tar_xz.nemo_action new file mode 100644 index 00000000..072fe014 --- /dev/null +++ b/.local/share/nemo/actions/compress-tar_xz.nemo_action @@ -0,0 +1,9 @@ +[Nemo Action] +Name=Compress to .tar.xz +Comment=Compress the selection to .tar.xz using 7-Zip +Exec=/home/lucie/scripts/shell_common/compress-7z.sh tar.xz %F +Icon-Name=package-x-generic +Selection=notnone +Extensions=any +Quote=double + diff --git a/.local/share/nemo/actions/extract-7z.nemo_action b/.local/share/nemo/actions/extract-7z.nemo_action new file mode 100644 index 00000000..ae8f0081 --- /dev/null +++ b/.local/share/nemo/actions/extract-7z.nemo_action @@ -0,0 +1,11 @@ +# ~/.local/share/nemo/actions/extract-7z.nemo_action +[Nemo Action] +Active=true +Name=Extract to EXTRACTED (7z) +Comment=Silently extract archive into 0_EXTRACTED subdirectory +Exec=/home/lucie/scripts/shell_common/extract-7z.sh %F +Icon-Name=archive-extract +Selection=Any +Extensions=7z;zip;rar;tar;gz;bz2;xz;zst;iso;deb;arj;ace;cab; +Quote=double + diff --git a/Pictures/wallpapers/2b4e6784.jpg b/Pictures/wallpapers/2b4e6784.jpg new file mode 100644 index 00000000..1fabeadf Binary files /dev/null and b/Pictures/wallpapers/2b4e6784.jpg differ diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_01_Enemy_Lookout_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_01_Enemy_Lookout_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_04_Sickness_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_04_Sickness_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_05_We_Are_Soldiers_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_05_We_Are_Soldiers_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_07_Journey_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_07_Journey_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_08_Flags_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_08_Flags_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_09_Opportunity_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_09_Opportunity_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_10_Obstacle_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_10_Obstacle_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_12_Mission_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_12_Mission_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_13_Baikal_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_13_Baikal_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_14_Fields_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_14_Fields_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_15_Fire_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_15_Fire_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_16_Flare_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_16_Flare_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_Keyart_4K.jpg b/Pictures/wallpapers/Last Train Home/LTH_Wallpaper_Keyart_4K.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/cryptopsy-wallpaper-tra.png b/Pictures/wallpapers/cryptopsy-wallpaper-tra.png new file mode 100644 index 00000000..01cdf5d1 Binary files /dev/null and b/Pictures/wallpapers/cryptopsy-wallpaper-tra.png differ diff --git a/Pictures/wallpapers/cryptopsy-wallpaper.jpg b/Pictures/wallpapers/cryptopsy-wallpaper.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/death-spiritural_healing-anime.jpg b/Pictures/wallpapers/death-spiritural_healing-anime.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/dylan dog scopo vita - wallpaper.jpg b/Pictures/wallpapers/dylan dog scopo vita - wallpaper.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/eggcat.png b/Pictures/wallpapers/eggcat.png old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/frank_reynolds01-x4plus-anime.jpg b/Pictures/wallpapers/frank_reynolds01-x4plus-anime.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/frankreynolds01_upscayl_6x_realesrgan-x4plus-anime.jpg b/Pictures/wallpapers/frankreynolds01_upscayl_6x_realesrgan-x4plus-anime.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/lasttrainhome01.png b/Pictures/wallpapers/lasttrainhome01.png old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/necrophagist-water.jpg b/Pictures/wallpapers/necrophagist-water.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/shroom-wallpaper.jpeg b/Pictures/wallpapers/shroom-wallpaper.jpeg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/stray03.png b/Pictures/wallpapers/stray03.png old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/stray06.png b/Pictures/wallpapers/stray06.png old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/stray09.png b/Pictures/wallpapers/stray09.png old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/stray10.png b/Pictures/wallpapers/stray10.png old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-28-2560x1440.jpg b/Pictures/wallpapers/wallhalla-28-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-50-3840x2160.jpg b/Pictures/wallpapers/wallhalla-50-3840x2160.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-56-2560x1440.jpg b/Pictures/wallpapers/wallhalla-56-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-57-2560x1440.jpg b/Pictures/wallpapers/wallhalla-57-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-63-2560x1440.jpg b/Pictures/wallpapers/wallhalla-63-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-65-2560x1440.jpg b/Pictures/wallpapers/wallhalla-65-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-76-2560x1440.jpg b/Pictures/wallpapers/wallhalla-76-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-77-2560x1440.jpg b/Pictures/wallpapers/wallhalla-77-2560x1440.jpg old mode 100755 new mode 100644 diff --git a/Pictures/wallpapers/wallhalla-8-2560x1536.jpg b/Pictures/wallpapers/wallhalla-8-2560x1536.jpg old mode 100755 new mode 100644 diff --git a/README.md b/README.md index d505c719..5db695b6 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,8 @@ Create `~/.shell_env`, and add the following variables.
``` # variable used to determine if the system is in dev. ie. xonsh errors will be more verbose IS_DEV_MODE="false" +# terminal to be used everywhere. "st" or "kitty --single-instance" +TERMINAL_CMD="st" TOR_PASSWORD="torPasswordForTheResetTorScript" GOOGLE_API_KEY="yourGoogleApiKey" @@ -145,9 +147,25 @@ VPN_HOME_USER="user" VPN_HOME_PASS="pass" OVPN_HOME_CONFIG="/ovpn/config/location/on/disk/home.ovpn" +# search +SEARCH_URL="https://searx.instance.org/search?q=%s" +SEARCH_AI_URL="https://ai.search.org/?q=%s" + +# shlink +SHLINK_BASE_URL="https://sl.chmod666.ca" +SHLINK_API_KEY="3de3c045-ba9f-4cbc-9354-55ce89d834b0" + # currency conversion API CURRENCY_API = "https://currency.api.url" +# cheat sheet self hosted url +CHTSH_URL="https://cheat.chmod666.ca" + +# NPB fetcher library location (clone from github.com/icefields) +NPB_FETCH_PATH="/home/user/Code/Python/BaseballNpbFetch" +# Xonsh-Ampache integration (https://github.com/icefields/ampache-data-xonsh) +AMPACHE_XONSH_INTEGRATION_PATH="/home/user/Code/Python/ampache-data-xonsh" + # location variables, for weather, red filter, etc... LOCATION_COORDINATES="43.6426,-79.3871" @@ -166,6 +184,9 @@ KEEPASS_SECRET_KEYFILE="/file/to/unlock/secred-db/secrets.keyfile" ANDROID_SDK_ROOT="/opt/android-sdk" ANDROID_HOME="/opt/android-sdk" +# Ubuntu Touch development, set this in case both Docker and Podman are installed +CLICKABLE_DOCKER_COMMAND="podman" + # UI related variables moved to .xprofile ``` diff --git a/scripts/mullvad_status.sh b/scripts/mullvad_status.sh new file mode 100755 index 00000000..e83f8af4 --- /dev/null +++ b/scripts/mullvad_status.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# +# mullvad-status.sh — query Mullvad's connection check API +# deps: curl, jq + +set -euo pipefail + +readonly API_URL="https://am.i.mullvad.net/json" +readonly TIMEOUT=10 + +requireDeps() { + local dep + for dep in curl jq; do + if ! command -v "$dep" >/dev/null 2>&1; then + printf 'error: required dependency %s not found in PATH\n' "$dep" >&2 + exit 1 + fi + done +} + +fetchStatus() { + # --proto '=https' blocks redirect-based protocol downgrades + curl -fsSL --proto '=https' --max-time "$TIMEOUT" "$API_URL" +} + +printStatus() { + jq -r ' + def yesNo: + if . == true then "Yes" + elif . == false then "No" + else "Unknown" end; + + "IP: \(.ip // "N/A")", + "Country: \(.country // "N/A")", + "City: \(.city // "N/A")", + "Longitude: \(.longitude // "N/A")", + "Latitude: \(.latitude // "N/A")", + "Mullvad Exit IP: \(.mullvad_exit_ip | yesNo)", + "Mullvad Exit IP Hostname: \(.mullvad_exit_ip_hostname // "N/A")", + "Mullvad Server Type: \(.mullvad_server_type // "N/A")", + "Organization: \(.organization // "N/A")", + "Blacklisted: \(.blacklisted.blacklisted | yesNo)", + (if .blacklisted.blacklisted == true + and (.blacklisted.results | type) == "array" + and (.blacklisted.results | length) > 0 + then + "Blacklisted On:", + (.blacklisted.results[] + | " - \(if type == "object" + then "\(.name // "?") (\(.link // "no link"))" + else tostring end)") + else empty end) + ' +} + +main() { + requireDeps + + local response + if ! response="$(fetchStatus)"; then + printf 'error: failed to reach Mullvad API (%s)\n' "$API_URL" >&2 + exit 1 + fi + if [[ -z "$response" ]]; then + echo "error: empty response from API" >&2 + exit 1 + fi + + printStatus <<< "$response" +} + +main "$@" + diff --git a/scripts/share_find.sh b/scripts/share_find.sh index cee947e4..f7da59b5 100755 --- a/scripts/share_find.sh +++ b/scripts/share_find.sh @@ -40,7 +40,9 @@ findArgs+=(-o -iname "*.webp") findArgs+=(-o -iname "*.pdf") findArgs+=(-o -iname "*.jpeg") findArgs+=(-o -iname "*.zip") +findArgs+=(-o -iname "*.7z") findArgs+=(-o -iname "*.txt") +findArgs+=(-o -iname "*.md") findArgs+=(-o -iname "*.mp3") findArgs+=(-o -iname "*.flac") findArgs+=(-o -iname "*.wav") diff --git a/scripts/shell_common/compress-7z.sh b/scripts/shell_common/compress-7z.sh new file mode 100755 index 00000000..7cacda58 --- /dev/null +++ b/scripts/shell_common/compress-7z.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# compress7z.sh: helper for Nemo actions, compress selection with 7-Zip +# usage: compress7z.sh [path ...] +set -u + +usage() { echo "usage: $0 " >&2; exit 2; } + +fmt="${1:-}" +[ "$#" -gt 0 ] && shift +case "$fmt" in tar.gz|tar.xz|7z) ;; *) usage ;; esac +[ "$#" -gt 0 ] || usage + +notify() { + command -v notify-send >/dev/null 2>&1 && notify-send -u "$1" -a "Nemo 7-Zip" "$2" "$3" +} + +szBin="" +for candidate in 7zz 7z 7za; do + if command -v "$candidate" >/dev/null 2>&1; then + szBin="$candidate" + break + fi +done +if [ -z "$szBin" ]; then + notify critical "7-Zip not found" "Arch: sudo pacman -S 7zip" + exit 1 +fi + +firstPath="$1" +targetDir="$(dirname -- "$firstPath")" + +if [ "$#" -eq 1 ]; then + baseName="$(basename -- "$firstPath")" + # strip the extension of plain files, keep hidden files and dirs intact + if [ -f "$firstPath" ] && [[ "$baseName" == *.* && "$baseName" != .* ]]; then + baseName="${baseName%.*}" + fi +else + baseName="$(basename -- "$targetDir")" +fi + +# never overwrite anything: name.tar.gz, name (1).tar.gz, ... +outPath="$targetDir/$baseName.$fmt" +count=1 +while [ -e "$outPath" ]; do + outPath="$targetDir/$baseName ($count).$fmt" + count=$((count + 1)) +done + +# 7-Zip stores entry paths exactly as typed, so run it from the parent dir +relPaths=() +for p in "$@"; do + relPaths+=("${p#"$targetDir"/}") +done + +runInTarget() { ( cd "$targetDir" && "$szBin" "$@" ); } + +# scratch dir on the same filesystem (/tmp is tmpfs on Arch, big payloads would eat RAM) +tmpDir="$targetDir/.compress7z.$$" +if ! mkdir "$tmpDir" 2>/dev/null; then + tmpDir="$(mktemp -d "${TMPDIR:-/tmp}/compress7z.XXXXXX")" +fi +logFile="$(mktemp "${TMPDIR:-/tmp}/compress7z.log.XXXXXX")" +trap 'rm -rf "$tmpDir" "$logFile"' EXIT + +fail() { + rm -f -- "$outPath" # never leave a half-written archive behind + errMsg="$(tail -n 5 "$logFile" | tr '\n' ' ' | cut -c1-250)" + notify critical "7-Zip compression failed" "$errMsg" + exit 1 +} + +case "$fmt" in + 7z) + runInTarget a -t7z -mx=9 "$outPath" -- "${relPaths[@]}" >"$logFile" 2>&1 || fail + ;; + tar.gz) + runInTarget a -ttar "$tmpDir/$baseName.tar" -- "${relPaths[@]}" >"$logFile" 2>&1 || fail + ( cd "$tmpDir" && "$szBin" a -tgzip "$outPath" -- "$baseName.tar" ) >>"$logFile" 2>&1 || fail + ;; + tar.xz) + runInTarget a -ttar "$tmpDir/$baseName.tar" -- "${relPaths[@]}" >"$logFile" 2>&1 || fail + ( cd "$tmpDir" && "$szBin" a -txz "$outPath" -- "$baseName.tar" ) >>"$logFile" 2>&1 || fail + ;; +esac + +notify normal "Compressed with $szBin" "Created $(basename -- "$outPath")" +exit 0 + diff --git a/scripts/shell_common/midori-fetch b/scripts/shell_common/midori-fetch index 67b9bba5..b593606b 160000 --- a/scripts/shell_common/midori-fetch +++ b/scripts/shell_common/midori-fetch @@ -1 +1 @@ -Subproject commit 67b9bba5e137028f73c0889bdb29eb9b3ace8830 +Subproject commit b593606bf9c003f889f5bc9d78688ea55cf1a342 diff --git a/scripts/wm_common/Luci4-GTK-Window b/scripts/wm_common/Luci4-GTK-Window new file mode 160000 index 00000000..e887d322 --- /dev/null +++ b/scripts/wm_common/Luci4-GTK-Window @@ -0,0 +1 @@ +Subproject commit e887d32288a52602bb2c9d555058873b981e2972 diff --git a/scripts/wm_common/asusctl/asusctl-profile-icon.sh b/scripts/wm_common/asusctl/asusctl-profile-icon.sh new file mode 100755 index 00000000..298cf51f --- /dev/null +++ b/scripts/wm_common/asusctl/asusctl-profile-icon.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# asusctl-profile-icon.sh +# Returns a Nerd Font symbol for the active asusctl power profile. +# Codepoints verified from Nerd Fonts v3.5.1 glyphnames.json [16] + +profile=$(asusctl profile get | awk '/^Active profile:/ {print $3}') + +case "$profile" in + "Quiet") + printf '\uf186' # fa-moon U+F186 + ;; + "Performance") + printf '\uf0e7' # fa-bolt U+F0E7 + ;; + "Balanced") + printf '\uf24e' # fa-balance_scale U+F24E + ;; + *) + printf '\uf013' # fa-cog U+F013 (fallback) + ;; +esac + diff --git a/scripts/shell_common/brightnessctl.sh b/scripts/wm_common/brightnessctl.sh similarity index 80% rename from scripts/shell_common/brightnessctl.sh rename to scripts/wm_common/brightnessctl.sh index 2b780dc3..0fa82905 100755 --- a/scripts/shell_common/brightnessctl.sh +++ b/scripts/wm_common/brightnessctl.sh @@ -1,5 +1,8 @@ #!/usr/bin/env bash +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/notify-debounced.sh" + iDIR="$HOME/scripts/wm_common/icons/notifications" # /.config/mako/icons" # Detect notification method @@ -53,10 +56,12 @@ notify_user() { -i "$icon" \ "Brightness: ${current}%" else - notify-send -h string:x-canonical-private-synchronous:sys-notify \ - -u low \ - -i "$icon" \ - "Brightness: ${current}%" + debounce_notify 0.3 "notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i \"\$icon\" \"Brightness : \${current}%\"" + + #notify-send -h string:x-canonical-private-synchronous:sys-notify \ + # -u low \ + # -i "$icon" \ + # "Brightness: ${current}%" fi } diff --git a/scripts/wm_common/lockscreen.sh b/scripts/wm_common/lockscreen.sh index 7efff9df..e2a56c2f 100755 --- a/scripts/wm_common/lockscreen.sh +++ b/scripts/wm_common/lockscreen.sh @@ -1,6 +1,6 @@ #!/bin/sh # Auto-generated by i3lock_theme_generator.lua -# Generated: 2026-05-12T00:04:37Z +# Generated: 2026-07-23T17:44:02Z # Themed for i3lock-color (AUR: i3lock-color) # DO NOT EDIT — regenerate via: require("themes.i3lock_theme_generator").generate() # diff --git a/scripts/wm_common/notify-debounced.sh b/scripts/wm_common/notify-debounced.sh new file mode 100755 index 00000000..d44c73ce --- /dev/null +++ b/scripts/wm_common/notify-debounced.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# Use /run/user/$UID for PID files instead of /tmp +PID_DIR="/run/user/$(id -u)" +if [[ ! -d "$PID_DIR" ]]; then + # Fallback to ~/.local/run if /run/user is not available + PID_DIR="$HOME/.local/run" + mkdir -p "$PID_DIR" +fi +DEBOUNCE_PID_FILE="$PID_DIR/debounce_notify.pid" + +# Usage: debounce_notify "" +# WARNING: Uses eval. Ensure is strictly controlled, +# as eval with untrusted input leads to command injection. +debounce_notify() { + local delay="$1" + local cmdString="$2" + + # Kill any pending notification process + if [[ -f "$DEBOUNCE_PID_FILE" ]]; then + local prevPid + prevPid=$(cat "$DEBOUNCE_PID_FILE" 2>/dev/null) + if [[ -n "$prevPid" ]] && kill -0 "$prevPid" 2>/dev/null; then + kill "$prevPid" 2>/dev/null + # No wait needed. The previous script has already exited, + # so the subshell was reparented to init, which reaps it. + fi + fi + + # Fork a background subshell that waits, evals the command, and cleans up + ( + sleep "$delay" + eval "$cmdString" + rm -f "$DEBOUNCE_PID_FILE" # Clean up PID file after execution + ) & + + local subPid=$! + + # Detach the background job so it doesn't receive SIGHUP + # when the parent script exits. + disown "$subPid" 2>/dev/null + + # Store the PID of the subshell + echo "$subPid" > "$DEBOUNCE_PID_FILE" +} + diff --git a/scripts/wm_common/start_picom_delayed.sh b/scripts/wm_common/start_picom_delayed.sh index d5f344ed..4c941915 100755 --- a/scripts/wm_common/start_picom_delayed.sh +++ b/scripts/wm_common/start_picom_delayed.sh @@ -3,5 +3,7 @@ #if ! pgrep -f "picom" ; # then # sleep 3 - picom -b + picom -b --no-frame-pacing --log-level warn --log-file /tmp/picom.log + # picom -b --log-level warn --log-file /tmp/picom.log + #picom -b #fi diff --git a/scripts/wm_common/update-sys.sh b/scripts/wm_common/update-sys.sh index f4722114..8d594e5e 100755 --- a/scripts/wm_common/update-sys.sh +++ b/scripts/wm_common/update-sys.sh @@ -10,6 +10,14 @@ command_exists() { command -v "$1" &> /dev/null } +sysTerm() { + case "$TERMINAL_CMD" in + st*) $TERMINAL_CMD -t "$1" -e sh -c "$2" ;; + kitty*) $TERMINAL_CMD --title "$1" sh -c "$2" ;; + *) $TERMINAL_CMD -e sh -c "$2" ;; + esac +} + # Calculate updates for each service AUR=$(yay -Qua | wc -l) OFFICIAL=$(checkupdates | wc -l) @@ -41,7 +49,8 @@ if [ "$1" = "update" ]; then UPDATE_CMD="$UPDATE_CMD && distrobox upgrade --all" fi - kitty --title update-sys sh -c "$UPDATE_CMD" + sysTerm update-sys "$UPDATE_CMD" + # kitty --title update-sys sh -c "$UPDATE_CMD" fi # If there aren't any parameters, return the total number of updates diff --git a/scripts/wm_common/volume.sh b/scripts/wm_common/volume.sh index be240175..08093306 100755 --- a/scripts/wm_common/volume.sh +++ b/scripts/wm_common/volume.sh @@ -1,5 +1,8 @@ #!/bin/bash +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/notify-debounced.sh" + #iDIR="$HOME/.config/mako/icons" iDIR="$HOME/scripts/wm_common/icons/notifications" @@ -35,14 +38,15 @@ notify_user() { if [[ "$NOTIFY_CMD" == "dunstify" ]]; then dunstify -r 9991 -u low -i "$(get_icon)" "Volume : $(get_volume) %" else - notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume : $(get_volume) %" + debounce_notify 0.3 "notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i \"\$(get_icon)\" \"Volume : \$(get_volume) %\"" + #notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume : $(get_volume) %" fi } # Increase Volume inc_volume() { if command -v pamixer &>/dev/null; then - pamixer --increase 1 && notify_user + pamixer --increase 4 && notify_user elif command -v amixer &>/dev/null; then amixer -D pulse sset Master 2%+ && notify_user else @@ -55,7 +59,7 @@ inc_volume() { # Decrease Volume dec_volume() { if command -v pamixer &>/dev/null; then - pamixer --decrease 1 && notify_user + pamixer --decrease 4 && notify_user elif command -v amixer &>/dev/null; then amixer -D pulse sset Master 2%- && notify_user else