commit a9f8fc01fa61528c71ec6255f0f02e6c66b83d17 Author: Tristan Druyen Date: Mon Feb 24 17:26:11 2025 +0100 Reinit after agenix setup diff --git a/.directory b/.directory new file mode 100644 index 0000000..51769f5 --- /dev/null +++ b/.directory @@ -0,0 +1,2 @@ +[Desktop Entry] +Icon=nix-snowflake-white diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..4ef32f0 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,651 @@ +GNU Affero General Public License +================================= + +_Version 3, 19 November 2007_ +_Copyright © 2007 Free Software Foundation, Inc. <>_ + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +## Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: **(1)** assert copyright on the software, and **(2)** offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +## TERMS AND CONDITIONS + +### 0. Definitions + +“This License” refers to version 3 of the GNU Affero General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a “modified version” of the +earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based +on the Program. + +To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” +to the extent that it includes a convenient and prominently visible +feature that **(1)** displays an appropriate copyright notice, and **(2)** +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +### 1. Source Code + +The “source code” for a work means the preferred form of the work +for making modifications to it. “Object code” means any non-source +form of a work. + +A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other +than the work as a whole, that **(a)** is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and **(b)** serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +“Major Component”, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +### 2. Basic Permissions + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +### 4. Conveying Verbatim Copies + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +### 5. Conveying Modified Source Versions + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +* **a)** The work must carry prominent notices stating that you modified +it, and giving a relevant date. +* **b)** The work must carry prominent notices stating that it is +released under this License and any conditions added under section 7. +This requirement modifies the requirement in section 4 to +“keep intact all notices”. +* **c)** You must license the entire work, as a whole, under this +License to anyone who comes into possession of a copy. This +License will therefore apply, along with any applicable section 7 +additional terms, to the whole of the work, and all its parts, +regardless of how they are packaged. This License gives no +permission to license the work in any other way, but it does not +invalidate such permission if you have separately received it. +* **d)** If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your +work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +“aggregate” if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +### 6. Conveying Non-Source Forms + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +* **a)** Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium +customarily used for software interchange. +* **b)** Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a +written offer, valid for at least three years and valid for as +long as you offer spare parts or customer support for that product +model, to give anyone who possesses the object code either **(1)** a +copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical +medium customarily used for software interchange, for a price no +more than your reasonable cost of physically performing this +conveying of source, or **(2)** access to copy the +Corresponding Source from a network server at no charge. +* **c)** Convey individual copies of the object code with a copy of the +written offer to provide the Corresponding Source. This +alternative is allowed only occasionally and noncommercially, and +only if you received the object code with such an offer, in accord +with subsection 6b. +* **d)** Convey the object code by offering access from a designated +place (gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to +copy the object code is a network server, the Corresponding Source +may be on a different server (operated by you or a third party) +that supports equivalent copying facilities, provided you maintain +clear directions next to the object code saying where to find the +Corresponding Source. Regardless of what server hosts the +Corresponding Source, you remain obligated to ensure that it is +available for as long as needed to satisfy these requirements. +* **e)** Convey the object code using peer-to-peer transmission, provided +you inform other peers where the object code and Corresponding +Source of the work are being offered to the general public at no +charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A “User Product” is either **(1)** a “consumer product”, which means any +tangible personal property which is normally used for personal, family, +or household purposes, or **(2)** anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, “normally used” refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +### 7. Additional Terms + +“Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +* **a)** Disclaiming warranty or limiting liability differently from the +terms of sections 15 and 16 of this License; or +* **b)** Requiring preservation of specified reasonable legal notices or +author attributions in that material or in the Appropriate Legal +Notices displayed by works containing it; or +* **c)** Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or +* **d)** Limiting the use for publicity purposes of names of licensors or +authors of the material; or +* **e)** Declining to grant rights under trademark law for use of some +trade names, trademarks, or service marks; or +* **f)** Requiring indemnification of licensors and authors of that +material by anyone who conveys the material (or modified versions of +it) with contractual assumptions of liability to the recipient, for +any liability that these contractual assumptions directly impose on +those licensors and authors. + +All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +### 8. Termination + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated **(a)** +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and **(b)** permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +### 9. Acceptance Not Required for Having Copies + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +### 10. Automatic Licensing of Downstream Recipients + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +### 11. Patents + +A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, “control” includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To “grant” such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either **(1)** cause the Corresponding Source to be so +available, or **(2)** arrange to deprive yourself of the benefit of the +patent license for this particular work, or **(3)** arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. “Knowingly relying” means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is “discriminatory” if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license **(a)** in connection with copies of the covered work +conveyed by you (or copies made from those copies), or **(b)** primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +### 12. No Surrender of Others' Freedom + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +### 13. Remote Network Interaction; Use with the GNU General Public License + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +### 14. Revised Versions of this License + +The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License “or any later version” applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +### 15. Disclaimer of Warranty + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +### 16. Limitation of Liability + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +### 17. Interpretation of Sections 15 and 16 + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +_END OF TERMS AND CONDITIONS_ + +## How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a “Source” link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a “copyright disclaimer” for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +<>. diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..33cb2ad --- /dev/null +++ b/NOTES.md @@ -0,0 +1,67 @@ +# ToDo's + +- Investigate https://crane.dev/examples/quick-start-simple.html for ruszt builds +- https://nix.dev/tutorials/packaging-existing-software +- this looks awesome: https://github.com/erictossell/nixflakes/tree/main +- https://nixos.wiki/wiki/Binary_Cache +- build a good abstraction for systems + - allows setting nixpkgs.localSystem per systems + - should yield a `nixosConfiguration.${hostname} = nixpkgs.lib.nixosSystem {...}` + - example module abstraction + ```nix + # TODO think about partitions/hardware/system specific conf + # TODO think about hardware.nix like things + { config, + inputs, + lib, + ... + }: { + home_conf = { + # ... + }; + os_conf = { + # ... + }; + } + - example mkSystem abstraction + ```nix + let opts = { + hostname = "test"; + opt = "znver2"; + users = { + { name = "tristand", groups=[..] }, + { name = "tester", groups=[..] }, + }; + modules = [ + ./my_module.nix + ]; + }; + in { + mylib.mkSystem opts? # + # take a path? just let the user call import ? + } + ``` + - example localSystem conf + ```nix + # to allow building + nix.extraOptions = '' + system-features = system-features = gccarch-znver2 + ''; + # to actually build (after rebuilding with the feature before) + localSystem = { + inherit system; + gcc = { + arch = "znver2"; + tune = "znver2"; + }; + }; + pkgs-args = { + inherit localSystem overlays; + config = { + # .... + }; + }; + pkgs = import nixpkgs pkgs-args; + nixpkgs.pkgs = pkgs; + ``` +- switch from security.sudo.* to security.sudo-rs.* diff --git a/README.md b/README.md new file mode 100644 index 0000000..7dba38d --- /dev/null +++ b/README.md @@ -0,0 +1,102 @@ +# My nix conf + +## 🏗️ System Setup + +### 👷 "Manual" + +1. Boot Installer +2. Clone repo +3. Setup partitions + ```bash + sudo nix run --extra-experimental-features flakes --extra-experimental-features nix-command github:nix-community/disko -- --mode disko --flake path:$PWD#nixos-pulse + ``` +4. Run installer + ```bash + sudo nixos-install --flake .#nixos-pulse + ``` + +### 🚀 Fully-Automated + + 🚨 This will WIPE EVERYTHING on the specified system
⚠️ ensure proper sshd & firewall key setup for remote systems
+ +```bash +nix run github:numtide/nixos-anywhere -- --flake path:$PWD#nixos-pulse root@1.2.3.4 +``` + +## 🔄 Updates + +Run this to keep your system up-to-date. + +```bash +nix flake update +sudo nixos-rebuild # this assumes your hostname is the same as in the config +``` + +Run this to keep your home up-to-date. (Assuming you manage home-manager seperately and don't have it integrated into your osConfiguration) +```bash +nix flake update +home-manager switch --flake . +``` + + +## Plasma + +Add GUI settings to plasma.nix + +```bash +nix run github:pjones/plasma-manager | rg -v khotkeysrc | rg -v "\[ \]" > plasma.new.nix +diff plasma.nix plasma.new.nix +# copy over as needed +``` + +## 🛠️ Nix Configuration Structure + +Here's a brief rundown of the directory structure: + +### Top-Level Files + +- `flake.nix`: Nix Flake configuration file. + +#### `home-mods` Directory + +Stores modules related to specific user applications or environments. + +#### `os-mods` Directory + +Holds system-level modules for network, virtualization, desktop etc. + +#### `users` Directory + +Holds home-manager configuration for the users listed in `users.nix` + +#### `systems` Directory + +Holds system specific nixos configuration (e.g. hardware quirks). + +## 🙏 Made possible by + +- NixOS: https://nixos.org/ + - https://github.com/nix-community/nixos-anywhere + - https://github.com/nix-community/disko +- Countless great examples e.g.: + - https://github.com/etu/nixconfig + - https://github.com/hlissner/dotfiles +- Caffeine https://en.wikipedia.org/wiki/Caffeine + +## License + + My nix conf + Copyright (C) 2024 Tristan Druyen + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . diff --git a/ext/background.png b/ext/background.png new file mode 100644 index 0000000..2eb14e3 Binary files /dev/null and b/ext/background.png differ diff --git a/ext/doom/autoload/lsp-booster.el b/ext/doom/autoload/lsp-booster.el new file mode 100644 index 0000000..8325bf3 --- /dev/null +++ b/ext/doom/autoload/lsp-booster.el @@ -0,0 +1,33 @@ +;;; lsp-booster.el --- Boost emacs-lsp using lsp-booster -*- lexical-binding: t; -*- + +(defun lsp-booster--advice-json-parse (old-fn &rest args) + "Try to parse bytecode instead of json." + (or + (when (equal (following-char) ?#) + (let ((bytecode (read (current-buffer)))) + (when (byte-code-function-p bytecode) + (funcall bytecode)))) + (apply old-fn args))) +(advice-add (if (progn (require 'json) + (fboundp 'json-parse-buffer)) + 'json-parse-buffer + 'json-read) + :around + #'lsp-booster--advice-json-parse) + +(defun lsp-booster--advice-final-command (old-fn cmd &optional test?) + "Prepend emacs-lsp-booster command to lsp CMD." + (let ((orig-result (funcall old-fn cmd test?))) + (if (and (not test?) ;; for check lsp-server-present? + (not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper + lsp-use-plists + (not (functionp 'json-rpc-connection)) ;; native json-rpc + (executable-find "emacs-lsp-booster")) + (progn + (message "Using emacs-lsp-booster for %s!" orig-result) + (cons "emacs-lsp-booster" orig-result)) + orig-result))) +(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command) + +(provide 'lsp-booster) +;;; lsp-booster.el ends here diff --git a/ext/doom/config.el b/ext/doom/config.el new file mode 100644 index 0000000..c766944 --- /dev/null +++ b/ext/doom/config.el @@ -0,0 +1,471 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. It is optional. +;; (setq user-full-name "John Doe" +;; user-mail-address "john@doe.com") + +;; Doom exposes five (optional) variables for controlling fonts in Doom: +;; +;; - `doom-font' -- the primary font to use +;; - `doom-variable-pitch-ont' -- a non-monospace font (where applicable) +;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; - `doom-unicode-font' -- for unicode glyphs +;; - `doom-serif-font' -- for the `fixed-pitch-serif' face +;; +;; See 'C-h v doom-font' for documentation and more examples of what they +;; accept. For example: +;; + +(setq nerd-icons-font-names '("SymbolsNerdFontMono-Regular.ttf")) + +(setq doom-font (font-spec :family "Iosevka Nerd Font Mono" :size 16) + doom-variable-pitch-font (font-spec :family "Iosevka Nerd Font Mono" :size 16) + ;; doom-symbol-font (font-spec :family "all-the-icons" :size 13) + doom-big-font (font-spec :family "Iosevka Nerd Font Mono" :size 20 :weight 'demibold)) + +(defun add-back-emoji-fallback-font-families () + (when (fboundp 'set-fontset-font) + (let ((fn (doom-rpartial #'member (font-family-list)))) + (when-let (font (cl-find-if fn doom-emoji-fallback-font-families)) + (set-fontset-font t 'unicode font nil 'append))))) + +;; (add-hook 'after-setting-font-hook 'add-back-emoji-fallback-font-families) + +;; +;; If you or Emacs can't find your font, use 'M-x describe-font' to look them +;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to +;; refresh your font settings. If Emacs still can't find your font, it likely +;; wasn't installed correctly. Font issues are rarely Doom issues! + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-gruvbox) + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type t) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + + +;; Encrypt all roam notes;;;;;;;;;;;;;;;;; + +(after! org-roam + ;; Org Roam ui is better + (setq +org-roam-open-buffer-on-find-file nil) + (setq org-roam-link-auto-replace t) + (setq-default epa-file-encrypt-to "tristandruyen@vault81.de") + ;; (setq org-roam-capture-templates '(("d" "default" plain "%?" + ;; :target + ;; (file+head "%<%Y%m%d%H%M%S>-${slug}.org.gpg" + ;; "#+title: ${title}\n") + ;; :unnarrowed t))) + + ;; (setq org-roam-dailies-capture-templates '(("d" "default" entry "* %?" + ;; :target + ;; (file+head "%<%Y-%m-%d>.org.gpg" + ;; "#+title: %<%Y-%m-%d>\n") + ;; :unnarrowed t))) + ;; + ) + +;; Whenever you reconfigure a package, make sure to wrap your config in an +;; `after!' block, otherwise Doom's defaults may override your settings. E.g. +;; +;; (after! PACKAGE +;; (setq x y)) +;; +;; The exceptions to this rule: +;; +;; - Setting file/directory variables (like `org-directory') +;; - Setting variables which explicitly tell you to set them before their +;; package is loaded (see 'C-h v VARIABLE' to look up their documentation). +;; - Setting doom variables (which start with 'doom-' or '+'). +;; +;; Here are some additional functions/macros that will help you configure Doom. +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, +;; etc). +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. +;; TRAMP + + +;; (add-to-list 'tramp-connection-properties +;; (list (regexp-quote "/sshx:user@host:") +;; "remote-shell" "/usr/bin/fish")) +;; +;; (eval-after-load 'tramp +;; '((setenv "SHELL" "/run/current-system/sw/bin/fish") +;; (setenv "ESHELL" "/run/current-system/sw/bin/fish") +;; (add-to-list 'tramp-remote-path +;; "/run/current-system/sw/bin") +;; ) +;; ) +;; (setq! tramp-default-method "ssh") + +;; awatch + +(use-package! activity-watch-mode + :config + (global-activity-watch-mode)) + +;; lsp-booster + +(use-package lsp-booster + :after lsp) + + +(use-package! eglot-booster + :after eglot + :config + (eglot-booster-mode)) + + +(use-package! treesit-fold + :after tree-sitter) + +(use-package! eglot-x + :after eglot + :commands (eglot-x-setup)) + +;; rust +(setq! lsp-inlay-hint-enable t) +(setq! lsp-rust-analyzer-cargo-run-build-scripts t) +(setq! lsp-rust-analyzer-proc-macro-enable t) +(setq! lsp-rust-analyzer-server-display-inlay-hints t) +(setq! lsp-rust-analyzer-completion-auto-import-enable t) + +;; Nix + +(use-package! nixpkgs-fmt + :hook (nix-mode . nixpkgs-fmt-on-save-mode)) + +;; Shell stuff;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(setq shell-file-name (executable-find "bash")) +(setq-default vterm-shell (executable-find "fish")) + +;; Background Transparency + Toggling + +(defun set-frame-bg-opacity (opacity) + ;Interactively change the current frames background opacity. + ; OPACITY is an integer between 0 to 100, inclusive. + (interactive + (list (read-number "Opacity (0-100): " + (or (frame-parameter nil 'alpha) + 100)))) + (set-frame-parameter nil 'alpha-background opacity)) + + +(defun toggle-bg-transparency () + ;Toggle between transparent and opaque background. + (interactive) + (let ((alpha-background (frame-parameter nil 'alpha-background))) + (set-frame-bg-opacity + (if (eql (cond + ((numberp alpha-background) alpha-background) + (t 100)) + 100) + 85 100) + ))) + +(map! :leader + (:prefix-map ("t" . "toggle") + (:prefix ("T" . "Transparancy") + :desc "Toggle background transparancy" "b" #'toggle-bg-transparency))) + +(defun setup-frame-transparency (frame) + (set-frame-parameter frame 'alpha-background 85)) + +(add-hook 'after-make-frame-functions #'setup-frame-transparency) + + +;; TABS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(setq! uniquify-separator "/") +(setq! uniquify-buffer-name-style 'forward) + +(use-package centaur-tabs + :init + (setq centaur-tabs-enable-key-bindings t) + :config + (setq centaur-tabs-style "wave" + centaur-tabs-height 32 + centaur-tabs-set-icons t + centaur-tabs-show-new-tab-button t + centaur-tabs-show-navigation-buttons t + centaur-tabs-set-bar 'under + centaur-tabs-show-count t + centaur-tabs-gray-out-icons 'buffer + x-underline-at-descent-line t + centaur-tabs-set-modified-marker t + centaur-tabs-modified-marker "•" + centaur-tabs-close-button "x" + centaur-tabs-cycle-scope 'tabs + centaur-tabs-adjust-buffer-order t + centaur-tabs-left-edge-margin nil) + + (centaur-tabs-change-fonts (face-attribute 'default :font) 110) + (centaur-tabs-headline-match) + (centaur-tabs-group-by-projectile-project) + ;; (centaur-tabs-enable-buffer-alphabetical-reordering) + (centaur-tabs-mode t) + + + (defvar categories-alist + '( + (:name "org" :modes (org-mode org-agenda-mode) :buffer-name () :type global) + (:name "gptel" :modes nil :buffer-name ("*llama-cpp*" "*llama-cpp-code*" "*llama-cpp-bigchat*" "*llama-cpp-biggerchat*" "*gptel*" "*groq*" "*gptel-context*" "*gptel-query*") :type global) + (:name "terminal" :modes (vterm-mode term-mode) :buffer-name () :type per-project) + (:name "misc" :modes (+doom-dashboard-mode native-comp-limple-mode messages-buffer-mode) :buffer-name () :type global) + (:name "misc" :modes (special-mode fundamental-mode) :buffer-name () :type per-project) + ) + "Mapping of categories to modes with their respective type logic.") + + (defun get-project-name-or-default (default-name) + "Return the project name if available, or DEFAULT-NAME." + (if-let ((project-root (condition-case _err + (projectile-project-root) + (error nil)))) + (concat (projectile-project-name) "::" default-name) + default-name)) + + (defun get-category-name (buffer) + "Get category name for the given BUFFER." + (let (category-name) + (dolist (category categories-alist category-name) + (let ((buffer-names (plist-get category :buffer-name)) + (modes (plist-get category :modes))) + (cond + ((and buffer-names (member (buffer-name buffer) buffer-names)) + (setq category-name + (if (eq (plist-get category :type) 'per-project) + (get-project-name-or-default (plist-get category :name)) + (plist-get category :name)))) + ((and modes (with-current-buffer buffer (memq major-mode modes))) + (setq category-name + (if (eq (plist-get category :type) 'per-project) + (get-project-name-or-default (plist-get category :name)) + (plist-get category :name))))))))) + + (defun centaur-tabs-group-name-by-category () + "Get tab group name based on category." + (let ((mode-category (get-category-name (current-buffer)))) + (if mode-category + (list mode-category) + (list (get-project-name-or-default "main"))))) + + (defun centaur-tabs-projectile-buffer-groups () + "Return the list of group names BUFFER belongs to." + (if centaur-tabs-projectile-buffer-group-calc + (symbol-value 'centaur-tabs-projectile-buffer-group-calc) + (set (make-local-variable 'centaur-tabs-projectile-buffer-group-calc) + (centaur-tabs-group-name-by-category)))) + + (add-hook! '(+doom-dashboard-mode-hook +popup-buffer-mode-hook) + (defun +tabs-disable-centaur-tabs-mode-maybe-h () + "Disable `centaur-tabs-mode' in current buffer." + (when (centaur-tabs-mode-on-p) + (centaur-tabs-local-mode)))) + ) + +;; ruby + +(setq! lsp-ruby-lsp-use-bundler t) + + +;; Copilot +;; accept completion from copilot and fallback to company +;; (use-package! copilot +;; :hook (prog-mode . copilot-mode) +;; :bind (:map copilot-completion-map +;; ("" . 'copilot-clear-overlay) +;; ("" . 'copilot-previous-completion) +;; ("" . 'copilot-next-completion) +;; ("" . 'copilot-accept-completion) +;; ("TAB" . 'copilot-accept-completion) +;; ("C-TAB" . 'copilot-accept-completion-by-word) +;; ("C-" . 'copilot-accept-completion-by-word))) + +;; gptel + +;;(require 'gptel) +(use-package! gptel + :init + :config + (defun read-api-secret (secret-file) + (with-temp-buffer + (insert-file-contents (expand-file-name secret-file "~")) + (string-trim (buffer-substring-no-properties (point-min) (point-max))))) + + + ;; Default Model + ;; TODO Consider switching to coder + (setq! gptel-backend + (gptel-make-openai "llama-cpp" + :stream t + :protocol "http" + :host "100.64.0.3:18080" + :models '("llama-cpp-code"))) + (setq! gptel-model "llama-cpp-code") + + ;; nicer org mode foo + (setq! gptel-default-mode 'org-mode) + (setq! gptel-org-branching-context t) + + (setf (alist-get 'org-mode gptel-prompt-prefix-alist) "@user ") + (setf (alist-get 'org-mode gptel-response-prefix-alist) "@assistant ") + + ;; Qwen-2.5-Coder-32B / Tabby model + (gptel-make-openai "llama-cpp-biggerchat" + :stream t + :protocol "http" + :host "100.64.0.3:18083" + :models '("llama-cpp-biggerchat")) + + ;; Groq API + (gptel-make-openai "groq" + :host "api.groq.com" + :endpoint "/openai/v1/chat/completions" + :stream t + :key (read-api-secret ".groq_api_key") + :models '("llama3-70b-8192" + "mixtral-8x7b-32768" + "llama3-8b-8192")) + + + (setq! gptel-directives '((default + . "You are a large language model living in Emacs and a helpful assistant. Respond concisely.") + (programming + . "You are a large language model and a careful programmer. Provide code and only code as output without any additional text, prompt or note.") + (writing + . "You are a large language model and a writing assistant. Respond concisely.") + (chat + . "You are a large language model and a conversation partner. Respond concisely.")) + gptel-expert-commands t + + gptel-temperature 0.2) + + (add-hook 'gptel-post-response-functions 'gptel-end-of-response) + (add-hook 'gptel-post-stream-hook 'gptel-auto-scroll) + + (map! :leader + "" 'gptel-send + "TAB" 'gptel-send)) + +(use-package! gptel-extensions + :after gptel) + + +(use-package! llm) +(use-package! magit-gptcommit + :after magit llm + :demand t + :bind (:map git-commit-mode-map + ("C-c C-g" . magit-gptcommit-commit-accept)) + :init + (require 'llm-openai) + + ;; Helper function for writing a prompt for Magit GPTCommit + (defun join-with-newlines (list) + (mapconcat 'identity list "\n")) + + :custom + (llm-warn-on-nonfree nil) + (magit-gptcommit-llm-provider (make-llm-openai-compatible :key "OPENAI-KEY" :url "http://100.64.0.3:18080/v1/")) + + ;; TODO Test different prompts + (magit-gptcommit-prompt + (join-with-newlines + '( + "You are an expert programmer writing a commit message" + "You went over every file diff that was changed in it." + + "First Determine the best label for the diffs." + "Here are the labels you can choose from:" + "- build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)" + "- chore: Updating libraries, copyrights or other repo setting, includes updating dependencies." + "- ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, GitHub Actions)" + "- docs: Non-code changes, such as fixing typos or adding new documentation" + "- feat: a commit of the type feat introduces a new feature to the codebase" + "- fix: A commit of the type fix patches a bug in your codebase" + "- perf: A code change that improves performance" + "- refactor: A code change that neither fixes a bug nor adds a feature" + "- style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)" + "- test: Adding missing tests or correcting existing tests" + "" + "Then summarize the commit into a single specific and cohesive theme." + "Remember to write a one line summary, no more than 50 characters." + "If it is a simple change no need for additional lines." + "If there are multiple unrelated or complicated changes summarize them into bullet points" + "Remember to write an empty line between the summary and bullet points." + "" + "Write your response using the imperative tense following the kernel git commit style guide." + "Write a high level title." + "" + "# Example 1:" + "refactor: Rework transaction merging logic" + "" + "- use functional style instead of nested for loops" + "- cache intermediate results" + "- use refs instead of cloning everywhere" + "" + "# Example 2:" + "fix: Fix off-by-one integer in loop" + "# Example 3:" + "style: Add missing semicolon" + "THE FILE DIFFS:" + "```" + "%s" + "```" + "Now write Commit message in follow template: [label]:[one line of summary] :" + ))) + ;; :init + ;; (setq magit-gptcommit-llm-provider (make-llm-openai-compatible :key "OPENAI-KEY" :url "http://100.64.0.3:8080/v1/")) + :config + + (magit-gptcommit-mode 1) + (magit-gptcommit-status-buffer-setup)) + +;; (setq! magit-gptcommit-llm-provider (make-llm-openai-compatible :key "OPENAI-KEY" :url "http://100.64.0.3:8080/v1/") + +(defvar my-C-f-funcs '()) +(defun my-C-f () + (interactive) + (unless (call-interactively 'tabby-accept-completion) + (forward-char))) + +(use-package! tabby + :hook (rustic-mode . tabby-mode) + :init + (setq tabby-idle-delay 0.5) + (setq tabby--connection "http://100.64.0.3:8083") + :config + (add-to-list 'my-C-f-funcs 'tabby-accept-completion) + ;; (evil-define-key 'insert tabby-mode-map (kbd "C-f") 'tabby-accept-completion) + ;; (evil-define-key 'insert tabby-mode-map (kbd "C-f") 'my-C-f) + (evil-define-key 'insert tabby-mode-map (kbd "C-f") 'my-C-f) + (evil-define-key 'insert tabby-mode-map (kbd "C-M-j") 'tabby-dismiss) + (evil-define-key 'insert tabby-mode-map (kbd "C-M-l") 'tabby-accept-completion-by-line)) diff --git a/ext/doom/custom.el b/ext/doom/custom.el new file mode 100644 index 0000000..4244566 --- /dev/null +++ b/ext/doom/custom.el @@ -0,0 +1,14 @@ +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(custom-safe-themes + '("88f7ee5594021c60a4a6a1c275614103de8c1435d6d08cc58882f920e0cec65e" "02f57ef0a20b7f61adce51445b68b2a7e832648ce2e7efb19d217b6454c1b644" "467dc6fdebcf92f4d3e2a2016145ba15841987c71fbe675dcfe34ac47ffb9195" "e3daa8f18440301f3e54f2093fe15f4fe951986a8628e98dcd781efbec7a46f2" default)) + '(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'")) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) diff --git a/ext/doom/init.el b/ext/doom/init.el new file mode 100644 index 0000000..833aaf5 --- /dev/null +++ b/ext/doom/init.el @@ -0,0 +1,227 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + (company + +childframe) ; the ultimate code completion backend + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + (vertico +icons) ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + ;; doom-dashboard ; a nifty splash screen for Emacs + doom-quit ; DOOM quit-message prompts when you quit Emacs + ;; (emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;hydra + indent-guides ; highlighted indent columns + ligatures ; ligatures and symbols to make your code pretty again + minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;; tabs ; a tab bar for Emacs + treemacs ; a project drawer, like neotree but cooler + ;;unicode ; extended unicode support for various languages + (vc-gutter + +diff-hl + +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + (window-select ; visually switch windows + +numbers) + ;; workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing + + :editor + (evil +everywhere) ; come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + (format +onsave + +lsp) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + ;;snippets ; my elves. They type so I don't have to + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + (dired +icons) ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + (ibuffer +icons) ; interactive buffer management + (undo +tree) ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + (syntax + +childframe) ; tasing you for every semicolon you forget + (spell + +aspell + +flyspell) ; tasing you for misspelling mispelling + grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; FIXME stepping through code, to help you add bugs + direnv + docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + ;;gist ; interacting with github gists + (lookup + +docsets + +dictionary) ; navigate your code and its documentation + (lsp +eglot) ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if IS-MAC macos) ; improve compatibility with macOS + tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc + +lsp ;;;; supports eglot + +tree-sitter) ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + ;;go ; the hipster dialect + graphql ; Give queries a REST + ;;haskell ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + (json + +tree-sitter) ; At least it ain't XML + ;;java ; the poster child for carpal tunnel syndrome + (javascript + +tree-sitter) ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + ;;latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + (nix +tree-sitter) ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + (org ; organize your plain life in plain text + +jupyter + +pomodoro + +journal + +pomodoro + +dragndrop + +gnuplot + +roam2 + +present) + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + ;;python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + (rust +lsp ;;;; supports eglot + +tree-sitter) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + (sh + +fish + +tree-sitter) ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + (web + +css + +tree-sitter) ; the tubes + (yaml + +tree-sitter) ; JSON, but readable + ;;zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + ;;emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) + +(after! doom-cli-env + ;; Allow SSH-related environment variables to be set in persistent configuration. + (add-to-list 'doom-env-allow "^SSH_")) diff --git a/ext/doom/packages.el b/ext/doom/packages.el new file mode 100644 index 0000000..2c2c618 --- /dev/null +++ b/ext/doom/packages.el @@ -0,0 +1,82 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package with Doom you must declare them here and run 'doom sync' +;; on the command line, then restart Emacs for the changes to take effect -- or +;; use 'M-x doom/reload'. + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;;(package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/radian-software/straight.el#the-recipe-format +;;(package! another-package +;; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;;(package! this-package +;; :recipe (:host github :repo "username/repo" +;; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;;(package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;;(package! builtin-package :recipe (:nonrecursive t)) +;;(package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see radian-software/straight.el#279) +;;(package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. + +;; tabs +(package! centaur-tabs) + +;; nix +(package! nixpkgs-fmt) + +;; copilot +;; (package! copilot +;; :recipe (:host github :repo "zerolfx/copilot.el" :files ("*.el" "dist"))) +;;;;;;;;;;;;;;;;;;;;;;;;; + +;; gptel +(package! gptel :recipe (:type git :host nil :repo "https://github.com/karthink/gptel.git" :branch "master")) +;; gptel-extensions +(package! gptel-extensions :recipe (:host github :repo "kamushadenes/gptel-extensions.el")) +;; gptcommit +(package! llm) +(package! magit-gptcommit :recipe (:host github :repo "douo/magit-gptcommit" :branch "master")) +;;;;;;;;;;;;;;;;;;;;;;;;; + + +;; rust analyzer extensions for eglot + treesit foledr + +(package! treesit-fold :recipe (:host github :repo "emacs-tree-sitter/treesit-fold")) +(package! eglot-x :recipe (:host github :repo "nemethf/eglot-x")) +(package! eglot-booster :recipe (:type git :host nil :repo "https://github.com/jdtsmith/eglot-booster.git" :branch "main")) + +;;;;;; + +(package! tabby + :recipe (:host github :files ("*.el" "node_scripts") + :repo "alan-w-255/tabby.el")) + +(package! activity-watch-mode) +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;;(unpin! pinned-package) +;; ...or multiple packages +;;(unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;;(unpin! t) diff --git a/ext/install-cert-to-moz.sh b/ext/install-cert-to-moz.sh new file mode 100755 index 0000000..b53fde3 --- /dev/null +++ b/ext/install-cert-to-moz.sh @@ -0,0 +1,10 @@ +#/usr/bin/env bash +# +certificateFile="./internal-ca.crt" +certificateName="Ökonzept internal CA" +for certDB in $(find ~/.mozilla* ~/.thunderbird -name "cert9.db") +do + certDir=$(dirname ${certDB}); + echo "mozilla certificate" "install '${certificateName}' in ${certDir}" + certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir} +done diff --git a/ext/internal-ca.crt b/ext/internal-ca.crt new file mode 100644 index 0000000..d37df69 --- /dev/null +++ b/ext/internal-ca.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDGTCCAnqgAwIBAgIBADAKBggqhkjOPQQDBDCBgTELMAkGA1UEBhMCREUxDDAK +BgNVBAgMA05SVzEVMBMGA1UEBwwMRMO8c3NlbGRvcmYgMRcwFQYDVQQKDA7Dlmtv +bnplcHQgR21iSDEeMBwGCSqGSIb3DQEJARYPdGRAb2Vrb256ZXB0LmRlMRQwEgYD +VQQDDAtpbnRlcm5hbC1jYTAeFw0yMzEyMjExNTQ5NDlaFw0yNjAzMjUxNTQ5NDla +MIGBMQswCQYDVQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQHDAxEw7xzc2Vs +ZG9yZiAxFzAVBgNVBAoMDsOWa29uemVwdCBHbWJIMR4wHAYJKoZIhvcNAQkBFg90 +ZEBvZWtvbnplcHQuZGUxFDASBgNVBAMMC2ludGVybmFsLWNhMIGbMBAGByqGSM49 +AgEGBSuBBAAjA4GGAAQA3DJTMO9l/tX2BZMvaYT8UBKQZU0dks1VpirQby2S7Ve2 +YEQWVzpICigaKdNaJp/vfyMoTLWuPc72J7BoQWjdMBQAZLmMERta0FdeDWKRR1XC +QJudrNNu4NWTHvR1n49or7XXXZOVBQHMRIXK6sybZ4f7qrNgGvoHgnII34oLfLHA +mZijgZ0wgZowNwYJYIZIAYb4QgENBCoWKE9QTnNlbnNlIEdlbmVyYXRlZCBDZXJ0 +aWZpY2F0ZSBBdXRob3JpdHkwHQYDVR0OBBYEFAvqn2SyuDp8a8g9isltriGYJ9Bz +MB8GA1UdIwQYMBaAFAvqn2SyuDp8a8g9isltriGYJ9BzMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMEA4GMADCBiAJCAIrXKSrGMv9c ++jxs7EYX6LFYQ5sB0H5Q9LdxFu8VU6zpFGjnj1OpivL+jkEYRddjlho3+LMdaBar ++vw5PbXZ0luQAkIBK4djE3TCTJZQJ7sfdDVE97/JwDVwW+L2SFAmhMy9aG9qQ+r2 +SiPOrOuAJTgxDCctlXSv9KqUxy8eg2lk7cgaYx4= +-----END CERTIFICATE----- diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a1edf60 --- /dev/null +++ b/flake.lock @@ -0,0 +1,1415 @@ +{ + "nodes": { + "agenix": { + "inputs": { + "darwin": "darwin", + "home-manager": [ + "home-manager" + ], + "nixpkgs": "nixpkgs", + "systems": [ + "systems" + ] + }, + "locked": { + "lastModified": 1736955230, + "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", + "owner": "ryantm", + "repo": "agenix", + "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "agenix-rekey": { + "inputs": { + "devshell": [ + "devshell" + ], + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks", + "treefmt-nix": [ + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1739816852, + "narHash": "sha256-QG8aA6hWsi6pqaidaz5a5SL+dM1mT9LMWMrmc1hrOrU=", + "owner": "oddlama", + "repo": "agenix-rekey", + "rev": "5f56d711ffe2aca62cfeeada9ec56692a13b9061", + "type": "github" + }, + "original": { + "owner": "oddlama", + "repo": "agenix-rekey", + "type": "github" + } + }, + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1732200724, + "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "153d52373b0fb2d343592871009a286ec8837aec", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1622559957, + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1736852337, + "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1732806396, + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + } + }, + "chaotic": { + "inputs": { + "fenix": "fenix", + "flake-schemas": "flake-schemas", + "home-manager": [ + "home-manager" + ], + "jovian": "jovian", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740358343, + "narHash": "sha256-ZNQL3ju3Naf8Bb5YIkm6P+1T5ik59ZrUDjEMgX9NII0=", + "owner": "chaotic-cx", + "repo": "nyx", + "rev": "5e2921e7602cc07fcdfbfe1faba586d961c84c3d", + "type": "github" + }, + "original": { + "owner": "chaotic-cx", + "ref": "nyxpkgs-unstable", + "repo": "nyx", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1731098351, + "narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=", + "owner": "ipetkov", + "repo": "crane", + "rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700795494, + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "devshell": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1735644329, + "narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=", + "owner": "numtide", + "repo": "devshell", + "rev": "f7795ede5b02664b57035b3b757876703e2c3eac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1739841949, + "narHash": "sha256-lSOXdgW/1zi/SSu7xp71v+55D5Egz8ACv0STkj7fhbs=", + "owner": "nix-community", + "repo": "disko", + "rev": "15dbf8cebd8e2655a883b74547108e089f051bf0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "emacs-overlay": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1730626539, + "narHash": "sha256-gAivT/gAHhzdRpB+4hBYhLBF51KIj+hvo9J9tbJ6VDU=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "7cd35bfbe2fbb2906bc85803eab0bdc499b6f253", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "7cd35bfbe2fbb2906bc85803eab0bdc499b6f253", + "type": "github" + } + }, + "envfs": { + "inputs": { + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": [ + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1737416325, + "narHash": "sha256-WPs1q1HT3SqV4JKEmWF/B/1j7SYiczeBzYD7fqYaHfE=", + "owner": "Mic92", + "repo": "envfs", + "rev": "a8da5c01b0f1b5016560a3f1041090cf1ecb8130", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "envfs", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1740292204, + "narHash": "sha256-ZbptkmqaenRhUKsodSEcVzBw+kXZ8DcZpTGutU1HEiI=", + "owner": "nix-community", + "repo": "fenix", + "rev": "93d59130e3fc121f927c03e406142df8d544b901", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "firefox-gnome-theme": { + "flake": false, + "locked": { + "lastModified": 1739223196, + "narHash": "sha256-vAxN2f3rvl5q62gQQjZGVSvF93nAsOxntuFz+e/655w=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "a89108e6272426f4eddd93ba17d0ea101c34fb21", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz?rev=ff81ac966bb2cae68946d5ed5fc4994f96d0ffec&revCount=69" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1738453229, + "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-schemas": { + "locked": { + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" + } + }, + "flake-utils": { + "inputs": { + "systems": [ + "systems" + ] + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "stylix", + "flake-compat" + ], + "gitignore": "gitignore_5", + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1735882644, + "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "agenix-rekey", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_3": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { + "inputs": { + "nixpkgs": [ + "nix-wallpaper", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_5": { + "inputs": { + "nixpkgs": [ + "stylix", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1732369855, + "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "dadd58f630eeea41d645ee225a63f719390829dc", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "47.2", + "repo": "gnome-shell", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740347597, + "narHash": "sha256-st5q9egkPGz8TUcVVlIQX7y6G3AzHob+6M963bwVq74=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "12e26a74e5eb1a31e13daaa08858689e25ebd449", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740269380, + "narHash": "sha256-l+zB5a39MJp4Olc4YxP7GChFXmNZIhoXaiSS6QRXa9o=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "11ba89d13831cb399194310304fffb025081c674", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, + "lanzaboote": { + "inputs": { + "crane": "crane", + "flake-compat": [ + "flake-compat" + ], + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks-nix": "pre-commit-hooks-nix", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1737639419, + "narHash": "sha256-AEEDktApTEZ5PZXNDkry2YV2k6t0dTgLPEmAZbnigXU=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "a65905a09e2c43ff63be8c0e86a93712361f871e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v0.4.2", + "repo": "lanzaboote", + "type": "github" + } + }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1729298361, + "narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=", + "rev": "ad9d06f7838a25beec425ff406fe68721fef73be", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz" + } + }, + "lix-module": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "flakey-profile": "flakey-profile", + "lix": "lix", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729360442, + "narHash": "sha256-6U0CyPycIBc04hbYy2hBINnVso58n/ZyywY2BD3hu+s=", + "rev": "9098ac95768f7006d7e070b88bae76939f6034e6", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/9098ac95768f7006d7e070b88bae76939f6034e6.tar.gz?rev=9098ac95768f7006d7e070b88bae76939f6034e6" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz" + } + }, + "llama-cpp": { + "inputs": { + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1716924132, + "narHash": "sha256-C+4SdaMeKz9APcU/dIV6VAw0k7yYyGaylQTnOjUN5VQ=", + "ref": "refs/heads/master", + "rev": "5f687d392b4d736c3ca5dc4d6778f5713a02ec28", + "revCount": 3027, + "type": "git", + "url": "https://git.vlt81.de/tristan/llama.cpp.git" + }, + "original": { + "type": "git", + "url": "https://git.vlt81.de/tristan/llama.cpp.git" + } + }, + "nix-alien": { + "inputs": { + "flake-compat": [ + "flake-compat" + ], + "nix-index-database": [ + "nix-index-database" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740094523, + "narHash": "sha256-vGxTGexcKN8BVunczdqps1dbu0khOFp0++Gvip9QZJ8=", + "owner": "thiagokokada", + "repo": "nix-alien", + "rev": "ab175cdbbad2a93afc86125eb0835694b005b2fb", + "type": "github" + }, + "original": { + "owner": "thiagokokada", + "repo": "nix-alien", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "chaotic", + "jovian", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729697500, + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740281615, + "narHash": "sha256-dZWcbAQ1sF8oVv+zjSKkPVY0ebwENQEkz5vc6muXbKY=", + "owner": "Mic92", + "repo": "nix-index-database", + "rev": "465792533d03e6bb9dc849d58ab9d5e31fac9023", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "nix-index-database", + "type": "github" + } + }, + "nix-ld-rs": { + "inputs": { + "flake-compat": [ + "flake-compat" + ], + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1723871880, + "narHash": "sha256-HKHx2tDZEcKTKKkhyIDRifJW7a4bxOsWlvIVI1qm+ng=", + "owner": "nix-community", + "repo": "nix-ld-rs", + "rev": "8af5fc9add315c251edea8f659b56fc7836a163f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-ld-rs", + "type": "github" + } + }, + "nix-wallpaper": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks_2" + }, + "locked": { + "lastModified": 1738416039, + "narHash": "sha256-ZQm0821Kq7F5W7TKaIvwuMJQ4y3cD+vpnb07qaOBE+Y=", + "owner": "lunik1", + "repo": "nix-wallpaper", + "rev": "bbfc708b8a9209632df71015800e8f473931ffc3", + "type": "github" + }, + "original": { + "owner": "lunik1", + "repo": "nix-wallpaper", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1740384564, + "narHash": "sha256-BKlYOGAiNlZs/gJVcBx7oPocpXR8+zfgXR7TM7tvans=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "099d38a69ed75b6f549aa0daadc08c075d44a4d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-stable": "nixos-stable", + "nixos-unstable": "nixos-unstable" + }, + "locked": { + "lastModified": 1739150456, + "narHash": "sha256-YXmuhtU9oGv4pvoKnJn/YF5sknkch+9IFiusvJ4rabw=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "b8efea96c45cfeb2b422715b9deff6ffdb6d460f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-stable": { + "locked": { + "lastModified": 1739055578, + "narHash": "sha256-2MhC2Bgd06uI1A0vkdNUyDYsMD0SLNGKtD8600mZ69A=", + "ref": "nixos-24.11", + "rev": "a45fa362d887f4d4a7157d95c28ca9ce2899b70e", + "shallow": true, + "type": "git", + "url": "https://github.com/NixOS/nixpkgs" + }, + "original": { + "ref": "nixos-24.11", + "shallow": true, + "type": "git", + "url": "https://github.com/NixOS/nixpkgs" + } + }, + "nixos-unstable": { + "locked": { + "lastModified": 1739019272, + "narHash": "sha256-7Fu7oazPoYCbDzb9k8D/DdbKrC3aU1zlnc39Y8jy/s8=", + "ref": "nixpkgs-unstable", + "rev": "fa35a3c8e17a3de613240fea68f876e5b4896aec", + "shallow": true, + "type": "git", + "url": "https://github.com/NixOS/nixpkgs" + }, + "original": { + "ref": "nixpkgs-unstable", + "shallow": true, + "type": "git", + "url": "https://github.com/NixOS/nixpkgs" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1703013332, + "narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1730741070, + "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1730741070, + "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_3": { + "locked": { + "lastModified": 1735563628, + "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1722073938, + "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1740126099, + "narHash": "sha256-ozoOtE2hGsqh4XkTJFsrTkNxkRgShxpQxDynaPZUGxk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "32fb99ba93fea2798be0e997ea331dd78167f814", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1724819573, + "narHash": "sha256-GnR7/ibgIH1vhoy8cYdmXE6iyZqKqFxQSVkFgosBh6w=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "71e91c409d1e654808b2621f28a327acfdad8dc2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": [ + "flake-parts" + ], + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": [ + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1740369115, + "narHash": "sha256-Lrf5p12WPdP0JYzCIndhFIIj1gz/jbIer/BemKu77Ys=", + "owner": "nix-community", + "repo": "NUR", + "rev": "0f6d871700022c339dcb70439241b6445ec880d4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1739557722, + "narHash": "sha256-XikzLpPUDYiNyJ4w2SfRShdbSkIgE3btYdxCGInmtc4=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "1f3e1f38dedbbb8aad77e184fb54ec518e2d9522", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "plasma-manager", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "agenix-rekey", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1735882644, + "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix": { + "inputs": { + "flake-compat": [ + "lanzaboote", + "flake-compat" + ], + "gitignore": "gitignore_3", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1731363552, + "narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": "flake-compat_3", + "gitignore": "gitignore_4", + "nixpkgs": [ + "nix-wallpaper", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1732021966, + "narHash": "sha256-mnTbjpdqF0luOkou8ZFi2asa1N3AA2CchR/RqCNmsGE=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "3308484d1a443fc5bc92012435d79e80458fe43c", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "agenix": "agenix", + "agenix-rekey": "agenix-rekey", + "chaotic": "chaotic", + "devshell": "devshell", + "disko": "disko", + "emacs-overlay": "emacs-overlay", + "envfs": "envfs", + "flake-compat": "flake-compat_2", + "flake-parts": "flake-parts", + "flake-utils": "flake-utils", + "gitignore": "gitignore_2", + "home-manager": "home-manager", + "lanzaboote": "lanzaboote", + "lix-module": "lix-module", + "llama-cpp": "llama-cpp", + "nix-alien": "nix-alien", + "nix-index-database": "nix-index-database", + "nix-ld-rs": "nix-ld-rs", + "nix-wallpaper": "nix-wallpaper", + "nixos-hardware": "nixos-hardware", + "nixos-images": "nixos-images", + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable_3", + "nur": "nur", + "plasma-manager": "plasma-manager", + "stylix": "stylix", + "systems": "systems", + "treefmt-nix": "treefmt-nix", + "winapps": "winapps" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1740259966, + "narHash": "sha256-FJU9qiELvmJzNRr7wLFtJUy4bSk1PNqsRB7wOQz6zUE=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "9df88ff0f65f8de9f73684d2bb96e1b62669d083", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731897198, + "narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "0be641045af6d8666c11c2c40e45ffc9667839b5", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "firefox-gnome-theme": "firefox-gnome-theme", + "flake-compat": [ + "flake-compat" + ], + "flake-utils": [ + "flake-utils" + ], + "git-hooks": "git-hooks", + "gnome-shell": "gnome-shell", + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ], + "systems": [ + "systems" + ], + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-schemes": "tinted-schemes", + "tinted-tmux": "tinted-tmux", + "tinted-zed": "tinted-zed" + }, + "locked": { + "lastModified": 1739742581, + "narHash": "sha256-0Ze86fzS6dzw/i0+egACKR7EGe9eoOriIHwKpTDQvTI=", + "owner": "brckd", + "repo": "stylix", + "rev": "e3fe2c662862c2fbf09bfd9fc0556d0e4225298b", + "type": "github" + }, + "original": { + "owner": "brckd", + "ref": "treewide/add-overlays-option", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1680978846, + "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=", + "owner": "nix-systems", + "repo": "x86_64-linux", + "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "x86_64-linux", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1716423189, + "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + } + }, + "tinted-schemes": { + "flake": false, + "locked": { + "lastModified": 1737565458, + "narHash": "sha256-y+9cvOA6BLKT0WfebDsyUpUa/YxKow9hTjBp6HpQv68=", + "owner": "tinted-theming", + "repo": "schemes", + "rev": "ae31625ba47aeaa4bf6a98cf11a8d4886f9463d9", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "schemes", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1735737224, + "narHash": "sha256-FO2hRBkZsjlIRqzNHCPc/52yxg11kHGA8MEtSun9RwE=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "aead506a9930c717ebf81cc83a2126e9ca08fa64", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "tinted-zed": { + "flake": false, + "locked": { + "lastModified": 1725758778, + "narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=", + "owner": "tinted-theming", + "repo": "base16-zed", + "rev": "122c9e5c0e6f27211361a04fae92df97940eccf9", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-zed", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1739829690, + "narHash": "sha256-mL1szCeIsjh6Khn3nH2cYtwO5YXG6gBiTw1A30iGeDU=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "3d0579f5cc93436052d94b73925b48973a104204", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "winapps": { + "inputs": { + "flake-compat": [ + "flake-compat" + ], + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1739719197, + "narHash": "sha256-sUn+SkpCoJqYcGGr/OypR00AjL2p7NLosnE2Vuv2TVI=", + "owner": "winapps-org", + "repo": "winapps", + "rev": "206da9353055b9b70f0329cf759e29a3a5cac352", + "type": "github" + }, + "original": { + "owner": "winapps-org", + "repo": "winapps", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1109a02 --- /dev/null +++ b/flake.nix @@ -0,0 +1,275 @@ +{ + description = "flake for nixos-pulse"; + + nixConfig = { }; + + inputs = { + systems = { + url = "github:nix-systems/x86_64-linux"; + }; + nixos-hardware = { + url = "github:NixOS/nixos-hardware/master"; + }; + nixpkgs = { + url = "github:NixOS/nixpkgs/nixos-unstable"; + # url = "github:tristandruyen/nixpkgs/nixos-unstable-small"; # fork for rocm fix + # url = "github:NixOS/nixpkgs/nixos-unstable-small"; + # url = "github:mschwaig/nixpkgs/fix-rocm-build-by-disabling-test"; + }; + nixpkgs-stable = { + url = "github:NixOS/nixpkgs/nixos-24.05"; + }; + nixos-images = { + url = "github:nix-community/nixos-images"; + }; + agenix = { + url = "github:ryantm/agenix"; + inputs.home-manager.follows = "home-manager"; + inputs.systems.follows = "systems"; + }; + agenix-rekey = { + url = "github:oddlama/agenix-rekey"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.treefmt-nix.follows = "treefmt-nix"; + inputs.flake-parts.follows = "flake-parts"; + inputs.devshell.follows = "devshell"; + }; + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + flake-utils = { + url = "github:numtide/flake-utils"; + inputs.systems.follows = "systems"; + }; + flake-parts = { + url = "github:hercules-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; + gitignore = { + url = "github:hercules-ci/gitignore.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"; + lanzaboote = { + url = "github:nix-community/lanzaboote/v0.4.2"; + + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-compat.follows = "flake-compat"; + inputs.flake-parts.follows = "flake-parts"; + }; + lix-module = { + url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + }; + chaotic = { + url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + emacs-overlay = { + url = "github:nix-community/emacs-overlay/7cd35bfbe2fbb2906bc85803eab0bdc499b6f253"; + inputs.flake-utils.follows = "flake-utils"; + inputs.nixpkgs-stable.follows = "nixpkgs-stable"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nur = { + url = "github:nix-community/NUR"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.treefmt-nix.follows = "treefmt-nix"; + inputs.flake-parts.follows = "flake-parts"; + }; + nix-wallpaper = { + url = "github:lunik1/nix-wallpaper"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + }; + nix-index-database = { + url = "github:Mic92/nix-index-database"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + plasma-manager = { + url = "github:nix-community/plasma-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + nix-alien = { + url = "github:thiagokokada/nix-alien"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.nix-index-database.follows = "nix-index-database"; + inputs.flake-compat.follows = "flake-compat"; + }; + envfs = { + url = "github:Mic92/envfs"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-parts.follows = "flake-parts"; + inputs.treefmt-nix.follows = "treefmt-nix"; + }; + nix-ld-rs = { + url = "github:nix-community/nix-ld-rs"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + inputs.flake-compat.follows = "flake-compat"; + }; + stylix = { + # url = "github:danth/stylix"; # TODO Switch to this once https://github.com/danth/stylix/pull/866 is merged + url = "github:brckd/stylix/treewide/add-overlays-option"; + inputs.flake-compat.follows = "flake-compat"; + inputs.flake-utils.follows = "flake-utils"; + inputs.home-manager.follows = "home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.systems.follows = "systems"; + }; + llama-cpp = { + url = "git+https://git.vlt81.de/tristan/llama.cpp.git"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-parts.follows = "flake-parts"; + }; + winapps = { + url = "github:winapps-org/winapps"; + inputs.flake-compat.follows = "flake-compat"; + inputs.flake-utils.follows = "flake-utils"; + }; + devshell.url = "github:numtide/devshell"; + }; + + outputs = + { self + , nixpkgs + , lanzaboote + , nixos-hardware + , agenix + , agenix-rekey + , flake-utils + , devshell + , lix-module + , home-manager + , plasma-manager + , emacs-overlay + , nur + , nix-index-database + , disko + , chaotic + , envfs + , llama-cpp + , stylix + , nix-wallpaper + , winapps + , ... + } @ inputs: + let + system = "x86_64-linux"; + my-overlay = final: prev: { + my = self.packages."${system}"; + nix-wallpaper = nix-wallpaper.packages."${system}".default; + }; + overlays = [ + my-overlay + emacs-overlay.overlay + inputs.nix-alien.overlays.default + inputs.nix-ld-rs.overlays.default + agenix-rekey.overlays.default + devshell.overlays.default + ]; + config = { + allowUnfree = true; + android_sdk.accept_license = true; + permittedInsecurePackages = [ + "jitsi-meet-1.0.8043" + # "olm-3.2.16" + ]; + }; + pkgs = import nixpkgs { + inherit config system overlays; + }; + lib = pkgs.lib; + hmModules = [ + nix-index-database.hmModules.nix-index + nur.modules.homeManager.default + plasma-manager.homeManagerModules.plasma-manager + # stylix.homeManagerModules.stylix + ]; + osModules = [ + lanzaboote.nixosModules.lanzaboote + lix-module.nixosModules.default + disko.nixosModules.disko + home-manager.nixosModules.home-manager + nix-index-database.nixosModules.nix-index + nur.modules.nixos.default + chaotic.nixosModules.default + envfs.nixosModules.envfs + stylix.nixosModules.stylix + agenix.nixosModules.default + agenix-rekey.nixosModules.default + ]; + args = { + inherit self inputs system; + }; + in + { + formatter."${system}" = pkgs.nixpkgs-fmt; + packages."${system}" = import ./pkgs { inherit pkgs lib config; }; + diskoConfigurations = { + nixos-desk = import ./systems/nixos-desk/disko.nix; + nixos-pulse = import ./systems/nixos-pulse/disko.nix; + nixos-he4 = import ./systems/nixos-he4/disko.nix; + }; + agenix-rekey = agenix-rekey.configure { + userFlake = self; + nixosConfigurations = self.nixosConfigurations; + }; + # replace this with a auto-importing variant like the packages decl. above (instead of callPackage we just need to import the path) + nixosConfigurations = lib.attrsets.mergeAttrsList ( + lib.lists.forEach [ + "nixos-desk" + "nixos-pulse" + "nixos-fw16" + "rescue-iso" + ] + (host: { + "${host}" = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = args; + modules = + [ + ./systems/${host} + { + nixpkgs = { + inherit config system overlays; + }; + # nixpkgs.pkgs = pkgs; + nix.registry.nixpkgs.flake = nixpkgs; + home-manager.sharedModules = hmModules; + home-manager.extraSpecialArgs = args; + } + ] + ++ osModules; + }; + }) + ); + hydraJobs = + let + osConfigs = builtins.mapAttrs (_: system: system.config.system.build.toplevel) self.nixosConfigurations; + packages = self.packages."${system}"; + in + { + inherit osConfigs packages; + }; + } + # Devshell with local dev utils + // flake-utils.lib.eachDefaultSystem (system: rec { + devShells.default = pkgs.mkShell { + packages = [ pkgs.rage pkgs.nh pkgs.agenix-rekey ]; + # ... + }; + }); +} diff --git a/home-mods/activity-watch/default.nix b/home-mods/activity-watch/default.nix new file mode 100644 index 0000000..4cdc2dd --- /dev/null +++ b/home-mods/activity-watch/default.nix @@ -0,0 +1,34 @@ +{ config +, pkgs +, inputs +, ... +}: { + home.packages = with pkgs; [ + # aw-watcher-afk + # aw-watcher-window-wayland # does not support kwin wayland + # aw-webui + # python312Packages.aw-core + aw-server-rust + my.awatcher + ]; + + programs.firefox.profiles.default.extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + aw-watcher-web + ]; + + services.activitywatch = { + enable = true; + package = pkgs.aw-server-rust; + watchers = { + awatcher.package = pkgs.my.awatcher; + }; + }; + + systemd.user.services.activitywatch-watcher-awatcher.Service = { + Restart = "always"; + RestartSec = "5"; + }; + + # TODO Add timer for `aw-sync --sync-dir=$HOME/Nextcloud/ActivityWatch/ sync --mode both` + # (aw-sync binary is part of aw-server-rust) +} diff --git a/home-mods/audio/default.json b/home-mods/audio/default.json new file mode 100644 index 0000000..9c75453 --- /dev/null +++ b/home-mods/audio/default.json @@ -0,0 +1,772 @@ +{ + "output": { + "autogain#0": { + "bypass": true, + "input-gain": 0.0, + "maximum-history": 15, + "output-gain": 0.0, + "reference": "Integrated", + "silence-threshold": -70.0, + "target": -10.0 + }, + "bass_enhancer#0": { + "amount": -6.0, + "blend": -10.0, + "bypass": true, + "floor": 116.0, + "floor-active": true, + "harmonics": 10.0, + "input-gain": 0.0, + "output-gain": 0.0, + "scope": 233.0 + }, + "blocklist": [], + "compressor#0": { + "attack": 0.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "bypass": true, + "dry": -100.0, + "hpf-frequency": 10.0, + "hpf-mode": "off", + "input-gain": 0.0, + "knee": 0.0, + "lpf-frequency": 20000.0, + "lpf-mode": "off", + "makeup": 0.0, + "mode": "Upward", + "output-gain": 0.0, + "ratio": 1.5, + "release": 200.0, + "release-threshold": -100.0, + "sidechain": { + "lookahead": 0.0, + "mode": "RMS", + "preamp": 0.0, + "reactivity": 250.0, + "source": "Middle", + "type": "Feed-forward" + }, + "threshold": 0.0, + "wet": 0.0 + }, + "crossfeed#0": { + "bypass": false, + "fcut": 1864, + "feed": 6.0, + "input-gain": 0.0, + "output-gain": 0.0 + }, + "equalizer#0": { + "balance": 0.0, + "bypass": true, + "input-gain": 0.0, + "left": { + "band0": { + "frequency": 392.0, + "gain": -18.0, + "mode": "RLC (BT)", + "mute": false, + "q": 0.0, + "slope": "x1", + "solo": false, + "type": "Bell" + } + }, + "mode": "IIR", + "num-bands": 1, + "output-gain": 0.0, + "pitch-left": 0.0, + "pitch-right": 0.0, + "right": { + "band0": { + "frequency": 392.0, + "gain": -18.0, + "mode": "RLC (BT)", + "mute": false, + "q": 0.0, + "slope": "x1", + "solo": false, + "type": "Bell" + } + }, + "split-channels": false + }, + "equalizer#1": { + "balance": 0.0, + "bypass": true, + "input-gain": 0.0, + "left": { + "band0": { + "frequency": 466.0, + "gain": 3.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band1": { + "frequency": 1864.0, + "gain": 3.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band2": { + "frequency": 7458.0, + "gain": 3.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + } + }, + "mode": "IIR", + "num-bands": 3, + "output-gain": 0.0, + "pitch-left": 0.0, + "pitch-right": 0.0, + "right": { + "band0": { + "frequency": 932.0, + "gain": 3.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band1": { + "frequency": 3729.0, + "gain": 3.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band2": { + "frequency": 14917.0, + "gain": 3.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + } + }, + "split-channels": true + }, + "equalizer#2": { + "balance": 0.0, + "bypass": true, + "input-gain": 0.0, + "left": { + "band0": { + "frequency": 466.0, + "gain": 6.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band1": { + "frequency": 1864.0, + "gain": 6.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band2": { + "frequency": 7458.0, + "gain": 6.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + } + }, + "mode": "IIR", + "num-bands": 3, + "output-gain": 0.0, + "pitch-left": 0.0, + "pitch-right": 0.0, + "right": { + "band0": { + "frequency": 932.0, + "gain": 6.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band1": { + "frequency": 3729.0, + "gain": 6.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + }, + "band2": { + "frequency": 14917.0, + "gain": 6.0, + "mode": "LRX (BT)", + "mute": false, + "q": 0.0, + "slope": "x4", + "solo": false, + "type": "Bell" + } + }, + "split-channels": true + }, + "limiter#0": { + "alr": true, + "alr-attack": 0.1, + "alr-knee": 10.0, + "alr-release": 1000.0, + "attack": 5.0, + "bypass": true, + "dithering": "None", + "external-sidechain": false, + "gain-boost": true, + "input-gain": 0.0, + "lookahead": 5.0, + "mode": "Herm Wide", + "output-gain": 0.0, + "oversampling": "None", + "release": 5.0, + "sidechain-preamp": 0.0, + "stereo-link": 0.0, + "threshold": 0.0 + }, + "loudness#0": { + "bypass": true, + "clipping": false, + "clipping-range": 6.0, + "fft": "4096", + "input-gain": 0.0, + "output-gain": 0.0, + "std": "ISO226-2003", + "volume": -24.0 + }, + "multiband_compressor#0": { + "band0": { + "attack-threshold": 0.0, + "attack-time": 0.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Upward", + "compressor-enable": true, + "external-sidechain": false, + "knee": 0.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.2, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 500.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 10.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 250.0, + "sidechain-source": "Middle", + "solo": false + }, + "band1": { + "attack-threshold": 0.0, + "attack-time": 0.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Upward", + "compressor-enable": true, + "enable-band": true, + "external-sidechain": false, + "knee": 0.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.2, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 1000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 500.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 250.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 138.0 + }, + "band2": { + "attack-threshold": 0.0, + "attack-time": 0.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Upward", + "compressor-enable": true, + "enable-band": true, + "external-sidechain": false, + "knee": 0.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.2, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 2000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 1000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 250.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 4434.0 + }, + "band3": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 4000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 2000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 2000.0 + }, + "band4": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 8000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 4000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 4000.0 + }, + "band5": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 12000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 8000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 8000.0 + }, + "band6": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 16000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 12000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 12000.0 + }, + "band7": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 20000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 16000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 16000.0 + }, + "bypass": true, + "compressor-mode": "Modern", + "dry": -100.0, + "envelope-boost": "None", + "input-gain": 0.0, + "output-gain": 0.0, + "wet": 0.0 + }, + "multiband_compressor#1": { + "band0": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 500.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 10.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false + }, + "band1": { + "attack-threshold": 0.0, + "attack-time": 0.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Upward", + "compressor-enable": true, + "enable-band": true, + "external-sidechain": false, + "knee": 0.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.2, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": true, + "sidechain-custom-lowcut-filter": true, + "sidechain-highcut-frequency": 329.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 20.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 250.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 329.0 + }, + "band2": { + "attack-threshold": 0.0, + "attack-time": 0.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Upward", + "compressor-enable": true, + "enable-band": true, + "external-sidechain": false, + "knee": 0.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.2, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": true, + "sidechain-custom-lowcut-filter": true, + "sidechain-highcut-frequency": 329.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 20.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 250.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 2637.0 + }, + "band3": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 4000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 2000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 2000.0 + }, + "band4": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 8000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 4000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 4000.0 + }, + "band5": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 12000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 8000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 8000.0 + }, + "band6": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 16000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 12000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 12000.0 + }, + "band7": { + "attack-threshold": -12.0, + "attack-time": 20.0, + "boost-amount": 6.0, + "boost-threshold": -72.0, + "compression-mode": "Downward", + "compressor-enable": false, + "enable-band": false, + "external-sidechain": false, + "knee": -6.0, + "makeup": 0.0, + "mute": false, + "ratio": 1.0, + "release-threshold": -100.0, + "release-time": 100.0, + "sidechain-custom-highcut-filter": false, + "sidechain-custom-lowcut-filter": false, + "sidechain-highcut-frequency": 20000.0, + "sidechain-lookahead": 0.0, + "sidechain-lowcut-frequency": 16000.0, + "sidechain-mode": "RMS", + "sidechain-preamp": 0.0, + "sidechain-reactivity": 10.0, + "sidechain-source": "Middle", + "solo": false, + "split-frequency": 16000.0 + }, + "bypass": true, + "compressor-mode": "Modern", + "dry": -100.0, + "envelope-boost": "None", + "input-gain": 0.0, + "output-gain": 0.0, + "wet": 0.0 + }, + "plugins_order": [ + "crossfeed#0", + "loudness#0", + "equalizer#0", + "bass_enhancer#0", + "equalizer#1", + "equalizer#2", + "multiband_compressor#0", + "multiband_compressor#1", + "compressor#0", + "reverb#0", + "stereo_tools#0", + "autogain#0", + "limiter#0" + ], + "reverb#0": { + "amount": -6.0, + "bass-cut": 196.0, + "bypass": true, + "decay-time": 0.4, + "diffusion": 0.0, + "dry": 0.0, + "hf-damp": 12543.0, + "input-gain": 0.0, + "output-gain": 0.0, + "predelay": 20.0, + "room-size": "Large/smooth", + "treble-cut": 12543.0 + }, + "stereo_tools#0": { + "balance-in": 0.0, + "balance-out": 0.0, + "bypass": false, + "delay": 20.0, + "input-gain": 0.0, + "middle-level": 0.0, + "middle-panorama": 0.0, + "mode": "LR > LR (Stereo Default)", + "mutel": false, + "muter": false, + "output-gain": 0.0, + "phasel": false, + "phaser": true, + "sc-level": 1.0, + "side-balance": 0.0, + "side-level": 0.0, + "softclip": false, + "stereo-base": 0.0, + "stereo-phase": 0.0 + } + } +} diff --git a/home-mods/audio/default.nix b/home-mods/audio/default.nix new file mode 100644 index 0000000..8710cc2 --- /dev/null +++ b/home-mods/audio/default.nix @@ -0,0 +1,18 @@ +{ config +, pkgs +, inputs +, ... +}: { + # xdg.configFile."easyeffects/output/default.json".source = ./default.json; + services.easyeffects = { + enable = true; + # preset = "default"; + package = pkgs.easyeffects; + }; + + home.packages = with pkgs; [ + my.spotube + spotify + ncspot + ]; +} diff --git a/home-mods/common/default.nix b/home-mods/common/default.nix new file mode 100644 index 0000000..9f9f67d --- /dev/null +++ b/home-mods/common/default.nix @@ -0,0 +1,31 @@ +{ config +, lib +, pkgs +, ... +}: { + xdg.enable = true; + + # TODO + # remove once stuff is fixed ??? + # gets rid of annoying warning that shouldn't apply to my setup + # ref: https://github.com/danth/stylix/issues/865 + nixpkgs.overlays = lib.mkForce null; + + stylix = { + overlays.enable = false; # Should be set by the nixosConfiguration and causes useGlobalPkgs error + targets = { + alacritty.enable = true; + bat.enable = true; + btop.enable = true; + firefox.enable = true; + firefox.profileNames = [ "default" ]; + fish.enable = true; + fzf.enable = true; + gtk.enable = true; + kde.enable = true; # ?? + ncspot.enable = true; + neovim.enable = true; + zellij.enable = true; + }; + }; +} diff --git a/home-mods/desktop/default.nix b/home-mods/desktop/default.nix new file mode 100644 index 0000000..53c4bd2 --- /dev/null +++ b/home-mods/desktop/default.nix @@ -0,0 +1,141 @@ +{ config +, pkgs +, inputs +, lib +, ... +}: { + programs.mangohud = { + enable = true; + settings = { + # need to override the stylix font size here + font_size = lib.mkForce 32; + font_size_text = lib.mkForce 32; + font_scale = lib.mkForce 1; + + position = "bottom-left"; + horizontal_stretch = 0; + hud_no_margin = 1; + hud_compact = 1; + horizontal = 1; + cpu_mhz = 1; + gpu_core_clock = 1; + ram = 1; + swap = 1; + frametime = 0; + frame_timing = 0; + }; + }; + + programs.mpv = { + enable = true; + package = pkgs.mpv; + }; + programs.thunderbird = { + enable = true; + package = pkgs.thunderbird-128; + profiles."main" = { + isDefault = true; + }; + }; + programs.nheko = { + # enable = true; # insecure due to downstream olm + }; + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + obs-vaapi + obs-gstreamer + ]; + }; + + xdg.desktopEntries = { + steam-15 = { + name = "Steam (1.5 Scaling)"; + type = "Application"; + icon = "steam"; + comment = "steam with forced 2x scaling for highdpi displays"; + exec = "steam -forcedesktopscaling 1.5"; + terminal = false; + prefersNonDefaultGPU = true; + categories = [ "Network" "FileTransfer" "Game" ]; + }; + + steam-2 = { + name = "Steam (2.0 Scaling)"; + type = "Application"; + icon = "steam"; + comment = "steam with forced 2x scaling for highdpi displays"; + exec = "steam -forcedesktopscaling 2"; + terminal = false; + prefersNonDefaultGPU = true; + categories = [ "Network" "FileTransfer" "Game" ]; + }; + }; + + services.syncthing.enable = true; + # services.syncthing.tray.enable = true; + home = { + file."Pictures/default_background.png".source = config.stylix.image; + + packages = with pkgs; [ + # Steam##### + # steam-tui + # steamcmd + ############ + bitwarden + # airshipper + # ardour + brave + # cavalier + ffmpeg + freetube + filelight + # element-desktop + inkscape + jellyfin-mpv-shim # broken ? + jellyfin-media-player + warp-terminal + libsForQt5.kasts + krita + kdePackages.kate + kdePackages.kdenlive + kdePackages.kleopatra + kdePackages.plasma-vault + kdePackages.plasma-browser-integration + kdePackages.kio-admin + nextcloud-client + onlyoffice-bin + protonup-qt + signal-desktop + # webcord-vencord # broken atm + # tome4 + # shattered-pixel-dungeon + gst_all_1.gst-vaapi + waypipe + veracrypt + lutris + heroic + # kdePackages.konversation + unar + fuse + qbittorrent + # pcsx2 + xdelta + winetricks + my.zen-browser + # my.dbeaver + # feather + # freecad-wayland + # dbeaver-bin + # blender + # miraclecast + # rustdesk + # deadbeef-with-plugins + # flightgear + # orbiter + ]; + }; +} diff --git a/home-mods/firefox/default.nix b/home-mods/firefox/default.nix new file mode 100644 index 0000000..cc316e3 --- /dev/null +++ b/home-mods/firefox/default.nix @@ -0,0 +1,407 @@ +{ config +, lib +, pkgs +, ... +}: { + programs.firefox = { + enable = true; + package = pkgs.firefox; + + profiles = { + default = { + isDefault = true; + + # userChrome = '' + # @-moz-document url(chrome://browser/content/browser.xhtml) { + # /* tabs on bottom of window */ + # /* requires that you set + # * toolkit.legacyUserProfileCustomizations.stylesheets = true + # * in about:config + # */ + # #main-window body { flex-direction: column-reverse !important; } + # #navigator-toolbox { flex-direction: column-reverse !important; } + # #urlbar { + # top: unset !important; + # bottom: calc(var(--urlbar-margin-inline)) !important; + # box-shadow: none !important; + # display: flex !important; + # flex-direction: column !important; + # } + # #urlbar > * { + # flex: none; + # } + # #urlbar-input-container { + # order: 2; + # } + # #urlbar > .urlbarView { + # order: 1; + # border-bottom: 1px solid #666; + # } + # #urlbar-results { + # display: flex; + # flex-direction: column-reverse; + # } + # .search-one-offs { display: none !important; } + # .tab-background { border-top: none !important; } + # #navigator-toolbox::after { border: none; } + # #TabsToolbar .tabbrowser-arrowscrollbox, + # #tabbrowser-tabs, .tab-stack { min-height: 28px !important; } + # .tabbrowser-tab { font-size: 80%; } + # .tab-content { padding: 0 5px; } + # .tab-close-button .toolbarbutton-icon { width: 12px !important; height: 12px !important; } + # toolbox[inFullscreen=true] { display: none; } + # /* + # * the following makes it so that the on-click panels in the nav-bar + # * extend upwards, not downwards. some of them are in the #mainPopupSet + # * (hamburger + unified extensions), and the rest are in + # * #navigator-toolbox. They all end up with an incorrectly-measured + # * max-height (based on the distance to the _bottom_ of the screen), so + # * we correct that. The ones in #navigator-toolbox then adjust their + # * positioning automatically, so we can just set max-height. The ones + # * in #mainPopupSet do _not_, and so we need to give them a + # * negative margin-top to offset them *and* a fixed height so their + # * bottoms align with the nav-bar. We also calc to ensure they don't + # * end up overlapping with the nav-bar itself. The last bit around + # * cui-widget-panelview is needed because "new"-style panels (those + # * using "unified" panels) don't get flex by default, which results in + # * them being the wrong height. + # * + # * Oh, yeah, and the popup-notification-panel (like biometrics prompts) + # * of course follows different rules again, and needs its own special + # * rule. + # */ + # #mainPopupSet panel.panel-no-padding { margin-top: calc(-50vh + 40px) !important; } + # #mainPopupSet .panel-viewstack, #mainPopupSet popupnotification { max-height: 50vh !important; height: 50vh; } + # #mainPopupSet panel.panel-no-padding.popup-notification-panel { margin-top: calc(-50vh - 35px) !important; } + # #navigator-toolbox .panel-viewstack { max-height: 75vh !important; } + # panelview.cui-widget-panelview { flex: 1; } + # panelview.cui-widget-panelview > vbox { flex: 1; min-height: 50vh; } + # } + # ''; + settings = { + # Disable internal passwod manager + "signon.rememberSignons" = false; + # Extensions are managed with Nix, so don't update. + "extensions.update.autoUpdateDefault" = false; + "extensions.update.enabled" = false; + + # Default to dark theme in DevTools panel + "devtools.theme" = "dark"; + + # Reduce search engine noise in the urlbar's completion window. The + # shortcuts and suggestions will still work, but Firefox won't clutter + # its UI with reminders that they exist. + "browser.urlbar.suggest.searches" = true; # Let's hope duckduckgo doesn't sell it all :) + "browser.urlbar.shortcuts.bookmarks" = false; + "browser.urlbar.shortcuts.history" = false; + "browser.urlbar.shortcuts.tabs" = false; + "browser.urlbar.showSearchSuggestionsFirst" = false; + "browser.urlbar.speculativeConnect.enabled" = false; + "browser.urlbar.suggest.quicksuggest.nonsponsored" = false; + "browser.urlbar.suggest.quicksuggest.sponsored" = false; + + # Disable some not so useful functionality. + "browser.disableResetPrompt" = true; # "Looks like you haven't started Firefox in a while." + "browser.onboarding.enabled" = false; # "New to Firefox? Let's get started!" tour + "browser.aboutConfig.showWarning" = false; # Warning when opening about:config + "extensions.pocket.enabled" = false; + "extensions.shield-recipe-client.enabled" = false; + + # Sync + # "services.sync.username" = config.etu.user.email; + + "services.sync.engine.addons" = false; # Do not sync extensions. + + "general.autoScroll" = true; # Middle click to scroll + + "browser.startup.page" = 3; # Restore previous windows and tabs. + + # Security-oriented defaults + "security.family_safety.mode" = 0; + # https://blog.mozilla.org/security/2016/10/18/phasing-out-sha-1-on-the-public-web/ + "security.pki.sha1_enforcement_level" = 1; + # https://github.com/tlswg/tls13-spec/issues/1001 + "security.tls.enable_0rtt_data" = false; + # Use Mozilla geolocation service instead of Google if given permission + "geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"; + "geo.provider.use_gpsd" = false; + # https://support.mozilla.org/en-US/kb/extension-recommendations + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; + "extensions.htmlaboutaddons.discover.enabled" = false; + "extensions.htmlaboutaddons.inline-options.enabled" = false; + "extensions.getAddons.showPane" = false; # uses Google Analytics + "browser.discovery.enabled" = false; + + # Privacy enhancements + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "browser.newtabpage.activity-stream.feeds.snippets" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.feeds.discoverystreamfeed" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + + # Improve performance + "gfx.webrender.all" = true; + + # Enable ETP for decent security (makes firefox containers and many + # common security/privacy add-ons redundant). + "browser.contentblocking.category" = "strict"; + "privacy.purge_trackers.enabled" = true; + # Do Not Track header + "privacy.donottrackheader.enabled" = true; + "privacy.donottrackheader.value" = 1; + # Disable Private Attribution Tracking Foo + "dom.private-attribution.submission.enabled" = false; + # Your customized toolbar settings are stored in + # 'browser.uiCustomization.state'. This tells firefox to sync it between + # machines. WARNING: This may not work across OSes. Since I use NixOS on + # all the machines I use Firefox on, this is no concern to me. + "services.sync.prefs.sync.browser.uiCustomization.state" = true; + + # Enable userChrome customisations + "toolkit.legacyUserProfileCustomizations.stylesheets" = false; # TODO Reenable with fixed tabs on bottom css + + # Reduce File IO / SSD abuse + # Otherwise, Firefox bombards the HD with writes. Not so nice for SSDs. + # This forces it to write every 15 minutes, rather than 15 seconds. + "browser.sessionstore.interval" = "900000"; + # Disable battery API + "dom.battery.enabled" = false; + # Disable "beacon" asynchronous HTTP transfers (used for analytics) + "beacon.enabled" = false; + # Disable pinging URIs specified in HTML ping= attributes + "browser.send_pings" = false; + # Disable gamepad API to prevent USB device enumeration + "dom.gamepad.enabled" = false; + # Don't try to guess domain names when entering an invalid domain name in URL bar + "browser.fixup.alternate.enabled" = false; + + # Disable telemetry + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.server" = "data:,"; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.coverage.opt-out" = true; + "toolkit.coverage.opt-out" = true; + "toolkit.coverage.endpoint.base" = ""; + "experiments.supported" = false; + "experiments.enabled" = false; + "experiments.manifest.uri" = ""; + "browser.ping-centre.telemetry" = false; + # https://mozilla.github.io/normandy/ + "app.normandy.enabled" = false; + "app.normandy.api_url" = ""; + "app.shield.optoutstudies.enabled" = false; + # Disable health reports (basically more telemetry) + # https://support.mozilla.org/en-US/kb/firefox-health-report-understand-your-browser-perf + # https://gecko.readthedocs.org/en/latest/toolkit/components/telemetry/telemetry/preferences.html + "datareporting.healthreport.uploadEnabled" = false; + "datareporting.healthreport.service.enabled" = false; + "datareporting.policy.dataSubmissionEnabled" = false; + + # Disable crash reports + "breakpad.reportURL" = ""; + "browser.tabs.crashReporting.sendReport" = false; + "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; # don't submit backlogged reports + + # Disable Form autofill + # https://wiki.mozilla.org/Firefox/Features/Form_Autofill + "browser.formfill.enable" = false; + "extensions.formautofill.addresses.enabled" = false; + "extensions.formautofill.available" = "off"; + "extensions.formautofill.creditCards.available" = false; + "extensions.formautofill.creditCards.enabled" = false; + "extensions.formautofill.heuristics.enabled" = false; + + # VAAPI ffmpeg foo + "media.ffmpeg.vaapi.enabled" = true; + }; + + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + # clearurls + consent-o-matic + darkreader + dearrow + deutsch-de-language-pack + dictionary-german + df-youtube + flagfox + ipvfoo + leechblock-ng + localcdn + plasma-integration + privacy-badger + rust-search-extension + sidebery + skip-redirect + sponsorblock + tab-stash + ublock-origin + unpaywall + ]; + + search = { + force = true; + default = "DuckDuckGo"; + order = [ "DuckDuckGo" "Nix Packages" "Nix Options" "NixOS Wiki" ]; + + engines = { + "DuckDuckGo".metaData = { + alias = "@ddg"; + }; + "Nix Packages" = { + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + + icon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + + definedAliases = [ "@np" ]; + }; + "Nix Options" = { + urls = [ + { + template = "https://search.nixos.org/options"; + params = [ + { + name = "type"; + value = "options"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + + icon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + + definedAliases = [ "@no" ]; + }; + "Home-Manager Options" = { + urls = [ + { + template = "https://mipmip.github.io/home-manager-option-search"; + params = [ + { + name = "query"; + value = "{searchTerms}"; + } + { + name = "release"; + value = "master"; + } + ]; + } + ]; + + icon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + + definedAliases = [ "@ho" ]; + }; + + "NixOS Wiki" = { + urls = [ + { + template = "https://nixos.wiki/index.php?search={searchTerms}"; + } + ]; + iconUpdateURL = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; + definedAliases = [ "@nw" ]; + }; + + "Bing".metaData.hidden = true; + "Amazon.de".metaData.hidden = true; + "Google".metaData = { + alias = "@g"; + hidden = true; + }; + }; + }; + + bookmarks = [ + { + toolbar = true; + bookmarks = [ + { + name = "Home Manager"; + url = "https://nixos.wiki/wiki/Home_Manager"; + } + { + name = "Nix PR Channel Tracker"; + url = "https://nixpk.gs/pr-tracker.html"; + } + { + name = "Chaotic Nix"; + url = "https://www.nyx.chaotic.cx/"; + } + ]; + } + { + name = "wikipedia"; + tags = [ "wiki" ]; + keyword = "wiki"; + url = "https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go"; + } + { + name = "kernel.org"; + url = "https://www.kernel.org"; + } + { + name = "Nix sites"; + bookmarks = [ + { + name = "homepage"; + url = "https://nixos.org/"; + } + { + name = "wiki"; + tags = [ "wiki" "nix" ]; + url = "https://nixos.wiki/"; + } + { + name = "Nix sites"; + bookmarks = [ + { + name = "homepage"; + url = "https://nixos.org/"; + } + { + name = "wiki"; + url = "https://nixos.wiki/"; + } + ]; + } + ]; + } + ]; + }; + }; + }; + + home.sessionVariables = { + BROWSER = "firefox"; + MOZ_USE_XINPUT2 = "1"; + MOZ_ENABLE_WAYLAND = "1"; + }; +} diff --git a/home-mods/plasma/default.nix b/home-mods/plasma/default.nix new file mode 100644 index 0000000..e6e90f0 --- /dev/null +++ b/home-mods/plasma/default.nix @@ -0,0 +1,444 @@ +{ config +, lib +, ... +}: { + programs.plasma = { + enable = true; + overrideConfig = true; # needed for stylix compat sadly + workspace = { + theme = "breeze-dark"; + lookAndFeel = "org.kde.breezedark.desktop"; + wallpaper = config.stylix.image; + # wallpaper = "${config.home.homeDirectory}/Pictures/default_background.png"; set by stylix + }; + panels = [ + # Windows-like panel at the bottom + { + location = "bottom"; + screen = "all"; + height = 42; + widgets = [ + { + name = "org.kde.plasma.kicker"; + config = { + General = { + icon = "nix-snowflake"; + alphaSort = true; + showIconsRootLevel = true; + }; + }; + } + { + name = "org.kde.plasma.pager"; + config = { + General = { + displayedText = "None"; + showWindowIcons = true; + showOnlyCurrentScreen = true; + wrapPage = true; + currentDesktopSelected = "ShowDesktop"; + }; + }; + } + { + name = "org.kde.plasma.taskmanager"; + config = { + General = { + launchers = [ + "applications:systemsettings.desktop" + "preferred://filemanager" + "preferred://browser" + "applications:Alacritty.desktop" + "applications:emacsclient.desktop" + ]; + }; + }; + } + "org.kde.plasma.marginsseparator" + { + systemTray.items = { + shown = [ + "org.kde.plasma.bluetooth" + "org.kde.plasma.volume" + "org.kde.plasma.networkmanagement" + "org.kde.plasma.battery" + ]; + hidden = [ ]; + }; + } + { + digitalClock = { + calendar.firstDayOfWeek = "monday"; + time.format = "24h"; + }; + } + ]; + hiding = "none"; + } + # Application name, Global menu and Song information and playback controls at the top + { + location = "top"; + screen = "all"; + height = 26; + widgets = [ + { + applicationTitleBar = { + behavior = { + activeTaskSource = "activeTask"; + }; + layout = { + elements = [ "windowTitle" ]; + horizontalAlignment = "left"; + showDisabledElements = "deactivated"; + verticalAlignment = "center"; + }; + overrideForMaximized.enable = false; + titleReplacements = [ + { + type = "regexp"; + originalTitle = "^Brave Web Browser$"; + newTitle = "Brave"; + } + { + type = "regexp"; + originalTitle = ''\\bDolphin\\b''; + newTitle = "File manager"; + } + ]; + windowTitle = { + font = { + bold = false; + fit = "fixedSize"; + size = 13; + }; + hideEmptyTitle = true; + undefinedWindowTitle = ""; + margins = { + bottom = 0; + left = 10; + right = 5; + top = 0; + }; + source = "appName"; + }; + }; + } + "org.kde.plasma.appmenu" + "org.kde.plasma.panelspacer" + { + plasmusicToolbar = { + panelIcon = { + albumCover = { + useAsIcon = true; + radius = 0; + }; + # icon = "view-media-track"; + }; + playbackSource = "spotify"; + musicControls.showPlaybackControls = true; + songText = { + displayInSeparateLines = false; + maximumWidth = 640; + scrolling = { + behavior = "alwaysScroll"; + speed = 3; + }; + }; + }; + } + ]; + } + ]; + shortcuts = { + "KDE Keyboard Layout Switcher"."Switch to Next Keyboard Layout" = "Meta+Alt+K"; + "kaccess"."Toggle Screen Reader On and Off" = "Meta+Alt+S"; + "kcm_touchpad"."Disable Touchpad" = "Touchpad Off"; + "kcm_touchpad"."Enable Touchpad" = "Touchpad On"; + "kcm_touchpad"."Toggle Touchpad" = [ "Touchpad Toggle" "Meta+Ctrl+Zenkaku Hankaku" ]; + "kded5"."Show System Activity" = "Ctrl+Esc"; + "kded5"."display" = [ "Display" "Meta+P" ]; + "kmix"."decrease_microphone_volume" = "Microphone Volume Down"; + "kmix"."decrease_volume" = "Volume Down"; + "kmix"."decrease_volume_small" = "Shift+Volume Down"; + "kmix"."increase_microphone_volume" = "Microphone Volume Up"; + "kmix"."increase_volume" = "Volume Up"; + "kmix"."increase_volume_small" = "Shift+Volume Up"; + "kmix"."mic_mute" = [ "Microphone Mute" "Meta+Volume Mute" ]; + "kmix"."mute" = "Volume Mute"; + "ksmserver"."Lock Session" = [ "Meta+L" "Screensaver" ]; + "ksmserver"."Log Out" = "Ctrl+Alt+Del"; + "kwin"."Activate Window Demanding Attention" = "Meta+Ctrl+A"; + "kwin"."ClearLastMouseMark" = "Meta+Shift+F12"; + "kwin"."ClearMouseMarks" = "Meta+Shift+F11"; + "kwin"."Cube" = [ "Meta+C" "Meta+Space" ]; + "kwin"."Edit Tiles" = "Meta+T"; + "kwin"."Expose" = "Ctrl+F9"; + "kwin"."ExposeAll" = [ "Ctrl+F10" "Launch (C)" ]; + "kwin"."ExposeClass" = "Ctrl+F7"; + "kwin"."Grid View" = "Meta+G"; + "kwin"."Invert" = "Meta+Ctrl+I"; + "kwin"."InvertWindow" = "Meta+Ctrl+U"; + "kwin"."Kill Window" = "Meta+Ctrl+Esc"; + "kwin"."MoveMouseToCenter" = "Meta+F6"; + "kwin"."MoveMouseToFocus" = "Meta+F5"; + "kwin"."Overview" = "Meta+W"; + "kwin"."Show Desktop" = "Meta+D"; + "kwin"."ShowDesktopGrid" = "Meta+F8"; + "kwin"."Suspend Compositing" = "Alt+Shift+F12"; + "kwin"."Switch Window Down" = "Meta+Alt+Down"; + "kwin"."Switch Window Left" = "Meta+Alt+Left"; + "kwin"."Switch Window Right" = "Meta+Alt+Right"; + "kwin"."Switch Window Up" = "Meta+Alt+Up"; + "kwin"."Switch One Desktop Down" = "Meta+Ctrl+Down"; + "kwin"."Switch One Desktop Up" = "Meta+Ctrl+Up"; + "kwin"."Switch One Desktop to the Left" = "Meta+Ctrl+Left"; + "kwin"."Switch One Desktop to the Right" = "Meta+Ctrl+Right"; + "kwin"."Switch to Desktop 1" = "Ctrl+F1"; + "kwin"."Switch to Desktop 2" = "Ctrl+F2"; + "kwin"."Switch to Desktop 3" = "Ctrl+F3"; + "kwin"."Switch to Desktop 4" = "Ctrl+F4"; + "kwin"."ToggleCurrentThumbnail" = "Meta+Ctrl+T"; + "kwin"."ToggleMouseClick" = "Meta+*"; + "kwin"."Walk Through Windows" = "Alt+Tab"; + "kwin"."Walk Through Windows (Reverse)" = "Alt+Shift+Backtab"; + "kwin"."Walk Through Windows of Current Application" = "Alt+`"; + "kwin"."Walk Through Windows of Current Application (Reverse)" = "Alt+~"; + "kwin"."Window Close" = "Alt+F4"; + "kwin"."Window Maximize" = "Meta+PgUp"; + "kwin"."Window Minimize" = "Meta+PgDown"; + "kwin"."Window One Desktop Down" = "Meta+Ctrl+Shift+Down"; + "kwin"."Window One Desktop Up" = "Meta+Ctrl+Shift+Up"; + "kwin"."Window One Desktop to the Left" = "Meta+Ctrl+Shift+Left"; + "kwin"."Window One Desktop to the Right" = "Meta+Ctrl+Shift+Right"; + "kwin"."Window Operations Menu" = "Alt+F3"; + "kwin"."Window Quick Tile Bottom" = "Meta+Down"; + "kwin"."Window Quick Tile Left" = "Meta+Left"; + "kwin"."Window Quick Tile Right" = "Meta+Right"; + "kwin"."Window Quick Tile Top" = "Meta+Up"; + "kwin"."Window to Next Screen" = "Meta+Shift+Right"; + "kwin"."Window to Previous Screen" = "Meta+Shift+Left"; + "kwin"."view_actual_size" = "Meta+0"; + "kwin"."view_zoom_in" = [ "Meta++" "Meta+=" ]; + "kwin"."view_zoom_out" = "Meta+-"; + "mediacontrol"."nextmedia" = "Media Next"; + "mediacontrol"."pausemedia" = "Media Pause"; + "mediacontrol"."playpausemedia" = "Media Play"; + "mediacontrol"."previousmedia" = "Media Previous"; + "mediacontrol"."stopmedia" = "Media Stop"; + "org.kde.dolphin.desktop"."_launch" = "Meta+E"; + "org.kde.konsole.desktop"."_launch" = "Ctrl+Alt+T"; + "org.kde.krunner.desktop"."RunClipboard" = "Alt+Shift+F2"; + "org.kde.krunner.desktop"."_launch" = [ "Alt+Space" "Alt+F2" "Search" ]; + "org.kde.plasma.emojier.desktop"."_launch" = [ "Meta+." "Meta+Ctrl+Alt+Shift+Space" ]; + "org.kde.spectacle.desktop"."ActiveWindowScreenShot" = "Meta+Print"; + "org.kde.spectacle.desktop"."FullScreenScreenShot" = "Shift+Print"; + "org.kde.spectacle.desktop"."RectangularRegionScreenShot" = "Meta+Shift+Print"; + "org.kde.spectacle.desktop"."WindowUnderCursorScreenShot" = "Meta+Ctrl+Print"; + "org.kde.spectacle.desktop"."_launch" = "Print"; + "org_kde_powerdevil"."Decrease Keyboard Brightness" = "Keyboard Brightness Down"; + "org_kde_powerdevil"."Decrease Screen Brightness" = "Monitor Brightness Down"; + "org_kde_powerdevil"."Hibernate" = "Hibernate"; + "org_kde_powerdevil"."Increase Keyboard Brightness" = "Keyboard Brightness Up"; + "org_kde_powerdevil"."Increase Screen Brightness" = "Monitor Brightness Up"; + "org_kde_powerdevil"."PowerDown" = "Power Down"; + "org_kde_powerdevil"."PowerOff" = "Power Off"; + "org_kde_powerdevil"."Sleep" = "Sleep"; + "org_kde_powerdevil"."Toggle Keyboard Backlight" = "Keyboard Light On/Off"; + "plasmashell"."activate task manager entry 1" = "Meta+1"; + "plasmashell"."activate task manager entry 2" = "Meta+2"; + "plasmashell"."activate task manager entry 3" = "Meta+3"; + "plasmashell"."activate task manager entry 4" = "Meta+4"; + "plasmashell"."activate task manager entry 5" = "Meta+5"; + "plasmashell"."activate task manager entry 6" = "Meta+6"; + "plasmashell"."activate task manager entry 7" = "Meta+7"; + "plasmashell"."activate task manager entry 8" = "Meta+8"; + "plasmashell"."activate task manager entry 9" = "Meta+9"; + "plasmashell"."clipboard_action" = "Meta+Ctrl+X"; + "plasmashell"."cycle-panels" = "Meta+Alt+P"; + "plasmashell"."manage activities" = "Meta+Q"; + "plasmashell"."next activity" = "Meta+Tab"; + "plasmashell"."previous activity" = "Meta+Shift+Tab"; + "plasmashell"."repeat_action" = "Meta+Ctrl+R"; + "plasmashell"."show dashboard" = "Ctrl+F12"; + "plasmashell"."show-on-mouse-pos" = "Meta+V"; + "plasmashell"."stop current activity" = "Meta+S"; + "systemsettings.desktop"."_launch" = "Tools"; + }; + configFile = { + "powerdevilrc" = { + "AC/Display" = { + TurnOffDisplayIdleTimeoutSec = lib.mkForce (-1); + TurnOffDisplayWhenIdle = lib.mkForce false; + }; + + "AC/SuspendAndShutdown" = { + AutoSuspendAction = lib.mkForce 0; + AutoSuspendIdleTimeoutSec = lib.mkForce 7200; + LidAction = lib.mkForce 0; + }; + "Battery/SuspendAndShutdown".SleepMode = lib.mkForce 2; + "LowBattery/SuspendAndShutdown".SleepMode = lib.mkForce 3; + + "AC/Performance".PowerProfile = lib.mkForce "performance"; + "Battery/Performance".PowerProfile = lib.mkForce "power-saver"; + "LowBattery/Performance".PowerProfile = lib.mkForce "power-saver"; + }; + "baloofilerc"."Basic Settings"."Indexing-Enabled" = false; + "baloofilerc"."General"."dbVersion".value = 2; + "baloofilerc"."General"."exclude filters".value = "*~,*.part,*.o,*.la,*.lo,*.loT,*.moc,moc_*.cpp,qrc_*.cpp,ui_*.h,cmake_install.cmake,CMakeCache.txt,CTestTestfile.cmake,libtool,config.status,confdefs.h,autom4te,conftest,confstat,Makefile.am,*.gcode,.ninja_deps,.ninja_log,build.ninja,*.csproj,*.m4,*.rej,*.gmo,*.pc,*.omf,*.aux,*.tmp,*.po,*.vm*,*.nvram,*.rcore,*.swp,*.swap,lzo,litmain.sh,*.orig,.histfile.*,.xsession-errors*,*.map,*.so,*.a,*.db,*.qrc,*.ini,*.init,*.img,*.vdi,*.vbox*,vbox.log,*.qcow2,*.vmdk,*.vhd,*.vhdx,*.sql,*.sql.gz,*.ytdl,*.class,*.pyc,*.pyo,*.elc,*.qmlc,*.jsc,*.fastq,*.fq,*.gb,*.fasta,*.fna,*.gbff,*.faa,po,CVS,.svn,.git,_darcs,.bzr,.hg,CMakeFiles,CMakeTmp,CMakeTmpQmake,.moc,.obj,.pch,.uic,.npm,.yarn,.yarn-cache,__pycache__,node_modules,node_packages,nbproject,.venv,venv,core-dumps,lost+found"; + "baloofilerc"."General"."exclude filters version".value = 8; + "dolphinrc"."KFileDialog Settings"."Places Icons Auto-resize".value = false; + "dolphinrc"."KFileDialog Settings"."Places Icons Static Size".value = 22; + "kactivitymanagerdrc"."activities"."03741afe-0c0e-413a-9f8a-09600a7684e2".value = "Default"; + "kactivitymanagerdrc"."main"."currentActivity".value = "03741afe-0c0e-413a-9f8a-09600a7684e2"; + + # Disable broken mousewheel + + "kcminputrc"."Libinput/1130/49431/Cherry GmbH CHERRY Wireless Device Consumer Control"."ScrollFactor" = 0.0; + "kcminputrc"."Libinput/1130/49431/Cherry GmbH CHERRY Wireless Device Mouse"."ScrollFactor" = 0.0; + "kcminputrc"."Libinput/1671/49433/CHERRY MW 8C ADVANCED"."ScrollFactor" = 0.0; + "kcminputrc"."Libinput/1130/49431/input-remapper Cherry GmbH CHERRY Wireless Device Mouse forwarded"."ScrollFactor" = 0.0; + + "kcminputrc"."Libinput.2362.597.UNIW0001:00 093A:0255 Touchpad"."ClickMethod".value = 2; + "kcminputrc"."Libinput.2362.597.UNIW0001:00 093A:0255 Touchpad"."Enabled".value = true; + "kcminputrc"."Libinput.2362.597.UNIW0001:00 093A:0255 Touchpad"."TapToClick".value = true; + "kcminputrc"."Mouse"."X11LibInputXAccelProfileFlat".value = false; + "kcminputrc"."Tmp"."update_info".value = "delete_cursor_old_default_size.upd:DeleteCursorOldDefaultSize"; + "kded5rc"."Module-appmenu"."autoload".value = true; + "kded5rc"."Module-baloosearchmodule"."autoload".value = true; + "kded5rc"."Module-bluedevil"."autoload".value = true; + "kded5rc"."Module-browserintegrationreminder"."autoload".value = false; + "kded5rc"."Module-colorcorrectlocationupdater"."autoload".value = true; + "kded5rc"."Module-device_automounter"."autoload".value = false; + "kded5rc"."Module-freespacenotifier"."autoload".value = true; + "kded5rc"."Module-gtkconfig"."autoload".value = true; + "kded5rc"."Module-inotify"."autoload".value = true; + "kded5rc"."Module-kded_touchpad"."autoload".value = true; + "kded5rc"."Module-keyboard"."autoload".value = true; + "kded5rc"."Module-khotkeys"."autoload".value = true; + "kded5rc"."Module-kscreen"."autoload".value = true; + "kded5rc"."Module-ksysguard"."autoload".value = true; + "kded5rc"."Module-ktimezoned"."autoload".value = true; + "kded5rc"."Module-networkmanagement"."autoload".value = true; + "kded5rc"."Module-networkstatus"."autoload".value = true; + "kded5rc"."Module-plasma_accentcolor_service"."autoload".value = true; + "kded5rc"."Module-printmanager"."autoload".value = true; + "kded5rc"."Module-proxyscout"."autoload".value = true; + "kded5rc"."Module-remotenotifier"."autoload".value = true; + "kded5rc"."Module-smbwatcher"."autoload".value = true; + "kded5rc"."Module-statusnotifierwatcher"."autoload".value = true; + "kded5rc"."PlasmaBrowserIntegration"."shownCount".value = 4; + "kdeglobals"."General"."TerminalApplication".value = "alacritty"; + "kdeglobals"."General"."TerminalService".value = "Alacritty.desktop"; + "kdeglobals"."General"."AccentColor".value = "233,100,58"; + "kdeglobals"."General"."BrowserApplication".value = "firefox.desktop"; + "kdeglobals"."General"."LastUsedCustomAccentColor".value = "233,100,58"; + "kdeglobals"."General"."XftHintStyle".value = "hintmedium"; + "kdeglobals"."General"."XftSubPixel".value = "rgb"; + "kdeglobals"."General"."font".value = "Iosevka Nerd Font Propo,11,-1,5,63,0,0,0,0,0,SemiBold"; + "kdeglobals"."General"."fixed".value = "Iosevka Nerd Font Mono,10,-1,5,50,0,0,0,0,0"; + "kdeglobals"."General"."menuFont".value = "Iosevka Nerd Font Propo,11,-1,5,63,0,0,0,0,0,SemiBold"; + "kdeglobals"."General"."smallestReadableFont".value = "Iosevka Nerd Font Propo,8,-1,5,63,0,0,0,0,0,SemiBold"; + "kdeglobals"."General"."toolBarFont".value = "Iosevka Nerd Font Propo,11,-1,5,63,0,0,0,0,0,SemiBold"; + "kdeglobals"."KDE"."AnimationDurationFactor".value = 0.35; + "kdeglobals"."KDE"."SingleClick".value = true; + "kdeglobals"."KDE"."widgetStyle".value = "Breeze"; + "kdeglobals"."KFileDialog Settings"."Allow Expansion".value = false; + "kdeglobals"."KFileDialog Settings"."Automatically select filename extension".value = true; + "kdeglobals"."KFileDialog Settings"."Breadcrumb Navigation".value = false; + "kdeglobals"."KFileDialog Settings"."Decoration position".value = 2; + "kdeglobals"."KFileDialog Settings"."LocationCombo Completionmode".value = 5; + "kdeglobals"."KFileDialog Settings"."PathCombo Completionmode".value = 5; + "kdeglobals"."KFileDialog Settings"."Show Bookmarks".value = false; + "kdeglobals"."KFileDialog Settings"."Show Full Path".value = false; + "kdeglobals"."KFileDialog Settings"."Show Inline Previews".value = true; + "kdeglobals"."KFileDialog Settings"."Show Preview".value = false; + "kdeglobals"."KFileDialog Settings"."Show Speedbar".value = true; + "kdeglobals"."KFileDialog Settings"."Show hidden files".value = true; + "kdeglobals"."KFileDialog Settings"."Sort by".value = "Name"; + "kdeglobals"."KFileDialog Settings"."Sort directories first".value = true; + "kdeglobals"."KFileDialog Settings"."Sort hidden files last".value = false; + "kdeglobals"."KFileDialog Settings"."Sort reversed".value = false; + "kdeglobals"."KFileDialog Settings"."Speedbar Width".value = 138; + "kdeglobals"."KFileDialog Settings"."View Style".value = "DetailTree"; + "kdeglobals"."KShortcutsDialog Settings"."Dialog Size".value = "600,480"; + "kdeglobals"."WM"."activeBackground".value = "39,39,39"; + "kdeglobals"."WM"."activeBlend".value = "235,219,178"; + "kdeglobals"."WM"."activeForeground".value = "235,219,178"; + "kdeglobals"."WM"."inactiveBackground".value = "40,40,40"; + "kdeglobals"."WM"."inactiveBlend".value = "60,56,54"; + "kdeglobals"."WM"."inactiveForeground".value = "204,190,155"; + "kglobalshortcutsrc"."ActivityManager"."_k_friendly_name".value = "Activity Manager"; + "kglobalshortcutsrc"."KDE Keyboard Layout Switcher"."_k_friendly_name".value = "Keyboard Layout Switcher"; + "kglobalshortcutsrc"."kaccess"."_k_friendly_name".value = "Accessibility"; + "kglobalshortcutsrc"."kcm_touchpad"."_k_friendly_name".value = "Touchpad"; + "kglobalshortcutsrc"."kded5"."_k_friendly_name".value = "KDE Daemon"; + "kglobalshortcutsrc"."khotkeys"."_k_friendly_name".value = "Custom Shortcuts Service"; + "kglobalshortcutsrc"."kmix"."_k_friendly_name".value = "Audio Volume"; + "kglobalshortcutsrc"."ksmserver"."_k_friendly_name".value = "Session Management"; + "kglobalshortcutsrc"."kwin"."_k_friendly_name".value = "KWin"; + "kglobalshortcutsrc"."mediacontrol"."_k_friendly_name".value = "Media Controller"; + "kglobalshortcutsrc"."org.kde.dolphin.desktop"."_k_friendly_name".value = "Dolphin"; + "kglobalshortcutsrc"."org.kde.konsole.desktop"."_k_friendly_name".value = "Konsole"; + "kglobalshortcutsrc"."org.kde.krunner.desktop"."_k_friendly_name".value = "KRunner"; + "kglobalshortcutsrc"."org.kde.plasma.emojier.desktop"."_k_friendly_name".value = "Emoji Selector"; + "kglobalshortcutsrc"."org.kde.spectacle.desktop"."_k_friendly_name".value = "Spectacle"; + "kglobalshortcutsrc"."org_kde_powerdevil"."_k_friendly_name".value = "Power Management"; + "kglobalshortcutsrc"."plasmashell"."_k_friendly_name".value = "Plasma"; + "kglobalshortcutsrc"."systemsettings.desktop"."_k_friendly_name".value = "System Settings"; + "kiorc"."Confirmations"."ConfirmDelete".value = false; + "kiorc"."Confirmations"."ConfirmEmptyTrash".value = false; + "ksplashrc"."KSplash"."Engine".value = "none"; + "kwalletrc"."Auto Allow"."kdewallet".value = "kded5,kiod5,kwalletmanager5,Brave,Nextcloud"; + "kwalletrc"."Wallet"."Close When Idle".value = false; + "kwalletrc"."Wallet"."Close on Screensaver".value = false; + "kwalletrc"."Wallet"."Default Wallet".value = "kdewallet"; + "kwalletrc"."Wallet"."Enabled".value = true; + "kwalletrc"."Wallet"."First Use".value = false; + "kwalletrc"."Wallet"."Idle Timeout".value = 10; + "kwalletrc"."Wallet"."Launch Manager".value = true; + "kwalletrc"."Wallet"."Leave Manager Open".value = false; + "kwalletrc"."Wallet"."Leave Open".value = true; + "kwalletrc"."Wallet"."Prompt on Open".value = true; + "kwalletrc"."Wallet"."Use One Wallet".value = true; + "kwalletrc"."org.freedesktop.secrets"."apiEnabled".value = true; + "kwinrc"."Compositing"."LatencyPolicy".value = "Medium"; + "kwinrc"."Desktops"."Id_1".value = "6b86c814-0a63-4a66-83aa-8f923109b8dc"; + "kwinrc"."Desktops"."Id_2".value = "51266a99-9eeb-4a62-a7f1-8b9ddedc5296"; + "kwinrc"."Desktops"."Id_3".value = "7b7d4799-86fe-4b40-8951-1eac646f2707"; + "kwinrc"."Desktops"."Id_4".value = "686aa552-08df-4324-89fd-6f327fc70802"; + "kwinrc"."Desktops"."Id_5".value = "4bed024c-ec67-426b-8155-30ea753b0bda"; + "kwinrc"."Desktops"."Id_6".value = "dd242c1f-ba7d-4660-96ee-2e39899021bb"; + "kwinrc"."Desktops"."Id_7".value = "f9c5fd26-edbc-4d01-9c81-2ea3902c298a"; + "kwinrc"."Desktops"."Id_8".value = "872f161b-e13e-41eb-a46d-41934fe09083"; + "kwinrc"."Desktops"."Id_9".value = "223607a5-d111-4e70-94a7-0f989dfd53d4"; + "kwinrc"."Desktops"."Number".value = 9; + "kwinrc"."Desktops"."Rows".value = 3; + "kwinrc"."Effect-cube"."BorderActivate".value = 5; + "kwinrc"."Effect-cube"."DistanceFactor".value = 1.65; + "kwinrc"."Plugins"."cubeEnabled".value = true; + "kwinrc"."Plugins"."desktopchangeosdEnabled".value = true; + "kwinrc"."Plugins"."glideEnabled".value = true; + "kwinrc"."Plugins"."scaleEnabled".value = false; + "kwinrc"."Plugins"."shakecursorEnabled".value = true; + "kwinrc"."Plugins"."kwin4_effect_fadeEnabled".value = true; + "kwinrc"."Plugins"."kwin4_effect_scaleEnabled".value = false; + "kwinrc"."Plugins"."kwin4_effect_squashEnabled".value = false; + "kwinrc"."Plugins"."magiclampEnabled".value = true; + "kwinrc"."Plugins"."mouseclickEnabled".value = true; + "kwinrc"."Plugins"."sheetEnabled".value = true; + "kwinrc"."Plugins"."wobblywindowsEnabled".value = true; + "kwinrc"."Tiling"."padding".value = 4; + "kwinrc"."Windows"."RollOverDesktops".value = true; + "kwinrc"."Xwayland"."Scale".value = 1.25; + "kxkbrc"."Layout"."Options".value = "caps:ctrl_modifier"; + "kxkbrc"."Layout"."ResetOldOptions".value = true; + "plasma-localerc"."Formats"."LANG".value = "en_US.UTF-8"; + "plasmarc"."Wallpapers"."usersWallpapers".value = ""; + # "plasmarc"."Theme"."name".value = "breeze-dark"; + "krunnerrc"."General"."FreeFloating".value = true; + #"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."Image".value = "/home/tristand/.background"; + #"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."PreviewImage".value = "/home/tristand/.background"; # TODO rework this with static wallpaper + }; + }; +} diff --git a/home-mods/shell/default.nix b/home-mods/shell/default.nix new file mode 100644 index 0000000..220f055 --- /dev/null +++ b/home-mods/shell/default.nix @@ -0,0 +1,400 @@ +{ self +, config +, pkgs +, lib +, inputs +, ... +}: +let + doomemacsSrc = builtins.fetchGit { + url = "https://github.com/doomemacs/doomemacs"; + ref = "master"; + rev = "2bc052425ca45a41532be0648ebd976d1bd2e6c1"; + }; + neofetchThemesSrc = builtins.fetchGit { + url = "https://github.com/Chick2D/neofetch-themes"; + ref = "main"; + rev = "c7392136bed264258c9b8788b14410e1ff06d602"; + }; + myEmacs = (pkgs.emacsPackagesFor pkgs.emacs-unstable-pgtk).emacsWithPackages (epkgs: + with epkgs; [ + vterm + treesit-grammars.with-all-grammars + ]); +in +{ + programs = { + alacritty = { + enable = true; + settings = { + window.dimensions = { + lines = 40; + columns = 150; + }; + }; + }; + bash = { + enable = true; + enableVteIntegration = true; + }; + btop.enable = true; + direnv.enable = true; + + fd.enable = true; + fzf.enable = true; + lsd = { + enable = true; + enableAliases = true; + }; + + fish = { + enable = true; + package = pkgs.fish; + + interactiveShellInit = lib.mkOrder 199 '' + ############################################ + # Adds a seperating arrow inbetween commands + # ~ ls <----------- at 12:12 + # some home folders + # ~ echo 123 <----------- at 12:13 + # 123 + # ~ _ + ############################################ + function starship_transient_rprompt_func + set width "$(calc "($(tput cols)-12)/2")" + echo -n " <" + string repeat -n$width ─ + echo -n " " + starship module time + end + + any-nix-shell fish --info-right | source + if test -z $INSIDE_EMACS && test $TERM != linux ; + eval (${pkgs.zellij}/bin/zellij setup --generate-auto-start fish | string collect) + end + + cat /var/lib/rust-motd/motd + ''; + loginShellInit = '' + ''; + + functions = { + ec = "emacsclient $argv"; + ecc = "emacsclient -c $argv"; + ecr = "emacsclient -r $argv"; + ecrr = "emacsclient -r $argv"; + }; + plugins = [ + { + name = "sponge"; + src = pkgs.fetchFromGitHub { + owner = "meaningful-ooo"; + repo = "sponge"; + rev = "384299545104d5256648cee9d8b117aaa9a6d7be"; + sha256 = "31d71950346d349762ca8da5f68e666bb9c05fce311096c616101584af999b5c"; + }; + } + ]; + }; + + git = { + enable = true; + userName = "Tristan Druyen"; + userEmail = "tristan@vault81.de"; + lfs = { + enable = true; + }; + aliases = { + ci = "commit"; + co = "checkout"; + s = "status"; + }; + extraConfig = { + user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519"; + commit.gpgsign = true; + gpg.format = "ssh"; + }; + package = pkgs.git; + }; + + lazygit.enable = true; + + jujutsu = { + enable = true; + settings = { + user = { + email = "tristan@vault81.de"; + name = "Tristan Druyen"; + }; + }; + }; + + nix-index = { + enable = true; + enableFishIntegration = true; + }; + pandoc.enable = true; + + rbw = { + enable = true; + settings = { + base_url = "https://bw.vlt81.de"; + email = "tristandruyen@vault81.de"; + }; + }; + + starship = { + enable = true; + package = pkgs.starship; + enableTransience = true; + settings = { + format = lib.concatStrings [ + "$username" + "$hostname" + "$localip" + "$directory" + "$vcsh" + "$fossil_branch" + "$fossil_metrics" + "$git_branch" + "$git_commit" + "$git_state" + "$git_metrics" + "$git_status" + "$docker_context" + "$package" + "$c" + "$cmake" + "$cobol" + "$daml" + "$dart" + "$deno" + "$dotnet" + "$elixir" + "$elm" + "$erlang" + "$fennel" + "$gleam" + "$golang" + "$haskell" + "$haxe" + "$helm" + "$java" + "$julia" + "$kotlin" + "$lua" + "$nim" + "$nodejs" + "$ocaml" + "$opa" + "$perl" + "$php" + "$python" + "$rlang" + "$red" + "$ruby" + "$rust" + "$scala" + "$solidity" + "$swift" + "$terraform" + "$typst" + "$vlang" + "$vagrant" + "$zig" + "$buf" + "$nix_shell" + "$conda" + "$spack" + "$memory_usage" + "$aws" + "$gcloud" + "$openstack" + "$azure" + "$nats" + "$direnv" + "$env_var" + "$crystal" + "$custom" + "$sudo" + "$cmd_duration" + "$line_break" + "$jobs" + "$battery" + "$status" + "$os" + "$container" + "$shell" + "$shlvl" + "$character" + ]; + direnv.disabled = false; + memory_usage.disabled = false; + shlvl = { + disabled = false; + format = "[$symbol]($style)"; + repeat = true; + symbol = "❯"; + repeat_offset = 2; + threshold = 0; + }; + time.disabled = false; + }; + }; + + ssh = { + enable = true; + addKeysToAgent = "yes"; + hashKnownHosts = true; + + extraOptionOverrides = { + VerifyHostKeyDNS = "ask"; + }; + package = pkgs.openssh; + + matchBlocks = { + "he4" = { + host = "he4"; + hostname = "he4.vault81.de"; + user = "tristand"; + identityFile = "~/.ssh/id_ed25519"; + }; + "he2" = { + host = "he2"; + hostname = "he2.vault81.de"; + user = "root"; + identityFile = "~/.ssh/id_v81_ed25519"; + }; + # "nixos-desk" = { + # host = "nixos-desk"; + # hostname = "nixos-desk"; + # user = "tristand"; + # identityFile = "~/.ssh/id_v81_ed25519"; + # }; + }; + }; + + gpg.enable = true; + + ripgrep = { + enable = true; + package = pkgs.ripgrep.override { withPCRE2 = true; }; + }; + + zellij = { + enable = true; + enableFishIntegration = false; + }; + + zoxide.enable = true; + # zed-editor = { + # enable = true; + # }; + }; + + services = { + ssh-agent.enable = true; + gpg-agent = { + enable = false; + # enable = true; # misbehaving atm + + enableExtraSocket = true; + # enableSshSupport = true; + enableSshSupport = false; + pinentryPackage = lib.mkForce pkgs.pinentry-qt; + }; + lorri.enable = true; + + emacs = { + enable = true; + defaultEditor = true; + package = myEmacs; + socketActivation.enable = true; + }; + }; + + home = { + activation.setupEmacs = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + mkdir ~/.config/emacs -p + chmod u+rw -R ~/.config/emacs + cp -r ${doomemacsSrc}/. "$HOME/.config/emacs" + ''; + activation.setupNeofetch = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + mkdir ~/.config/neofetch -p + chmod u+rw -R ~/.config/neofetch + cp ${neofetchThemesSrc}/normal/acenoster.conf "$HOME/.config/neofetch/config.conf" + ''; + + file.".config/doom" = { + recursive = true; + source = ../../ext/doom; + # onChange = "${config.home.homeDirectory}/.config/emacs/bin/doom sync"; + }; + + sessionVariables = { + TERMINAL = "alacritty"; + ZELLIJ_AUTO_EXIT = "true"; + ZELLIJ_AUTO_ATTACH = "false"; + }; + + # TODO Disable gui apps & switch to emacs-git instead of pgtk on headless systems + packages = with pkgs; [ + myEmacs + emacs-lsp-booster + any-nix-shell + atool + aspell + aspellDicts.en + aspellDicts.en-computers + aspellDicts.en-science + aspellDicts.de + binutils + calc + cmake + curl + exercism + filezilla + gnutls + gnumake + gcc + imagemagick + libtool + neofetch + nil + nixpkgs-fmt + nodejs_20 + tree + python312Full + python312Packages.epc + python312Packages.orjson + rust-motd + rcm + (lib.mkIf config.services.gpg-agent.enable + pinentry-emacs) + shellcheck + shfmt + statix + #texlive.combined.scheme-full + texlive.combined.scheme-medium + tokei + tree-sitter + wget + wl-clipboard + zeal # GUI + zstd + neovim + lazydocker + sshx + bat + lazygit + xpipe + # surrealist + # surrealdb + pkgs.rage + pkgs.nh + pkgs.agenix-rekey + # android-studio-full + # my.aider-chat # broken on 25.05 (check nixpkgs for update) + ]; + }; +} diff --git a/home-mods/virt/default.nix b/home-mods/virt/default.nix new file mode 100644 index 0000000..98cb780 --- /dev/null +++ b/home-mods/virt/default.nix @@ -0,0 +1,40 @@ +{ config +, lib +, pkgs +, ... +}: { + dconf.settings = { + "org/virt-manager/virt-manager/connections" = { + autoconnect = [ "qemu:///system" ]; + uris = [ "qemu:///system" ]; + }; + }; + + xdg.desktopEntries = { + win10 = { + name = "Win 10 VM"; + type = "Application"; + icon = "windows"; + comment = "start the win10 vm"; + exec = pkgs.lib.strings.concatStrings [ + "bash -c \"" + "virsh --connect=qemu:///system start win10; " + "virt-viewer -a -w -c qemu:///system win10 " + "&& virsh --connect=qemu:///system managedsave win10\"" + ]; + }; + win11 = { + name = "Win 11 VM"; + type = "Application"; + icon = "windows"; + comment = "start the win11 vm"; + exec = pkgs.lib.strings.concatStrings [ + "bash -c \"" + "virsh --connect=qemu:///system start win11; " + "virsh --connect=qemu:///system resume win11; " + "virt-viewer -a -w -c qemu:///system win11 " + "&& virsh --connect=qemu:///system managedsave win11\"" + ]; + }; + }; +} diff --git a/monitor_battery.fish b/monitor_battery.fish new file mode 100644 index 0000000..3cb7d50 --- /dev/null +++ b/monitor_battery.fish @@ -0,0 +1,10 @@ +#!/usr/bin/env fish + +set sensor_dir /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:50/PNP0C0A:00/power_supply/BAT1 + +while true + date -u +"%H:%MZ"; + echo "Charge: $(calc "($(cat $sensor_dir/charge_now)/1000000)*$(cat $sensor_dir/voltage_min_design)/1000000") Wh"; + echo "Current: $(calc "($(cat $sensor_dir/voltage_now)/1000000)*($(cat $sensor_dir/current_now)/1000000)") W"; + sleep 1m; +end diff --git a/os-mods/age/default.nix b/os-mods/age/default.nix new file mode 100644 index 0000000..49e6b97 --- /dev/null +++ b/os-mods/age/default.nix @@ -0,0 +1,34 @@ +{ pkgs +, lib +, config +, ... +}: { + age.secrets = + let + age-paths-list = lib.fileset.toList (lib.fileset.fromSource (lib.sources.sourceFilesBySuffices ../../secrets/autoimport [ ".age" ])); + named-paths = + builtins.map + (path: { + name = lib.strings.removeSuffix ".age" (builtins.baseNameOf path); + path = path; + }) + age-paths-list; + autoimported-secrets = lib.attrsets.mergeAttrsList (builtins.map + (secret: { + "${secret.name}".rekeyFile = secret.path; + }) + named-paths); + in + autoimported-secrets; + + age.rekey = { + masterIdentities = [ + { + identity = ../../secrets/master/age_master.age; + pubkey = ../../secrets/master/age_master.pub; + } + ]; + storageMode = "local"; + localStorageDir = ../../. + "/secrets/rekeyed/${config.networking.hostName}"; + }; +} diff --git a/os-mods/amdgpu/default.nix b/os-mods/amdgpu/default.nix new file mode 100644 index 0000000..771542a --- /dev/null +++ b/os-mods/amdgpu/default.nix @@ -0,0 +1,84 @@ +{ config +, lib +, pkgs +, inputs +, ... +}: { + programs.corectrl = { + enable = true; + gpuOverclock.enable = true; + }; + + systemd.tmpfiles.rules = [ + "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}" + "L+ /opt/rocm/rocblas - - - - ${pkgs.rocmPackages.rocblas}" + "L+ /opt/rocm/hipblas - - - - ${pkgs.rocmPackages.hipblas}" + "L+ /opt/rocm/clang - - - - ${pkgs.rocmPackages.llvm.clang}" + "L+ /opt/rocm/runtime - - - - ${pkgs.rocmPackages.rocm-runtime}" + ]; + + chaotic.mesa-git = { + enable = false; + extraPackages = with pkgs; [ + mesa_git.opencl + libva-vdpau-driver + obs-studio-plugins.obs-vaapi # TODO check if obs is enabled + gst_all_1.gstreamer + gst_all_1.gst-vaapi + ]; + extraPackages32 = with pkgs; [ + mesa32_git.opencl + driversi686Linux.libva-vdpau-driver + ]; + }; + hardware = { + amdgpu = { + opencl.enable = true; + initrd.enable = true; + }; + + graphics = { + extraPackages = with pkgs; [ + # rocmPackages.clr.icd + libva-vdpau-driver + obs-studio-plugins.obs-vaapi # TODO check if obs is enabled + gst_all_1.gstreamer + gst_all_1.gst-vaapi + ]; + extraPackages32 = with pkgs; [ + driversi686Linux.libva-vdpau-driver + ]; + }; + }; + + systemd.services.lactd = { + enable = true; + description = "Radeon GPU monitor"; + after = [ "syslog.target" "systemd-modules-load.service" ]; + + unitConfig = { ConditionPathExists = "${pkgs.lact}/bin/lact"; }; + + serviceConfig = { + User = "root"; + ExecStart = "${pkgs.lact}/bin/lact daemon"; + }; + + wantedBy = [ "multi-user.target" ]; + }; + + # Force radv + environment.variables.AMD_VULKAN_ICD = "RADV"; + environment.systemPackages = with pkgs; [ + ## MONITORING TOOLS ## + # nvtopPackages.amd # for AMD GPUs # broken ? + + lact + vulkan-tools + libva-utils + glxinfo # TODO right place here or in desktop ? + clinfo + wayland-utils # TODO move somewhere better ? + # nixgl.nixGLIntel + # nixgl.nixVulkanIntel + ]; +} diff --git a/os-mods/cachix/caches/ai.nix b/os-mods/cachix/caches/ai.nix new file mode 100644 index 0000000..dfb41cb --- /dev/null +++ b/os-mods/cachix/caches/ai.nix @@ -0,0 +1,12 @@ +{ + nix = { + settings = { + substituters = [ + "https://ai.cachix.org" + ]; + trusted-public-keys = [ + "ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc=" + ]; + }; + }; +} diff --git a/os-mods/cachix/caches/lix.nix b/os-mods/cachix/caches/lix.nix new file mode 100644 index 0000000..d4a95ff --- /dev/null +++ b/os-mods/cachix/caches/lix.nix @@ -0,0 +1,11 @@ +{ + nix = { + settings = { + substituters = [ + "https://cache.lix.systems" + ]; + trusted-public-keys = [ + ]; + }; + }; +} diff --git a/os-mods/cachix/caches/nix-community.nix b/os-mods/cachix/caches/nix-community.nix new file mode 100644 index 0000000..28de7e4 --- /dev/null +++ b/os-mods/cachix/caches/nix-community.nix @@ -0,0 +1,12 @@ +{ + nix = { + settings = { + substituters = [ + "https://nix-community.cachix.org" + ]; + trusted-public-keys = [ + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + }; + }; +} diff --git a/os-mods/cachix/caches/nyx.nix b/os-mods/cachix/caches/nyx.nix new file mode 100644 index 0000000..f2aff08 --- /dev/null +++ b/os-mods/cachix/caches/nyx.nix @@ -0,0 +1,11 @@ +{ + nix = { + settings = { + substituters = [ "https://nyx.chaotic.cx/" ]; + trusted-public-keys = [ + "nyx.chaotic.cx-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8=" + "chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8=" + ]; + }; + }; +} diff --git a/os-mods/cachix/caches/vlt81.nix b/os-mods/cachix/caches/vlt81.nix new file mode 100644 index 0000000..799666a --- /dev/null +++ b/os-mods/cachix/caches/vlt81.nix @@ -0,0 +1,13 @@ +{ + nix = { + settings = { + substituters = [ + "https://nixcache.vlt81.de" + ]; + trusted-public-keys = [ + "nixcache.vlt81.de:7yRQAvj1jc1DAmV4ZVKob3CnI5z2PV4XNP6qEc9kbhg=" # new + "nixcache.vlt81.de:nw0FfUpePtL6P3IMNT9X6oln0Wg9REZINtkkI9SisqQ=" # old + ]; + }; + }; +} diff --git a/os-mods/cachix/caches/winapps.nix b/os-mods/cachix/caches/winapps.nix new file mode 100644 index 0000000..e9b296e --- /dev/null +++ b/os-mods/cachix/caches/winapps.nix @@ -0,0 +1,8 @@ +{ + nix = { + settings = { + substituters = [ "https://winapps.cachix.org/" ]; + trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ]; + }; + }; +} diff --git a/os-mods/cachix/default.nix b/os-mods/cachix/default.nix new file mode 100644 index 0000000..1d3650f --- /dev/null +++ b/os-mods/cachix/default.nix @@ -0,0 +1,18 @@ +# WARN: this file will get overwritten by $ cachix use +{ pkgs +, lib +, ... +}: +let + folder = ./caches; + toImport = name: value: folder + ("/" + name); + filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key; + imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder)); +in +{ + inherit imports; + nix.settings = { + substituters = [ "https://cache.nixos.org/" ]; + trusted-users = [ "root" "tristand" ]; + }; +} diff --git a/os-mods/common/default.nix b/os-mods/common/default.nix new file mode 100644 index 0000000..dc4f169 --- /dev/null +++ b/os-mods/common/default.nix @@ -0,0 +1,290 @@ +{ config +, lib +, pkgs +, inputs +, system +, self +, ... +}: +let + commitid = + if (self ? shortRev) + then self.shortRev + else "dirty"; +in +{ + system.switch = { + enable = false; + enableNg = true; + }; + system.image = { + id = "tristnix"; + version = commitid; + }; + # system.nixos.tags = [ "tristnix_${commitid}" ]; + nixpkgs.buildPlatform = { + inherit system; + }; + nixpkgs.hostPlatform = { + inherit system; + }; + # nixpkgs.hostPlatform = { + # inherit system; + # gcc = { + # arch = lib.mkDefault builtins.throw "no arch set"; + # tune = config.nixpkgs.hostPlatform.gcc.arch; + # }; + # }; + + boot.tmp.useTmpfs = true; + systemd.services.nix-daemon = { + environment.TMPDIR = "/var/tmp"; + }; + + nix = { + settings = { + auto-optimise-store = true; + allow-import-from-derivation = true; + }; + package = pkgs.nixVersions.stable; + extraOptions = '' + experimental-features = nix-command flakes + ''; + }; + + home-manager.backupFileExtension = "bak"; + + # locale + time.timeZone = "Europe/Berlin"; + + i18n = { + defaultLocale = "en_US.UTF-8"; + + extraLocaleSettings = { + LANG = "en_US.UTF-8"; + LC_ADDRESS = "de_DE.UTF-8"; + LC_COLLATE = "de_DE.UTF-8"; + LC_CTYPE = "en_US.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MESSAGES = "en_US.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + }; + #################### + + security = { + pki.certificates = [ + (lib.readFile ../../ext/internal-ca.crt) + ]; + rtkit.enable = true; + + sudo.enable = false; + sudo-rs = { + enable = true; + wheelNeedsPassword = lib.mkDefault false; + execWheelOnly = true; + }; + }; + + environment.sessionVariables = { + EDITOR = "nvim"; + }; + + environment.systemPackages = with pkgs; [ + fclones + curl + fish + figlet + neovim # editor + nix-alien + git + vim # fallback ed + wget + + ## MONITORING TOOLS ## + btop # for CPU, RAM, and Disk monitoring + iotop # for disk I/O monitoring + iftop # for network I/O monitoring + ]; + + fileSystems."/etc/nixos" = { + device = lib.mkDefault "/home/tristand/nix"; + fsType = "none"; + options = [ "bind" ]; + }; + + programs = { + nh = { + enable = true; + clean.enable = true; + clean.extraArgs = "--keep-since 30d --keep 16"; + flake = "/home/tristand/nix"; + }; + rust-motd = { + # enable = true; # broken atm + enableMotdInSSHD = true; + settings = { + banner = { + color = "green"; + command = '' + ${pkgs.inetutils}/bin/hostname | ${pkgs.figlet}/bin/figlet -f slant + ''; + }; + + uptime = { + prefix = "Up"; + }; + + global = { + progress_full_character = "="; + progress_empty_character = "-"; + progress_prefix = "["; + progress_suffix = "]"; + }; + + filesystems = { + root = "/"; + home = "/home"; + }; + + memory.swap_pos = "beside"; + last_login = builtins.listToAttrs (map + (user: { + name = user; + value = 2; + }) + (builtins.attrNames config.home-manager.users)); + }; + order = [ + "global" + "banner" + "uptime" + "memory" + "filesystems" + "last_login" + ]; + }; + nix-ld.enable = true; + # nix-ld.package = pkgs.nix-ld-rs; # Lazy Tempfix + nix-ld.package = pkgs.nix-ld; + command-not-found.enable = false; + nix-index-database.comma.enable = true; + + fish.enable = true; + gnupg.agent = { + enable = true; + # enableSSHSupport = true; # breaks gitea foo + pinentryPackage = lib.mkForce pkgs.pinentry-qt; + }; + }; + + services = { + fwupd.enable = true; + fwupd.extraRemotes = [ + "lvfs-testing" + ]; + + # envfs.enable = true; # not needed due to flake + timesyncd.enable = false; + ntp.enable = false; + ntpd-rs.enable = true; + + openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + PubKeyAuthentication = true; + X11Forwarding = false; + # KexAlgorithms = [ + # "sntrup761x25519-sha512@openssh.com" + # ]; # TODO Check what juicessh needs + }; + # X11UseLocalhost no + extraConfig = '' + AllowTcpForwarding yes + AllowAgentForwarding no + AllowStreamLocalForwarding yes + AuthenticationMethods publickey + ''; + }; + + gvfs.enable = true; + avahi.enable = true; + avahi.nssmdns4 = true; + }; + + networking.firewall = { + extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns''; + allowedTCPPorts = [ + 22 + # 54817 + ]; + }; + + # TODO Extract into stylix module + services.kmscon.enable = true; + services.kmscon.hwRender = config.hardware.amdgpu.initrd.enable; + fonts.packages = with pkgs.nerd-fonts; [ + iosevka + iosevka-term + fira-code + droid-sans-mono + symbols-only + ]; + stylix = + let + # TODO extract this config somewhere and allow easily generating wallpaper with nixpkgs stable and place it in the local repo + # wallpaper = pkgs.nix-wallpaper.override { + # logoSize = 24; + # preset = "gruvbox-dark-rainbow"; + # width = 6960; + # height = 4320; + # }; + # wallpaperPath = "${wallpaper}/share/wallpapers/nixos-wallpaper.png"; + # fontpkg = pkgs.nerd-fonts.override { fonts = [ "Iosevka" "IosevkaTerm" "Recursive" "FiraCode" "DroidSansMono" "NerdFontsSymbolsOnly" ]; }; + in + { + enable = true; + image = ../../ext/background.png; + polarity = "dark"; + base16Scheme = lib.mkForce "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; + autoEnable = false; + cursor = { + package = pkgs.kdePackages.breeze; + name = "breeze_cursors"; + size = 24; + }; + opacity.terminal = 0.88; + fonts = { + serif = config.stylix.fonts.sansSerif; + sansSerif = { + package = pkgs.nerd-fonts.iosevka; + name = "Iosevka Nerd Font Propo"; + }; + + monospace = { + package = pkgs.nerd-fonts.iosevka; + name = "Iosevka Nerd Font Mono"; + }; + + emoji = { + package = pkgs.noto-fonts-emoji; + name = "Noto Color Emoji"; + }; + }; + targets = { + console.enable = true; + fish.enable = true; + gtk.enable = true; + kmscon.enable = true; + nixos-icons.enable = true; + }; + }; +} diff --git a/os-mods/desktop/audio.nix b/os-mods/desktop/audio.nix new file mode 100644 index 0000000..ac8eeb5 --- /dev/null +++ b/os-mods/desktop/audio.nix @@ -0,0 +1,32 @@ +{ config +, lib +, pkgs +, ... +}: { + services.pipewire = { + enable = true; + # systemWide = true; + audio.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + + wireplumber.enable = true; + }; + + ## audio + # sound.enable = true; + hardware.bluetooth.enable = true; + + ## fix cava + services.pipewire.wireplumber.extraConfig."11-bluetooth-policy" = { + "wireplumber.settings" = { + "bluetooth.autoswitch-to-headset-profile" = false; + }; + }; + + environment.systemPackages = with pkgs; [ + kdePackages.kpipewire # TODO Check if needed + ]; +} diff --git a/os-mods/desktop/default.nix b/os-mods/desktop/default.nix new file mode 100644 index 0000000..da691bf --- /dev/null +++ b/os-mods/desktop/default.nix @@ -0,0 +1,113 @@ +{ config +, lib +, pkgs +, ... +}: { + programs.dconf.enable = true; + programs.partition-manager.enable = true; + + fonts = { + enableDefaultPackages = true; + fontDir.enable = true; + fontconfig = { + antialias = true; + + defaultFonts = { + serif = [ "Iosevka Nerd Font Propo" ]; + sansSerif = [ "Iosevka Nerd Font Propo" ]; + monospace = [ "Iosevka Nerd Font Mono" ]; + emoji = [ "Noto Color Emoji" ]; + }; + + hinting.enable = true; + hinting.style = "slight"; + + subpixel.rgba = lib.mkDefault "rgb"; + subpixel.lcdfilter = "default"; + }; + packages = with pkgs; [ + emacs-all-the-icons-fonts + corefonts + vistafonts + noto-fonts + noto-fonts-cjk-sans + noto-fonts-emoji + liberation_ttf + fira + fira-code + fira-code-symbols + mplus-outline-fonts.githubRelease + dina-font + proggyfonts + ]; + }; + + networking.firewall = { + enable = true; + allowedTCPPortRanges = [ + { + from = 1714; + to = 1764; + } # KDE Connect + ]; + allowedUDPPortRanges = [ + { + from = 1714; + to = 1764; + } # KDE Connect + ]; + }; + + programs.kdeconnect.enable = true; + programs.kclock.enable = true; + programs.sniffnet.enable = true; + + security.pam.services = { + # sddm.kwallet.enable = true; useless due to tty as dm + kdewallet.kwallet.enable = true; + kdewallet.kwallet.forceRun = true; # tty as dm support + }; + + services = { + desktopManager.plasma6.enable = true; + desktopManager.plasma6.enableQt5Integration = true; + displayManager.enable = true; + xserver = { + enable = true; + xkb = { + layout = "us"; + variant = "alt-intl"; + }; + }; + + greetd = { + enable = true; + settings = { + default_session = { + command = '' + ${lib.getExe pkgs.greetd.tuigreet} \ + --asterisks --asterisks-char • \ + --greeting "Welcome to NixOS ${config.system.nixos.version} (${config.system.nixos.codeName}) on ${config.system.name}!" \ + --theme "border=magenta;text=cyan;prompt=green;time=red;action=blue;button=yellow;container=black;input=red" \ + --time --time-format "%H:%M | %a • %h | %F" \ + --remember \ + --cmd ${pkgs.writeShellScript "tuigreet-cmd.sh" '' + ${pkgs.kdePackages.plasma-workspace}/libexec/plasma-dbus-run-session-if-needed + exec 2>/dev/null 1>/dev/null ${pkgs.kdePackages.plasma-workspace}/bin/startplasma-wayland + ''}; + ''; + }; + }; + }; + }; + + systemd.services.greetd.serviceConfig = { + Type = "idle"; + StandardInput = "tty"; + StandardOutput = "tty"; + StandardError = "journal"; + TTYReset = true; + TTYVHangup = true; + TTYVTDisallocate = true; + }; +} diff --git a/os-mods/desktop/gaming.nix b/os-mods/desktop/gaming.nix new file mode 100644 index 0000000..aa4c92e --- /dev/null +++ b/os-mods/desktop/gaming.nix @@ -0,0 +1,60 @@ +{ config +, lib +, pkgs +, ... +}: { + programs.alvr = { + enable = true; + openFirewall = true; + }; + + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + }; + + programs.steam = { + enable = true; + protontricks.enable = true; + + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + + extraPackages = with pkgs; [ + mangohud + ]; + extraCompatPackages = with pkgs; [ + proton-ge-custom + ]; + + package = pkgs.steam.override { + extraPkgs = pkgs: + with pkgs; [ + xorg.libXcursor + xorg.libXi + xorg.libXinerama + xorg.libXScrnSaver + libpng + libpulseaudio + libvorbis + stdenv.cc.cc.lib + libkrb5 + keyutils + ]; + }; + }; + programs.xwayland.enable = true; + programs.gamescope.enable = true; + programs.immersed.enable = true; + + environment.systemPackages = with pkgs; [ + protonup-qt + xorg.xorgserver + wlx-overlay-s + ]; + + # hardware.xone.enable = true; # USB only, not needed ATM, and incompatible with recent kernels, bluetooth FTW + # hardware.xpadneo.enable = true; # Wireless # Needed to up to nixos-small to fix + hardware.bluetooth.enable = true; + hardware.steam-hardware.enable = true; +} diff --git a/os-mods/desktop/printing.nix b/os-mods/desktop/printing.nix new file mode 100644 index 0000000..13efbc8 --- /dev/null +++ b/os-mods/desktop/printing.nix @@ -0,0 +1,21 @@ +{ config +, lib +, pkgs +, ... +}: { + services = { + printing = { + enable = true; + drivers = with pkgs; [ + gutenprint + gutenprintBin + # hplipWithPlugin # TODO readd + brlaser + brgenml1cupswrapper + ]; + }; + }; + environment.systemPackages = with pkgs; [ + cifs-utils + ]; +} diff --git a/os-mods/net_disks/oeko.nix b/os-mods/net_disks/oeko.nix new file mode 100644 index 0000000..f94a938 --- /dev/null +++ b/os-mods/net_disks/oeko.nix @@ -0,0 +1,22 @@ +{ config +, lib +, ... +}: { + config = lib.mkMerge (lib.lists.forEach [ "Server_F" "Scans" ] (mount: { + systemd.mounts = [ + { + where = "/run/mount/${mount}"; + what = "//192.168.0.1/${mount}"; + type = "cifs"; + options = "vers=3.0,nofail,credentials=${config.age.secrets.oeko-smb.path},uid=1001,gid=100"; + } + ]; + + systemd.automounts = [ + { + where = "/run/mount/${mount}"; + wantedBy = [ "multi-user.target" ]; + } + ]; + })); +} diff --git a/os-mods/netdata/client.nix b/os-mods/netdata/client.nix new file mode 100644 index 0000000..5f7fb86 --- /dev/null +++ b/os-mods/netdata/client.nix @@ -0,0 +1,58 @@ +{ config +, lib +, pkgs +, modulesPath +, system +, inputs +, ... +}: { + services.netdata = { + enable = true; + package = pkgs.netdata; + python = { + enable = true; + + extraPackages = ps: [ + ps.psycopg2 + ps.docker + ps.dnspython + ]; + }; + + configDir = { + "stream.conf" = pkgs.writeText "stream.conf" '' + [stream] + enabled = yes + api key = 31de92c9-d863-4c39-af37-72a5c6e0796b + destination = 100.64.0.13:19999 + ''; + }; + config = { + global = { + "page cache size" = 32; + + # update interval + "update every" = 2; + }; + db = { + # relatively minimal storage conf, as replicate target should save most of the history + "update every" = 2; + "storage tiers" = 3; + "dbengine multihost disk space MB" = 256; + "dbengine tier 1 multihost disk space MB" = 256; + "dbengine tier 2 multihost disk space MB" = 256; + "cleanup obsolete charts after secs" = 600; + }; + plugins = { + "go.d" = "yes"; + }; + web = { + "mode" = "none"; + }; + ml = { + # disable machine learning, can happen on repl target + "enabled" = "no"; + }; + }; + }; +} diff --git a/os-mods/netdata/default.nix b/os-mods/netdata/default.nix new file mode 100644 index 0000000..10189de --- /dev/null +++ b/os-mods/netdata/default.nix @@ -0,0 +1,52 @@ +{ config +, lib +, pkgs +, modulesPath +, system +, inputs +, ... +}: { + # TODO allow primary/node config option to listen/send metrics to central location + services.netdata = { + enable = true; + package = pkgs.netdata; + python = { + enable = true; + + extraPackages = ps: [ + ps.psycopg2 + ps.docker + ps.dnspython + ]; + }; + + config = { + global = { + # update interval + "update every" = 2; + }; + db = { + "update every" = 2; + "storage tiers" = 3; + "dbengine multihost disk space MB" = 1024; + "dbengine tier 1 multihost disk space MB" = 1024; + "dbengine tier 2 multihost disk space MB" = 512; + "cleanup obsolete charts after secs" = 600; + }; + plugins = { + "go.d" = "yes"; + }; + ml = { + # enable machine learning + "enabled" = "yes"; + }; + }; + }; + + networking.firewall.allowedTCPPortRanges = [ + { + from = 19999; + to = 19999; + } # netdata + ]; +} diff --git a/os-mods/network/default.nix b/os-mods/network/default.nix new file mode 100644 index 0000000..2f4cd25 --- /dev/null +++ b/os-mods/network/default.nix @@ -0,0 +1,86 @@ +{ config +, lib +, pkgs +, ... +}: { + networking = { + firewall.checkReversePath = lib.mkForce false; + firewall.trustedInterfaces = [ "tailscale0" ]; + + networkmanager.enable = true; + networkmanager.dispatcherScripts = [ + { + source = import ./moz-nm-hook.fish.nix { + inherit pkgs; + vpn_interface = "tailscale0"; + vpn_network = "100.64.0.0/16"; + }; + type = "basic"; + } + { + source = import ./moz-nm-hook.fish.nix { + inherit pkgs; + vpn_interface = "netmaker"; + vpn_network = "10.231.190.0/24"; + }; + type = "basic"; + } + ]; + + useDHCP = lib.mkDefault true; + + nameservers = [ + "176.9.242.147#dns.vlt81.de" + "2a01:4f8:2200:44a1::baad:c0de#dns.vlt81.de" + "1.1.1.1#one.one.one.one" + "1.0.0.1#one.one.one.one" + # "100.64.0.8#dns.vlt81.de" + # "45.90.28.0#921984.dns.nextdns.io" + # "45.90.30.0#921984.dns.nextdns.io" + # "2a07:a8c0::#921984.dns.nextdns.io" + # "2a07:a8c1::#921984.dns.nextdns.io" + ]; + }; + + # security.wrappers.keybase-redirector = { + # setuid = true; + # owner = "root"; + # group = "root"; + # source = "${pkgs.kbfs}/bin/redirector"; + # }; + + environment.systemPackages = with pkgs; [ + keybase-gui + ]; + services = { + keybase.enable = true; + kbfs.enable = true; + # kbfs.enableRedirector = true; + resolved = { + enable = true; + dnssec = "true"; + domains = [ "~." ]; + fallbackDns = [ + "1.1.1.1#one.one.one.one" + "1.0.0.1#one.one.one.one" + ]; + extraConfig = '' + DNSOverTLS=yes + ''; + }; + + netclient = { + enable = false; + package = pkgs.netclient; + }; + + tailscale = { + enable = true; + useRoutingFeatures = "both"; + }; + + mozillavpn = { + enable = true; + }; + }; +} diff --git a/os-mods/network/moz-nm-hook.fish.nix b/os-mods/network/moz-nm-hook.fish.nix new file mode 100644 index 0000000..b8034df --- /dev/null +++ b/os-mods/network/moz-nm-hook.fish.nix @@ -0,0 +1,22 @@ +# NetworkManager hook to make MozillaVPN work nicely with other overlay networks like netmaker/tailscale/etc +{ pkgs +, vpn_interface +, vpn_network +, ... +}: (pkgs.writeText "${vpn_interface}-route" '' + #!${pkgs.fish}/bin/fish + set MOZ_INTERFACE "moz0" + set VPN_INTERFACE "${vpn_interface}" + set VPN_NETWORK "${vpn_network}" + + sleep 1 # give mozillavpn time to create the rules we want to override + logger "NetworkManager dispatcher event: $argv[1], $argv[2]" + + # When MOZ interface comes up, check and add the Tailscale route + if test "$argv[1]" = "$MOZ_INTERFACE" -a "$argv[2]" = "up" + # Re-creating forces high priority in case the route already exists + ip route del $VPN_NETWORK dev $VPN_INTERFACE + ip route add $VPN_NETWORK dev $VPN_INTERFACE + logger "Added route for $VPN_NETWORK via $VPN_INTERFACE" + end +'') diff --git a/os-mods/ryzenapu/default.nix b/os-mods/ryzenapu/default.nix new file mode 100644 index 0000000..8832390 --- /dev/null +++ b/os-mods/ryzenapu/default.nix @@ -0,0 +1,90 @@ +{ config +, lib +, pkgs +, system +, inputs +, ... +}: { + # This automatically sets the ryzen apu TDP to 45 W on AC and 10W on battery + # addionally it enables and configures some general power management stuff like powertop + + environment.systemPackages = with pkgs; [ + ryzenadj + (writers.writeDashBin "set_tdp" '' + set -efux + watt=$1 + value=$(( $watt * 1000 )) + ${ryzenadj}/bin/ryzenadj --stapm-limit="$value" --fast-limit="$value" --slow-limit="$value" --tctl-temp=85 + '') + ]; + + systemd = { + services = { + desktop-power-maximum-tdp = { + description = "Change TDP to maximum TDP when on AC power"; + wantedBy = [ "ac.target" ]; + unitConfig = { + RefuseManualStart = true; + }; + path = with pkgs; [ + coreutils + ryzenadj + ]; + serviceConfig.Type = "oneshot"; + preStart = "sleep 2"; + script = '' + ryzenadj --stapm-limit=45000 --fast-limit=45000 --slow-limit=45000 --tctl-temp=85 + ''; + }; + + portable-power-saving-tdp = { + description = "Change TDP to power saving TDP when on battery power"; + wantedBy = [ "battery.target" ]; + unitConfig = { RefuseManualStart = true; }; + path = with pkgs; [ + coreutils + ryzenadj + ]; + serviceConfig.Type = "oneshot"; + preStart = "sleep 2"; + script = '' + ryzenadj --stapm-limit=10000 --fast-limit=10000 --slow-limit=10000 --tctl-temp=85 + ''; + }; + + # Do not manage HID devices to prevent annoying keyboard/mouse sleeps + powertop.postStart = '' + HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u) + for i in $HIDDEVICES; do + echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product + echo 'on' > /sys/bus/usb/devices/$i/power/control + done + ''; + }; + + targets = { + ac = { + conflicts = [ "battery.target" ]; + description = "On AC power"; + unitConfig = { DefaultDependencies = "false"; }; + }; + + battery = { + conflicts = [ "ac.target" ]; + description = "On battery power"; + unitConfig = { DefaultDependencies = "false"; }; + }; + }; + }; + + services = { + power-profiles-daemon.enable = true; + udev.extraRules = '' + SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="${pkgs.systemd}/bin/systemctl --no-block start ac.target" + SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="${pkgs.systemd}/bin/systemctl --no-block start battery.target" + ''; + }; + + # energy saving stuff + powerManagement.powertop.enable = true; +} diff --git a/os-mods/virt/default.nix b/os-mods/virt/default.nix new file mode 100644 index 0000000..9145349 --- /dev/null +++ b/os-mods/virt/default.nix @@ -0,0 +1,58 @@ +{ config +, lib +, pkgs +, inputs +, system +, ... +}: { + environment.systemPackages = with pkgs; [ + virtiofsd + virt-manager + virt-viewer + virt-top + spice-gtk + inputs.winapps.packages."${system}".winapps + inputs.winapps.packages."${system}".winapps-launcher + ]; + + boot.kernelModules = [ "kvm-amd" ]; # TODO check cpu and enable intel kvm if needed + + virtualisation.waydroid.enable = true; + virtualisation.docker = { + enable = true; + package = pkgs.docker; + + storageDriver = lib.mkDefault "overlay2"; + liveRestore = false; + autoPrune.enable = true; + }; + + security.wrappers.spice-client-glib-usb-acl-helper = { + owner = "root"; + group = "root"; + # capabilities = "cap_fowner+ep"; + setuid = true; + source = "${pkgs.spice-gtk}/bin/spice-client-glib-usb-acl-helper"; + }; + + virtualisation.libvirtd = { + enable = true; + package = pkgs.libvirt; + + onShutdown = "suspend"; + onBoot = "ignore"; + + qemu = { + package = pkgs.qemu_kvm; + vhostUserPackages = [ pkgs.virtiofsd ]; + ovmf.enable = true; + ovmf.packages = [ pkgs.OVMFFull.fd ]; + swtpm.enable = true; + runAsRoot = false; + }; + }; + + services.udev.extraRules = '' + SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="wheel" + ''; +} diff --git a/os-mods/xmrig/default.nix b/os-mods/xmrig/default.nix new file mode 100644 index 0000000..43eb01c --- /dev/null +++ b/os-mods/xmrig/default.nix @@ -0,0 +1,21 @@ +{ config +, lib +, pkgs +, ... +}: { + services.xmrig = { + enable = false; + package = pkgs.xmrig; + settings = { + autosave = true; + cpu = false; + opencl = { + enabled = true; + cache = true; + loader = "${pkgs.ocl-icd}/lib/libOpenCL.so"; + platform = "AMD"; + adl = true; + }; + }; + }; +} diff --git a/pkgs/aider-chat.nix b/pkgs/aider-chat.nix new file mode 100644 index 0000000..30e780f --- /dev/null +++ b/pkgs/aider-chat.nix @@ -0,0 +1,120 @@ +{ lib +, stdenv +, python311 +, fetchFromGitHub +, gitMinimal +, portaudio +, +}: +let + python3 = python311.override { + self = python3; + packageOverrides = _: super: { tree-sitter = super.tree-sitter_0_21; }; + }; + version = "0.59.1"; +in +python3.pkgs.buildPythonApplication { + pname = "aider-chat"; + inherit version; + pyproject = true; + + src = fetchFromGitHub { + owner = "paul-gauthier"; + repo = "aider"; + rev = "refs/tags/v${version}"; + hash = "sha256-20LicYj1j5gGzhF+SxPUKu858nHZgwDF1JxXeHRtYe0="; + }; + + pythonRelaxDeps = true; + + build-system = with python3.pkgs; [ setuptools-scm ]; + + dependencies = with python3.pkgs; + [ + aiohappyeyeballs + backoff + beautifulsoup4 + configargparse + diff-match-patch + diskcache + flake8 + gitpython + grep-ast + importlib-resources + json5 + jsonschema + jiter + litellm + networkx + numpy + packaging + pathspec + pexpect + pillow + playwright + prompt-toolkit + ptyprocess + pypager + pypandoc + pyperclip + pyyaml + psutil + rich + scipy + sounddevice + soundfile + streamlit + tokenizers + watchdog + pydub + ] + ++ lib.optionals (!tensorflow.meta.broken) [ + llama-index-core + llama-index-embeddings-huggingface + ]; + + buildInputs = [ portaudio ]; + + nativeCheckInputs = (with python3.pkgs; [ pytestCheckHook ]) ++ [ gitMinimal ]; + + disabledTestPaths = [ + # Tests require network access + "tests/scrape/test_scrape.py" + # Expected 'mock' to have been called once + "tests/help/test_help.py" + ]; + + disabledTests = + [ + # Tests require network + "test_urls" + "test_get_commit_message_with_custom_prompt" + # FileNotFoundError + "test_get_commit_message" + # Expected 'launch_gui' to have been called once + "test_browser_flag_imports_streamlit" + # AttributeError + "test_simple_send_with_retries" + # Expected 'check_version' to have been called once + "test_main_exit_calls_version_check" + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + # Tests fails on darwin + "test_dark_mode_sets_code_theme" + "test_default_env_file_sets_automatic_variable" + ]; + + preCheck = '' + export HOME=$(mktemp -d) + export AIDER_CHECK_UPDATE=false + ''; + + meta = { + description = "AI pair programming in your terminal"; + homepage = "https://github.com/paul-gauthier/aider"; + changelog = "https://github.com/paul-gauthier/aider/blob/v${version}/HISTORY.md"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ taha-yassine ]; + mainProgram = "aider"; + }; +} diff --git a/pkgs/awatcher.Cargo.lock b/pkgs/awatcher.Cargo.lock new file mode 100644 index 0000000..ab89d54 --- /dev/null +++ b/pkgs/awatcher.Cargo.lock @@ -0,0 +1,4662 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + +[[package]] +name = "anyhow" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" + +[[package]] +name = "appdirs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d512b3e61196d27562dcc71446a58ba8a93d3bed2a03a87f96101b9a17f1d378" +dependencies = [ + "ole32-sys", + "shell32-sys", + "winapi 0.2.8", +] + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-broadcast" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" +dependencies = [ + "event-listener 5.3.0", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if 1.0.0", + "event-listener 5.3.0", + "futures-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "async-signal" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if 1.0.0", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "aw-client-rust" +version = "0.1.0" +source = "git+https://github.com/ActivityWatch/aw-server-rust?rev=448312d#448312d410980d4a92a0fb4d4bb3fa3494cf6c89" +dependencies = [ + "aw-models", + "chrono", + "gethostname", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "aw-datastore" +version = "0.1.0" +source = "git+https://github.com/ActivityWatch/aw-server-rust?rev=448312d#448312d410980d4a92a0fb4d4bb3fa3494cf6c89" +dependencies = [ + "appdirs", + "aw-models", + "aw-transform", + "chrono", + "log", + "mpsc_requests", + "rusqlite", + "serde", + "serde_json", +] + +[[package]] +name = "aw-models" +version = "0.1.0" +source = "git+https://github.com/ActivityWatch/aw-server-rust?rev=448312d#448312d410980d4a92a0fb4d4bb3fa3494cf6c89" +dependencies = [ + "chrono", + "log", + "schemars", + "serde", + "serde_json", +] + +[[package]] +name = "aw-query" +version = "0.1.0" +source = "git+https://github.com/ActivityWatch/aw-server-rust?rev=448312d#448312d410980d4a92a0fb4d4bb3fa3494cf6c89" +dependencies = [ + "aw-datastore", + "aw-models", + "aw-transform", + "chrono", + "fancy-regex", + "log", + "plex", + "serde", + "serde_json", +] + +[[package]] +name = "aw-server" +version = "0.12.1" +source = "git+https://github.com/ActivityWatch/aw-server-rust?rev=448312d#448312d410980d4a92a0fb4d4bb3fa3494cf6c89" +dependencies = [ + "android_logger", + "appdirs", + "aw-datastore", + "aw-models", + "aw-query", + "aw-transform", + "chrono", + "clap 4.5.4", + "fern", + "gethostname", + "jemallocator", + "jni", + "lazy_static", + "libc", + "log", + "log-panics", + "multipart", + "openssl-sys", + "rocket", + "rocket_cors", + "rust-embed", + "serde", + "serde_json", + "toml 0.7.8", + "uuid", +] + +[[package]] +name = "aw-transform" +version = "0.1.0" +source = "git+https://github.com/ActivityWatch/aw-server-rust?rev=448312d#448312d410980d4a92a0fb4d4bb3fa3494cf6c89" +dependencies = [ + "aw-models", + "chrono", + "fancy-regex", + "log", + "rocket", + "serde", + "serde_json", +] + +[[package]] +name = "awatcher" +version = "0.2.7" +dependencies = [ + "anyhow", + "aw-datastore", + "aw-server", + "chrono", + "clap 4.5.4", + "fern", + "image", + "ksni", + "log", + "open", + "rstest", + "serde", + "tempfile", + "tokio", + "toml 0.8.13", + "watchers", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" + +[[package]] +name = "binascii" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" + +[[package]] +name = "bit-set" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bf6104718e80d7b26a68fdbacff3481cfc05df670821affc7e9cbc1884400c" +dependencies = [ + "bit-vec 0.4.4", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-vec" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + +[[package]] +name = "bitstream-io" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c9989a51171e2e81038ab168b6ae22886fe9ded214430dbb4f41c28cf176da" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "buf_redux" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" +dependencies = [ + "memchr", + "safemem", +] + +[[package]] +name = "built" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41bfbdb21256b87a8b5e80fab81a8eed158178e812fd7ba451907518b2742f16" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.5", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map 0.8.2", +] + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck", + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "colored" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f741c91823341bebf717d4c71bda820630ce065443b58bd1b7451af008355" +dependencies = [ + "is-terminal", + "lazy_static", + "winapi 0.3.9", +] + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils 0.8.16", +] + +[[package]] +name = "cookie" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils 0.7.2", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils 0.8.16", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils 0.8.16", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.82", + "quote 1.0.36", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote 1.0.36", + "syn 1.0.109", +] + +[[package]] +name = "dbus" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" +dependencies = [ + "libc", + "libdbus-sys", + "winapi 0.3.9", +] + +[[package]] +name = "dbus-codegen" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a49da9fdfbe872d4841d56605dc42efa5e6ca3291299b87f44e1cde91a28617c" +dependencies = [ + "clap 2.34.0", + "dbus", + "xml-rs", +] + +[[package]] +name = "dbus-tree" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f456e698ae8e54575e19ddb1f9b7bce2298568524f215496b248eb9498b4f508" +dependencies = [ + "dbus", +] + +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" + +[[package]] +name = "devise" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6eacefd3f541c66fc61433d65e54e0e46e0a029a819a7dbbc7a7b489e8a85f8" +dependencies = [ + "devise_codegen", + "devise_core", +] + +[[package]] +name = "devise_codegen" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8cf4b8dd484ede80fd5c547592c46c3745a617c8af278e2b72bea86b2dfed6" +dependencies = [ + "devise_core", + "quote 1.0.36", +] + +[[package]] +name = "devise_core" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b50dba0afdca80b187392b24f2499a88c336d5a8493e4b4ccfb608708be56a" +dependencies = [ + "bitflags 2.4.0", + "proc-macro2 1.0.82", + "proc-macro2-diagnostics", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "dyn-clone" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.0", + "pin-project-lite", +] + +[[package]] +name = "exr" +version = "1.71.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fancy-regex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +dependencies = [ + "bit-set 0.5.3", + "regex", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "fern" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" +dependencies = [ + "colored", + "log", +] + +[[package]] +name = "figment" +version = "0.10.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4547e226f4c9ab860571e070a9034192b3175580ecea38da34fcdb53a018c9a5" +dependencies = [ + "atomic", + "pear", + "serde", + "toml 0.7.8", + "uncased", + "version_check", +] + +[[package]] +name = "flate2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c1155db57329dca6d018b61e76b1488ce9a2e5e44028cac420a5898f4fcef63" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.1", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.9", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" +dependencies = [ + "byteorder-lite", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +dependencies = [ + "equivalent", + "hashbrown 0.14.1", +] + +[[package]] +name = "inlinable_string" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "ipnet" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi 0.3.9", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" +dependencies = [ + "jemalloc-sys", + "libc", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "ksni" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4934310bdd016e55725482b8d35ac0c16fd058c1b955d8959aa2d953b918c85b" +dependencies = [ + "dbus", + "dbus-codegen", + "dbus-tree", + "thiserror", +] + +[[package]] +name = "lalr" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106d7548f95adbe3019b4fc4954554d7b72535867aa9ce326d2f766b68958de7" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libdbus-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + +[[package]] +name = "libloading" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "log-panics" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" +dependencies = [ + "backtrace", + "log", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if 1.0.0", + "rayon", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mpsc_requests" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d778b8a8b7b31d8d23c8bbde4e571b483f3962dc9f14f447c14188e8a7fe85c" +dependencies = [ + "crossbeam-channel", +] + +[[package]] +name = "multer" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http", + "httparse", + "log", + "memchr", + "mime", + "spin", + "tokio", + "tokio-util", + "version_check", +] + +[[package]] +name = "multipart" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" +dependencies = [ + "buf_redux", + "httparse", + "log", + "mime", + "mime_guess", + "quick-error 1.2.3", + "rand", + "safemem", + "tempfile", + "twoway", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.4.0", + "cfg-if 1.0.0", + "cfg_aliases", + "libc", + "memoffset 0.9.0", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "ole32-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "open" +version = "5.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb49fbd5616580e9974662cb96a3463da4476e649a7e4b258df0de065db0657" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "openssl" +version = "0.10.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +dependencies = [ + "bitflags 2.4.0", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "300.1.5+3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.3.5", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "pear" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a386cd715229d399604b50d1361683fe687066f42d56f54be995bc6868f71c" +dependencies = [ + "inlinable_string", + "pear_codegen", + "yansi 1.0.0-rc.1", +] + +[[package]] +name = "pear_codegen" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f0f13dac8069c139e8300a6510e3f4143ecf5259c60b116a9b271b4ca0d54" +dependencies = [ + "proc-macro2 1.0.82", + "proc-macro2-diagnostics", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plex" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa14234571e92edfd3ac883defc6fcf310ae395cccdb10d2319d3e2e60083fc" +dependencies = [ + "lalr", + "proc-macro2 0.4.30", + "quote 0.6.13", + "redfa", + "syn 0.15.44", +] + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +dependencies = [ + "cfg-if 1.0.0", + "concurrent-queue", + "hermit-abi 0.3.9", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.0", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid 0.1.0", +] + +[[package]] +name = "proc-macro2" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", + "version_check", + "yansi 1.0.0-rc.1", +] + +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2 1.0.82", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if 1.0.0", + "interpolate_name", + "itertools", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error 2.0.1", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils 0.8.16", +] + +[[package]] +name = "redfa" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29cc2771cc9f5fb0061cdedc05a37170254694dffec6b89920a6e767f08c4220" +dependencies = [ + "bit-set 0.4.0", + "vec_map 0.6.0", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall 0.2.16", + "thiserror", +] + +[[package]] +name = "ref-cast" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "relative-path" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c707298afce11da2efef2f600116fa93ffa7a032b5d7b628aa17711ec81383ca" + +[[package]] +name = "reqwest" +version = "0.11.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rocket" +version = "0.5.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58734f7401ae5cfd129685b48f61182331745b357b96f2367f01aebaf1cc9cc9" +dependencies = [ + "async-stream", + "async-trait", + "atomic", + "binascii", + "bytes", + "either", + "figment", + "futures", + "indexmap 1.9.3", + "is-terminal", + "log", + "memchr", + "multer", + "num_cpus", + "parking_lot", + "pin-project-lite", + "rand", + "ref-cast", + "rocket_codegen", + "rocket_http", + "serde", + "serde_json", + "state", + "tempfile", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "ubyte", + "version_check", + "yansi 0.5.1", +] + +[[package]] +name = "rocket_codegen" +version = "0.5.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7093353f14228c744982e409259fb54878ba9563d08214f2d880d59ff2fc508b" +dependencies = [ + "devise", + "glob", + "indexmap 1.9.3", + "proc-macro2 1.0.82", + "quote 1.0.36", + "rocket_http", + "syn 2.0.64", + "unicode-xid 0.2.4", +] + +[[package]] +name = "rocket_cors" +version = "0.6.0-alpha2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b12771b47f52e34d5d0e0e444aeba382863e73263cb9e18847e7d5b74aa2cbd0" +dependencies = [ + "http", + "log", + "regex", + "rocket", + "serde", + "serde_derive", + "unicase", + "unicase_serde", + "url", +] + +[[package]] +name = "rocket_http" +version = "0.5.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936012c99162a03a67f37f9836d5f938f662e26f2717809761a9ac46432090f4" +dependencies = [ + "cookie", + "either", + "futures", + "http", + "hyper", + "indexmap 1.9.3", + "log", + "memchr", + "pear", + "percent-encoding", + "pin-project-lite", + "ref-cast", + "serde", + "smallvec", + "stable-pattern", + "state", + "time", + "tokio", + "uncased", +] + +[[package]] +name = "rstest" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5316d2a1479eeef1ea21e7f9ddc67c191d497abc8fc3ba2467857abbb68330" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04a9df72cc1f67020b0d63ad9bfe4a323e459ea7eb68e03bd9824db49f9a4c25" +dependencies = [ + "cfg-if 1.0.0", + "glob", + "proc-macro2 1.0.82", + "quote 1.0.36", + "regex", + "relative-path", + "rustc_version", + "syn 2.0.64", + "unicode-ident", +] + +[[package]] +name = "rusqlite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +dependencies = [ + "bitflags 1.3.2", + "chrono", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "serde_json", + "smallvec", +] + +[[package]] +name = "rust-embed" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e7d90385b59f0a6bf3d3b757f3ca4ece2048265d70db20a2016043d4509a40" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3d8c6fd84090ae348e63a84336b112b5c3918b3bf0493a581f7bd8ee623c29" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "rust-embed-utils", + "shellexpand", + "syn 2.0.64", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "873feff8cb7bf86fdf0a71bb21c95159f4e4a37dd7a4bd1855a940909b583ada" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "schemars" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" +dependencies = [ + "chrono", + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "serde_derive_internals", + "syn 1.0.109", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" + +[[package]] +name = "serde" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_default" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd4c77b86d9fb10363e52607ca6dc3043d8dfde6c790b702ed4ffafb34e7b99" +dependencies = [ + "darling", + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 1.0.109", +] + +[[package]] +name = "serde_derive" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b21f559e07218024e7e9f90f96f601825397de0e25420135f7f952453fed0b" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shell32-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs 4.0.0", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote 1.0.36", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable-pattern" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045" +dependencies = [ + "memchr", +] + +[[package]] +name = "state" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +dependencies = [ + "loom", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.13", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe" +dependencies = [ + "deranged", + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.5", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.13", +] + +[[package]] +name = "toml_datetime" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.15", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.0.2", + "toml_datetime", + "winnow 0.5.15", +] + +[[package]] +name = "toml_edit" +version = "0.22.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.8", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "twoway" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" +dependencies = [ + "memchr", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ubyte" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6" +dependencies = [ + "serde", +] + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.0", + "tempfile", + "winapi 0.3.9", +] + +[[package]] +name = "uncased" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68" +dependencies = [ + "serde", + "version_check", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicase_serde" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1" +dependencies = [ + "serde", + "unicase", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "uuid" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac5efe5cb0fa14ec2f84f83c701c562ee63f6dcc680861b21d65c682adfb05f" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote 1.0.36", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 2.0.64", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "watchers" +version = "0.2.7" +dependencies = [ + "anyhow", + "async-trait", + "aw-client-rust", + "chrono", + "dirs 5.0.1", + "gethostname", + "log", + "regex", + "rstest", + "serde", + "serde_default", + "serde_json", + "tempfile", + "tokio", + "toml 0.8.13", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "wayland-protocols-wlr", + "x11rb", + "zbus", +] + +[[package]] +name = "wayland-backend" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4" +dependencies = [ + "cc", + "downcast-rs", + "nix 0.26.4", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3" +dependencies = [ + "bitflags 2.4.0", + "nix 0.26.4", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.4.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.4.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.4.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c" +dependencies = [ + "proc-macro2 1.0.82", + "quick-xml", + "quote 1.0.36", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "x11rb" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +dependencies = [ + "gethostname", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yansi" +version = "1.0.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377" + +[[package]] +name = "zbus" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5915716dff34abef1351d2b10305b019c8ef33dcf6c72d31a6e227d5d9d7a21" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener 5.3.0", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.28.0", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fceb36d0c1c4a6b98f3ce40f410e64e5a134707ed71892e1b178abc4c695d4" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] + +[[package]] +name = "zvariant" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877ef94e5e82b231d2a309c531f191a8152baba8241a7939ee04bd76b0171308" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ca98581cc6a8120789d8f1f0997e9053837d6aa5346cbb43454d7121be6e39" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75fa7291bdd68cd13c4f97cc9d78cbf16d96305856dfc7ac942aeff4c2de7d5a" +dependencies = [ + "proc-macro2 1.0.82", + "quote 1.0.36", + "syn 1.0.109", +] diff --git a/pkgs/awatcher.nix b/pkgs/awatcher.nix new file mode 100644 index 0000000..17b21c3 --- /dev/null +++ b/pkgs/awatcher.nix @@ -0,0 +1,54 @@ +# --- parts/pkgs/awatcher.nix +# +# Author: tsandrini +# URL: https://github.com/tsandrini/tensorfiles +# License: MIT +# +# 888 .d888 d8b 888 +# 888 d88P" Y8P 888 +# 888 888 888 +# 888888 .d88b. 88888b. .d8888b .d88b. 888d888 888888 888 888 .d88b. .d8888b +# 888 d8P Y8b 888 "88b 88K d88""88b 888P" 888 888 888 d8P Y8b 88K +# 888 88888888 888 888 "Y8888b. 888 888 888 888 888 888 88888888 "Y8888b. +# Y88b. Y8b. 888 888 X88 Y88..88P 888 888 888 888 Y8b. X88 +# "Y888 "Y8888 888 888 88888P' "Y88P" 888 888 888 888 "Y8888 88888P' +{ lib +, rustPlatform +, fetchFromGitHub +, pkg-config +, openssl +, ... +}: +rustPlatform.buildRustPackage rec { + pname = "awatcher"; + version = "0.2.7"; + + src = fetchFromGitHub { + owner = "2e3s"; + repo = pname; + rev = "v${version}"; + hash = "sha256-e65QDbK55q1Pbv/i7bDYRY78jgEUD1q6TLdKD8Gkswk="; + }; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ openssl ]; + + # NOTE needed due to Cargo.lock containing git dependencies + cargoLock = { + lockFile = ./awatcher.Cargo.lock; + outputHashes = { + "aw-client-rust-0.1.0" = "sha256-fCjVfmjrwMSa8MFgnC8n5jPzdaqSmNNdMRaYHNbs8Bo="; + }; + }; + + meta = with lib; { + description = "Awatcher is a window activity and idle watcher for ActivityWatcher with an optional tray and UI for statistics."; + homepage = "https://github.com/2e3s/awatcher"; + changelog = "https://github.com/2e3s/awatcher/releases/tag/${version}"; + license = licenses.mpl20; + maintainers = with tensorfiles.maintainers; [ tsandrini ]; + platforms = platforms.linux; + mainProgram = pname; + }; +} diff --git a/pkgs/bisq2.nix b/pkgs/bisq2.nix new file mode 100644 index 0000000..eb15794 --- /dev/null +++ b/pkgs/bisq2.nix @@ -0,0 +1,166 @@ +{ stdenvNoCC +, lib +, makeWrapper +, runtimeShell +, fetchurl +, makeDesktopItem +, copyDesktopItems +, imagemagick +, jdk23 +, dpkg +, writeShellScript +, bash +, tor +, zip +, gnupg +, +}: +let + version = "2.1.2"; + + jdk = jdk23.override { enableJavaFX = true; }; + + bisq-launcher = args: + writeShellScript "bisq-launcher" '' + # This is just a comment to convince Nix that Tor is a + # runtime dependency; The Tor binary is in a *.jar file, + # whereas Nix only scans for hashes in uncompressed text. + # ${lib.getExe' tor "tor"} + + rm -fR $HOME/.local/share/Bisq2/tor + + exec "${lib.getExe jdk}" -Djpackage.app-version=@version@ -classpath @out@/lib/app/desktop-app-launcher.jar:@out@/lib/app/* ${args} bisq.desktop_app_launcher.DesktopAppLauncher "$@" + ''; + + # A given release will be signed by either Alejandro Garcia or Henrik Jannsen + # as indicated in the file + # https://github.com/bisq-network/bisq2/releases/download/v${version}/signingkey.asc + publicKey = + { + "E222AA02" = fetchurl { + url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/E222AA02.asc"; + sha256 = "sha256-31uBpe/+0QQwFyAsoCt1TUWRm0PHfCFOGOx1M16efoE="; + }; + + "387C8307" = fetchurl { + url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/387C8307.asc"; + sha256 = "sha256-PrRYZLT0xv82dUscOBgQGKNf6zwzWUDhriAffZbNpmI="; + }; + }."387C8307"; +in +stdenvNoCC.mkDerivation rec { + inherit version; + + pname = "bisq2"; + + src = fetchurl { + url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/Bisq-${version}.deb"; + sha256 = "0zgv70xlz3c9mrwmiaa1dgagbc441ppk2vrkgard8zjrvk8rg7va"; + + # Verify the upstream Debian package prior to extraction. + # See https://bisq.wiki/Bisq_2#Installation + # This ensures that a successful build of this Nix package requires the Debian + # package to pass verification. + nativeBuildInputs = [ gnupg ]; + downloadToTemp = true; + + postFetch = '' + pushd $(mktemp -d) + export GNUPGHOME=./gnupg + mkdir -m 700 -p $GNUPGHOME + ln -s $downloadedFile ./Bisq-${version}.deb + ln -s ${signature} ./signature.asc + gpg --import ${publicKey} + gpg --batch --verify signature.asc Bisq-${version}.deb + popd + mv $downloadedFile $out + ''; + }; + + signature = fetchurl { + url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/Bisq-${version}.deb.asc"; + sha256 = "sha256-WZhI8RDmb7nQqpCQJM86vrp8qQNg+mvRVdSPcDqgzxE="; + }; + + nativeBuildInputs = [ + copyDesktopItems + dpkg + imagemagick + makeWrapper + zip + gnupg + makeWrapper + ]; + + desktopItems = [ + (makeDesktopItem { + name = "bisq2"; + exec = "bisq2"; + icon = "bisq2"; + desktopName = "Bisq 2"; + genericName = "Decentralized bitcoin exchange"; + categories = [ + "Network" + "P2P" + ]; + }) + + (makeDesktopItem { + name = "bisq2-hidpi"; + exec = "bisq2-hidpi"; + icon = "bisq2"; + desktopName = "Bisq 2 (HiDPI)"; + genericName = "Decentralized bitcoin exchange"; + categories = [ + "Network" + "P2P" + ]; + }) + ]; + + unpackPhase = '' + dpkg -x $src . + ''; + + buildPhase = '' + # Replace the Tor binary embedded in tor.jar (which is in the zip archive tor.zip) + # with the Tor binary from Nixpkgs. + + makeWrapper ${lib.getExe' tor "tor"} ./tor + zip tor.zip ./tor + zip opt/bisq2/lib/app/tor.jar tor.zip + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib $out/bin + cp -r opt/bisq2/lib/app $out/lib + + install -D -m 777 ${bisq-launcher ""} $out/bin/bisq2 + substituteAllInPlace $out/bin/bisq2 + + install -D -m 777 ${bisq-launcher "-Dglass.gtk.uiScale=2.0"} $out/bin/bisq2-hidpi + substituteAllInPlace $out/bin/bisq2-hidpi + + for n in 16 24 32 48 64 96 128 256; do + size=$n"x"$n + magick convert opt/bisq2/lib/Bisq2.png -resize $size bisq2.png + install -Dm644 -t $out/share/icons/hicolor/$size/apps bisq2.png + done; + + runHook postInstall + ''; + + meta = with lib; { + description = "Decentralized bitcoin exchange network"; + homepage = "https://bisq.network"; + mainProgram = "bisq2"; + sourceProvenance = with sourceTypes; [ + binaryBytecode + ]; + license = licenses.mit; + maintainers = with maintainers; [ emmanuelrosa ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/dbeaver.nix b/pkgs/dbeaver.nix new file mode 100644 index 0000000..9c3931b --- /dev/null +++ b/pkgs/dbeaver.nix @@ -0,0 +1,129 @@ +{ lib +, stdenvNoCC +, fetchurl +, undmg +, makeWrapper +, openjdk17 +, gnused +, autoPatchelfHook +, wrapGAppsHook3 +, gtk3 +, glib +, webkitgtk_4_0 +, glib-networking +, override_xmx ? "1024m" +, +}: +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "dbeaver-bin"; + version = "24.2.5"; + + src = + let + inherit (stdenvNoCC.hostPlatform) system; + selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}"); + suffix = selectSystem { + x86_64-linux = "linux.gtk.x86_64-nojdk.tar.gz"; + aarch64-linux = "linux.gtk.aarch64-nojdk.tar.gz"; + x86_64-darwin = "macos-x86_64.dmg"; + aarch64-darwin = "macos-aarch64.dmg"; + }; + hash = selectSystem { + x86_64-linux = "sha256-LnJq23o60c+Ys0V46esP1bIkcnzj26hQUBu3Ut9bMJM="; + aarch64-linux = ""; + x86_64-darwin = ""; + aarch64-darwin = ""; + }; + in + fetchurl { + url = "https://github.com/dbeaver/dbeaver/releases/download/${finalAttrs.version}/dbeaver-ce-${finalAttrs.version}-${suffix}"; + inherit hash; + }; + + sourceRoot = lib.optional stdenvNoCC.hostPlatform.isDarwin "DBeaver.app"; + + nativeBuildInputs = + [ makeWrapper ] + ++ lib.optionals (!stdenvNoCC.hostPlatform.isDarwin) [ + gnused + wrapGAppsHook3 + autoPatchelfHook + ] + ++ lib.optionals stdenvNoCC.hostPlatform.isDarwin [ undmg ]; + + dontConfigure = true; + dontBuild = true; + + prePatch = '' + substituteInPlace ${lib.optionalString stdenvNoCC.hostPlatform.isDarwin "Contents/Eclipse/"}dbeaver.ini \ + --replace-fail '-Xmx1024m' '-Xmx${override_xmx}' + ''; + + installPhase = + if !stdenvNoCC.hostPlatform.isDarwin + then '' + runHook preInstall + + mkdir -p $out/opt/dbeaver $out/bin + cp -r * $out/opt/dbeaver + makeWrapper $out/opt/dbeaver/dbeaver $out/bin/dbeaver \ + --prefix PATH : "${openjdk17}/bin" \ + --set JAVA_HOME "${openjdk17.home}" \ + --prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules" \ + --prefix LD_LIBRARY_PATH : "$out/lib:${ + lib.makeLibraryPath [ + gtk3 + glib + webkitgtk_4_0 + glib-networking + ] + }" + + mkdir -p $out/share/icons/hicolor/256x256/apps + ln -s $out/opt/dbeaver/dbeaver.png $out/share/icons/hicolor/256x256/apps/dbeaver.png + + mkdir -p $out/share/applications + ln -s $out/opt/dbeaver/dbeaver-ce.desktop $out/share/applications/dbeaver.desktop + + substituteInPlace $out/opt/dbeaver/dbeaver-ce.desktop \ + --replace-fail "/usr/share/dbeaver-ce/dbeaver.png" "dbeaver" \ + --replace-fail "/usr/share/dbeaver-ce/dbeaver" "$out/bin/dbeaver" + + sed -i '/^Path=/d' $out/share/applications/dbeaver.desktop + + runHook postInstall + '' + else '' + runHook preInstall + + mkdir -p $out/{Applications/dbeaver.app,bin} + cp -R . $out/Applications/dbeaver.app + makeWrapper $out/{Applications/dbeaver.app/Contents/MacOS,bin}/dbeaver \ + --prefix PATH : "${openjdk17}/bin" \ + --set JAVA_HOME "${openjdk17.home}" + + runHook postInstall + ''; + + passthru.updateScript = ./update.sh; + + meta = with lib; { + homepage = "https://dbeaver.io/"; + description = "Universal SQL Client for developers, DBA and analysts. Supports MySQL, PostgreSQL, MariaDB, SQLite, and more"; + longDescription = '' + Free multi-platform database tool for developers, SQL programmers, database + administrators and analysts. Supports all popular databases: MySQL, + PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, + Teradata, Firebird, Derby, etc. + ''; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + license = licenses.asl20; + platforms = platforms.linux ++ platforms.darwin; + maintainers = with maintainers; [ + gepbird + mkg20001 + yzx9 + ]; + mainProgram = "dbeaver"; + }; +}) diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 0000000..8db49aa --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,26 @@ +{ pkgs +, lib +, config +, ... +}: +let + # list paths + pkgs-paths-list = lib.fileset.toList (lib.fileset.fromSource (lib.sources.sourceFilesBySuffices ./. [ ".nix" ])); + # no default.nix + filtered-paths-list = builtins.filter (path: builtins.baseNameOf path != "default.nix") pkgs-paths-list; + # filename-extension parsed out + pkgs-paths = + builtins.map + (path: { + name = lib.strings.removeSuffix ".nix" (builtins.baseNameOf path); + path = path; + }) + filtered-paths-list; + # import each path + imported-pkgs = lib.attrsets.mergeAttrsList (builtins.map + (pkg: { + "${pkg.name}" = pkgs.callPackage pkg.path { }; + }) + pkgs-paths); +in +imported-pkgs diff --git a/pkgs/emacs-lsp-booster.nix b/pkgs/emacs-lsp-booster.nix new file mode 100644 index 0000000..40a87bf --- /dev/null +++ b/pkgs/emacs-lsp-booster.nix @@ -0,0 +1,28 @@ +{ fetchFromGitHub +, rustPlatform +, lib +, ... +}: +rustPlatform.buildRustPackage rec { + pname = "emacs-lsp-booster"; + version = "0.2.1"; + cargoHash = "sha256-CvIJ56QrIzQULFeXYQXTpX9PoGx1/DWtgwzfJ+mljEI="; + + src = fetchFromGitHub { + owner = "blahgeek"; + repo = pname; + rev = "v${version}"; + sha256 = "uP/xJfXQtk8oaG5Zk+dw+C2fVFdjpUZTDASFuj1+eYs="; + }; + + doCheck = false; # slow as heck, and likely unneded + + meta = with lib; { + description = "Improve performance of Emacs LSP servers by converting JSON to bytecode"; + homepage = "https://github.com/${src.owner}/${pname}"; + changelog = "https://github.com/${src.owner}/${pname}/releases/tag/${version}"; + license = [ licenses.mit ]; + maintainers = [ ]; + mainProgram = "emacs-lsp-booster"; + }; +} diff --git a/pkgs/kexec-pkgs b/pkgs/kexec-pkgs new file mode 100644 index 0000000..e69de29 diff --git a/pkgs/spotube.nix b/pkgs/spotube.nix new file mode 100644 index 0000000..cc03605 --- /dev/null +++ b/pkgs/spotube.nix @@ -0,0 +1,72 @@ +{ lib +, stdenv +, fetchurl +, autoPatchelfHook +, dpkg +, makeWrapper +, wrapGAppsHook +, libappindicator +, libnotify +, libsecret +, mpv-unwrapped +, xdg-user-dirs +, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "spotube"; + version = "3.4.0"; + + src = fetchurl { + url = "https://github.com/KRTirtho/spotube/releases/download/v${finalAttrs.version}/Spotube-linux-x86_64.deb"; + hash = "sha256-XBciTNWsmaY1C8ji+SCWWP/M/uIDZHM9fi9wucHJsBY="; + }; + + nativeBuildInputs = [ + autoPatchelfHook + dpkg + makeWrapper + wrapGAppsHook + ]; + + buildInputs = [ + libappindicator + libnotify + libsecret + mpv-unwrapped + ]; + + dontWrapGApps = true; + + installPhase = '' + runHook preInstall + mkdir -p $out + mv usr/* $out + runHook postInstall + ''; + + preFixup = '' + patchelf $out/share/spotube/lib/libmedia_kit_native_event_loop.so \ + --replace-needed libmpv.so.1 libmpv.so.2 + ''; + + postFixup = '' + makeWrapper $out/share/spotube/spotube $out/bin/spotube \ + "''${gappsWrapperArgs[@]}" \ + --prefix LD_LIBRARY_PATH : $out/share/spotube/lib:${lib.makeLibraryPath [mpv-unwrapped]} \ + --prefix PATH : ${lib.makeBinPath [xdg-user-dirs]} + ''; + + meta = { + changelog = "https://github.com/KRTirtho/spotube/blob/v${finalAttrs.version}/CHANGELOG.md"; + description = "An open source Spotify client"; + longDescription = '' + Spotube is an open source, cross-platform Spotify client that + doesn't require Premium nor uses Electron + ''; + homepage = "https://spotube.netlify.app/"; + license = lib.licenses.bsdOriginal; + maintainers = with lib.maintainers; [ tomasajt ]; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; +}) diff --git a/pkgs/update-zen-browser.sh b/pkgs/update-zen-browser.sh new file mode 100755 index 0000000..18092e9 --- /dev/null +++ b/pkgs/update-zen-browser.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -exuo pipefail + +info=zen-browser.json +latestVersion=$(curl -s "https://api.github.com/repos/zen-browser/desktop/releases/latest" | jq --raw-output '.tag_name | sub("^v"; "")') +currentVersion=$(jq -r '.version' "$info") + +if [[ "$currentVersion" == "$latestVersion" ]]; then + exit 0 +fi + +url="https://github.com/zen-browser/desktop/releases/download/$latestVersion/zen-x86_64.AppImage" + +hash=$(nix-prefetch-url --type sha256 "$url" | xargs nix hash to-sri --type sha256) + +jq --arg version "$latestVersion" \ + --arg hash "$hash" \ + '.version = $version | .hash = $hash' \ + "$info" >"${info}.tmp" + +mv "${info}.tmp" "$info" diff --git a/pkgs/xmrig-donate-level.patch b/pkgs/xmrig-donate-level.patch new file mode 100644 index 0000000..3aaae3e --- /dev/null +++ b/pkgs/xmrig-donate-level.patch @@ -0,0 +1,12 @@ +diff --git a/src/donate.h b/src/donate.h +--- a/src/donate.h ++++ b/src/donate.h +@@ -46,6 +46,6 @@ + */ +-constexpr const int kDefaultDonateLevel = 1; +-constexpr const int kMinimumDonateLevel = 1; ++constexpr const int kDefaultDonateLevel = @donateLevel@; ++constexpr const int kMinimumDonateLevel = @donateLevel@; + + + #endif /* XMRIG_DONATE_H */ diff --git a/pkgs/zen-browser.json b/pkgs/zen-browser.json new file mode 100644 index 0000000..e268036 --- /dev/null +++ b/pkgs/zen-browser.json @@ -0,0 +1,4 @@ +{ + "version": "1.7.6b", + "hash": "sha256-GJuxooMV6h3xoYB9hA9CaF4g7JUIJ2ck5/hiQp89Y5o=" +} diff --git a/pkgs/zen-browser.nix b/pkgs/zen-browser.nix new file mode 100644 index 0000000..a85d0a7 --- /dev/null +++ b/pkgs/zen-browser.nix @@ -0,0 +1,37 @@ +{ lib +, appimageTools +, fetchurl +, +}: +let + pname = "zen-browser"; + metadata = builtins.fromJSON (builtins.readFile ./zen-browser.json); + version = metadata.version; + + src = fetchurl { + url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen-x86_64.AppImage"; + hash = metadata.hash; + }; + + extracted = appimageTools.extract { + inherit pname version src; + }; +in +appimageTools.wrapType2 { + inherit pname version src; + + extraInstallCommands = '' + install -Dm 644 ${extracted}/zen.desktop $out/share/applications/zen.desktop + install -Dm 644 {${extracted}/usr/,$out}/share/icons/hicolor/128x128/apps/zen.png + substituteInPlace $out/share/applications/zen.desktop --replace-fail 'Exec=zen' 'Exec=${pname}' + ''; + + updateScript = ./update.sh; + + meta = with lib; { + description = "Experience tranquillity while browsing the web without people tracking you!"; + homepage = "https://zen-browser.app"; + license = licenses.mpl20; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/push_cache.sh b/push_cache.sh new file mode 100755 index 0000000..2ffeb5f --- /dev/null +++ b/push_cache.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env fish + +nix copy --substitute-on-destination --to ssh://root@he4 /run/booted-system +nix copy --substitute-on-destination --to ssh://root@he4 /run/current-system +nix copy --substitute-on-destination --to ssh://root@he4 /nix/var/nix/profiles/system diff --git a/secrets/autoimport/oeko-smb.age b/secrets/autoimport/oeko-smb.age new file mode 100644 index 0000000..2b1abc6 --- /dev/null +++ b/secrets/autoimport/oeko-smb.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> X25519 jFG9C82DItvSb+SOksANAGlXUtWZZlX8Ra4izwnRY0E +5uXroeBf4xIRpP1EGL7MRaJzAHuBOfma+REDL0feths +-> a$E_@*{-grease +uVrpLCr1m6U +--- 3mlDCxkEduHqb7pKtSjiApbNsVUcPInKHNu3CgEMYtM +IA`;JJPgX`JTɗ ssh-ed25519 MF6k1Q anxlHZVUMoBs6OwR6PyOUtYwO2vHAfKQnyG3863r9Tw +CesSIeCpIWCJwJhMh9WehNXVNbmrj3pqh5Tx5kUuvg8 +-> 8{S'rs-grease 8WdWqhw x,dBQ& +wq1S08nFpLYcK79a6VUzWXEmt+LRwFzWhKJurnqfEWeEouLipLYqVGDTHR1csFTk +rABA0BFZVCEJfXA +--- HXgrXmDf5iA92//WzKgOTWAj9c11ihHASTmP4Y0VrkI + #CKGcoºx#9 +VU" + |/=ߺ<OqӡIq}?+o> +~~4Vx{3zM&GQ9.Ic:~}/<_5;| _o%XQ.1ʱ \ No newline at end of file diff --git a/secrets/rekeyed/nixos-desk/5a9bd6653feb487684bb1ed6bee279cf-tristand_passwd_hash.age b/secrets/rekeyed/nixos-desk/5a9bd6653feb487684bb1ed6bee279cf-tristand_passwd_hash.age new file mode 100644 index 0000000..aa6da30 --- /dev/null +++ b/secrets/rekeyed/nixos-desk/5a9bd6653feb487684bb1ed6bee279cf-tristand_passwd_hash.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 MF6k1Q 2HucQQQNnyJE0kn4RuuUgwQIGdXU4d/DszhFtZOa4Q8 +v+ENtdglbejsSDmyNSsYd57E8ecDO8Ghuk7ZISgCSLQ +-> DafUPnwm-grease oZbxI; pw\ }|o)!89d|zi*R9F(Wd{ze8<ez Îyh \ No newline at end of file diff --git a/secrets/rekeyed/nixos-desk/6fd920ff7e54c258d64fc2abb5930dc6-oeko-smb.age b/secrets/rekeyed/nixos-desk/6fd920ff7e54c258d64fc2abb5930dc6-oeko-smb.age new file mode 100644 index 0000000..0005539 --- /dev/null +++ b/secrets/rekeyed/nixos-desk/6fd920ff7e54c258d64fc2abb5930dc6-oeko-smb.age @@ -0,0 +1,7 @@ +age-encryption.org/v1 +-> ssh-ed25519 MF6k1Q yoBilB1k3lGv86kA5ZsVT96u9fem7ixI74U0nHXH0RQ +T6Tn+92NMyOaFN37KfgNW2MMCwOyQwzV+qZx82Xv1qI +-> Y7Gy(6L-grease 2IDyf#6" +4iPvuA/ID+9KQIqzYuK9 +--- galOUJ+zWFZJIsyO9rk9mhfQEy1LXrX+jrbPVOVnX+c +rK3Kl"Q&;;^❓Ӗ<ڿñi+n;j9ΧO>Q7~$6\ \ No newline at end of file diff --git a/secrets/rekeyed/nixos-fw16/3f7ba2027615b520a68df8c74eba9558-tester_passwd_hash.age b/secrets/rekeyed/nixos-fw16/3f7ba2027615b520a68df8c74eba9558-tester_passwd_hash.age new file mode 100644 index 0000000..ecbaa2c Binary files /dev/null and b/secrets/rekeyed/nixos-fw16/3f7ba2027615b520a68df8c74eba9558-tester_passwd_hash.age differ diff --git a/secrets/rekeyed/nixos-fw16/d4ebce9353c576be067a9832580d7899-tristand_passwd_hash.age b/secrets/rekeyed/nixos-fw16/d4ebce9353c576be067a9832580d7899-tristand_passwd_hash.age new file mode 100644 index 0000000..afe3bb6 --- /dev/null +++ b/secrets/rekeyed/nixos-fw16/d4ebce9353c576be067a9832580d7899-tristand_passwd_hash.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 MqgTQA kHKU7lp3SvhVlgDk8qBbQU+nrV8O84CLtR32ZGATDw4 +1E9KyKzKwio7ltF1H36tSLWSao0TPNNlbwJAwxhw3CI +-> +&-grease +y1YrcXJ8+mGdSTrJywOZM/E8jbHPSX9rARC6uKOHgESGkH1NWsINbEk0/1fYHi62 +6Y+k9Ig9oX7taekoNCU +--- lgK5w16T9LaMc6yoWW+h+zVNyuKuoEoeJi8p7lura1Q +X +&bZ[IC>ԘОWp? [-]) HY(u/ݰɖ^摨@9xVG.n 9RrxzJfw KzbqZ֩fF =P \ No newline at end of file diff --git a/secrets/rekeyed/nixos-fw16/d9071a3e62472d160241e0d2497a3b57-oeko-smb.age b/secrets/rekeyed/nixos-fw16/d9071a3e62472d160241e0d2497a3b57-oeko-smb.age new file mode 100644 index 0000000..9c97c4f --- /dev/null +++ b/secrets/rekeyed/nixos-fw16/d9071a3e62472d160241e0d2497a3b57-oeko-smb.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> ssh-ed25519 MqgTQA 7y3on/Y6P89gncEtSzn6dak659D+C0jT0Lo711yQaQ0 +bsILI8jRG8MFJ2xSowtYyNYHPbcZmS+OFBbTrn7vNgo +-> a-grease /3 +faRjVzpKpTOBeDIZVd+uK9AGzVH7LYbIH3QiTZMHE+zE21fI6yjGEQyIE2jsVhTq +q/PxcbNtJ9fZ2JCU43lGX7DveIYT7Z84vX955I3BkIppgQ4 +--- dNDrqjg89dlNEf3ZkyW0fU7OyETfVPtRAw7JcRJxQ1o +Cد DXo؂?9uiݔsrީwyB~umȹ3DMb2tj`zDX \ No newline at end of file diff --git a/secrets/rekeyed/nixos-pulse/860f265709b94c51230d4a562fe86d9f-tester_passwd_hash.age b/secrets/rekeyed/nixos-pulse/860f265709b94c51230d4a562fe86d9f-tester_passwd_hash.age new file mode 100644 index 0000000..8943b43 --- /dev/null +++ b/secrets/rekeyed/nixos-pulse/860f265709b94c51230d4a562fe86d9f-tester_passwd_hash.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> X25519 OFjbqRctUAtGyBEVWBsqkxAqEFBEjqPsAAihBE7Gphs +QG/gC3m+L6wqvlX+Dz/folLwnPuj/U8rV5IfMHe8dg4 +-> Sw-grease Q+i0n ScImd sozfa J4C^w\;J +1d5CjCdcl7c61CQqrjoxPnEeByXRxGfzjDgS/RT/Dws +--- MsWiJ70U6l6jdNJFpk0I86Zg0RL976YNqzVXkIjOZio +e>?a@ {'z=X<M< ĺݏN  G4\)@y˽߈Q +{53J.)JbfIX5S~&kMV-My]C(Z?6b<m3 \ No newline at end of file diff --git a/secrets/rekeyed/nixos-pulse/ded7886761a466160672cff446b26a21-tristand_passwd_hash.age b/secrets/rekeyed/nixos-pulse/ded7886761a466160672cff446b26a21-tristand_passwd_hash.age new file mode 100644 index 0000000..c83768c --- /dev/null +++ b/secrets/rekeyed/nixos-pulse/ded7886761a466160672cff446b26a21-tristand_passwd_hash.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> X25519 xeJaD6yDB9eAHsIPOTBxy/ElEcnxWUBVOhWZpxU3DQU +jKUtEAa1TiwluihaB9P4a4wIjTAQdizwibdg2nxoGX4 +-> WQ?(7@H7-grease J} -$@ a! +IaTsmenxfDBQyH2NiMgtxknv9rxMF9k7J4FVg5o4Eji4TXS0Suf/A1RURERWKOWw +HydNZSb8HaXRplbAHlNXIJhTmFrflHzqiCokoLfyjw +--- a/z16/kiznB+4igG6xZM1cE74oJm2fG0AxNtcRWU6pk +3&]MHh XL# X25519 MTkyfchfKiSDgE7spey5A63M+HL154+9IQMME9W4+Qs +WgmrIPubkRuOaiL2Xg128YwlBC0zm745/AWnamOFw2k +-> 1*xAmJG9-grease b /e8:M +ww8Q6PpTmXLX/JUUQM9i +--- bZEquotGS4bqDJrshA0x/ayVf9dFNXLNQJzBMAo/rho +eXO"3kݙͼ۳mȱ X25519 qk4Rd7hySOiIptLofRGxAnyG3S9sv5jua60FNppGX3Y +9pglJxn8jiaFiHfYQcZwgTwSgLMeUek931YIzqB1J7U +-> LV-grease `g4 +dOXc+jLqdU+atxho8PrrhaT0IPE8ZvI1Cf2CjLSZVyri721UNW4yQSdxEOnFi/wy +LbR2iQrCTTZtL5jKYsqyMWsfq4eQK0AgE4K/r3N9jw +--- L1+iuf4GpS1uKVNZK3PTLploW4+ZU6tt+JpWjrT+yi0 +$={%=;FjkjukM6j.{Dk[Go4%A,?;$TC< \ No newline at end of file diff --git a/systems/nixos-desk/default.nix b/systems/nixos-desk/default.nix new file mode 100644 index 0000000..3ea1fd0 --- /dev/null +++ b/systems/nixos-desk/default.nix @@ -0,0 +1,150 @@ +{ confin +, lib +, pkgs +, modulesPath +, system +, inputs +, ... +}: { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + inputs.nixos-hardware.nixosModules.common-cpu-amd + inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate + inputs.nixos-hardware.nixosModules.common-gpu-amd + inputs.nixos-hardware.nixosModules.common-pc + inputs.nixos-hardware.nixosModules.common-pc-ssd + ../../os-mods/age + ../../os-mods/amdgpu + ../../os-mods/cachix + ../../os-mods/common + ../../os-mods/desktop + ../../os-mods/desktop/audio.nix + ../../os-mods/desktop/gaming.nix + ../../os-mods/desktop/printing.nix + ../../os-mods/netdata/client.nix + ../../os-mods/network + ../../os-mods/virt + ../../os-mods/xmrig + ../../users + ./disko.nix + ]; + + config = + let + # hid-fanatecff = pkgs.callPackage ./hid-fanatecff.nix { kernelPackages = config.boot.kernelPackages; }; + in + { + system.stateVersion = "23.05"; + age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINHvqEPN39Brd3SYJxVYROwtv0UXl/7fW6z3otUWEaEU root@nixos-desk"; + + nix.settings.system-features = [ + "benchmark" + "big-parallel" + "kvm" + "nixos-test" + "gccarch-x86-64-v3" + "gccarch-znver3" + ]; + + boot = { + # kernelPackages = pkgs.linuxPackages_latest; + # kernelPackages = pkgs.linuxPackages_zen; + + # kernelPackages = pkgs.linuxPackages_cachyos; + kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos; + kernelModules = [ "nct6775" ]; + # extraModulePackages = [ hid-fanatecff ]; + loader = { + systemd-boot = { + enable = lib.mkForce false; #lanzaboote + configurationLimit = 16; + }; + + efi.canTouchEfiVariables = true; + }; + + # TODO Extract secureboot module + lanzaboote = { + enable = true; + configurationLimit = 16; + pkiBundle = "/etc/secureboot"; + }; + + initrd = { + availableKernelModules = [ "ahci" "nvme" "xhci_pci" "uas" "usbhid" "usb_storage" "sd_mod" ]; + kernelModules = [ ]; + systemd.enable = true; + }; + }; + + programs.fuse.userAllowOther = true; + environment.systemPackages = with pkgs; [ + input-remapper + lm_sensors + sshfs + coreutils-full + cpu-x + sbctl # secureboot debugging/config/mgmt + ]; + environment.etc = { + "sysconfig/lm_sensors".text = '' + HWMON_MODULES="nct6775" + ''; + }; + + # TODO nixify current mousewheel workaround config + # likely just need to add json to home-manager + services.input-remapper.enable = true; + + services.btrfs.autoScrub.enable = true; + # services.udev.packages = [ hid-fanatecff ]; + + networking = { + # tailscale docker test + firewall.allowedTCPPorts = [ 80 443 3478 41641 ]; + firewall.allowedUDPPorts = [ 80 443 3478 41641 ]; + firewall.allowedTCPPortRanges = [ + { + from = 39000; + to = 42000; + } + { + from = 18000; + to = 19000; + } + ]; + firewall.allowedUDPPortRanges = [ + { + from = 39000; + to = 42000; + } + { + from = 18000; + to = 19000; + } + ]; + + hostName = "nixos-desk"; + useDHCP = lib.mkDefault true; + extraHosts = '' + 100.64.0.1 oekonzept.net + 100.64.0.1 camt.oekonzept.net + 100.64.0.1 camt-cbg.oekonzept.net + 100.64.0.1 camt-eth.oekonzept.net + 100.64.0.1 camt-pro.oekonzept.net + 100.64.0.1 camt-swbfk.oekonzept.net + 100.64.0.1 cloud.oekonzept.net + 100.64.0.1 office.oekonzept.net + 100.64.0.1 llama.oekonzept.net + 100.64.0.1 netdata.oekonzept.net + 100.64.0.1 oproject.oekonzept.net + 100.64.0.1 leantime.oekonzept.net + ''; + }; + hardware = { + enableRedistributableFirmware = true; + }; + + zramSwap.enable = true; + }; +} diff --git a/systems/nixos-desk/disko.nix b/systems/nixos-desk/disko.nix new file mode 100644 index 0000000..d1b7dc3 --- /dev/null +++ b/systems/nixos-desk/disko.nix @@ -0,0 +1,192 @@ +let + cryptOpenArgs = [ + "--allow-discards" + "--perf-same_cpu_crypt" + "--perf-submit_from_crypt_cpus" + "--perf-no_read_workqueue" + "--perf-no_write_workqueue" + ]; +in +{ + disko.devices = { + disk = { + cryptboot_1 = { + type = "disk"; + device = "/dev/disk/by-id/nvme-CT1000P1SSD8_2003E28202D0"; + content = { + type = "gpt"; + partitions = { + luks = { + # size = "831.5G"; + end = "-100G"; + # label = "Linux LUKS"; + type = "8309"; + content = { + type = "luks"; + name = "cryptboot_1"; + extraOpenArgs = cryptOpenArgs; + passwordFile = "/tmp/secret.key"; + additionalKeyFiles = [ ]; + # content is empty here as the btrfs partition will be created via extraArgs of the cryptroot_1 partition def + }; + }; + luksSwap = { + size = "32G"; + content = { + type = "luks"; + name = "cryptswap_1"; + extraOpenArgs = cryptOpenArgs; + passwordFile = "/tmp/secret.key"; + additionalKeyFiles = [ ]; + content = { + type = "swap"; + }; + }; + }; + }; + }; + }; + cryptboot_0 = { + type = "disk"; + device = "/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_1TB_S4EWNX0NB42209Z"; + content = { + type = "gpt"; + partitions = { + luks = { + # size = "831.5G"; + end = "-100G"; + # label = "Linux LUKS"; + type = "8309"; + content = { + type = "luks"; + name = "cryptboot_0"; + extraOpenArgs = cryptOpenArgs; + passwordFile = "/tmp/secret.key"; + additionalKeyFiles = [ ]; + content = { + # this partiton needs to be in the last parent part alphabetically to ensure the referenced dev already exists + type = "btrfs"; + extraArgs = [ + "-L cryptboot_btrfs" + "-f" + "-m raid1" + "-d raid1" + "/dev/mapper/cryptboot_0" + ]; + subvolumes = { + "/" = { + mountpoint = "/media/@btrfsroot"; + mountOptions = [ + "rw" + "autodefrag" + "compress=zstd" + "discard=async" + "relatime" + "space_cache=v2" + "ssd" + ]; + }; + "/_active" = { }; + "/_active/rootvol" = { }; + "/_active/pkgvol" = { }; + "/_active/nix_rootvol" = { + mountpoint = "/"; + mountOptions = [ + "rw" + "autodefrag" + "compress=zstd" + "discard=async" + "relatime" + "space_cache=v2" + "ssd" + ]; + }; + "/_active/homevol" = { + mountpoint = "/home"; + mountOptions = [ + "rw" + "autodefrag" + "compress=zstd" + "discard=async" + "relatime" + "space_cache=v2" + "ssd" + ]; + }; + "/_active/nixvol" = { + mountpoint = "/nix"; + mountOptions = [ + "rw" + "autodefrag" + "compress=zstd" + "discard=async" + "relatime" + "space_cache=v2" + "ssd" + ]; + }; + }; + }; + }; + }; + ESP = { + label = "EFI_0"; + name = "ESP"; + size = "1024M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "rw" + "relatime" + "fmask=0022" + "dmask=0022" + "codepage=437" + "iocharset=ascii" + "shortname=mixed" + "utf8" + "errors=remount-ro" + ]; + }; + }; + }; + }; + }; + sandisk = { + type = "disk"; + device = "/dev/disk/by-id/ata-SanDisk_SDSSDH3_4T00_211011800267"; + content = { + type = "gpt"; + partitions = { + luks = { + # ~size = "3.4T"; + end = "-250G"; + label = "SanDisk"; + type = "8300"; + content = { + type = "btrfs"; + extraArgs = [ ]; + subvolumes = { + "/" = { + mountpoint = "/media/SanDisk"; + mountOptions = [ + "rw" + "autodefrag" + "compress=zstd" + "discard=async" + "relatime" + "space_cache=v2" + "ssd" + ]; + }; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/systems/nixos-fw16/default.nix b/systems/nixos-fw16/default.nix new file mode 100644 index 0000000..a9f0720 --- /dev/null +++ b/systems/nixos-fw16/default.nix @@ -0,0 +1,301 @@ +{ config +, lib +, pkgs +, modulesPath +, system +, inputs +, ... +}: { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + inputs.nixos-hardware.nixosModules.common-hidpi + inputs.nixos-hardware.nixosModules.framework-16-7040-amd + ../../os-mods/age + ../../os-mods/net_disks/oeko.nix + ../../os-mods/amdgpu + ../../os-mods/cachix + ../../os-mods/common + ../../os-mods/desktop + ../../os-mods/desktop/audio.nix + ../../os-mods/desktop/gaming.nix + ../../os-mods/desktop/printing.nix + ../../os-mods/netdata/client.nix + ../../os-mods/network + # ../../os-mods/ryzenapu + ../../os-mods/virt + ../../users + ./disks.nix + ]; + + age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16"; + nix.settings.builders-use-substitutes = true; + nix.distributedBuilds = true; + nix.buildMachines = [ ]; + # [ + # { + # hostName = "nixremote@nixos-desk"; + # system = "x86_64-linux"; + # protocol = "ssh"; + # maxJobs = 0; + # speedFactor = 0; + # supportedFeatures = [ + # "benchmark" + # "big-parallel" + # "kvm" + # "nixos-test" + # "gccarch-x86-64-v3" + # "gccarch-znver3" + # ]; + # mandatoryFeatures = [ ]; + # } + # { + # hostName = "nixremote@nixos-pulse"; + # system = "x86_64-linux"; + # protocol = "ssh"; + # maxJobs = 0; + # speedFactor = 1; + # supportedFeatures = [ + # "benchmark" + # "big-parallel" + # "kvm" + # "nixos-test" + # "gccarch-x86-64-v3" + # "gccarch-znver2" + # ]; + # mandatoryFeatures = [ ]; + # } + # ]; + + #################### + systemd.user = { + services.modprobed-db = { + description = "modprobed-db service to scan and store new kernel modules"; + wants = [ "modprobed-db.timer" ]; + wantedBy = [ "default.target" ]; + serviceConfig = { + ExecStart = "${pkgs.modprobed-db}/bin/modprobed-db storesilent"; + ExecStop = "${pkgs.modprobed-db}/bin/modprobed-db storesilent"; + Type = "simple"; + }; + path = builtins.attrValues { + inherit (pkgs) gawk getent coreutils gnugrep gnused kmod; + }; + }; + timers.modprobed-db = { + wantedBy = [ "timers.target" ]; + partOf = [ "modprobed-db.service" ]; + timerConfig = { + Persistent = true; + OnUnitActiveSec = "1h"; + }; + }; + }; + ################ + + security.sudo-rs.wheelNeedsPassword = lib.mkForce true; # unneded due to fp sensor + + # Power mgmt + services.input-remapper.enable = true; + services.power-profiles-daemon.enable = true; + powerManagement.powertop.enable = true; + programs.corectrl.gpuOverclock.enable = lib.mkForce false; # TODO Check if needed + programs.adb.enable = true; + #### + + nix.settings.system-features = [ + "benchmark" + "big-parallel" + "kvm" + "nixos-test" + "gccarch-znver4" + ]; + # nixpkgs.hostPlatform.gcc.arch = "znver2"; + + chaotic = { + # scx = { + # enable = false; # temp + # scheduler = "scx_bpfland"; + # package = pkgs.scx; + # }; + nyx = { + overlay.enable = true; + # overlay.onTopOf = "user-pkgs"; # needed ? + # overlay.flakeNixpkgs.config = pkgs.config; # needed ? + }; + }; + + boot = { + # kernelPackages = pkgs.linuxPackages_latest; # bootstrap + # kernelPackages = pkgs.linuxPackages_zen; # bootstrap + # kernelPackages = pkgs.linuxPackages_cachyos; # bootstrap + # kernelPackages = pkgs.pkgsAMD64Microarchs.znver4.linuxPackages_cachyos; + + # 6.14 rc wohooo + kernelPackages = pkgs.pkgsAMD64Microarchs.znver4.linuxPackages_cachyos-rc; + + kernelPatches = [ ]; + kernelParams = [ + # "systemd.unit=emergency.target" + # "amdgpu.ppfeaturemask=0xfffd7fff" # gpu overclockfoo # TODO Readd if crashes continue 20/02/2025 + "systemd.setenv=SYSTEMD_SULOGIN_FORCE=1" + # "rescue" + "pcie_aspm=force" # TODO Check hibernate without + # "pcie_aspm.policy=powersupersave" + "rtc_cmos.use_acpi_alarm=1" # reduce S0 sleep wakeups + "gpiolib_acpi.ignore_interrupt=AMDI0009:00@9" # mask IRQ 9 ? + ]; + loader = { + timeout = 0; + systemd-boot = { + enable = false; # due to lanzaboote + configurationLimit = 12; + + memtest86.enable = true; + # bootCounting.enable = true; # reverted atm + }; + efi.canTouchEfiVariables = true; + }; + + lanzaboote = { + enable = true; + configurationLimit = 12; + # pkiBundle = "/etc/secureboot"; + pkiBundle = "/var/lib/sbctl"; + }; + initrd = { + availableKernelModules = [ + "nvme" + "xhci_pci" + "thunderbolt" + "uas" # needed ? + "usbhid" + "usb_storage" + "sd_mod" + ]; + kernelModules = [ ]; + systemd.enable = true; + }; + + extraModulePackages = [ ]; + }; + + networking = { + hostName = "nixos-fw16"; + extraHosts = '' + 192.168.0.75 monitor.oekonzept.de + 192.168.0.151 rosa.oekonzept.de + 192.168.0.171 karl.oekonzept.de + 192.168.0.206 vewadb.oekonzept.de + 192.168.0.191 vewadb2.oekonzept.de + 192.168.0.190 vpn.oekonzept.de + 192.168.0.180 vewasmb.oekonzept.de + 192.168.0.91 puppet.oekonzept.de + 100.64.0.1 oekonzept.net + 100.64.0.1 camt.oekonzept.net + 100.64.0.1 camt-cbg.oekonzept.net + 100.64.0.1 camt-eth.oekonzept.net + 100.64.0.1 camt-pro.oekonzept.net + 100.64.0.1 camt-swbfk.oekonzept.net + 100.64.0.1 cloud.oekonzept.net + 100.64.0.1 office.oekonzept.net + 100.64.0.1 llama.oekonzept.net + 100.64.0.1 netdata.oekonzept.net + 100.64.0.1 oproject.oekonzept.net + 100.64.0.1 leantime.oekonzept.net + 100.64.0.1 nixos-karl-kvm-guest.oekonzept.de + 176.9.242.147 fe3f3294-c93a-4aca-895e-abe6c858dbd5-llama-cpp.redvau.lt + ''; + interfaces = { + eth0 = { + useDHCP = false; + ipv4.addresses = [ + { + address = "192.168.0.21"; + prefixLength = 24; + } + ]; + ipv4.routes = [ + { + address = "192.168.0.0"; + prefixLength = 24; + } + { + address = "0.0.0.0"; + prefixLength = 0; + via = "192.168.0.5"; + } + ]; + }; + }; + }; + + systemd = { + services = { + ryzenadj = { + enable = true; + description = "RyzenAdj Autoset"; + serviceConfig = { + Type = "oneshot"; + User = "root"; + ExecStart = "${pkgs.ryzenadj}/bin/ryzenadj -f90 --set-coall=1048566"; # 1048566 = 0x100000 - 10(mV) + }; + wantedBy = [ "multi-user.target" ]; + }; + + # Do not manage HID devices with powertop to prevent annoying keyboard/mouse sleeps + powertop.postStart = '' + HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u) + for i in $HIDDEVICES; do + echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product + echo 'on' > /sys/bus/usb/devices/$i/power/control + done + ''; + + # This manually configures the automatically created network-adresses service to be more flexible + # regarding booting without the the device being available on boot + # It prevents slow timeouts & errors on boot while preserving Plug & Play ability + network-addresses-eth0.unitConfig = { + ConditionPathExists = "/sys/class/net/eth0"; + BindsTo = lib.mkForce null; + }; + }; + }; + services.udev.extraRules = '' + # Framework Laptop 16 - LED Matrix + SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0020", MODE="0660", TAG+="uaccess" + # C1 Minimal Microcontroller Module (Template for DIY Module) + SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0022", MODE="0660", TAG+="uaccess" + # USB-C dock ethernet + ACTION=="add", KERNEL=="eth0", TAG+="systemd", ENV{SYSTEMD_WANTS}="network-addresses-eth0.service" + ACTION=="remove", KERNEL=="eth0", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-eth0.service" + # TODO check needed? FIXME helps suspend? + SUBSYSTEM=="pci", ATTR{power/control}="auto" + # ACTION=="add", SUBSYSTEM=="serio", DRIVERS=="atkbd", ATTR{power/wakeup}="disabled" + ''; + + environment.systemPackages = with pkgs; [ + ryzenadj + lm_sensors + coreutils-full + cpu-x + fw-ectool + sbctl # secureboot debugging/config/mgmt + # android-tools + input-remapper + ]; + + hardware = { + enableRedistributableFirmware = true; + i2c.enable = true; + + cpu.amd = { + updateMicrocode = true; + ryzen-smu.enable = true; + }; + sensor.iio.enable = true; + }; + + zramSwap.enable = true; + + system.stateVersion = "24.05"; +} diff --git a/systems/nixos-fw16/disks.nix b/systems/nixos-fw16/disks.nix new file mode 100644 index 0000000..37fd754 --- /dev/null +++ b/systems/nixos-fw16/disks.nix @@ -0,0 +1,84 @@ +{ config +, lib +, pkgs +, modulesPath +, system +, inputs +, ... +}: { + # bcachefs format \ + # --metadata_replicas=2 \ + # --data_replicas=1 \ + # --background_compression=zstd \ + # --discard \ + # --label=ssd.ssd_4t /dev/mapper/crypt_ssd_4t_data \ + # --label=ssd.ssd_2t /dev/mapper/crypt_ssd_2t_data + + config = { + boot = { + supportedFilesystems = [ "bcachefs" "vfat" ]; + initrd.supportedFilesystems = [ "bcachefs" "vfat" ]; + initrd.luks.devices = + lib.attrsets.mergeAttrsList + ( + lib.lists.forEach [ + "crypt_ssd_4t_data" + "crypt_ssd_4t_swap" + "crypt_ssd_2t_data" + "crypt_ssd_2t_swap" + ] + (drive: { + "${drive}" = { + device = "/dev/disk/by-partlabel/${drive}"; + allowDiscards = true; + bypassWorkqueues = true; + # crypttabExtraOpts = [ "nofail" ]; + }; + }) + ); + }; + + fileSystems = + let + automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"; + perm_opts = "uid=1001,gid=100"; + smb_opts = [ + "vers=3,credentials=/home/tristand/.smb-secrets" + perm_opts + automount_opts + ]; + sshfs_opts = [ + "allow_other,_netdev,reconnect,ServerAliveInterval=15,IdentityFile=/var/secrets/id_ed25519" + perm_opts + automount_opts + ]; + in + { + "/" = { + device = "/dev/mapper/crypt_ssd_4t_data"; + # device = "UUID=f89215ba-3313-42d3-8f68-051ad2453870"; + fsType = "bcachefs"; + options = [ "relatime" ]; + }; + + "/boot" = { + device = "/dev/disk/by-uuid/05A2-6A8A"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + # "/mnt/media_v2" = { + # device = "root@23.88.68.113:/media_v2"; + # fsType = "sshfs"; + # options = sshfs_opts; + # }; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/a8f478f0-ad5e-47ae-8e18-63060f7e5706"; } + { device = "/dev/disk/by-uuid/59987b2a-c5c5-4547-95ad-f0d1dcdf8458"; } + ]; + + system.fsPackages = [ pkgs.sshfs ]; + }; +} diff --git a/systems/nixos-pulse/default.nix b/systems/nixos-pulse/default.nix new file mode 100644 index 0000000..075158c --- /dev/null +++ b/systems/nixos-pulse/default.nix @@ -0,0 +1,244 @@ +{ config +, lib +, pkgs +, modulesPath +, system +, inputs +, ... +}: { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + inputs.nixos-hardware.nixosModules.common-cpu-amd + inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate + inputs.nixos-hardware.nixosModules.common-hidpi + inputs.nixos-hardware.nixosModules.tuxedo-pulse-15-gen2 + ../../os-mods/age + ../../os-mods/amdgpu + ../../os-mods/cachix + ../../os-mods/common + # ../../os-mods/desktop + # ../../os-mods/desktop/audio.nix + # ../../os-mods/desktop/printing.nix + ../../os-mods/netdata/client.nix + ../../os-mods/network + ../../os-mods/ryzenapu + ../../os-mods/virt + ]; + + nix.settings = { + trusted-users = [ "nixremote" "root" "tristand" ]; + system-features = [ + "benchmark" + "big-parallel" + "kvm" + "nixos-test" + "gccarch-x86-64-v3" + "gccarch-znver2" + ]; + }; + + programs.corectrl.gpuOverclock.enable = lib.mkForce false; + networking = { + useDHCP = lib.mkForce false; + useNetworkd = true; + wireless = { + enable = true; + networks."DruyenWLAN" = { + psk = "DidWvTDruyenH4"; + }; + }; + networkmanager.unmanaged = [ "wlp3s0" ]; + }; + systemd.network = { + enable = true; + networks."10-homewifi" = { + name = "wlp3s0"; + matchConfig = { + SSID = "DruyenWLAN"; + }; + DHCP = "yes"; # both ipv4 & 6 + }; + }; + + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + users.tristand = import ../../users/admin-shell.nix { + username = "tristand"; + + inherit pkgs config inputs system lib; + }; + }; + + users.groups.nixremote = { }; + users.users = { + tristand = { + isNormalUser = true; + description = "Tristan Druyen"; + extraGroups = [ "audio" "corectrl" "dialout" "docker" "networkmanager" "i2c" "wheel" "libvirtd" "qemu-libvirtd" "input" ]; + shell = pkgs.fish; + home = "/home/tristand"; + hashedPassword = "$6$Wj.XY8JgH5EWuog4$HnbtPJXDEqKXFrzkPVEjih3PytcpBCrkfL7TAwkXd0IFced7kGMlZNliNsAqQ3XqfyUzAYiiKTIqoPVJEk.s.."; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4fBDj1/He/uimO97RgjGWZLAimTrLmIlYS2ekD73GC tristan@arch-pulse" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de" + ]; + }; + + nixremote = { + isSystemUser = true; + group = "nixremote"; + description = "remote builder user"; + extraGroups = [ "docker" "networkmanager" "wheel" ]; + shell = pkgs.bash; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16" + ]; + }; + }; + + boot = { + # kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos; + kernelPackages = pkgs.pkgsAMD64Microarchs.znver2.linuxPackages_cachyos; + kernelPatches = [ ]; + kernelParams = [ + # "systemd.unit=emergency.target" + # "systemd.setenv=SYSTEMD_SULOGIN_FORCE=1" + # "rescue" + # "pcie_aspm=force" + # "pcie_aspm.policy=powersupersave" + # "rtc_cmos.use_acpi_alarm=1" # reduce S0 sleep wakeups + # "gpiolib_acpi.ignore_interrupt=AMDI0030:00@9" # mask IRQ 9 ? + ]; + loader = { + systemd-boot = { + enable = true; + configurationLimit = 16; + }; + efi.canTouchEfiVariables = true; + }; + + supportedFilesystems = [ "btrfs" "vfat" ]; + + initrd = { + availableKernelModules = [ "nvme" "xhci_pci" "uas" "usbhid" "usb_storage" "sd_mod" ]; + kernelModules = [ ]; + systemd.enable = true; + supportedFilesystems = [ "btrfs" "vfat" ]; + + luks.devices = { + "crypted_1" = { + device = "/dev/disk/by-uuid/9cca6269-6afa-4f77-92ff-2e9eb8fc9bc7"; + allowDiscards = true; + bypassWorkqueues = true; + crypttabExtraOpts = [ "nofail" ]; + }; + "crypted_swap_1" = { + device = "/dev/disk/by-uuid/7b19e61a-20cd-47ae-9da2-0f40c9be86fe"; + allowDiscards = true; + bypassWorkqueues = true; + crypttabExtraOpts = [ "nofail" ]; + }; + }; + }; + + extraModulePackages = [ ]; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/83b6aa0a-ff9f-40ef-b728-6540bd5c9365"; } + ]; + + services.btrfs.autoScrub.enable = true; + + networking = { + hostName = "nixos-pulse"; + extraHosts = '' + 176.9.242.147 he4.redvau.lt + ''; + }; + + fileSystems = + let + automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"; + perm_opts = "uid=1000,gid=100"; + btrfs_opts = "autodefrag,compress=zstd,discard=async,noatime,space_cache=v2,ssd"; + sshfs_opts = [ + "allow_other,_netdev,reconnect,ServerAliveInterval=15,IdentityFile=/var/secrets/id_ed25519" + perm_opts + automount_opts + ]; + in + { + "/" = { + device = "/dev/mapper/crypted_1"; + fsType = "btrfs"; + options = [ + btrfs_opts + "subvol=_active/root" + ]; + }; + "/boot" = { + device = "/dev/disk/by-uuid/3226-7E38"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + "/home" = { + device = "/dev/mapper/crypted_1"; + fsType = "btrfs"; + options = [ + btrfs_opts + "subvol=_active/home" + ]; + }; + "/nix" = { + device = "/dev/mapper/crypted_1"; + fsType = "btrfs"; + options = [ + btrfs_opts + "subvol=_active/nix" + ]; + }; + + # "/mnt/media_v2" = { + # device = "root@23.88.68.113:/media_v2"; + # fsType = "sshfs"; + # options = sshfs_opts; + # }; + }; + system.fsPackages = [ pkgs.sshfs ]; + + services.udev.extraRules = '' + SUBSYSTEM=="pci", ATTR{power/control}="auto" + ACTION=="add", SUBSYSTEM=="serio", DRIVERS=="atkbd", ATTR{power/wakeup}="disabled" + ''; + + hardware = { + enableRedistributableFirmware = true; + i2c.enable = true; + # tuxedo-keyboard.enable = true; // not needed for server use + + cpu.amd.updateMicrocode = true; + sensor.iio.enable = true; + # tuxedo-rs = { // not needed for server use + # enable = true; + # tailor-gui.enable = false; # used headless atm + # } ; + }; + + zramSwap.enable = true; + environment.systemPackages = with pkgs; [ + firefox + ]; + + system.stateVersion = "23.05"; +} diff --git a/systems/rescue-iso/default.nix b/systems/rescue-iso/default.nix new file mode 100644 index 0000000..b2d7af7 --- /dev/null +++ b/systems/rescue-iso/default.nix @@ -0,0 +1,86 @@ +{ lib +, pkgs +, inputs +, ... +}: { + imports = [ + # "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix" + ../../os-mods/age + "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" + "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/channel.nix" + ]; + + nix = { + settings.experimental-features = [ "nix-command" "flakes" ]; + extraOptions = "experimental-features = nix-command flakes"; + }; + + services = { + openssh.settings.PermitRootLogin = lib.mkForce "yes"; + # TODO Add authorized Keys + }; + + boot = + let + version = "6.12-rc1"; + # version = "6.12-rc3"; + kernelPatches = pkgs.callPackage "${inputs.nixpkgs}/pkgs/os-specific/linux/kernel/patches.nix" { }; + # ref = "6efbea77b390604a7be7364583e19cd2d6a1291b"; + ref = "bc6d2d10418e1bfdb95b16f5dd4cca42d5dec766"; + linux_mainline = + { buildLinux + , fetchzip + , ... + } @ args: + buildLinux { + version = version; + src = fetchzip { + # url = "https://git.kernel.org/torvalds/t/linux-${ref}.tar.gz"; + # hash = ""; + url = "https://github.com/koverstreet/bcachefs/archive/${ref}.tar.gz"; + hash = "sha256-tq0dXKVtW1R+Yenv7HG4Qqc1P49OzcJgICpoZLkA/K4="; + }; + modDirVersion = lib.versions.pad 3 version; + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + extraMeta.branch = "master"; + }; + linuxMainlinePkg = pkgs.callPackage linux_mainline { }; + linuxMainlinePkgs = pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linuxMainlinePkg); + in + { + kernelPackages = linuxMainlinePkgs; + supportedFilesystems = lib.mkForce [ "bcachefs" "btrfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ]; + }; + + users.users.root.openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKokTPK/Gm30kqFAd+u5AT0BL7bG/eNt6pmGf40U8j03 arch-h1" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de" + ]; + + users.extraUsers.root.hashedPassword = "$y$j9T$6eIwRNXAtlsVCP4x8GrQi1$PDbhjsbOGyIArOYtxtgc6u.w7I.M4iZbfk3pc7a4b93"; # nixos + users.extraUsers.root.initialPassword = lib.mkForce null; + users.extraUsers.root.initialHashedPassword = lib.mkForce null; + + systemd = { + services.sshd.wantedBy = pkgs.lib.mkForce [ "multi-user.target" ]; + targets = { + sleep.enable = false; + suspend.enable = false; + hibernate.enable = false; + hybrid-sleep.enable = false; + }; + }; + + networking = { + hostName = "rescue-iso"; + }; +} diff --git a/systems/rescue-kexec/default.nix b/systems/rescue-kexec/default.nix new file mode 100644 index 0000000..a12872a --- /dev/null +++ b/systems/rescue-kexec/default.nix @@ -0,0 +1,91 @@ +{ lib +, pkgs +, inputs +, ... +}: { + imports = [ + ../../os-mods/age + # "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix" + # "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" + # "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/channel.nix" + # "${inputs.nixos-images}/nix/kexec-installer/module.nix" + ]; + + nix = { + settings.experimental-features = [ "nix-command" "flakes" ]; + extraOptions = "experimental-features = nix-command flakes"; + }; + + services = { + openssh.settings.PermitRootLogin = lib.mkForce "yes"; + # TODO Add authorized Keys + }; + + boot = + let + version = "6.12-rc1"; + # version = "6.12-rc3"; + kernelPatches = pkgs.callPackage "${inputs.nixpkgs}/pkgs/os-specific/linux/kernel/patches.nix" { }; + # ref = "6efbea77b390604a7be7364583e19cd2d6a1291b"; + # ref = "bc6d2d10418e1bfdb95b16f5dd4cca42d5dec766"; + ref = "81f8ef6863d2a40bd67b604d46f9a63b6e708818"; + linux_mainline = + { buildLinux + , fetchzip + , ... + } @ args: + buildLinux { + version = version; + src = fetchzip { + # url = "https://git.kernel.org/torvalds/t/linux-${ref}.tar.gz"; + # hash = ""; + # url = "https://github.com/koverstreet/bcachefs/archive/${ref}.tar.gz"; + # hash = "sha256-tq0dXKVtW1R+Yenv7HG4Qqc1P49OzcJgICpoZLkA/K4="; + + url = "https://github.com/koverstreet/bcachefs/archive/${ref}.tar.gz"; + hash = "sha256-kwPeZEpwIOPoLIEBQydyJqzHGpLoJdGqvHqkKaq03oU="; + }; + modDirVersion = lib.versions.pad 3 version; + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + extraMeta.branch = "master"; + }; + linuxMainlinePkg = pkgs.callPackage linux_mainline { }; + linuxMainlinePkgs = pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linuxMainlinePkg); + in + { + kernelPackages = lib.mkForce linuxMainlinePkgs; + supportedFilesystems = lib.mkForce [ "bcachefs" "btrfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ]; + }; + + users.users.root.openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKokTPK/Gm30kqFAd+u5AT0BL7bG/eNt6pmGf40U8j03 arch-h1" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de" + ]; + + users.extraUsers.root.hashedPassword = "$y$j9T$6eIwRNXAtlsVCP4x8GrQi1$PDbhjsbOGyIArOYtxtgc6u.w7I.M4iZbfk3pc7a4b93"; # nixos + users.extraUsers.root.initialPassword = lib.mkForce null; + users.extraUsers.root.initialHashedPassword = lib.mkForce null; + + systemd = { + services.sshd.wantedBy = pkgs.lib.mkForce [ "multi-user.target" ]; + targets = { + sleep.enable = false; + suspend.enable = false; + hibernate.enable = false; + hybrid-sleep.enable = false; + }; + }; + + networking = { + hostName = "rescue-kexec"; + }; +} diff --git a/test b/test new file mode 100644 index 0000000..e69de29 diff --git a/test2 b/test2 new file mode 100644 index 0000000..e69de29 diff --git a/users/admin-fat.nix b/users/admin-fat.nix new file mode 100644 index 0000000..73c7538 --- /dev/null +++ b/users/admin-fat.nix @@ -0,0 +1,27 @@ +{ pkgs +, config +, inputs +, system +, username +, ... +}: { + imports = [ + ../home-mods/activity-watch + ../home-mods/audio + ../home-mods/common + ../home-mods/desktop + ../home-mods/firefox + ../home-mods/plasma + ../home-mods/shell + ../home-mods/virt + ]; + + config = { + home = { + inherit username; + homeDirectory = "/home/${username}"; + + stateVersion = "23.05"; + }; + }; +} diff --git a/users/admin-shell.nix b/users/admin-shell.nix new file mode 100644 index 0000000..3387099 --- /dev/null +++ b/users/admin-shell.nix @@ -0,0 +1,19 @@ +{ pkgs +, config +, inputs +, system +, username +, ... +}: { + imports = [ + ../home-mods/common + ../home-mods/shell + ]; + + config.home = { + inherit username; + homeDirectory = "/home/${username}"; + + stateVersion = "23.05"; + }; +} diff --git a/users/admin-thin.nix b/users/admin-thin.nix new file mode 100644 index 0000000..ffe08c4 --- /dev/null +++ b/users/admin-thin.nix @@ -0,0 +1,22 @@ +{ pkgs +, config +, inputs +, system +, username +, ... +}: { + imports = [ + ../home-mods/audio + ../home-mods/common + ../home-mods/firefox + # ../home-mods/plasma + ../home-mods/shell + ]; + + config.home = { + inherit username; + homeDirectory = "/home/${username}"; + + stateVersion = "23.05"; + }; +} diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 0000000..a485648 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,60 @@ +{ pkgs +, config +, inputs +, system +, lib +, ... +}: { + nix.settings.trusted-users = [ "@wheel" ]; + users.users = { + tester = { + isNormalUser = true; + description = "Testa Test"; + extraGroups = [ "audio" "corectrl" "docker" "networkmanager" "i2c" "wheel" "libvirtd" "qemu-libvirtd" "input" ]; + shell = pkgs.fish; + home = "/home/tester"; + hashedPasswordFile = config.age.secrets.tester_passwd_hash.path; + }; + tristand = { + isNormalUser = true; + description = "Tristan Druyen"; + extraGroups = [ "audio" "corectrl" "dialout" "docker" "networkmanager" "i2c" "wheel" "libvirtd" "qemu-libvirtd" "input" ]; + shell = pkgs.fish; + home = "/home/tristand"; + hashedPasswordFile = config.age.secrets.tristand_passwd_hash.path; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de" + ]; + }; + + nixremote = { + isSystemUser = true; + group = "nixremote"; + description = "remote builder user"; + extraGroups = [ "docker" "networkmanager" "wheel" ]; + shell = pkgs.bash; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16" + ]; + }; + }; + users.groups.nixremote = { }; + + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + users.tristand = import ./admin-fat.nix { + username = "tristand"; + + inherit pkgs config inputs system lib; + }; + }; +}