diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml deleted file mode 100644 index 06dc541..0000000 --- a/.github/workflows/docs.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml -name: Docs -on: - push: - branches: - - main -jobs: - build: - name: Build - permissions: - contents: read - runs-on: nixos-latest - steps: - - name: Nix Config - run: | - mkdir -p $HOME/.config - mkdir -p $HOME/.config/nix - echo experimental-features = nix-command flakes pipe-operators >> $HOME/.config/nix/nix.conf - echo access-tokens = github.com=${{ secrets.GITHUBTOKEN }} >> $HOME/.config/nix/nix.conf - nix profile install nixpkgs#nodejs - - name: Build docs - run: nix -L build git+https://git.dashie.org/${{ forgejo.repository }}.git?rev=${{ forgejo.sha }}#docs --no-write-lock-file - - name: Prepare docs for upload - run: cp -r --dereference --no-preserve=mode,ownership result/ public/ - # - name: Upload artifact - # uses: https://data.forgejo.org/forgejo/upload-artifact@v4 - # with: - # path: public/ - - name: Publish Page - uses: https://data.forgejo.org/actions/git-pages@v2 - with: - site: https://username.pages.dashie.org/reponame/ - token: ${{ forge.token }} - source: public/ diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml deleted file mode 100644 index e92ddfd..0000000 --- a/.github/workflows/pr.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# inspired by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml -name: PR check -on: - pull_request: - branches: ["main"] -jobs: - build: - name: check - permissions: - contents: read - runs-on: ubuntu-latest - steps: - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@main - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - extra-conf: | - extra-experimental-features = nix-command flakes pipe-operators - - name: Set up cache - uses: DeterminateSystems/magic-nix-cache-action@main - - name: action - uses: cachix/install-nix-action@v25 - with: - nix_path: nixpkgs=channel:nixos-unstable - - name: cache - uses: cachix/cachix-action@v16 - with: - name: dashnix - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - name: Linter check - run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#lint -- check - - name: Format check - run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#format -- --check . - - name: Build docs - run: nix -L build github:${{ github.repository }}/${{ github.sha }}#docs --no-write-lock-file diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index 1984fb1..0000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml -name: Release -on: - release: - types: [created] -jobs: - build: - name: Release - permissions: write-all - runs-on: ubuntu-latest - steps: - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@main - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - extra-conf: | - extra-experimental-features = nix-command flakes pipe-operators - - name: Set up cache - uses: DeterminateSystems/magic-nix-cache-action@main - - name: Build ISO - run: nix build github:${{ github.repository }}/${{ github.sha }}#iso --no-write-lock-file - - name: Prepare ISO for upload - run: | - cp -r --dereference --no-preserve=mode,ownership result/iso/DashNix.iso DashNix.iso - - name: upload ISO - uses: softprops/action-gh-release@v1 - with: - files: | - DashNix.iso diff --git a/.gitignore b/.gitignore index f610716..e173d3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ -result/* -result -flake.lock +/nvim/plugged/* +gtk-3.0/bookmarks +gtk-3.0/servers +gtk-4.0/servers +/fish/fish_variables +fish/fish_variables +fish/*.tmp.* +copyq/copyq.lock +copyq/copyq_geometry.* +copyq/copyq_tab* +nvim/lazy-lock.json +ncspot/*.cbor diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 7b6bec5..0000000 --- a/LICENSE +++ /dev/null @@ -1,841 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser 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 -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - diff --git a/README.md b/README.md deleted file mode 120000 index 95cf2af..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -docs/src/README.md \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e9a047a --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +``` + _____ _ _____ _ + | __ \ | | | __ \ | | + | | | | __ _ ___| |__ | | | | ___ | |_ ___ + | | | |/ _` / __| '_ \| | | |/ _ \| __/ __| + | |__| | (_| \__ \ | | | |__| | (_) | |_\__ \ + |_____/ \__,_|___/_| |_|_____/ \___/ \__|___/ + +``` + +My personal configuration for NixOS/home-manager. +While not intended to be used by someone else, feel free to do so anyway or use it as a template for your configuration if you wish to. diff --git a/assets/logo.svg b/assets/logo.svg deleted file mode 100644 index 7ca00e2..0000000 --- a/assets/logo.svg +++ /dev/null @@ -1,228 +0,0 @@ - - - - diff --git a/assets/logo2.png b/assets/logo2.png deleted file mode 100644 index beeac55..0000000 Binary files a/assets/logo2.png and /dev/null differ diff --git a/assets/logo2.svg b/assets/logo2.svg deleted file mode 100644 index 08baa43..0000000 --- a/assets/logo2.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - -DashNixDashNix diff --git a/assets/logo3.svg b/assets/logo3.svg deleted file mode 100644 index 6076a01..0000000 --- a/assets/logo3.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - -DashNixDashNix diff --git a/assets/rainbow.svg b/assets/rainbow.svg deleted file mode 100644 index 9f59c7c..0000000 --- a/assets/rainbow.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/base/common_hardware.nix b/base/common_hardware.nix deleted file mode 100644 index 9f7ccf1..0000000 --- a/base/common_hardware.nix +++ /dev/null @@ -1,174 +0,0 @@ -{ - mkDashDefault, - pkgs, - config, - lib, - hostName, - modulesPath, - ... -}: let - username = config.conf.username; -in { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - wsl.enable = mkDashDefault config.conf.wsl; - - # Bootloader. - boot = lib.mkIf (!config.conf.wsl) { - consoleLogLevel = mkDashDefault 0; - - lanzaboote = lib.mkIf config.conf.secureBoot { - enable = mkDashDefault true; - pkiBundle = mkDashDefault "/var/lib/sbctl"; - settings.reboot-for-bitlocker = mkDashDefault true; - }; - - loader = { - systemd-boot = { - enable = - if config.conf.secureBoot - then lib.mkForce false - else if config.conf.useSystemdBootloader - then true - else mkDashDefault false; - configurationLimit = 5; - }; - efi.canTouchEfiVariables = mkDashDefault true; - }; - - kernelPackages = mkDashDefault pkgs.linuxPackages_latest; - initrd = { - verbose = mkDashDefault false; - availableKernelModules = [ - "nvme" - "xhci_pci" - "ahci" - "usbhid" - "usb_storage" - "sd_mod" - ]; - }; - kernelParams = - [ - ''resume="PARTLABEL=SWAP"'' - ''quiet'' - ''udev.log_level=3'' - ] - ++ config.conf.bootParams; - }; - - networking = { - useDHCP = mkDashDefault true; - networkmanager.enable = mkDashDefault true; - hostName = mkDashDefault hostName; - }; - - time = { - timeZone = mkDashDefault config.conf.timezone; - hardwareClockInLocalTime = mkDashDefault config.conf.systemLocalTime; - }; - - i18n.defaultLocale = mkDashDefault config.conf.locale; - - services = { - lorri.enable = mkDashDefault true; - xserver.enable = mkDashDefault true; - fstrim.enable = mkDashDefault true; - pulseaudio.enable = mkDashDefault false; - pipewire = { - enable = mkDashDefault true; - alsa = { - enable = mkDashDefault true; - support32Bit = mkDashDefault true; - }; - jack.enable = mkDashDefault true; - pulse.enable = mkDashDefault true; - }; - }; - - nixpkgs.hostPlatform = mkDashDefault config.conf.system; - nix = { - gc = { - automatic = mkDashDefault true; - dates = mkDashDefault "weekly"; - options = mkDashDefault "--delete-older-than 7d --delete-generations +5"; - }; - settings = { - trusted-users = [username]; - auto-optimise-store = mkDashDefault true; - - builders-use-substitutes = mkDashDefault true; - - trusted-substituters = [ - "https://hyprland.cachix.org" - "https://anyrun.cachix.org" - "https://oxipaste.cachix.org" - "https://oxinoti.cachix.org" - "https://oxishut.cachix.org" - "https://oxidash.cachix.org" - "https://oxicalc.cachix.org" - "https://hyprdock.cachix.org" - "https://reset.cachix.org" - "https://dashvim.cachix.org" - ]; - - trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" - "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" - "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" - "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" - "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" - "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" - "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" - "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" - "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" - ]; - - experimental-features = mkDashDefault "nix-command flakes pipe-operators"; - }; - }; - - hardware = { - cpu.${config.conf.cpu}.updateMicrocode = - mkDashDefault - config.hardware.enableRedistributableFirmware; - }; - - security.rtkit.enable = mkDashDefault true; - - environment.variables = { - XDG_CACHE_HOME = mkDashDefault "$HOME/.cache"; - DIRENV_LOG_FORMAT = mkDashDefault ""; - QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct"; - }; - - # allows user change later on - users = { - mutableUsers = mkDashDefault true; - users.${username} = { - isNormalUser = mkDashDefault true; - description = mkDashDefault username; - extraGroups = [ - "networkmanager" - "wheel" - "gamemode" - "docker" - "vboxusers" - "video" - "audio" - "scanner" - "lp" - ]; - packages = with pkgs; [ - home-manager - xdg-desktop-portal-gtk - ]; - # this password will only last for the first login - # e.g. login, then change to whatever else, this also ensures no public hash is available - password = mkDashDefault "firstlogin"; - }; - }; -} diff --git a/base/env.nix b/base/env.nix deleted file mode 100644 index 0eaf068..0000000 --- a/base/env.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - mkDashDefault, - pkgs, - config, - lib, - ... -}: { - environment = { - variables = { - GSETTINGS_SCHEMA_DIR = mkDashDefault "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}"; - NEOVIDE_MAXIMIZED = mkDashDefault "0"; - GPG_TTY = mkDashDefault "$(tty)"; - EDITOR = mkDashDefault "neovide --no-fork"; - SUDO_EDITOR = mkDashDefault "neovide --no-fork"; - SCRIPTS = mkDashDefault "$HOME/.config/scripts"; - }; - sessionVariables = { - NIXOS_OZONE_WL = mkDashDefault "1"; - GOPATH = mkDashDefault "$HOME/.go"; - FLAKE = mkDashDefault config.conf.nixosConfigPath; - NH_FLAKE = mkDashDefault config.conf.nixosConfigPath; - }; - }; -} diff --git a/docs/default.nix b/docs/default.nix deleted file mode 100644 index 1fd8a1e..0000000 --- a/docs/default.nix +++ /dev/null @@ -1,61 +0,0 @@ -# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix -{ - pkgs, - buildSystems, - lib, - ... -}: let - makeOptionsDoc = configuration: pkgs.nixosOptionsDoc {options = configuration;}; - generateDocs = obj: '' - touch src/${obj.fst}.md - sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md - ''; - summaryAppend = name: '' - echo "- [${name}](${name}.md)" >> src/SUMMARY.md - ''; - system = (buildSystems {root = ../example/.;})."example".options; - makeOptionsDocPrograms = names: pkgs.nixosOptionsDoc {options = lib.attrByPath (lib.splitString "." names) null system.mods;}; - conf = makeOptionsDoc system.conf; - basePath = ../modules/programs; - pathToAttrs = path: - lib.attrsets.mapAttrsToList ( - name: meta: { - inherit name; - inherit meta; - } - ) - (builtins.readDir path); - pathToStrings = path: prefix: let - mapFn = attrs: - if attrs.meta == "directory" - then pathToStrings "${basePath}/${attrs.name}" attrs.name - else if prefix != "" - then "${prefix}.${attrs.name}" - else attrs.name; - in - map - mapFn - (pathToAttrs path); - filteredNames = builtins.filter (names: !(lib.strings.hasInfix "default" names)) ( - map (name: lib.strings.removeSuffix ".nix" name) (lib.lists.flatten (pathToStrings basePath "")) - ); - deduplicatedNames = map (name: lib.strings.splitString "." name |> lib.lists.unique |> lib.strings.concatStringsSep ".") filteredNames; - mods = map makeOptionsDocPrograms deduplicatedNames; - docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists deduplicatedNames mods)); - summary = lib.strings.concatStringsSep " " (map summaryAppend deduplicatedNames); -in - pkgs.stdenvNoCC.mkDerivation { - name = "dashNix-book"; - src = ./.; - - patchPhase = '' - sed '/*Declared by:*/,/^$/d' <${conf.optionsCommonMark} >> src/conf.md - ${docs} - echo "[README](README.md)\n # Options\n - [Base Config](conf.md)" >> src/SUMMARY.md - ${summary} - ''; - - buildPhase = '' - ${pkgs.mdbook}/bin/mdbook build --dest-dir $out - ''; - } diff --git a/docs/src/README.md b/docs/src/README.md deleted file mode 100644 index 3658e00..0000000 --- a/docs/src/README.md +++ /dev/null @@ -1,329 +0,0 @@ -
- -![Logo of DashNix](logo.svg) - -
- -An opinionated flake to bootstrap NixOS systems with default configurations for various programs and services from both NixOS and HomeManager which can be enabled, disabled, configured or replaced at will. - -# Usage - -This flake is intended to be used as an input to your own NixOS configuration: - -```nix -dashNix = { - url = "github:Xetibo/DashNix"; - inputs = { - # ensure these are here to update the packages on your own - nixpkgs.follows = "nixpkgs"; - stable.follows = "stable"; - }; -}; -``` - -You can then configure your systems in your flake outputs with a provided library command: - -Please note that overriding inputs will invalidate the cache configuration, this means you will have to add this manually: - -```nix - builders-use-substitutes = true; - - extra-substituters = [ - "https://hyprland.cachix.org" - "https://anyrun.cachix.org" - "https://cache.garnix.io" - "https://oxipaste.cachix.org" - "https://oxinoti.cachix.org" - "https://oxishut.cachix.org" - "https://oxidash.cachix.org" - "https://oxicalc.cachix.org" - "https://hyprdock.cachix.org" - "https://reset.cachix.org" - "https://dashvim.cachix.org" - ]; - - extra-trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" - "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" - "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" - "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" - "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" - "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" - "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" - "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" - "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" - "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" - ]; -``` - -```nix -nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems { root = ./.; }; -``` - -This command will build each system that is placed within the hosts/ directory. -In this directory create one directory for each system you want to configure with DashNix. -This will automatically pick up the hostname for the system and look for 3 different files that are explained below. -(Optionally, you can also change the parameter root (./.) to define a different starting directory than hosts/) - -In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration. -The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional) - -|- flake.nix\ -|- flake.lock\ -|- hosts/\ -|--- system1/\ -|------ configuration.nix (required)\ -|------ hardware.nix (optional)\ -|------ home.nix (optional)\ -|--- system2/\ -|------ configuration.nix (required)\ -|------ hardware.nix (optional)\ -|------ home.nix (optional)\ -|--- system3/\ -|------ configuration.nix (required)\ -|------ hardware.nix (optional)\ -|------ home.nix (optional) - -Here is a minimal required configuration.nix (the TODOs mention a required change): - -```nix -{config, ...}: { - # TODO denote important changes - - # variables for system - conf = { - # TODO your username - username = "YOURNAME"; - # TODO only needed when you use intel -> amd is default - # cpu = "intel"; - # TODO your xkb layout - locale = "something.UTF-8"; - # TODO your timezone - timezone = "CONTINENT/CITY"; - }; - - # modules - mods = { - # default disk config has root home boot and swap partition, overwrite if you want something different - sops.enable = false; - nextcloud.enable = false; - wm.monitors = [ - # Example - # { - # name = "DP-1"; - # resolutionX = 3440; - # resolutionY = 1440; - # refreshrate = 180; - # positionX = 2560; - # positionY = 0; - # scale = 1; - # transform = "0"; - # vrr = false; - # } - ]; - gpu.nvidia.enable = true; - kdeConnect.enable = true; - # login manager: - # default is greetd - # greetd = { }; - # sddm = { }; - # gdm = { }; - drives = { - # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist - # for an example without HOME see below - # defaultDrives.enable = false; - # extraDrives = [ - # { - # name = "boot"; - # drive = { - # device = "/dev/disk/by-label/BOOT"; - # fsType = "vfat"; - # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; - # }; - # } - # { - # name = ""; - # drive = { - # device = "/dev/disk/by-label/ROOT"; - # fsType = "ext4"; - # options = [ "noatime" "nodiratime" "discard" ]; - # }; - # } - # ]; - # You can also use disko to format your disks on installation. - # Please refer to the Documentation about the drives module for an example. - }; - }; -} -``` - -## First Login - -After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like. - -## Configuring pkgs - -While DashNix offers a default pkgs config, you may want to permit an unsecure packages, -add additional modules/inputs, or add an overlay to them. -You can configure both stable and unstable pkgs the following way: - -Please note that modules and inputs are merged together to ensure functionality. - -```nix -currentSystem = "x86_64-linux"; -permittedPackages = [ - "some package" -]; -config = { - system = currentSystem; - config = { - allowUnfree = true; - permittedInsecurePackages = permittedPackages; - }; - inputs = { - # Some inputs - } - mods = { - home = [ - # Some home manager module - ]; - nixos = [ - # Some nixos module - ]; -} -}; -unstableBundle = { - pkgs = inputs.unstable; - inherit config mods; -}; -inputs.dashNix.dashNixLib.buildSystems { - root = ./.; - inherit unstableBundle; -} -``` - -With this you could also change your input to something different should you wish to do so. -Note that overriding inputs via the flake still works, -this way however ensures you can also configure the inputs. - -## Stable/Unstable - -Sometimes you want to differentiate between systems that are stable and unstable, e.g. for servers and desktops/laptops. -This can be done with the overridePkgs flag for the lib function: - -(overridePkgs simply inverts the default bundle that is used for the nix standard library as well as NixOS itself) - -```nix -nixosConfigurations = - inputs.dashNix.dashNixLib.buildSystems { - root = ./stable; - inherit stableBundle; - overridePkgs = true; - } - // inputs.dashNix.dashNixLib.buildSystems { - inherit unstableBundle; - root = ./unstable; - }; -``` - -You can now place your systems in the respective directories. -Keep in mind that the hosts directory will still need to exist in each variant. -E.g. stable/hosts/yourserver and unstable/hosts/yourdesktop - -# Installation via ISO - -You can find a custom ISO in the releases: [Link](https://github.com/Xetibo/DashNix/releases). -With this, you will receive the example config in /iso/example alongside the gnome desktop environment, -as well as a few tools like gnome-disks, Neovim, Vscodium, a browser etc. - -Alternatively, you can use whatever NixOS installer and just install your config from there, just make sure to set the drive configuration before. - -## Commands - -First, copy the read-only config from /iso/example-config to a location of your choice. - -```sh -cp /iso/example-config ~/config -r -``` - -Then configure as you please and choose a command below depending on your disk installation variant. - -Installation via manual configuration: - -```sh -sudo nixos-install --flake # --root --option experimental-features "nix-command flakes pipe-operators" -#example -#nixos-install --flake ~/config#globi --root /mnt --option experimental-features "nix-command flakes pipe-operators" -``` - -Installation via disko: - -```sh -sudo disko-install --flake # --disk --option experimental-features "nix-command flakes pipe-operators" -#example -#disko-install -- --flake ~/config#globi --disk main /dev/nvme0n1 --option experimental-features "nix-command flakes pipe-operators" -``` - -# Installation via flake - -If you already have nix installed, you can instead just copy the default config onto your system and install DashNix with it. -To create the example config for a base to start with, you can just run this flake with the mkFlake command: - -```sh -nix run github:Xetibo/DashNix#mkFlake -``` - -This command will put the default configuration into $HOME/gits/nixos - -# Modules - -This configuration features several modules that can be used as preconfigured "recipies". -These modules attempt to combine the home-manager and nixos packages/options to one single configuration file for each new system. -For package lists, please check the individual modules, as the lists can be long. - -- Hyprland: Installs and configures Hyprland with various additional packages -- Niri: Installs and configures Niri with various additional packages -- acpid : Enables the acpid daemon -- base packages : A list of system packages to be installed by default -- bluetooth : Configures/enables bluetooth and installs tools for bluetooth -- coding packages : A list of coding packages to be installed by default -- drives : A drive configuration module -- firefox: Enables and configures firefox (extensions and settings) -- fish: Enables and configures fish shell -- gaming : Configures gaming related features (launchers, gamemode) -- git : Git key and config module -- gnome_services : Gnome services for minimal enviroments -> Window managers etc -- gpu : GPU settings (AMD) -- greetd : Enables and configures the greetd/regreet login manager with Hyprland -- home packages : A list of home packages to be installed by default -- kde_connect : Enables KDE connect and opens its ports -- keepassxc : Configures keepassxc -- kitty: Enables and configures kitty terminal -- layout : Modules to configure keyboard layout system wide -- media packages : A list of media packages to be installed by default -- mime: Mime type configuration -- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud) -- oxi: My own programs, can be selectively disabled, or as a whole -- piper : Installs and enables piper alongside its daemon -- plymouth: enable or disable plymouth -- printing : Enables and configures printing services -- scripts: Various preconfigured scripts with the ability to add more -- sops: Enables sops-nix -- starship : Configures the starship prompt -- stylix : Configures system themes, can also be applied to dashvim if used. -- teams: For the poor souls that have to use this.... -- virtualbox : Enables and configures virtualbox -- xkb: Keyboard layout configuration -- xone : Installs the xone driver -- yazi: Installs yazi and sets custom keybinds - -# Credits - -- [Fufexan](https://github.com/fufexan) for the xdg-mime config: -- [Catppuccin](https://github.com/catppuccin) for base16 colors and zen-browser css -- [Danth](https://github.com/danth) for providing a base for the nix docs -- [chermnyx](https://github.com/chermnyx) for providing a base for zen configuration -- [voronind-com](https://github.com/voronind-com) for providing the darkreader configuration -- [Nix-Artwork](https://github.com/NixOS/nixos-artwork/tree/master/logo) for the Nix/NixOS logo (Tim Cuthbertson (@timbertson)) -- [xddxdd](https://github.com/xddxdd) for the CachyOS-Kernel flake diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/src/coding.md b/docs/src/coding.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/src/conf.md b/docs/src/conf.md deleted file mode 100755 index aa51f0b..0000000 --- a/docs/src/conf.md +++ /dev/null @@ -1 +0,0 @@ -# This file handles the basic configuration for settings like language, timezone, input, cpu etc. diff --git a/docs/src/logo.svg b/docs/src/logo.svg deleted file mode 100644 index 08baa43..0000000 --- a/docs/src/logo.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - -DashNixDashNix diff --git a/docs/src/mods.md b/docs/src/mods.md deleted file mode 100755 index df7fe4f..0000000 --- a/docs/src/mods.md +++ /dev/null @@ -1 +0,0 @@ -# This file handles configuration of individual modules. diff --git a/example/flake.nix b/example/flake.nix deleted file mode 100644 index 01ec944..0000000 --- a/example/flake.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - description = "some dots"; - - inputs = { - nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable"; - stable.url = "github:NixOs/nixpkgs/nixos-24.05"; - dashNix = { - url = "github:Xetibo/DashNix"; - inputs = { - nixpkgs.follows = "nixpkgs"; - stable.follows = "stable"; - }; - }; - }; - - outputs = inputs: { - nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems {root = ./.;}; - }; - - nixConfig = { - builders-use-substitutes = true; - - extra-substituters = [ - "https://hyprland.cachix.org" - "https://anyrun.cachix.org" - "https://cache.garnix.io" - "https://oxipaste.cachix.org" - "https://oxinoti.cachix.org" - "https://oxishut.cachix.org" - "https://oxidash.cachix.org" - "https://oxicalc.cachix.org" - "https://hyprdock.cachix.org" - "https://reset.cachix.org" - "https://dashvim.cachix.org" - ]; - - extra-trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" - "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" - "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" - "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" - "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" - "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" - "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" - "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" - "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" - "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" - ]; - }; -} diff --git a/example/hosts/example/configuration.nix b/example/hosts/example/configuration.nix deleted file mode 100644 index dbe8cd0..0000000 --- a/example/hosts/example/configuration.nix +++ /dev/null @@ -1,68 +0,0 @@ -{config, ...}: { - # TODO denote important changes - - # variables for system - conf = { - # TODO your username - username = "exampleName"; - # TODO only needed when you use intel -> amd is default - # cpu = "intel"; - # TODO your xkb layout - locale = "en_US.UTF-8"; - # TODO your timezone - timezone = "Europe/Zurich"; - }; - - # modules - mods = { - # default disk config has root home boot and swap partition, overwrite if you want something different - sops.enable = false; - nextcloud.enable = false; - wm.monitors = [ - # Example - # { - # name = "DP-1"; - # resolutionX = 3440; - # resolutionY = 1440; - # refreshrate = 180; - # positionX = 2560; - # positionY = 0; - # scale = 1; - # transform = "0"; - # vrr = false; - # } - ]; - gpu.nvidia.enable = true; - kdeConnect.enable = true; - # login manager: - # default is greetd - # greetd = { }; - # sddm = { }; - # gdm = { }; - drives = { - # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist - # for an example without HOME see below - # defaultDrives.enable = false; - # extraDrives = [ - # { - # name = "boot"; - # drive = { - # device = "/dev/disk/by-label/BOOT"; - # fsType = "vfat"; - # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; - # }; - # } - # { - # name = ""; - # drive = { - # device = "/dev/disk/by-label/ROOT"; - # fsType = "ext4"; - # options = [ "noatime" "nodiratime" "discard" ]; - # }; - # } - # ]; - # You can also use disko to format your disks on installation. - # Please refer to the Documentation about the drives module for an example. - }; - }; -} diff --git a/example/hosts/example/hardware.nix b/example/hosts/example/hardware.nix deleted file mode 100644 index 855cafb..0000000 --- a/example/hosts/example/hardware.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - # this file adds custom NixOS configuration -} diff --git a/example/hosts/example/home.nix b/example/hosts/example/home.nix deleted file mode 100644 index e011ea7..0000000 --- a/example/hosts/example/home.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - # this file adds custom home-manager configuration -} diff --git a/example/secrets/secrets.md b/example/secrets/secrets.md deleted file mode 100644 index 86d99c6..0000000 --- a/example/secrets/secrets.md +++ /dev/null @@ -1,3 +0,0 @@ -# Secrets - -This file is for sops-nix and is also where your keys for various secrets will be stored. diff --git a/example/secrets/secrets.yaml b/example/secrets/secrets.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/flake.nix b/flake.nix deleted file mode 100644 index be1d5c2..0000000 --- a/flake.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ - description = "DashNix"; - - inputs = { - unstable.url = "github:NixOs/nixpkgs/nixos-unstable"; - stable.url = "github:NixOs/nixpkgs/nixos-25.05"; - nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; - nur.url = "github:nix-community/NUR"; - lanzaboote = { - url = "github:nix-community/lanzaboote/v0.4.2"; - inputs.nixpkgs.follows = "unstable"; - }; - statix.url = "github:oppiliappan/statix?ref=master"; - # Darkreader requires es20, hence a stable pin - pkgsDarkreader.url = "github:NixOs/nixpkgs/nixos-24.11"; - - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "unstable"; - }; - cachy.url = "github:xddxdd/nix-cachyos-kernel?rev=bb7b8aa687464f24dcd452354d9621331d6b0737"; - - sops-nix.url = "github:Mic92/sops-nix"; - - hyprland.url = "github:hyprwm/Hyprland"; - - ironbar = { - url = "github:JakeStanger/ironbar"; - inputs.nixpkgs.follows = "unstable"; - }; - - zen-browser.url = "github:youwen5/zen-browser-flake"; - - stylix.url = "github:danth/stylix"; - base16.url = "github:SenchoPens/base16.nix"; - disko.url = "github:nix-community/disko/latest"; - - anyrun.url = "github:Kirottu/anyrun"; - oxicalc.url = "github:Xetibo/OxiCalc"; - oxishut.url = "github:Xetibo/OxiShut"; - oxinoti.url = "github:Xetibo/OxiNoti"; - oxidash.url = "github:Xetibo/OxiDash"; - oxipaste.url = "github:Xetibo/OxiPaste"; - oxirun.url = "github:Xetibo/OxiRun"; - dashvim.url = "github:Xetibo/DashVim"; - - hyprdock.url = "github:Xetibo/hyprdock"; - reset.url = "github:Xetibo/ReSet"; - reset-plugins.url = "github:Xetibo/ReSet-Plugins"; - - superfreq.url = "github:NotAShelf/superfreq"; - - compose.url = "github:garnix-io/nixos-compose"; - }; - - outputs = {self, ...} @ inputs: let - currentSystem = "x86_64-linux"; - permittedPackages = [ - "olm-3.2.16" - ]; - importPkgsFn = import ./lib/importPkgs.nix; - defaultConfigureFn = pkgs: - importPkgsFn { - inherit inputs currentSystem permittedPackages pkgs; - }; - stable = defaultConfigureFn inputs.stable; - unstable = defaultConfigureFn inputs.unstable; - pkgsDarkreader = defaultConfigureFn inputs.pkgsDarkreader; - in rec { - dashNixLib = import ./lib { - inherit - self - inputs - unstable - permittedPackages - ; - dashNixAdditionalProps = { - inherit pkgsDarkreader; - }; - system = currentSystem; - }; - docs = import ./docs { - inherit inputs; - pkgs = unstable; - system = currentSystem; - inherit (inputs.unstable) lib; - inherit (dashNixLib) buildSystems; - }; - lint = inputs.statix.packages.${currentSystem}.default; - format = unstable.alejandra; - dashNixInputs = inputs; - stablePkgs = stable; - unstablePkgs = unstable; - modules = ./modules; - iso = dashNixLib.buildIso.config.system.build.isoImage; - nixosConfigurations = dashNixLib.buildSystems {root = ./example/.;}; - - mkFlake = stablePkgs.writeShellApplication { - name = "Create example config"; - text = - /* - bash - */ - '' - mkdir -p ~/gits/nixos - mkdir -p ~/gits/backup_nixos - - mv ~/gits/nixos/* ~/gits/backup_nixos/ - cp -r ${./example}/* ~/gits/nixos/ - ''; - }; - }; -} diff --git a/home/common.nix b/home/common.nix deleted file mode 100644 index fe2fa53..0000000 --- a/home/common.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - mkDashDefault, - config, - lib, - pkgs, - ... -}: let - username = config.conf.username; -in { - manual = { - html.enable = mkDashDefault false; - json.enable = mkDashDefault false; - manpages.enable = mkDashDefault false; - }; - - fonts.fontconfig.enable = mkDashDefault true; - - home = { - username = mkDashDefault username; - homeDirectory = mkDashDefault "/home/${username}"; - sessionPath = ["$HOME/.cargo/bin"]; - - enableNixpkgsReleaseCheck = mkDashDefault false; - sessionVariables = { - GOROOT = mkDashDefault "$HOME/.go"; - QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct"; - }; - - keyboard = mkDashDefault null; - }; - - programs.nix-index = { - enable = mkDashDefault true; - enableFishIntegration = mkDashDefault true; - }; - - nix = { - extraOptions = lib.mkIf (config ? sops.secrets && config.sops.secrets ? access.path) '' - !include ${config.sops.secrets.access.path} - ''; - }; -} diff --git a/home/default.nix b/home/default.nix deleted file mode 100644 index afc0ab3..0000000 --- a/home/default.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ - mkDashDefault, - dashNixAdditionalProps, - config, - homeMods, - inputs, - lib, - additionalHomeConfig, - mod, - pkgs, - root, - alternativePkgs, - system, - stable, - unstable, - ... -}: { - xdg = { - portal.config.common = { - default = mkDashDefault "hyprland;gtk"; - "org.freedesktop.impl.portal.FileChooser" = lib.mkIf (config.mods.media.filePickerPortal != "Default") "shana"; - }; - portal = { - enable = mkDashDefault true; - extraPortals = with pkgs; [ - xdg-desktop-portal-gtk # prob needed either way - (lib.mkIf (config.mods.media.filePickerPortal != "Default") xdg-desktop-portal-shana) - (lib.mkIf (config.mods.media.filePickerPortal == "Kde") kdePackages.xdg-desktop-portal-kde) - # Gnome uses their file manager, kinda cool tbh - (lib.mkIf (config.mods.media.filePickerPortal == "Gnome" && !config.mods.nautilus.enable) nautilus) - (lib.mkIf (config.mods.media.filePickerPortal == "Lxqt") xdg-desktop-portal-lxqt) - (lib.mkIf (config.mods.media.filePickerPortal == "Term") xdg-desktop-portal-termfilechooser) - ]; - }; - }; - home-manager = { - useGlobalPkgs = mkDashDefault true; - useUserPackages = mkDashDefault true; - extraSpecialArgs = { - inherit - inputs - root - alternativePkgs - system - stable - unstable - dashNixAdditionalProps - ; - mkDashDefault = import ../lib/override.nix {inherit lib;}; - }; - - users.${config.conf.username} = { - disabledModules = ["programs/anyrun.nix"]; - imports = - [ - ./common.nix - ./themes - ./sync.nix - ../lib/foxwrappers.nix - ] - ++ homeMods - ++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig - ++ lib.optional (builtins.pathExists mod) mod; - }; - }; -} diff --git a/home/sync.nix b/home/sync.nix deleted file mode 100644 index 38dceea..0000000 --- a/home/sync.nix +++ /dev/null @@ -1,55 +0,0 @@ -# derived from NixOS wiki -{ - config, - pkgs, - lib, - ... -}: let - username = config.mods.nextcloud.username; - password = - if (config.sops.secrets ? nextcloud.path) - then config.sops.secrets.nextcloud.path - else ""; - url = config.mods.nextcloud.url; - synclist = config.mods.nextcloud.synclist; -in - lib.mkIf config.mods.nextcloud.enable { - systemd.user = { - services = builtins.listToAttrs ( - map (opts: { - name = "${opts.name}"; - value = { - Unit = { - Description = "Auto sync Nextcloud"; - After = "network-online.target"; - }; - Service = { - Type = "simple"; - ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'"; - TimeoutStopSec = "180"; - KillMode = "process"; - KillSignal = "SIGINT"; - }; - Install.WantedBy = ["multi-user.target"]; - }; - }) - synclist - ); - timers = builtins.listToAttrs ( - map (opts: { - name = "${opts.name}"; - value = { - Unit.Description = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes"; - Timer.OnBootSec = "1min"; - Timer.OnUnitActiveSec = "60min"; - Install.WantedBy = [ - "multi-user.target" - "timers.target" - ]; - }; - }) - synclist - ); - startServices = true; - }; - } diff --git a/home/themes/default.nix b/home/themes/default.nix deleted file mode 100644 index 9976455..0000000 --- a/home/themes/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./qt.nix - ./kdeglobals.nix - ./oxiced.nix - ./firefoxTheme.nix - ]; -} diff --git a/home/themes/firefoxTheme.nix b/home/themes/firefoxTheme.nix deleted file mode 100644 index 0de46f6..0000000 --- a/home/themes/firefoxTheme.nix +++ /dev/null @@ -1,327 +0,0 @@ -# css from https://github.com/catppuccin/zen-browser/tree/main/themes -{ - config, - inputs, - pkgs, - lib, - ... -}: let - # at time of using this here, stylix might not be evaluated yet - # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - userChrome = - /* - css - */ - '' - /* Catppuccin Mocha Blue userContent.css*/ - - @media (prefers-color-scheme: dark) { - - /* Common variables affecting all pages */ - @-moz-document url-prefix("about:") { - :root { - --in-content-page-color: #${scheme.base05} !important; - --color-accent-primary: #${scheme.base0D} !important; - --color-accent-primary-hover: rgb(163, 197, 251) !important; // TODO - --color-accent-primary-active: rgb(138, 153, 250) !important; // TODO - background-color: #${scheme.base00} !important; - --in-content-page-background: #${scheme.base00} !important; - } - - } - - /* Variables and styles specific to about:newtab and about:home */ - @-moz-document url("about:newtab"), url("about:home") { - - :root { - --newtab-background-color: #${scheme.base00} !important; - --newtab-background-color-secondary: #${scheme.base02} !important; - --newtab-element-hover-color: #${scheme.base02} !important; - --newtab-text-primary-color: #${scheme.base05} !important; - --newtab-wordmark-color: #${scheme.base05} !important; - --newtab-primary-action-background: #${scheme.base0D} !important; - } - - .icon { - color: #${scheme.base0D} !important; - } - - .search-wrapper .logo-and-wordmark .logo { - //background: url("zen-logo-mocha.svg"), url("https://raw.githubusercontent.com/IAmJafeth/zen-browser/main/themes/Mocha/Blue/zen-logo-mocha.svg") no-repeat center !important; // TODO - display: inline-block !important; - height: 82px !important; - width: 82px !important; - background-size: 82px !important; - } - - @media (max-width: 609px) { - .search-wrapper .logo-and-wordmark .logo { - background-size: 64px !important; - height: 64px !important; - width: 64px !important; - } - } - - .card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title { - color: #${scheme.base0D} !important; - } - - .top-site-outer .search-topsite { - background-color: #${scheme.base0D} !important; - } - - .compact-cards .card-outer .card-context .card-context-icon.icon-download { - fill: #${scheme.base0B} !important; - } - } - - /* Variables and styles specific to about:preferences */ - @-moz-document url-prefix("about:preferences") { - :root { - --zen-colors-tertiary: #${scheme.base01} !important; - --in-content-text-color: #${scheme.base05} !important; - --link-color: #${scheme.base0D} !important; - --link-color-hover: rgb(163, 197, 251) !important; // TODO - --zen-colors-primary: #${scheme.base02} !important; - --in-content-box-background: #${scheme.base02} !important; - --zen-primary-color: #${scheme.base0D} !important; - } - - groupbox , moz-card{ - background: #${scheme.base00} !important; - } - - button, - groupbox menulist { - background: #${scheme.base02} !important; - color: #${scheme.base05} !important; - } - - .main-content { - background-color: #${scheme.base01} !important; - } - - .identity-color-blue { - --identity-tab-color: #8aadf4 !important; // TODO - --identity-icon-color: #8aadf4 !important; // TODO - } - - .identity-color-turquoise { - --identity-tab-color: #8bd5ca !important; // TODO - --identity-icon-color: #8bd5ca !important; // TODO - } - - .identity-color-green { - --identity-tab-color: #${scheme.base0B} !important; - --identity-icon-color: #${scheme.base0B} !important; - } - - .identity-color-yellow { - --identity-tab-color: #eed49f !important; // TODO - --identity-icon-color: #eed49f !important; // TODO - } - - .identity-color-orange { - --identity-tab-color: #f5a97f !important; // TODO - --identity-icon-color: #f5a97f !important; // TODO - } - - .identity-color-red { - --identity-tab-color: #ed8796 !important; // TODO - --identity-icon-color: #ed8796 !important; // TODO - } - - .identity-color-pink { - --identity-tab-color: #f5bde6 !important; // TODO - --identity-icon-color: #f5bde6 !important; // TODO - } - - .identity-color-purple { - --identity-tab-color: #c6a0f6 !important; // TODO - --identity-icon-color: #c6a0f6 !important; // TODO - } - } - - /* Variables and styles specific to about:addons */ - @-moz-document url-prefix("about:addons") { - :root { - --zen-dark-color-mix-base: #${scheme.base01} !important; - --background-color-box: #${scheme.base00} !important; - } - } - - /* Variables and styles specific to about:protections */ - @-moz-document url-prefix("about:protections") { - :root { - --zen-primary-color: #${scheme.base00} !important; - --social-color: #${scheme.base0E} !important; - --coockie-color: #${scheme.base08} !important; - --fingerprinter-color: #${scheme.base0A} !important; - --cryptominer-color: #${scheme.base07} !important; - --tracker-color: #${scheme.base0B} !important; - --in-content-primary-button-background-hover: rgb(81, 83, 05) !important; - --in-content-primary-button-text-color-hover: #${scheme.base05} !important; - --in-content-primary-button-background: #${scheme.base03} !important; - --in-content-primary-button-text-color: #${scheme.base05} !important; - } - - - .card { - background-color: #${scheme.base02} !important; - } - } - } - ''; - userContent = - /* - css - */ - '' - /* Catppuccin Mocha Blue userChrome.css*/ - @media (prefers-color-scheme: dark) { - - :root { - --zen-colors-primary: #${scheme.base02} !important; - --zen-primary-color: #${scheme.base0D} !important; - --zen-colors-secondary: #${scheme.base02} !important; - --zen-colors-tertiary: #${scheme.base01} !important; - --zen-colors-border: #${scheme.base0D} !important; - --toolbarbutton-icon-fill: #${scheme.base0D} !important; - --lwt-text-color: #${scheme.base05} !important; - --toolbar-field-color: #${scheme.base05} !important; - --tab-selected-textcolor: rgb(171, 197, 247) !important; // TODO - --toolbar-field-focus-color: #${scheme.base05} !important; - --toolbar-color: #${scheme.base05} !important; - --newtab-text-primary-color: #${scheme.base05} !important; - --arrowpanel-color: #${scheme.base05} !important; - --arrowpanel-background: #${scheme.base00} !important; - --sidebar-text-color: #${scheme.base05} !important; - --lwt-sidebar-text-color: #${scheme.base05} !important; - --lwt-sidebar-background-color: #${scheme.base01} !important; //TODO 11111b !important; - --toolbar-bgcolor: #${scheme.base02} !important; - --newtab-background-color: #${scheme.base00} !important; - --zen-themed-toolbar-bg: #${scheme.base01} !important; - --zen-main-browser-background: #${scheme.base01} !important; - } - - #permissions-granted-icon{ - color: #${scheme.base01} !important; - } - - .sidebar-placesTree { - background-color: #${scheme.base00} !important; - } - - #zen-workspaces-button { - background-color: #${scheme.base00} !important; - } - - #TabsToolbar { - background-color: #${scheme.base01} !important; - } - - #urlbar-background { - background-color: #${scheme.base00} !important; - } - - .content-shortcuts { - background-color: #${scheme.base00} !important; - border-color: #${scheme.base0D} !important; - } - - .urlbarView-url { - color: #${scheme.base0D} !important; - } - - #zenEditBookmarkPanelFaviconContainer { - background: #${scheme.base01} !important; - } - - toolbar .toolbarbutton-1 { - &:not([disabled]) { - &:is([open], [checked]) > :is(.toolbarbutton-icon, .toolbarbutton-text, .toolbarbutton-badge-stack){ - fill: #${scheme.base01}; - } - } - } - - .identity-color-blue { - --identity-tab-color: #${scheme.base0D} !important; - --identity-icon-color: #${scheme.base0D} !important; - } - - .identity-color-turquoise { - --identity-tab-color: #${scheme.base0C} !important; - --identity-icon-color: #${scheme.base0C} !important; - } - - .identity-color-green { - --identity-tab-color: #${scheme.base0B} !important; - --identity-icon-color: #${scheme.base0B} !important; - } - - .identity-color-yellow { - --identity-tab-color: #${scheme.base0A} !important; - --identity-icon-color: #${scheme.base0A} !important; - } - - .identity-color-orange { - --identity-tab-color: #${scheme.base09} !important; - --identity-icon-color: #${scheme.base09} !important; - } - - .identity-color-red { - --identity-tab-color: #${scheme.base08} !important; - --identity-icon-color: #${scheme.base08} !important; - } - - .identity-color-pink { - --identity-tab-color: #${scheme.base0F} !important; - --identity-icon-color: #${scheme.base0F} !important; // TODO f5c2e7 - } - - .identity-color-purple { - --identity-tab-color: #${scheme.base0E} !important; - --identity-icon-color: #${scheme.base0E} !important; - } - } - ''; - browsername = config.mods.homePackages.browser; - profiles = - if config.mods.homePackages.browser == "firefox" - then config.mods.browser.firefox.profiles - else if config.mods.homePackages.browser == "zen" - then config.mods.browser.zen.profiles - else if config.mods.homePackages.browser == "librewolf" - then [ - { - name = "default"; - value = {}; - } - ] - else []; - profileNamesFn = - builtins.catAttrs "name"; - chromesFn = builtins.map ( - name: - if (builtins.isString browsername) - then { - ".${browsername}/${name}/chrome/userContent.css" = { - text = userChrome; - }; - - ".${browsername}/${name}/chrome/userChrome.css" = { - text = userContent; - }; - } - else {} - ); - moduleFn = lib.lists.foldr (attr1: attr2: attr1 // attr2) {}; - mkFirefoxTheme = profiles: - profiles - |> profileNamesFn - |> chromesFn - |> moduleFn; -in {home.file = mkFirefoxTheme profiles;} diff --git a/home/themes/kdeglobals.nix b/home/themes/kdeglobals.nix deleted file mode 100644 index 8fa5003..0000000 --- a/home/themes/kdeglobals.nix +++ /dev/null @@ -1,252 +0,0 @@ -# This is ABSOLUTE GARGABE, KDE srsly, remove this! -# props to catppuccin mocha for sparing me from doing this manually: https://github.com/catppuccin/kde/blob/main/Resources/Base.colors -{ - pkgs, - config, - lib, - inputs, - ... -}: let - base16 = pkgs.callPackage inputs.base16.lib {}; - - baseScheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - power = number: powerIndex: - if powerIndex == 1 - then number - else if powerIndex == 0 - then 1 - else number * power number (powerIndex - 1); - - lookupTable = powerIndex: { - "0" = 0 * (power 16 powerIndex); - "1" = 1 * (power 16 powerIndex); - "2" = 2 * (power 16 powerIndex); - "3" = 3 * (power 16 powerIndex); - "4" = 4 * (power 16 powerIndex); - "5" = 5 * (power 16 powerIndex); - "6" = 6 * (power 16 powerIndex); - "7" = 7 * (power 16 powerIndex); - "8" = 8 * (power 16 powerIndex); - "9" = 9 * (power 16 powerIndex); - "a" = 10 * (power 16 powerIndex); - "b" = 11 * (power 16 powerIndex); - "c" = 12 * (power 16 powerIndex); - "d" = 13 * (power 16 powerIndex); - "e" = 14 * (power 16 powerIndex); - "f" = 15 * (power 16 powerIndex); - }; - - convertHex = hexChars: - recombineColors [ - (convertColor (lib.lists.take 2 hexChars)) - (convertColor (lib.lists.take 2 (lib.lists.drop 2 hexChars))) - (convertColor (lib.lists.take 2 (lib.lists.drop 4 hexChars))) - ]; - - convertColor = color: (lookupTable 1).${(lib.lists.head color)} + (lookupTable 0).${(lib.lists.last color)}; - recombineColors = colors: lib.lists.foldr (a: b: (toString a) + "," + (toString b)) "end" colors; - - scheme = { - base00 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base00) - ); - base01 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base01) - ); - base02 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base02) - ); - base03 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base03) - ); - base04 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base04) - ); - base05 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base05) - ); - base06 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base06) - ); - base07 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base07) - ); - base08 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base08) - ); - base09 = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base09) - ); - base0A = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base0A) - ); - base0B = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base0B) - ); - base0C = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base0C) - ); - base0D = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base0D) - ); - base0E = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base0E) - ); - base0F = lib.strings.removeSuffix ",end" ( - convertHex (lib.strings.stringToCharacters baseScheme.base0F) - ); - }; -in { - # temp - # crust -> surface1 - # subtext0 -> surface2 - # accentColor -> lavender - xdg.configFile."kdeglobals" = { - text = '' - [ColorEffects:Disabled] - Color=${scheme.base01} - ColorAmount=0.30000000000000004 - ColorEffect=2 - ContrastAmount=0.1 - ContrastEffect=0 - IntensityAmount=-1 - IntensityEffect=0 - - [ColorEffects:Inactive] - ChangeSelectionColor=true - Color=${scheme.base01} - ColorAmount=0.5 - ColorEffect=3 - ContrastAmount=0 - ContrastEffect=0 - Enable=true - IntensityAmount=0 - IntensityEffect=0 - - [Colors:Button] - BackgroundAlternate=${scheme.base07} - BackgroundNormal=${scheme.base02} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundActive=${scheme.base09} - ForegroundInactive=${scheme.base04} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base05} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [Colors:Complementary] - BackgroundAlternate=${scheme.base03} - BackgroundNormal=${scheme.base00} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundActive=${scheme.base09} - ForegroundInactive=${scheme.base04} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base05} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [Colors:Header] - BackgroundAlternate=${scheme.base03} - BackgroundNormal=${scheme.base00} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundActive=${scheme.base09} - ForegroundInactive=${scheme.base04} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base05} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [Colors:Selection] - BackgroundAlternate=${scheme.base07} - BackgroundNormal=${scheme.base07} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundLink=${scheme.base07} - ForegroundInactive=${scheme.base00} - ForegroundActive=${scheme.base09} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base03} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [Colors:Tooltip] - BackgroundAlternate=27,25,35 - BackgroundNormal=${scheme.base01} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundActive=${scheme.base09} - ForegroundInactive=${scheme.base04} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base05} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [Colors:View] - BackgroundAlternate=${scheme.base00} - BackgroundNormal=${scheme.base01} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundActive=${scheme.base09} - ForegroundInactive=${scheme.base04} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base05} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [Colors:Window] - BackgroundAlternate=${scheme.base03} - BackgroundNormal=${scheme.base00} - DecorationFocus=${scheme.base07} - DecorationHover=${scheme.base02} - ForegroundActive=${scheme.base09} - ForegroundInactive=${scheme.base04} - ForegroundLink=${scheme.base07} - ForegroundNegative=${scheme.base08} - ForegroundNeutral=${scheme.base0A} - ForegroundNormal=${scheme.base05} - ForegroundPositive=${scheme.base0B} - ForegroundVisited=${scheme.base0E} - - - [General] - ColorScheme=CustomBase16Nix - Name=CustomBase16Nix - accentActiveTitlebar=false - shadeSortColumn=true - - - [KDE] - contrast=4 - - - [WM] - activeBackground=${scheme.base01} - activeBlend=${scheme.base05} - activeForeground=${scheme.base05} - inactiveBackground=${scheme.base03} - inactiveBlend=${scheme.base04} - inactiveForeground=${scheme.base04} - ''; - }; -} diff --git a/home/themes/oxiced.nix b/home/themes/oxiced.nix deleted file mode 100644 index 8a9e7dc..0000000 --- a/home/themes/oxiced.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - config, - inputs, - pkgs, - ... -}: let - # at time of using this here, stylix might not be evaluated yet - # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - valueOrDefault = value: fallback: - if (scheme ? oxiced && scheme.oxiced ? ${value}) - then scheme.oxiced.value - else fallback; -in { - xdg.configFile."oxiced/theme.toml" = { - source = (pkgs.formats.toml {}).generate "oxiced" { - base = valueOrDefault "base" scheme.base00; - mantle = valueOrDefault "mantle" scheme.base01; - primary_bg = valueOrDefault "primary_bg" scheme.base02; - secondary_bg = valueOrDefault "secondary_bg" scheme.base03; - tertiary_bg = valueOrDefault "tertiary_bg" scheme.base04; - text = valueOrDefault "text" scheme.base05; - - primary = valueOrDefault "primary" scheme.base0D; - primary_contrast = valueOrDefault "primary_contrast" "FFFFFF"; - secondary = valueOrDefault "primary" scheme.base07; - secondary_contrast = valueOrDefault "secondary_contrast" "FFFFFF"; - - good = valueOrDefault "good" scheme.base0B; - good_contrast = valueOrDefault "good_contrast" "000000"; - bad = valueOrDefault "bad" scheme.base08; - bad_contrast = valueOrDefault "bad_contrast" "FFFFFF"; - warning = valueOrDefault "warning" scheme.base0A; - warning_contrast = valueOrDefault "warning_contrast" "000000"; - info = valueOrDefault "info" scheme.base0C; - info_contrast = valueOrDefault "info_contrast" "FFFFFF"; - - rose = valueOrDefault "rose" scheme.base06; - lavender = valueOrDefault "lavender" scheme.base07; - blue = valueOrDefault "blue" scheme.base0D; - mauve = valueOrDefault "mauve" scheme.base0E; - flamingo = valueOrDefault "flamingo" scheme.base0F; - - border_color_weak = valueOrDefault "border_color_weak" scheme.base05; - border_color_strong = valueOrDefault "border_color_strong" scheme.base0D; - - tint_amount = valueOrDefault "tint_amound" 0.10; - shade_amount = valueOrDefault "shade_amount" 0.05; - - border_radius = valueOrDefault "border_radius" 10; - - padding_xs = valueOrDefault "padding_xs" 4.0; - padding_sm = valueOrDefault "padding_sm" 8.0; - padding_md = valueOrDefault "padding_md" 12.0; - padding_lg = valueOrDefault "padding_lg" 16.0; - padding_xl = valueOrDefault "padding_xl" 24.0; - padding_xxl = valueOrDefault "padding_xxl" 32.0; - - font_sm = valueOrDefault "font_sm" 10.0; - font_md = valueOrDefault "font_md" 14.0; - font_lg = valueOrDefault "font_lg" 18.0; - font_xl = valueOrDefault "font_xl" 24.0; - font_xxl = valueOrDefault "font_xxl" 32.0; - - # legacy compatibility - name = scheme.scheme; - inherit (scheme) base00; - inherit (scheme) base01; - inherit (scheme) base02; - inherit (scheme) base03; - inherit (scheme) base04; - inherit (scheme) base05; - inherit (scheme) base06; - inherit (scheme) base07; - inherit (scheme) base08; - inherit (scheme) base09; - base0a = scheme.base0A; - base0b = scheme.base0B; - base0c = scheme.base0C; - base0d = scheme.base0D; - base0e = scheme.base0E; - base0f = scheme.base0F; - }; - }; -} diff --git a/iso/configuration.nix b/iso/configuration.nix deleted file mode 100644 index 9272a65..0000000 --- a/iso/configuration.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - pkgs, - modulesPath, - lib, - self, - inputs, - ... -}: let - system = "x86_64-linux"; -in { - imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"]; - nixpkgs.hostPlatform = { - inherit system; - }; - - environment.systemPackages = with pkgs; [ - inputs.dashvim.packages.${system}.minimal - disko - git - firefox - kitty - gnome-disk-utility - inputs.disko.packages.${system}.disko-install - ]; - - networking = { - wireless.enable = false; - networkmanager.enable = true; - }; - - nix.settings.experimental-features = [ - "nix-command" - "flakes" - "pipe-operators" - ]; - - users.users.nixos = { - isNormalUser = true; - password = "nixos"; - extraGroups = ["wheel"]; - }; - - image.baseName = lib.mkForce "DashNix"; - - programs = { - hyprland = { - enable = true; - withUWSM = true; - xwayland.enable = false; - }; - uwsm.enable = true; - }; - - fonts.packages = [pkgs.adwaita-fonts]; - i18n.defaultLocale = "en_US.UTF-8"; - - services = { - displayManager.autoLogin = { - enable = true; - user = "nixos"; - }; - greetd = { - enable = true; - settings = { - terminal.vt = 1; - default_session = { - command = "${lib.getExe pkgs.hyprland}"; - user = "nixos"; - }; - }; - }; - }; - - isoImage = { - makeEfiBootable = true; - makeUsbBootable = true; - contents = [ - { - source = "${self}/example"; - target = "example-config"; - } - ]; - }; - - system.stateVersion = "25.11"; -} diff --git a/lib/default.nix b/lib/default.nix deleted file mode 100644 index d8a7402..0000000 --- a/lib/default.nix +++ /dev/null @@ -1,292 +0,0 @@ -{ - inputs, - unstable, - self, - system, - permittedPackages, - dashNixAdditionalProps ? {}, - ... -}: let - defaultConfig = { - config = { - allowUnfree = true; - permittedInsecurePackages = permittedPackages; - }; - overlays = [ - inputs.cachy.overlays.default - inputs.nur.overlays.default - ]; - inherit system; - }; - mkPkgs = { - pkgs, - config, - }: let - overlays = - if (config ? overlays) - then config.overlays - else []; - comnbinedConfig = config // {overlays = overlays ++ defaultConfig.overlays;}; - in - import pkgs comnbinedConfig; -in rec { - mkNixos = { - root, - inputLib, - lib, - stablePkgs, - unstablePkgs, - stableMods, - unstableMods, - overridePkgs, - ... - }: - builtins.listToAttrs ( - map - (name: { - inherit name; - value = let - mod = root + /hosts/${name}/configuration.nix; - additionalNixosConfig = root + /hosts/${name}/hardware.nix; - additionalHomeConfig = root + /hosts/${name}/home.nix; - args = { - inherit - self - inputs - mod - additionalHomeConfig - system - root - dashNixAdditionalProps - lib - ; - stable = stablePkgs; - unstable = unstablePkgs; - pkgs = lib.mkForce ( - if overridePkgs - then stablePkgs - else unstablePkgs - ); - alternativePkgs = - if overridePkgs - then unstablePkgs - else stablePkgs; - hostName = name; - homeMods = - if overridePkgs - then unstableMods.home - else stableMods.home; - mkDashDefault = import ./override.nix {inherit lib;}; - }; - nixosMods = - if overridePkgs - then unstableMods.nixos - else stableMods.nixos; - in - inputLib.nixosSystem { - modules = - [ - {_module.args = args;} - mod - ] - ++ nixosMods - ++ lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig - ++ lib.optional (builtins.pathExists mod) mod; - }; - }) - ( - lib.lists.remove "" ( - lib.attrsets.mapAttrsToList (name: fType: - if fType == "directory" - then name - else "") ( - builtins.readDir (root + /hosts) - ) - ) - ) - ); - - mkHome = { - root, - lib, - stablePkgs, - unstablePkgs, - stableMods, - unstableMods, - overridePkgs, - ... - }: - builtins.listToAttrs ( - map - (name: { - inherit name; - value = let - mod = root + /homes/${name}/configuration.nix; - additionalHomeConfig = root + /homes/${name}/home.nix; - args = { - inherit - self - inputs - mod - additionalHomeConfig - system - root - dashNixAdditionalProps - lib - ; - stable = stablePkgs; - unstable = unstablePkgs; - pkgs = lib.mkForce ( - if overridePkgs - then stablePkgs - else unstablePkgs - ); - alternativePkgs = - if overridePkgs - then unstablePkgs - else stablePkgs; - userName = name; - mkDashDefault = import ./override.nix {inherit lib;}; - }; - homeMods = - if overridePkgs - then unstableMods.home - else stableMods.home; - in - inputs.home-manager.lib.homeManagerConfiguration - { - inherit (args) pkgs; - modules = - [ - {_module.args = args;} - mod - ] - ++ homeMods - ++ [ - ../home/common.nix - ../home/themes - ../home/sync.nix - ./foxwrappers.nix - ] - ++ lib.optional (builtins.pathExists mod) mod; - }; - }) - ( - lib.lists.remove "" ( - lib.attrsets.mapAttrsToList (name: fType: - if fType == "directory" - then name - else "") ( - builtins.readDir (root + /homes) - ) - ) - ) - ); - - /* - * - # buildSystems - - Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well. - - A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration. - - The second parameter is the root of your configuration, which should be ./. in most cases. - - `root` - - : the root path of your configuration - - # Example usage - :::{.example} - ```nix - nixosConfigurations = buildSystems { root = ./.; }; - ``` - ::: - */ - # let - # paths = builtins.readDir ; - # names = lib.lists.remove "default" ( - # map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths) - # ); - - # in - buildFunc = func: { - root, - unstableBundle ? {}, - stableBundle ? {}, - overridePkgs ? false, - ... - }: let - defaultNixosMods = inputs: [ - inputs.lanzaboote.nixosModules.lanzaboote - inputs.nixos-wsl.nixosModules.default - inputs.home-manager.nixosModules.home-manager - inputs.stylix.nixosModules.stylix - inputs.disko.nixosModules.disko - inputs.superfreq.nixosModules.default - inputs.sops-nix.nixosModules.sops - ../base - ../home - ../modules - ]; - - defaultHomeMods = inputs: [ - inputs.anyrun.homeManagerModules.default - inputs.ironbar.homeManagerModules.default - inputs.oxicalc.homeManagerModules.default - inputs.oxishut.homeManagerModules.default - inputs.oxinoti.homeManagerModules.default - inputs.oxidash.homeManagerModules.default - inputs.oxipaste.homeManagerModules.default - inputs.oxirun.homeManagerModules.default - inputs.hyprdock.homeManagerModules.default - inputs.hyprland.homeManagerModules.default - inputs.reset.homeManagerModules.default - inputs.sops-nix.homeManagerModules.sops - inputs.dashvim.homeManagerModules.dashvim - ../modules - ]; - - unstableInput = unstableBundle.pkgs or inputs.unstable; - stableInput = stableBundle.pkgs or inputs.stable; - unstableConfig = unstableBundle.config or defaultConfig; - stableConfig = stableBundle.config or defaultConfig; - unstableInputs = (unstableBundle.inputs or {}) // inputs; - stableInputs = (stableBundle.inputs or {}) // inputs; - unstableMods = { - home = (defaultHomeMods unstableInputs) ++ (unstableBundle.mods.home or []); - nixos = (defaultNixosMods unstableInputs) ++ (unstableBundle.mods.nixos or []); - }; - stableMods = { - home = (defaultHomeMods stableInputs) ++ (stableBundle.mods.home or []); - nixos = (defaultNixosMods stableInputs) ++ (stableBundle.mods.nixos or []); - }; - - unstablePkgs = mkPkgs { - pkgs = unstableInput; - config = unstableConfig; - }; - stablePkgs = mkPkgs { - pkgs = stableInput; - config = stableConfig; - }; - inputLib = unstableInput.lib; - inherit (unstablePkgs) lib; - in - func { - inherit lib inputLib stablePkgs unstablePkgs stableMods unstableMods stableInputs unstableInputs root overridePkgs; - }; - - buildSystems = buildFunc mkNixos; - buildHome = buildFunc mkHome; - - buildIso = inputs.unstable.lib.nixosSystem { - specialArgs = { - inherit self inputs unstable; - }; - modules = [ - ../iso/configuration.nix - ]; - }; -} diff --git a/lib/foxextensions.nix b/lib/foxextensions.nix deleted file mode 100644 index d2360ad..0000000 --- a/lib/foxextensions.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - lib, - name, - ... -}: let - mkExtension = id: install_url: { - ${id} = { - inherit install_url; - installation_mode = "normal_installed"; - }; - }; -in { - options.mods.browser.${name} = { - darkreader = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to enable darkreader"; - }; - extensions = lib.mkOption { - default = [ - (mkExtension "uBlock0@raymondhill.net" "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi") - (mkExtension "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi") - (mkExtension "{d7742d87-e61d-4b78-b8a1-b469842139fa}" "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi") - (mkExtension "firefox@ghostery.com" "https://addons.mozilla.org/firefox/downloads/latest/ghostery/latest.xpi") - (mkExtension "CanvasBlocker@kkapsner.de" "https://addons.mozilla.org/firefox/downloads/latest/canvasblocker/latest.xpi") - (mkExtension "jid1-KKzOGWgsW3Ao4Q@jetpack" "https://addons.mozilla.org/firefox/downloads/latest/i-dont-care-about-cookies/latest.xpi") - (mkExtension "keepassxc-browser@keepassxc.org" "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi") - (mkExtension "@react-devtools" "https://addons.mozilla.org/firefox/downloads/latest/react-devtools/latest.xpi") - (mkExtension "extension@redux.devtools" "https://addons.mozilla.org/firefox/downloads/latest/reduxdevtools/latest.xpi") - (mkExtension "{20a9bb38-ed7c-4faf-9aaf-7c5d241fd747}" "https://addons.mozilla.org/firefox/downloads/file/4524699/angular_devtools-1.0.37.xpi") - (mkExtension "private-relay@firefox.com" "https://addons.mozilla.org/firefox/downloads/latest/private-relay/latest.xpi") - ]; - example = [ - { - "78272b6fa58f4a1abaac99321d503a20@proton.me" = { - install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/proton-pass/latest.xpi"; - installation_mode = "normal_installed"; - }; - } - ]; - type = with lib.types; listOf anything; - description = '' - List of extensions via attrsets: - ```nix - # id - # figure out the id via: - # nix run github:tupakkatapa/mozid -- 'https://addons.mozilla.org/en/firefox/addon/ublock-origin' - "uBlock0@raymondhill.net" = { - # install url - install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; - # method https://mozilla.github.io/policy-templates/#extensionsettings - installation_mode = "force_installed"; - }; - ``` - ''; - }; - }; -} diff --git a/lib/foxwrappers.nix b/lib/foxwrappers.nix deleted file mode 100644 index e5c39a7..0000000 --- a/lib/foxwrappers.nix +++ /dev/null @@ -1,43 +0,0 @@ -# https://github.com/0xc000022070/zen-browser-flake/issues/9#issuecomment-2711057434 -{inputs, ...}: let - mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix"; -in { - imports = [ - (mkFirefoxModule { - modulePath = [ - "programs" - "zen-browser" - ]; - name = "Zen Browser"; - wrappedPackageName = "zen"; - unwrappedPackageName = "zen-unwrapped"; - visible = true; - platforms = { - linux = { - vendorPath = ".zen"; - configPath = ".zen"; - }; - darwin = { - configPath = "Library/Application Support/Zen"; - }; - }; - }) - (mkFirefoxModule { - modulePath = [ - "programs" - "librewolf-dashnix" - ]; - name = "LibreWolf"; - description = "LibreWolf is a privacy enhanced Firefox fork."; - wrappedPackageName = "librewolf"; - unwrappedPackageName = "librewolf-unwrapped"; - - platforms.linux = {configPath = ".librewolf";}; - platforms.darwin = { - configPath = "Library/Application Support/LibreWolf"; - }; - - enableBookmarks = false; - }) - ]; -} diff --git a/lib/importPkgs.nix b/lib/importPkgs.nix deleted file mode 100644 index cfcd413..0000000 --- a/lib/importPkgs.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - inputs, - currentSystem, - permittedPackages, - pkgs, -}: -import pkgs { - system = currentSystem; - config = { - allowUnfree = true; - permittedInsecurePackages = permittedPackages; - }; - overlays = [ - inputs.nur.overlays.default - inputs.cachy.overlays.default - ]; -} diff --git a/lib/override.nix b/lib/override.nix deleted file mode 100644 index 4d222f8..0000000 --- a/lib/override.nix +++ /dev/null @@ -1 +0,0 @@ -{lib, ...}: value: lib.mkOverride 999 value diff --git a/lib/wm.nix b/lib/wm.nix deleted file mode 100644 index 416956a..0000000 --- a/lib/wm.nix +++ /dev/null @@ -1,446 +0,0 @@ -let - browserName = config: - if (builtins.isString config.mods.homePackages.browser) - then config.mods.homePackages.browser - else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram - then config.mods.homePackages.browser.meta.mainProgram - else config.mods.homePackages.browser.pname; - mkSimpleBind = modKeys: key: command: args: { - inherit modKeys key command args; - }; - mkRepeatSimpleBind = modKeys: key: command: args: { - inherit modKeys key command args; - meta.hyprland.repeat = true; - }; - mkSimpleCustomBind = modKeys: key: niri: hyprland: args: { - inherit modKeys key args; - command = { - inherit niri hyprland; - }; - }; - mkRepeatCustomBind = modKeys: key: niri: hyprland: args: { - inherit modKeys key args; - command = { - inherit niri hyprland; - }; - meta.hyprland.repeat = true; - }; - mkBindWithDesc = modKeys: key: command: args: desc: - { - meta.niri.desc = desc; - } - // mkSimpleBind modKeys key command args; -in { - defaultWindowRules = { - niri = [ - '' - match app-id=r#"^org\.keepassxc\.KeePassXC$"# - match app-id=r#"^org\.gnome\.World\.Secrets$"# - - block-out-from "screen-capture" - '' - '' - match app-id=r#"^steam$"# - open-on-workspace "0" - '' - '' - geometry-corner-radius 12 - clip-to-geometry true - '' - ]; - hyprland = [ - # window rules - "match:class OxiCalc, float on" - "match:class winecfg.exe, float on" - "match:class copyq, float on" - "match:class swappy, center on" - "match:class steam, workspace 10 silent" - ]; - }; - - defaultStartup = config: { - all = [ - "systemctl --user import-environment" - "dbus-update-activation-environment --systemd --all" - "hyprctl setcursor ${config.mods.stylix.cursor.name} ${toString config.mods.stylix.cursor.size}" - # ensures the systemd service knows what "hyprctl" is :) - ( - if config.mods.gaming.gamemode - then "systemctl try-restart gamemoded.service --user" - else "" - ) - - # other programs - "${browserName config}" - ( - if config.mods.oxi.hyprdock.enable - then "hyprdock --server" - else "" - ) - ( - if config.mods.hypr.hyprpaper.enable - then "hyprpaper" - else "" - ) - ( - if config.mods.hypr.hyprland.useIronbar - then "ironbar" - else "" - ) - ( - if config.mods.oxi.oxipaste.enable - then "oxipaste_daemon" - else "" - ) - ( - if config.mods.oxi.oxinoti.enable - then "oxinoti" - else "" - ) - ]; - niri = [ - "XDG_CURRENT_DESKTOP=Niri" - "XDG_SESSION_DESKTOP=Niri" - "XDG_SESSION_TYPE=wayland" - ]; - hyprland = [ - "XDG_CURRENT_DESKTOP=Hyprland" - "XDG_SESSION_DESKTOP=Hyprland" - "XDG_SESSION_TYPE=wayland" - ]; - }; - - defaultEnv = config: { - all = { - GTK_CSD = "0"; - TERM = "kitty /bin/fish"; - HYPRCURSOR_THEME = config.mods.stylix.cursor.name; - HYPRCURSOR_SIZE = toString config.mods.stylix.cursor.size; - XCURSOR_THEME = config.mods.stylix.cursor.name; - XCURSOR_SIZE = toString config.mods.stylix.cursor.size; - QT_QPA_PLATFORM = "wayland"; - QT_QPA_PLATFORMTHEME = "qt5ct"; - QT_WAYLAND_FORCE_DPI = "96"; - QT_AUTO_SCREEN_SCALE_FACTOR = "0"; - QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; - QT_SCALE_FACTOR = "1"; - EDITOR = "neovide --novsync --nofork"; - - LIBVA_DRIVER_NAME = - if config.mods.gpu.nvidia.enable - then "nvidia" - else ""; - GBM_BACKEND = - if config.mods.gpu.nvidia.enable - then "nvidia-drm" - else ""; - __GLX_VENDOR_LIBRARY_NAME = - if config.mods.gpu.nvidia.enable - then "nvidia" - else ""; - }; - niri = {}; - hyprland = {}; - }; - - defaultBinds = config: [ - (mkSimpleBind ["Mod"] "1" "focusWorkspace" ["1"]) - (mkSimpleBind ["Mod"] "2" "focusWorkspace" ["2"]) - (mkSimpleBind ["Mod"] "3" "focusWorkspace" ["3"]) - (mkSimpleBind ["Mod"] "4" "focusWorkspace" ["4"]) - (mkSimpleBind ["Mod"] "5" "focusWorkspace" ["5"]) - (mkSimpleBind ["Mod"] "6" "focusWorkspace" ["6"]) - (mkSimpleBind ["Mod"] "7" "focusWorkspace" ["7"]) - (mkSimpleBind ["Mod"] "8" "focusWorkspace" ["8"]) - (mkSimpleBind ["Mod"] "9" "focusWorkspace" ["9"]) - (mkSimpleBind ["Mod"] "0" "focusWorkspace" ["10"]) - (mkSimpleBind ["Mod" "Shift"] "1" "moveToWorkspace" ["1"]) - (mkSimpleBind ["Mod" "Shift"] "2" "moveToWorkspace" ["2"]) - (mkSimpleBind ["Mod" "Shift"] "3" "moveToWorkspace" ["3"]) - (mkSimpleBind ["Mod" "Shift"] "4" "moveToWorkspace" ["4"]) - (mkSimpleBind ["Mod" "Shift"] "5" "moveToWorkspace" ["5"]) - (mkSimpleBind ["Mod" "Shift"] "6" "moveToWorkspace" ["6"]) - (mkSimpleBind ["Mod" "Shift"] "7" "moveToWorkspace" ["7"]) - (mkSimpleBind ["Mod" "Shift"] "8" "moveToWorkspace" ["8"]) - (mkSimpleBind ["Mod" "Shift"] "9" "moveToWorkspace" ["9"]) - (mkSimpleBind ["Mod" "Shift"] "0" "moveToWorkspace" ["10"]) - (mkSimpleBind ["Mod"] "B" "toggleFullscreen" []) - (mkSimpleBind ["Mod"] "V" "toggleFloating" []) - (mkSimpleBind ["Mod" "Shift"] "M" "quit" []) - (mkSimpleBind ["Mod"] "Left" "moveWindowLeft" []) - (mkSimpleBind ["Mod"] "Down" "moveWindowDown" []) - (mkSimpleBind ["Mod"] "Up" "moveWindowUp" []) - (mkSimpleBind ["Mod"] "Right" "moveWindowRight" []) - - (mkRepeatSimpleBind ["Mod"] "J" "moveFocusLeft" []) - (mkRepeatSimpleBind ["Mod"] "K" "moveFocusDown" []) - (mkRepeatSimpleBind ["Mod"] "L" "moveFocusUp" []) - (mkRepeatSimpleBind ["Mod"] "semicolon" "moveFocusRight" []) - - (mkBindWithDesc ["Mod"] "Q" "killActive" [] "Kill active window") - - (mkBindWithDesc ["Mod"] "N" "spawn" ["neovide"] "Open Neovide") - (mkBindWithDesc ["Mod"] "T" "spawn-sh" ["kitty" "-1"] "Open Kitty") - (mkBindWithDesc ["Mod" "Shift"] "L" "spawn" ["hyprlock"] "Lock screen") - - ( - if config.mods.yazi.enable - then mkBindWithDesc ["Mod"] "E" "spawn-sh" ["EDITOR='neovide --no-fork' kitty yazi"] "Open Yazi" - else {} - ) - ( - if config.mods.anyrun.enable - then mkBindWithDesc ["Mod"] "R" "spawn" ["anyrun"] "Open Anyrun" - else {} - ) - ( - if config.mods.oxi.oxirun.enable - then mkBindWithDesc ["Mod"] "R" "spawn" ["oxirun"] "Open OxiRun" - else {} - ) - ( - if config.mods.oxi.oxidash.enable - then mkBindWithDesc ["Mod"] "M" "spawn" ["oxidash"] "Open OxiDash" - else {} - ) - ( - if config.mods.oxi.oxicalc.enable - then mkBindWithDesc ["Mod"] "G" "spawn" ["oxicalc"] "Open Oxicalc" - else {} - ) - ( - if config.mods.oxi.oxishut.enable - then mkBindWithDesc ["Mod"] "D" "spawn" ["oxishut"] "Open OxiShut" - else {} - ) - ( - if config.mods.oxi.oxipaste.enable - then mkBindWithDesc ["Mod"] "A" "spawn" ["oxipaste"] "Open Oxipaste" - else {} - ) - ( - if config.mods.oxi.hyprdock.enable - then mkBindWithDesc ["Mod" "Shift"] "P" "spawn" ["hyprdock --gui"] "Open Hyprdock" - else {} - ) - ( - if config.mods.hypr.hyprlock.enable - then mkBindWithDesc ["Mod" "Shift" "Alt"] "L" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl suspend"] "Lock and suspend" - else {} - ) - ( - if config.mods.hypr.hyprlock.enable - then mkBindWithDesc ["Mod" "Shift" "Alt"] "K" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl hibernate"] "Lock and hibernate" - else {} - ) - - (mkBindWithDesc ["Mod"] "F" "spawn" ["${browserName config}"] "Open Browser") - ( - if - ( - browserName config == "firefox" || browserName config == "zen" - ) - then mkBindWithDesc ["Mod" "Shift"] "F" "spawn" ["${browserName config} -p special"] "Open Browser Special Profile" - else {} - ) - - (mkBindWithDesc ["Mod"] "S" "spawn-sh" [''grim -g "$(slurp)" - | wl-copy''] "Take Screenshot") - (mkBindWithDesc ["Mod" "Shift"] "S" "spawn-sh" [''grim -g "$(slurp)" - | satty -f -''] "Take Screenshot and edit") - - ( - if config.mods.scripts.audioControl - then { - key = "XF86AudioMute"; - command = "spawn-sh"; - args = ["audioControl mute"]; - meta.niri = { - allowWhileLocked = true; - desc = "Mute Audio"; - }; - } - else {} - ) - ( - if config.mods.scripts.audioControl - then { - key = "XF86AudioRaiseVolume"; - command = "spawn-sh"; - args = ["audioControl +5%"]; - meta.niri = { - allowWhileLocked = true; - desc = "Raise Audio Volume"; - }; - } - else {} - ) - ( - if config.mods.scripts.audioControl - then { - key = "XF86AudioLowerVolume"; - command = "spawn-sh"; - args = ["audioControl -5%"]; - meta.niri = { - allowWhileLocked = true; - desc = "Lower Audio Volume"; - }; - } - else {} - ) - { - key = "XF86AudioPlay"; - command = "spawn-sh"; - args = ["playerctl play-pause"]; - meta.niri = { - allowWhileLocked = true; - desc = "Play/Pause"; - }; - } - { - key = "XF86AudioNext"; - command = "spawn-sh"; - args = ["playerctl next"]; - meta.niri = { - allowWhileLocked = true; - desc = "Next Song"; - }; - } - { - key = "XF86AudioPrev"; - command = "spawn-sh"; - args = ["playerctl previous"]; - meta.niri = { - allowWhileLocked = true; - desc = "Previous Song"; - }; - } - ( - if config.mods.scripts.changeBrightness - then { - key = "XF86MonBrightnessDown"; - command = "spawn-sh"; - args = ["changeBrightness -10%"]; - meta.niri = { - allowWhileLocked = true; - desc = "Lower Brigthness"; - }; - } - else {} - ) - ( - if config.mods.scripts.changeBrightness - then { - key = "XF86MonBrightnessUp"; - command = "spawn-sh"; - args = ["changeBrightness +10%"]; - meta.niri = { - allowWhileLocked = true; - desc = "Raise Brigthness"; - }; - } - else {} - ) - - # Niri only keybinds - (mkSimpleCustomBind ["Mod"] "BracketLeft" "consume-or-expel-window-left" null []) - (mkSimpleCustomBind ["Mod"] "BracketRight" "consume-or-expel-window-right" null []) - (mkSimpleCustomBind ["Mod"] "Comma" "consume-window-into-column" null []) - (mkSimpleCustomBind ["Mod"] "Period" "expel-window-from-column" null []) - (mkSimpleCustomBind ["Mod"] "Y" "switch-preset-column-width" null []) - (mkSimpleCustomBind ["Mod"] "Tab" "focus-workspace-previous" null []) - (mkSimpleCustomBind ["Mod" "Shift"] "V" "switch-focus-between-floating-and-tiling" null []) - (mkSimpleCustomBind ["Mod" "Shift"] "B" "expand-column-to-available-width" null []) - (mkSimpleCustomBind ["Mod"] "U" "set-column-width" null ["-10%"]) - (mkSimpleCustomBind ["Mod"] "P" "set-column-width" null ["+10%"]) - (mkSimpleCustomBind ["Mod"] "O" "set-column-width" null ["50%"]) - (mkSimpleCustomBind ["Mod" "Shift"] "Minus" "set-window-height" null ["-10%"]) - (mkSimpleCustomBind ["Mod" "Shift"] "Equal" "set-window-height" null ["+10%"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "1" "move-column-to-workspace" null ["1"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "2" "move-column-to-workspace" null ["2"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "3" "move-column-to-workspace" null ["3"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "4" "move-column-to-workspace" null ["4"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "5" "move-column-to-workspace" null ["5"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "6" "move-column-to-workspace" null ["6"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "7" "move-column-to-workspace" null ["7"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "8" "move-column-to-workspace" null ["8"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "9" "move-column-to-workspace" null ["9"]) - (mkSimpleCustomBind ["Mod" "Ctrl"] "0" "move-column-to-workspace" null ["10"]) - (mkSimpleCustomBind ["Mod" "Shift"] "J" "focus-monitor-left" null []) - (mkSimpleCustomBind ["Mod" "Shift"] "semicolon" "focus-monitor-right" null []) - (mkSimpleCustomBind ["Mod" "Ctrl"] "J" "move-column-to-monitor-left" null []) - (mkSimpleCustomBind ["Mod" "Ctrl"] "semicolon" "move-column-to-monitor-right" null []) - (mkSimpleCustomBind ["Mod" "Shift"] "Slash" "show-hotkey-overlay" null []) - { - modKeys = ["Mod"]; - key = "W"; - command.niri = "toggle-overview"; - meta.niri = { - desc = "Overview"; - repeat = false; - }; - } - { - modKeys = ["Mod"]; - key = "Escape"; - command.niri = "toggle-keyboard-shortcuts-inhibit"; - meta.niri = { - allowInhibit = false; - }; - } - { - modKeys = ["Mod"]; - key = "WheelScrollUp"; - command.niri = "focus-workspace-up"; - meta.niri.cooldown = 150; - } - { - modKeys = ["Mod"]; - key = "WheelScrollDown"; - command.niri = "focus-workspace-down"; - meta.niri.cooldown = 150; - } - { - modKeys = ["Mod"]; - key = "WheelScrollRight"; - command.niri = "focus-column-right"; - meta.niri.cooldown = 150; - } - { - modKeys = ["Mod"]; - key = "WheelScrollLeft"; - command.niri = "focus-column-left"; - meta.niri.cooldown = 150; - } - - # Hyprland only keybinds - (mkSimpleCustomBind ["Mod"] "C" null "togglesplit" []) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "1" null "movetoworkspacesilent" ["1"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "2" null "movetoworkspacesilent" ["2"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "3" null "movetoworkspacesilent" ["3"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "4" null "movetoworkspacesilent" ["4"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "5" null "movetoworkspacesilent" ["5"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "6" null "movetoworkspacesilent" ["6"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "7" null "movetoworkspacesilent" ["7"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "8" null "movetoworkspacesilent" ["8"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "9" null "movetoworkspacesilent" ["9"]) - (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "0" null "movetoworkspacesilent" ["10"]) - (mkRepeatCustomBind ["Mod"] "U" null "resizeactive" ["-20" "0"]) - (mkRepeatCustomBind ["Mod"] "P" null "resizeactive" ["20" "0"]) - (mkRepeatCustomBind ["Mod"] "O" null "resizeactive" ["0" "-20"]) - (mkRepeatCustomBind ["Mod"] "I" null "resizeactive" ["0" "20"]) - (mkSimpleCustomBind ["Mod" "ALT"] "J" null "layoutmsg" ["preselect" "l"]) - (mkSimpleCustomBind ["Mod" "ALT"] "K" null "layoutmsg" ["preselect" "d"]) - (mkSimpleCustomBind ["Mod" "ALT"] "L" null "layoutmsg" ["preselect" "u"]) - (mkSimpleCustomBind ["Mod" "ALT"] "semicolon" null "layoutmsg" ["preselect" "r"]) - (mkSimpleCustomBind ["Mod" "ALT"] "H" null "layoutmsg" ["preselect" "n"]) - ( - if config.mods.hypr.hyprland.hyprspaceEnable - then { - modKeys = ["Mod"]; - key = "W"; - command.hyprland = "overview:toggle"; - args = []; - } - else {} - ) - ]; -} diff --git a/logo.svg b/logo.svg deleted file mode 100644 index 8c9526c..0000000 --- a/logo.svg +++ /dev/null @@ -1,293 +0,0 @@ - - - -DashNixDashNix diff --git a/modules/conf.nix b/modules/conf.nix deleted file mode 100644 index 0e3a166..0000000 --- a/modules/conf.nix +++ /dev/null @@ -1,170 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.conf = { - system = lib.mkOption { - default = "x86_64-linux"; - # no fisherprice unix support - type = with lib.types; (enum [ - "x86_64-linux" - "aarch64-linux" - "aarch64-linux-android" - ]); - example = "aarch64-linux"; - description = '' - System architecture. - ''; - }; - - systemLocalTime = lib.mkOption { - default = false; - example = true; - description = '' - System time for dualbooting - ''; - }; - - wsl = lib.mkOption { - default = false; - example = true; - description = '' - Runs Nix in wsl - ''; - }; - - secureBoot = lib.mkOption { - default = false; - example = true; - description = '' - enables secure boot. - Note: Secure boot is NOT reproducible - Here are the necessary steps: - + create your keys with sbctl -> sudo sbctl create-keys - + build with systemd once -> set this to false and build once - + build with secureBoot true - + verify that your keys are signed (note, only systemd and your generations should now be signed): sudo sbtcl verify - + enroll your keys (microsoft is necessary for windows dualboot support, leave it there): sudo sbctl enroll-keys --microsoft - + reboot with secureboot enabled - Note: Some motherboards have vendor specific keys for secure boot, this may not necessarily work with our self signed keys - You likely have to disable these vendor specific keys (example HP: sure boot) - ''; - }; - - useSystemdBootloader = lib.mkOption { - default = true; - example = false; - description = '' - use systemd bootloader. - ''; - }; - - cpu = lib.mkOption { - # TODO: how to enable arm? - default = "amd"; - type = with lib.types; (enum [ - "amd" - "intel" - ]); - example = "intel"; - description = '' - cpu microcode. - ''; - }; - - additionalBootKernalParams = lib.mkOption { - default = []; - example = []; - type = with lib.types; listOf str; - description = '' - additional kernelParams passed to bootloader - ''; - }; - - bootParams = lib.mkOption { - default = []; - example = ["resume=something"]; - type = with lib.types; listOf str; - description = '' - Boot params - ''; - }; - - kernelOverride = lib.mkOption { - default = null; - type = with lib.types; nullOr package; - description = '' - kernel to be used - Has no examples as doc complains... - #example = pkgs.linuxPackages_xanmod_latest; - ''; - }; - - username = lib.mkOption { - default = "DashNix"; - example = "pingpang"; - type = lib.types.str; - description = '' - The username. - ''; - }; - - timezone = lib.mkOption { - default = "Europe/Zurich"; - example = "Europe/Berlin"; - type = lib.types.str; - description = '' - The timezone. - ''; - }; - - locale = lib.mkOption { - default = "en_US.UTF-8"; - example = "de_DE.UTF-8"; - type = lib.types.str; - description = '' - The locale. - ''; - }; - - nixosConfigPath = lib.mkOption { - default = "/home/${config.conf.username}/gits/nixos/."; - example = "yourpath/."; - type = lib.types.str; - description = '' - The path for your build command, you can then simply type rebuild to switch to a new configuration. - ''; - }; - - systemStateVersion = lib.mkOption { - example = "24.11"; - default = "23.05"; - type = lib.types.str; - description = '' - System state version - ''; - }; - homeStateVersion = lib.mkOption { - default = "24.11"; - example = "23.05"; - type = lib.types.str; - description = '' - Home state version - ''; - }; - }; - - config = - (lib.optionalAttrs (options ? system.stateVersion) { - boot = { - kernelPackages = lib.mkIf (config.conf.kernelOverride != null) config.conf.kernel; - kernelParams = config.conf.additionalBootKernalParams; - }; - system.stateVersion = config.conf.systemStateVersion; - }) - // (lib.optionalAttrs (options ? home.stateVersion) { - home.stateVersion = config.conf.homeStateVersion; - }); -} diff --git a/modules/default.nix b/modules/default.nix deleted file mode 100644 index 683596a..0000000 --- a/modules/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./programs - ./conf.nix - ]; -} diff --git a/modules/programs/acpid.nix b/modules/programs/acpid.nix deleted file mode 100644 index 228c402..0000000 --- a/modules/programs/acpid.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods = { - acpid.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables acpid. - ''; - }; - }; - - config = lib.mkIf config.mods.acpid.enable ( - lib.optionalAttrs (options ? virtualisation.virtualbox.host) {services.acpid.enable = true;} - ); -} diff --git a/modules/programs/anyrun.nix b/modules/programs/anyrun.nix deleted file mode 100644 index b1b7922..0000000 --- a/modules/programs/anyrun.nix +++ /dev/null @@ -1,145 +0,0 @@ -{ - mkDashDefault, - lib, - config, - pkgs, - options, - inputs, - ... -}: { - options.mods.anyrun = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables anyrun"; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use preconfigured anyrun config. - ''; - }; - customConfig = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Custom anyrun configuration. - Will be merged with default configuration if enabled. - ''; - }; - useDefaultCss = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use preconfigured anyrun css. - ''; - }; - customCss = lib.mkOption { - default = ''''; - example = '' - #window { - border-radius: none; - } - ''; - type = lib.types.lines; - description = '' - Custom anyrun css. - Will be merged with default css if enabled. - ''; - }; - }; - - config = lib.mkIf config.mods.anyrun.enable ( - lib.optionalAttrs (options ? home.packages) { - programs.anyrun = lib.mkForce { - package = pkgs.anyrun; - enable = true; - config = - if config.mods.anyrun.useDefaultConfig - then - lib.mkMerge - [ - { - plugins = [ - inputs.anyrun.packages.${pkgs.system}.applications - inputs.anyrun.packages.${pkgs.system}.rink - inputs.anyrun.packages.${pkgs.system}.translate - inputs.anyrun.packages.${pkgs.system}.websearch - ]; - hideIcons = mkDashDefault false; - width = { - fraction = mkDashDefault 0.3; - }; - y = { - fraction = mkDashDefault 0.5; - }; - layer = mkDashDefault "overlay"; - hidePluginInfo = mkDashDefault true; - closeOnClick = mkDashDefault true; - } - config.mods.anyrun.customConfig - ] - else config.mods.anyrun.customConfig; - - extraCss = - if config.mods.anyrun.useDefaultCss - then - '' - #window { - border-radius: 10px; - background-color: transparent; - } - - box#main { - border-radius: 10px; - } - - list#main { - border-radius: 10px; - margin: 0px 10px 10px 10px; - } - - list#plugin { - border-radius: 10px; - } - - list#match { - border-radius: 10px; - } - - entry#entry { - border: 0; - border-radius: 10px; - margin: 10px 10px 0px 10px; - } - - label#match-desc { - font-size: 12px; - border-radius: 10px; - } - - label#match-title { - font-size: 12px; - border-radius: 10px; - } - - label#plugin { - font-size: 16px; - border-radius: 10px; - } - - * { - border-radius: 10px; - } - '' - + config.mods.anyrun.customCss - else config.mods.anyrun.customCss; - }; - } - ); -} diff --git a/modules/programs/basePackages.nix b/modules/programs/basePackages.nix deleted file mode 100644 index 1d1b2b9..0000000 --- a/modules/programs/basePackages.nix +++ /dev/null @@ -1,132 +0,0 @@ -{ - mkDashDefault, - config, - lib, - options, - pkgs, - inputs, - system, - ... -}: { - options.mods = { - basePackages = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables default system packages. - ''; - }; - additionalPackages = lib.mkOption { - default = []; - example = [pkgs.openssl]; - type = with lib.types; listOf package; - description = '' - Additional packages to install. - Note that these are installed even if base packages is disabled, e.g. you can also use this as the only packages to install. - ''; - }; - specialPrograms = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - special program configuration to be added which require programs.something notation. - ''; - }; - specialServices = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - special services configuration to be added which require an services.something notation. - ''; - }; - }; - }; - - config = lib.optionalAttrs (options ? environment.systemPackages) { - environment.systemPackages = - if config.mods.basePackages.enable - then - with pkgs; - [ - inputs.statix.packages.${system}.default - adwaita-icon-theme - dbus - dconf - direnv - glib - gnome.nixos-gsettings-overrides - gsettings-desktop-schemas - gtk-layer-shell - gtk3 - gtk4 - gtk4-layer-shell - hicolor-icon-theme - icon-library - kdePackages.breeze-icons - kdePackages.breeze - kdePackages.qtstyleplugin-kvantum - libsForQt5.qtstyleplugin-kvantum - libadwaita - libxkbcommon - alejandra - openssl - seahorse - upower - xorg.xkbutils - sbctl - ] - ++ config.mods.basePackages.additionalPackages - else config.mods.basePackages.additionalPackages; - - gtk.iconCache.enable = mkDashDefault false; - services = - if config.mods.basePackages.enable - then - { - upower.enable = mkDashDefault true; - dbus = { - enable = mkDashDefault true; - }; - avahi = { - enable = mkDashDefault true; - nssmdns4 = mkDashDefault true; - openFirewall = mkDashDefault true; - }; - } - // config.mods.basePackages.specialServices - else config.mods.basePackages.specialServices; - - programs = - if config.mods.basePackages.enable - then - lib.mkMerge - [ - { - nix-ld = { - enable = mkDashDefault true; - libraries = with pkgs; [ - jdk - zlib - ]; - }; - direnv = { - package = mkDashDefault pkgs.direnv; - silent = mkDashDefault false; - loadInNixShell = mkDashDefault true; - direnvrcExtra = mkDashDefault ""; - nix-direnv = { - enable = mkDashDefault true; - package = mkDashDefault pkgs.nix-direnv; - }; - }; - gnupg.agent.enable = mkDashDefault true; - } - config.mods.basePackages.specialPrograms - ] - else config.mods.basePackages.specialPrograms; - }; -} diff --git a/modules/programs/bluetooth.nix b/modules/programs/bluetooth.nix deleted file mode 100644 index f0e2ef1..0000000 --- a/modules/programs/bluetooth.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - ... -}: { - options.mods = { - bluetooth.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables bluetooth. - ''; - }; - }; - - config = lib.mkIf config.mods.bluetooth.enable ( - lib.optionalAttrs (options ? hardware.bluetooth) { - hardware.bluetooth = { - enable = mkDashDefault true; - powerOnBoot = mkDashDefault true; - }; - } - ); -} diff --git a/modules/programs/browser/brave.nix b/modules/programs/browser/brave.nix deleted file mode 100644 index 404fddd..0000000 --- a/modules/programs/browser/brave.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.browser.brave = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables brave"; - }; - # TODO configure brave - }; - config = lib.mkIf (config.mods.browser.brave.enable || config.mods.homePackages.browser == "brave") ( - lib.optionalAttrs (options ? home.packages) { - home.packages = with pkgs; [brave]; - } - ); -} diff --git a/modules/programs/browser/chromium.nix b/modules/programs/browser/chromium.nix deleted file mode 100644 index 5d48046..0000000 --- a/modules/programs/browser/chromium.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.browser.chromium = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables chromium"; - }; - # TODO configure chromium - }; - config = lib.mkIf (config.mods.browser.chromium.enable || config.mods.homePackages.browser == "chromium") ( - lib.optionalAttrs (options ? home.packages) { - home.packages = with pkgs; [chromium]; - } - ); -} diff --git a/modules/programs/browser/default.nix b/modules/programs/browser/default.nix deleted file mode 100644 index ade4ecf..0000000 --- a/modules/programs/browser/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - imports = [ - ./brave.nix - ./chromium.nix - ./firefox.nix - ./librewolf.nix - ./zen.nix - ]; -} diff --git a/modules/programs/browser/firefox.nix b/modules/programs/browser/firefox.nix deleted file mode 100644 index d93ac58..0000000 --- a/modules/programs/browser/firefox.nix +++ /dev/null @@ -1,125 +0,0 @@ -{ - lib, - dashNixAdditionalProps, - config, - options, - pkgs, - ... -}: let - name = "firefox"; -in { - imports = [ - (import ../../../lib/foxextensions.nix - {inherit lib dashNixAdditionalProps pkgs name;}) - ]; - options.mods.browser.${name} = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables firefox"; - }; - configuration = lib.mkOption { - default = { - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; - }; - DisablePocket = true; - DisplayBookmarksToolbar = "never"; - DisplayMenuBar = "default-off"; - CaptivePortal = false; - DisableFirefoxStudies = true; - DisableTelemetry = true; - DisableFirefoxAccounts = false; - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - OfferToSaveLoginsDefault = false; - PasswordManagerEnabled = false; - FirefoxHome = { - Search = true; - Pocket = false; - Snippets = false; - TopSites = true; - Highlights = false; - }; - UserMessaging = { - ExtensionRecommendations = false; - SkipOnboarding = true; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "Firefox policy configuration. See https://mozilla.github.io/policy-templates/ for more information."; - }; - profiles = lib.mkOption { - default = [ - { - name = "${config.conf.username}"; - value = { - isDefault = true; - id = 0; - }; - } - { - name = "special"; - value = { - isDefault = false; - id = 1; - }; - } - ]; - example = [ - { - name = "custom"; - value = { - isDefault = true; - id = 0; - extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; - }; - } - ]; - type = with lib.types; listOf (attrsOf anything); - description = "Firefox profiles"; - }; - }; - config = lib.mkIf (config.mods.browser.firefox.enable || config.mods.homePackages.browser == "firefox") ( - lib.optionalAttrs (options ? programs.firefox.profiles) { - stylix.targets.firefox.profileNames = - map ( - {name, ...}: - name - ) - config.mods.browser.firefox.profiles; - programs.firefox = { - enable = true; - package = - pkgs.wrapFirefox - pkgs.firefox-unwrapped - { - pname = "firefox"; - extraPolicies = - config.mods.browser.firefox.configuration - // { - ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.firefox.extensions - ++ ( - if config.mods.browser.firefox.darkreader - then [ - { - "addon@darkreader.org" = { - install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi"; - installation_mode = "normal_installed"; - }; - } - ] - else [] - )); - }; - }; - profiles = builtins.listToAttrs config.mods.browser.firefox.profiles; - }; - } - ); -} diff --git a/modules/programs/browser/librewolf.nix b/modules/programs/browser/librewolf.nix deleted file mode 100644 index fc74bf3..0000000 --- a/modules/programs/browser/librewolf.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ - lib, - dashNixAdditionalProps, - config, - options, - pkgs, - ... -}: let - name = "librewolf"; -in { - imports = [ - (import ../../../lib/foxextensions.nix - {inherit lib dashNixAdditionalProps pkgs name;}) - ]; - options.mods.browser.${name} = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the librwolf browser"; - }; - configuration = lib.mkOption { - default = { - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; - }; - DisablePocket = true; - DisplayBookmarksToolbar = "never"; - DisplayMenuBar = "default-off"; - CaptivePortal = false; - DisableFirefoxStudies = true; - DisableTelemetry = true; - DisableFirefoxAccounts = false; - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - OfferToSaveLoginsDefault = false; - PasswordManagerEnabled = false; - FirefoxHome = { - Search = true; - Pocket = false; - Snippets = false; - TopSites = true; - Highlights = false; - }; - UserMessaging = { - ExtensionRecommendations = false; - SkipOnboarding = true; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "Librewolf policy configuration. See https://mozilla.github.io/policy-templates/ for more information."; - }; - profiles = lib.mkOption { - default = [ - { - name = "${config.conf.username}"; - value = { - isDefault = true; - id = 0; - }; - } - { - name = "special"; - value = { - isDefault = false; - id = 1; - }; - } - ]; - example = [ - { - name = "custom"; - value = { - isDefault = true; - id = 0; - extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; - }; - } - ]; - type = with lib.types; listOf (attrsOf anything); - description = "Librewolf profiles"; - }; - }; - config = lib.mkIf (config.mods.browser.librewolf.enable || config.mods.homePackages.browser == "librewolf") ( - lib.optionalAttrs (options ? home.packages) { - programs.librewolf-dashnix = { - enable = true; - package = - pkgs.wrapFirefox - pkgs.librewolf-unwrapped - { - pname = "librewolf"; - extraPolicies = - config.mods.browser.librewolf.configuration - // { - ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.librewolf.extensions - ++ ( - if config.mods.browser.firefox.darkreader - then [ - { - "addon@darkreader.org" = { - install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi"; - installation_mode = "normal_installed"; - }; - } - ] - else [] - )); - }; - }; - profiles = builtins.listToAttrs config.mods.browser.librewolf.profiles; - }; - } - ); -} diff --git a/modules/programs/browser/zen.nix b/modules/programs/browser/zen.nix deleted file mode 100644 index db32900..0000000 --- a/modules/programs/browser/zen.nix +++ /dev/null @@ -1,157 +0,0 @@ -# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix -{ - lib, - dashNixAdditionalProps, - config, - options, - inputs, - system, - pkgs, - ... -}: let - # at time of using this here, stylix might not be evaluated yet - # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - name = "zen"; -in { - imports = [ - (import ../../../lib/foxextensions.nix - {inherit lib dashNixAdditionalProps pkgs name;}) - ]; - options.mods.browser.${name} = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the zen browser"; - }; - configuration = lib.mkOption { - default = { - EnableTrackingProtection = { - Value = true; - Locked = true; - Cryptomining = true; - Fingerprinting = true; - }; - DisablePocket = true; - CaptivePortal = false; - DisableFirefoxStudies = true; - DisableTelemetry = true; - NoDefaultBookmarks = true; - PasswordManagerEnabled = false; - FirefoxHome = { - Search = true; - Pocket = false; - Snippets = false; - TopSites = true; - Highlights = false; - }; - UserMessaging = { - ExtensionRecommendations = false; - SkipOnboarding = true; - }; - "3rdparty".Extensions = { - "addon@darkreader.org" = { - theme = { - darkSchemeBackgroundColor = "#${scheme.base00}"; - darkSchemeTextColor = "#${scheme.base05}"; - }; - previewNewDesign = true; - }; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "Zen policy configuration. See https://mozilla.github.io/policy-templates for more information."; - }; - profiles = lib.mkOption { - default = [ - { - name = "${config.conf.username}"; - value = { - settings = { - "zen.view.compact.hide-tabbar" = false; - "zen.view.compact.hide-toolbar" = true; - "zen.view.sidebar-expanded" = false; - "zen.view.use-single-toolbar" = false; - "zen.view.welcome-screen.seen" = true; - "zen.theme.accent-color" = "#b4bbff"; - "extensions.autoDisableScopes" = 0; - "cookiebanners.service.mode" = 2; - "widget.use-xdg-desktop-portal.file-picker" = 1; - }; - isDefault = true; - id = 0; - }; - } - { - name = "special"; - value = { - settings = { - "zen.view.compact.hide-tabbar" = false; - "zen.view.compact.hide-toolbar" = true; - "zen.view.sidebar-expanded" = false; - "zen.view.use-single-toolbar" = false; - "zen.view.welcome-screen.seen" = true; - "zen.theme.accent-color" = "#b4bbff"; - "extensions.autoDisableScopes" = 0; - "widget.use-xdg-desktop-portal.file-picker" = 1; - }; - isDefault = false; - id = 1; - }; - } - ]; - example = [ - { - name = "custom"; - value = { - settings = { - extensions.autoDisableScopes = 0; - }; - extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; - isDefault = true; - id = 0; - }; - } - ]; - type = with lib.types; listOf (attrsOf anything); - description = "Zen profiles"; - }; - }; - config = lib.mkIf (config.mods.browser.zen.enable || config.mods.homePackages.browser == "zen") ( - (lib.optionalAttrs (options ? home.packages) { - programs.zen-browser = { - enable = true; - package = - pkgs.wrapFirefox - inputs.zen-browser.packages.${system}.zen-browser-unwrapped - { - pname = "zen-browser"; - extraPolicies = - config.mods.browser.zen.configuration - // { - ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.zen.extensions - ++ ( - if config.mods.browser.firefox.darkreader - then [ - { - "addon@darkreader.org" = { - install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi"; - installation_mode = "normal_installed"; - }; - } - ] - else [] - )); - }; - }; - profiles = builtins.listToAttrs config.mods.browser.zen.profiles; - }; - }) - // (lib.optionalAttrs (options ? stylix.targets.zen-browser) { - stylix.targets.zen-browser.profileNames = lib.map (profile: profile.name) config.mods.browser.zen.profiles; - }) - ); -} diff --git a/modules/programs/clam.nix b/modules/programs/clam.nix deleted file mode 100644 index e212529..0000000 --- a/modules/programs/clam.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.clam = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables the clamav program and its daemon"; - }; - scanner = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the clamav scanner"; - }; - interval = lib.mkOption { - type = lib.types.str; - default = "*-*-* 04:00:00"; - description = '' - How often clamdscan is invoked. - By default this runs using 10 cores at most, be sure to run it at a time of low traffic. - ''; - }; - scanDirectories = lib.mkOption { - type = with lib.types; listOf str; - default = [ - "/home" - "/var/lib" - "/tmp" - "/etc" - "/var/tmp" - ]; - description = ''List of directories to scan''; - }; - }; - }; - config = lib.mkIf config.mods.clam.enable ( - lib.optionalAttrs (options ? services.clamav) { - services.clamav = { - daemon.enable = true; - updater.enable = true; - scanner = { - inherit (config.mods.clam.scanner) enable; - inherit (config.mods.clam.scanner) interval; - inherit (config.mods.clam.scanner) scanDirectories; - }; - }; - environment.systemPackages = [ - pkgs.clamav - ]; - } - // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [clamtk];} - ); -} diff --git a/modules/programs/coding.nix b/modules/programs/coding.nix deleted file mode 100644 index 5a22205..0000000 --- a/modules/programs/coding.nix +++ /dev/null @@ -1,575 +0,0 @@ -{ - mkDashDefault, - lib, - config, - pkgs, - options, - inputs, - system, - ... -}: let - font_family = "${config.mods.stylix.fonts.monospace.name}"; -in { - options.mods = { - coding = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables coding packages. - ''; - }; - dashvim = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables dashvim package. - ''; - }; - jetbrains = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables jetbrains toolbox. - ''; - }; - vscodium = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables vscodium. - ''; - }; - extensions = lib.mkOption { - default = []; - example = []; - type = with lib.types; listOf package; - description = "Extensions to be installed"; - }; - }; - penpot = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables penpot"; - }; - neovide = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables neovide"; - }; - config = lib.mkOption { - default = { - font = { - size = 12; - normal = { - family = font_family; - style = ""; - }; - bold = { - family = font_family; - style = "ExtraBold"; - }; - italic = { - family = font_family; - style = "Italic"; - }; - bold_italic = { - family = font_family; - style = "Bold Italic"; - }; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "Config for neovide"; - }; - }; - gh = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables and configures gh"; - }; - config = lib.mkOption { - default = { - version = 1; - git_protocol = "ssh"; - editor = ""; - prompt = "enabled"; - prefer_editor_prompt = "disabled"; - pager = ""; - aliases = { - co = "pr checkout"; - }; - http_unix_socket = ""; - browser = ""; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "config for gh. Keep in mind, empty values refer to using environment variables"; - }; - hosts = lib.mkOption { - default = { - "github.com" = { - git_protocol = "ssh"; - users = { - ${config.mods.git.username} = ""; - }; - user = "${config.mods.git.username}"; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "hosts for gh"; - }; - }; - useDefaultPackages = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default base packages (only additionalPackages are installed if false)"; - }; - additionalPackages = lib.mkOption { - default = []; - example = []; - type = with lib.types; listOf package; - description = "Additional packages to be installed"; - }; - languages = { - haskell = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables haskell. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - haskellPackages.cabal-install - ghc - haskellPackages.haskell-language-server - ]; - example = []; - type = with lib.types; listOf package; - description = '' - haskell packages - ''; - }; - }; - typst = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables typst. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - typst - tinymist - ]; - example = []; - type = with lib.types; listOf package; - description = '' - typst packages - ''; - }; - }; - go = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables go. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - go - gopls - ]; - example = []; - type = with lib.types; listOf package; - description = '' - Go packages - ''; - }; - }; - rust = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables rust. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [rustup]; - example = []; - type = with lib.types; listOf package; - description = '' - Rust packages - ''; - }; - }; - ts-js = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables TS/JS. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - nodejs_20 - deno - typescript - nodePackages.typescript-language-server - nodePackages.prettier - ]; - example = []; - type = with lib.types; listOf package; - description = '' - TS/JS packages - ''; - }; - }; - zig = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables zig. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - zig - zls - ]; - example = []; - type = with lib.types; listOf package; - description = '' - zig packages - ''; - }; - }; - java = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables java. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - gradle - maven - jdt-language-server - temurin-jre-bin - ]; - example = []; - type = with lib.types; listOf package; - description = '' - Java packages - ''; - }; - }; - dotnet = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables C#/F#. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - #.! - (with dotnetCorePackages; - combinePackages [ - sdk_8_0 - sdk_9_0 - ]) - csharpier - netcoredbg - fsharp - fsautocomplete - ]; - example = []; - type = with lib.types; listOf package; - description = '' - C#/F# packages - ''; - }; - }; - C-CPP = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables C/C++. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - bear - gdb - gcc - clang-tools - ]; - example = []; - type = with lib.types; listOf package; - description = '' - C/C++ packages - ''; - }; - }; - python = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables python. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - python3 - python312Packages.python-lsp-server - python312Packages.python-lsp-ruff - python312Packages.python-lsp-black - ]; - example = []; - type = with lib.types; listOf package; - description = '' - python packages - ''; - }; - }; - configFiles = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables Json/toml/yaml etc. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - #yaml - yamlfmt - yamllint - yaml-language-server - - #json - jq - ]; - example = []; - type = with lib.types; listOf package; - description = '' - packages for said filetypes - ''; - }; - }; - bash = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables bash. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - bash-language-server - shfmt - ]; - example = []; - type = with lib.types; listOf package; - description = '' - bash packages - ''; - }; - }; - html-css = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables html/css. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - tailwindcss - tailwindcss-language-server - # html-tidy - ]; - example = []; - type = with lib.types; listOf package; - description = '' - html/css packages - ''; - }; - }; - sql = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables sql. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [ - nodePackages.sql-formatter - sqls - ]; - example = []; - type = with lib.types; listOf package; - description = '' - sql packages - ''; - }; - }; - gleam = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables gleam. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [gleam]; - example = []; - type = with lib.types; listOf package; - description = '' - gleam packages - ''; - }; - }; - asm = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables assembly. - ''; - }; - packages = lib.mkOption { - default = with pkgs; [asm-lsp]; - example = []; - type = with lib.types; listOf package; - description = '' - assembly packages - ''; - }; - }; - }; - }; - }; - - config = let - basePackages = with pkgs; [ - gitui - meson - ninja - tree-sitter - unzip - pkg-config - sqlite - plantuml - d-spy - tmux - tmate - inputs.compose.packages.${system}.default - ]; - in - lib.mkIf config.mods.coding.enable ( - lib.optionalAttrs (options ? home.packages) { - programs.dashvim = lib.mkIf config.mods.coding.dashvim { - enable = true; - inherit (config.mods.stylix) colorscheme; - }; - programs.vscode = lib.mkIf config.mods.coding.vscodium.enable { - enable = true; - package = mkDashDefault pkgs.vscodium; - profiles.default.extensions = config.mods.coding.vscodium.extensions; - }; - xdg.configFile = { - "neovide/config.toml" = lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) { - source = - (pkgs.formats.toml {}).generate "neovide" - config.mods.coding.neovide.config; - }; - - "gh/config.yml" = lib.mkIf config.mods.coding.gh.enable { - source = - (pkgs.formats.yaml {}).generate "config" - config.mods.coding.gh.config; - }; - "gh/hosts.yml" = lib.mkIf config.mods.coding.gh.enable { - source = - (pkgs.formats.yaml {}).generate "hosts" - config.mods.coding.gh.hosts; - }; - }; - - home.packages = with pkgs; - [ - (lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) neovide) - (lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox) - (lib.mkIf config.mods.coding.penpot pkgs.penpot-desktop) - (lib.mkIf config.mods.coding.gh.enable gh) - ] - ++ config.mods.coding.additionalPackages - ++ (lib.lists.optionals config.mods.coding.useDefaultPackages basePackages) - ++ (lib.lists.optionals config.mods.coding.languages.haskell.enable config.mods.coding.languages.haskell.packages) - ++ (lib.lists.optionals config.mods.coding.languages.rust.enable config.mods.coding.languages.rust.packages) - ++ (lib.lists.optionals config.mods.coding.languages.go.enable config.mods.coding.languages.go.packages) - ++ (lib.lists.optionals config.mods.coding.languages.java.enable config.mods.coding.languages.java.packages) - ++ (lib.lists.optionals config.mods.coding.languages.dotnet.enable config.mods.coding.languages.dotnet.packages) - ++ (lib.lists.optionals config.mods.coding.languages.bash.enable config.mods.coding.languages.bash.packages) - ++ (lib.lists.optionals config.mods.coding.languages.C-CPP.enable config.mods.coding.languages.C-CPP.packages) - ++ (lib.lists.optionals config.mods.coding.languages.asm.enable config.mods.coding.languages.asm.packages) - ++ (lib.lists.optionals config.mods.coding.languages.sql.enable config.mods.coding.languages.sql.packages) - ++ (lib.lists.optionals config.mods.coding.languages.html-css.enable config.mods.coding.languages.html-css.packages) - ++ (lib.lists.optionals config.mods.coding.languages.configFiles.enable config.mods.coding.languages.configFiles.packages) - ++ (lib.lists.optionals config.mods.coding.languages.ts-js.enable config.mods.coding.languages.ts-js.packages) - ++ (lib.lists.optionals config.mods.coding.languages.typst.enable config.mods.coding.languages.typst.packages) - ++ (lib.lists.optionals config.mods.coding.languages.zig.enable config.mods.coding.languages.zig.packages) - ++ (lib.lists.optionals config.mods.coding.languages.gleam.enable config.mods.coding.languages.gleam.packages); - } - ); -} diff --git a/modules/programs/containers.nix b/modules/programs/containers.nix deleted file mode 100644 index b62ee25..0000000 --- a/modules/programs/containers.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - pkgs, - ... -}: { - options.mods.containers = { - variant = lib.mkOption { - default = ""; - example = "podman"; - type = lib.types.enum [ - "" - "podman" - "docker" - ]; - description = "Enables and configures a containerization solution: podman/docker"; - }; - podmanPackages = lib.mkOption { - default = with pkgs; [ - podman-tui - podman-compose - ]; - example = []; - type = with lib.types; listOf package; - description = "Podman packages"; - }; - dockerPackages = lib.mkOption { - default = with pkgs; [ - docker-compose - ]; - example = []; - type = with lib.types; listOf package; - description = "Docker packages"; - }; - combinedPackages = lib.mkOption { - default = with pkgs; [ - dive - ]; - example = []; - type = with lib.types; listOf package; - description = "Container packages"; - }; - }; - config = lib.optionalAttrs (options ? environment.systemPackages) { - environment.systemPackages = - (lib.lists.optionals ( - config.mods.containers.variant == "podman" - ) - config.mods.containers.podmanPackages) - ++ (lib.lists.optionals ( - config.mods.containers.variant == "docker" - ) - config.mods.containers.dockerPackages) - ++ (lib.lists.optionals ( - config.mods.containers.variant == "podman" || config.mods.containers.variant == "docker" - ) - config.mods.containers.combinedPackages); - virtualisation = - if (config.mods.containers.variant == "podman") - then { - containers.enable = true; - podman = { - enable = true; - dockerCompat = mkDashDefault true; - defaultNetwork.settings.dns_enabled = mkDashDefault true; - }; - } - else if (config.mods.containers.variant == "docker") - then { - containers.enable = true; - docker = { - enable = true; - }; - } - else {}; - }; -} diff --git a/modules/programs/default.nix b/modules/programs/default.nix deleted file mode 100644 index 08a4a2d..0000000 --- a/modules/programs/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - imports = [ - ./acpid.nix - ./anyrun.nix - ./basePackages.nix - ./bluetooth.nix - ./browser - ./clam.nix - ./coding.nix - ./containers.nix - ./drives.nix - ./fancontrol.nix - ./fastfetch.nix - ./fish.nix - ./flatpak.nix - ./gaming.nix - ./gdm.nix - ./git.nix - ./gnome.nix - ./gnomeServices.nix - ./gpu.nix - ./greetd.nix - ./homePackages.nix - ./hypr - ./ironbar.nix - ./kde.nix - ./kdeConnect.nix - ./keepassxc.nix - ./kitty.nix - ./media.nix - ./mime.nix - ./ncspot.nix - ./nextcloud.nix - ./niri.nix - ./onedrive.nix - ./oxi - ./piper.nix - ./plymouth.nix - ./printing.nix - ./scripts.nix - ./sddm.nix - ./sops.nix - ./starship.nix - ./streamcontroller.nix - ./stylix.nix - ./superfreq.nix - ./supersonic.nix - ./sway.nix - ./teams.nix - ./virtmanager.nix - ./wm.nix - ./xkb.nix - ./xone.nix - ./yazi - ]; -} diff --git a/modules/programs/drives.nix b/modules/programs/drives.nix deleted file mode 100644 index a631802..0000000 --- a/modules/programs/drives.nix +++ /dev/null @@ -1,312 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.drives = { - variant = lib.mkOption { - default = "manual"; - example = "disko"; - type = with lib.types; (enum [ - "manual" - "disko" - ]); - description = '' - Disk configuration type, either "manual" for regular NixOS disk configuration, - or "disko" for using disko to automatically format your drives. - ''; - }; - useSwap = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use swap in drive. - ''; - }; - useEncryption = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables encryption. - !WARNING! - You need your root drive to be named root exactly! - Otherwise there will not be a root crypt! - !WARNING! - ''; - }; - homeAndRootFsTypes = lib.mkOption { - default = "ext4"; - example = "btrfs"; - type = with lib.types; (enum [ - "btrfs" - "ext2" - "ext3" - "ext4" - "exfat" - "f2fs" - "fat8" - "fat16" - "fat32" - "ntfs" - "xfs" - "zfs" - ]); - description = '' - Filesystem for the home and root partitions. - ''; - }; - defaultDrives = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use default drive config. - - - Manual variant - This config expects 4 different partitions on a single drive: - - boot partition with BOOT label and vfat format (filesystem configurable) - - swap partition with SWAP label - - root partition with ROOT label and ext4 format (filesystem configurable) - - home partition with HOME label and ext4 format (filesystem configurable) - - gpt disk format - - NOTE: Any different configuration must be done manually with this turned off. - - - Disko variant - This config creates 4 different partitions on a single drive: - - boot partition with 1GB size and vfat format - - swap partition with 32GB (size configurable) - - root partition with 30% size and ext4 format (size and filesystem configurable) - - home partition with 70%~ size and ext4 format (size and filesystem configurable) - - gpt disk format - - NOTE: Any different configuration must be done manually with this turned off. - ''; - }; - }; - extraDrives = lib.mkOption { - default = [ - ]; - example = [ - { - name = "drive2"; - drive = { - device = "/dev/disk/by-label/DRIVE2"; - fsType = "ext4"; - options = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - } - ]; - type = with lib.types; listOf (attrsOf anything); - description = '' - Extra drives to add. - Please ensure to add variant compliant attrsets (manual/disko). - (The example is for manual variant, here an example for disko): - ```nix - drive2 = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { - device = "/dev/nvme1n1" - type = "disk"; - content = { - type = "gpt"; - partitions = { - drive2 = { - start = "0%"; - end = "100%"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/drive2"; - mountOptions = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - }; - }; - }; - }; - ``` - ''; - }; - disko = { - defaultDiskId = lib.mkOption { - default = "TODO"; - example = "/dev/nvme0n1"; - type = lib.types.str; - description = "The name, ID, UUID or similar for the default drive."; - }; - rootAmount = lib.mkOption { - default = 30; - example = 40; - type = lib.types.number; - description = "The percentage of the disk for root. (Home will take up the rest) (Only for disko)"; - }; - swapAmount = lib.mkOption { - default = 32; - example = 64; - type = lib.types.number; - description = "The amount of swap to use. (Only for disko)"; - }; - }; - }; - - config = lib.optionalAttrs (options ? fileSystems) { - boot.initrd.luks.devices = lib.mkIf (config.mods.drives.variant == "manual" && config.mods.drives.useEncryption) ( - builtins.listToAttrs ( - map ( - { - name, - drive, - }: { - cryptstorage.device = lib.mkIf (name != "root") drive?device; - cryptoroot.device = lib.mkIf (name == "root") drive?device; - } - ) - config.mods.drives.extraDrives - ) - ); - - fileSystems = lib.mkIf (config.mods.drives.variant == "manual" && !config.conf.wsl) ( - builtins.listToAttrs ( - map ( - { - name, - drive, - }: { - name = "/" + name; - value = drive; - } - ) - config.mods.drives.extraDrives - ) - // (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { - "/" = { - device = "/dev/disk/by-label/ROOT"; - fsType = config.mods.drives.homeAndRootFsTypes; - options = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - - "/boot" = { - device = "/dev/disk/by-label/BOOT"; - fsType = "vfat"; - options = [ - "rw" - "fmask=0022" - "dmask=0022" - "noatime" - ]; - }; - - "/home" = { - device = "/dev/disk/by-label/HOME"; - fsType = config.mods.drives.homeAndRootFsTypes; - options = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - } - ); - - swapDevices = lib.mkIf (config.mods.drives.useSwap && config.mods.drives.variant == "manual" && !config.conf.wsl) [ - {device = "/dev/disk/by-label/SWAP";} - ]; - - disko.devices = lib.mkIf (config.mods.drives.variant == "disko") { - disk = - { - main = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { - device = "${config.mods.drives.disko.defaultDiskId}"; - type = "disk"; - content = { - type = "gpt"; - partitions = { - root = { - start = "${ - if config.mods.drives.useSwap - then builtins.toString config.mods.drives.disko.swapAmount - else builtins.toString 1 - }G"; - end = "${builtins.toString config.mods.drives.disko.rootAmount}%"; - content = { - type = "filesystem"; - format = config.mods.drives.homeAndRootFsTypes; - mountpoint = "/"; - mountOptions = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - }; - plainSwap = { - start = "1G"; - end = "33G"; - content = { - type = "swap"; - discardPolicy = "both"; - resumeDevice = true; - }; - }; - boot = { - start = "0G"; - end = "1G"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = [ - "rw" - "fmask=0022" - "dmask=0022" - "noatime" - ]; - }; - }; - home = { - start = "${builtins.toString config.mods.drives.disko.rootAmount}%"; - end = "100%"; - content = { - type = "filesystem"; - format = config.mods.drives.homeAndRootFsTypes; - mountpoint = "/home"; - mountOptions = [ - "noatime" - "nodiratime" - "discard" - ]; - }; - }; - }; - }; - }; - } - // builtins.listToAttrs ( - map ( - { - name, - drive, - }: { - name = "/" + name; - value = drive; - } - ) - config.mods.drives.extraDrives - ); - }; - }; -} diff --git a/modules/programs/fancontrol.nix b/modules/programs/fancontrol.nix deleted file mode 100644 index 8abf24d..0000000 --- a/modules/programs/fancontrol.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - lib, - pkgs, - config, - options, - ... -}: { - options.mods.fancontrol = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables fancontrol-gui with needed drivers"; - }; - forceId = lib.mkOption { - default = null; - example = "force_id=0x8628"; - type = with lib.types; nullOr str; - description = "Modprobe options for the it87 driver. Information at: https://wiki.archlinux.org/title/Lm_sensors#Gigabyte_B250/Z370/B450M/B560M/B660M/Z690/B550_motherboards"; - }; - }; - config = lib.mkIf config.mods.fancontrol.enable ( - lib.optionalAttrs (options ? home.packages) { - home.packages = [pkgs.fancontrol-gui]; - } - // (lib.optionalAttrs (options ? boot.kernelModules) { - boot = { - kernelParams = ["acpi_enforce_resources=lax"]; - extraModulePackages = with config.boot.kernelPackages; [liquidtux it87]; - kernelModules = ["v4l2loopback" "it87"]; - extraModprobeConfig = lib.mkIf (config.mods.fancontrol.forceId != null) '' - options it87 ${config.mods.fancontrol.forceId} - ''; - }; - }) - ); -} diff --git a/modules/programs/fastfetch.nix b/modules/programs/fastfetch.nix deleted file mode 100644 index 9953d84..0000000 --- a/modules/programs/fastfetch.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ - pkgs, - lib, - options, - config, - ... -}: { - options.mods.dashfetch = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "A custom configuration for fastfetch"; - }; - modules = lib.mkOption { - default = [ - "title" - "separator" - { - type = "os"; - key = "OS"; - format = "DashNix ({name} {version})"; - } - "host" - "kernel" - "uptime" - "packages" - "shell" - "display" - "de" - "wm" - "wmtheme" - "theme" - "icons" - "font" - "cursor" - "terminal" - "terminalfont" - "cpu" - "gpu" - "memory" - "swap" - "disk" - "localip" - "battery" - "poweradapter" - "locale" - "break" - "colors" - ]; - example = []; - type = with lib.types; listOf anything; - description = "modules for fastfetch"; - }; - }; - - config = lib.optionalAttrs (options ? home.packages) { - xdg.configFile."fastfetch/config.jsonc" = lib.mkIf config.mods.dashfetch.enable { - source = - (pkgs.formats.json {}).generate "config.jsonc" - { - "$schema" = "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json"; - logo = { - type = "kitty"; - source = ../../assets/logo2.png; - width = 35; - padding = { - top = 1; - }; - }; - modules = config.mods.dashfetch.modules; - }; - }; - }; -} diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix deleted file mode 100644 index 1d8c8c8..0000000 --- a/modules/programs/fish.nix +++ /dev/null @@ -1,190 +0,0 @@ -{ - lib, - pkgs, - inputs, - config, - options, - ... -}: let - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; -in { - options.mods.fish = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables fish"; - }; - additionalConfig = lib.mkOption { - default = ''''; - example = ''''; - type = lib.types.lines; - description = "Additional fish config"; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default fish config"; - }; - }; - config = lib.mkIf config.mods.fish.enable ( - lib.optionalAttrs (options ? programs.fish) { - programs.fish = { - enable = true; - shellInit = - if config.mods.fish.useDefaultConfig - then - '' - if status is-interactive - # Commands to run in interactive sessions can go here - end - - # ============================================================================= - # - # Utility functions for zoxide. - # - - export NIX_PATH="$NIX_PATH:${config.conf.nixosConfigPath}" - - set EDITOR "neovide --no-fork" - - alias rebuild='nh os switch -- --accept-flake-config' - alias update='nix flake update --flake $FLAKE --accept-flake-config' - alias gcli='gh' - abbr --add ls 'lsd' - abbr --add :q 'exit' - abbr --add gh 'git push origin' - abbr --add gu 'git push upstream' - abbr --add gl 'git pull origin' - abbr --add gm 'git commit -m' - abbr --add ga "git add -A" - abbr --add gc "git commit --amend --no-edit" - abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20' - abbr --add s "kitty +kitten ssh" - abbr --add zl 'z "" ' - abbr --add nv 'neovide' - abbr --add cr 'cargo run' - abbr --add grep 'rg' - abbr --add cat 'bat' - abbr --add find 'fd' - abbr --add rm 'rip' - abbr --add cp 'cpz' - abbr --add cd 'z' - abbr --add y 'yazi' - - set fish_color_autosuggestion '${scheme.base07}' - set fish_color_param '${scheme.base06}' - set fish_color_operator '${scheme.base0E}' - - set fish_greeting - # pwd based on the value of _ZO_RESOLVE_SYMLINKS. - function __zoxide_pwd - builtin pwd -L - end - - # A copy of fish's internal cd function. This makes it possible to use - # `alias cd=z` without causing an infinite loop. - if ! builtin functions --query __zoxide_cd_internal - if builtin functions --query cd - builtin functions --copy cd __zoxide_cd_internal - else - alias __zoxide_cd_internal='builtin cd' - end - end - - # cd + custom logic based on the value of _ZO_ECHO. - function __zoxide_cd - __zoxide_cd_internal $argv - end - - # ============================================================================= - # - # Hook configuration for zoxide. - # - - # Initialize hook to add new entries to the database. - function __zoxide_hook --on-variable PWD - test -z "$fish_private_mode" - and command zoxide add -- (__zoxide_pwd) - end - - # ============================================================================= - # - # When using zoxide with --no-cmd, alias these internal functions as desired. - # - - if test -z $__zoxide_z_prefix - set __zoxide_z_prefix 'z!' - end - set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix) - - # Jump to a directory using only keywords. - function __zoxide_z - set -l argc (count $argv) - if test $argc -eq 0 - __zoxide_cd $HOME - else if test "$argv" = - - __zoxide_cd - - else if test $argc -eq 1 -a -d $argv[1] - __zoxide_cd $argv[1] - else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result - __zoxide_cd $result - else - set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv) - and __zoxide_cd $result - end - end - - # Completions. - function __zoxide_z_complete - set -l tokens (commandline --current-process --tokenize) - set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize) - - if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1 - # If there are < 2 arguments, use `cd` completions. - complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$' - else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1] - # If the last argument is empty and the one before doesn't start with - # $__zoxide_z_prefix, use interactive selection. - set -l query $tokens[2..-1] - set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query) - and echo $__zoxide_z_prefix$result - commandline --function repaint - end - end - complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)' - - # Jump to a directory using interactive search. - function __zoxide_zi - set -l result (command zoxide query --interactive -- $argv) - and __zoxide_cd $result - end - - # ============================================================================= - # - # Commands for zoxide. Disable these using --no-cmd. - # - - abbr --erase z &>/dev/null - alias z=__zoxide_z - - abbr --erase zi &>/dev/null - alias zi=__zoxide_zi - - # ============================================================================= - # - # To initialize zoxide, add this to your configuration (usually - # ~/.config/fish/config.fish): - # - # zoxide init fish | source - - direnv hook fish | source - '' - + config.mods.fish.additionalConfig - else config.mods.fish.additionalConfig; - }; - } - ); -} diff --git a/modules/programs/flatpak.nix b/modules/programs/flatpak.nix deleted file mode 100644 index 68ec2da..0000000 --- a/modules/programs/flatpak.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.flatpak = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the flatpak package manager"; - }; - }; - config = lib.mkIf config.mods.flatpak.enable ( - lib.optionalAttrs (options ? environment.systemPackages) { - environment.systemPackages = [pkgs.flatpak]; - } - ); -} diff --git a/modules/programs/gaming.nix b/modules/programs/gaming.nix deleted file mode 100644 index 6c3eb0a..0000000 --- a/modules/programs/gaming.nix +++ /dev/null @@ -1,149 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - pkgs, - ... -}: { - options.mods.gaming = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enabled gaming related features."; - }; - tools = lib.mkOption { - default = with pkgs; [ - protonplus - gamescope - gamemode - steam - # TODO broken - # lutris - wineWowPackages.stable - adwsteamgtk - heroic - mangohud - nexusmods-app - steamtinkerlaunch - winetricks - ]; - example = []; - type = with lib.types; listOf package; - description = "Install gaming related packages"; - }; - kernel = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Whether to use the CachyOS kernel. - WARNING: This is a manual compiled kernel! - (Please also ensure you use your own input hash for the source as the compilation can often fail due to temporary broken changes.) - ''; - }; - steam = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use steam"; - }; - gamemode = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use gamemode"; - }; - pinCores = lib.mkOption { - default = "false"; - example = "true"; - type = lib.types.str; - description = "Pin Cores gamemode config"; - }; - parkCores = lib.mkOption { - default = "false"; - example = "true"; - type = lib.types.str; - description = "Park Cores gamemode config"; - }; - gpuOptimization = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use GPU performance setting. NOTE: this is at your own risk!"; - }; - gpuDevice = lib.mkOption { - default = 0; - example = 1; - type = lib.types.int; - description = "Your gpu device.(Physical id of lshw)"; - }; - scheduler = lib.mkOption { - default = "scx_rustland"; - example = "scx_rusty"; - type = with lib.types; - nullOr (enum [ - "scx_bpfland" - "scx_chaos" - "scx_cosmos" - "scx_central" - "scx_flash" - "scx_flatcg" - "scx_lavd" - "scx_layered" - "scx_mitosis" - "scx_nest" - "scx_p2dq" - "scx_pair" - "scx_prev" - "scx_qmap" - "scx_rlfifo" - "scx_rustland" - "scx_rusty" - "scx_sdt" - "scx_simple" - "scx_tickless" - "scx_userland" - "scx_wd40" - ]); - description = "Scheduler to use, null disables this"; - }; - }; - config = lib.mkIf config.mods.gaming.enable ( - lib.optionalAttrs (options ? environment.systemPackages) { - environment.systemPackages = config.mods.gaming.tools; - boot.kernelPackages = lib.mkForce pkgs.cachyosKernels.linuxPackages-cachyos-latest; - services.scx = lib.mkIf (config.mods.gaming.scheduler != null) { - enable = true; - inherit (config.mods.gaming) scheduler; - }; - - programs = { - steam.enable = mkDashDefault config.mods.gaming.steam; - gamemode.enable = true; - gamemode = { - settings = { - general = { - desiredgov = mkDashDefault "performance"; - }; - cpu = { - pin_cores = mkDashDefault config.mods.gaming.pinCores; - park_cores = mkDashDefault config.mods.gaming.parkCores; - }; - gpu = lib.mkIf config.mods.gaming.gpuOptimization { - apply_gpu_optimisations = mkDashDefault "accept-responsibility"; - gpu_device = mkDashDefault config.mods.gaming.gpuDevice; - amd_performance_level = mkDashDefault "high"; - nv_powermizer_mode = mkDashDefault 1; - }; - custom = { - start = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations activated'"; - end = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations deactivated'"; - }; - }; - }; - }; - } - ); -} diff --git a/modules/programs/gdm.nix b/modules/programs/gdm.nix deleted file mode 100644 index 343c6cd..0000000 --- a/modules/programs/gdm.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - lib, - options, - config, - ... -}: { - options.mods.gdm = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the gdm displayManager"; - }; - extraOptions = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "Extra options to be applied to the gnome config"; - }; - }; - - config = lib.mkIf config.mods.gdm.enable ( - lib.optionalAttrs (options ? services.xserver.displayManager.gdm) ( - { - services.xserver.enable = true; - services.xserver.displayManager.gdm.enable = true; - } - // { - services.xserver.displayManager.gdm = config.mods.gdm.extraOptions; - } - ) - ); -} diff --git a/modules/programs/git.nix b/modules/programs/git.nix deleted file mode 100644 index 57c1623..0000000 --- a/modules/programs/git.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.git = { - username = lib.mkOption { - default = ""; - example = "globi"; - type = lib.types.str; - description = "Git user name"; - }; - email = lib.mkOption { - default = ""; - example = "globi@globus.glob"; - type = lib.types.str; - description = "Git email"; - }; - additionalConfig = lib.mkOption { - default = { - merge = { - tool = "nvimdiff"; - }; - diff = { - tool = "nvimdiff"; - }; - pull.rebase = true; - }; - example = { - pull.rebase = false; - }; - type = with lib.types; attrsOf anything; - description = "Additional git config"; - }; - sshConfig = lib.mkOption { - default = ""; - example = '' - Host github.com - ${ - if (config ? sops.secrets && config.sops.secrets ? hub.path) - then "IdentityFile ${config.sops.secrets.hub.path}" - else "" - } - ''; - type = lib.types.lines; - description = "ssh configuration (keys for git)"; - }; - }; - config = lib.optionalAttrs (options ? programs.git && options ? home.file) { - programs.git = { - enable = true; - settings = - { - user = { - name = config.mods.git.username; - inherit (config.mods.git) email; - }; - } - // config.mods.git.additionalConfig; - }; - home.file.".ssh/config".text = config.mods.git.sshConfig; - }; -} diff --git a/modules/programs/gnome.nix b/modules/programs/gnome.nix deleted file mode 100644 index faf2b1e..0000000 --- a/modules/programs/gnome.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - lib, - options, - config, - pkgs, - ... -}: { - options.mods.gnome = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the Gnome desktop environment"; - }; - useDefaultOptions = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default options provided by module. If disabled, will only apply extraOptions."; - }; - extraOptions = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "Extra options to be applied to the gnome config"; - }; - extraDconf = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "Extra options to be applied to the dconf config"; - }; - }; - - config = let - defaultExtensions = with pkgs.gnomeExtensions; [ - blur-my-shell - dash-to-dock - tray-icons-reloaded - ]; - in - lib.mkIf config.mods.gnome.enable ( - lib.optionalAttrs (options ? services.xserver.desktopManager.gnome) ( - { - services.xserver = { - enable = true; - desktopManager.gnome.enable = true; - }; - } - // lib.mkIf config.mods.gnome.useDefaultOptions {environment.systemPackages = defaultExtensions;} - // { - services.xserver.desktopManager.gnome = config.mods.gnome.extraOptions; - } - ) - // lib.optionalAttrs (options ? dconf) ( - lib.mkIf config.mods.gnome.useDefaultOptions { - dconf = { - enable = true; - settings = { - "org/gnome/shell" = { - disable-user-extensions = false; - enabled-extensions = map (extension: extension.extensionUuid) defaultExtensions; - }; - "org/gnome/desktop/interface" = { - cursor-theme = config.mods.stylix.cursor.name; - cursor-size = config.mods.stylix.cursor.size; - color-scheme = "prefer-dark"; - }; - }; - }; - } - // { - dconf = config.mods.gnome.extraDconf; - } - ) - ); -} diff --git a/modules/programs/gnomeServices.nix b/modules/programs/gnomeServices.nix deleted file mode 100644 index 29bdea8..0000000 --- a/modules/programs/gnomeServices.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods = { - gnomeServices.enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables gnome services: keyring and settings daemon. - Note: Do not use these for environments which ship these functionalities by default: GNOME, KDE - ''; - }; - nautilus.enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables and configures Nautilus - ''; - }; - }; - - config = lib.mkIf config.mods.gnomeServices.enable ( - lib.optionalAttrs (options ? services.gnome.gnome-keyring) { - programs.dconf = { - enable = true; - profiles.user.databases = [ - { - settings = { - "org/gnome/desktop/interface" = { - cursor-theme = config.mods.stylix.cursor.name; - cursor-size = lib.gvariant.mkInt32 config.mods.stylix.cursor.size; - color-scheme = "prefer-dark"; - }; - }; - } - ]; - }; - environment.extraInit = '' - export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/keyring/ssh" - ''; - services = { - # needed for GNOME services outside of GNOME Desktop - dbus.packages = with pkgs; [ - gcr - gnome-settings-daemon - ]; - - gnome.gnome-keyring.enable = true; - gvfs.enable = true; - }; - } - // lib.optionalAttrs (options ? home.packages) { - services.gnome-keyring.enable = true; - dconf.settings = { - "org/gnome/desktop/interface" = { - cursor-theme = config.mods.stylix.cursor.name; - cursor-size = config.mods.stylix.cursor.size; - color-scheme = "prefer-dark"; - }; - }; - home = { - packages = let - packages = with pkgs; [ - gcr - nautilus - sushi - nautilus-python - nautilus-open-any-terminal - ]; - in - lib.mkIf config.mods.nautilus.enable packages; - }; - } - ); -} diff --git a/modules/programs/gpu.nix b/modules/programs/gpu.nix deleted file mode 100644 index 023b462..0000000 --- a/modules/programs/gpu.nix +++ /dev/null @@ -1,111 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - pkgs, - ... -}: { - options.mods.gpu = { - nvidia.enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables nvidia support. - ''; - }; - amdgpu.enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables amdgpu support. - ''; - }; - intelgpu.enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables intel support. - ''; - }; - vapi = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables vapi. - ''; - }; - rocm.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables rocm support. - ''; - }; - }; - }; - - config = lib.optionalAttrs (options ? boot) { - boot = lib.mkIf config.mods.gpu.amdgpu.enable { - kernelModules = ["kvm-amd"]; - initrd.kernelModules = ["amdgpu"]; - kernelParams = ["amdgpu.ppfeaturemask=0xffffffff"]; - }; - services.xserver.videoDrivers = - if config.mods.gpu.amdgpu.enable - then ["amdgpu"] - else if config.mods.gpu.nvidia.enable - then ["nvidia"] - else []; - - environment.variables = - if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable) - then { - RUSTICL_ENABLE = mkDashDefault "radeonsi"; - } - else {}; - - hardware = { - nvidia = lib.mkIf config.mods.gpu.nvidia.enable { - modesetting.enable = mkDashDefault true; - open = mkDashDefault true; - nvidiaSettings = mkDashDefault true; - package = mkDashDefault config.boot.kernelPackages.nvidiaPackages.beta; - }; - graphics = let - amdPackages = [ - (lib.mkIf (config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt) - (lib.mkIf ( - config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable - ) - pkgs.intel-media-driver) - (lib.mkIf config.mods.gpu.vapi.enable pkgs.libvdpau-va-gl) - (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva) - (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva-vdpau-driver) - (lib.mkIf (config.mods.gpu.intelgpu.enable || config.mods.gpu.amdgpu.enable) pkgs.mesa) - ]; - rocmPackages = [ - pkgs.rocmPackages.clr.icd - pkgs.mesa - pkgs.mesa.opencl - pkgs.vulkan-loader - pkgs.vulkan-validation-layers - pkgs.vulkan-tools - pkgs.clinfo - ]; - in { - enable = true; - enable32Bit = mkDashDefault true; - extraPackages = - amdPackages - ++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu.enable) rocmPackages); - }; - }; - }; -} diff --git a/modules/programs/greetd.nix b/modules/programs/greetd.nix deleted file mode 100644 index fe3e455..0000000 --- a/modules/programs/greetd.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ - mkDashDefault, - config, - lib, - inputs, - pkgs, - options, - system, - ... -}: { - options.mods = { - greetd = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables the greetd login manager. - ''; - }; - monitor = lib.mkOption { - default = - if config.mods.wm.monitors != [] - then (builtins.elemAt config.mods.wm.monitors 0).name - else ""; - example = "eDP-1"; - type = lib.types.str; - description = '' - main monitor for the login screen. - By default the main monitor is used. - ''; - }; - scale = lib.mkOption { - default = - if config.mods.wm.monitors != [] - then builtins.toString (builtins.elemAt config.mods.wm.monitors 0).scale - else ""; - example = "1.5"; - type = lib.types.str; - description = '' - Scale used by the monitor in the login screen. - By default the scale of the main monitor is used. - ''; - }; - greeterCommand = lib.mkOption { - default = "${ - lib.getExe inputs.hyprland.packages.${system}.hyprland - } --config /etc/greetd/hyprgreet.conf"; - example = "${ - lib.getExe pkgs.cage - } -s -- ${lib.getExe pkgs.regreet}"; - type = lib.types.str; - description = "The compositor/greeter command to run"; - }; - resolution = lib.mkOption { - default = - if config.mods.wm.monitors != [] - then let - resX = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionX; - resY = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionY; - refresh = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).refreshrate; - in "${resX}x${resY}@${refresh}" - else ""; - example = "3440x1440@180"; - type = lib.types.str; - description = '' - Resolution/refreshrate used by the monitor in the login screen. - ''; - }; - environments = lib.mkOption { - default = [ - (lib.mkIf config.mods.hypr.hyprland.enable inputs.hyprland.packages.${config.conf.system}.hyprland) - (lib.mkIf config.mods.niri.enable pkgs.niri) - ]; - # no idea if these are written correctly - example = [ - pkgs.niri - pkgs.river-classic - pkgs.swayfx - ]; - type = with lib.types; listOf package; - description = '' - List of environments that should be available in the login prompt. - ''; - }; - regreet = { - customSettings = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Custom regret settings. See https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml for more information. - ''; - }; - }; - }; - }; - - config = let - inherit (config.conf) username; - in - lib.mkIf config.mods.greetd.enable ( - lib.optionalAttrs (options ? environment) { - # greetd display manager - programs.hyprland.enable = mkDashDefault true; - services = { - displayManager.sessionPackages = config.mods.greetd.environments; - greetd = { - enable = true; - settings = { - terminal.vt = mkDashDefault 1; - default_session = { - command = mkDashDefault config.mods.greetd.greeterCommand; - user = mkDashDefault username; - }; - }; - }; - }; - - # should technically be the same, but this is configured instead in order to provide a decent out of the box login experience. - environment.etc."greetd/hyprgreet.conf".text = '' - monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale} - monitor=,disable - - input { - kb_layout = ${config.mods.xkb.layout} - kb_variant = ${config.mods.xkb.variant} - force_no_accel = true - } - - misc { - disable_splash_rendering = false - disable_hyprland_logo = true - disable_xdg_env_checks = true - disable_scale_notification = true - } - - env=STATE_DIR,var/cache/regreet - env=CACHE_DIR,var/cache/regreet - env=HYPRCURSOR_THEME,${config.mods.stylix.cursor.name} - env=HYPRCURSOR_SIZE,${toString config.mods.stylix.cursor.size} - env=XCURSOR_THEME,${config.mods.stylix.cursor.name} - env=XCURSOR_SIZE,${toString config.mods.stylix.cursor.size} - env=QT_QPA_PLATFORMTHEME,qt5ct - - exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css --config /home/${username}/.config/regreet/regreet.toml; hyprctl dispatch exit - ''; - - # unlock GPG keyring on login - security.pam = { - services.greetd = { - enableGnomeKeyring = mkDashDefault true; - sshAgentAuth = mkDashDefault true; - }; - sshAgentAuth.enable = mkDashDefault true; - }; - } - // lib.optionalAttrs (options ? home) { - xdg.configFile."regreet/regreet.toml".source = - (pkgs.formats.toml {}).generate "regreet" - config.mods.greetd.regreet.customSettings; - } - ); -} diff --git a/modules/programs/homePackages.nix b/modules/programs/homePackages.nix deleted file mode 100644 index 6a995f0..0000000 --- a/modules/programs/homePackages.nix +++ /dev/null @@ -1,154 +0,0 @@ -{ - lib, - options, - config, - pkgs, - ... -} -: { - options.mods.homePackages = { - useDefaultPackages = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default packages (will use additional_packages only if disabled)"; - }; - additionalPackages = lib.mkOption { - default = []; - example = [pkgs.flatpak]; - type = with lib.types; listOf package; - description = '' - Additional Home manager packages. - Will be installed regardless of default home manager packages are installed. - ''; - }; - specialPrograms = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - special program configuration to be added which require programs.something notation. - ''; - }; - specialServices = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - special services configuration to be added which require an services.something notation. - ''; - }; - matrixClient = lib.mkOption { - default = pkgs.nheko; - example = null; - type = with lib.types; nullOr package; - description = "The matrix client"; - }; - vesktop = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Adds the vesktop discord client"; - }; - ncspot = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Adds the ncspot spotify client"; - }; - orcaSlicer = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables orca slicer"; - }; - nextcloudClient = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Adds the full desktop nextcloud client (the nextcloud module in dashnix only provides the cli tool)"; - }; - mailClient = lib.mkOption { - default = pkgs.thunderbird; - example = null; - type = with lib.types; nullOr package; - description = "The email client"; - }; - browser = lib.mkOption { - default = "zen"; - example = "firefox"; - type = with lib.types; - nullOr ( - either (enum [ - "firefox" - "zen" - "librewolf" - "chromium" - "brave" - ]) - package - ); - description = "The browser (the enum variants have preconfigured modules)"; - }; - }; - - config = lib.optionalAttrs (options ? home.packages) { - home.packages = - if config.mods.homePackages.useDefaultPackages - then - with pkgs; - [ - (lib.mkIf config.mods.homePackages.ncspot ncspot) - (lib.mkIf config.mods.homePackages.orcaSlicer orca-slicer) - (lib.mkIf config.mods.homePackages.vesktop vesktop) - (lib.mkIf config.mods.homePackages.nextcloudClient nextcloud-client) - (lib.mkIf (config.mods.homePackages.matrixClient != null) config.mods.homePackages.matrixClient) - (lib.mkIf (config.mods.homePackages.mailClient != null) config.mods.homePackages.mailClient) - (lib.mkIf ( - # NOTE: This should be package, but nix doesn't have that.... - builtins.isAttrs config.mods.homePackages.browser && config.mods.homePackages.browser != null - ) - config.mods.homePackages.browser) - adw-gtk3 - bat - brightnessctl - dbus - fastfetch - fd - ffmpeg - flake-checker - gnome-keyring - gnutar - regreet - killall - kitty - libnotify - lsd - networkmanager - nh - nix-index - playerctl - poppler-utils - pulseaudio - libsForQt5.qt5ct - qt6Packages.qt6ct - fuc - ripgrep - rm-improved - system-config-printer - xournalpp - zenith - zoxide - ] - ++ config.mods.homePackages.additionalPackages - else config.mods.homePackages.additionalPackages; - - xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml {}).generate "direnv" { - global = { - warn_timeout = "-1s"; - }; - }; - programs = config.mods.homePackages.specialPrograms; - services = config.mods.homePackages.specialServices; - }; -} diff --git a/modules/programs/hypr/default.nix b/modules/programs/hypr/default.nix deleted file mode 100644 index 68b88ea..0000000 --- a/modules/programs/hypr/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./hyprland.nix - ./hyprlock.nix - ./hyprpaper.nix - ]; -} diff --git a/modules/programs/hypr/hyprland.nix b/modules/programs/hypr/hyprland.nix deleted file mode 100644 index 442b964..0000000 --- a/modules/programs/hypr/hyprland.nix +++ /dev/null @@ -1,357 +0,0 @@ -{ - mkDashDefault, - config, - lib, - options, - pkgs, - ... -}: let - defaultWmConf = import ../../../lib/wm.nix; -in { - options.mods.hypr.hyprland = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enable Hyprland - ''; - }; - noAtomic = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Use tearing (Warning, can be buggy) - ''; - }; - useIronbar = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Whether to use ironbar in hyprland. - ''; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use preconfigured Hyprland config. - ''; - }; - customConfig = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Custom Hyprland configuration. - Will be merged with default configuration if enabled. - ''; - }; - plugins = lib.mkOption { - default = []; - example = []; - type = with lib.types; listOf package; - description = '' - Plugins to be added to Hyprland. - ''; - }; - pluginConfig = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Plugin configuration to be added to Hyprland. - ''; - }; - hyprspaceEnable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables Hyprspace plugin for hyprland. - Please note, plugins tend to break VERY often. - ''; - }; - }; - - config = lib.mkIf config.mods.hypr.hyprland.enable ( - lib.optionalAttrs (options ? wayland.windowManager.hyprland) { - # install Hyprland related packages - home.packages = with pkgs; [ - xorg.xprop - grim - slurp - satty - xdg-desktop-portal-gtk - xdg-desktop-portal-gnome - kdePackages.xdg-desktop-portal-kde - xdg-desktop-portal-shana - copyq - wl-clipboard - hyprcursor - hyprpicker - ]; - - wayland.windowManager.hyprland = let - mkWorkspace = workspaces: - builtins.map (workspace: let - default = - if workspace.default - then ",default:true" - else ""; - in "${workspace.name},monitor:${workspace.monitor}${default}") - workspaces; - mkTransform = transform: - if transform == "0" - then 0 - else if transform == "90" - then 1 - else if transform == "180" - then 2 - else if transform == "270" - then 3 - else 4; - mkVrr = vrr: - if vrr - then "1" - else "0"; - mkMonitors = monitors: - builtins.map ( - monitor: "${monitor.name},${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate},${builtins.toString monitor.positionX}x${builtins.toString monitor.positionY},${builtins.toString monitor.scale}, transform,${builtins.toString (mkTransform monitor.transform)}, vrr,${mkVrr monitor.vrr}" - ) - monitors; - - mkMods = bind: let - mods = bind.modKeys or []; - in - builtins.map (mod: - if mod == "Mod" - then (lib.strings.toUpper config.mods.wm.modKey) + " " - else lib.strings.toUpper mod) - mods - |> lib.strings.concatStringsSep ""; - mkArgs = args: - if args != [] - then (lib.strings.concatStringsSep " " args) - else ""; - shouldRepeat = bind: bind ? meta && bind.meta ? hyprland && bind.meta.hyprland ? repeat && bind.meta.hyprland.repeat == true; - - defaultBinds = cfg: - if cfg.mods.wm.useDefaultBinds - then defaultWmConf.defaultBinds cfg - else []; - - mkEBinds = cfg: let - binds = cfg.mods.wm.binds ++ defaultBinds cfg; - in - binds - |> builtins.filter (bind: bind ? command && shouldRepeat bind && !(hasInvalidCustomCommand bind)) - |> builtins.map ( - bind: "${mkMods bind},${bind.key},${mkCommand bind}" - ); - mkBinds = cfg: let - binds = cfg.mods.wm.binds ++ defaultBinds cfg; - in - binds - |> builtins.filter (bind: bind ? command && !(shouldRepeat bind) && !(hasInvalidCustomCommand bind)) - |> builtins.map ( - bind: "${mkMods bind},${bind.key},${mkCommand bind}" - ); - mkCommand = bind: let - args = bind.args or []; - in - if bind.command == "quit" - then "exit" - else if bind.command == "killActive" - then "killactive" - else if bind.command == "moveWindowRight" - then "movewindow,r" - else if bind.command == "moveWindowDown" - then "movewindow,d" - else if bind.command == "moveWindowLeft" - then "movewindow,l" - else if bind.command == "moveWindowUp" - then "movewindow,u" - else if bind.command == "moveFocusUp" - then "movefocus,u" - else if bind.command == "moveFocusRight" - then "movefocus,r" - else if bind.command == "moveFocusDown" - then "movefocus,d" - else if bind.command == "moveFocusLeft" - then "movefocus,l" - else if bind.command == "toggleFloating" - then "togglefloating" - else if bind.command == "toggleFullscreen" - then "fullscreen" - else if bind.command == "focusWorkspace" - then "workspace" + "," + mkArgs args - else if bind.command == "moveToWorkspace" - then "movetoworkspace" + "," + mkArgs args - else if bind.command == "spawn" - then "exec" + "," + mkArgs args - else if bind.command == "spawn-sh" - then "exec" + "," + mkArgs args - else bind.command.hyprland + "," + mkArgs args; - hasInvalidCustomCommand = bind: !(builtins.isString bind.command) && bind.command.hyprland or null == null; - - mkEnv = config: let - defaultEnv = - if config.mods.wm.useDefaultEnv - then defaultWmConf.defaultEnv config - else { - all = {}; - hyprland = {}; - }; - userEnv = - if config.mods.wm.env ? all - then config.mods.wm.env.all // config.mods.wm.env.hyprland - else config.mods.wm.env; - env = userEnv // defaultEnv.all // defaultEnv.hyprland; - in - lib.attrsets.mapAttrsToList ( - name: value: "${name},${value}" - ) - env; - mkAutoStart = config: let - defaultStartup = - if config.mods.wm.useDefaultStartup - then defaultWmConf.defaultStartup config - else { - all = []; - hyprland = []; - }; - userStartup = - if config.mods.wm.startup ? all - then config.mods.wm.startup.all ++ config.mods.wm.startup.hyprland - else config.mods.wm.startup; - autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.hyprland; - in - autoStart; - mkWindowRule = config: let - defaultWindowRules = - if config.mods.wm.useDefaultWindowRules - then defaultWmConf.defaultWindowRules.hyprland - else []; - in - # defaultWindowRules ++ config.mods.wm.windowRules.hyprland; - defaultWindowRules; - in { - enable = true; - plugins = - [ - (lib.mkIf config.mods.hypr.hyprland.hyprspaceEnable pkgs.hyprlandPlugins.hyprspace) - ] - ++ config.mods.hypr.hyprland.plugins; - settings = - if config.mods.hypr.hyprland.useDefaultConfig - then - lib.mkMerge - [ - { - "$mod" = mkDashDefault config.mods.wm.modKey; - - bindm = [ - "$mod, mouse:272, movewindow" - "$mod, mouse:273, resizeactive" - ]; - - general = { - gaps_out = mkDashDefault "3,5,5,5"; - border_size = mkDashDefault 3; - "col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg"; - allow_tearing = lib.mkIf config.mods.hypr.hyprland.noAtomic true; - }; - - decoration = { - rounding = mkDashDefault 4; - }; - - render = { - direct_scanout = mkDashDefault config.mods.gaming.enable; - }; - - animations = { - bezier = mkDashDefault "overshot, 0.05, 0.9, 0.1, 1.2"; - animation = [ - "windowsMove,1,4,default" - "windows,1,3,overshot,slide bottom" - "windowsOut,1,7,default,popin 70%" - "border,1,4,default" - "fade,1,7,default" - "workspaces,1,4,default" - "layers,1,2,default,slide" - ]; - }; - - dwindle = { - preserve_split = mkDashDefault true; - pseudotile = mkDashDefault 0; - permanent_direction_override = mkDashDefault false; - }; - - input = { - kb_layout = mkDashDefault "${config.mods.xkb.layout}"; - kb_variant = mkDashDefault "${config.mods.xkb.variant}"; - repeat_delay = mkDashDefault 200; - force_no_accel = mkDashDefault true; - touchpad = { - natural_scroll = mkDashDefault true; - tap-to-click = mkDashDefault true; - tap-and-drag = mkDashDefault true; - }; - }; - - misc = { - animate_manual_resizes = mkDashDefault 1; - enable_swallow = mkDashDefault true; - disable_splash_rendering = mkDashDefault true; - disable_hyprland_logo = mkDashDefault true; - disable_xdg_env_checks = mkDashDefault true; - disable_scale_notification = mkDashDefault true; - swallow_regex = mkDashDefault "^(.*)(kitty)(.*)$"; - initial_workspace_tracking = mkDashDefault 1; - # just doesn't work - enable_anr_dialog = false; - }; - - cursor = { - enable_hyprcursor = mkDashDefault true; - no_hardware_cursors = mkDashDefault ( - if config.mods.gpu.nvidia.enable - then 2 - else 0 - ); - # done with nix, this would break the current setup otherwise - sync_gsettings_theme = mkDashDefault false; - }; - - gesture = [ - "3, horizontal, workspace" - ]; - - layerrule = [ - # layer rules - # mainly to disable animations within slurp and grim - "match:namespace selection, no_anim on" - ]; - - workspace = mkWorkspace config.mods.wm.workspaces; - monitor = mkMonitors config.mods.wm.monitors; - env = mkEnv config; - bind = mkBinds config; - binde = mkEBinds config; - windowrule = mkWindowRule config; - exec-once = mkAutoStart config; - plugin = config.mods.hypr.hyprland.pluginConfig; - } - config.mods.hypr.hyprland.customConfig - ] - else lib.mkForce config.mods.hypr.hyprland.customConfig; - }; - } - ); -} diff --git a/modules/programs/hypr/hyprlock.nix b/modules/programs/hypr/hyprlock.nix deleted file mode 100644 index c152b22..0000000 --- a/modules/programs/hypr/hyprlock.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: { - options.mods.hypr.hyprlock = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables Hyprlock"; - }; - config = lib.mkOption { - default = { - background = [ - { - monitor = ""; - path = ""; - color = "rgba(26, 27, 38, 1.0)"; - } - ]; - - input-field = [ - { - monitor = "${ - if config.mods.wm.monitors != [] - then (builtins.elemAt config.mods.wm.monitors 0).name - else "" - }"; - placeholder_text = "password or something"; - } - ]; - - label = [ - { - monitor = "${ - if config.mods.wm.monitors != [] - then (builtins.elemAt config.mods.wm.monitors 0).name - else "" - }"; - text = "$TIME"; - font_size = 50; - position = "0, 200"; - valign = "center"; - halign = "center"; - } - ]; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "config"; - }; - }; - - config = lib.mkIf config.mods.hypr.hyprlock.enable ( - lib.optionalAttrs (options ? xdg.configFile) { - stylix.targets.hyprlock = { - enable = false; - }; - home.packages = with pkgs; [hyprlock]; - programs.hyprlock = lib.mkIf config.mods.hypr.hyprlock.enable { - enable = true; - settings = config.mods.hypr.hyprlock.config; - }; - } - ); -} diff --git a/modules/programs/hypr/hyprpaper.nix b/modules/programs/hypr/hyprpaper.nix deleted file mode 100644 index b392b54..0000000 --- a/modules/programs/hypr/hyprpaper.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: { - options.mods.hypr.hyprpaper = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables Hyprpaper"; - }; - config = lib.mkOption { - default = ""; - example = '' - preload = path/to/wallpaper - wallpaper = YOURMONITOR,path/to/wallpaper - ''; - type = lib.types.lines; - description = '' - Hyprpaper config - ''; - }; - }; - - config = lib.mkIf config.mods.hypr.hyprpaper.enable ( - lib.optionalAttrs (options ? xdg.configFile) { - home.packages = with pkgs; [hyprpaper]; - xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hypr.hyprpaper.enable { - text = config.mods.hypr.hyprpaper.config; - }; - } - ); -} diff --git a/modules/programs/ironbar.nix b/modules/programs/ironbar.nix deleted file mode 100644 index b955d51..0000000 --- a/modules/programs/ironbar.nix +++ /dev/null @@ -1,552 +0,0 @@ -{ - lib, - config, - pkgs, - inputs, - options, - mkDashDefault, - ... -}: let - inherit (config.conf) username; - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - ironbarDefaultConfig = useBatteryModule: { - end = [ - (lib.mkIf useBatteryModule - { - type = "battery"; - class = "battery"; - icon_size = 0; - format = "{percentage}%"; - thresholds = { - warning = 20; - critical = 5; - }; - }) - { - class = "music"; - type = "music"; - format = ""; - truncate = { - mode = "end"; - max_length = 0; - }; - icons = { - play = ""; - pause = ""; - }; - truncate_popup_title = { - mode = "end"; - max_length = 15; - }; - truncate_popup_album = { - mode = "end"; - max_length = 15; - }; - truncate_popup_artist = { - mode = "end"; - max_length = 15; - }; - } - { - bar = [ - { - class = "popup-button"; - label = ""; - on_click = "popup:toggle"; - type = "button"; - } - ]; - class = "popup-button-box"; - popup = [ - { - class = "audio-box"; - orientation = "vertical"; - type = "box"; - widgets = [ - { - class = "audio-button-box"; - orientation = "horizontal"; - type = "box"; - widgets = [ - { - class = "audio-button"; - label = ""; - on_click = "!audioControl bluetooth"; - type = "button"; - } - { - class = "audio-button"; - label = "󰋋"; - on_click = "!audioControl internal"; - type = "button"; - } - ]; - } - { - class = "audio-label"; - label = "Output"; - type = "label"; - } - { - class = "audio-slider"; - length = 200; - on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%"; - step = 1.0; - type = "slider"; - value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; - label = "{{pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }'}}"; - } - { - class = "audio-label"; - label = "Input"; - type = "label"; - } - { - class = "audio-slider"; - length = 200; - on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%"; - step = 1.0; - type = "slider"; - value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; - } - ]; - } - ]; - type = "custom"; - } - { - bar = [ - { - class = "popup-button"; - label = ""; - on_click = "!oxidash"; - type = "button"; - } - ]; - class = "popup-button-box"; - type = "custom"; - } - { - bar = [ - { - class = "popup-button"; - label = ""; - on_click = "popup:toggle"; - type = "button"; - } - ]; - type = "custom"; - class = "popup-button-box"; - popup = [ - { - class = "system-box"; - type = "box"; - widgets = [ - { - class = "memory-usage"; - format = [ - " {cpu_percent}%" - " {memory_used} / {memory_total} GB ({memory_percent}%)" - " {swap_used} / {swap_total} GB ({swap_free} | {swap_percent}%)" - "󰥔 {uptime}" - ]; - direction = "vertical"; - interval = { - memory = 30; - cpu = 5; - temps = 5; - disks = 5; - network = 5; - }; - type = "sys_info"; - } - ]; - } - ]; - } - { - type = "tray"; - } - ]; - position = "top"; - height = 10; - anchor_to_edges = true; - start = [ - { - type = "workspaces"; - all_monitors = true; - } - ]; - center = [ - { - format = "%I:%M"; - format_popup = "%a %d:%m/%I:%M %p"; - locale = "en_US"; - type = "clock"; - } - ]; - }; - monitorConfig = useBatteryModule: - if config.mods.ironbar.ironbarSingleMonitor - then { - monitors.${ - if config.mods.wm.monitors != [] - then (builtins.elemAt config.mods.wm.monitors 0).name - else "" - } = - ironbarDefaultConfig useBatteryModule; - } - else ironbarDefaultConfig useBatteryModule; -in { - options.mods = { - ironbar = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables ironbar"; - }; - ironbarSingleMonitor = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Whether to use ironbar on a single monitor. - ''; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use preconfigured ironbar config. - ''; - }; - useBatteryModule = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Whether to use the preconfigured battery module."; - }; - customConfig = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Custom ironbar configuration. - Will be merged with default configuration if enabled. - ''; - }; - useDefaultCss = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use preconfigured ironbar css. - ''; - }; - customCss = lib.mkOption { - default = ''''; - example = '' - #window { - border-radius: none; - } - ''; - type = lib.types.lines; - description = '' - Custom ironbar css. - Will be merged with default css if enabled. - ''; - }; - }; - }; - config = lib.mkIf (config.mods.ironbar.enable || config.mods.hypr.hyprland.useIronbar) ( - lib.optionalAttrs (options ? programs.ironbar) { - programs.ironbar = { - package = mkDashDefault pkgs.ironbar; - enable = true; - style = - if config.mods.ironbar.useDefaultCss - then - /* - css - */ - '' - @import url("/home/${username}/.config/gtk-3.0/gtk.css"); - - @define-color primary #${scheme.base0D}; - @define-color warning #${scheme.base0F}; - @define-color muted-text #${scheme.base05}; - @define-color background #${scheme.base00}; - @define-color secondary-background #${scheme.base02}; - - * slider { - background-color: @muted-text; - } - - * { - transition: - background-color 0.15s ease-in-out, - color 0.15s ease-in-out, - border-color 0.15s ease-in-out; - } - - .background { - background-color: rgba(0, 0, 0, 0); - padding: 0px; - margin: 0px; - } - - .focused { - padding: 0px 5px; - background-color: @background; - font-size: 17px; - border-radius: 10px; - } - - #bar #end { - margin: 0px 5px; - padding: 0px 5px; - background-color: @background; - border-radius: 10px; - } - - .popup-button { - padding: 0px 5px 0px 2px; - border-radius: 100%; - font-size: 13px; - background-color: @background; - } - - .popup-button-box { - padding: 2px 0px; - margin-right: 4px; - } - - .custom button { - background-color: @background; - color: @primary; - } - - .custom button:hover { - background-color: @secondary-background; - } - - /* audio */ - .audio-box * { - color: @primary; - } - - .audio-box { - padding: 2em; - background-color: @background; - border-radius: 5px; - border: 1px solid @primary; - } - - .audio-slider { - padding: 5px; - margin: 5px 5px 15px; - } - - .audio-label { - font-size: 19px; - } - - .audio-button { - padding: 10px 10px 10px 8px; - min-height: 35px; - min-width: 35px; - margin: 0px 1em; - border-radius: 50%; - font-size: 25px; - } - - .audio-button-box { - padding: 0px 2.5em 0px 2.5em; - margin: 0em 0em 1.5em; - } - - /* clock */ - .clock { - padding: 0px 5px; - font-size: 20px; - border-radius: 5px; - background-color: @background; - color: @primary; - } - - .clock:hover { - background-color: @secondary-background; - } - - .popup-clock { - font-size: 2.5em; - background-color: @background; - border: 1px solid @primary; - padding: 0.5em; - border-radius: 8px; - color: @primary; - } - - .popup-clock .calendar-clock { - margin: 0.25em 0em 0.75em; - color: @primary; - } - - .popup-clock .calendar { - font-size: 24px; - color: @primary; - } - - .popup-clock .calendar:selected { - background-color: @secondary-background; - } - - /* workspaces */ - .workspaces { - margin: 0px 0px 0px 5px; - border-radius: 10px; - background-color: @background; - padding: 2px 5px; - } - - .workspaces .item { - margin: 0px 3px; - font-size: 13px; - border-radius: 100%; - padding: 0px 3px 0px 3px; - background-color: rgba(0, 0, 0, 0); - color: @primary; - } - - .workspaces .item:hover { - background-color: @secondary-background; - color: @primary; - } - - .workspaces .item:not(.visible) { - color: @warning; - } - - .workspaces .item.focused { - background-color: @primary; - color: @background; - } - - /* battery */ - .battery { - font-size: 13px; - padding: 0px 4px 0px 0px; - margin: 2px 0px 2px 0px; - background-color: @background; - color: @primary; - } - - .battery .icon { - opacity: 0.0; - } - - .battery .label { - margin: 2px 0px 0px -8px; - color: @primary; - } - - .battery:hover { - background-color: @secondary-background; - border-radius: 5px; - } - - .popup-battery { - background-color: @background; - color: @primary; - border-radius: 8px; - border: 1px solid @primary; - padding: 16px; - font-size: 20px; - } - - /* music */ - .music { - font-size: 13px; - padding: 0px 4px 0px 3px; - margin: 2px 0px 2px 0px; - background-color: @background; - color: @primary; - } - - .music:hover { - background-color: @secondary-background; - border-radius: 100%; - } - - .music .contents .icon { - margin: 0px 0px 0px 5px; - } - - .popup-music { - background-color: @background; - color: @primary; - border-radius: 8px; - border: 1px solid @primary; - padding: 16px; - font-size: 20px; - } - - .popup-music .controls .btn-prev { - color: @primary; - margin-right: 16px; - } - - .popup-music .controls .btn-next { - color: @primary; - margin-right: 16px; - } - - .popup-music .controls .btn-play { - color: @primary; - margin-right: 16px; - } - - .popup-music .controls .btn-pause { - color: @primary; - margin-right: 16px; - } - - /* system */ - .system-box { - padding: 16px; - color: @primary; - border: 1px solid @primary; - background-color: @background; - border-radius: 8px; - } - - .memory-usage { - font-size: 15px; - color: @primary; - } - - .memory-usage:hover { - background-color: @secondary-background; - } - '' - + config.mods.ironbar.customCss - else config.mods.ironbar.customCss; - features = [ - #"another_feature" - ]; - config = - if config.mods.ironbar.useDefaultConfig - then - lib.mkMerge - [ - (monitorConfig config.mods.ironbar.useBatteryModule) - config.mods.ironbar.customConfig - ] - else config.mods.ironbar.customConfig; - }; - } - ); -} diff --git a/modules/programs/kde.nix b/modules/programs/kde.nix deleted file mode 100644 index f81194d..0000000 --- a/modules/programs/kde.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - lib, - options, - config, - ... -}: { - options.mods.kde = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the KDE desktop environment"; - }; - }; - - config = lib.mkIf config.mods.kde.enable ( - lib.optionalAttrs (options ? services.desktopManager.plasma6) { - # apparently kde integration is bad -> kdeconfig is too much even for nix, can't blame them :) - services.desktopManager.plasma6.enable = true; - } - ); -} diff --git a/modules/programs/kdeConnect.nix b/modules/programs/kdeConnect.nix deleted file mode 100644 index 46b12e8..0000000 --- a/modules/programs/kdeConnect.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods = { - kdeConnect.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables kde_connect. - ''; - }; - }; - - config = lib.mkIf config.mods.kdeConnect.enable ( - lib.optionalAttrs (options ? networking.firewall) { - networking.firewall = { - allowedTCPPortRanges = [ - { - from = 1714; - to = 1764; - } - # KDE Connect - ]; - allowedUDPPortRanges = [ - { - from = 1714; - to = 1764; - } - # KDE Connect - ]; - }; - } - // lib.optionalAttrs (options ? home.packages) { - home.packages = with pkgs; [kdePackages.kdeconnect-kde]; - } - ); -} diff --git a/modules/programs/keepassxc.nix b/modules/programs/keepassxc.nix deleted file mode 100644 index d8c0c6a..0000000 --- a/modules/programs/keepassxc.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.keepassxc = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables the piper program and its daemon"; - }; - useConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to overwrite the config of keepassxc. Note, this means that changes can't be applied via the program anymore!"; - }; - config = lib.mkOption { - default = '' - [General] - ConfigVersion=2 - - [Browser] - Enabled=true - - [GUI] - ApplicationTheme=classic - HidePasswords=true - MinimizeOnClose=true - MinimizeToTray=true - ShowTrayIcon=true - TrayIconAppearance=monochrome-light - - [PasswordGenerator] - Length=30 - - [Security] - EnableCopyOnDoubleClick=true - ''; - example = ""; - type = lib.types.lines; - description = "Cache config to be used."; - }; - useCacheConfig = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Whether to overwrite the cache config of keepassxc. Note, this means that changes can't be applied via the program anymore!"; - }; - cacheConfig = lib.mkOption { - default = ''''; - example = '' - [General] - LastDatabases=/path/to/database - ''; - type = lib.types.lines; - description = "Cache config to be used."; - }; - }; - config = lib.mkIf config.mods.keepassxc.enable ( - lib.optionalAttrs (options ? home.file) { - home.packages = [pkgs.keepassxc]; - xdg.configFile."keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useConfig { - text = config.mods.keepassxc.config; - }; - - home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useCacheConfig { - text = config.mods.keepassxc.cacheConfig; - }; - } - ); -} diff --git a/modules/programs/kitty.nix b/modules/programs/kitty.nix deleted file mode 100644 index ab2ae5a..0000000 --- a/modules/programs/kitty.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ - lib, - config, - options, - pkgs, - inputs, - ... -}: let - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - hexTable = { - "0" = "1"; - "1" = "0"; - "2" = "1"; - "3" = "2"; - "4" = "3"; - "5" = "4"; - "6" = "5"; - "7" = "6"; - "8" = "7"; - "9" = "8"; - "a" = "9"; - "b" = "a"; - "c" = "b"; - "d" = "c"; - "e" = "d"; - "f" = "e"; - }; - # don't ask :) - base = - "#" - + lib.strings.concatStrings ( - (lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00)) - ++ [hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}"] - ); -in { - options.mods.kitty = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables kitty"; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enable default config for kitty"; - }; - additionalConfig = lib.mkOption { - default = {}; - example = { - # for the insane people out there :P - enable_audio_bell = "yes"; - }; - type = with lib.types; attrsOf anything; - description = "Additional kitty configuration. Will be the only configuration if useDefaultConfig is disabled."; - }; - }; - config = lib.mkIf config.mods.kitty.enable ( - lib.optionalAttrs (options ? home.packages) { - stylix.targets.kitty = { - enable = false; - }; - programs.kitty = { - enable = true; - settings = - if config.mods.kitty.useDefaultConfig - then - { - enable_audio_bell = "no"; - window_alert_on_bell = "no"; - cursor_blink_interval = "0"; - window_padding_width = "1"; - shell_integration = "yes"; - sync_with_monitor = "no"; - background_opacity = "0.8"; - - font_family = "${config.mods.stylix.fonts.monospace.name}"; - bold_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold"; - italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Italic"; - bold_italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold Italic"; - - background = base; - foreground = "#" + scheme.base05; - selection_foreground = "#" + scheme.base05; - selection_background = base; - url_color = "#" + scheme.base04; - cursor = "#" + scheme.base05; - active_border_color = "#" + scheme.base03; - inactive_border_color = "#" + scheme.base01; - active_tab_background = base; - active_tab_foreground = "#" + scheme.base05; - inactive_tab_background = "#" + scheme.base01; - inactive_tab_foreground = "#" + scheme.base04; - tab_bar_background = "#" + scheme.base01; - - mark1_foreground = "#" + scheme.base00; - mark1_background = "#" + scheme.base07; - mark2_foreground = "#" + scheme.base00; - mark2_background = "#" + scheme.base0E; - mark3_foreground = "#" + scheme.base00; - mark3_background = "#" + scheme.base08; - - color0 = "#" + scheme.base03; - color1 = "#" + scheme.base08; - color2 = "#" + scheme.base0B; - color3 = "#" + scheme.base0A; - color4 = "#" + scheme.base0D; - color5 = "#" + scheme.base06; - color6 = "#" + scheme.base0C; - color7 = "#" + scheme.base07; - - color8 = "#" + scheme.base04; - color9 = "#" + scheme.base08; - color10 = "#" + scheme.base0B; - color11 = "#" + scheme.base0A; - color12 = "#" + scheme.base0D; - color13 = "#" + scheme.base06; - color14 = "#" + scheme.base0C; - color15 = "#" + scheme.base0B; - shell = lib.mkIf config.mods.fish.enable "fish"; - } - // config.mods.kitty.additionalConfig - else config.mods.kitty.additionalConfig; - }; - } - ); -} diff --git a/modules/programs/media.nix b/modules/programs/media.nix deleted file mode 100644 index c37d62b..0000000 --- a/modules/programs/media.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ - lib, - options, - config, - pkgs, - ... -}: { - options.mods.media = { - useBasePackages = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Default media packages (If disabled, only the additional packages will be installed)"; - }; - additionalPackages = lib.mkOption { - default = []; - example = [pkgs.flatpak]; - type = with lib.types; listOf package; - description = '' - Additional media packages. - ''; - }; - specialPrograms = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - special program configuration to be added which require programs.something notation. - ''; - }; - specialServices = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - special services configuration to be added which require an services.something notation. - ''; - }; - filePickerPortal = lib.mkOption { - default = "Term"; - example = "Gnome"; - type = with lib.types; oneOf [(enum ["Gnome" "Kde" "Lxqt" "Gtk" "Term" "Default"]) str]; - description = '' - The file picker portal to use (set with shana). - Default removes the config, allowing you to set it yourself. - ''; - }; - termFileChooserConfig = lib.mkOption { - default = { - cmd = "${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh"; - default_dir = "$HOME"; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Termfilechooser config - ''; - }; - }; - config = lib.optionalAttrs (options ? home.packages) { - xdg.configFile."xdg-desktop-portal-termfilechooser/config" = lib.mkIf (config.mods.media.filePickerPortal != "Term") { - source = (pkgs.formats.ini {}).generate "termchooser" { - filechooser = config.mods.media.termFileChooserConfig; - }; - }; - xdg.configFile."xdg-desktop-portal-shana/config.toml" = lib.mkIf (config.mods.media.filePickerPortal != "Default") { - source = let - name = - if (config.mods.media.filePickerPortal == "Term") - then "org.freedesktop.impl.portal.desktop.termfilechooser" - else config.mods.media.filePickerPortal; - in - (pkgs.formats.toml {}).generate "shana" { - open_file = name; - save_file = name; - save_files = name; - }; - }; - home.packages = - if config.mods.media.useBasePackages - then - with pkgs; - [ - # base audio - pipewire - wireplumber - # audio control - playerctl - # images - eog - # videos - mpv - # pdf - zathura - evince - libreoffice-fresh - onlyoffice-desktopeditors - pdftk - pdfpc - polylux2pdfpc - # spotify - # video editing - kdePackages.kdenlive - # image creation - inkscape - gimp - krita - yt-dlp - ] - ++ config.mods.media.additionalPackages - else config.mods.media.additionalPackages; - programs = - if config.mods.media.useBasePackages - then - { - obs-studio.enable = true; - obs-studio.plugins = with pkgs; [obs-studio-plugins.obs-vaapi]; - } - // config.mods.media.specialPrograms - else config.mods.media.specialPrograms; - services = config.mods.media.specialServices; - }; -} diff --git a/modules/programs/mime.nix b/modules/programs/mime.nix deleted file mode 100644 index 4da7aff..0000000 --- a/modules/programs/mime.nix +++ /dev/null @@ -1,161 +0,0 @@ -# Copyright (c) 2020-2021 Mihai Fufezan -# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix -{ - mkDashDefault, - config, - lib, - options, - ... -}: let - browserName = - if (builtins.isString config.mods.homePackages.browser) - then config.mods.homePackages.browser - else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram - then config.mods.homePackages.browser.meta.mainProgram - else config.mods.homePackages.browser.pname; -in { - options.mods.mime = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables mime handling with nix"; - }; - imageTypes = lib.mkOption { - default = [ - "png" - "svg" - "jpeg" - "gif" - ]; - example = []; - type = with lib.types; listOf str; - description = "Image mime handlers"; - }; - videoTypes = lib.mkOption { - default = [ - "mp4" - "avi" - "mkv" - ]; - example = []; - type = with lib.types; listOf str; - description = "Video mime handlers"; - }; - audioTypes = lib.mkOption { - default = [ - "mp3" - "flac" - "wav" - "aac" - ]; - example = []; - type = with lib.types; listOf str; - description = "Audio mime handlers"; - }; - browserTypes = lib.mkOption { - default = [ - "json" - "x-extension-htm" - "x-extension-html" - "x-extension-shtml" - "x-extension-xht" - "x-extension-xhtml" - ]; - example = []; - type = with lib.types; listOf str; - description = "Browser mime handlers"; - }; - browserXTypes = lib.mkOption { - default = [ - "about" - "ftp" - "http" - "https" - "unknown" - ]; - example = []; - type = with lib.types; listOf str; - description = "Browser X mime handlers"; - }; - browserApplications = lib.mkOption { - default = ["${browserName}"]; - example = []; - type = with lib.types; listOf str; - description = "Applications used for handling browser mime types"; - }; - imageApplications = lib.mkOption { - default = ["eog"]; - example = []; - type = with lib.types; listOf str; - description = "Applications used for handling image mime types"; - }; - videoApplications = lib.mkOption { - default = ["mpv"]; - example = []; - type = with lib.types; listOf str; - description = "Applications used for handling video mime types"; - }; - audioApplications = lib.mkOption { - default = ["io.bassi.Amberol"]; - example = []; - type = with lib.types; listOf str; - description = "Applications used for handling audio mime types"; - }; - # TODO additional config - }; - config = lib.optionalAttrs (options ? home) { - xdg = let - xdgAssociations = type: program: list: - builtins.listToAttrs ( - map (e: { - name = "${type}/${e}"; - value = program; - }) - list - ); - - imageAc = xdgAssociations "image" config.mods.mime.imageApplications config.mods.mime.imageTypes; - videoAc = xdgAssociations "video" config.mods.mime.videoApplications config.mods.mime.videoTypes; - audioAc = xdgAssociations "audio" config.mods.mime.audioApplications config.mods.mime.audioTypes; - browserAc = - (xdgAssociations "application" config.mods.mime.browserApplications config.mods.mime.browserTypes) - // ( - xdgAssociations "x-scheme-handler" config.mods.mime.browserApplications - config.mods.mime.browserXTypes - ); - associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) ( - # TODO make configurable - { - "application/pdf" = ["org.pwmt.zathura-pdf-mupdf"]; - "text/html" = config.mods.mime.browserApplications; - "text/plain" = ["neovide"]; - "x-scheme-handler/chrome" = ["com.brave.browser"]; - "inode/directory" = ["yazi"]; - } - // imageAc - // audioAc - // videoAc - // browserAc - ); - in - lib.mkIf config.mods.mime.enable { - enable = true; - cacheHome = config.home.homeDirectory + "/.local/cache"; - - mimeApps = { - enable = true; - defaultApplications = associations; - }; - - userDirs = { - enable = mkDashDefault true; - createDirectories = mkDashDefault true; - extraConfig = { - XDG_SCREENSHOTS_DIR = mkDashDefault "${config.xdg.userDirs.pictures}/Screenshots"; - pws = mkDashDefault "${config.home.homeDirectory}/pws"; - }; - }; - }; - }; -} diff --git a/modules/programs/ncspot.nix b/modules/programs/ncspot.nix deleted file mode 100644 index b998942..0000000 --- a/modules/programs/ncspot.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.ncspot = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables ncspot with a config"; - }; - config = lib.mkOption { - default = { - notify = true; - shuffle = true; - cover_max_scale = 2; - initial_screen = "library"; - library_tabs = ["playlists"]; - theme = { - background = "#1a1b26"; - primary = "#9aa5ce"; - secondary = "#414868"; - title = "#9ece6a"; - playing = "#7aa2f7"; - playing_selected = "#bb9af7"; - playing_bg = "#24283b"; - highlight = "#c0caf5"; - highlight_bg = "#24283b"; - error = "#414868"; - error_bg = "#f7768e"; - statusbar = "#ff9e64"; - statusbar_progress = "#7aa2f7"; - statusbar_bg = "#1a1b26"; - cmdline = "#c0caf5"; - cmdline_bg = "#24283b"; - search_match = "#f7768e"; - }; - keybindings = { - "j" = "move left 1"; - "k" = "move down 1"; - "l" = "move up 1"; - ";" = "move right 1"; - }; - notification_format = { - title = "%artists"; - body = "%title"; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "config"; - }; - }; - config = lib.mkIf config.mods.ncspot.enable ( - lib.optionalAttrs (options ? home.packages) { - home.packages = with pkgs; [ncspot]; - xdg.configFile."ncspot/config.toml".source = - lib.mkIf config.mods.ncspot.useConfig (pkgs.formats.toml {}).generate "ncspot" config.mods.ncspot.config; - } - ); -} diff --git a/modules/programs/nextcloud.nix b/modules/programs/nextcloud.nix deleted file mode 100644 index 31216ee..0000000 --- a/modules/programs/nextcloud.nix +++ /dev/null @@ -1,38 +0,0 @@ -{lib, ...}: { - options.mods = { - nextcloud = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enable nextcloud"; - }; - username = lib.mkOption { - default = ""; - example = "globi"; - type = lib.types.str; - description = "Your username"; - }; - url = lib.mkOption { - default = ""; - example = "cloud.globi.org"; - type = lib.types.str; - description = "Your url"; - }; - synclist = lib.mkOption { - default = []; - example = [ - { - name = "sync globi folder"; - remote = "globi"; - local = "/home/globi"; - } - ]; - description = '' - A list of folders to synchronize. - This has to be an attribute list with the name, remote and local field (all strings). - ''; - }; - }; - }; -} diff --git a/modules/programs/niri.nix b/modules/programs/niri.nix deleted file mode 100644 index 0531829..0000000 --- a/modules/programs/niri.nix +++ /dev/null @@ -1,392 +0,0 @@ -{ - mkDashDefault, - config, - lib, - options, - pkgs, - ... -}: let - defaultWmConf = import ../../lib/wm.nix; -in { - options.mods.niri = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enable Niri - ''; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Use preconfigured Niri config. - ''; - }; - customConfig = lib.mkOption { - default = ''''; - example = ''''; - type = lib.types.lines; - description = '' - Custom Niri configuration. - Will be merged with default configuration if enabled. - ''; - }; - }; - - config = lib.mkIf config.mods.niri.enable ( - lib.optionalAttrs (options ? wayland.windowManager.hyprland) { - # TODO deduplicate and abstract away base window management config - # install Niri related packages - home.packages = with pkgs; [ - xorg.xprop - grim - slurp - satty - xdg-desktop-portal-gtk - xdg-desktop-portal-gnome - kdePackages.xdg-desktop-portal-kde - xdg-desktop-portal-shana - copyq - wl-clipboard - - niri - xwayland-satellite - ]; - - xdg.configFile."niri/config.kdl" = let - mkNiriMod = mods: - builtins.map (mod: - if mod == "Mod" - then config.mods.wm.modKey + "+" - else "${mod}" + "+") - mods - |> lib.strings.concatStringsSep ""; - mkNiriArg = args: - if args != [] - then let - concatCommand = lib.strings.concatStringsSep " " args; - validCommand = builtins.replaceStrings [''"''] [''\"''] concatCommand; - in "\"${validCommand}\"" - else ""; - mkNiriCommand = bind: let - args = bind.args or []; - in - if bind.command == "quit" - then "quit;" - else if bind.command == "killActive" - then "close-window;" - else if bind.command == "moveFocusTop" - then "focus-window-up;" - else if bind.command == "focusWorkspace" - then "focus-workspace" + " " + mkNiriArg args + ";" - else if bind.command == "moveWindowRight" - then "move-column-right-or-to-monitor-right;" - else if bind.command == "moveWindowDown" - then "move-window-down;" - else if bind.command == "moveWindowLeft" - then "move-column-left-or-to-monitor-left;" - else if bind.command == "moveWindowUp" - then "move-window-up;" - else if bind.command == "moveFocusUp" - then "focus-window-up;" - else if bind.command == "moveFocusRight" - then "focus-column-or-monitor-right;" - else if bind.command == "moveFocusDown" - then "focus-window-down;" - else if bind.command == "moveFocusLeft" - then "focus-column-or-monitor-left;" - else if bind.command == "toggleFloating" - then "toggle-window-floating;" - else if bind.command == "toggleFullscreen" - then "fullscreen-window;" - else if bind.command == "moveToWorkspace" - then "move-window-to-workspace" + " " + mkNiriArg args + ";" - else if bind.command == "spawn" - then "spawn" + " " + mkNiriArg args + ";" - else if bind.command == "spawn-sh" - then "spawn-sh" + " " + mkNiriArg args + ";" - else if bind.command.niri != null - then bind.command.niri + " " + mkNiriArg args + ";" - else ""; - - mkNiriBinds = cfg: - '' binds { - '' - + ( - ( - builtins.map ( - bind: - /* - kdl - */ - if bind ? key && bind ? command - then '' - ${mkNiriMod (bind.modKeys or [])}${bind.key} ${ - if - bind ? meta - && bind.meta ? niri - then - ( - if - bind.meta.niri ? desc - && bind.meta.niri.desc != "" - then "hotkey-overlay-title=\"" + bind.meta.niri.desc + "\"" - else "" - ) - + " " - + ( - if - bind.meta.niri ? repeat - && bind.meta.niri.repeat - then "repeat=true" - else "repeat=false" - ) - + " " - + ( - if - bind.meta.niri ? allowWhileLocked - && bind.meta.niri.allowWhileLocked - then "allow-when-locked=true" - else "" - ) - + " " - + ( - if - bind.meta.niri ? allowInhibit - && bind.meta.niri.allowInhibit - then "allow-inhibiting=true" - else "allow-inhibiting=false" - ) - else "" - } { ${ - mkNiriCommand bind - } } - '' - else '''' - ) - (( - cfg.mods.wm.binds - ++ ( - if cfg.mods.wm.useDefaultBinds - then defaultWmConf.defaultBinds cfg - else [] - ) - ) - |> builtins.filter (bind: !(hasInvalidCustomCommand bind))) - ) - |> lib.strings.concatLines - ) - + '' - } - ''; - mkVrr = vrr: - if vrr - then "true" - else "false"; - mkNiriMonitors = cfg: - (builtins.map ( - monitor: - # TODO vrr - /* - kdl - */ - '' - output "${monitor.name}" { - variable-refresh-rate on-demand=${mkVrr monitor.vrr} - mode "${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate}" - scale ${builtins.toString monitor.scale} - transform "${ - if (monitor.transform == "0") - then "normal" - else monitor.transform - }" - position x=${builtins.toString monitor.positionX} y=${builtins.toString monitor.positionY} - } - '' - ) - cfg.mods.wm.monitors) - |> lib.strings.concatLines; - mkNiriWorkspaces = cfg: - (builtins.map ( - workspace: - /* - kdl - */ - '' - workspace "${workspace.name}" { - open-on-output "${workspace.monitor}" - } - '' - ) - cfg.mods.wm.workspaces) - |> lib.strings.concatLines; - mkNiriWindowRules = cfg: ( - ( - builtins.map ( - rule: - /* - kdl - */ - '' - window-rule { - ${rule} - } - '' - ) - ( - cfg.mods.wm.windowRules.niri - ++ ( - if cfg.mods.wm.useDefaultWindowRules - then defaultWmConf.defaultWindowRules.niri - else [] - ) - ) - ) - |> lib.strings.concatLines - ); - hasInvalidCustomCommand = bind: !(bind ? command) || (!(builtins.isString bind.command) && bind.command.niri or null == null); - mkNiriEnv = config: let - defaultEnv = - if config.mods.wm.useDefaultEnv - then defaultWmConf.defaultEnv config - else { - all = {}; - niri = {}; - }; - userEnv = - if config.mods.wm.env ? all - then config.mods.wm.env.all // config.mods.wm.env.niri - else config.mods.wm.env; - env = - userEnv - // defaultEnv.all - // defaultEnv.niri; - in - '' - environment { - '' - + ( - lib.attrsets.mapAttrsToList ( - name: value: "${name} \"${value}\"" - ) - env - |> lib.strings.concatLines - ) - + '' - } - ''; - mkNiriAutoStart = config: let - defaultStartup = - if config.mods.wm.useDefaultStartup - then defaultWmConf.defaultStartup config - else { - all = {}; - niri = {}; - }; - userStartup = - if config.mods.wm.startup ? all - then config.mods.wm.startup.all ++ config.mods.wm.startup.niri - else config.mods.wm.startup; - autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.niri; - in - (builtins.map (value: "spawn-at-startup \"${value}\"") - autoStart) - |> lib.strings.concatLines; - defaultConfig = - /* - kdl - */ - '' - input { - keyboard { - xkb { - layout "enIntUmlaut" - } - repeat-delay 200 - repeat-rate 25 - numlock - } - - touchpad { - tap - natural-scroll - } - - mouse { - accel-speed 0.2 - accel-profile "flat" - } - - focus-follows-mouse max-scroll-amount="25%" - } - - layout { - // Set gaps around windows in logical pixels. - gaps 10 - center-focused-column "never" - always-center-single-column - - preset-column-widths { - proportion 0.33333 - proportion 0.5 - proportion 1.0 - } - - default-column-width { proportion 0.5; } - focus-ring { - width 3 - inactive-color "#505050" - active-gradient from="#ff0000" to="#00ff00" angle=45 - } - - border { - off - } - - // You can enable drop shadows for windows. - shadow { - on - softness 30 - spread 5 - offset x=0 y=5 - color "#0007" - } - } - - ${ - if config.mods.gpu.nvidia.enable - then '' - debug { - wait-for-frame-completion-before-queueing - } - '' - else '''' - } - - // Autostart - - hotkey-overlay { - skip-at-startup - } - - prefer-no-csd - '' - + mkNiriMonitors config - + mkNiriBinds config - + mkNiriWorkspaces config - + mkNiriWindowRules config - + mkNiriEnv config - + mkNiriAutoStart config; - in - mkDashDefault { - text = - if config.mods.niri.useDefaultConfig - then defaultConfig + config.mods.niri.customConfig - else config.mods.niri.customConfig; - }; - } - ); -} diff --git a/modules/programs/onedrive.nix b/modules/programs/onedrive.nix deleted file mode 100644 index 56bd79d..0000000 --- a/modules/programs/onedrive.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: { - options.mods = { - onedrive = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enable onedrive program and service"; - }; - }; - }; - config = lib.mkIf config.mods.onedrive.enable ( - lib.optionalAttrs (options ? environment) { - services.onedrive.enable = true; - environment.systemPackages = [pkgs.onedrive]; - } - ); -} diff --git a/modules/programs/oxi/default.nix b/modules/programs/oxi/default.nix deleted file mode 100644 index 83c4f23..0000000 --- a/modules/programs/oxi/default.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - lib, - config, - options, - inputs, - ... -}: { - imports = [ - ./oxidash.nix - ./oxinoti.nix - ./oxipaste.nix - ./oxirun.nix - ./oxishut.nix - ]; - options.mods.oxi = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables oxi programs"; - }; - ReSet = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables and configures ReSet"; - }; - }; - hyprdock = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables hyprdock"; - }; - settings = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "settings for hyprdock"; - }; - }; - oxicalc = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables hyprdock"; - }; - }; - }; - config = lib.mkIf config.mods.oxi.enable ( - lib.optionalAttrs (options ? home.packages) { - programs = { - hyprdock = { - inherit (config.mods.oxi.hyprdock) enable; - inherit (config.mods.oxi.hyprdock) settings; - }; - oxicalc.enable = lib.mkIf config.mods.oxi.oxicalc.enable true; - ReSet = lib.mkIf config.mods.oxi.ReSet.enable { - enable = true; - config = { - plugins = [ - inputs.reset-plugins.packages."x86_64-linux".monitor - inputs.reset-plugins.packages."x86_64-linux".keyboard - ]; - plugin_config = { - Keyboard = { - path = "/home/${config.conf.username}/.config/reset/keyboard.conf"; - }; - }; - }; - }; - }; - } - // lib.optionalAttrs (options ? services.logind && options ? services.logind.settings) { - services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore"; - } - ); -} diff --git a/modules/programs/oxi/oxidash.nix b/modules/programs/oxi/oxidash.nix deleted file mode 100644 index 9ea519e..0000000 --- a/modules/programs/oxi/oxidash.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - lib, - config, - options, - pkgs, - inputs, - ... -}: let - # at time of using this here, stylix might not be evaluated yet - # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; -in { - options.mods.oxi.oxidash = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables and configures oxidash"; - }; - }; - config = lib.mkIf (config.mods.oxi.oxidash.enable && config.mods.oxi.enable) ( - lib.optionalAttrs (options ? xdg.configFile) { - programs.oxidash.enable = true; - xdg.configFile."oxidash/style.css" = { - text = '' - @define-color bg #${scheme.base00}; - @define-color primary #${scheme.base0D}; - - #MainWindow { - border-radius: 10px; - background-color: transparent; - } - - #MainBox { - border-radius: 10px; - border: 1px solid @primary; - background-color: @bg; - } - - #MainButtonBox { - padding: 10px; - margin: 5px 0px 5px 0px; - border-radius: 5px; - border: solid 1px @primary; - } - - #DoNotDisturbButton {} - - #ExitButton {} - - #ClearNotificationsButton {} - - #NotificationsWindow {} - - .debugimage { - border: solid 3px @primary; - } - - .Notification { - padding: 10px; - margin: 5px 0px 5px 0px; - border: solid 1px @primary; - border-radius: 5px; - } - - .CloseNotificationButton { - margin: 0px 5px 0px 10px; - } - - .PictureButtonBox {} - - .BaseBox {} - } - ''; - }; - } - ); -} diff --git a/modules/programs/oxi/oxinoti.nix b/modules/programs/oxi/oxinoti.nix deleted file mode 100644 index d265af3..0000000 --- a/modules/programs/oxi/oxinoti.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ - lib, - config, - options, - pkgs, - inputs, - ... -}: let - # at time of using this here, stylix might not be evaluated yet - # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; -in { - options.mods.oxi.oxinoti = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables and configures oxinoti"; - }; - }; - config = lib.mkIf (config.mods.oxi.oxinoti.enable && config.mods.oxi.enable) ( - lib.optionalAttrs (options ? xdg.configFile) { - programs.oxinoti.enable = true; - xdg.configFile."oxinoti/style.css" = { - text = - # css - '' - @import url("/home/dashie/.config/gtk-3.0/gtk.css"); - - @define-color bg #${scheme.base00}; - @define-color bghover #${scheme.base02}; - @define-color primary #${scheme.base0D}; - @define-color red #${scheme.base08}; - @define-color green #${scheme.base0B}; - - #MainWindow { - background-color: transparent; - padding: 0px; - /* opacity: 0; */ - } - - .MainBox { - background-color: transparent; - padding: 0px; - /* opacity: 0; */ - } - - .NotificationBox { - background-color: @bg; - border-radius: 5px; - border: solid 1px; - margin: 0px; - } - - .NotificationBox button { - background-color: @bg; - } - - .NotificationBox button:hover { - background-color: @bghover; - } - - .NotificationLow { - border-color: @green; - } - - .NotificationNormal { - border-color: @primary; - } - - .NotificationUrgent { - border-color: @red; - } - - .miscbox { - margin: 0px 10px 0px 0px; - } - - .bodybox {} - - .imagebox { - margin: 0px 0px 0px 10px; - } - - .appname { - font-size: 0.8rem; - } - - .timestamp { - font-size: 0.8rem; - } - - .summary { - font-size: 0.8rem; - } - - .body { - font-size: 1.2rem; - } - - .icon { - font-size: 2rem; - } - - .image {} - - .bold { - font-weight: bold; - } - - .italic { - font-style: italic; - } - - .underline { - text-decoration-line: underline; - } - ''; - }; - xdg.configFile."oxinoti/oxinoti.toml" = { - text = '' - timeout = 3 - dnd_override = 2 - ''; - }; - } - ); -} diff --git a/modules/programs/oxi/oxipaste.nix b/modules/programs/oxi/oxipaste.nix deleted file mode 100644 index 4ec7b1d..0000000 --- a/modules/programs/oxi/oxipaste.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.oxi.oxipaste = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables and configures oxipaste"; - }; - }; - config = lib.mkIf (config.mods.oxi.oxipaste.enable && config.mods.oxi.enable) ( - lib.optionalAttrs (options ? xdg.configFile) { - programs.oxipaste.enable = true; - xdg.configFile."oxipaste/style.css" = { - text = '' - .main-window { - padding: 10px; - border-radius: 10px; - border: 2px solid #2AC3DE; - } - - .item-window { - padding: 10px; - border-radius: 10px; - border: 2px solid #C0CAF5; - } - - .item-button { - background-color: #1A1B26; - border-radius: 5px; - border: 1px solid #6D728D; - } - - .delete-button { - margin: 5px 25px 5px 5px; - } - - .item-box { - } - ''; - }; - } - ); -} diff --git a/modules/programs/oxi/oxirun.nix b/modules/programs/oxi/oxirun.nix deleted file mode 100644 index 55f4d75..0000000 --- a/modules/programs/oxi/oxirun.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.oxi.oxirun = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables OxiRun"; - }; - }; - config = lib.mkIf (config.mods.oxi.oxirun.enable && config.mods.oxi.enable) ( - lib.optionalAttrs (options ? xdg.configFile) { - programs.oxirun.enable = true; - } - ); -} diff --git a/modules/programs/oxi/oxishut.nix b/modules/programs/oxi/oxishut.nix deleted file mode 100644 index 25ebe0b..0000000 --- a/modules/programs/oxi/oxishut.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.oxi.oxishut = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables and configures oxishut"; - }; - }; - config = lib.mkIf (config.mods.oxi.oxishut.enable && config.mods.oxi.enable) ( - lib.optionalAttrs (options ? xdg.configFile) { - programs.oxishut.enable = true; - xdg.configFile."oxishut/style.css" = { - text = '' - #mainwindow { - border-radius: 10px; - } - - .mainbox { - border-radius: 5px; - padding: 20px; - } - - .button { - margin: 5px; - background-color: #2b2c3b; - -gtk-icon-size: 5rem; - } - - .button:hover { - background-color: #3e4152; - } - ''; - }; - } - ); -} diff --git a/modules/programs/piper.nix b/modules/programs/piper.nix deleted file mode 100644 index 24beced..0000000 --- a/modules/programs/piper.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.piper = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the piper program and its daemon"; - }; - }; - config = lib.mkIf config.mods.piper.enable ( - lib.optionalAttrs (options ? services.ratbagd) {services.ratbagd.enable = true;} - // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [piper];} - ); -} diff --git a/modules/programs/plymouth.nix b/modules/programs/plymouth.nix deleted file mode 100644 index af9c615..0000000 --- a/modules/programs/plymouth.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.plymouth = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables the plymouth"; - }; - }; - config = lib.mkIf config.mods.plymouth.enable ( - lib.optionalAttrs (options ? boot.plymouth) {boot.plymouth.enable = true;} - ); -} diff --git a/modules/programs/printing.nix b/modules/programs/printing.nix deleted file mode 100644 index 98bbe4f..0000000 --- a/modules/programs/printing.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.printing = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables the piper program and its daemon"; - }; - }; - config = lib.mkIf config.mods.printing.enable ( - lib.optionalAttrs (options ? services.printing) { - # Enable CUPS to print documents. - environment.systemPackages = with pkgs; [ - simple-scan - ]; - hardware.sane.enable = true; - services = { - printing = { - enable = true; - browsing = true; - drivers = [pkgs.hplip]; - startWhenNeeded = true; # optional - }; - avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - }; - } - ); -} diff --git a/modules/programs/scripts.nix b/modules/programs/scripts.nix deleted file mode 100644 index 98eb26b..0000000 --- a/modules/programs/scripts.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: { - options.mods.scripts = { - changeBrightness = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables the change-brightness script"; - }; - audioControl = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables the audioControl script"; - }; - scripts = lib.mkOption { - default = []; - example = []; - description = "More scripts to be passed. (check existing ones for types and examples)"; - }; - }; - config = lib.optionalAttrs (options ? home.packages) { - home.packages = - [ - (lib.mkIf config.mods.scripts.changeBrightness ( - pkgs.writeShellScriptBin "changeBrightness" '' - brightnessctl set "$1" - CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') - notify-send -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ''${CURRENT}%" - '' - )) - (lib.mkIf config.mods.scripts.audioControl ( - pkgs.writeShellScriptBin "audioControl" '' - ncspot() { - NUM=$(pactl list clients short | rg "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') - CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') - pactl set-sink-input-volume "$CHANGE" "$1" - VOLUME=$(pactl list sink-inputs | rg "$NUM" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') - notify-send -a "ncspot" -r 990 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Spotify Volume: ''${VOLUME}%" - } - - firefox() { - STRING=$(pactl list clients short | rg "firefox" | awk -F 'PipeWire' ' { print $1 "," } ' | tr -d ' \t\n') - # NUMS=',' read -r -a array <<< "$STRING" - readarray -td, NUMS <<<"$STRING" - declare -p NUMS - for index in "''${!NUMS[@]}"; do #"''${!array[@]}" - NUM=$(echo "''${NUMS[index]}" | tr -d ' \t\n') - CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') - pactl set-sink-input-volume "$CHANGE" "$1" - done - VOLUME=$(pactl list sink-inputs | rg "''${NUMS[0]}" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') - notify-send -a "Firefox" -r 991 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Firefox Volume: ''${VOLUME}%" - } - - internal() { - SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') - if [ "$SPEAKER" != "" ]; then - pactl set-default-sink "$SPEAKER" - pactl set-sink-mute "$SPEAKER" false - DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') - notify-send "changed audio to "$DEVICE" " - else - notify-send "failed, not available!" - fi - } - - set_volume_sink() { - pactl set-sink-volume @DEFAULT_SINK@ "$1" - CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') - notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Output Volume: ''${CURRENT}%" - } - - set_volume_source() { - pactl set-source-volume @DEFAULT_SOURCE@ "$1" - CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') - notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Input Volume: ''${CURRENT}%" - } - - bluetooth() { - SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') - if [ "$SPEAKER" != "" ]; then - pactl set-default-sink "$SPEAKER" - pactl set-sink-mute "$SPEAKER" false - DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') - notify-send "changed audio to "$DEVICE" " - else - notify-send "failed, not available!" - fi - } - - mute() { - pactl set-sink-mute @DEFAULT_SINK@ toggle - MUTE=$(pactl get-sink-mute @DEFAULT_SINK@) - notify-send -a "Audio" -r 994 -u low -i audio-volume-high "Audio: $MUTE" - } - - if [ "$1" == "internal" ]; then - internal - elif [ "$1" == "bluetooth" ]; then - bluetooth - elif [ "$1" == "firefox" ]; then - firefox "$2" - elif [ "$1" == "ncspot" ]; then - ncspot "$2" - elif [ "$1" == "mute" ]; then - mute - elif [ "$1" == "sink" ]; then - set_volume_sink "$2" - elif [ "$1" == "source" ]; then - set_volume_source "$2" - fi - '' - )) - ] - ++ config.mods.scripts.scripts; - }; -} diff --git a/modules/programs/sddm.nix b/modules/programs/sddm.nix deleted file mode 100644 index 57328d4..0000000 --- a/modules/programs/sddm.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - lib, - options, - config, - ... -}: { - options.mods.sddm = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables the sddm displayManager"; - }; - useDefaultOptions = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default options provided by module. If disabled, will only apply extraOptions."; - }; - extraOptions = lib.mkOption { - default = {}; - example = { - wayland.enable = false; - }; - type = with lib.types; attrsOf anything; - description = "Extra options to be applied to the sddm config"; - }; - }; - - config = lib.mkIf config.mods.sddm.enable ( - lib.optionalAttrs (options ? services.displayManager.sddm) ( - { - services.displayManager.sddm.enable = true; - } - // lib.mkIf config.mods.sddm.useDefaultOptions { - services.displayManager.sddm.wayland.enable = true; - } - // { - services.displayManager.sddm = config.mods.sddm.extraOptions; - } - ) - ); -} diff --git a/modules/programs/sops.nix b/modules/programs/sops.nix deleted file mode 100644 index 5897eaa..0000000 --- a/modules/programs/sops.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - lib, - pkgs, - config, - options, - root, - ... -}: { - options.mods.sops = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enable sops secrets"; - }; - secrets = lib.mkOption { - default = {}; - example = { - hub = {}; - lab = {}; - ${config.conf.username} = {}; - nextcloud = {}; - access = {}; - }; - type = with lib.types; attrsOf anything; - description = "secrets for sops"; - }; - sopsPath = lib.mkOption { - default = root + /secrets/secrets.yaml; - example = "/your/path"; - type = with lib.types; - oneOf [ - str - path - ]; - description = "sops secrets path"; - }; - validateSopsFile = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to validate the sops file -> set this to false when using full paths"; - }; - }; - config = lib.mkIf config.mods.sops.enable ( - lib.optionalAttrs (options ? home.packages) { - home.packages = with pkgs; [sops]; - sops = { - gnupg = { - home = "~/.gnupg"; - sshKeyPaths = []; - }; - defaultSopsFile = config.mods.sops.sopsPath; - validateSopsFiles = config.mods.sops.validateSopsFile; - secrets = config.mods.sops.secrets; - }; - - systemd.user.services.mbsync.Unit.After = ["sops-nix.service"]; - } - ); -} diff --git a/modules/programs/starship.nix b/modules/programs/starship.nix deleted file mode 100644 index de86504..0000000 --- a/modules/programs/starship.nix +++ /dev/null @@ -1,175 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - pkgs, - inputs, - ... -}: { - options.mods = { - starship = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables starship prompt - ''; - }; - useDefaultPrompt = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables preconfigured prompt - ''; - }; - customPrompt = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = '' - Custom configuration for prompt. - Will be merged with preconfigured prompt if that is used. - ''; - }; - }; - }; - - # environment.systemPackages needed in order to configure systemwide - config = lib.mkIf config.mods.starship.enable ( - lib.optionalAttrs (options ? environment.systemPackages) { - programs.starship = let - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - code_format = "[](bg:prev_bg fg:#5256c3)[ $symbol ($version)](bg:#5256c3)"; - in { - enable = true; - interactiveOnly = mkDashDefault true; - presets = lib.mkIf config.mods.starship.useDefaultPrompt ["pastel-powerline"]; - settings = - lib.mkIf config.mods.starship.useDefaultPrompt { - # derived from https://starship.rs/presets/pastel-powerline - format = "$username$directory$git_branch$git_status$git_metrics[ ](bg:none fg:prev_bg)"; - right_format = "$c$elixir$elm$golang$gradle$haskell$java$julia$nodejs$nim$rust$scala$python$ocaml$opa$perl$zig$dart$dotnet$nix_shell$shell$solidity[](bg:prev_bg fg:#3465A4)$time$os"; - username = { - show_always = false; - style_user = "bg:#5277C3 fg:#${scheme.base05}"; - style_root = "bg:#5277C3 fg:#${scheme.base05}"; - format = "[ $user ]($style)[](bg:#3465A4 fg:#5277C3)"; - disabled = false; - }; - os = { - symbols = { - NixOS = "  "; - }; - style = "bg:#3465A4 fg:#${scheme.base05}"; - disabled = false; - }; - directory = { - style = "bg:#3465A4 fg:#${scheme.base05}"; - format = "[ $path ]($style)"; - truncation_length = 3; - truncation_symbol = "…/"; - }; - git_branch = { - always_show_remote = true; - symbol = ""; - style = "bg:#5256c3 fg:#${scheme.base05}"; - format = "[ ](bg:#5256c3 fg:prev_bg)[$symbol ($remote_name )$branch ]($style)"; - }; - git_status = { - staged = "+\${count} (fg:#C4A000)"; - ahead = "⇡\${count} (fg:#C4A000)"; - diverged = "⇕⇡\${count} (fg:#C4A000)"; - behind = "⇣\${count} (fg:#C4A000)"; - stashed = " "; - untracked = "?\${count} (fg:#C4A000)"; - modified = "!\${count} (fg:#C4A000)"; - deleted = "✘\${count} (fg:#C4A000)"; - conflicted = "=\${count} (fg:#C4A000)"; - renamed = "»\${count} (fg:#C4A000)"; - style = "bg:#5256c3 fg:fg:#C4A000"; - format = "[$all_status$ahead_behind]($style)"; - }; - git_metrics = { - disabled = false; - format = "([| ](bg:#5256c3)[+$added]($added_style bg:#5256c3)[ -$deleted]($deleted_style bg:#5256c3))"; - }; - c = { - format = code_format; - }; - elixir = { - format = code_format; - }; - elm = { - format = code_format; - }; - golang = { - format = code_format; - }; - gradle = { - format = code_format; - }; - haskell = { - format = code_format; - }; - java = { - format = code_format; - }; - julia = { - format = code_format; - }; - nodejs = { - format = code_format; - }; - nim = { - format = code_format; - }; - nix_shell = { - symbol = ""; - format = code_format; - }; - rust = { - format = code_format; - }; - scala = { - format = code_format; - }; - typst = { - format = code_format; - }; - python = { - format = code_format; - }; - ocaml = { - format = code_format; - }; - opa = { - format = code_format; - }; - perl = { - format = code_format; - }; - zig = { - format = code_format; - }; - dart = { - format = code_format; - }; - dotnet = { - format = code_format; - }; - time = { - disabled = false; - time_format = "%R"; # Hour:Minute Format - style = "bg:#3465A4 fg:#${scheme.base05}"; - format = "[ $time ]($style)"; - }; - } - // config.mods.starship.customPrompt; - }; - } - ); -} diff --git a/modules/programs/streamcontroller.nix b/modules/programs/streamcontroller.nix deleted file mode 100644 index 544367f..0000000 --- a/modules/programs/streamcontroller.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods = { - streamcontroller = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = '' - Enables streamcontroller - ''; - }; - configFilePath = lib.mkOption { - default = null; - type = with lib.types; nullOr path; - description = '' - Path to the config json for the streamcontroller. - -> ./something.json - ''; - }; - }; - }; - - config = lib.mkIf config.mods.streamcontroller.enable ( - lib.optionalAttrs (options ? environment.systemPackages) { - programs.streamcontroller.enable = true; - } - // (lib.optionalAttrs (options ? home.file) { - home.file.".var/app/com.core447.StreamController/data/pages/defaultpage.json" = - lib.mkIf - (!isNull config.mods.streamcontroller.configFilePath) - {source = config.mods.streamcontroller.configFilePath;}; - }) - ); -} diff --git a/modules/programs/stylix.nix b/modules/programs/stylix.nix deleted file mode 100644 index dd11e8c..0000000 --- a/modules/programs/stylix.nix +++ /dev/null @@ -1,131 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - unstable, - inputs, - pkgs, - ... -}: let - svg = ../../assets/rainbow.svg; - sd = lib.getExe pkgs.sd; - base16 = pkgs.callPackage inputs.base16.lib {}; - mkWallpaper = schemeStr: let - scheme = base16.mkSchemeAttrs schemeStr; - in - pkgs.runCommand "rainbow.png" {} '' - cat ${svg} \ - | ${sd} '#f9e2af' '#${scheme.base0A}' \ - | ${sd} '#fab387' '#${scheme.base09}' \ - | ${sd} '#f38ba8' '#${scheme.base08}' \ - | ${sd} '#89b4fa' '#${scheme.base0D}' \ - | ${sd} '#cba6f7' '#${scheme.base0E}' \ - | ${sd} '#a6e3a1' '#${scheme.base0B}' \ - | ${sd} '#1e1e2e' '#${scheme.base00}' \ - | ${lib.getExe pkgs.imagemagick} svg:- png:$out - ''; -in { - options.mods.stylix = { - colorscheme = lib.mkOption { - default = "catppuccin-mocha"; - example = { - # custom tokyo night - base00 = "1A1B26"; - base01 = "191a25"; - base02 = "2F3549"; - base03 = "444B6A"; - base04 = "787C99"; - base05 = "A9B1D6"; - base06 = "CBCCD1"; - base07 = "D5D6DB"; - base08 = "C0CAF5"; - base09 = "A9B1D7"; - base0A = "0DB9D7"; - base0B = "9ECE6A"; - base0C = "B4F9F8"; - base0D = "366fea"; - base0E = "BB9AF7"; - base0F = "F7768E"; - }; - type = with lib.types; - oneOf [ - str - attrs - path - ]; - description = '' - Base16 colorscheme. - Can be an attribute set with base00 to base0F, - a string that leads to a yaml file in base16-schemes path, - or a path to a custom yaml file. - - Also supports the oxiced theme in an oxiced attrset. - ''; - }; - cursor = lib.mkOption { - default = { - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Classic"; - size = 24; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "Xcursor config"; - }; - fonts = lib.mkOption { - default = { - serif = { - package = unstable.adwaita-fonts; - name = "Adwaita Sans"; - }; - - sansSerif = { - package = unstable.adwaita-fonts; - name = "Adwaita Sans"; - }; - - monospace = { - package = unstable.nerd-fonts.jetbrains-mono; - name = "JetBrainsMono Nerd Font Mono"; - }; - - emoji = { - package = pkgs.noto-fonts-color-emoji; - name = "Noto Color Emoji"; - }; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "font config"; - }; - }; - config = let - scheme = - if builtins.isAttrs config.mods.stylix.colorscheme - then config.mods.stylix.colorscheme - else "${pkgs.base16-schemes}/share/themes/${config.mods.stylix.colorscheme}.yaml"; - in - (lib.optionalAttrs (options ? stylix) { - stylix = { - enable = true; - image = mkDashDefault (mkWallpaper scheme); - polarity = mkDashDefault "dark"; - targets = { - nixvim.enable = mkDashDefault false; - fish.enable = mkDashDefault false; - }; - fonts = config.mods.stylix.fonts; - cursor = config.mods.stylix.cursor; - base16Scheme = scheme; - }; - }) - // lib.optionalAttrs (options ? environment.systemPackages) { - environment.systemPackages = [ - config.mods.stylix.fonts.serif.package - config.mods.stylix.fonts.sansSerif.package - config.mods.stylix.fonts.monospace.package - config.mods.stylix.fonts.emoji.package - ]; - }; -} diff --git a/modules/programs/superfreq.nix b/modules/programs/superfreq.nix deleted file mode 100644 index f031e2f..0000000 --- a/modules/programs/superfreq.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - options, - config, - ... -}: { - options.mods.superfreq = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = ''Enables superfreq''; - }; - settings = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = ''Superfreq config''; - }; - }; - - config = lib.optionalAttrs (options ? services.superfreq) { - services.superfreq = { - enable = config.mods.superfreq.enable; - settings = config.mods.superfreq.settings; - }; - }; -} diff --git a/modules/programs/supersonic.nix b/modules/programs/supersonic.nix deleted file mode 100644 index 3b732df..0000000 --- a/modules/programs/supersonic.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ - lib, - config, - options, - pkgs, - inputs, - ... -}: let - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; -in { - options.mods.supersonic = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables and configures supersonic"; - }; - variant = lib.mkOption { - default = "wayland"; - example = "x11"; - type = lib.types.enum [ - "wayland" - "x11" - ]; - description = "The variant of supersonic"; - }; - }; - config = lib.mkIf config.mods.supersonic.enable ( - lib.optionalAttrs (options ? home.packages) { - home.packages = with pkgs; [ - ( - if config.mods.supersonic.variant == "wayland" - then supersonic-wayland - else supersonic - ) - ]; - xdg.configFile."supersonic/themes/custom.toml".source = - (pkgs.formats.toml {}).generate "customTheme" - { - SupersonicTheme = { - Name = "Custom"; - Version = "0.2"; - SupportsDark = true; - SupportsLight = true; - }; - - DarkColors = { - PageBackground = "#${scheme.base00}"; - ListHeader = "#${scheme.base02}"; - PageHeader = "#${scheme.base02}"; - Background = "#${scheme.base01}"; - ScrollBar = "#${scheme.base02}"; - Button = "#${scheme.base02}"; - Foreground = "#${scheme.base04}"; - InputBackground = "#${scheme.base02}"; - }; - - # just define the same as base 16 doesn't define if it is light or not - LightColors = { - PageBackground = "#${scheme.base00}"; - ListHeader = "#${scheme.base02}"; - PageHeader = "#${scheme.base02}"; - Background = "#${scheme.base01}"; - ScrollBar = "#${scheme.base02}"; - Button = "#${scheme.base02}"; - Foreground = "#${scheme.base04}"; - InputBackground = "#${scheme.base02}"; - }; - }; - } - ); -} diff --git a/modules/programs/sway.nix b/modules/programs/sway.nix deleted file mode 100644 index eef6025..0000000 --- a/modules/programs/sway.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods.sway = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables sway"; - }; - config = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "sway config"; - }; - }; - config = lib.mkIf config.mods.sway.enable ( - lib.optionalAttrs (options ? wayland.windowManger.sway) { - wayland.windowManager.sway = - { - enable = true; - } - // config.mods.sway.config; - } - ); -} diff --git a/modules/programs/teams.nix b/modules/programs/teams.nix deleted file mode 100644 index e9d843a..0000000 --- a/modules/programs/teams.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ - lib, - config, - options, - pkgs, - ... -}: let - callPackage = lib.callPackageWith pkgs; -in { - options.mods.teams = { - enable = lib.mkOption { - default = false; - example = true; - type = lib.types.bool; - description = "Enables teams via a chromium pwa (for the poor souls that have to use this for work)"; - }; - loopback = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables loopback for screensharing -> teams sucks :)"; - }; - }; - config = lib.mkIf config.mods.teams.enable ( - lib.optionalAttrs (options ? home.packages) { - home.packages = [(callPackage ../../override/teams.nix {inherit (pkgs) chromium;})]; - } - // (lib.optionalAttrs (options ? boot.kernelModules) { - boot = { - extraModulePackages = with config.boot.kernelPackages; [v4l2loopback]; - kernelModules = ["v4l2loopback"]; - extraModprobeConfig = '' - options v4l2loopback exclusive_caps=1 card_label="Virtual Camera" - ''; - }; - }) - ); -} diff --git a/modules/programs/virtmanager.nix b/modules/programs/virtmanager.nix deleted file mode 100644 index de38848..0000000 --- a/modules/programs/virtmanager.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - mkDashDefault, - lib, - config, - options, - pkgs, - ... -}: let - module = - if config.conf.cpu == "intel" - then "kvm-intel" - else if config.conf.cpu == "amd" - then "kvm-amd" - else ""; -in { - options.mods = { - virtmanager.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - - - Enables virt-manager kvm. - ''; - }; - }; - - config = - lib.optionalAttrs (options ? virtualisation.libvirtd) { - boot.kernelModules = [ - module - ]; - programs.virt-manager.enable = true; - environment.systemPackages = with pkgs; [ - spice - spice-gtk - spice-protocol - virt-viewer - ]; - virtualisation = { - libvirtd = { - enable = true; - qemu = { - package = mkDashDefault pkgs.qemu_kvm; - swtpm.enable = mkDashDefault true; - }; - }; - spiceUSBRedirection.enable = mkDashDefault true; - }; - services.spice-vdagentd.enable = mkDashDefault true; - - users.users.${config.conf.username}.extraGroups = [ - "libvirtd" - "kvm" - "qemu-libvirtd" - ]; - } - // lib.optionalAttrs (options ? dconf.settings) { - dconf.settings = { - "org/virt-manager/virt-manager/connections" = { - autoconnect = ["qemu:///system"]; - uris = ["qemu:///system"]; - }; - }; - }; -} diff --git a/modules/programs/wm.nix b/modules/programs/wm.nix deleted file mode 100644 index 0f794d3..0000000 --- a/modules/programs/wm.nix +++ /dev/null @@ -1,403 +0,0 @@ -{lib, ...}: let - wmWorkspace = with lib.types; { - options = { - name = lib.mkOption { - default = ""; - example = "1"; - type = str; - description = "Name of the workspace"; - }; - default = lib.mkOption { - default = false; - example = true; - type = bool; - description = "Whether the workspace is the default workspace. (Currently doesn't do anything on niri)"; - }; - monitor = lib.mkOption { - default = ""; - example = "DP-1"; - type = str; - description = "Name of the monitor to bind the workspace to"; - }; - }; - }; - - wmOptions = with lib.types; { - options = { - name = lib.mkOption { - default = "DP-1"; - example = "DP-1"; - type = str; - description = "Name of the monitor"; - }; - resolutionX = lib.mkOption { - default = 1920; - example = 2560; - type = number; - description = "ResolutionX of the monitor"; - }; - resolutionY = lib.mkOption { - default = 1080; - example = 1440; - type = number; - description = "ResolutionY of the monitor"; - }; - refreshrate = lib.mkOption { - default = 60; - example = 144; - type = number; - description = "Refreshrate of the monitor"; - }; - positionX = lib.mkOption { - default = 0; - example = 1920; - type = number; - description = "PositionX of the monitor"; - }; - positionY = lib.mkOption { - default = 0; - example = 1080; - type = number; - description = "PositionY of the monitor"; - }; - scale = lib.mkOption { - default = 1; - example = 2; - type = number; - description = "Scale of the monitor"; - }; - transform = lib.mkOption { - default = "0"; - example = "90"; - type = enum ["0" "90" "180" "270" "360"]; - description = "Transform of the monitor"; - }; - vrr = lib.mkOption { - default = false; - example = true; - type = bool; - description = "VRR status of the monitor"; - }; - }; - }; - - modKeys = lib.types.enum ["Mod" "Super" "Alt" "Shift" "Ctrl"]; - - customCommand = with lib.types; { - options = { - niri = lib.mkOption { - default = null; - example = "kitty"; - type = either null str; - description = "Command to use in niri"; - }; - hyprland = lib.mkOption { - default = null; - example = "kitty"; - type = either null str; - description = "Command to use in hyprland"; - }; - }; - }; - - envOptions = with lib.types; { - options = { - all = lib.mkOption { - default = {}; - example = {}; - type = attrsOf str; - description = "General Env"; - }; - niri = lib.mkOption { - default = {}; - example = {}; - type = attrsOf str; - description = "Niri Env"; - }; - hyprland = lib.mkOption { - default = {}; - example = {}; - type = attrsOf str; - description = "Hyprland Env"; - }; - }; - }; - - startupOptions = with lib.types; { - options = { - all = lib.mkOption { - default = []; - example = []; - type = listOf str; - description = "General Startup commands"; - }; - niri = lib.mkOption { - default = []; - example = []; - type = listOf str; - description = "Niri Startup commands"; - }; - hyprland = lib.mkOption { - default = []; - example = []; - type = listOf str; - description = "Hyprland Startup commands"; - }; - }; - }; - - windowRuleOptions = with lib.types; { - options = { - niri = lib.mkOption { - default = []; - example = []; - type = listOf lines; - description = "Niri window rules"; - }; - hyprland = lib.mkOption { - default = []; - example = []; - type = listOf str; - description = "Hyprland window rules"; - }; - }; - }; - - bindOptions = with lib.types; { - options = { - modKeys = lib.mkOption { - default = []; - example = ["Mod"]; - type = listOf modKeys; - description = "List of modifier keys"; - }; - key = lib.mkOption { - default = ""; - example = "Q"; - type = str; - description = "Key to bind"; - }; - command = lib.mkOption { - default = ""; - example = "killActive"; - type = either (submodule customCommand) (enum [ - "spawn" - "spawn-sh" - "quit" - "killActive" - "moveFocusUp" - "moveFocusRight" - "moveFocusDown" - "moveFocusLeft" - "moveWindowUp" - "moveWindowRight" - "moveWindowDown" - "moveWindowLeft" - "focusWorkspace" - "moveToWorkspace" - "toggleFloating" - "toggleFullscreen" - ]); - description = "Command to execute"; - }; - args = lib.mkOption { - default = []; - example = []; - type = listOf str; - description = "Additional arguments for the command"; - }; - meta = lib.mkOption { - default = {}; - example = {}; - type = submodule { - options = { - niri = lib.mkOption { - default = {}; - type = submodule { - options = { - desc = lib.mkOption { - default = ""; - type = str; - description = "Description for Hotkey overview"; - }; - repeat = lib.mkOption { - type = bool; - default = true; - description = "Whether to repeat the keybind on hold"; - }; - allowInhibit = lib.mkOption { - type = bool; - default = true; - description = "Whether to allow inhibiting"; - }; - allowWhileLocked = lib.mkOption { - type = bool; - default = false; - description = "Whether to allow while locked"; - }; - cooldown = lib.mkOption { - type = number; - default = 0; - description = "Cooldown on bind"; - }; - }; - }; - description = "Niri meta for keybinds"; - }; - hyprland = lib.mkOption { - default = {}; - type = submodule { - options = { - repeat = lib.mkOption { - type = bool; - default = true; - description = "Whether to repeat the keybind on hold"; - }; - }; - }; - description = "Niri meta for keybinds"; - }; - }; - }; - description = "Custom metadata per bind. Note, only supported environments are taken into account."; - }; - }; - }; -in { - options.mods.wm = { - modKey = lib.mkOption { - default = "Super"; - example = "Alt"; - type = modKeys; - description = "Mod key"; - }; - - env = lib.mkOption { - default = {}; - example = { - all = { - EDITOR = "Neovim"; - }; - niri = { - EDITOR = "Emacs"; - }; - }; - type = with lib.types; either (submodule envOptions) (attrsOf str); - description = "Environment configuration"; - }; - - useDefaultEnv = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use default env variables"; - }; - - startup = lib.mkOption { - default = []; - example = { - all = ["oxinoti"]; - niri = ["someniricommand"]; - hyprland = ["somehyprlandcommand"]; - }; - type = with lib.types; either (submodule startupOptions) (listOf str); - description = "Start commands"; - }; - - useDefaultStartup = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use default autostart commands"; - }; - - useDefaultWindowRules = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use default window rules"; - }; - - windowRules = lib.mkOption { - default = {}; - example = { - niri = [ - '' - match app-id=r#"^org\.keepassxc\.KeePassXC$"# - match app-id=r#"^org\.gnome\.World\.Secrets$"# - - block-out-from "screen-capture" - '' - '' - match app-id=r#"^steam$"# - open-on-workspace "0" - '' - ]; - }; - type = lib.types.submodule windowRuleOptions; - description = "Window rules"; - }; - - workspaces = lib.mkOption { - default = []; - example = [ - { - name = "chat"; - monitor = "DP-1"; - } - ]; - type = - lib.types.listOf (lib.types.submodule wmWorkspace); - description = "Workspace configuration"; - }; - - monitors = lib.mkOption { - default = []; - example = [ - { - name = "DP-1"; - resolutionX = 1920; - resolutionY = 1080; - refreshrate = 144; - positionX = 0; - positionY = 0; - scale = 1; - transform = "0"; - vrr = false; - } - ]; - type = - lib.types.listOf (lib.types.submodule wmOptions); - description = "Monitor configuration"; - }; - - useDefaultBinds = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Whether to use default keybinds"; - }; - - binds = lib.mkOption { - default = []; - example = [ - { - modKeys = ["Mod"]; - key = "Q"; - command = "killActive"; - args = []; - meta = { - niri = { - desc = "Kill the active window"; - repeat = false; - }; - hyprland = {}; - }; - } - ]; - type = - lib.types.listOf (lib.types.submodule bindOptions); - description = "Bind configuration"; - }; - }; -} diff --git a/modules/programs/xkb.nix b/modules/programs/xkb.nix deleted file mode 100644 index ebb1bda..0000000 --- a/modules/programs/xkb.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - lib, - options, - config, - ... -}: { - options.mods.xkb = { - layout = lib.mkOption { - default = "enIntUmlaut"; - example = "us"; - type = lib.types.str; - description = "Your layout"; - }; - variant = lib.mkOption { - default = ""; - example = ""; - type = lib.types.str; - description = "Your variant"; - }; - }; - config = lib.optionalAttrs (options ? services.xserver) { - # Configure keymap in X11 - services.xserver = { - xkb.layout = "${config.mods.xkb.layout}"; - xkb.variant = "${config.mods.xkb.variant}"; - }; - }; -} diff --git a/modules/programs/xone.nix b/modules/programs/xone.nix deleted file mode 100644 index 84ecd48..0000000 --- a/modules/programs/xone.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - lib, - config, - options, - ... -}: { - options.mods = { - xone.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables the xone driver for xbox controllers. - ''; - }; - }; - - config = lib.optionalAttrs (options ? hardware) {hardware.xone.enable = config.mods.xone.enable;}; -} diff --git a/modules/programs/yazi/default.nix b/modules/programs/yazi/default.nix deleted file mode 100644 index d890a81..0000000 --- a/modules/programs/yazi/default.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ - pkgs, - lib, - config, - options, - ... -}: { - options.mods.yazi = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Enables yazi"; - }; - useDefaultConfig = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default yazi config (if disabled only additionalConfig is used)"; - }; - additionalConfig = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "Additional config for yazi"; - }; - useDefaultKeymap = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = "Use default yazi keymap (if disabled only additionalKeymap is used)"; - }; - additionalKeymap = lib.mkOption { - default = {}; - example = {}; - type = with lib.types; attrsOf anything; - description = "Additional keymap for yazi"; - }; - plugins = lib.mkOption { - default = { - inherit (pkgs.yaziPlugins) piper diff gitui wl-clipboard; - }; - example = {}; - type = with lib.types; attrsOf anything; - description = "Additional keymap for yazi"; - }; - }; - config = let - conf = import ./yazi.nix; - in - lib.optionalAttrs (options ? home.packages) ( - lib.mkIf config.mods.yazi.enable { - home.packages = [pkgs.glow]; - programs.yazi = { - inherit (conf) enable; - settings = conf.settings // config.mods.yazi.additionalKeymap; - keymap = conf.keymap // config.mods.yazi.additionalConfig; - inherit (config.mods.yazi) plugins; - }; - } - ); -} diff --git a/modules/programs/yazi/yazi.nix b/modules/programs/yazi/yazi.nix deleted file mode 100644 index 22e3169..0000000 --- a/modules/programs/yazi/yazi.nix +++ /dev/null @@ -1,1016 +0,0 @@ -{ - # don't ask.... - enable = true; - settings = { - log = { - enabled = false; - }; - opener = { - folder = [ - { - run = ''open - R "$@"''; - orphan = true; - display_name = "Reveal in Finder"; - } - { - run = ''$EDITOR "$@"''; - orphan = true; - } - ]; - archive = [ - { - run = ''unar "$1"''; - display_name = "Extract here"; - } - ]; - text = [ - { - run = ''$EDITOR "$@"''; - orphan = true; - } - ]; - image = [ - { - run = ''eog "$@"''; - orphan = true; - display_name = "Open"; - } - { - run = ''exiftool "$1"; echo "Press enter to exit"; read''; - block = true; - display_name = "Show EXIF"; - } - ]; - pdf = [ - { - run = ''zathura "$@"''; - orphan = true; - display_name = "Open"; - } - ]; - video = [ - { - run = ''mpv "$@"''; - orphan = true; - } - { - run = ''mediainfo "$1"; echo "Press enter to exit"; read''; - block = true; - display_name = "Show media info"; - } - ]; - audio = [ - { - run = ''xdg-open "$@"''; - orphan = true; - } - { - run = ''mediainfo "$1"; echo "Press enter to exit"; read''; - block = true; - display_name = "Show media info"; - } - ]; - fallback = [ - { - run = ''xdg-open "$@"''; - orphan = true; - display_name = "Open"; - } - { - run = ''xdg-open - R "$@"''; - orphan = true; - display_name = "Reveal in Finder"; - } - ]; - }; - plugin = { - prepend_previewers = [ - { - name = "*.tar"; - run = ''piper --format=url -- tar tf "$1"''; - } - { - name = "*.md"; - run = ''piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"''; - } - { - mime = "text/csv"; - run = ''piper -- bat -p --color=always "$1"''; - } - ]; - }; - }; - keymap = { - mgr.keymap = [ - { - on = ""; - run = "backspace"; - desc = "Delete the character before the cursor"; - } - { - on = [""]; - run = "escape"; - desc = "Exit visual mode clear selected or cancel search"; - } - { - on = ["q"]; - run = "quit"; - desc = "Exit the process"; - } - { - on = ["Q"]; - run = "quit --no-cwd-file"; - desc = "Exit the process without writing cwd-file"; - } - { - on = [""]; - run = "close"; - desc = "Close the current tab or quit if it is last tab"; - } - { - on = [""]; - run = "suspend"; - desc = "Suspend the process"; - } - - # Navigation - { - on = ["l"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["k"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["L"]; - run = "arrow -5"; - desc = "Move cursor up 5 lines"; - } - { - on = ["K"]; - run = "arrow 5"; - desc = "Move cursor down 5 lines"; - } - - { - on = [""]; - run = "arrow -50%"; - desc = "Move cursor up half page"; - } - { - on = [""]; - run = "arrow 50%"; - desc = "Move cursor down half page"; - } - { - on = [""]; - run = "arrow -100%"; - desc = "Move cursor up one page"; - } - { - on = [""]; - run = "arrow 100%"; - desc = "Move cursor down one page"; - } - - { - on = ["j"]; - run = "leave"; - desc = "Go back to the parent directory"; - } - { - on = [";"]; - run = "enter"; - desc = "Enter the child directory"; - } - - { - on = ["J"]; - run = "back"; - desc = "Go back to the previous directory"; - } - { - on = ["P"]; - run = "forward"; - desc = "Go forward to the next directory"; - } - - { - on = [""]; - run = "peek -5"; - desc = "Peek up 5 units in the preview"; - } - { - on = [""]; - run = "peek 5"; - desc = "Peek down 5 units in the preview"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - { - on = [""]; - run = "leave"; - desc = "Go back to the parent directory"; - } - { - on = [""]; - run = "enter"; - desc = "Enter the child directory"; - } - - { - on = [ - "g" - "g" - ]; - run = "arrow -99999999"; - desc = "Move cursor to the top"; - } - { - on = ["G"]; - run = "arrow 99999999"; - desc = "Move cursor to the bottom"; - } - - # Selection - { - on = ["v"]; - run = "visual_mode"; - desc = "Enter visual mode (selection mode)"; - } - { - on = ["V"]; - run = "visual_mode --unset"; - desc = "Enter visual mode (unset mode)"; - } - { - on = [""]; - run = "select_all --state=true"; - desc = "Select all files"; - } - { - on = [""]; - run = "select_all --state=none"; - desc = "Inverse selection of all files"; - } - - # Operation - { - on = ["o"]; - run = "open"; - desc = "Open the selected files"; - } - { - on = ["O"]; - run = "open --interactive"; - desc = "Open the selected files interactively"; - } - { - on = [""]; - run = "open"; - desc = "Open the selected files"; - } - { - on = [""]; - run = "open --interactive"; - desc = "Open the selected files interactively"; - } # It's cool if you're using a terminal that supports CSI u - { - on = ["y"]; - run = "yank"; - desc = "Copy the selected files"; - } - { - on = ["x"]; - run = "yank --cut"; - desc = "Cut the selected files"; - } - { - on = ["p"]; - run = "paste"; - desc = "Paste the files"; - } - { - on = ["P"]; - run = "paste --force"; - desc = "Paste the files (overwrite if the destination exists)"; - } - { - on = ["-"]; - run = "link"; - desc = "Symlink the absolute path of files"; - } - { - on = ["_"]; - run = "link --relative"; - desc = "Symlink the relative path of files"; - } - { - on = ["d"]; - run = "remove"; - desc = "Move the files to the trash"; - } - { - on = ["D"]; - run = "remove --permanently"; - desc = "Permanently delete the files"; - } - { - on = ["a"]; - run = "create"; - desc = "Create a file or directory (ends with / for directories)"; - } - { - on = ["r"]; - run = "rename"; - desc = "Rename a file or directory"; - } - { - on = [";"]; - run = "shell"; - desc = "Run a shell command"; - } - { - on = [":"]; - run = "shell --block"; - desc = "Run a shell command (block the UI until the command finishes)"; - } - { - on = ["."]; - run = "hidden toggle"; - desc = "Toggle the visibility of hidden files"; - } - { - on = [ - "" - "f" - "g>" - ]; - run = "search fd"; - desc = "Search files by name using fd"; - } - { - on = [ - "" - "f" - "G>" - ]; - run = "search rg"; - desc = "Search files by content using ripgrep"; - } - { - on = [""]; - run = "search none"; - desc = "Cancel the ongoing search"; - } - { - on = ["Z"]; - run = "plugin zoxide"; - desc = "Jump to a directory using zoxide"; - } - { - on = ["z"]; - run = "plugin fzf"; - desc = "Jump to a directory or reveal a file using fzf"; - } - - # Copy - { - on = [ - "c" - "c" - ]; - run = "copy path"; - desc = "Copy the absolute path"; - } - { - on = [ - "c" - "d" - ]; - run = "copy dirname"; - desc = "Copy the path of the parent directory"; - } - { - on = [ - "c" - "f" - ]; - run = "copy filename"; - desc = "Copy the name of the file"; - } - { - on = [ - "c" - "n" - ]; - run = "copy name_without_ext"; - desc = "Copy the name of the file without the extension"; - } - - # Find - { - on = ["/"]; - run = "find --smart"; - } - { - on = ["?"]; - run = "find --previous --smart"; - } - { - on = ["n"]; - run = "find_arrow"; - } - { - on = ["N"]; - run = "find_arrow --previous"; - } - - # Sorting - { - on = [ - "," - "a" - ]; - run = "sort alphabetical --dir_first"; - desc = "Sort alphabetically"; - } - { - on = [ - "," - "A" - ]; - run = "sort alphabetical --reverse --dir_first"; - desc = "Sort alphabetically (reverse)"; - } - { - on = [ - "," - "c" - ]; - run = "sort created --dir_first"; - desc = "Sort by creation time"; - } - { - on = [ - "," - "C" - ]; - run = "sort created --reverse --dir_first"; - desc = "Sort by creation time (reverse)"; - } - { - on = [ - "," - "m" - ]; - run = "sort modified --dir_first"; - desc = "Sort by modified time"; - } - { - on = [ - "," - "M" - ]; - run = "sort modified --reverse --dir_first"; - desc = "Sort by modified time (reverse)"; - } - { - on = [ - "," - "n" - ]; - run = "sort natural --dir_first"; - desc = "Sort naturally"; - } - { - on = [ - "," - "N" - ]; - run = "sort natural --reverse --dir_first"; - desc = "Sort naturally (reverse)"; - } - { - on = [ - "," - "s" - ]; - run = "sort size --dir_first"; - desc = "Sort by size"; - } - { - on = [ - "," - "S" - ]; - run = "sort size --reverse --dir_first"; - desc = "Sort by size (reverse)"; - } - - # Tabs - { - on = ["t"]; - run = "tab_create --current"; - desc = "Create a new tab using the current path"; - } - - { - on = ["1"]; - run = "tab_switch 0"; - desc = "Switch to the first tab"; - } - { - on = ["2"]; - run = "tab_switch 1"; - desc = "Switch to the second tab"; - } - { - on = ["3"]; - run = "tab_switch 2"; - desc = "Switch to the third tab"; - } - { - on = ["4"]; - run = "tab_switch 3"; - desc = "Switch to the fourth tab"; - } - { - on = ["5"]; - run = "tab_switch 4"; - desc = "Switch to the fifth tab"; - } - { - on = ["6"]; - run = "tab_switch 5"; - desc = "Switch to the sixth tab"; - } - { - on = ["7"]; - run = "tab_switch 6"; - desc = "Switch to the seventh tab"; - } - { - on = ["8"]; - run = "tab_switch 7"; - desc = "Switch to the eighth tab"; - } - { - on = ["9"]; - run = "tab_switch 8"; - desc = "Switch to the ninth tab"; - } - - { - on = ["["]; - run = "tab_switch -1 --relative"; - desc = "Switch to the previous tab"; - } - { - on = ["]"]; - run = "tab_switch 1 --relative"; - desc = "Switch to the next tab"; - } - - { - on = ["{"]; - run = "tab_swap -1"; - desc = "Swap the current tab with the previous tab"; - } - { - on = ["}"]; - run = "tab_swap 1"; - desc = "Swap the current tab with the next tab"; - } - - # Tasks - { - on = ["w"]; - run = "tasks_show"; - desc = "Show the tasks manager"; - } - - # Goto - { - on = [ - "g" - "h" - ]; - run = "cd ~"; - desc = "Go to the home directory"; - } - { - on = [ - "g" - "c" - ]; - run = "cd ~/.config"; - desc = "Go to the config directory"; - } - { - on = [ - "g" - "d" - ]; - run = "cd ~/Downloads"; - desc = "Go to the downloads directory"; - } - { - on = [ - "g" - "t" - ]; - run = "cd /tmp"; - desc = "Go to the temporary directory"; - } - { - on = [ - "g" - "" - ]; - run = "cd --interactive"; - desc = "Go to a directory interactively"; - } - - # Help - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - tasks.keymap = [ - { - on = [""]; - run = "close"; - desc = "Hide the task manager"; - } - { - on = [""]; - run = "close"; - desc = "Hide the task manager"; - } - { - on = ["w"]; - run = "close"; - desc = "Hide the task manager"; - } - - { - on = ["k"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["j"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = [""]; - run = "inspect"; - desc = "Inspect the task"; - } - { - on = ["x"]; - run = "cancel"; - desc = "Cancel the task"; - } - - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - select.keymap = [ - { - on = [""]; - run = "close"; - desc = "Cancel selection"; - } - { - on = [""]; - run = "close"; - desc = "Cancel selection"; - } - { - on = [""]; - run = "close --submit"; - desc = "Submit the selection"; - } - - { - on = ["k"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["j"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["K"]; - run = "arrow -5"; - desc = "Move cursor up 5 lines"; - } - { - on = ["J"]; - run = "arrow 5"; - desc = "Move cursor down 5 lines"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - input.keymap = [ - { - on = ""; - run = "backspace"; - desc = "Delete the character before the cursor"; - } - { - on = [""]; - run = "close"; - desc = "Cancel input"; - } - { - on = [""]; - run = "close --submit"; - desc = "Submit the input"; - } - { - on = [""]; - run = "escape"; - desc = "Go back the normal mode or cancel input"; - } - - # Mode - { - on = ["i"]; - run = "insert"; - desc = "Enter insert mode"; - } - { - on = ["a"]; - run = "insert --append"; - desc = "Enter append mode"; - } - { - on = ["v"]; - run = "visual"; - desc = "Enter visual mode"; - } - { - on = ["V"]; - run = [ - "move -999" - "visual" - "move 999" - ]; - desc = "Enter visual mode and select all"; - } - - # Navigation - { - on = ["h"]; - run = "move -1"; - desc = "Move cursor left"; - } - { - on = ["l"]; - run = "move 1"; - desc = "Move cursor right"; - } - - { - on = ["0"]; - run = "move -999"; - desc = "Move to the BOL"; - } - { - on = ["$"]; - run = "move 999"; - desc = "Move to the EOL"; - } - { - on = ["I"]; - run = [ - "move -999" - "insert" - ]; - desc = "Move to the BOL and enter insert mode"; - } - { - on = ["A"]; - run = [ - "move 999" - "insert --append" - ]; - desc = "Move to the EOL and enter append mode"; - } - - { - on = [""]; - run = "move -1"; - desc = "Move cursor left"; - } - { - on = [""]; - run = "move 1"; - desc = "Move cursor right"; - } - - { - on = ["b"]; - run = "backward"; - desc = "Move to the beginning of the previous word"; - } - { - on = ["w"]; - run = "forward"; - desc = "Move to the beginning of the next word"; - } - { - on = ["e"]; - run = "forward --end-of-word"; - desc = "Move to the end of the next word"; - } - - # Deletion - { - on = ["d"]; - run = "delete --cut"; - desc = "Cut the selected characters"; - } - { - on = ["D"]; - run = [ - "delete --cut" - "move 999" - ]; - desc = "Cut until the EOL"; - } - { - on = ["c"]; - run = "delete --cut --insert"; - desc = "Cut the selected characters and enter insert mode"; - } - { - on = ["C"]; - run = [ - "delete --cut --insert" - "move 999" - ]; - desc = "Cut until the EOL and enter insert mode"; - } - { - on = ["x"]; - run = [ - "delete --cut" - "move 1 --in-operating" - ]; - desc = "Cut the current character"; - } - - # Yank/Paste - { - on = ["y"]; - run = "yank"; - desc = "Copy the selected characters"; - } - { - on = ["p"]; - run = "paste"; - desc = "Paste the copied characters after the cursor"; - } - { - on = ["P"]; - run = "paste --before"; - desc = "Paste the copied characters before the cursor"; - } - - # Undo/Redo - { - on = ["u"]; - run = "undo"; - desc = "Undo the last operation"; - } - { - on = [""]; - run = "redo"; - desc = "Redo the last operation"; - } - - # Help - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - help.keymap = [ - { - on = [""]; - run = "escape"; - desc = "Clear the filter or hide the help"; - } - { - on = ["q"]; - run = "close"; - desc = "Exit the process"; - } - { - on = [""]; - run = "close"; - desc = "Hide the help"; - } - - # Navigation - { - on = ["k"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["j"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["K"]; - run = "arrow -5"; - desc = "Move cursor up 5 lines"; - } - { - on = ["J"]; - run = "arrow 5"; - desc = "Move cursor down 5 lines"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - # Filtering - { - on = ["/"]; - run = "filter"; - desc = "Apply a filter for the help items"; - } - ]; - }; -} diff --git a/nix/.sops.yaml b/nix/.sops.yaml new file mode 100644 index 0000000..57234fa --- /dev/null +++ b/nix/.sops.yaml @@ -0,0 +1,7 @@ +keys: + - &dashie 92D29D420B5D95FCA46A12FE778CFA7A623614F3 +creation_rules: + - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ + key_groups: + - pgp: + - *dashie diff --git a/nix/base/base_packages.nix b/nix/base/base_packages.nix new file mode 100644 index 0000000..4175297 --- /dev/null +++ b/nix/base/base_packages.nix @@ -0,0 +1,82 @@ +{ pkgs, config, ... }: +{ + imports = [ + # is wrapped in if statement to enable when needed + ../programs/gaming/default.nix + ../programs/themes/stylix.nix + ]; + + environment.systemPackages = with pkgs; [ + openssl + dbus + glib + gtk4 + gtk3 + libadwaita + gtk-layer-shell + gtk4-layer-shell + direnv + dconf + gsettings-desktop-schemas + gnome.nixos-gsettings-overrides + bibata-cursors + xorg.xkbutils + libxkbcommon + icon-library + adwaita-icon-theme + hicolor-icon-theme + morewaita-icon-theme + kdePackages.breeze-icons + seahorse + upower + (lib.mkIf config.conf.streamdeck.enable (callPackage + ../override/streamdeck.nix + { })) + ]; + + gtk.iconCache.enable = false; + + fonts.packages = with pkgs; [ + cantarell-fonts + ]; + + nix.settings.experimental-features = "nix-command flakes"; + + virtualisation.docker.enable = true; + + services.upower.enable = true; + services.printing.enable = true; + services.dbus.enable = true; + services.dbus.packages = with pkgs; [ + gnome2.GConf + ]; + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + + programs.fish.enable = true; + programs.fish.promptInit = '' + ${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source + ''; + programs.nix-ld.enable = true; + programs.nix-ld.libraries = with pkgs; [ + jdk + zlib + ]; + programs.dconf.enable = true; + programs.direnv = { + package = pkgs.direnv; + silent = false; + loadInNixShell = true; + direnvrcExtra = ""; + nix-direnv = { + enable = true; + package = pkgs.nix-direnv; + }; + }; + programs.ssh.startAgent = true; + programs.gnupg.agent.enable = true; + +} diff --git a/nix/base/big_g.nix b/nix/base/big_g.nix new file mode 100644 index 0000000..0b1fe1d --- /dev/null +++ b/nix/base/big_g.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: { + services = { + # needed for GNOME services outside of GNOME Desktop + dbus.packages = with pkgs; [ + gcr + gnome.gnome-settings-daemon + ]; + + gnome.gnome-keyring.enable = true; + gvfs.enable = true; + }; +} diff --git a/base/black.jpg b/nix/base/black.jpg similarity index 100% rename from base/black.jpg rename to nix/base/black.jpg diff --git a/nix/base/common_hardware.nix b/nix/base/common_hardware.nix new file mode 100644 index 0000000..2cd48a9 --- /dev/null +++ b/nix/base/common_hardware.nix @@ -0,0 +1,124 @@ +{ pkgs, config, lib, modulesPath, ... }: +let + username = config.conf.username; +in +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + # Enable networking + networking.networkmanager.enable = true; + services.flatpak.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Zurich"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Configure keymap in X11 + services.xserver = { + xkb.layout = "us"; + xkb.variant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + services.printing.browsing = true; + services.printing.drivers = [ pkgs.hplip ]; + services.printing.startWhenNeeded = true; # optional + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + + # Enable sound with pipewire. + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + environment.variables = { + XDG_CACHE_HOME = "$HOME/.cache"; + DIRENV_LOG_FORMAT = ""; + }; + + nix.settings.trusted-users = [ + username + ]; + + boot.kernelPackages = config.conf.kernel; + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.kernelParams = [ + "resume=\"PARTLABEL=SWAP\"" + ] ++ config.conf.boot_params; + + networking.hostName = config.conf.hostname; + + # allows user change later on + users.mutableUsers = true; + users.users.${username} = { + isNormalUser = true; + description = username; + extraGroups = [ "networkmanager" "wheel" "gamemode" "docker" "vboxusers" ]; + packages = with pkgs; [ + home-manager + xdg-desktop-portal-gtk + ]; + # this password will only last for the first login + # e.g. login, then change to whatever else, this also ensures no public hash is available + password = "firstlogin"; + }; + + system.stateVersion = "unstable"; + + fileSystems."/" = + { + device = "/dev/disk/by-label/ROOT"; + fsType = "btrfs"; + options = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + + fileSystems."/boot" = + { + device = "/dev/disk/by-label/BOOT"; + fsType = "vfat"; + options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; + }; + + fileSystems."/home" = + { + device = "/dev/disk/by-label/HOME"; + fsType = "btrfs"; + options = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + + swapDevices = + [{ device = "/dev/disk/by-label/SWAP"; }]; + + nixpkgs.hostPlatform = lib.mkDefault config.conf.system; + hardware.cpu.${config.conf.cpu}.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + services.fstrim.enable = lib.mkDefault true; + nix.settings.auto-optimise-store = true; + networking.useDHCP = lib.mkDefault true; +} diff --git a/base/default.nix b/nix/base/default.nix similarity index 56% rename from base/default.nix rename to nix/base/default.nix index eafd8a5..6a582dd 100644 --- a/base/default.nix +++ b/nix/base/default.nix @@ -1,7 +1,10 @@ { imports = [ + ./big_g.nix + ./login_manager.nix ./env.nix ./xkb_layout.nix + ./base_packages.nix ./common_hardware.nix ]; } diff --git a/nix/base/env.nix b/nix/base/env.nix new file mode 100644 index 0000000..0591a20 --- /dev/null +++ b/nix/base/env.nix @@ -0,0 +1,20 @@ +{ pkgs +, config +, ... +}: { + environment.variables = { + GSETTINGS_SCHEMA_DIR = "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}"; + NEOVIDE_MAXIMIZED = "0"; + GPG_TTY = "$(tty)"; + EDITOR = "neovide --no-fork"; + SUDO_EDITOR = "neovide --no-fork"; + SCRIPTS = "$HOME/.config/scripts"; + }; + environment.sessionVariables = { + NIXOS_OZONE_WL = "1"; + GOPATH = "$HOME/.go"; + FLAKE = "home/${config.conf.username}/gits/dotFiles/nix"; + # don't ask... marksman somehow requires this + DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = 1; + }; +} diff --git a/nix/base/login_manager.nix b/nix/base/login_manager.nix new file mode 100644 index 0000000..1ea4ab6 --- /dev/null +++ b/nix/base/login_manager.nix @@ -0,0 +1,59 @@ +{ lib +, config +, pkgs +, inputs +, ... +}: +let + username = config.conf.username; + session = { + command = "${lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland} --config /etc/greetd/hyprgreet.conf"; + user = username; + }; +in +{ + services.xserver.displayManager.session = [ + { + manage = "desktop"; + name = "Hyprland"; + start = '' + ${lib.getExe pkgs.hyprland} & waitPID=$! + ''; + } + ]; + + # greetd display manager + programs.hyprland.enable = true; + services.greetd = { + enable = true; + settings = { + terminal.vt = 1; + default_session = session; + }; + }; + + environment.etc."greetd/environments".text = '' + Hyprland + ''; + + environment.etc."greetd/hyprgreet.conf".text = '' + exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' + + monitor=${config.conf.monitor},3440x1440@180,0x0,${config.conf.scale} + monitor=_,disable + + input { + force_no_accel = true + } + + misc { + disable_splash_rendering = true + disable_hyprland_logo = true + } + + exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css; hyprctl dispatch exit + ''; + + # unlock GPG keyring on login + security.pam.services.greetd.enableGnomeKeyring = true; +} diff --git a/base/xkb_layout.nix b/nix/base/xkb_layout.nix similarity index 56% rename from base/xkb_layout.nix rename to nix/base/xkb_layout.nix index b399693..8238484 100644 --- a/base/xkb_layout.nix +++ b/nix/base/xkb_layout.nix @@ -1,10 +1,7 @@ -{ - mkDashDefault, - pkgs, - ... -}: let - layout = pkgs.writeText "enIntUmlaut" '' - xkb_symbols "enIntUmlaut" +{ pkgs, ... }: +let + layout = pkgs.writeText "dashie" '' + xkb_symbols "dashie" { include "us(basic)" include "level3(ralt_switch)" @@ -13,11 +10,14 @@ key { [ u, U, udiaeresis, Udiaeresis ] }; }; ''; -in { - environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp]; - services.xserver.xkb.extraLayouts.enIntUmlaut = { +in +{ + environment.systemPackages = [ pkgs.xorg.xkbcomp ]; + services.xserver.xkb.extraLayouts.dashie = { description = "US layout with 'umlaut'"; - languages = ["eng"]; + languages = [ "eng" ]; symbolsFile = "${layout}"; }; } + + diff --git a/nix/flake.lock b/nix/flake.lock new file mode 100644 index 0000000..1ef4295 --- /dev/null +++ b/nix/flake.lock @@ -0,0 +1,2019 @@ +{ + "nodes": { + "anyrun": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1721135360, + "narHash": "sha256-ZhSA0e45UxiOAjEVqkym/aULh0Dt+KHJLNda7bjx9UI=", + "owner": "Kirottu", + "repo": "anyrun", + "rev": "c6101a31a80b51e32e96f6a77616b609770172e0", + "type": "github" + }, + "original": { + "owner": "Kirottu", + "repo": "anyrun", + "type": "github" + } + }, + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1721224776, + "narHash": "sha256-iakVQHg2DSmdOc5dNBwrDt9JLRxX5MT+IIbxfZEpGdo=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "c89c8123310257f3ddc04cc59aa4b5573c6d515f", + "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-foot": { + "flake": false, + "locked": { + "lastModified": 1696725948, + "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=", + "owner": "tinted-theming", + "repo": "base16-foot", + "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-foot", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1720809814, + "narHash": "sha256-numb3xigRGnr/deF7wdjBwVg7fpbTH7reFDkJ75AJkY=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "34f41987bec14c0f3f6b2155c19787b1f6489625", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-kitty": { + "flake": false, + "locked": { + "lastModified": 1665001328, + "narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=", + "owner": "kdrag0n", + "repo": "base16-kitty", + "rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805", + "type": "github" + }, + "original": { + "owner": "kdrag0n", + "repo": "base16-kitty", + "type": "github" + } + }, + "base16-tmux": { + "flake": false, + "locked": { + "lastModified": 1696725902, + "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=", + "owner": "tinted-theming", + "repo": "base16-tmux", + "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-tmux", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1716150083, + "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "type": "github" + } + }, + "base16_2": { + "inputs": { + "fromYaml": "fromYaml_2" + }, + "locked": { + "lastModified": 1708890466, + "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "665b3c6748534eb766c777298721cece9453fdae", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "crane": { + "inputs": { + "nixpkgs": [ + "ironbar", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717025063, + "narHash": "sha256-dIubLa56W9sNNz0e8jGxrX3CAkPXsq7snuFA/Ie6dn8=", + "owner": "ipetkov", + "repo": "crane", + "rev": "480dff0be03dac0e51a8dfc26e882b0d123a450e", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "dashvim": { + "inputs": { + "base16": [ + "base16" + ], + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs" + ], + "nixvim": "nixvim" + }, + "locked": { + "lastModified": 1721250623, + "narHash": "sha256-w80Q5dvELC7W5rGx0gu9Jp+B2qxUA7irGIN3zAZcbiI=", + "owner": "DashieTM", + "repo": "DashVim", + "rev": "f4da99286b729a4300697c53c3a4b9ab9f8979aa", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "DashVim", + "type": "github" + } + }, + "devshell": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "dashvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717408969, + "narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=", + "owner": "numtide", + "repo": "devshell", + "rev": "1ebbe68d57457c8cae98145410b164b5477761f4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "anyrun", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_10": { + "inputs": { + "nixpkgs-lib": [ + "reset", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_11": { + "inputs": { + "nixpkgs-lib": [ + "reset-plugins", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1719994518, + "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "dashvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719877454, + "narHash": "sha256-g5N1yyOSsPNiOlFfkuI/wcUjmtah+nxdImJqrSATjOU=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "4e3583423212f9303aa1a6337f8dffb415920e4f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": [ + "hyprdock", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": [ + "oxicalc", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": [ + "oxidash", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_7": { + "inputs": { + "nixpkgs-lib": [ + "oxinoti", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_8": { + "inputs": { + "nixpkgs-lib": [ + "oxipaste", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_9": { + "inputs": { + "nixpkgs-lib": [ + "oxishut", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715865404, + "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_5" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": "systems_6" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_7" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "inputs": { + "systems": "systems_8" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "inputs": { + "systems": "systems_9" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "inputs": { + "systems": "systems_10" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1721222302, + "narHash": "sha256-5vL4w9+tS9yd8WpIiDUtxN1IuxCVK2nebZMs/hCXXis=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "93bad85d1633b8b27287b438c0bd394094c24d06", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "fromYaml_2": { + "flake": false, + "locked": { + "lastModified": 1689549921, + "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "dashvim", + "nixvim", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "dashvim", + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "dashvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719259945, + "narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "dashvim", + "nixvim", + "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": 1713702291, + "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "46.1", + "repo": "gnome-shell", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "dashvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719827439, + "narHash": "sha256-tneHOIv1lEavZ0vQ+rgz67LPNCgOZVByYki3OkSshFU=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "59ce796b2563e19821361abbe2067c3bb4143a7d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1721135958, + "narHash": "sha256-H548rpPMsn25LDKn1PCFmPxmWlClJJGnvdzImHkqjuY=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "afd2021bedff2de92dfce0e257a3d03ae65c603d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { + "inputs": { + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1715930644, + "narHash": "sha256-W9pyM3/vePxrffHtzlJI6lDS3seANQ+Nqp+i58O46LI=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "e3ad5108f54177e6520535768ddbf1e6af54b59d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1720108799, + "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprdock": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1716453478, + "narHash": "sha256-EoKGnKvYKoe9geFoK0wyEAMTPGOfRtjXibt4GUCfvBA=", + "owner": "DashieTM", + "repo": "hyprdock", + "rev": "8d07dbdf446e6b21528cc994547cc8f173a70330", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "hyprdock", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "hyprcursor": "hyprcursor", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs_4", + "systems": "systems_3", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1721248202, + "narHash": "sha256-VAhuQQ4EKbw/6z7K2IoR83+gXUdMksLWFQOhJNhSvQE=", + "ref": "refs/heads/main", + "rev": "300228b503b36e5977b0d58713c5b4cf1f07b8a9", + "revCount": 4930, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" + }, + "original": { + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ], + "systems": [ + "hyprland", + "xdph", + "systems" + ] + }, + "locked": { + "lastModified": 1718746314, + "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1720381373, + "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1721071737, + "narHash": "sha256-qmC9jGfbE4+EIBbbSAkrfR/p49wShjpv4/KztgE/P54=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "eb1ceff2b87f6820789249f63faa8e9dcb54d05f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1720215857, + "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "ironbar": { + "inputs": { + "crane": "crane", + "naersk": "naersk", + "nixpkgs": "nixpkgs_6", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1720904669, + "narHash": "sha256-Se+Pg81W8R+SFGFlhF1dU+NnMWSdLo3nC9TdPHa2IL4=", + "owner": "JakeStanger", + "repo": "ironbar", + "rev": "58190ab079d00dd53babb72346f1da6e1cc9ac72", + "type": "github" + }, + "original": { + "owner": "JakeStanger", + "repo": "ironbar", + "type": "github" + } + }, + "naersk": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1717067539, + "narHash": "sha256-oIs5EF+6VpHJRvvpVWuqCYJMMVW/6h59aYUv9lABLtY=", + "owner": "nix-community", + "repo": "naersk", + "rev": "fa19d8c135e776dc97f4dcca08656a0eeb28d5c0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "naersk", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "dashvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719845423, + "narHash": "sha256-ZLHDmWAsHQQKnmfyhYSHJDlt8Wfjv6SQhl2qek42O7A=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "ec12b88104d6c117871fad55e931addac4626756", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-flatpak": { + "locked": { + "lastModified": 1711997375, + "narHash": "sha256-KvU4gOtuFMS9Il67glRGtdNfguAINT9pCaXtvCL8uI8=", + "owner": "gmodena", + "repo": "nix-flatpak", + "rev": "45bf66f7068db79b552da864c0e87452be624d6c", + "type": "github" + }, + "original": { + "owner": "gmodena", + "repo": "nix-flatpak", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1719876945, + "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720915306, + "narHash": "sha256-6vuViC56+KSr+945bCV8akHK+7J5k6n/epYg/W3I5eQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74348da2f3a312ee25cea09b98cdba4cb9fa5d5d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1706487304, + "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1706487304, + "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1716190602, + "narHash": "sha256-xYRimrR0duWvokWQEvB87bSsICeCvvX9DxpUOzCfsDE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5a5ac83292c7842072318f57d68a48474f8bd34d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1706487304, + "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_17": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_18": { + "locked": { + "lastModified": 1706487304, + "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1716948383, + "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ad57eef4ef0659193044870c731987a6df5cf56b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1719848872, + "narHash": "sha256-H3+EC5cYuq+gQW8y0lSrrDZfH71LB4DAf+TDFyvwCNA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "00d80d13810dbfea8ab4ed1009b09100cca86ba8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "locked": { + "lastModified": 1706487304, + "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1720781449, + "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8b5a3d5a1d951344d683b442c0739010b80039db", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_22": { + "locked": { + "lastModified": 1714912032, + "narHash": "sha256-clkcOIkg8G4xuJh+1onLG4HPMpbtzdLv4rHxFzgsH9c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ee4a6e0f566fe5ec79968c57a9c2c3c25f2cf41d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1716330097, + "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1720957393, + "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1717112898, + "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1716948383, + "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ad57eef4ef0659193044870c731987a6df5cf56b", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1720957393, + "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "owner": "NixOs", + "repo": "nixpkgs", + "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "type": "github" + }, + "original": { + "owner": "NixOs", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts_3", + "git-hooks": "git-hooks", + "home-manager": "home-manager", + "nix-darwin": "nix-darwin", + "nixpkgs": "nixpkgs_2", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1720898451, + "narHash": "sha256-T7JAUYx7WZrEEItqRb9Bh6rj0Njffir4XHJUNwhQMiY=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "06a44e9e8814ab13ea013e222637a497a50e96e4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nur": { + "locked": { + "lastModified": 1721241063, + "narHash": "sha256-jBAuwmtJmSNT6xwjtGINslFK0m3R3+Ydw+xrd+a3tSE=", + "owner": "nix-community", + "repo": "nur", + "rev": "f33f46c1e38b07b20a978ac39208058ab9ddedb1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nur", + "type": "github" + } + }, + "oxicalc": { + "inputs": { + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1716225554, + "narHash": "sha256-IenHIQgKdKJTt02VJLQ+q8EunIkMwQ57XFWyKO+rb7s=", + "owner": "DashieTM", + "repo": "OxiCalc", + "rev": "a3fa5d76941278fd0f586817dcd04be134159bd8", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "OxiCalc", + "type": "github" + } + }, + "oxidash": { + "inputs": { + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_9", + "rust-overlay": "rust-overlay_2" + }, + "locked": { + "lastModified": 1716235599, + "narHash": "sha256-6LDrLEfPzwbd5nEcis8us4BA18YhoWkzMVwafCJ5N/A=", + "owner": "DashieTM", + "repo": "OxiDash", + "rev": "fe6984abc73f75a64b0a03231068c20f53ec4f76", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "OxiDash", + "type": "github" + } + }, + "oxinoti": { + "inputs": { + "flake-parts": "flake-parts_7", + "nixpkgs": "nixpkgs_11", + "rust-overlay": "rust-overlay_3" + }, + "locked": { + "lastModified": 1716235566, + "narHash": "sha256-1U4/h0YyuoOERjQE68yQZVsDdIGl43OprDplSGBMhYY=", + "owner": "DashieTM", + "repo": "OxiNoti", + "rev": "c52c330d59a3b066e94618adbe9a7be5b9cfde24", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "OxiNoti", + "type": "github" + } + }, + "oxipaste": { + "inputs": { + "flake-parts": "flake-parts_8", + "nixpkgs": "nixpkgs_13", + "rust-overlay": "rust-overlay_4" + }, + "locked": { + "lastModified": 1716235097, + "narHash": "sha256-kTsSNciMnp3y/QOPseB/QlhRqVxrm7teRCMl05OIiBs=", + "owner": "DashieTM", + "repo": "OxiPaste", + "rev": "3f494c1a3dd093e3c5761520554977a9dec33a3a", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "OxiPaste", + "type": "github" + } + }, + "oxishut": { + "inputs": { + "flake-parts": "flake-parts_9", + "nixpkgs": "nixpkgs_15", + "rust-overlay": "rust-overlay_5" + }, + "locked": { + "lastModified": 1716235696, + "narHash": "sha256-qqN2ev97ff1Yftr+8YS7Pm2/kk8SpQU8uxplbQYJGho=", + "owner": "DashieTM", + "repo": "OxiShut", + "rev": "d38d5c892b7ae2420715cbb6b4944abb76b49f9d", + "type": "github" + }, + "original": { + "owner": "DashieTM", + "repo": "OxiShut", + "type": "github" + } + }, + "reset": { + "inputs": { + "flake-parts": "flake-parts_10", + "nixpkgs": "nixpkgs_17", + "rust-overlay": "rust-overlay_6" + }, + "locked": { + "lastModified": 1718284469, + "narHash": "sha256-6cZjFyjhGTOj9r8eprCWZy1v2o1Tqcl6H6g/LTgHhp4=", + "owner": "Xetibo", + "repo": "ReSet", + "rev": "6c1291bd19383ea45d0610dcdc17e8491b8e20ea", + "type": "github" + }, + "original": { + "owner": "Xetibo", + "repo": "ReSet", + "type": "github" + } + }, + "reset-plugins": { + "inputs": { + "flake-parts": "flake-parts_11", + "nixpkgs": "nixpkgs_19", + "rust-overlay": "rust-overlay_7" + }, + "locked": { + "lastModified": 1718300175, + "narHash": "sha256-kPeJJ/au+jV4jhyAhkLI3uwqK7pEDjdVJvwDmtQq8/k=", + "owner": "Xetibo", + "repo": "ReSet-Plugins", + "rev": "8d3af2fab9425f8b89fb7b82b4e23eba12a42f85", + "type": "github" + }, + "original": { + "owner": "Xetibo", + "repo": "ReSet-Plugins", + "type": "github" + } + }, + "root": { + "inputs": { + "anyrun": "anyrun", + "base16": "base16", + "dashvim": "dashvim", + "home-manager": "home-manager_2", + "hyprdock": "hyprdock", + "hyprland": "hyprland", + "ironbar": "ironbar", + "nix-flatpak": "nix-flatpak", + "nixpkgs": "nixpkgs_7", + "nur": "nur", + "oxicalc": "oxicalc", + "oxidash": "oxidash", + "oxinoti": "oxinoti", + "oxipaste": "oxipaste", + "oxishut": "oxishut", + "reset": "reset", + "reset-plugins": "reset-plugins", + "sops-nix": "sops-nix", + "stylix": "stylix" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "ironbar", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717121863, + "narHash": "sha256-/3sxIe7MZqF/jw1RTQCSmgTjwVod43mmrk84m50MJQ4=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "2a7b53172ed08f856b8382d7dcfd36a4e0cbd866", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_2": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1716171463, + "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_3": { + "inputs": { + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_12" + }, + "locked": { + "lastModified": 1716171463, + "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_4": { + "inputs": { + "flake-utils": "flake-utils_5", + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1716171463, + "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_5": { + "inputs": { + "flake-utils": "flake-utils_6", + "nixpkgs": "nixpkgs_16" + }, + "locked": { + "lastModified": 1716171463, + "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_6": { + "inputs": { + "flake-utils": "flake-utils_7", + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1716171463, + "narHash": "sha256-lc7wOh5BjYUoxdhcPkeUY8BmuL2qtRaHlW1403RW48E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "04d61d14803854fd8453ec43c5c53a471e5407a8", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_7": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_20" + }, + "locked": { + "lastModified": 1717035469, + "narHash": "sha256-MzH+yjKULH3HCRj9QCTwBvqq4LZkR0ZqRE/QfGOGC2E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "095702e63a40e86f339d11864da9dc965b70a01e", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": "nixpkgs_21", + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1720926522, + "narHash": "sha256-eTpnrT6yu1vp8C0B5fxHXhgKxHoYMoYTEikQx///jxY=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "0703ba03fd9c1665f8ab68cc3487302475164617", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16_2", + "base16-fish": "base16-fish", + "base16-foot": "base16-foot", + "base16-helix": "base16-helix", + "base16-kitty": "base16-kitty", + "base16-tmux": "base16-tmux", + "base16-vim": "base16-vim", + "flake-compat": "flake-compat_2", + "gnome-shell": "gnome-shell", + "home-manager": "home-manager_3", + "nixpkgs": "nixpkgs_22" + }, + "locked": { + "lastModified": 1720818679, + "narHash": "sha256-u9PqY7O6TN42SLeb0e6mnYAgQOoQmclaVSHfLKMpmu0=", + "owner": "danth", + "repo": "stylix", + "rev": "29148118cc33f08b71058e1cda7ca017f5300b51", + "type": "github" + }, + "original": { + "owner": "danth", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_10": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_7": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_8": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_9": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "dashvim", + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719887753, + "narHash": "sha256-p0B2r98UtZzRDM5miGRafL4h7TwGRC4DII+XXHDHqek=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "bdb6355009562d8f9313d9460c0d3860f525bc6c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1720194466, + "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix/flake.nix b/nix/flake.nix new file mode 100644 index 0000000..2793a63 --- /dev/null +++ b/nix/flake.nix @@ -0,0 +1,81 @@ +{ + description = "Dashie dots"; + + inputs = + { + nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable"; + + nix-flatpak = { + url = "github:gmodena/nix-flatpak"; + }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + sops-nix.url = "github:Mic92/sops-nix"; + + # Hyprspace = { + # url = "github:KZDKM/Hyprspace"; + # inputs.hyprland.follows = "nixpkgs"; + # }; + + nur.url = "github:nix-community/nur"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + + ironbar = { + url = "github:JakeStanger/ironbar"; + }; + + stylix.url = "github:danth/stylix"; + base16.url = "github:SenchoPens/base16.nix"; + + anyrun.url = "github:Kirottu/anyrun"; + oxicalc.url = "github:DashieTM/OxiCalc"; + oxishut.url = "github:DashieTM/OxiShut"; + oxinoti.url = "github:DashieTM/OxiNoti"; + oxidash.url = "github:DashieTM/OxiDash"; + oxipaste.url = "github:DashieTM/OxiPaste"; + hyprdock.url = "github:DashieTM/hyprdock"; + reset.url = "github:Xetibo/ReSet"; + reset-plugins.url = "github:Xetibo/ReSet-Plugins"; + # nixvim.url = "github:nix-community/nixvim"; + dashvim = { + url = "github:DashieTM/DashVim"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.base16.follows = "base16"; + }; + }; + + outputs = { ... }@inputs: + let + pkgs = import inputs.nixpkgs { + system = "x86_64-linux"; + overlays = [ + inputs.nur.overlay + ]; + config = { + allowUnfree = true; + }; + }; + dashielib = import ./lib { inherit inputs pkgs; }; + in + { + nixosConfigurations = (dashielib.build_systems [ "marmo" "overheating" "spaceship" ]); + }; + + nixConfig = { + builders-use-substitutes = true; + + extra-substituters = [ + "https://hyprland.cachix.org" + "https://anyrun.cachix.org" + ]; + + extra-trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + ]; + }; +} diff --git a/nix/hardware/marmo/configuration.nix b/nix/hardware/marmo/configuration.nix new file mode 100644 index 0000000..d8de5cb --- /dev/null +++ b/nix/hardware/marmo/configuration.nix @@ -0,0 +1,21 @@ +{ + imports = [ + ../../modules/conf.nix + ]; + # variables for system + conf = { + monitor = "DP-1"; + gaming = { + enable = true; + device = 1; + }; + hostname = "marmo"; + hyprland.monitor = [ + # default + "DP-1,1920x1080@144,0x0,1" + # all others + ",highrr,auto,1" + ]; + colorscheme="catppuccin-mocha"; + }; +} diff --git a/nix/hardware/overheating/configuration.nix b/nix/hardware/overheating/configuration.nix new file mode 100644 index 0000000..70d4cc7 --- /dev/null +++ b/nix/hardware/overheating/configuration.nix @@ -0,0 +1,25 @@ +{ + imports = [ + ../../modules/conf.nix + ]; + conf = { + monitor = "eDP-1"; + scale = "2.0"; + hostname = "overheating"; + boot_params = [ "rtc_cmos.use_acpi_alarm=1" ]; + ironbar.modules = [ + { type = "upower"; class = "memory-usage"; } + ]; + hyprland = { + monitor = [ + # default + "eDP-1,2944x1840@90,0x0,2" + + # all others + ",highres,auto,1" + ]; + extra_autostart = [ "hyprdock --server" ]; + }; + colorscheme = "catppuccin-mocha"; + }; +} diff --git a/nix/hardware/overheating/dsdt.nix b/nix/hardware/overheating/dsdt.nix new file mode 100644 index 0000000..285cb33 --- /dev/null +++ b/nix/hardware/overheating/dsdt.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: +let + # credit to benley: https://github.com/benley/dotfiles/commit/325748c3a8553d55c9fab08654a77b252aa0fde7 + patched_ssdt = pkgs.stdenv.mkDerivation { + name = "patched_ssdt"; + src = ./.; + buildInputs = [ pkgs.libarchive ]; + installPhase = '' + mkdir -p kernel/firmware/acpi + cp ${./ssdt6.aml} kernel/firmware/acpi/ssdt6.aml + mkdir -p $out + echo kernel/firmware/acpi/ssdt6.aml | bsdcpio -v -o -H newc -R 0:0 > $out/lenotrolli-ssdt.img + ''; + }; +in + +{ + boot.kernelParams = [ "mem_sleep_default=deep" ]; + boot.initrd.prepend = [ "${patched_ssdt}/lenotrolli-ssdt.img" ]; +} diff --git a/nix/hardware/overheating/firmware.nix b/nix/hardware/overheating/firmware.nix new file mode 100644 index 0000000..d46f8b4 --- /dev/null +++ b/nix/hardware/overheating/firmware.nix @@ -0,0 +1,18 @@ +{ pkgs, ... }: +{ + hardware.firmware = [ + ( + # lenovo is such a good manufacturer!!1!11! + # credit for the binary files: https://github.com/darinpp/yoga-slim-7 + pkgs.stdenv.mkDerivation { + name = "firmware-lenotrolli"; + src = ./firmware; + installPhase = '' + mkdir -p $out/lib/firmware + cp ${./firmware/TAS2XXX38BB.bin} $out/lib/firmware/TAS2XXX38BB.bin + cp ${./firmware/TIAS2781RCA4.bin} $out/lib/firmware/TIAS2781RCA4.bin + ''; + } + ) + ]; +} diff --git a/nix/hardware/overheating/firmware/TAS2XXX38BB.bin b/nix/hardware/overheating/firmware/TAS2XXX38BB.bin new file mode 100644 index 0000000..d729b97 Binary files /dev/null and b/nix/hardware/overheating/firmware/TAS2XXX38BB.bin differ diff --git a/nix/hardware/overheating/firmware/TIAS2781RCA4.bin b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin new file mode 100644 index 0000000..481d133 Binary files /dev/null and b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin differ diff --git a/nix/hardware/overheating/firmware/TIAS2781RCA4.bin.orig b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin.orig new file mode 100644 index 0000000..8698e92 Binary files /dev/null and b/nix/hardware/overheating/firmware/TIAS2781RCA4.bin.orig differ diff --git a/nix/hardware/overheating/overheating.nix b/nix/hardware/overheating/overheating.nix new file mode 100644 index 0000000..0ca9ea1 --- /dev/null +++ b/nix/hardware/overheating/overheating.nix @@ -0,0 +1,15 @@ +{ + imports = + [ + ./dsdt.nix + ./firmware.nix + ]; + # special hardware modules + # TODO: needed? + boot.kernelModules = [ "kvm-amd" ]; + + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + # for hyprdock + services.acpid.enable = true; +} diff --git a/nix/hardware/overheating/ssdt6.aml b/nix/hardware/overheating/ssdt6.aml new file mode 100644 index 0000000..d8cbadd Binary files /dev/null and b/nix/hardware/overheating/ssdt6.aml differ diff --git a/nix/hardware/spaceship/configuration.nix b/nix/hardware/spaceship/configuration.nix new file mode 100644 index 0000000..348eb9f --- /dev/null +++ b/nix/hardware/spaceship/configuration.nix @@ -0,0 +1,63 @@ +{ config, ... }: +let + username = config.conf.username; +in +{ + imports = [ + ../../modules/conf.nix + ]; + + # config variables + conf = { + monitor = "DP-1"; + gaming = { + enable = true; + }; + streamdeck.enable = true; + hostname = "spaceship"; + hyprland = { + monitor = [ + # default + "DP-2,2560x1440@165,0x0,1" + "DP-1,3440x1440@180,2560x0,1,vrr,1" + "HDMI-A-1,1920x1200@60,6000x0,1" + "HDMI-A-1,transform,1" + + # all others + ",highrr,auto,1" + ]; + workspace = [ + # workspaces + # monitor middle + "2,monitor:DP-1, default:true" + "4,monitor:DP-1" + "6,monitor:DP-1" + "8,monitor:DP-1" + "9,monitor:DP-1" + "10,monitor:DP-1" + + # monitor left + "1,monitor:DP-2, default:true" + "5,monitor:DP-2" + "7,monitor:DP-2" + + # monitor right + "3,monitor:HDMI-A-1, default:true" + ]; + hyprpaper = '' + #load + preload = /home/${username}/Pictures/backgrounds/shinobu_2k.jpg + preload = /home/${username}/Pictures/backgrounds/shino_wide.png + preload = /home/${username}/Pictures/backgrounds/shinobu_1200.jpg + + #set + wallpaper = DP-2,/home/${username}/Pictures/backgrounds/shinobu_2k.jpg + wallpaper = DP-1,/home/${username}/Pictures/backgrounds/shino_wide.png + wallpaper = HDMI-A-1,/home/${username}/Pictures/backgrounds/shinobu_1200.jpg + splash = true + ''; + extra_autostart = [ "streamdeck -n" ]; + }; + colorscheme = "catppuccin-mocha"; + }; +} diff --git a/nix/hardware/spaceship/spaceship.nix b/nix/hardware/spaceship/spaceship.nix new file mode 100644 index 0000000..482de77 --- /dev/null +++ b/nix/hardware/spaceship/spaceship.nix @@ -0,0 +1,40 @@ +{ pkgs, lib, ... }: +{ + # TODO: needed? + boot.kernelModules = [ "kvm-amd" ]; + boot.initrd.kernelModules = [ "amdgpu" ]; + + fileSystems."/drive2" = + { + device = "/dev/disk/by-label/DRIVE2"; + fsType = "ext4"; + options = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + + virtualisation.virtualbox.host.enable = true; + + # enable hardware acceleration and rocm + hardware.xone.enable = true; + hardware.graphics.extraPackages = with pkgs; [ + libvdpau-va-gl + vaapiVdpau + rocmPackages.clr.icd + rocm-opencl-runtime + ]; + hardware.graphics = { + enable = true; + enable32Bit = lib.mkDefault true; + }; + networking.firewall = { + allowedTCPPortRanges = [ + { from = 1714; to = 1764; } # KDE Connect + ]; + allowedUDPPortRanges = [ + { from = 1714; to = 1764; } # KDE Connect + ]; + }; +} diff --git a/nix/lib/default.nix b/nix/lib/default.nix new file mode 100644 index 0000000..91b3acc --- /dev/null +++ b/nix/lib/default.nix @@ -0,0 +1,22 @@ +{ inputs, pkgs, ... }: { + build_systems = systems: builtins.listToAttrs (map (name: { + name = name; + value = + let + mod = ../hardware/${name}/configuration.nix; + in + inputs.nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs pkgs mod; + }; + modules = [ + inputs.home-manager.nixosModules.home-manager + inputs.stylix.nixosModules.stylix + ../base + ../programs + mod + ] ++ inputs.nixpkgs.lib.optional (builtins.pathExists ../hardware/${name}/${name}.nix) ../hardware/${name}/${name}.nix + ++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod; + }; + } )systems); +} diff --git a/nix/modules/conf.nix b/nix/modules/conf.nix new file mode 100644 index 0000000..27a99fd --- /dev/null +++ b/nix/modules/conf.nix @@ -0,0 +1,225 @@ +{ lib, config, pkgs, ... }: { + options.conf = { + + system = lib.mkOption { + default = "x86_64-linux"; + # no fisherprice unix support + type = with lib.types; (enum [ "x86_64-linux" "aarch64-linux" "aarch64-linux-android" ]); + example = "aarch64-linux"; + description = '' + System architecture. + ''; + }; + + cpu = lib.mkOption { + # TODO: how to enable arm? + default = "amd"; + type = with lib.types; (enum [ "amd" "intel" ]); + example = "intel"; + description = '' + cpu microcode. + ''; + }; + + monitor = lib.mkOption { + default = ""; + example = "eDP-1"; + type = lib.types.str; + description = '' + main monitor + ''; + }; + + scale = lib.mkOption { + default = "1.0"; + example = "1.0"; + type = lib.types.str; + description = '' + Scale for the monitor + ''; + }; + + ironbar = { + modules = lib.mkOption { + default = [ ]; + example = [ + { type = "upower"; class = "memory-usage"; } + ]; + type = with lib.types; listOf attrs; + description = '' + Adds modules to ironbar. + ''; + }; + }; + + amdGpu = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables drivers, optimizations and kernel parameters for AMD gpus. + ''; + }; + + boot_params = lib.mkOption { + default = [ ]; + example = [ "resume=something" ]; + type = with lib.types; listOf str; + description = '' + Boot params + ''; + }; + + gaming = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Install gaming related programs such as steam, gamemode, and more + ''; + }; + + device = lib.mkOption { + default = 0; + example = 0; + type = lib.types.int; + description = '' + GPU device number + ''; + }; + }; + + streamdeck = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Install streamdeck configuration program. + ''; + }; + }; + + kernel = lib.mkOption { + default = pkgs.linuxPackages_latest; + example = pkgs.linuxPackages_xanmod_latest; + type = with lib.types; nullOr attrs; + description = '' + kernel to be used + ''; + }; + + hostname = lib.mkOption { + default = "nixos"; + example = "spaceship"; + type = lib.types.str; + description = '' + The name of the system + ''; + }; + + username = lib.mkOption { + default = "dashie"; + example = "pingpang"; + type = lib.types.str; + description = '' + The username. + ''; + }; + + hyprland = { + monitor = lib.mkOption { + default = [ ]; + example = [ + "DP-1,3440x1440@180,2560x0,1,vrr,1" + ]; + type = with lib.types; listOf str; + description = '' + The monitor configuration for hyprland. + ''; + }; + workspace = lib.mkOption { + default = [ ]; + example = [ + "2,monitor:DP-1, default:true" + ]; + type = with lib.types; listOf str; + description = '' + The workspace configuration for hyprland. + ''; + }; + hyprpaper = lib.mkOption { + default = ''''; + example = '' + hyprpaper stuff + ''; + type = lib.types.lines; + description = '' + hyprpaper + ''; + }; + extra_autostart = lib.mkOption { + default = [ ]; + example = [ "your application" ]; + type = lib.types.listOf lib.types.str; + description = '' + Extra exec_once. + ''; + }; + }; + + nvim-colorscheme = lib.mkOption { + default = { tokyonight = { enable = true; }; }; + example = { catppuccin = { enable = true; }; }; + type = lib.types.attrs; + description = '' + nixvim colorscheme. + ''; + }; + + colorscheme = lib.mkOption { + default = { + # custom tokyo night + base00 = "1A1B26"; + # base01 = "16161E"; + # base01 = "15161e"; + base01 = "191a25"; + base02 = "2F3549"; + base03 = "444B6A"; + base04 = "787C99"; + base05 = "A9B1D6"; + base06 = "CBCCD1"; + base07 = "D5D6DB"; + base08 = "C0CAF5"; + base09 = "A9B1D6"; + base0A = "0DB9D7"; + base0B = "9ECE6A"; + base0C = "B4F9F8"; + # base0D = "2AC3DE"; + # base0D = "A9B1D6"; + # base0D = "62A0EA"; + # base0D = "779EF1"; + base0D = "366fea"; + base0E = "BB9AF7"; + base0F = "F7768E"; + }; + example = "catppuccin-mocha"; + type = with lib.types; oneOf [ str attrs path ]; + description = '' + Base16 colorscheme. + Can be an attribute set with base00 to base0F, + a string that leads to a yaml file in base16-schemes path, + or a path to a custom yaml file. + ''; + }; + }; + + config = { + conf.boot_params = lib.mkIf config.conf.amdGpu [ + "amdgpu.ppfeaturemask=0xffffffff" + ]; + + conf.kernel = lib.mkIf config.conf.gaming.enable pkgs.linuxPackages_xanmod_latest; + }; +} diff --git a/nix/override/cambalache.nix b/nix/override/cambalache.nix new file mode 100644 index 0000000..7b119fb --- /dev/null +++ b/nix/override/cambalache.nix @@ -0,0 +1,92 @@ +{ stdenv +, lib +, pkgs +, fetchFromGitLab +, nix-update-script +}: + +pkgs.python3.pkgs.buildPythonApplication rec { + pname = "cambalache"; + version = "0.90.1"; + + format = "other"; + + # Did not fetch submodule since it is only for tests we don't run. + src = fetchFromGitLab { + domain = "gitlab.gnome.org"; + owner = "jpu"; + repo = pname; + rev = version; + sha256 = "sha256-YuRxqrGJvhMMZApD/tQSWkUg/nZnp/xryBJSjXCXO4w="; + }; + + nativeBuildInputs = with pkgs; [ + meson + ninja + pkg-config + gobject-introspection # for setup hook + desktop-file-utils # for update-desktop-database + shared-mime-info # for update-mime-database + wrapGAppsHook + ]; + + pythonPath = with pkgs.python3.pkgs; [ + pygobject3 + lxml + ]; + + buildInputs = with pkgs; [ + glib + gtk3 + gtk4 + gtksourceview4 + gtksourceview5 + webkitgtk_4_1 + webkitgtk_6_0 + # For extra widgets support. + libadwaita + libhandy + ]; + + # Prevent double wrapping. + dontWrapGApps = true; + + postPatch = '' + patchShebangs postinstall.py + # those programs are used at runtime not build time + # https://gitlab.gnome.org/jpu/cambalache/-/blob/0.12.1/meson.build#L79-80 + substituteInPlace ./meson.build \ + --replace "find_program('broadwayd', required: true)" "" \ + --replace "find_program('gtk4-broadwayd', required: true)" "" + ''; + + preFixup = '' + # Let python wrapper use GNOME flags. + makeWrapperArgs+=( + # For broadway daemons + --prefix PATH : "${lib.makeBinPath [ pkgs.gtk3 pkgs.gtk4 ]}" + "''${gappsWrapperArgs[@]}" + ) + ''; + + postFixup = '' + # Wrap a helper script in an unusual location. + wrapPythonProgramsIn "$out/${pkgs.python3.sitePackages}/cambalache/priv/merengue" "$out $pythonPath" + ''; + + passthru = { + updateScript = nix-update-script { }; + }; + + meta = with lib; { + homepage = "https://gitlab.gnome.org/jpu/cambalache"; + description = "RAD tool for GTK 4 and 3 with data model first philosophy"; + mainProgram = "cambalache"; + maintainers = teams.gnome.members; + license = with licenses; [ + lgpl21Only # Cambalache + gpl2Only # tools + ]; + platforms = platforms.unix; + }; +} diff --git a/nix/override/streamdeck.nix b/nix/override/streamdeck.nix new file mode 100644 index 0000000..705155f --- /dev/null +++ b/nix/override/streamdeck.nix @@ -0,0 +1,106 @@ +{ lib +, pkgs +, python3Packages +, fetchFromGitHub +, writeText +, makeDesktopItem +}: + +python3Packages.buildPythonApplication rec { + pname = "streamdeck-ui"; + version = "4.1.2"; + + src = fetchFromGitHub { + repo = "streamdeck-linux-gui"; + owner = "streamdeck-linux-gui"; + rev = "v${version}"; + sha256 = "sha256-CSsFPGnKVQUCND6YOA9kfO41KS85C57YL9LcrWlQRKo="; + }; + + patches = [ + # nixpkgs has a newer pillow version + ./streamdeck.patch + ]; + + desktopItems = + let + common = { + name = "streamdeck-ui"; + desktopName = "Stream Deck UI"; + icon = "streamdeck-ui"; + exec = "streamdeck"; + comment = "UI for the Elgato Stream Deck"; + categories = [ "Utility" ]; + }; + in + builtins.map makeDesktopItem [ + common + (common // { + name = "${common.name}-noui"; + exec = "${common.exec} --no-ui"; + noDisplay = true; + }) + ]; + + postInstall = + let + udevRules = '' + SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", TAG+="uaccess" + ''; + in + '' + mkdir -p $out/lib/systemd/user + substitute scripts/streamdeck.service $out/lib/systemd/user/streamdeck.service \ + --replace '' $out/bin/streamdeck + + mkdir -p "$out/etc/udev/rules.d" + cp ${writeText "70-streamdeck.rules" udevRules} $out/etc/udev/rules.d/70-streamdeck.rules + + mkdir -p "$out/share/pixmaps" + cp streamdeck_ui/logo.png $out/share/pixmaps/streamdeck-ui.png + ''; + + dontWrapQtApps = true; + dontWrapGApps = true; + makeWrapperArgs = [ "\${qtWrapperArgs[@]}" "\${gappsWrapperArgs[@]}" ]; + + format = "pyproject"; + + nativeBuildInputs = [ + pkgs.python3Packages.poetry-core + pkgs.copyDesktopItems + pkgs.qt6.wrapQtAppsHook + pkgs.wrapGAppsHook + ]; + + propagatedBuildInputs = with pkgs.python3Packages; [ + importlib-metadata + setuptools + filetype + cairosvg + pillow + pynput + pyside6 + streamdeck + xlib + ] ++ lib.optionals stdenv.isLinux [ + pkgs.qt6.qtwayland + ]; + + nativeCheckInputs = [ + pkgs.xvfb-run + pkgs.python3Packages.pytest + ]; + + # checkPhase = '' + # xvfb-run pytest tests + # ''; + + meta = with lib; { + description = "Linux compatible UI for the Elgato Stream Deck"; + homepage = "https://streamdeck-linux-gui.github.io/streamdeck-linux-gui/"; + license = licenses.mit; + mainProgram = "streamdeck"; + maintainers = with maintainers; [ majiir ]; + }; +} diff --git a/nix/override/streamdeck.patch b/nix/override/streamdeck.patch new file mode 100644 index 0000000..3c8cf05 --- /dev/null +++ b/nix/override/streamdeck.patch @@ -0,0 +1,18 @@ +diff --git a/pyproject.toml b/pyproject.toml +index 54a8c19..0b95fb3 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -14,11 +14,11 @@ packages = [ + [tool.poetry.dependencies] + python = ">=3.8,<3.13" + streamdeck = "^0.9.5" +-pillow = "10.2.0" ++pillow = "^10.2.0" + pyside6 = "^6.4.2" + CairoSVG = "^2.5.2" + filetype = "^1.0.10" +-importlib-metadata = "^6.8.0" ++importlib-metadata = "^7.0.0" + evdev = "^1.6.1" + + [tool.poetry.group.docs.dependencies] diff --git a/nix/programs/coding.nix b/nix/programs/coding.nix new file mode 100644 index 0000000..305439d --- /dev/null +++ b/nix/programs/coding.nix @@ -0,0 +1,121 @@ +{ pkgs +, lib +, config +, ... +}: +{ + imports = [ + # old neovim config + # (import ./nvim/default.nix { inherit lib pkgs; colorscheme = config.conf.colorscheme; }) + ]; + + programs.dashvim = { + enable = true; + colorscheme = config.conf.colorscheme; + }; + + home.packages = with pkgs; [ + #basics + gitui + gcc + meson + ninja + tree-sitter + unzip + pkg-config + sqlite + plantuml + d-spy + + # cpp + bear + clang-tools + + #sql + nodePackages.sql-formatter + sqls + + #assembly + asm-lsp + + #yaml + yamlfmt + yamllint + yaml-language-server + + #markdown + marksman + mdformat + + #bash + bash-language-server + shfmt + + #fsharp + fsharp + fsautocomplete + + #haskell + haskellPackages.cabal-install + ghc + haskellPackages.haskell-language-server + + #html + html-tidy + + #json + jq + nodePackages.vscode-json-languageserver + + #css + tailwindcss + tailwindcss-language-server + vscode-langservers-extracted + + #editors + neovide + ##fallback + vscodium + + #rust + rustup + + #python + python3 + python312Packages.python-lsp-server + python312Packages.python-lsp-ruff + python312Packages.python-lsp-black + + #ts/js + nodejs_20 + deno + typescript + nodePackages.typescript-language-server + nodePackages.prettier + + #go + go + gopls + + #typst + typst + tinymist + ltex-ls + + #java + gradle + maven + jdt-language-server + adoptopenjdk-jre-bin + + #.! + dotnet-sdk_8 + omnisharp-roslyn + csharpier + netcoredbg + + #zig + zig + zls + ]; +} diff --git a/nix/programs/common.nix b/nix/programs/common.nix new file mode 100644 index 0000000..49f0074 --- /dev/null +++ b/nix/programs/common.nix @@ -0,0 +1,128 @@ +{ pkgs +, inputs +, lib +, config +, ... +}: +let + callPackage = lib.callPackageWith (pkgs); + username = config.conf.username; +in +{ + manual = { + html.enable = false; + json.enable = false; + manpages.enable = false; + }; + + fonts.fontconfig.enable = true; + home.packages = with pkgs; [ + vesktop + kitty + fish + ripgrep + rm-improved + bat + fd + lsd + (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) + noto-fonts + flatpak + networkmanager + zoxide + fastfetch + pkgs.gnome-keyring + dbus + killall + adw-gtk3 + qt5ct + qt6ct + gnutar + fishPlugins.tide + nix-index + libnotify + zenith + nh + amberol + pulseaudio + playerctl + ncspot + poppler_utils + brave + greetd.regreet + sops + flake-checker + ffmpeg + system-config-printer + brightnessctl + (callPackage + ../override/cambalache.nix + { }) + ]; + + #my own programs + programs.oxicalc.enable = true; + programs.oxinoti.enable = true; + programs.oxidash.enable = true; + programs.oxishut.enable = true; + programs.oxipaste.enable = true; + programs.hyprdock.enable = true; + programs.ReSet.enable = true; + programs.ReSet.config.plugins = [ + inputs.reset-plugins.packages."x86_64-linux".monitor + inputs.reset-plugins.packages."x86_64-linux".keyboard + ]; + programs.ReSet.config.plugin_config = { + Keyboard = { + path = "/home/${username}/.config/reset/keyboard.conf"; + }; + }; + + nixpkgs.config.allowUnfree = true; + + home.username = username; + home.homeDirectory = "/home/${username}"; + home.stateVersion = "24.05"; + + home.sessionPath = [ + "$HOME/.cargo/bin" + ]; + + home.sessionVariables = { + GOROOT = "$HOME/.go"; + }; + + home.keyboard = null; + + home.file.".local/share/flatpak/overrides/global".text = '' + [Context] + filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0 + ''; + # + # dconf.settings = { + # "org/gnome/desktop/interface" = { + # gtk-theme = "adw-gtk3"; + # cursor-theme = "Bibata-Modern-Classic"; + # cursor-size = 24; + # icon-theme = "MoreWaita"; + # }; + # }; + + programs.nix-index = + { + enable = true; + enableFishIntegration = true; + }; + + sops = { + gnupg = { + home = "~/.gnupg"; + sshKeyPaths = [ ]; + }; + defaultSopsFile = ../secrets/secrets.yaml; + secrets.hub = { }; + secrets.lab = { }; + secrets.${username} = { }; + }; + systemd.user.services.mbsync.Unit.After = [ "sops-nix.service" ]; +} diff --git a/nix/programs/default.nix b/nix/programs/default.nix new file mode 100644 index 0000000..a0e4b2f --- /dev/null +++ b/nix/programs/default.nix @@ -0,0 +1,48 @@ +{ inputs, pkgs, config, lib, mod, ... }: +let + base_imports = [ + inputs.anyrun.homeManagerModules.default + inputs.ironbar.homeManagerModules.default + inputs.oxicalc.homeManagerModules.default + inputs.oxishut.homeManagerModules.default + inputs.oxinoti.homeManagerModules.default + inputs.oxidash.homeManagerModules.default + inputs.oxipaste.homeManagerModules.default + inputs.hyprdock.homeManagerModules.default + inputs.hyprland.homeManagerModules.default + inputs.reset.homeManagerModules.default + inputs.nix-flatpak.homeManagerModules.nix-flatpak + inputs.sops-nix.homeManagerModules.sops + inputs.dashvim.homeManagerModules.dashvim + ]; +in +{ + xdg.portal.config.common.default = "*"; + xdg.portal = { + enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + ]; + }; + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit inputs; + }; + + home-manager.users.${config.conf.username} = { + imports = [ + ./hyprland/default.nix + ./flatpak.nix + ./common.nix + ./coding.nix + ./xdg.nix + ./media.nix + ./utils.nix + ./oxi/default.nix + ./themes/default.nix + ./individual_configs/default.nix + ] ++ base_imports + ++ lib.optional (builtins.pathExists mod) mod; + }; +} diff --git a/nix/programs/flatpak.nix b/nix/programs/flatpak.nix new file mode 100644 index 0000000..4abc89d --- /dev/null +++ b/nix/programs/flatpak.nix @@ -0,0 +1,14 @@ +{ lib, ... }: { + + services.flatpak.remotes = lib.mkOptionDefault [{ + name = "flathub-stable"; + location = "https://dl.flathub.org/repo/flathub.flatpakrepo"; + }]; + services.flatpak.uninstallUnmanaged = true; + services.flatpak.packages = [ + # fallback if necessary, but generally avoided as nix is superior :) + "com.github.tchx84.Flatseal" + "io.github.Foldex.AdwSteamGtk" + ]; +} + diff --git a/nix/programs/gaming/default.nix b/nix/programs/gaming/default.nix new file mode 100644 index 0000000..fa34c60 --- /dev/null +++ b/nix/programs/gaming/default.nix @@ -0,0 +1,33 @@ +{ pkgs +, lib +, config +, ... +}: lib.mkIf config.conf.gaming.enable { + environment.systemPackages = with pkgs; [ + gamemode + steam + lutris + wine + adwsteamgtk + ]; + + programs.steam.enable = true; + programs.gamemode.enable = true; + programs.gamemode = { + enableRenice = true; + settings = { + general = { + governor = "performance"; + }; + gpu = { + apply_gpu_optimisations = "accept-responsibility"; + gpu_device = config.conf.gaming.device; + amd_performance_level = "high"; + }; + custom = { + start = "notify-send -a 'Gamemode' 'Optimizations activated'"; + end = "notify-send -a 'Gamemode' 'Optimizations deactivated'"; + }; + }; + }; +} diff --git a/nix/programs/hyprland/anyrun.nix b/nix/programs/hyprland/anyrun.nix new file mode 100644 index 0000000..08d78dc --- /dev/null +++ b/nix/programs/hyprland/anyrun.nix @@ -0,0 +1,69 @@ +{ inputs, pkgs, ... }: { + programs.anyrun = { + enable = true; + config = { + plugins = [ + inputs.anyrun.packages.${pkgs.system}.applications + inputs.anyrun.packages.${pkgs.system}.rink + inputs.anyrun.packages.${pkgs.system}.translate + inputs.anyrun.packages.${pkgs.system}.websearch + ]; + #position = "center"; + hideIcons = false; + width = { fraction = 0.3; }; + y = { fraction = 0.5; }; + layer = "overlay"; + hidePluginInfo = true; + closeOnClick = true; + }; + + extraCss = '' + #window { + border-radius: 10px; + background-color: none; + } + + box#main { + border-radius: 10px; + } + + list#main { + border-radius: 10px; + margin: 0px 10px 10px 10px; + } + + list#plugin { + border-radius: 10px; + } + + list#match { + border-radius: 10px; + } + + entry#entry { + border: none; + border-radius: 10px; + margin: 10px 10px 0px 10px; + } + + label#match-desc { + font-size: 12px; + border-radius: 10px; + } + + label#match-title { + font-size: 12px; + border-radius: 10px; + } + + label#plugin { + font-size: 16px; + border-radius: 10px; + } + + * { + border-radius: 10px; + } + ''; + }; +} diff --git a/nix/programs/hyprland/config.nix b/nix/programs/hyprland/config.nix new file mode 100644 index 0000000..4673dd6 --- /dev/null +++ b/nix/programs/hyprland/config.nix @@ -0,0 +1,261 @@ +{ config +, lib +, ... +}: +{ + wayland.windowManager.hyprland.enable = true; + wayland.windowManager.hyprland.settings = { + "$mod" = "SUPER"; + "source" = "/home/${config.conf.username}/.config/reset/keyboard.conf"; + + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + ]; + + bind = [ + # screenshots + "$mod SUPER,S,exec,grim -g \"$(slurp)\" - | wl-copy" + "$mod SUPERSHIFTALT,S,exec, grim -g \"$(slurp)\" $HOME/gits/ost-5semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy" + "$mod SUPERSHIFT,S,exec,grim -g \"$(slurp)\" - | satty -f -" + "$mod SUPERCONTROLSHIFT,S,exec,grim -c -g \"2560,0 3440x1440\" - | wl-copy" + + # regular programs + "$mod SUPER,F,exec,firefox" + "$mod SUPER,T,exec,kitty -1" + "$mod SUPER,E,exec,nautilus -w" + "$mod SUPER,N,exec,neovide" + "$mod SUPER,M,exec,oxidash" + "$mod SUPER,R,exec,anyrun" + "$mod SUPER,G,exec,oxicalc" + "$mod SUPER,D,exec,oxishut" + "$mod SUPER,A,exec,oxipaste" + "$mod SUPERSHIFT,P,exec,hyprdock --gui" + "$mod SUPERSHIFT,L,exec, playerctl -a pause & hyprlock & systemctl suspend" + "$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate" + + # media keys + ",XF86AudioMute,exec, $HOME/.config/scripts/audio_control.sh mute" + ",XF86AudioLowerVolume,exec, $HOME/.config/scripts/audio_control.sh sink -5%" + ",XF86AudioRaiseVolume,exec, $HOME/.config/scripts/audio_control.sh sink +5%" + ",XF86AudioPlay,exec, playerctl play-pause" + ",XF86AudioNext,exec, playerctl next" + ",XF86AudioPrev,exec, playerctl previous" + ",XF86MonBrightnessDown,exec, $HOME/.config/scripts/change-brightness brightness 10%-" + ",XF86MonBrightnessUp,exec, $HOME/.config/scripts/change-brightness brightness +10%" + + # hyprland keybinds + # misc + "$mod SUPER,V,togglefloating," + "$mod SUPER,B,fullscreen," + "$mod SUPER,C,togglesplit" + "$mod SUPER,Q,killactive," + "$mod SUPERSHIFTALT,M,exit," + "$mod SUPERSHIFT,W,togglespecialworkspace" + + # move + "$mod SUPER,left,movewindow,l" + "$mod SUPER,right,movewindow,r" + "$mod SUPER,up,movewindow,u" + "$mod SUPER,down,movewindow,d" + + # workspaces + "$mod SUPER,1,workspace,1" + "$mod SUPER,2,workspace,2" + "$mod SUPER,3,workspace,3" + "$mod SUPER,4,workspace,4" + "$mod SUPER,5,workspace,5" + "$mod SUPER,6,workspace,6" + "$mod SUPER,7,workspace,7" + "$mod SUPER,8,workspace,8" + "$mod SUPER,9,workspace,9" + "$mod SUPER,0,workspace,10" + + # move to workspace + "$mod SUPERSHIFT,1,movetoworkspace,1" + "$mod SUPERSHIFT,2,movetoworkspace,2" + "$mod SUPERSHIFT,3,movetoworkspace,3" + "$mod SUPERSHIFT,4,movetoworkspace,4" + "$mod SUPERSHIFT,5,movetoworkspace,5" + "$mod SUPERSHIFT,6,movetoworkspace,6" + "$mod SUPERSHIFT,7,movetoworkspace,7" + "$mod SUPERSHIFT,8,movetoworkspace,8" + "$mod SUPERSHIFT,9,movetoworkspace,9" + "$mod SUPERSHIFT,0,movetoworkspace,10" + + + # move to workspace silent + "$mod SUPERSHIFTALT,1,movetoworkspacesilent,1" + "$mod SUPERSHIFTALT,2,movetoworkspacesilent,2" + "$mod SUPERSHIFTALT,3,movetoworkspacesilent,3" + "$mod SUPERSHIFTALT,4,movetoworkspacesilent,4" + "$mod SUPERSHIFTALT,5,movetoworkspacesilent,5" + "$mod SUPERSHIFTALT,6,movetoworkspacesilent,6" + "$mod SUPERSHIFTALT,7,movetoworkspacesilent,7" + "$mod SUPERSHIFTALT,8,movetoworkspacesilent,8" + "$mod SUPERSHIFTALT,9,movetoworkspacesilent,9" + "$mod SUPERSHIFTALT,0,movetoworkspacesilent,10" + + # preselection + "$mod SUPERALT,j,layoutmsg,preselect l" + "$mod SUPERALT,k,layoutmsg,preselect d" + "$mod SUPERALT,l,layoutmsg,preselect u" + "$mod SUPERALT,semicolon,layoutmsg,preselect r" + "$mod SUPERALT,h,layoutmsg,preselect n" + ]; + + binde = [ + # hyprland keybinds + # focus + "$mod SUPER,J,movefocus,l" + "$mod SUPER,semicolon,movefocus,r" + "$mod SUPER,L,movefocus,u" + "$mod SUPER,K,movefocus,d" + + # resize + "$mod SUPER,U,resizeactive,-20 0" + "$mod SUPER,P,resizeactive,20 0" + "$mod SUPER,O,resizeactive,0 -20" + "$mod SUPER,I,resizeactive,0 20" + ]; + + general = { + gaps_out = "3,5,5,5"; + border_size = 3; + "col.active_border" = lib.mkForce "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg"; + # "col.inactive_border" = "0x66333333"; + allow_tearing = true; + }; + + decoration = { + rounding = 4; + }; + + animations = { + bezier = "penguin,0.05,0.9,0.1,1.0"; + animation = [ + "windowsMove,1,4,default" + "windows,1,7,default,popin 70%" + "windowsOut,1,7,default,popin 70%" + "border,1,10,default" + "fade,1,7,default" + "workspaces,1,6,default" + "layers,1,3,default,popin" + ]; + }; + + dwindle = { + preserve_split = true; + pseudotile = 0; + permanent_direction_override = false; + }; + + input = { + #kb_layout = "dashie"; + repeat_delay = 200; + force_no_accel = true; + touchpad = { + natural_scroll = true; + tap-to-click = true; + tap-and-drag = true; + }; + }; + + misc = { + animate_manual_resizes = 1; + enable_swallow = true; + disable_splash_rendering = true; + disable_hyprland_logo = true; + swallow_regex = "^(.*)(kitty)(.*)$"; + initial_workspace_tracking = 1; + }; + + cursor = { + # conversion seems to be borked right now, i want a smooth bibata :( + enable_hyprcursor = false; + }; + + gestures = { + workspace_swipe = true; + }; + + monitor = config.conf.hyprland.monitor; + workspace = config.conf.hyprland.workspace; + + env = [ + "GTK_CSD,0" + "TERM,\"kitty /bin/fish\"" + "XDG_CURRENT_DESKTOP=Hyprland" + "XDG_SESSION_TYPE=wayland" + "XDG_SESSION_DESKTOP=Hyprland" + "HYPRCURSOR_THEME,Bibata-Modern-Classic" + "HYPRCURSOR_SIZE,24" + "XCURSOR_THEME,Bibata-Modern-Classic" + "XCURSOR_SIZE,24" + "QT_QPA_PLATFORM,wayland" + "QT_QPA_PLATFORMTHEME,qt5ct" + "QT_WAYLAND_FORCE_DPI,96" + "QT_AUTO_SCREEN_SCALE_FACTOR,0" + "QT_WAYLAND_DISABLE_WINDOWDECORATION,1" + "QT_SCALE_FACTOR,1" + "EDITOR,\"neovide --novsync --nofork\"" + "WLR_DRM_NO_ATOMIC,1" + "GTK_USE_PORTAL, 1" + ]; + + layerrule = [ + # layer rules + # mainly to disable animations within slurp and grim + "noanim, selection" + ]; + + windowrule = [ + # window rules + "tile,^(.*)(Spotify)(.*)$" + "float,^(.*)(OxiCalc)(.*)$" + "float,^(.*)(winecfg.exe)(.*)$" + "float,^(.*)(speed.exe)(.*)$" + "float,^(.*)(copyq)(.*)$" + "center,^(.*)(swappy)(.*)$" + "float,title:^(.*)(Spirit)(.*)$" + "float,title:^(.*)(reset)(.*)$" + "workspace 10 silent,^(.*)(steam)(.*)$" + "workspace 9 silent,^(.*)(dota)(.*)$" + "workspace 9 silent,^(.*)(battlebits)(.*)$" + "workspace 9 silent,^(.*)(aoe)(.*)$" + "suppressevent fullscreen maximize,^(.*)(neovide)(.*)$" + ]; + + windowrulev2 = [ + "immediate,class:^(.*)(Pal)$" + "immediate,class:^(.*)(dota2)$" + "immediate,class:^(.*)(needforspeedheat.exe)$" + ]; + + exec-once = [ + # environment + "systemctl --user import-environment" + "dbus-update-activation-environment --systemd --all" + "hyprctl setcursor Bibata-Modern-Classic 24" + + # other programs + "hyprpaper" + "ironbar" + "firefox" + "oxipaste_daemon" + "nextcloud --background" + "oxinoti" + ] ++ config.conf.hyprland.extra_autostart; + + # plugin = { + # hyprspace = { + # bind = [ + # "SUPER, W, overview:toggle, toggle" + # ]; + # }; + # }; + }; + # wayland.windowManager.hyprland.plugins = [ + # inputs.Hyprspace.packages.${pkgs.system}.Hyprspace + # ]; +} diff --git a/nix/programs/hyprland/default.nix b/nix/programs/hyprland/default.nix new file mode 100644 index 0000000..c0873de --- /dev/null +++ b/nix/programs/hyprland/default.nix @@ -0,0 +1,28 @@ +{ pkgs +, ... +}: { + imports = [ + ./anyrun.nix + ./config.nix + ./ironbar.nix + ./hyprpaper.nix + ./hyprlock.nix + ]; + + home.packages = with pkgs; [ + xorg.xprop + grim + slurp + satty + xdg-desktop-portal-gtk + # xdg-desktop-portal-hyprland + copyq + nautilus + sushi + nautilus-python + wl-clipboard + hyprcursor + hyprpaper + hyprpicker + ]; +} diff --git a/nix/programs/hyprland/hyprlock.nix b/nix/programs/hyprland/hyprlock.nix new file mode 100644 index 0000000..70e01b7 --- /dev/null +++ b/nix/programs/hyprland/hyprlock.nix @@ -0,0 +1,36 @@ +{ config +, ... +}: +{ + programs.hyprlock = { + enable = true; + settings = { + background = [ + { + monitor = ""; + path = ""; + color = "rgba(26, 27, 38, 1.0)"; + } + ]; + + input-field = [ + { + monitor = "${config.conf.monitor}"; + + placeholder_text = "password or something"; + } + ]; + + label = [ + { + monitor = "${config.conf.monitor}"; + text = "$TIME"; + font_size = 50; + position = "0, 200"; + valign = "center"; + halign = "center"; + } + ]; + }; + }; +} diff --git a/nix/programs/hyprland/hyprpaper.nix b/nix/programs/hyprland/hyprpaper.nix new file mode 100644 index 0000000..802a963 --- /dev/null +++ b/nix/programs/hyprland/hyprpaper.nix @@ -0,0 +1,5 @@ +{ config, ... }: { + xdg.configFile."hypr/hyprpaper.conf" = { + text = config.conf.hyprland.hyprpaper; + }; +} diff --git a/nix/programs/hyprland/ironbar.nix b/nix/programs/hyprland/ironbar.nix new file mode 100644 index 0000000..0b8a070 --- /dev/null +++ b/nix/programs/hyprland/ironbar.nix @@ -0,0 +1,261 @@ +{ config, ... }: +let + username = config.conf.username; +in +{ + + programs.ironbar = + { + enable = true; + style = '' + @import url("/home/${username}/.config/gtk-3.0/gtk.css"); + + * { + color: #71bbe6; + padding: 0px; + margin: 0px; + } + + .background { + background-color: rgba(0, 0, 0, 0); + } + + .workspaces { + margin: 2px 0px 0px 5px; + border-radius: 10px; + /* background-color: #2b2c3b; */ + background-color: #1E1E2E; + padding: 2px 5px 2px 5px; + } + + .workspaces .item { + margin: 0px 3px 0px 3px; + font-size: 13px; + border-radius: 100%; + padding: 0px 2px 0px 3px; + background-color: rgba(0, 0, 0, 0); + } + + .workspaces .item:hover { + background-color: #3e4152; + } + + .workspaces .item.focused { + background-color: #3e4152; + } + + .audio-box { + padding: 2em; + background-color: #1E1E2E; + border-radius: 5px; + } + + .audio-slider { + padding: 5px; + margin: 5px; + } + + .audio-button { + padding: 5px 10px 5px 10px; + margin: 0px 1em 20px 1em; + border-radius: 100%; + font-size: 17px; + } + + .audio-button-box { + padding: 0px 2.5em 0px 2.5em; + } + + .focused { + /* margin: 2px 0px 0px 0px; */ + padding: 0px 5px 0px 5px; + /* background-color: 1a1b26; */ + background-color: #1E1E2E; + font-size: 17px; + border-radius: 10px; + } + + #bar #end { + margin: 0px 5px 0px 0px; + padding: 0px 5px 0px 5px; + background-color: #1E1E2E; + border-radius: 10px; + } + + .popup-button { + padding: 0px 5px 0px 3px; + margin: 0em 3px; + border-radius: 100%; + font-size: 13px; + background-color: #1E1E2E; + } + + .popup-button-box { + padding: 2px 0px 2px 0px; + } + + .clock { + padding: 0px 5px 0px 5px; + font-size: 17px; + background-color: #1E1E2E; + } + + .clock:hover { + background-color: #3e4152; + } + + .custom button { + background-color: #1E1E2E; + } + + .custom button:hover { + background-color: #3e4152; + } + + .memory-usage { + font-size: 15px; + margin: 0px 5px 0px 0px; + } + + .memory-usage:hover { + background-color: #3e4152; + } + + .popup-clock { + background-color: #1E1E2E; + border-radius: 5px; + padding: 2px 8px 10px 8px; + } + + .popup-clock .calendar-clock { + font-size: 2.5em; + padding-bottom: 0.1em; + } + + .popup-clock .calendar { + border-radius: 5px; + font-size: 1.05em; + } + + .popup-clock .calendar:selected { + background-color: #3e4152; + } + ''; + features = [ + #"another_feature" + ]; + config = { + monitors."${config.conf.monitor}" = { + end = config.conf.ironbar.modules ++ [ + { + type = "sys_info"; + format = [ + " {memory_percent}" + ]; + interval.memory = 30; + class = "memory-usage"; + } + { + type = "custom"; + bar = [ + { + type = "button"; + class = "popup-button"; + label = ""; + on_click = "popup:toggle"; + } + ]; + class = "popup-button-box"; + popup = [ + { + type = "box"; + orientation = "vertical"; + class = "audio-box"; + widgets = [ + { + type = "box"; + orientation = "horizontal"; + widgets = [ + { + type = "button"; + class = "audio-button"; + label = ""; + on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth"; + } + { + type = "button"; + class = "audio-button"; + label = "󰋋"; + on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh internal"; + } + ]; + class = "audio-button-box"; + } + { + type = "label"; + label = "Output"; + } + { + type = "slider"; + class = "audio-slider"; + step = 1.0; + length = 200; + value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; + on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%"; + } + { + type = "label"; + label = "Input"; + } + { + type = "slider"; + class = "audio-slider"; + step = 1.0; + length = 200; + value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; + on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%"; + } + ]; + } + ]; + } + { + type = "custom"; + bar = [ + { + type = "button"; + class = "popup-button"; + label = ""; + on_click = "!oxidash --css /home/${username}/gits/oxidash/style.css"; + } + ]; + class = "popup-button-box"; + } + { + type = "clock"; + format = "%I:%M"; + format_popup = "%I:%M:%S"; + locale = "en_US"; + } + { type = "tray"; } + ]; + position = "top"; + height = 10; + anchor_to_edges = true; + start = [{ + type = "workspaces"; + all_monitors = true; + }]; + center = [ + { + type = "focused"; + show_icon = true; + show_title = true; + icon_size = 20; + truncate = "end"; + } + ]; + }; + }; + }; +} diff --git a/nix/programs/individual_configs/default.nix b/nix/programs/individual_configs/default.nix new file mode 100644 index 0000000..f705a7b --- /dev/null +++ b/nix/programs/individual_configs/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./kitty.nix + ./yazi.nix + ./fish.nix + ./ssh.nix + ./direnv.nix + ./git.nix + ./firefox.nix + ./keepass.nix + ./neovide.nix + ]; +} diff --git a/nix/programs/individual_configs/direnv.nix b/nix/programs/individual_configs/direnv.nix new file mode 100644 index 0000000..615b570 --- /dev/null +++ b/nix/programs/individual_configs/direnv.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: { + xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml { }).generate "direnv" { + global = { + warn_timeout = "-1s"; + }; + }; +} diff --git a/nix/programs/individual_configs/firefox.nix b/nix/programs/individual_configs/firefox.nix new file mode 100644 index 0000000..6457c05 --- /dev/null +++ b/nix/programs/individual_configs/firefox.nix @@ -0,0 +1,29 @@ +{ pkgs, config, ... }: { + programs.firefox = { + enable = true; + + policies = { + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisplayBookmarksToolbar = "never"; + DisplayMenuBar = "default-off"; + }; + profiles.${config.conf.username} = { + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + darkreader + privacy-badger + vimium + keepassxc-browser + i-dont-care-about-cookies + tokyo-night-v2 + + ]; + }; + }; +} diff --git a/nix/programs/individual_configs/fish.nix b/nix/programs/individual_configs/fish.nix new file mode 100644 index 0000000..2c955e7 --- /dev/null +++ b/nix/programs/individual_configs/fish.nix @@ -0,0 +1,140 @@ +{ config, ... }: { + xdg.configFile."fish/config.fish" = { + text = + '' + if status is-interactive + # Commands to run in interactive sessions can go here + end + + # ============================================================================= + # + # Utility functions for zoxide. + # + + export NIX_PATH="$NIX_PATH:$HOME/gits/dotFiles/nix/." + + set EDITOR "neovide --no-fork" + + alias rebuild='sudo nixos-rebuild switch --flake /home/${config.conf.username}/gits/dotFiles/nix/.' + abbr --add ls 'lsd' + abbr --add :q 'exit' + abbr --add gh 'git push origin' + abbr --add gl 'git pull origin' + abbr --add gm 'git commit -m' + abbr --add ga "git add -A" + abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20' + abbr --add s "kitty +kitten ssh" + abbr --add zl 'z "" ' + abbr --add nv 'neovide' + abbr --add cr 'cargo run' + abbr --add grep 'rg' + abbr --add cat 'bat' + abbr --add find 'fd' + abbr --add rm 'rip' + + set fish_greeting + # pwd based on the value of _ZO_RESOLVE_SYMLINKS. + function __zoxide_pwd + builtin pwd -L + end + + # A copy of fish's internal cd function. This makes it possible to use + # `alias cd=z` without causing an infinite loop. + if ! builtin functions --query __zoxide_cd_internal + if builtin functions --query cd + builtin functions --copy cd __zoxide_cd_internal + else + alias __zoxide_cd_internal='builtin cd' + end + end + + # cd + custom logic based on the value of _ZO_ECHO. + function __zoxide_cd + __zoxide_cd_internal $argv + end + + # ============================================================================= + # + # Hook configuration for zoxide. + # + + # Initialize hook to add new entries to the database. + function __zoxide_hook --on-variable PWD + test -z "$fish_private_mode" + and command zoxide add -- (__zoxide_pwd) + end + + # ============================================================================= + # + # When using zoxide with --no-cmd, alias these internal functions as desired. + # + + if test -z $__zoxide_z_prefix + set __zoxide_z_prefix 'z!' + end + set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix) + + # Jump to a directory using only keywords. + function __zoxide_z + set -l argc (count $argv) + if test $argc -eq 0 + __zoxide_cd $HOME + else if test "$argv" = - + __zoxide_cd - + else if test $argc -eq 1 -a -d $argv[1] + __zoxide_cd $argv[1] + else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result + __zoxide_cd $result + else + set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv) + and __zoxide_cd $result + end + end + + # Completions. + function __zoxide_z_complete + set -l tokens (commandline --current-process --tokenize) + set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize) + + if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1 + # If there are < 2 arguments, use `cd` completions. + complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$' + else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1] + # If the last argument is empty and the one before doesn't start with + # $__zoxide_z_prefix, use interactive selection. + set -l query $tokens[2..-1] + set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query) + and echo $__zoxide_z_prefix$result + commandline --function repaint + end + end + complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)' + + # Jump to a directory using interactive search. + function __zoxide_zi + set -l result (command zoxide query --interactive -- $argv) + and __zoxide_cd $result + end + + # ============================================================================= + # + # Commands for zoxide. Disable these using --no-cmd. + # + + abbr --erase z &>/dev/null + alias z=__zoxide_z + + abbr --erase zi &>/dev/null + alias zi=__zoxide_zi + + # ============================================================================= + # + # To initialize zoxide, add this to your configuration (usually + # ~/.config/fish/config.fish): + # + # zoxide init fish | source + + direnv hook fish | source + ''; + }; +} diff --git a/nix/programs/individual_configs/git.nix b/nix/programs/individual_configs/git.nix new file mode 100644 index 0000000..36fd9e0 --- /dev/null +++ b/nix/programs/individual_configs/git.nix @@ -0,0 +1,16 @@ +{ + programs.git = { + enable = true; + userName = "DashieTM"; + userEmail = "fabio.lenherr@gmail.com"; + extraConfig = { + merge = { + tool = "nvimdiff"; + }; + diff = { + tool = "nvimdiff"; + }; + }; + }; + +} diff --git a/nix/programs/individual_configs/keepass.nix b/nix/programs/individual_configs/keepass.nix new file mode 100644 index 0000000..58ffdb3 --- /dev/null +++ b/nix/programs/individual_configs/keepass.nix @@ -0,0 +1,26 @@ +{ + xdg.configFile."keepassxc/keepassxc.ini" = { + text = + '' + [General] + ConfigVersion=2 + + [Browser] + CustomProxyLocation= + Enabled=true + + [GUI] + ApplicationTheme=classic + HidePasswords=true + TrayIconAppearance=monochrome-light + + [PasswordGenerator] + AdditionalChars= + ExcludedChars= + Length=18 + + [Security] + EnableCopyOnDoubleClick=true + ''; + }; +} diff --git a/nix/programs/individual_configs/kitty.nix b/nix/programs/individual_configs/kitty.nix new file mode 100644 index 0000000..4bdaf35 --- /dev/null +++ b/nix/programs/individual_configs/kitty.nix @@ -0,0 +1,83 @@ +{ lib, config, inputs, pkgs, ... }: +let + base16 = pkgs.callPackage inputs.base16.lib { }; + scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme); + hexTable = { + "0" = "1"; + "1" = "0"; + "2" = "1"; + "3" = "2"; + "4" = "3"; + "5" = "4"; + "6" = "5"; + "7" = "6"; + "8" = "7"; + "9" = "8"; + "a" = "9"; + "b" = "a"; + "c" = "b"; + "d" = "c"; + "e" = "d"; + "f" = "e"; + }; + base = "#" + lib.strings.concatStrings ((lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00)) ++ [ hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}" ]); +in +{ + + stylix.targets.kitty = { + enable = false; + }; + programs.kitty = { + enable = true; + + settings = { + enable_audio_bell = "no"; + window_alert_on_bell = "no"; + cursor_blink_interval = "0"; + window_padding_width = "1"; + shell_integration = "yes"; + sync_with_monitor = "no"; + background_opacity = "0.8"; + + font_family = "JetBrainsMono Nerd Font Mono"; + bold_font = "JetBrainsMono Nerd Font Mono Extra Bold"; + italic_font = "JetBrainsMono Nerd Font Mono Extra Italic"; + bold_italic_font = "JetBrainsMono Nerd Font Mono Extra Bold Italic"; + + background = base; + foreground = "#" + scheme.base05; + selection_foreground = "#" + scheme.base05; + selection_background = base; + url_color = "#" + scheme.base04; + cursor = "#" + scheme.base05; + active_border_color = "#" + scheme.base03; + inactive_border_color = "#" + scheme.base01; + active_tab_background = base; + active_tab_foreground = "#" + scheme.base05; + inactive_tab_background = "#" + scheme.base01; + inactive_tab_foreground = "#" + scheme.base04; + tab_bar_background = "#" + scheme.base01; + + color0 = base; + color1 = "#" + scheme.base08; + color2 = "#" + scheme.base0B; + color3 = "#" + scheme.base0A; + color4 = "#" + scheme.base0D; + color5 = "#" + scheme.base0E; + color6 = "#" + scheme.base0C; + color7 = "#" + scheme.base05; + + color8 = "#" + scheme.base03; + color9 = "#" + scheme.base08; + color10 = "#" + scheme.base0B; + color11 = "#" + scheme.base0A; + color12 = "#" + scheme.base0D; + color13 = "#" + scheme.base0E; + color14 = "#" + scheme.base0C; + color15 = "#" + scheme.base07; + + shell = "fish"; + }; + + }; +} diff --git a/nix/programs/individual_configs/ncspot.nix b/nix/programs/individual_configs/ncspot.nix new file mode 100644 index 0000000..931535b --- /dev/null +++ b/nix/programs/individual_configs/ncspot.nix @@ -0,0 +1,38 @@ +{ pkgs, ... }: { + xdg.configFile."ncspot/config.toml".source = (pkgs.formats.toml { }).generate "ncspot" { + notify = true; + shuffle = true; + cover_max_scale = 2; + initial_screen = "library"; + library_tabs = [ "playlists" ]; + theme = { + background = "#1a1b26"; + primary = "#9aa5ce"; + secondary = "#414868"; + title = "#9ece6a"; + playing = "#7aa2f7"; + playing_selected = "#bb9af7"; + playing_bg = "#24283b"; + highlight = "#c0caf5"; + highlight_bg = "#24283b"; + error = "#414868"; + error_bg = "#f7768e"; + statusbar = "#ff9e64"; + statusbar_progress = "#7aa2f7"; + statusbar_bg = "#1a1b26"; + cmdline = "#c0caf5"; + cmdline_bg = "#24283b"; + search_match = "#f7768e"; + }; + keybindings = { + "j" = "move left 1"; + "k" = "move down 1"; + "l" = "move up 1"; + ";" = "move right 1"; + }; + notification_format = { + title = "%artists"; + body = "%title"; + }; + }; +} diff --git a/nix/programs/individual_configs/neovide.nix b/nix/programs/individual_configs/neovide.nix new file mode 100644 index 0000000..c9125e7 --- /dev/null +++ b/nix/programs/individual_configs/neovide.nix @@ -0,0 +1,3 @@ +{ pkgs, ... }: { + xdg.configFile."neovide/config.toml".source = (pkgs.formats.toml { }).generate "neovide" { }; +} diff --git a/nix/programs/individual_configs/ssh.nix b/nix/programs/individual_configs/ssh.nix new file mode 100644 index 0000000..68bdb00 --- /dev/null +++ b/nix/programs/individual_configs/ssh.nix @@ -0,0 +1,10 @@ +{ config, ... }: { + home.file.".ssh/config".text = '' + Host github.com + IdentityFile ${config.sops.secrets.hub.path} + Host gitlab.com + IdentityFile ${config.sops.secrets.lab.path} + Host dashie.org + IdentityFile ${config.sops.secrets.dashie.path} + ''; +} diff --git a/nix/programs/individual_configs/yazi.nix b/nix/programs/individual_configs/yazi.nix new file mode 100644 index 0000000..b04a7a7 --- /dev/null +++ b/nix/programs/individual_configs/yazi.nix @@ -0,0 +1,1494 @@ +{ + # don't ask.... + programs.yazi = + { + enable = true; + settings = { + log = { + enabled = false; + }; + opener = { + + folder = [ + { + run = "open - R \"$@\""; + orphan = true; + display_name = "Reveal in Finder"; + } + { + run = "$EDITOR \"$@\""; + orphan = true; + } + ]; + archive = [ + { + run = "unar \"$1\""; + display_name = "Extract here"; + } + ]; + text = [ + { + run = "$EDITOR \"$@\""; + orphan = true; + } + ]; + image = [ + { + run = "imv \"$@\""; + orphan = true; + display_name = "Open"; + } + { + run = "exiftool \"$1\"; echo \"Press enter to exit\"; read"; + block = true; + display_name = "Show EXIF"; + } + ]; + pdf = [{ + run = "zathura \"$@\""; + orphan = true; + display_name = "Open"; + }]; + video = [ + { + run = "mpv \"$@\""; + orphan = true; + } + { + run = "mediainfo \"$1\"; echo \"Press enter to exit\"; read"; + block = true; + display_name = "Show media info"; + } + ]; + audio = [ + { + run = "xdg-open \"$@\""; + orphan = true; + } + { run = "mediainfo \"$1\"; echo \"Press enter to exit\"; read"; block = true; display_name = "Show media info"; } + ]; + fallback = [ + { + run = "xdg-open \"$@\""; + orphan = true; + display_name = "Open"; + } + { + run = "xdg-open - R \"$@\""; + orphan = true; + display_name = "Reveal in Finder"; + } + ]; + }; + plugin = { + prepend_previewers = [ + { + name = "*.md"; + run = "glow"; + } + { mime = "text/csv"; run = "miller"; } + ]; + }; + }; + keymap = + { + manager.keymap = [ + { + on = [ + "" + ]; + run = "escape"; + desc = "Exit visual mode clear selected or cancel search"; + } + { + on = [ + "q" + ]; + run = "quit"; + desc = "Exit the process"; + } + { + on = [ + "Q" + ]; + run = "quit --no-cwd-file"; + desc = "Exit the process without writing cwd-file"; + } + { + on = [ + "" + ]; + run = "close"; + desc = "Close the current tab or quit if it is last tab"; + } + { + on = [ + "" + ]; + run = "suspend"; + desc = "Suspend the process"; + } + + # Navigation + { + on = [ + "l" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "k" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [ + "L" + ]; + run = "arrow -5"; + desc = "Move cursor up 5 lines"; + } + { + on = [ + "K" + ]; + run = "arrow 5"; + desc = "Move cursor down 5 lines"; + } + + { + on = [ + "" + ]; + run = "arrow -50%"; + desc = "Move cursor up half page"; + } + { + on = [ + "" + ]; + run = "arrow 50%"; + desc = "Move cursor down half page"; + } + { + on = [ + "" + ]; + run = "arrow -100%"; + desc = "Move cursor up one page"; + } + { + on = [ + "" + ]; + run = "arrow 100%"; + desc = "Move cursor down one page"; + } + + { + on = [ + "j" + ]; + run = "leave"; + desc = "Go back to the parent directory"; + } + { + on = [ + ";" + ]; + run = "enter"; + desc = "Enter the child directory"; + } + + { + on = [ + "J" + ]; + run = "back"; + desc = "Go back to the previous directory"; + } + { + on = [ + "P" + ]; + run = "forward"; + desc = "Go forward to the next directory"; + } + + { + on = [ + "" + ]; + run = "peek -5"; + desc = "Peek up 5 units in the preview"; + } + { + on = [ + "" + ]; + run = "peek 5"; + desc = "Peek down 5 units in the preview"; + } + + { + on = [ + "" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + { + on = [ + "" + ]; + run = "leave"; + desc = "Go back to the parent directory"; + } + { + on = [ + "" + ]; + run = "enter"; + desc = "Enter the child directory"; + } + + { + on = [ + "g" + "g" + ]; + run = "arrow -99999999"; + desc = "Move cursor to the top"; + } + { + on = [ + "G" + ]; + run = "arrow 99999999"; + desc = "Move cursor to the bottom"; + } + + # Selection + { + on = [ + "v" + ]; + run = "visual_mode"; + desc = "Enter visual mode (selection mode)"; + } + { + on = [ + "V" + ]; + run = "visual_mode --unset"; + desc = "Enter visual mode (unset mode)"; + } + { + on = [ + "" + ]; + run = "select_all --state=true"; + desc = "Select all files"; + } + { + on = [ + "" + ]; + run = "select_all --state=none"; + desc = "Inverse selection of all files"; + } + + # Operation + { + on = [ + "o" + ]; + run = "open"; + desc = "Open the selected files"; + } + { + on = [ + "O" + ]; + run = "open --interactive"; + desc = "Open the selected files interactively"; + } + { + on = [ + "" + ]; + run = "open"; + desc = "Open the selected files"; + } + { + on = [ + "" + ]; + run = "open --interactive"; + desc = "Open the selected files interactively"; + } # It's cool if you're using a terminal that supports CSI u + { + on = [ + "y" + ]; + run = "yank"; + desc = "Copy the selected files"; + } + { + on = [ + "x" + ]; + run = "yank --cut"; + desc = "Cut the selected files"; + } + { + on = [ + "p" + ]; + run = "paste"; + desc = "Paste the files"; + } + { + on = [ + "P" + ]; + run = "paste --force"; + desc = "Paste the files (overwrite if the destination exists)"; + } + { + on = [ + "-" + ]; + run = "link"; + desc = "Symlink the absolute path of files"; + } + { + on = [ + "_" + ]; + run = "link --relative"; + desc = "Symlink the relative path of files"; + } + { + on = [ + "d" + ]; + run = "remove"; + desc = "Move the files to the trash"; + } + { + on = [ + "D" + ]; + run = "remove --permanently"; + desc = "Permanently delete the files"; + } + { + on = [ + "a" + ]; + run = "create"; + desc = "Create a file or directory (ends with / for directories)"; + } + { + on = [ + "r" + ]; + run = "rename"; + desc = "Rename a file or directory"; + } + { + on = [ + ";" + ]; + run = "shell"; + desc = "Run a shell command"; + } + { + on = [ + ":" + ]; + run = "shell --block"; + desc = "Run a shell command (block the UI until the command finishes)"; + } + { + on = [ + "." + ]; + run = "hidden toggle"; + desc = "Toggle the visibility of hidden files"; + } + { + on = [ + "" + "f" + "g>" + ]; + run = "search fd"; + desc = "Search files by name using fd"; + } + { + on = [ + "" + "f" + "G>" + ]; + run = "search rg"; + desc = "Search files by content using ripgrep"; + } + { + on = [ + "" + ]; + run = "search none"; + desc = "Cancel the ongoing search"; + } + { + on = [ + "z" + ]; + run = "jump zoxide"; + desc = "Jump to a directory using zoxide"; + } + { + on = [ + "Z" + ]; + run = "jump fzf"; + desc = "Jump to a directory or reveal a file using fzf"; + } + + # Copy + { + on = [ + "c" + "c" + ]; + run = "copy path"; + desc = "Copy the absolute path"; + } + { + on = [ + "c" + "d" + ]; + run = "copy dirname"; + desc = "Copy the path of the parent directory"; + } + { + on = [ + "c" + "f" + ]; + run = "copy filename"; + desc = "Copy the name of the file"; + } + { + on = [ + "c" + "n" + ]; + run = "copy name_without_ext"; + desc = "Copy the name of the file without the extension"; + } + + # Find + { + on = [ + "/" + ]; + run = "find --smart"; + } + { + on = [ + "?" + ]; + run = "find --previous --smart"; + } + { + on = [ + "n" + ]; + run = "find_arrow"; + } + { + on = [ + "N" + ]; + run = "find_arrow --previous"; + } + + # Sorting + { + on = [ + "," + "a" + ]; + run = "sort alphabetical --dir_first"; + desc = "Sort alphabetically"; + } + { + on = [ + "," + "A" + ]; + run = "sort alphabetical --reverse --dir_first"; + desc = "Sort alphabetically (reverse)"; + } + { + on = [ + "," + "c" + ]; + run = "sort created --dir_first"; + desc = "Sort by creation time"; + } + { + on = [ + "," + "C" + ]; + run = "sort created --reverse --dir_first"; + desc = "Sort by creation time (reverse)"; + } + { + on = [ + "," + "m" + ]; + run = "sort modified --dir_first"; + desc = "Sort by modified time"; + } + { + on = [ + "," + "M" + ]; + run = "sort modified --reverse --dir_first"; + desc = "Sort by modified time (reverse)"; + } + { + on = [ + "," + "n" + ]; + run = "sort natural --dir_first"; + desc = "Sort naturally"; + } + { + on = [ + "," + "N" + ]; + run = "sort natural --reverse --dir_first"; + desc = "Sort naturally (reverse)"; + } + { + on = [ + "," + "s" + ]; + run = "sort size --dir_first"; + desc = "Sort by size"; + } + { + on = [ + "," + "S" + ]; + run = "sort size --reverse --dir_first"; + desc = "Sort by size (reverse)"; + } + + # Tabs + { + on = [ + "t" + ]; + run = "tab_create --current"; + desc = "Create a new tab using the current path"; + } + + { + on = [ + "1" + ]; + run = "tab_switch 0"; + desc = "Switch to the first tab"; + } + { + on = [ + "2" + ]; + run = "tab_switch 1"; + desc = "Switch to the second tab"; + } + { + on = [ + "3" + ]; + run = "tab_switch 2"; + desc = "Switch to the third tab"; + } + { + on = [ + "4" + ]; + run = "tab_switch 3"; + desc = "Switch to the fourth tab"; + } + { + on = [ + "5" + ]; + run = "tab_switch 4"; + desc = "Switch to the fifth tab"; + } + { + on = [ + "6" + ]; + run = "tab_switch 5"; + desc = "Switch to the sixth tab"; + } + { + on = [ + "7" + ]; + run = "tab_switch 6"; + desc = "Switch to the seventh tab"; + } + { + on = [ + "8" + ]; + run = "tab_switch 7"; + desc = "Switch to the eighth tab"; + } + { + on = [ + "9" + ]; + run = "tab_switch 8"; + desc = "Switch to the ninth tab"; + } + + { + on = [ + "[" + ]; + run = "tab_switch -1 --relative"; + desc = "Switch to the previous tab"; + } + { + on = [ + "]" + ]; + run = "tab_switch 1 --relative"; + desc = "Switch to the next tab"; + } + + { + on = [ + "{" + ]; + run = "tab_swap -1"; + desc = "Swap the current tab with the previous tab"; + } + { + on = [ + "}" + ]; + run = "tab_swap 1"; + desc = "Swap the current tab with the next tab"; + } + + # Tasks + { + on = [ + "w" + ]; + run = "tasks_show"; + desc = "Show the tasks manager"; + } + + # Goto + { + on = [ + "g" + "h" + ]; + run = "cd ~"; + desc = "Go to the home directory"; + } + { + on = [ + "g" + "c" + ]; + run = "cd ~/.config"; + desc = "Go to the config directory"; + } + { + on = [ + "g" + "d" + ]; + run = "cd ~/Downloads"; + desc = "Go to the downloads directory"; + } + { + on = [ + "g" + "t" + ]; + run = "cd /tmp"; + desc = "Go to the temporary directory"; + } + { + on = [ + "g" + "" + ]; + run = "cd --interactive"; + desc = "Go to a directory interactively"; + } + + # Help + { + on = [ + "~" + ]; + run = "help"; + desc = "Open help"; + } + ]; + + tasks.keymap = [ + { + on = [ + "" + ]; + run = "close"; + desc = "Hide the task manager"; + } + { + on = [ + "" + ]; + run = "close"; + desc = "Hide the task manager"; + } + { + on = [ + "w" + ]; + run = "close"; + desc = "Hide the task manager"; + } + + { + on = [ + "k" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "j" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [ + "" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [ + "" + ]; + run = "inspect"; + desc = "Inspect the task"; + } + { + on = [ + "x" + ]; + run = "cancel"; + desc = "Cancel the task"; + } + + { + on = [ + "~" + ]; + run = "help"; + desc = "Open help"; + } + ]; + + + select.keymap = [ + { + on = [ + "" + ]; + run = "close"; + desc = "Cancel selection"; + } + { + on = [ + "" + ]; + run = "close"; + desc = "Cancel selection"; + } + { + on = [ + "" + ]; + run = "close --submit"; + desc = "Submit the selection"; + } + + { + on = [ + "k" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "j" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [ + "K" + ]; + run = "arrow -5"; + desc = "Move cursor up 5 lines"; + } + { + on = [ + "J" + ]; + run = "arrow 5"; + desc = "Move cursor down 5 lines"; + } + + { + on = [ + "" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [ + "~" + ]; + run = "help"; + desc = "Open help"; + } + ]; + + + input.keymap = [ + { + on = [ + "" + ]; + run = "close"; + desc = "Cancel input"; + } + { + on = [ + "" + ]; + run = "close --submit"; + desc = "Submit the input"; + } + { + on = [ + "" + ]; + run = "escape"; + desc = "Go back the normal mode or cancel input"; + } + + # Mode + { + on = [ + "i" + ]; + run = "insert"; + desc = "Enter insert mode"; + } + { + on = [ + "a" + ]; + run = "insert --append"; + desc = "Enter append mode"; + } + { + on = [ + "v" + ]; + run = "visual"; + desc = "Enter visual mode"; + } + { + on = [ + "V" + ]; + run = [ + "move -999" + "visual" + "move 999" + ]; + desc = "Enter visual mode and select all"; + } + + # Navigation + { + on = [ + "h" + ]; + run = "move -1"; + desc = "Move cursor left"; + } + { + on = [ + "l" + ]; + run = "move 1"; + desc = "Move cursor right"; + } + + { + on = [ + "0" + ]; + run = "move -999"; + desc = "Move to the BOL"; + } + { + on = [ + "$" + ]; + run = "move 999"; + desc = "Move to the EOL"; + } + { + on = [ + "I" + ]; + run = [ + "move -999" + "insert" + ]; + desc = "Move to the BOL and enter insert mode"; + } + { + on = [ + "A" + ]; + run = [ + "move 999" + "insert --append" + ]; + desc = "Move to the EOL and enter append mode"; + } + + { + on = [ + "" + ]; + run = "move -1"; + desc = "Move cursor left"; + } + { + on = [ + "" + ]; + run = "move 1"; + desc = "Move cursor right"; + } + + { + on = [ + "b" + ]; + run = "backward"; + desc = "Move to the beginning of the previous word"; + } + { + on = [ + "w" + ]; + run = "forward"; + desc = "Move to the beginning of the next word"; + } + { + on = [ + "e" + ]; + run = "forward --end-of-word"; + desc = "Move to the end of the next word"; + } + + # Deletion + { + on = [ + "d" + ]; + run = "delete --cut"; + desc = "Cut the selected characters"; + } + { + on = [ + "D" + ]; + run = [ + "delete --cut" + "move 999" + ]; + desc = "Cut until the EOL"; + } + { + on = [ + "c" + ]; + run = "delete --cut --insert"; + desc = "Cut the selected characters and enter insert mode"; + } + { + on = [ + "C" + ]; + run = [ + "delete --cut --insert" + "move 999" + ]; + desc = "Cut until the EOL and enter insert mode"; + } + { + on = [ + "x" + ]; + run = [ + "delete --cut" + "move 1 --in-operating" + ]; + desc = "Cut the current character"; + } + + # Yank/Paste + { + on = [ + "y" + ]; + run = "yank"; + desc = "Copy the selected characters"; + } + { + on = [ + "p" + ]; + run = "paste"; + desc = "Paste the copied characters after the cursor"; + } + { + on = [ + "P" + ]; + run = "paste --before"; + desc = "Paste the copied characters before the cursor"; + } + + # Undo/Redo + { + on = [ + "u" + ]; + run = "undo"; + desc = "Undo the last operation"; + } + { + on = [ + "" + ]; + run = "redo"; + desc = "Redo the last operation"; + } + + # Help + { + on = [ + "~" + ]; + run = "help"; + desc = "Open help"; + } + ]; + + help.keymap = [ + { + on = [ + "" + ]; + run = "escape"; + desc = "Clear the filter or hide the help"; + } + { + on = [ + "q" + ]; + run = "close"; + desc = "Exit the process"; + } + { + on = [ + "" + ]; + run = "close"; + desc = "Hide the help"; + } + + # Navigation + { + on = [ + "k" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "j" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [ + "K" + ]; + run = "arrow -5"; + desc = "Move cursor up 5 lines"; + } + { + on = [ + "J" + ]; + run = "arrow 5"; + desc = "Move cursor down 5 lines"; + } + + { + on = [ + "" + ]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [ + "" + ]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + # Filtering + { + on = [ + "/" + ]; + run = "filter"; + desc = "Apply a filter for the help items"; + } + ]; + }; + # theme = { + # manager = { + # cwd = { + # fg = "#94e2d5"; + # }; + # + # # Hovered + # hovered = { + # reversed = true; + # }; + # preview_hovered = { underline = true; }; + # + # # Find + # find_keyword = { + # fg = "#f9e2af"; + # bold = true; + # italic = true; + # underline = true; + # }; + # find_position = { + # fg = "#f5c2e7"; + # bg = "reset"; + # bold = true; + # italic = true; + # }; + # + # # Marker + # marker_copied = { + # fg = "#a6e3a1"; + # bg = "#a6e3a1"; + # }; + # marker_cut = { + # fg = "#f38ba8"; + # bg = "#f38ba8"; + # }; + # marker_marked = { + # fg = "#f9e2af"; + # bg = "#f9e2af"; + # }; + # marker_selected = { + # fg = "#779EF0"; + # bg = "#89b4fa"; + # }; + # + # # Tab + # tab_active = { + # fg = "#1e1e2e"; + # bg = "#cdd6f4"; + # }; + # tab_inactive = { + # fg = "#cdd6f4"; + # bg = "#45475a"; + # }; + # tab_width = 1; + # + # # Count + # count_copied = { + # fg = "#1e1e2e"; + # bg = "#a6e3a1"; + # }; + # count_cut = { + # fg = "#1e1e2e"; + # bg = "#f38ba8"; + # }; + # count_selected = { + # fg = "#1e1e2e"; + # bg = "#89b4fa"; + # }; + # + # # Border + # border_symbol = "│"; + # border_style = { fg = "#7f849c"; }; + # + # }; + # status = { + # separator_open = ""; + # separator_close = ""; + # separator_style = { + # fg = "#45475a"; + # bg = "#45475a"; + # }; + # + # # Mode + # mode_normal = { + # fg = "#1e1e2e"; + # bg = "#89b4fa"; + # bold = true; + # }; + # mode_select = { + # fg = "#1e1e2e"; + # bg = "#a6e3a1"; + # bold = true; + # }; + # mode_unset = { + # fg = "#1e1e2e"; + # bg = "#f2cdcd"; + # bold = true; + # }; + # + # # Progress + # progress_label = { + # fg = "#ffffff"; + # bold = true; + # }; + # progress_normal = { + # fg = "#89b4fa"; + # bg = "#45475a"; + # }; + # progress_error = { + # fg = "#f38ba8"; + # bg = "#45475a"; + # }; + # + # # Permissions + # permissions_t = { fg = "#89b4fa"; }; + # permissions_r = { fg = "#f9e2af"; }; + # permissions_w = { fg = "#f38ba8"; }; + # permissions_x = { fg = "#a6e3a1"; }; + # permissions_s = { fg = "#7f849c"; }; + # }; + # + # input = { + # border = { + # fg = "#89b4fa"; + # }; + # title = { }; + # value = { }; + # selected = { reversed = true; }; + # }; + # select = { + # border = { + # fg = "#89b4fa"; + # }; + # active = { fg = "#f5c2e7"; }; + # inactive = { }; + # }; + # tasks = { + # border = { + # fg = "#89b4fa"; + # }; + # title = { }; + # hovered = { + # underline = true; + # }; + # }; + # which = { + # mask = { + # bg = "#313244"; + # }; + # cand = { fg = "#94e2d5"; }; + # rest = { fg = "#9399b2"; }; + # desc = { fg = "#f5c2e7"; }; + # separator = "  "; + # separator_style = { fg = "#585b70"; }; + # }; + # help = { + # on = { + # fg = "#f5c2e7"; + # }; + # exec = { fg = "#94e2d5"; }; + # desc = { fg = "#9399b2"; }; + # hovered = { + # bg = "#585b70"; + # bold = true; + # }; + # footer = { + # fg = "#45475a"; + # bg = "#cdd6f4"; + # }; + # }; + # filetype = { + # rules = [ + # # Images + # { + # mime = "image/*"; + # fg = "#94e2d5"; + # } + # + # # Videos + # { + # mime = "video/*"; + # fg = "#f9e2af"; + # } + # { + # mime = "audio/*"; + # fg = "#f9e2af"; + # } + # + # # Archives + # { + # mime = "application/zip"; + # fg = "#f5c2e7"; + # } + # { + # mime = "application/gzip"; + # fg = "#f5c2e7"; + # } + # { + # mime = "application/x-tar"; + # fg = "#f5c2e7"; + # } + # { + # mime = "application/x-bzip"; + # fg = "#f5c2e7"; + # } + # { + # mime = "application/x-bzip2"; + # fg = "#f5c2e7"; + # } + # { + # mime = "application/x-7z-compressed"; + # fg = "#f5c2e7"; + # } + # { + # mime = "application/x-rar"; + # fg = "#f5c2e7"; + # } + # + # # Fallback + # { + # name = "*"; + # fg = "#cdd6f4"; + # } + # { + # name = "*/"; + # fg = "#89b4fa"; + # } + # ]; + # }; + # }; + }; +} + + + + + + + + + + diff --git a/nix/programs/media.nix b/nix/programs/media.nix new file mode 100644 index 0000000..cf205c6 --- /dev/null +++ b/nix/programs/media.nix @@ -0,0 +1,34 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + # base audio + pipewire + wireplumber + # audio control + playerctl + # images + imv + # videos + mpv + # pdf + zathura + evince + libreoffice-fresh + onlyoffice-bin + pdftk + pdfpc + polylux2pdfpc + # spotify + # video editing + kdenlive + # image creation + inkscape + gimp + krita + yt-dlp + ]; + programs.obs-studio.enable = true; + programs.obs-studio.plugins = with pkgs; [ + obs-studio-plugins.obs-vaapi + ]; +} diff --git a/nix/programs/nvim/default.nix b/nix/programs/nvim/default.nix new file mode 100644 index 0000000..43fdc23 --- /dev/null +++ b/nix/programs/nvim/default.nix @@ -0,0 +1,212 @@ +# please nixvim enable lazyloading +{ lib, pkgs, colorscheme, ... }: +{ + programs.neovim = { + enable = true; + extraPackages = with pkgs; [ + # Telescope + ripgrep + # lua + lua-language-server + stylua + # nix + nixd + # go + gopls + # jafuck + jdt-language-server + taplo + typst-lsp + sqls + shfmt + texlab + nixpkgs-fmt + crate2nix + ruff-lsp + pyright + lemminx + marksman + clang-tools_18 + ]; + + plugins = with pkgs.vimPlugins; [ + lazy-nvim + ]; + + extraLuaConfig = + let + plugins = with pkgs.vimPlugins; [ + # LazyVim + LazyVim + bufferline-nvim + cmp-buffer + cmp-nvim-lsp + cmp-path + cmp_luasnip + cmp-async-path + conform-nvim + dashboard-nvim + dressing-nvim + flash-nvim + friendly-snippets + gitsigns-nvim + git-conflict-nvim + ltex_extra-nvim + indent-blankline-nvim + lualine-nvim + neo-tree-nvim + neoconf-nvim + neodev-nvim + noice-nvim + nui-nvim + nvim-cmp + nvim-dap + nvim-dap-ui + nvim-dap-python + nvim-dap-go + nvim-dap-virtual-text + nvim-nio + nvim-lint + nvim-lspconfig + nvim-notify + #nvim-spectre + nvim-treesitter.withAllGrammars + nvim-treesitter-context + nvim-treesitter-textobjects + nvim-ts-autotag + nvim-ts-context-commentstring + nvim-web-devicons + nvim-jdtls + rustaceanvim + typst-vim + instant-nvim + git-blame-nvim + neoscroll-nvim + mason-nvim + neotest + neotest-zig + neotest-python + neotest-rust + neotest-java + neotest-haskell + neotest-go + neotest-dotnet + neotest-bash + neotest-dart + omnisharp-extended-lsp-nvim + neotest + neotest-java + neotest-rust + persistence-nvim + plenary-nvim + telescope-fzf-native-nvim + telescope-nvim + telescope-zoxide + telescope-file-browser-nvim + telescope-project-nvim + todo-comments-nvim + vimtex + inc-rename-nvim + headlines-nvim + diffview-nvim + crates-nvim + cmake-tools-nvim + clangd_extensions-nvim + alpha-nvim + vim-visual-multi + ts-comments-nvim + nvim-tree-lua + nvim-snippets + markdown-preview-nvim + tokyonight-nvim + trouble-nvim + vim-illuminate + vim-startuptime + which-key-nvim + haskell-tools-nvim + Ionide-vim + { name = "LuaSnip"; path = luasnip; } + { name = "mini.ai"; path = mini-nvim; } + { name = "mini.bufremove"; path = mini-nvim; } + { name = "mini.comment"; path = mini-nvim; } + { name = "mini.indentscope"; path = mini-nvim; } + { name = "mini.pairs"; path = mini-nvim; } + { name = "mini.surround"; path = mini-nvim; } + ]; + mkEntryFromDrv = drv: + if lib.isDerivation drv then + { name = "${lib.getName drv}"; path = drv; } + else + drv; + lazyPath = pkgs.linkFarm "lazy-plugins" (builtins.map mkEntryFromDrv plugins); + in + '' + require("lazy").setup({ + defaults = { + lazy = true, + }, + performance = { + rtp = { + disabled_plugins = { + "gzip", + "netrw", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, + dev = { + -- reuse files from pkgs.vimPlugins.* + path = "${lazyPath}", + patterns = { "." }, + -- fallback to download + fallback = true, + }, + spec = { + { "LazyVim/LazyVim", + opts = { + ${if colorscheme != "" then "colorscheme = '${colorscheme}'," else ""} + }, + import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.ui.alpha" }, + { import = "lazyvim.plugins.extras.lang.rust" }, + { import = "lazyvim.plugins.extras.lang.tailwind" }, + { import = "lazyvim.plugins.extras.lang.java" }, + { import = "lazyvim.plugins.extras.lang.go" }, + { import = "lazyvim.plugins.extras.lang.clangd" }, + { import = "lazyvim.plugins.extras.lang.markdown" }, + { import = "lazyvim.plugins.extras.lang.cmake" }, + { import = "lazyvim.plugins.extras.lang.omnisharp" }, + { import = "lazyvim.plugins.extras.lang.tex" }, + { import = "lazyvim.plugins.extras.util.dot" }, + { import = "lazyvim.plugins.extras.dap.core" }, + { import = "lazyvim.plugins.extras.test.core" }, + { "nvim-telescope/telescope-fzf-native.nvim", enabled = true }, + { "williamboman/mason-lspconfig.nvim", enabled = false }, + { import = "plugins" }, + { import = "plugins.plugins" }, + }, + + ${if colorscheme != "" then "install = { colorscheme = { '${colorscheme}' } }," else ""} + checker = { enabled = true, notify = false }, + change_detection = { enabled = true, notify = false }, + }) + ''; + }; + + # https://github.com/nvim-treesitter/nvim-treesitter#i-get-query-error-invalid-node-type-at-position + xdg.configFile."nvim/parser".source = + let + parsers = pkgs.symlinkJoin { + name = "treesitter-parsers"; + paths = (pkgs.vimPlugins.nvim-treesitter.withAllGrammars).dependencies; + }; + in + "${parsers}/parser"; + + # Normal LazyVim config here, see https://github.com/LazyVim/starter/tree/main/lua + xdg.configFile."nvim/lua".source = ./lua; + xdg.configFile."nvim/ftplugin".source = ./ftplugin; +} diff --git a/nix/programs/nvim/flake.lock b/nix/programs/nvim/flake.lock new file mode 100644 index 0000000..01dcb75 --- /dev/null +++ b/nix/programs/nvim/flake.lock @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1719994518, + "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1720542800, + "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "feb2849fdeb70028c70d73b848214b00d324a497", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1719876945, + "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix/programs/nvim/flake.nix b/nix/programs/nvim/flake.nix new file mode 100644 index 0000000..6b79831 --- /dev/null +++ b/nix/programs/nvim/flake.nix @@ -0,0 +1,35 @@ +{ + description = "A lazyvim configuration"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; + }; + + outputs = + { flake-parts, ... }@inputs: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + + perSystem = + { pkgs, ... }: + let + colorscheme = "catppuccin-mocha"; + dashieVimModule = { + inherit pkgs colorscheme; + module = import ./default.nix; + nvim = pkgs.neovim; + }; + in + { + packages = { + default = dashieVimModule.nvim; + }; + }; + }; +} diff --git a/nix/programs/nvim/ftplugin/java.lua b/nix/programs/nvim/ftplugin/java.lua new file mode 100644 index 0000000..1a4f22e --- /dev/null +++ b/nix/programs/nvim/ftplugin/java.lua @@ -0,0 +1,5 @@ +local config = { + cmd = { "jdtls" }, + root_dir = vim.fs.dirname(vim.fs.find({ "gradlew", ".git", "mvnw" }, { upward = true })[1]), +} +require("jdtls").start_or_attach(config) diff --git a/nix/programs/nvim/lua/config/autocmds.lua b/nix/programs/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..e8da00f --- /dev/null +++ b/nix/programs/nvim/lua/config/autocmds.lua @@ -0,0 +1,15 @@ +-- nvimtree +local function open_nvim_tree(data) + local directory = vim.fn.isdirectory(data.file) == 1 + + if not directory then + return + end + -- change to the directory + vim.cmd.cd(data.file) + + -- open the tree + require("nvim-tree.api").tree.open() +end + +vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree }) diff --git a/nix/programs/nvim/lua/config/keymaps.lua b/nix/programs/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..b325537 --- /dev/null +++ b/nix/programs/nvim/lua/config/keymaps.lua @@ -0,0 +1,202 @@ +local Util = require("lazyvim.util") + +local function map(mode, lhs, rhs, opts) + local keys = require("lazy.core.handler").handlers.keys + ---@cast keys LazyKeysHandler + -- do not create the map if a lazy keys handler exists + if not keys.active[keys.parse({ lhs, mode = mode }).id] then + opts = opts or {} + opts.silent = opts.silent ~= false + vim.keymap.set(mode, lhs, rhs, opts) + end +end +local opts = { noremap = true, silent = true } +local term_opts = { silent = true } + +-- crimes against humanity, but I don't care +map("n", "j", "h", opts) +map("n", "l", "k", opts) +map("n", "k", "j", opts) +map("n", ";", "l", opts) +map("v", "j", "h", opts) +map("v", "k", "j", opts) +map("v", "l", "k", opts) +map("v", ";", "l", opts) + +-- test plugin +map("n", "OO", ':lua require("test_plugin").test()', { desc = "Toggle breakpoint" }) + +-- debug +map("n", "db", ':lua require("dap").toggle_breakpoint()', { desc = "Toggle breakpoint" }) +map("n", "do", ':lua require("dap").step_over()', { desc = "Step over" }) +map("n", "di", ':lua require("dap").step_into()', { desc = "Step into" }) +map("n", "dc", ':lua require("dap").continue()', { desc = "Continue" }) +map("n", "du", function() + require("dapui").toggle() +end, { desc = "Toggle DAP UI" }) +map("n", "de", function() + require("dapui").eval() +end, { desc = "DAP Eval" }) + +-- window movement +map("n", "", [[wincmd h]], opts) +map("n", "", [[wincmd l]], opts) +map("n", "", [[wincmd j]], opts) +map("i", "", [[wincmd h]], opts) +map("i", "", [[wincmd l]], opts) +map("i", "", [[wincmd j]], opts) + +-- toggle terminal +local lazyterm = function() + Util.terminal(nil, { cwd = Util.root(), esc_esc = false, ctrl_hjkl = false }) +end +map("n", "", lazyterm, { desc = "Terminal (root dir)" }) +map("t", "", "close", { desc = "Hide Terminal" }) + +-- semicolon thing +-- map("i","" ,"A;", {desc = "add semi and newline"}) +-- map("i","" ,"A;", {desc = "add semi"}) +map("n", "m", "$a;", { desc = "add semi and newline" }) +map("n", "n", "$a;", { desc = "add semi" }) + +-- tab switching +map("n", "", ":BufferLineCyclePrev", opts) +map("n", "", ":BufferLineCycleNext", opts) + +-- git +map("n", "gq", function() + require("telescope.builtin").git_commits() +end, { desc = "Commits" }) +map("n", "gw", function() + require("telescope.builtin").git_bcommits() +end, { desc = "Commits in branch" }) +map("n", "gb", function() + require("telescope.builtin").git_branches() +end, { desc = "Branches" }) +map("n", "gr", function() + require("telescope.builtin").git_status() +end, { desc = "Git status" }) +map("n", "ga", function() + require("telescope.builtin").git_stash() +end, { desc = "Git stash" }) +map("n", "gg", function() + Util.terminal({ "gitui" }, { cwd = Util.root() }) +end, { desc = "gitui (root dir)" }) +map("n", "gG", function() + Util.terminal({ "gitui" }) +end, { desc = "gitui (cwd)" }) +map("n", "gB", function() + require("gitblame") + vim.cmd(":GitBlameToggle") +end, { desc = "git blame" }) + +-- harpoon man +map("n", "h1", function() + require("harpoon.ui").nav_file(1) +end, { desc = "First Harpoon File" }) +map("n", "h2", function() + require("harpoon.ui").nav_file(2) +end, { desc = "Second Harpoon File" }) +map("n", "h3", function() + require("harpoon.ui").nav_file(3) +end, { desc = "First Harpoon File" }) +map("n", "ha", function() + require("harpoon.mark").add_file() +end, { desc = "First Harpoon File" }) +map("n", "hd", function() + require("harpoon.mark").remove_file() +end, { desc = "First Harpoon File" }) +map("n", "hm", ":Telescope harpoon marks", { noremap = true, silent = true, desc = "Show harpoon marks" }) + +-- telescope +map("n", "fb", function() + require("telescope").extensions.file_browser.file_browser({}) +end, { desc = "File Browser" }) +map("n", "ff", function() + require("telescope.builtin").find_files() +end, { desc = "Find Files" }) +map("n", "fg", function() + Live_grep_from_project_git_root() +end, { desc = "Live Grep (root)" }) +map("n", "fG", function() + require("telescope.builtin").live_grep() +end, { desc = "Live Grep (cwd)" }) +map("n", "fh", function() + require("telescope.builtin").help_tags() +end, { desc = "Help" }) +map("n", "fp", function() + require("telescope").extensions.project.project({}) +end, { noremap = true, silent = true, desc = "Projects" }) +map("n", "z", function() + require("telescope").extensions.zoxide.list({}) +end, { desc = "Zoxide" }) + +-- neoscroll +local t = {} +t[""] = { "scroll", { "-vim.wo.scroll", "true", "250" } } +t[""] = { "scroll", { "vim.wo.scroll", "true", "250" } } +require("neoscroll.config").set_mappings(t) + +-- trouble +map("n", "t", "TroubleToggle", term_opts) + +-- format +map({ "n", "v" }, "", function() + Util.format({ force = true }) +end, { desc = "Format" }) + +-- better yank +function Better_yank(opts) + local current_line = unpack(vim.api.nvim_win_get_cursor(0)) + vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "y") +end + +vim.api.nvim_create_user_command("BetterYank", Better_yank, { count = 1 }) +map("n", "by", ":BetterYank", term_opts) + +-- better delete +function Better_delete(opts) + local current_line = unpack(vim.api.nvim_win_get_cursor(0)) + vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "d") +end + +vim.api.nvim_create_user_command("BetterDelete", Better_delete, { count = 1 }) +map("n", "bd", ":BetterDelete", term_opts) + +-- neovide zoom +local change_scale_factor = function(delta) + vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta +end +vim.keymap.set("n", "", function() + change_scale_factor(1.25) +end) +vim.keymap.set("n", "", function() + change_scale_factor(1 / 1.25) +end) + +-- neovide paste +vim.g.neovide_input_use_logo = 1 +vim.api.nvim_set_keymap("i", "", "pI", { noremap = true, silent = true }) + +function Get_git_root() + local opts = {} + local function is_git_repo() + vim.fn.system("git rev-parse --is-inside-work-tree") + + return vim.v.shell_error == 0 + end + if is_git_repo() then + local dot_git_path = vim.fn.finddir(".git", ".;") + local root = vim.fn.fnamemodify(dot_git_path, ":h") + opts = { + cwd = root, + } + end + return opts +end + +function Live_grep_from_project_git_root() + local opts = Get_git_root() + require("telescope.builtin").live_grep(opts) +end + diff --git a/nix/programs/nvim/lua/config/lazy.lua b/nix/programs/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..de32dd1 --- /dev/null +++ b/nix/programs/nvim/lua/config/lazy.lua @@ -0,0 +1,55 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", + lazypath, + }) +end +vim.opt.rtp:prepend(vim.env.LAZY or lazypath) + +require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.ui.alpha" }, + -- { import = "lazyvim.plugins.extras.ui.edgy" }, + { import = "plugins" }, + { import = "plugins.plugins" }, + { import = "lazyvim.plugins.extras.lang.rust" }, + { import = "lazyvim.plugins.extras.lang.tailwind" }, + { import = "lazyvim.plugins.extras.lang.java" }, + { import = "lazyvim.plugins.extras.lang.go" }, + { import = "lazyvim.plugins.extras.lang.clangd" }, + { import = "lazyvim.plugins.extras.lang.typescript" }, + { import = "lazyvim.plugins.extras.lang.python" }, + { import = "lazyvim.plugins.extras.lang.markdown" }, + { import = "lazyvim.plugins.extras.lang.cmake" }, + { import = "lazyvim.plugins.extras.lang.omnisharp" }, + { import = "lazyvim.plugins.extras.lang.json" }, + { import = "lazyvim.plugins.extras.lang.tex" }, + { import = "lazyvim.plugins.extras.util.dot" }, + { import = "lazyvim.plugins.extras.dap.core" }, + { import = "lazyvim.plugins.extras.test.core" }, + }, + defaults = { + lazy = true, + version = false, + }, + checker = { enabled = true, notify = false }, + change_detection = { enabled = true, notify = false }, + performance = { + rtp = { + disabled_plugins = { + "gzip", + "netrw", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/nix/programs/nvim/lua/config/lsp-keymap.lua b/nix/programs/nvim/lua/config/lsp-keymap.lua new file mode 100644 index 0000000..df316e9 --- /dev/null +++ b/nix/programs/nvim/lua/config/lsp-keymap.lua @@ -0,0 +1,126 @@ +local M = {} + +---@type PluginLspKeys +M._keys = nil + +---@return (LazyKeys|{has?:string})[] +function M.get() + local format = function() + require("lazyvim.util").format({ force = true }) + end + if not M._keys then + ---@class PluginLspKeys + M._keys = { + { "cld", vim.diagnostic.open_float, desc = "Line Diagnostics" }, + { "cl", "LspInfo", desc = "Lsp Info" }, + { "ca", "Telescope lsp_definitions", desc = "Goto Definition", has = "definition" }, + { "cs", "Telescope lsp_references", desc = "References" }, + { "cA", vim.lsp.buf.declaration, desc = "Goto Declaration" }, + { "cf", "Telescope lsp_implementations", desc = "Goto Implementation" }, + { "cd", "Telescope lsp_type_definitions", desc = "Goto Type Definition" }, + { "ce", vim.lsp.buf.hover, desc = "Hover" }, + { "cw", vim.lsp.buf.signature_help, desc = "Signature Help", has = "signatureHelp" }, + { "", vim.lsp.buf.signature_help, mode = "i", desc = "Signature Help", has = "signatureHelp" }, + { "]d", M.diagnostic_goto(true), desc = "Next Diagnostic" }, + { "[d", M.diagnostic_goto(false), desc = "Prev Diagnostic" }, + { "]e", M.diagnostic_goto(true, "ERROR"), desc = "Next Error" }, + { "[e", M.diagnostic_goto(false, "ERROR"), desc = "Prev Error" }, + { "]w", M.diagnostic_goto(true, "WARN"), desc = "Next Warning" }, + { "[w", M.diagnostic_goto(false, "WARN"), desc = "Prev Warning" }, + { "", format, desc = "Format Range", mode = "v", has = "documentRangeFormatting" }, + { "cr", ":IncRename ", desc = "Rename", has = "rename" }, + { + "cq", + function() + vim.lsp.buf.code_action({ + context = { + only = { + "quickfix", + "quickfix.ltex", + "source", + "source.fixAll", + "source.organizeImports", + "", + }, + }, + }) + end, + desc = "Fix", + mode = { "n", "v" }, + has = "codeAction", + }, + { + "cQ", + function() + vim.lsp.buf.code_action({ + context = { + only = { + "refactor", + "refactor.inline", + "refactor.extract", + "refactor.rewrite", + }, + }, + }) + end, + desc = "Refactor", + mode = { "n", "v" }, + has = "codeAction", + }, + } + end + return M._keys +end + +---@param method string +function M.has(buffer, method) + method = method:find("/") and method or "textDocument/" .. method + local clients = require("lazyvim.util").lsp.get_clients({ bufnr = buffer }) + for _, client in ipairs(clients) do + if client.supports_method(method) then + return true + end + end + return false +end + +---@return (LazyKeys|{has?:string})[] +function M.resolve(buffer) + local Keys = require("lazy.core.handler.keys") + if not Keys.resolve then + return {} + end + local spec = M.get() + local opts = require("lazyvim.util").opts("nvim-lspconfig") + local clients = require("lazyvim.util").lsp.get_clients({ bufnr = buffer }) + for _, client in ipairs(clients) do + local maps = opts.servers[client.name] and opts.servers[client.name].keys or {} + vim.list_extend(spec, maps) + end + return Keys.resolve(spec) +end + +function M.on_attach(_, buffer) + local Keys = require("lazy.core.handler.keys") + local keymaps = M.resolve(buffer) + + for _, keys in pairs(keymaps) do + if not keys.has or M.has(buffer, keys.has) then + local opts = Keys.opts(keys) + opts.has = nil + opts.silent = opts.silent ~= false + opts.buffer = buffer + vim.keymap.set(keys.mode or "n", keys.lhs, keys.rhs, opts) + end + end +end + +function M.diagnostic_goto(next, severity) + local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev + severity = severity and vim.diagnostic.severity[severity] or nil + return function() + go({ severity = severity }) + end +end + +return M diff --git a/nix/programs/nvim/lua/config/options.lua b/nix/programs/nvim/lua/config/options.lua new file mode 100644 index 0000000..7f5ec59 --- /dev/null +++ b/nix/programs/nvim/lua/config/options.lua @@ -0,0 +1,34 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here +local options = { + fileencoding = "utf-8", + number = true, + showmode = true, + termguicolors = true, + spelllang = "en_us", + shell = "fish", + relativenumber = false, + scrolloff = 5, + scrolljump = 5, + wrap = false, +} +vim.filetype.add({ + extension = { + typst = "typst", + typ = "typst", + }, +}) +vim.o.guifont = "JetBrainsMono Nerd Font:h14" +vim.g.neovide_refresh_rate_idle = 180 +vim.g.neovide_refresh_rate_idle = 5 +vim.g.neovide_hide_mouse_when_typing = true +vim.g.mkdp_browser = "/usr/bin/firefox" +vim.g.mkdp_auto_start = 1 +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 +vim.g.autoformat = false + +for k, v in pairs(options) do + vim.opt[k] = v +end diff --git a/nix/programs/nvim/lua/plugins/cmp.lua b/nix/programs/nvim/lua/plugins/cmp.lua new file mode 100644 index 0000000..4b4d467 --- /dev/null +++ b/nix/programs/nvim/lua/plugins/cmp.lua @@ -0,0 +1,143 @@ +return { + { + "L3MON4D3/LuaSnip", + build = (not jit.os:find("Windows")) + and "echo -e 'NOTE: jsregexp is optional, so not a big deal if it fails to build\n'; make install_jsregexp" + or nil, + dependencies = { + "rafamadriz/friendly-snippets", + config = function() + require("luasnip.loaders.from_vscode").lazy_load() + end, + }, + opts = { + history = true, + delete_check_events = "TextChanged", + updateevents = "TextChanged,TextChangedI", + enable_autosnippets = true, + }, + keys = function() + return {} + end, + config = function(_, opts) + require("luasnip").setup(opts) + end, + }, + { + "hrsh7th/nvim-cmp", + version = false, + event = "InsertEnter", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "FelipeLema/cmp-async-path", + "saadparwaiz1/cmp_luasnip", + "Saecki/crates.nvim", + }, + opts = function() + vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true }) + local cmp = require("cmp") + local defaults = require("cmp.config.default")() + local luasnip = require("luasnip") + local compare = require("cmp.config.compare") + return { + preselect = cmp.PreselectMode.None, + completion = { + -- completeopt = "menu,menuone,noinsert", + }, + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = { + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = false, + }), -- Accept cur + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item({ behavior = cmp.SelectBehavior.Insert }) + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item({ behavior = cmp.SelectBehavior.Insert }) + else + fallback() + end + end, { + "i", + "s", + }), + [""] = cmp.mapping(function(fallback) + if luasnip.expandable() then + luasnip.expand() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { + "i", + "s", + }), + [""] = cmp.mapping(function(fallback) + if luasnip.expand_or_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { + "i", + "s", + }), + }, + sources = cmp.config.sources({ + { name = "nvim_lsp", priority = 99 }, + { name = "luasnip", priority = 3, max_item_count = 3 }, + { name = "buffer", priority = 2, max_item_count = 2, keyword_length = 5 }, + { name = "async_path", priority = 1, max_item_count = 2, keyword_length = 3, trigger_characters = {} }, + { name = "crates" }, + }), + sorting = { + priority_weight = 90, + comparators = { + compare.exact, + compare.score, + compare.offset, + compare.kind, + }, + }, + formatting = { + preselect = cmp.PreselectMode.None, + format = function(entry, item) + local icons = require("lazyvim.config").icons.kinds + if icons[item.kind] then + item.kind = icons[item.kind] .. item.kind + end + return require("tailwindcss-colorizer-cmp").formatter(entry, item) + end, + }, + experimental = { + ghost_text = { + hl_group = "CmpGhostText", + }, + }, + } + end, + config = function(_, opts) + local cmp = require("cmp") + require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" }) + cmp.setup(opts) + end, + }, +} + diff --git a/nix/programs/nvim/lua/plugins/dashboard.lua b/nix/programs/nvim/lua/plugins/dashboard.lua new file mode 100644 index 0000000..82715ad --- /dev/null +++ b/nix/programs/nvim/lua/plugins/dashboard.lua @@ -0,0 +1,100 @@ +return { + { + "goolord/alpha-nvim", + event = "VimEnter", + opts = function() + local alpha = require("alpha") + local dashboard = require("alpha.themes.dashboard") + dashboard.section.header.val = { + [[ _______ ___ _______. __ __ __ _______ ]], + [[| \ / \ / || | | | | | | ____|]], + [[| .--. | / ^ \ | (----`| |__| | | | | |__ ]], + [[| | | | / /_\ \ \ \ | __ | | | | __| ]], + [[| '--' | / _____ \ .----) | | | | | | | | |____ ]], + [[|_______/ /__/ \__\ |_______/ |__| |__| |__| |_______|]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠪⣍⣒⠒⠦⠤⠤⠤⠄⠠⡜⡐⠁⠪⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⢄⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠈⠛⠯⣉⠁⣐⣂⠐⠮⠥⠟⣓⣲⣾⣿⣿⣿⣶⡃⠀⠀⠈⢞⢆⠀⠀⠀⠀⠀⠀⡰⢁⠂⠄⣇⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⣠⠤⠤⠭⠷⠎⡡⠔⠒⠘⠀⢹⣿⣿⣿⣿⣿⠀⠈⠀⠀⠀⢢⢣⠀⠀⠀⠀⢀⡇⠈⠀⢰⢰⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⢸⢰⠀⠀⠀⡩⢋⣀⣤⣤⣤⣤⣤⣿⣿⠟⠿⣿⡀⠀⠀⠀⠀⠀⠆⢳⠀⠀⠀⢸⠀⠂⠀⠀⡈⡆⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⢣⢂⠀⠮⡪⠛⠉⢋⠝⠻⢿⢿⡿⢁⠔⢋⣸⠇⠀⠀⠀⠀⠀⡘⣆⢣⠀⠀⡼⠀⠀⠀⠀⡇⣇⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⡣⢲⡊⠀⠀⠀⠀⠀⡴⠃⣼⠡⢪⠔⠋⠀⠀⠀⢀⠀⠀⠀⢸⣿⡄⢆⠀⡇⠀⠀⠀⠀⠁⢸⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⢰⢡⡇⠀⠀⢀⠔⠠⠊⣰⠞⡇⢠⠃⠀⣠⣶⣿⣷⣷⣷⠄⠀⠈⡟⣷⡸⡄⡇⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⡇⣾⠀⣀⠔⣁⣤⣦⢺⣿⡆⡆⡃⠀⢨⠃⢸⣿⣿⣿⠏⠀⠠⢀⢠⣿⡇⣧⡇⠀⠀⠀⠀⠀⢸⣆⢔⡲⡆⠀ ]], + [[ ⠀⠀⣠⠞⠼⠧⢙⡒⣾⣿⣿⡷⡘⣟⣷⣜⡃⠀⡼⠀⠀⠷⠗⠋⠀⠀⠀⢀⡟⣿⣿⢀⠓⠀⠀⠀⠀⠀⢸⢋⠊⠀⡇⠀ ]], + [[ ⠘⠛⠒⠒⠉⠉⠁⡇⣿⣽⣿⡇⠈⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⣠⠟⠀⣷⣿⣇⠱⡀⠀⠀⠀⡄⢀⠃⠀⡄⡇⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⡇⢸⣏⢀⣧⠀⠈⠆⠀⠀⠀⠀⠀⠀⠀⠀⡠⢊⡴⡟⠀⡼⢁⢸⡙⣠⠁⠀⠀⠀⢇⠆⠀⢀⢳⡇⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⢳⢀⣵⢸⣯⣷⣤⣀⠀⠀⠀⠀⠀⢀⣐⠮⠔⡎⠘⠀⠈⢀⢮⣿⣷⠁⠇⠠⠀⢰⠎⠀⠀⡘⣸⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⢀⠎⢬⢘⣯⠛⢻⠏⣿⣿⣶⣶⡶⠋⠉⠀⠀⢸⠀⠀⡔⠀⣪⣿⣿⢻⠀⠸⠈⡇⠛⠀⠠⢀⢃⡇⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠈⡹⡡⣪⡏⠛⠀⠀⢠⡟⢻⣿⣿⡇⠀⠀⠀⠀⢼⡆⠠⡇⢰⣿⣿⣿⣻⡄⠀⡆⠁⠀⣠⠃⠌⠼⠤⠤⡀ ]], + [[ ⠀⠀⠀⣀⡠⢞⣳⣽⢸⡇⠀⡇⠀⠸⠀⣼⣿⣿⡇⠀⠀⠀⠀⠈⡇⣰⠃⣶⡍⣼⣿⣏⠃⠀⠁⢠⠊⣀⣜⠤⠐⢂⢆⠇ ]], + [[ ⠀⠀⠈⠉⠉⠁⠀⢇⢸⡟⠀⡇⠀⡇⢸⢷⣹⣿⡇⠀⠀⠀⠀⠀⢳⡽⠃⡞⣇⣿⣧⣿⠀⠀⢸⠃⢠⠃⠀⢀⠤⢢⠞⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⢸⡀⡇⠀⠁⢠⠁⣿⠈⣿⣿⠇⠀⠀⠀⠀⠀⠀⠁⡆⡇⣾⠿⣹⣿⠀⠀⠃⡰⠃⡰⢔⣡⠞⠁⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⢇⢠⠀⠂⡌⠀⢽⠁⣟⡟⠀⠀⠀⠀⠀⠀⠀⠀⣇⢶⢹⣤⣿⠇⠀⣀⣈⠝⡱⠒⠉⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠈⣎⡄⠀⡷⠀⢸⠀⢹⠇⠀⠀⠀⠀⠀⠀⠀⠀⠫⣼⣾⣿⢋⠤⠤⠥⢆⡞⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⢀⢫⣡⢸⠎⢃⢘⠀⢈⡄⠀⠀⠀⠀⠀⠀⠀⠀⢀⡽⣽⢀⡋⠉⠑⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠘⠉⠳⡯⣇⢆⠻⣆⠈⣤⠀⠀⠀⠀⣀⡀⠤⢚⡨⠷⣝⠗⠑⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠫⣗⠳⡜⠵⠀⡍⡥⠤⠤⠤⠄⠒⠉⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠫⡆⣇⠇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡙⡰⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣦⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + } + dashboard.section.buttons.val = { + dashboard.button("f", " Find file", ":lua require('telescope.builtin').find_files()"), + dashboard.button("y", " Yazi", ":lua require('yazi').yazi()"), + dashboard.button("p", " Find project", ":lua require('telescope').extensions.project.project{}"), + dashboard.button("t", " Zoxide", ":lua require('telescope').extensions.zoxide.list{}"), + dashboard.button("c", " Configuration", ":e ~/.config/nvim/init.lua "), + dashboard.button("q", " Quit Neovim", ":qa"), + } + + local function footer() + return "dashie@dashie.org" + end + + dashboard.section.footer.val = footer() + + dashboard.section.footer.opts.hl = "Type" + dashboard.section.header.opts.hl = "Include" + dashboard.section.buttons.opts.hl = "Keyword" + + dashboard.opts.opts.noautocmd = true + + -- alpha.pad_margin(dashboard.section.header.val, dashboard.opts , 0, 0) + alpha.setup(dashboard.opts) + end, + config = function(_, dashboard) + -- close Lazy and re-open when the dashboard is ready + if vim.o.filetype == "lazy" then + vim.cmd.close() + vim.api.nvim_create_autocmd("User", { + pattern = "AlphaReady", + callback = function() + require("lazy").show() + end, + }) + end + + require("alpha").setup({ + layout = { + { type = "padding", val = 1 }, + dashboard.section.header, + { type = "padding", val = 1 }, + dashboard.section.buttons, + { type = "padding", val = 1 }, + dashboard.section.footer, + }, + }) + + vim.api.nvim_create_autocmd("User", { + pattern = "LazyVimStarted", + callback = function() + local stats = require("lazy").stats() + local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) + dashboard.section.footer.val = "⚡ Neovim loaded " .. stats.count .. " plugins in " .. ms .. "ms" + pcall(vim.cmd.AlphaRedraw) + end, + }) + end, + }, +} diff --git a/nix/programs/nvim/lua/plugins/disabled.lua b/nix/programs/nvim/lua/plugins/disabled.lua new file mode 100644 index 0000000..76dc307 --- /dev/null +++ b/nix/programs/nvim/lua/plugins/disabled.lua @@ -0,0 +1,9 @@ +return { + { + { "rcarriga/nvim-notify", enabled = false }, + }, + { { "folke/noice.nvim", enabled = false } }, + { { "nvimtools/none-ls.nvim", enabled = false } }, + { { "nvimdev/dashboard-nvim", enabled = false } }, + { { "nvim-neo-tree/neo-tree.nvim", enabled = false } }, +} diff --git a/nix/programs/nvim/lua/plugins/lsp.lua b/nix/programs/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..984fdd1 --- /dev/null +++ b/nix/programs/nvim/lua/plugins/lsp.lua @@ -0,0 +1,239 @@ +return { + { + "williamboman/mason.nvim", + }, + { + "neovim/nvim-lspconfig", + ---@class PluginLspOpts + opts = function(_, opts) + local path = vim.fn.stdpath("config") .. "/spell/ltex.dictionary.en-US.txt" + local words = {} + + local file, err = io.open(path, "r") + if err ~= nil then + os.execute("mkdir " .. vim.fn.stdpath("config") .. "/spell") + file = io.open(path, "w") + file:write("") + file:close() + file = io.open(path, "r") + end + for word in file:lines() do + table.insert(words, word) + end + local new_opts = { + format_notify = false, + -- LSP Server Settings + ---@type lspconfig.options + servers = { + marksman = { + mason = false, + }, + clangd = { + mason = false, + }, + jdtls = { + mason = false, + }, + gopls = { + mason = false, + }, + pyright = { + mason = false, + }, + ruff_lsp = { + mason = false, + }, + texlab = { + mason = false, + }, + taplo = { + keys = { + { + "K", + function() + if vim.fn.expand("%:t") == "Cargo.toml" and require("crates").popup_available() then + require("crates").show_popup() + else + vim.lsp.buf.hover() + end + end, + desc = "Show Crate Documentation", + }, + }, + mason = false, + }, + bashls = { + mason = false, + }, + ansiblels = { + mason = false, + }, + omnisharp = { + mason = false, + handlers = { + ["textDocument/definition"] = function(...) + return require("omnisharp_extended").handler(...) + end, + }, + keys = { + { + "oe", + function() + require("omnisharp_extended").telescope_lsp_definitions() + end, + desc = "Goto Definition", + }, + }, + cmd = { + -- no comment + "OmniSharp", + "-z", + "--hostPID", + tostring(vim.fn.getpid()), + "DotNet:enablePackageRestore=false", + "--encoding", + "utf-8", + "--languageserver", + "FormattingOptions:EnableEditorConfigSupport=true", + "FormattingOptions:OrganizeImports=true", + "RoslynExtensionsOptions:EnableAnalyzersSupport=true", + "RoslynExtensionsOptions:EnableImportCompletion=true", + -- inlay hints are bugged until next release..... + -- "RoslynExtensionsOptions:InlayHintsOptions:EnableForParameters=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForLiteralParameters=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForIndexerParameters=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForObjectCreationParameters=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForOtherParameters=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:SuppressForParametersThatDifferOnlyBySuffix=false", + -- "RoslynExtensionsOptions:InlayHintsOptions:SuppressForParametersThatMatchMethodIntent=false", + -- "RoslynExtensionsOptions:InlayHintsOptions:SuppressForParametersThatMatchArgumentName=false", + -- "RoslynExtensionsOptions:InlayHintsOptions:EnableForTypes=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForImplicitVariableTypes=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForLambdaParameterTypes=true", + -- "RoslynExtensionsOptions:InlayHintsOptions:ForImplicitObjectCreation=true", + "Sdk:IncludePrereleases=true", + }, + }, + tinymist = { + settings = { + formatterMode = "typstyle", + exportPdf = "onSave", + }, + mason = false, + }, + nixd = { + settings = { + ["nixd"] = { + formatting = { + command = { "nixpkgs-fmt" }, + }, + }, + }, + mason = false, + }, + ltex = { + settings = { + ltex = { + checkFrequency = "save", + dictionary = { + ["en-US"] = words, + }, + }, + }, + filetypes = { + "bib", + "gitcommit", + "markdown", + "org", + "plaintex", + "rst", + "rnoweb", + "tex", + "pandoc", + "typst", + "typ", + "text", + }, + mason = false, + }, + sqls = { + mason = false, + }, + lemminx = { + mason = false, + }, + opencl_ls = { + mason = false, + }, + yamlls = { + mason = false, + }, + zls = { + mason = false, + }, + jsonls = { + mason = false, + cmd = { "vscode-json-languageserver", "--stdio" }, + }, + cssls = { + mason = false, + cmd = { "css-languageserver", "--stdio" }, + }, + lua_ls = { + mason = false, + { + Lua = { + workspace = { + checkThirdParty = false, + }, + completion = { + callSnippet = "Replace", + }, + }, + }, + }, + }, + } + return vim.tbl_deep_extend("keep", new_opts, opts) + end, + init = function() + local keys = require("lazyvim.plugins.lsp.keymaps").get() + local my_keys = require("config.lsp-keymap").get() + local count = 0 + for _ in pairs(my_keys) do + keys[#keys + 1] = my_keys[count] + count = count + 1 + end + end, + }, + { + "stevearc/conform.nvim", + opts = { + keys = { + { + "cF", + function() + require("conform").format({ async = true, lsp_fallback = true }) + end, + mode = "", + numberdesc = "Format buffer", + }, + }, + formatters = { + mdformat = { + prepend_args = { "--number" }, + }, + }, + formatters_by_ft = { + nix = { "nixpkgs-fmt" }, + lua = { "stylua" }, + sh = { "shfmt" }, + cs = { "dotnet-csharpier" }, + markdown = { "mdformat" }, + sql = { "sql-formatter" }, + json = { "jq" }, + yaml = { "yamlfmt" }, + }, + }, + }, +} diff --git a/nix/programs/nvim/lua/plugins/plugins.lua b/nix/programs/nvim/lua/plugins/plugins.lua new file mode 100644 index 0000000..833d72f --- /dev/null +++ b/nix/programs/nvim/lua/plugins/plugins.lua @@ -0,0 +1,292 @@ +return { + { + "nvim-telescope/telescope.nvim", + cmd = "Telescope", + keys = function() + return {} + end, + opts = { + defaults = { + layout_strategy = "flex", + layout_config = { + flex = { + height = 0.95, + width = 0.95, + flip_columns = 100, + }, + vertical = { preview_height = 0.5, preview_cutoff = 5 }, + horizontal = { preview_width = 0.7, preview_cutoff = 99 }, + }, + }, + }, + }, + { + "nvim-telescope/telescope-project.nvim", + lazy = true, + }, + { + "nvim-telescope/telescope-file-browser.nvim", + lazy = true, + config = function() + require("telescope").load_extension("file_browser") + end, + }, + { + "jvgrootveld/telescope-zoxide", + lazy = true, + config = function() + local z_utils = require("telescope._extensions.zoxide.utils") + local t = require("telescope") + -- Configure the extension + t.setup({ + extensions = { + zoxide = { + prompt_title = "[ Queries ]", + mappings = { + default = { + after_action = function(selection) + print("Update to (" .. selection.z_score .. ") " .. selection.path) + end, + }, + [""] = { + before_action = function(selection) + print("before C-s") + end, + action = function(selection) + vim.cmd("edit " .. selection.path) + end, + }, + [""] = { action = z_utils.create_basic_command("split") }, + }, + }, + }, + }) + + -- Load the extension + t.load_extension("zoxide") + end, + }, + { + "lervag/vimtex", + config = function() + vim.cmd("let g:vimtex_quickfix_mode=0") + vim.cmd("let g:vimtex_view_general_viewer = 'evince'") + vim.cmd("let g:vimtex_compiler_method = 'latexmk'") + vim.cmd( + "let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '--extra-mem-bot=10000000', '-synctex=1', '-interaction=nonstopmode',],}" + ) + end, + }, + { + "jbyuki/instant.nvim", + config = function() + vim.cmd("let g:instant_username = 'dashie'") + end, + }, + { + "nvim-treesitter/nvim-treesitter", + config = function(_, _) + local opts = { + ensure_installed = {}, + -- parser_install_dir = "~/.config/nvim", + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + }, + }, + }, + } + require("nvim-treesitter.configs").setup(opts) + end, + }, + { + "karb94/neoscroll.nvim", + config = function() + require("neoscroll").setup() + end, + }, + { + "kaarmu/typst.vim", + lazy = true, + event = "FileType typst", + }, + { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + plugins = { spelling = true }, + defaults = { + mode = { "n", "v" }, + ["g"] = { name = "+goto" }, + ["gz"] = { name = "+surround" }, + ["]"] = { name = "+next" }, + ["["] = { name = "+prev" }, + [""] = { name = "+tabs" }, + ["b"] = { name = "+buffer" }, + ["c"] = { name = "+code" }, + ["f"] = { name = "+file/find" }, + ["g"] = { name = "+git" }, + ["gh"] = { name = "+hunks" }, + ["q"] = { name = "+quit/session" }, + ["s"] = { name = "+search" }, + ["u"] = { name = "+ui" }, + ["w"] = { name = "+windows" }, + ["x"] = { name = "+diagnostics/quickfix" }, + ["h"] = { name = "+harpoon" }, + ["d"] = { name = "+DAP" }, + }, + }, + config = function(_, opts) + local wk = require("which-key") + wk.setup(opts) + wk.register(opts.defaults) + end, + }, + { + "f-person/git-blame.nvim", + lazy = true, + }, + { + "mg979/vim-visual-multi", + }, + { + "barreiroleo/ltex_extra.nvim", + ft = { "tex", "typst", "typ" }, + lazy = true, + }, + { + "smjonas/inc-rename.nvim", + lazy = true, + event = "BufEnter", + config = function() + require("inc_rename").setup({ + cmd_name = "IncRename", -- the name of the command + hl_group = "Substitute", -- the highlight group used for highlighting the identifier's new name + preview_empty_name = true, -- whether an empty new name should be previewed; if false the command preview will be cancelled instead + show_message = true, -- whether to display a `Renamed m instances in n files` message after a rename operation + input_buffer_type = nil, -- the type of the external input buffer to use (the only supported value is currently "dressing") + post_hook = nil, -- callback to run after renaming, receives the result table (from LSP handler) as an argument + }) + end, + }, + { + "nvim-tree/nvim-tree.lua", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("nvim-tree").setup({ + renderer = { + group_empty = true, + }, + view = { + side = "right", + }, + diagnostics = { + enable = true, + }, + }) + end, + keys = { + { + "fe", + function() + require("nvim-tree.api").tree.toggle() + end, + desc = "Explorer NvimTree (root dir)", + }, + { + "fE", + function() + require("nvim-tree.api").tree.toggle() + end, + desc = "Explorer NvimTree (cwd)", + }, + { "", "fe", desc = "Explorer NvimTree (root dir)", remap = true }, + { "", "fE", desc = "Explorer NvimTree (cwd)", remap = true }, + }, + }, + { + "rcarriga/nvim-dap-ui", + keys = { + { + "dk", + function() + require("dap").down() + end, + desc = "Down", + }, + { + "dl", + function() + require("dap").up() + end, + desc = "Up", + }, + { + "d;", + function() + require("dap").run_last() + end, + desc = "Run Last", + }, + }, + }, + { + "nvim-neotest/neotest", + dependencies = { + "rcasia/neotest-java", + }, + opts = { + adapters = { + ["neotest-java"] = { + ignore_wrapper = false, -- whether to ignore maven/gradle wrapper + junit_jar = "/home/dashie/.local/share/nvim/mason/bin/junit-standalone.jar", + -- default: .local/share/nvim/neotest-java/junit-platform-console-standalone-[version].jar + }, + }, + }, + }, + { + "DreamMaoMao/yazi.nvim", + dependencies = { + "nvim-telescope/telescope.nvim", + "nvim-lua/plenary.nvim", + }, + keys = { + { "fy", "Yazi", desc = "Toggle Yazi" }, + }, + }, + { + "sindrets/diffview.nvim", + keys = { + { "gd", "DiffviewOpen", desc = "Toggle Difftool" }, + }, + }, + { "akinsho/git-conflict.nvim", version = "*", config = true }, + { "Hoffs/omnisharp-extended-lsp.nvim" }, + { + "barreiroleo/ltex_extra.nvim", + branch = "dev", + ft = { "tex", "typst", "text" }, + -- this causes an error with fsharp since + -- they use markdown to show lsp messages + config = function() + require("ltex_extra").setup({ + load_langs = { "en-US" }, + path = vim.fn.stdpath("config") .. "/spell", + }) + end, + }, + { "ionide/Ionide-vim", ft = "fsharp" }, + { + "mrcjkb/haskell-tools.nvim", + version = "^3", + lazy = false, + }, +} diff --git a/nix/programs/oxi/default.nix b/nix/programs/oxi/default.nix new file mode 100644 index 0000000..916d3b5 --- /dev/null +++ b/nix/programs/oxi/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./oxipaste.nix + ./oxinoti.nix + ./oxishut.nix + ./oxidash.nix + ]; +} + diff --git a/nix/programs/oxi/oxidash.nix b/nix/programs/oxi/oxidash.nix new file mode 100644 index 0000000..09cb235 --- /dev/null +++ b/nix/programs/oxi/oxidash.nix @@ -0,0 +1,53 @@ +{ + xdg.configFile."oxidash/style.css" = { + text = + '' + #MainWindow { + border-radius: 10px; + } + + #MainBox { + border-radius: 10px; + } + + #MainButtonBox { + padding: 10px; + margin: 5px 0px 5px 0px; + border-radius: 5px; + border: solid 2px #327cd5; + } + + #DoNotDisturbButton { + } + + #ExitButton { + } + + #ClearNotificationsButton { + } + + #NotificationsWindow { + } + + .debugimage { + border: solid 3px blue; + } + + .Notification { + padding: 10px; + margin: 5px 0px 5px 0px; + border: solid 2px #327cd5; + border-radius: 5px; + } + + .CloseNotificationButton { + margin: 0px 5px 0px 10px; + } + .PictureButtonBox { + } + .BaseBox { + } + } + ''; + }; +} diff --git a/nix/programs/oxi/oxinoti.nix b/nix/programs/oxi/oxinoti.nix new file mode 100644 index 0000000..f6b91b9 --- /dev/null +++ b/nix/programs/oxi/oxinoti.nix @@ -0,0 +1,92 @@ +{ config, ... }: { + xdg.configFile."oxinoti/style.css" = { + text = /*css*/ + '' + @import url("/home/${config.conf.username}/.config/gtk-3.0/gtk.css"); + + #MainWindow { + background-color: transparent; + padding: 0px; + /* opacity: 0; */ + } + + .MainBox { + background-color: transparent; + padding: 0px; + /* opacity: 0; */ + } + + .NotificationBox { + background-color: #353747; + border-radius: 5px; + border: solid 1px; + margin: 0px; + padding: 5px; + } + + .NotificationLow { + border-color: green; + } + + .NotificationNormal { + border-color: purple; + } + + .NotificationUrgent { + border-color: red; + } + + .miscbox { + margin: 0px 10px 0px 0px; + } + + .bodybox { + } + + .imagebox { + margin: 0px 0px 0px 10px; + } + + .appname { + font-size: 0.8rem; + } + + .timestamp { + font-size: 0.8rem; + } + + .summary { + font-size: 0.8rem; + } + + .body { + font-size: 1.2rem; + } + + .icon { + font-size: 2rem; + } + + .image { + } + + .bold { + font-weight: bold; + } + + .italic { + font-style: italic; + } + + .underline { + text-decoration-line: underline; + } + ''; + }; + xdg.configFile."oxinoti/oxinoti.toml" = { + text = '' + timeout = 3 + dnd_override = 2 + ''; + }; +} diff --git a/nix/programs/oxi/oxipaste.nix b/nix/programs/oxi/oxipaste.nix new file mode 100644 index 0000000..03a269f --- /dev/null +++ b/nix/programs/oxi/oxipaste.nix @@ -0,0 +1,31 @@ +{ + xdg.configFile."oxipaste/style.css" = { + text = + '' + .main-window { + padding: 10px; + border-radius: 10px; + border: 2px solid #2AC3DE; + } + + .item-window { + padding: 10px; + border-radius: 10px; + border: 2px solid #C0CAF5; + } + + .item-button { + background-color: #1A1B26; + border-radius: 5px; + border: 1px solid #6D728D; + } + + .delete-button { + margin: 5px 25px 5px 5px; + } + + .item-box { + } + ''; + }; +} diff --git a/nix/programs/oxi/oxishut.nix b/nix/programs/oxi/oxishut.nix new file mode 100644 index 0000000..ec070a1 --- /dev/null +++ b/nix/programs/oxi/oxishut.nix @@ -0,0 +1,25 @@ +{ + xdg.configFile."oxishut/style.css" = { + text = + '' + #mainwindow { + border-radius: 10px; + } + + .mainbox { + border-radius: 5px; + padding: 20px; + } + + .button { + margin: 5px; + background-color: #2b2c3b; + -gtk-icon-size: 5rem; + } + + .button:hover { + background-color: #3e4152; + } + ''; + }; +} diff --git a/nix/programs/themes/default.nix b/nix/programs/themes/default.nix new file mode 100644 index 0000000..331246a --- /dev/null +++ b/nix/programs/themes/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./qt.nix + ./stylix.nix + # ./gtk3.nix + # ./gtk4.nix + ]; +} + diff --git a/home/themes/qt.nix b/nix/programs/themes/qt.nix similarity index 83% rename from home/themes/qt.nix rename to nix/programs/themes/qt.nix index 21dc324..5fb1956 100644 --- a/home/themes/qt.nix +++ b/nix/programs/themes/qt.nix @@ -1,28 +1,20 @@ -{ - config, - inputs, - pkgs, - lib, - ... -}: let +{ config, inputs, pkgs, ... }: +let username = config.conf.username; # at time of using this here, stylix might not be evaluated yet # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + base16 = pkgs.callPackage inputs.base16.lib { }; + scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme); # active_colors=#ffc0caf5, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 # disabled_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d # inactive_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d color = '' - - [ColorScheme] active_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} disabled_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} inactive_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} ''; qss = '' - QTabBar::tab:selected { color: palette(highlight); } @@ -30,34 +22,25 @@ border: none; } ''; -in { - stylix.targets.qt = { - enable = false; +in +{ + xdg.configFile."qt5ct/colors/tokyonight.conf" = { + text = "${color}"; }; - qt = { - enable = true; - style.package = pkgs.kdePackages.breeze; - style.name = lib.mkForce "breeze-dark"; + xdg.configFile."qt6ct/colors/tokyonight.conf" = { + text = "${color}"; }; - - xdg.configFile = { - "qt5ct/colors/tokyonight.conf" = { - text = "${color}"; - }; - "qt6ct/colors/tokyonight.conf" = { - text = "${color}"; - }; - "qt5ct/qss/tab.qss" = { - text = "${qss}"; - }; - "qt5ct/qt5ct.conf" = { - text = '' - + xdg.configFile."qt5ct/qss/tab.qss" = { + text = "${qss}"; + }; + xdg.configFile."qt5ct/qt5ct.conf" = { + text = + '' [Appearance] color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf custom_palette=true icon_theme=MoreWaita - standard_dialogs=xdgdesktopportal + standard_dialogs=gtk3 style=Breeze [Fonts] @@ -86,15 +69,15 @@ in { force_raster_widgets=1 ignored_applications=@Invalid() ''; - }; - "qt6ct/qt6ct.conf" = { - text = '' - + }; + xdg.configFile."qt6ct/qt6ct.conf" = { + text = + '' [Appearance] - color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf + color_scheme_path=/home/${username}/.config/qt6ct/colors/toykonight.conf custom_palette=true - standard_dialogs=xdgdesktopportal - style=Breeze + standard_dialogs=default + style=Adwaita-Dark [Fonts] fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" @@ -115,10 +98,15 @@ in { underline_shortcut=1 wheel_scroll_lines=3 + [PaletteEditor] + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4) + + [SettingsWindow] + geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\rp\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,)" + [Troubleshooting] force_raster_widgets=1 ignored_applications=@Invalid() ''; - }; }; } diff --git a/nix/programs/themes/stylix.nix b/nix/programs/themes/stylix.nix new file mode 100644 index 0000000..fcb04ce --- /dev/null +++ b/nix/programs/themes/stylix.nix @@ -0,0 +1,44 @@ +{ pkgs, config, ... }: +{ + stylix = { + enable = true; + image = ../../base/black.jpg; + polarity = "dark"; + targets = { + nixvim.enable = false; + fish.enable = false; + }; + + fonts = { + serif = { + package = pkgs.cantarell-fonts; + name = "Cantarell"; + }; + + sansSerif = { + package = pkgs.cantarell-fonts; + name = "Cantarell"; + }; + + monospace = { + package = (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }); + # name = "JetBrains Mono Nerd"; + name = "JetBrainsMono Nerd Font Mono"; + }; + + emoji = { + package = pkgs.noto-fonts-emoji; + name = "Noto Color Emoji"; + }; + }; + + cursor = { + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Classic"; + size = 24; + }; + + base16Scheme = + (if builtins.isAttrs config.conf.colorscheme then config.conf.colorscheme else "${pkgs.base16-schemes}/share/themes/${config.conf.colorscheme}.yaml"); + }; +} diff --git a/nix/programs/utils.nix b/nix/programs/utils.nix new file mode 100644 index 0000000..e2ef138 --- /dev/null +++ b/nix/programs/utils.nix @@ -0,0 +1,12 @@ +{ pkgs +, ... +}: +{ + home.packages = with pkgs; [ + keepassxc + nheko + kdeconnect + nextcloud-client + xournalpp + ]; +} diff --git a/nix/programs/xdg.nix b/nix/programs/xdg.nix new file mode 100644 index 0000000..9433496 --- /dev/null +++ b/nix/programs/xdg.nix @@ -0,0 +1,71 @@ +# Copyright (c) 2020-2021 Mihai Fufezan +# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix +{ config +, ... +}: +let + browser = [ "firefox" ]; + imageViewer = [ "imv" ]; + videoPlayer = [ "mpv" ]; + audioPlayer = [ "io.bassi.Amberol" ]; + + xdgAssociations = type: program: list: + builtins.listToAttrs (map + (e: { + name = "${type}/${e}"; + value = program; + }) + list); + + image = xdgAssociations "image" imageViewer [ "png" "svg" "jpeg" "gif" ]; + video = xdgAssociations "video" videoPlayer [ "mp4" "avi" "mkv" ]; + audio = xdgAssociations "audio" audioPlayer [ "mp3" "flac" "wav" "aac" ]; + browserTypes = + (xdgAssociations "application" browser [ + "json" + "x-extension-htm" + "x-extension-html" + "x-extension-shtml" + "x-extension-xht" + "x-extension-xhtml" + ]) + // (xdgAssociations "x-scheme-handler" browser [ + "about" + "ftp" + "http" + "https" + "unknown" + ]); + + # XDG MIME types + associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) ({ + "application/pdf" = [ "org.pwmt.zathura-pdf-mupdf" ]; + "text/html" = browser; + "text/plain" = [ "neovide" ]; + "x-scheme-handler/chrome" = [ "com.brave.browser" ]; + "inode/directory" = [ "yazi" ]; + } + // image + // video + // audio + // browserTypes); +in +{ + xdg = { + enable = true; + cacheHome = config.home.homeDirectory + "/.local/cache"; + + mimeApps = { + enable = true; + defaultApplications = associations; + }; + + userDirs = { + enable = true; + createDirectories = true; + extraConfig = { + XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots"; + }; + }; + }; +} diff --git a/nix/secrets/secrets.yaml b/nix/secrets/secrets.yaml new file mode 100644 index 0000000..6be4816 --- /dev/null +++ b/nix/secrets/secrets.yaml @@ -0,0 +1,30 @@ +hub: ENC[AES256_GCM,data:69czN3kqTYCbiwXPPUpaThm7lrpM/43nUcE0Ee3m1AscB0Huqp1LzmgVBVZ6X/NVamNipfRzN4KePmFqkGBT7V6qIewX0L6vYpLBJ7pwdv1xRF+FEkrfikqfdec28AwNCOXIOQZq3oknPpGoAVAQAsQo+SxwPaP4vZKbYpS9EA727E9REd4dVcBRW2GN3ystiX+L/Rz+mizHQfVGb6LHhj6AZWB/SGhcfGJZCfoKgwIFekjiSJhdSQemmtX1x+b7yxUwQqsUBPVtSf73zUCIYVjLwx4bdZ5OF8kITRF8ZIfp+YLN24Lt5Qeatd4FBO5AJTFOgjRjU38z6Xy3CwZMv0hp3IwqfXUd+47wiGSXSs2lygntWodcG96/KUubrChWQQxfE0vNIAu/l2sjwwre32E9mXBYn6uHFD+/kroL531KscdKdnpAACnwsomMSiJIWz3JQa6aljDeUd90VFH2kOf8VtGbqkFL9VfTrtx/dnTMaK2VJmO+bZTge+evIBgtH0Y2DP/GmaempeZIyJydx03uVCFDi+uEfGx10HMty0sUS0k=,iv:1/+m6CmUojTS4d7B76zzrwC3k5M18qkQ6q1458kG1QI=,tag:463IcCP3Tfb4JWS5K7hCjw==,type:str] +lab: ENC[AES256_GCM,data:IbIHYKp7kAP09r2t6bppLZraRIxjEsIXbfIG/R5QTGzy1uVk5LZivzepkJP6kOf3qWt/wZiBb5qLcNyL/+RZMfaV5KvlvtKhCVQ/D5qS3qB/4wKvPTdMiMzc9VTnLzUaDExMAtiYV/tcJGC/xgpkrwizJwy5WEA/d8EKUDs1p//vpv8b6035k1oV/49sw3cJ/eMGgvnuJ3sKMKpkXbUJ4zyyHKPCFoaCGdplCJDn5hZloaqxBjdZctAEgsVvKiq2HyIMNqH3YaKEJZhwMrwQMSioHA1WnBQMc0tnqWAi9rhpm8pY553HaQe0U/lpS1W5IvLj7MVxat3911WK/s95oEVLY7b7dZAzmdMau4IF/ozhxC6i2oSELw+VNqiZ/yJwfqJ7e+89UnxZdi7xMJpikOfE1qzGIPaEHj2caSf+U2sldqsRyqdf+oJK9Sof4djn5diEPkhTyLkqFCGC6QakEbprcbstBcjwu65G4BTTDy/3FJYUt0NZTHy7HDjsn/7b2Sxa1XgWbWOGBwbmMqpsSE6eJC2WmWDWtrjgO7rV6XWwzm8=,iv:uVkMdjENhj2OnHnmCyfpQAdQeXwnvTIdExDxxWVIRKc=,tag:+3lf+T2Gpa4fLC3FhbLa6A==,type:str] +dashie: ENC[AES256_GCM,data:P/+ZEelpLFrcsk8hx7CF999Wlv5OWiybjPVT1ULogCECpBAxYJglisINyJGGBSBLnp4FF45kCpFb/xsuLZGwe/o4LK6Lbf6/uwE2HSXNMMXjkD8lk3zINNXfWls6s9f/XnHsKjwp0gDGhcfMM+mbg8EAyCfkdLUWYapNQc+CIr1ilAvjzDpGhrjYw2j7FEEKiteUxPTg34DY6iKlxkuGuon4Yb2r1d5+KMiHKouomjRkvS3cAgCyTKIVybYEhCQthHJh0j76Z7O5wvfXeOkLFWE68arvOci2MC7ecx6bVUrJQDTyUSpyO9TqJneIh36STZQs9Zk24sSY8jdt59roaJPylfRmbSRnlH0Wg5vzbuu4zM/ffTaiYRZkKBYbX9wmyNh4nW7EJOD9i4lE+65VxWYI4M0EuJXqI4vaIEo2PexAWci9cp0Ui6BmY2G4PoEz0P48p2WXPnQOwSSBYY9HfeAs+oXhB4Bi+I1VUAR/BkzihBvb+d9AWcbZIurMc2h7Vlz58/2E8+QVzljHfN+pakU/FhWCt2VRhhimyF8h3Nacbk0=,iv:kmFBTzx9BNHRGv+FzdwrIvVMORprhilG8tN2C3J4BRY=,tag:jRvRDkvUE14JZZem13/5Vw==,type:str] +hub_pub: ENC[AES256_GCM,data:6vIAQWFMIR+HnERg+A4jKu/MW+e7eLQplmdJyBeuBL9tvxH1idT8C6zvMEyIPhelU6+ZYQghAlvuC4MtktI/Te0f40XvdK3Gq/DmfBrLRUgLdSjUvMeGuuKnpRX0mjCaw77YW5ES4ptZ,iv:PC9hELA0234JCk2rx6FJhMlKKaKO8WrIezJ2Q2nv6EE=,tag:R8oPaH3Sbr23oRX++OP/qg==,type:str] +lab_pub: ENC[AES256_GCM,data:rlHCiqGnoaPiQBaZQRT+bEjfNF7jNO4CGPoCOKJ1o7nv7i2jPy6Bq9OMBHXsMHI9oGfEhyKCDHdpJ65aI07KJC/fMoMoAyiNmalwNOn26jbgj84mfENS3IYbfKxQVXAUCJHE5m1cFsm7,iv:8SLdHLYq2tlfHBjdeDoByEzGuu3TURj4+KJvQfPuaWA=,tag:mmGXlRwQ0UoVIAJE6d1OUQ==,type:str] +dashie_pub: ENC[AES256_GCM,data:k6JIJOKDJcGSW47Z8y0EYxNl/vaPRVbIn35CSA57snEzYnk5GpU+1NfPDniWoAGRkpIwicgN6kpzssRlKOmVudvwMejSLv4VkLRBjrsApVFECwoIBLUNGUSDaMcIwC/BYu4jfjGaozBj,iv:0EZ0rptLdmcuTU1BGOILaaDTrc7aZGJCCxgjUESqi0M=,tag:dlQs/ugBGxnSrNj/bRSJSw==,type:str] +server_pub: ENC[AES256_GCM,data:87nTYzA8CykOPjfZS2As8+JB/ysJvHXFYbPIBA8Nus8Y3nI3Tl2F/f7mUVFBT+4mmOFTTwxghEnkpgTg/vzUm6W4wb19rIcv11eM7HYaGl5oI44a44rBJn2+PKlfIgXVgaY=,iv:O7I7kkZ44McXzCt3wH1cM3MJCShxu2O+0U0+Y6rwePo=,tag:q5D5AGMmFyiNhQNR8dRB+g==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: [] + lastmodified: "2024-07-08T18:00:49Z" + mac: ENC[AES256_GCM,data:66P0uEUhQit+EjBEhAoQP3yVAt988eYwwxnOPGahPfKDw5ud+b8atc9mT6vGK3TfQFoZfjwhRxEOmc/Wx/PA+L01S7gAFctKrnbADAfRn7HJmtX3pXunhDxI6hGyJW+CrFNiLhViMJSXHljhj/QfDmxkJ/6TSSi8uMr2iNlLA3I=,iv:AJ4RB0CV0QAumZ6o36loeR51GUxQKnEsUklIGJnn5qI=,tag:or1MamtafGlwBRr/JsL9Eg==,type:str] + pgp: + - created_at: "2024-05-14T14:35:02Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hF4DnA7H9LSNcZ4SAQdAJZzOF6GZ1VTNt2rccso305pkL5AGeeAPV0LtfpZkkVEw + 2GTK/N4MmE0YyjUAP+W3fkGawgzQDRsjSF+AB936DcL3BtfGktChl3agFBfWqprs + 1GgBCQIQ7rj9kooZpsYX93x5TSz2ZN3aeu/dcx3lHYwyqtTxdTMjK44LngfhO0qZ + zc/951nhmt6Vkj0PJY4QRkKiLPoVo/lgG4+1dv9hSJULRuZwvFQfv/7UXzq0tKrl + /xqggA6uP/rogA== + =zJOX + -----END PGP MESSAGE----- + fp: 92D29D420B5D95FCA46A12FE778CFA7A623614F3 + unencrypted_suffix: _unencrypted + version: 3.8.1 diff --git a/override/teams.nix b/override/teams.nix deleted file mode 100644 index 7d4f454..0000000 --- a/override/teams.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - lib, - copyDesktopItems, - makeDesktopItem, - chromium, - ... -}: -stdenv.mkDerivation (final: { - pname = "teams-pwa"; - name = final.pname; - nativeBuildInputs = [copyDesktopItems]; - dontUnpack = true; - - desktopItems = [ - (makeDesktopItem { - name = final.pname; - icon = final.pname; - exec = "${chromium}/bin/${ - chromium.meta.mainProgram or chromium.pname - } --app=https://teams.microsoft.com"; - desktopName = "Microsoft Teams PWA"; - genericName = "Progressive Web App for Microsoft Teams"; - categories = ["Network"]; - mimeTypes = ["x-scheme-handler/msteams"]; - }) - ]; - - meta = with lib; { - description = "Microsoft Teams PWA"; - homepage = "https://teams.microsoft.com"; - maintainers = with maintainers; [ners]; - platforms = chromium.meta.platforms; - }; -}) diff --git a/patches/darkeader.patch b/patches/darkeader.patch deleted file mode 100644 index f1663df..0000000 --- a/patches/darkeader.patch +++ /dev/null @@ -1,456 +0,0 @@ -diff --git a/src/background/user-storage.ts b/src/background/user-storage.ts -index 54612fb3b1f6..298e5032fc94 100644 ---- a/src/background/user-storage.ts -+++ b/src/background/user-storage.ts -@@ -5,7 +5,7 @@ import {PromiseBarrier} from '../utils/promise-barrier'; - import {isURLMatched} from '../utils/url'; - import {validateSettings} from '../utils/validation'; - --import {readSyncStorage, readLocalStorage, writeSyncStorage, writeLocalStorage, removeSyncStorage, removeLocalStorage} from './utils/extension-api'; -+import {readManagedStorage, readSyncStorage, readLocalStorage, writeSyncStorage, writeLocalStorage, removeSyncStorage, removeLocalStorage} from './utils/extension-api'; - import {logWarn} from './utils/log'; - - -@@ -78,12 +78,7 @@ export default class UserStorage { - return settings; - } - -- private static async loadSettingsFromStorage(): Promise { -- if (UserStorage.loadBarrier) { -- return await UserStorage.loadBarrier.entry(); -- } -- UserStorage.loadBarrier = new PromiseBarrier(); -- -+ private static async loadSettingsFromStorageWithoutManaged(): Promise { - let local = await readLocalStorage(DEFAULT_SETTINGS); - - if (local.schemeVersion < 2) { -@@ -113,10 +108,8 @@ export default class UserStorage { - if (local.syncSettings == null) { - local.syncSettings = DEFAULT_SETTINGS.syncSettings; - } -+ - if (!local.syncSettings) { -- UserStorage.migrateAutomationSettings(local); -- UserStorage.fillDefaults(local); -- UserStorage.loadBarrier.resolve(local); - return local; - } - -@@ -126,18 +119,34 @@ export default class UserStorage { - local.syncSettings = false; - UserStorage.set({syncSettings: false}); - UserStorage.saveSyncSetting(false); -- UserStorage.loadBarrier.resolve(local); - return local; - } - - const {errors: syncCfgErrors} = validateSettings($sync); - syncCfgErrors.forEach((err) => logWarn(err)); -+ return $sync; -+ } -+ -+ private static async loadSettingsFromStorage(): Promise { -+ if (UserStorage.loadBarrier) { -+ return await UserStorage.loadBarrier.entry(); -+ } -+ UserStorage.loadBarrier = new PromiseBarrier(); - -- UserStorage.migrateAutomationSettings($sync); -- UserStorage.fillDefaults($sync); -+ let settings = await UserStorage.loadSettingsFromStorageWithoutManaged(); - -- UserStorage.loadBarrier.resolve($sync); -- return $sync; -+ const managed = await readManagedStorage(settings); -+ const {errors: managedCfgErrors} = validateSettings(managed); -+ if (managedCfgErrors.length === 0) { -+ settings = managed; -+ } else { -+ managedCfgErrors.forEach((err) => logWarn(err)); -+ } -+ -+ UserStorage.migrateAutomationSettings(settings); -+ UserStorage.fillDefaults(settings); -+ UserStorage.loadBarrier.resolve(settings); -+ return settings; - } - - static async saveSettings(): Promise { -diff --git a/src/background/utils/extension-api.ts b/src/background/utils/extension-api.ts -index 6d18fc0919df..6812ac2e4224 100644 ---- a/src/background/utils/extension-api.ts -+++ b/src/background/utils/extension-api.ts -@@ -97,6 +97,19 @@ export async function readLocalStorage(defaults: - }); - } - -+export async function readManagedStorage(defaults: T): Promise { -+ return new Promise((resolve) => { -+ chrome.storage.managed.get(defaults, (managed: T) => { -+ if (chrome.runtime.lastError) { -+ console.error(chrome.runtime.lastError.message); -+ resolve(defaults); -+ return; -+ } -+ resolve(managed); -+ }); -+ }); -+} -+ - function prepareSyncStorage(values: T): {[key: string]: any} { - for (const key in values) { - const value = values[key]; -diff --git a/src/managed-storage.json b/src/managed-storage.json -new file mode 100644 -index 000000000000..e394d0f1ff60 ---- /dev/null -+++ b/src/managed-storage.json -@@ -0,0 +1,304 @@ -+{ -+ -+ "$schema": "http://json-schema.org/draft-07/schema#", -+ "type": "object", -+ "properties": { -+ "schemeVersion": { -+ "type": "integer" -+ }, -+ "enabled": { -+ "type": "boolean" -+ }, -+ "fetchNews": { -+ "type": "boolean" -+ }, -+ "theme": { -+ "$ref": "Theme" -+ }, -+ "presets": { -+ "type": "array", -+ "items": { -+ "$ref": "ThemePreset" -+ } -+ }, -+ "customThemes": { -+ "type": "array", -+ "items": { -+ "$ref": "CustomSiteConfig" -+ } -+ }, -+ "enabledByDefault": { -+ "type": "boolean" -+ }, -+ "enabledFor": { -+ "type": "array", -+ "items": { -+ "type": "string", -+ "minLength": 1 -+ } -+ }, -+ "disabledFor": { -+ "type": "array", -+ "items": { -+ "type": "string", -+ "minLength": 1 -+ } -+ }, -+ "changeBrowserTheme": { -+ "type": "boolean" -+ }, -+ "syncSettings": { -+ "type": "boolean" -+ }, -+ "syncSitesFixes": { -+ "type": "boolean" -+ }, -+ "automation": { -+ "$ref": "Automation" -+ }, -+ "time": { -+ "$ref": "TimeSettings" -+ }, -+ "location": { -+ "$ref": "LocationSettings" -+ }, -+ "previewNewDesign": { -+ "type": "boolean" -+ }, -+ "previewNewestDesign": { -+ "type": "boolean" -+ }, -+ "enableForPDF": { -+ "type": "boolean" -+ }, -+ "enableForProtectedPages": { -+ "type": "boolean" -+ }, -+ "enableContextMenus": { -+ "type": "boolean" -+ }, -+ "detectDarkTheme": { -+ "type": "boolean" -+ }, -+ // Chrome's JSON schema format is weird and doesn't support `definitions` property and thus `#/definitions` references -+ // https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-03 -+ // This "property" mimics it -+ "definitions": { -+ "type": "object", -+ "properties": { -+ "Theme": { -+ "id": "Theme", -+ "type": "object", -+ "properties": { -+ "mode": { -+ "$ref": "FilterMode" -+ }, -+ "brightness": { -+ "type": "integer", -+ "minimum": 0, -+ "maximum": 200 -+ }, -+ "contrast": { -+ "type": "integer", -+ "minimum": 0, -+ "maximum": 200 -+ }, -+ "grayscale": { -+ "type": "integer", -+ "minimum": 0, -+ "maximum": 100 -+ }, -+ "sepia": { -+ "type": "integer", -+ "minimum": 0, -+ "maximum": 100 -+ }, -+ "useFont": { -+ "type": "boolean" -+ }, -+ "fontFamily": { -+ "type": "string", -+ "minLength": 1 -+ }, -+ "textStroke": { -+ "type": "number" -+ }, -+ "engine": { -+ "type": "string", -+ "enum": [ -+ "cssFilter", -+ "svgFilter", -+ "staticTheme", -+ "dynamicTheme" -+ ] -+ }, -+ "stylesheet": { -+ "type": "string" -+ }, -+ "darkSchemeBackgroundColor": { -+ "$ref": "HexColor" -+ }, -+ "darkSchemeTextColor": { -+ "$ref": "HexColor" -+ }, -+ "lightSchemeBackgroundColor": { -+ "$ref": "HexColor" -+ }, -+ "lightSchemeTextColor": { -+ "$ref": "HexColor" -+ }, -+ "scrollbarColor": { -+ "$ref": "HexColorOrAuto" -+ }, -+ "selectionColor": { -+ "$ref": "HexColorOrAuto" -+ }, -+ "styleSystemControls": { -+ "type": "boolean" -+ }, -+ "lightColorScheme": { -+ "type": "string", -+ "minLength": 1 -+ }, -+ "darkColorScheme": { -+ "type": "string", -+ "minLength": 1 -+ }, -+ "immediateModify": { -+ "type": "boolean" -+ } -+ } -+ }, -+ "HexColor": { -+ "id": "HexColor", -+ "type": "string", -+ "pattern": "^[0-9a-f]{6}$" -+ }, -+ "HexColorOrAuto": { -+ "id": "HexColorOrAuto", -+ "type": "string", -+ "pattern": "^([0-9a-f]{6}|auto)$" -+ }, -+ "FilterMode": { -+ "id": "FilterMode", -+ "type": "integer", -+ "enum": [ -+ 0, -+ 1 -+ ] -+ }, -+ "ThemePreset": { -+ "id": "ThemePreset", -+ "type": "object", -+ "properties": { -+ "id": { -+ "type": "string", -+ "minLength": 1 -+ }, -+ "name": { -+ "type": "string", -+ "minLength": 1 -+ }, -+ "urls": { -+ "type": "array", -+ "items": { -+ "type": "string", -+ "minLength": 1 -+ } -+ }, -+ "theme": { -+ "$ref": "Theme" -+ } -+ }, -+ "required": [ -+ "id", -+ "name", -+ "urls", -+ "theme" -+ ] -+ }, -+ "CustomSiteConfig": { -+ "id": "CustomSiteConfig", -+ "type": "object", -+ "properties": { -+ "url": { -+ "type": "array", -+ "items": { -+ "type": "string", -+ "minLength": 1 -+ } -+ }, -+ "theme": { -+ "$ref": "Theme" -+ }, -+ "builtin": { -+ "type": "boolean" -+ } -+ }, -+ "required": [ -+ "url", -+ "theme" -+ ] -+ }, -+ "Automation": { -+ "id": "Automation", -+ "type": "object", -+ "properties": { -+ "enabled": { -+ "type": "boolean" -+ }, -+ "mode": { -+ "$ref": "AutomationMode" -+ }, -+ "behavior": { -+ "type": "string", -+ "enum": [ -+ "OnOff", -+ "Scheme" -+ ] -+ } -+ } -+ }, -+ "AutomationMode": { -+ "id": "AutomationMode", -+ "type": "string", -+ "enum": [ -+ "", -+ "time", -+ "system", -+ "location" -+ ] -+ }, -+ "TimeSettings": { -+ "id": "TimeSettings", -+ "type": "object", -+ "properties": { -+ "activation": { -+ "$ref": "Time" -+ }, -+ "deactivation": { -+ "$ref": "Time" -+ } -+ } -+ }, -+ "Time": { -+ "id": "Time", -+ "type": "string", -+ "pattern": "^((0?[0-9])|(1[0-9])|(2[0-3])):([0-5][0-9])$" -+ }, -+ "LocationSettings": { -+ "id": "LocationSettings", -+ "type": "object", -+ "properties": { -+ "latitude": { -+ "type": "number" -+ }, -+ "longitude": { -+ "type": "number" -+ } -+ } -+ } -+ } -+ } -+ } -+} -diff --git a/tasks/bundle-manifest.js b/tasks/bundle-manifest.js -index ae29531e67b7..f4058a129f52 100644 ---- a/tasks/bundle-manifest.js -+++ b/tasks/bundle-manifest.js -@@ -4,6 +4,7 @@ import {PLATFORM} from './platform.js'; - import * as reload from './reload.js'; - import {createTask} from './task.js'; - import {readJSON, writeJSON} from './utils.js'; -+import {copyFile} from 'node:fs/promises'; - - async function patchManifest(platform, debug, watch, test) { - const manifest = await readJSON(absolutePath('src/manifest.json')); -@@ -16,6 +17,11 @@ async function patchManifest(platform, debug, watch, test) { - if (platform === PLATFORM.CHROMIUM_MV3) { - patched.browser_action = undefined; - } -+ if (platform === PLATFORM.CHROMIUM_MV2 || platform === PLATFORM.CHROMIUM_MV3) { -+ patched.storage = { -+ managed_schema: 'managed-storage.json', -+ }; -+ } - if (debug) { - patched.version = '1'; - patched.description = `Debug build, platform: ${platform}, watch: ${watch ? 'yes' : 'no'}.`; -@@ -42,6 +48,9 @@ async function manifests({platforms, debug, watch, test}) { - const manifest = await patchManifest(platform, debug, watch, test); - const destDir = getDestDir({debug, platform}); - await writeJSON(`${destDir}/manifest.json`, manifest); -+ if (platform === PLATFORM.CHROMIUM_MV2 || platform === PLATFORM.CHROMIUM_MV3) { -+ await copyFile(absolutePath('src/managed-storage.json'), `${destDir}/managed-storage.json`); -+ } - } - } - -@@ -49,7 +58,7 @@ const bundleManifestTask = createTask( - 'bundle-manifest', - manifests, - ).addWatcher( -- ['src/manifest*.json'], -+ ['src/manifest*.json', 'src/managed-storage.json'], - async (changedFiles, _, buildPlatforms) => { - const chrome = changedFiles.some((file) => file.endsWith('manifest.json')); - const platforms = {}; diff --git a/patches/darkreader.nix b/patches/darkreader.nix deleted file mode 100644 index ef2c19f..0000000 --- a/patches/darkreader.nix +++ /dev/null @@ -1,25 +0,0 @@ -# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix -{ - lib, - dashNixAdditionalProps, - ... -}: let - stable = dashNixAdditionalProps.pkgsDarkreader; -in - stable.buildNpmPackage rec { - version = "4.9.99"; - pname = "dark-reader"; - npmDepsHash = "sha256-m41HkwgbeRRmxJALQFJl/grYjjIqFOc47ltaesob1FA="; - env.ESBUILD_BINARY_PATH = lib.getExe stable.esbuild; - patches = [./darkeader.patch]; - src = stable.fetchFromGitHub { - hash = "sha256-K375/4qOyE1Tp/T5V5uCGcNd1IVVbT1Pjdnq/8oRHj0="; - owner = "darkreader"; - repo = "darkreader"; - rev = "v${version}"; - }; - installPhase = '' - mkdir -p $out - cp build/release/darkreader-firefox.xpi $out/latest.xpi - ''; - } diff --git a/scripts/audio_control.sh b/scripts/audio_control.sh new file mode 100755 index 0000000..33cc652 --- /dev/null +++ b/scripts/audio_control.sh @@ -0,0 +1,80 @@ + +ncspot() { + NUM=$(pactl list clients short | rg "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') + CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') + pactl set-sink-input-volume "$CHANGE" "$1" + VOLUME=$(pactl list sink-inputs | rg "$NUM" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') + notify-send -a "ncspot" -r 990 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Spotify Volume: ${VOLUME}%" +} + +firefox() { + STRING=$(pactl list clients short | rg "firefox" | awk -F 'PipeWire' ' { print $1 "," } ' | tr -d ' \t\n') + # NUMS=',' read -r -a array <<< "$STRING" + readarray -td, NUMS <<<"$STRING" + declare -p NUMS + for index in "${!NUMS[@]}"; do #"${!array[@]}" + NUM=$(echo "${NUMS[index]}" | tr -d ' \t\n') + CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') + pactl set-sink-input-volume "$CHANGE" "$1" + done + VOLUME=$(pactl list sink-inputs | rg "${NUMS[0]}" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') + notify-send -a "Firefox" -r 991 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Firefox Volume: ${VOLUME}%" +} + +internal() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') + notify-send "changed audio to "$DEVICE" " + else + notify-send "failed, not available!" + fi +} + +set_volume_sink() { + pactl set-sink-volume @DEFAULT_SINK@ "$1" + CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') + notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Output Volume: ${CURRENT}%" +} + +set_volume_source() { + pactl set-source-volume @DEFAULT_SOURCE@ "$1" + CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') + notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Input Volume: ${CURRENT}%" +} + +bluetooth() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') + notify-send "changed audio to "$DEVICE" " + else + notify-send "failed, not available!" + fi +} + +mute() { + pactl set-sink-mute @DEFAULT_SINK@ toggle + MUTE=$(pactl get-sink-mute @DEFAULT_SINK@) + notify-send -a "Audio" -r 994 -u low -i audio-volume-high "Audio: $MUTE" +} + +if [ "$1" == "internal" ]; then + internal +elif [ "$1" == "bluetooth" ]; then + bluetooth +elif [ "$1" == "firefox" ]; then + firefox "$2" +elif [ "$1" == "ncspot" ]; then + ncspot "$2" +elif [ "$1" == "mute" ]; then + mute +elif [ "$1" == "sink" ]; then + set_volume_sink "$2" +elif [ "$1" == "source" ]; then + set_volume_source "$2" +fi diff --git a/scripts/change-brightness b/scripts/change-brightness new file mode 100755 index 0000000..198dc44 --- /dev/null +++ b/scripts/change-brightness @@ -0,0 +1,12 @@ +#! /bin/bash + +set_brightness() { +brightnessctl set "$1" +CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') +dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ${CURRENT}%" +} + +if [ "$1" == "brightness" ]; then + set_brightness "$2" +fi + diff --git a/scripts/part.sh b/scripts/part.sh new file mode 100755 index 0000000..ee9d5c3 --- /dev/null +++ b/scripts/part.sh @@ -0,0 +1,23 @@ +read -p "formatting disk $1 with hostname $2 is this correct? " IN +read -p "is the disk an nvme drive? " NVME +if [ "$IN" == "y" ]; then + echo "commencing" + #format disk + parted $1 mklabel gpt mkpart primary fat32 1MiB 512MiB mkpart primary linux-swap 512MiB 31029MiB mkpart primary btrfs 31029MiB 40% mkpart primary btrfs 40% 100% + if [ "$NVME" == "y" ]; then + e2label $1p1 BOOT + e2label $1p2 SWAP + e2label $1p3 ROOT + e2label $1p4 HOME + else + e2label "$1"1 BOOT + e2label "$1"2 SWAP + e2label "$1"3 ROOT + e2label "$1"4 HOME + fi + # install nixos + echo "formatting finished, continuing to install system" + nixos-install --flake ./nix/.#$2 --no-root-passwd +else + echo "aborting" +fi diff --git a/scripts/penguin1.sh b/scripts/penguin1.sh new file mode 100644 index 0000000..87dcf8e --- /dev/null +++ b/scripts/penguin1.sh @@ -0,0 +1 @@ +echo "Do you have time to talk about the lord and savior PenguinOS?" | wl-copy diff --git a/scripts/penguin2.sh b/scripts/penguin2.sh new file mode 100644 index 0000000..c256142 --- /dev/null +++ b/scripts/penguin2.sh @@ -0,0 +1,3 @@ +echo "Are you tired about ads on your operating system? About forced telemetry? About arbitrary intallation requirements like online accounts or forced hardware upgrades? +Fear not penguin is for you, free of charge and free to change. Penguin does not control you, you control penguin. +Don't delay, install penguin today: https://distrochooser.de/" | wl-copy diff --git a/streamdeck_ui_export.json b/streamdeck_ui_export.json new file mode 100644 index 0000000..5ef6493 --- /dev/null +++ b/streamdeck_ui_export.json @@ -0,0 +1,3184 @@ +{ + "state": { + "AL01H1A05148": { + "buttons": { + "0": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-1.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh ncspot -5%", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-2.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh ncspot +5%", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/skip-back.svg", + "keys": "", + "write": "", + "command": "playerctl previous --player=ncspot", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/play.svg", + "keys": "", + "write": "", + "command": "playerctl play-pause --player=ncspot", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/skip-forward.svg", + "keys": "", + "write": "", + "command": "playerctl next --player=ncspot", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-1.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh firefox -5%", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-2.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh firefox +5%", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/skip-back.svg", + "keys": "", + "write": "", + "command": "playerctl previous --player=firefox", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/play.svg", + "keys": "", + "write": "", + "command": "playerctl play-pause --player=firefox", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/skip-forward.svg", + "keys": "", + "write": "", + "command": "playerctl next --player=firefox", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-x.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh mute", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-1.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh sink -5%", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Downloads/volume-2.svg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/audio_control.sh sink +5%", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Pictures/random/Birblux/SmartSelect_20220307-191307_Samsung Internet.jpg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/penguin1.sh", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "/home/dashie/Pictures/random/Birblux/SmartSelect_20220307-191307_Samsung Internet.jpg", + "keys": "", + "write": "", + "command": "sh /home/dashie/.config/scripts/penguin2.sh", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "1": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "2": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "3": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "4": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "5": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "6": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "7": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "8": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + }, + "9": { + "0": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "1": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "2": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "3": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "4": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "5": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "6": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "7": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "8": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "9": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "10": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "11": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "12": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "13": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + }, + "14": { + "state": 0, + "states": { + "0": { + "text": "", + "icon": "", + "keys": "", + "write": "", + "command": "", + "brightness_change": 0, + "switch_page": 0, + "switch_state": 0, + "text_vertical_align": "", + "text_horizontal_align": "", + "font": "", + "font_color": "", + "font_size": 0, + "background_color": "" + } + } + } + } + }, + "display_timeout": 0, + "brightness": 99, + "brightness_dimmed": 0, + "rotation": 0, + "page": 0 + } + }, + "streamdeck_ui_version": 2 +} \ No newline at end of file